Name: series-workflow6hmkf Phase: Succeeded StartedAt: 2026-07-09 10:49:19 +0000 UTC FinishedAt: 2026-07-09 13:35:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6hmkf[0] Phase: Succeeded StartedAt: 2026-07-09 10:49:19 +0000 UTC FinishedAt: 2026-07-09 11:13:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6hmkf[0].run-triage Phase: Succeeded StartedAt: 2026-07-09 10:49:19 +0000 UTC FinishedAt: 2026-07-09 11:13:51 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "4a13f31a92f35161b499bf29638336885259da78", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZL3073X", "ZL3073X_I2C", "ZL3073X_SPI", "PTP_1588_CLOCK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "4a13f31a92f35161b499bf29638336885259da78", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZL3073X", "ZL3073X_I2C", "ZL3073X_SPI", "PTP_1588_CLOCK" ], "series_id": "87b9f9ec-7384-41f3-8dcf-64b754b2475f" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "zl3073x_dpll_ptp_gettimex64", "zl3073x_dpll_ptp_settime64", "zl3073x_dpll_ptp_adjtime", "zl3073x_dpll_ptp_adjfine", "zl3073x_dpll_ptp_adjphase", "zl3073x_dpll_ptp_enable", "zl3073x_chan_tod_read", "zl3073x_chan_tod_write", "zl3073x_chan_tod_adjust", "zl3073x_chan_phase_step", "zl3073x_chan_tie_write" ], "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+CgkJCTx0ZD4yMDI2LzA3LzA5IDExOjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pMMzA3M1gmIzM0OywKICAgICYjMzQ7WkwzMDczWF9JMkMmIzM0OywKICAgICYjMzQ7WkwzMDczWF9TUEkmIzM0OywKICAgICYjMzQ7UFRQXzE1ODhfQ0xPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQmIzM0OywKICAgICYjMzQ7emwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQmIzM0OywKICAgICYjMzQ7emwzMDczeF9kcGxsX3B0cF9hZGp0aW1lJiMzNDssCiAgICAmIzM0O3psMzA3M3hfZHBsbF9wdHBfYWRqZmluZSYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlJiMzNDssCiAgICAmIzM0O3psMzA3M3hfZHBsbF9wdHBfZW5hYmxlJiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl90b2RfcmVhZCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fdG9kX3dyaXRlJiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl90b2RfYWRqdXN0JiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl9waGFzZV9zdGVwJiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl90aWVfd3JpdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIgKHpsMzA3M3gpLiBJdCBpbXBsZW1lbnRzIHZhcmlvdXMgUFRQIGNsb2NrIG9wZXJhdGlvbnMgKGdldC9zZXQgdGltZSwgYWRqdXN0IHRpbWUvcGhhc2UvZnJlcXVlbmN5KSB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgUFRQIGlvY3RsIGludGVyZmFjZS4gRnV6emluZyB0aGVzZSBmdW5jdGlvbnMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGUgZHJpdmVyIGhhbmRsZXMgZWRnZSBjYXNlcyBhbmQgY29uY3VycmVudCBhY2Nlc3NlcyBjb3JyZWN0bHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTE6MTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxMjdlYzFkYWNlYjU1Y2U4NDkxYjY0YTlkY2Y1OGFkMTAyNWUzMDU3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgOSAxMToxMjo0NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xuaW5kZXggNWJiY2ExNDAwNTgxMzEuLmQwNTc0YWQ1NzFkM2ZhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xuQEAgLTIsNyAmIzQzOzIsNyBAQFxuIFxuIGNvbmZpZyBaTDMwNzNYXG4gXHR0cmlzdGF0ZSBcJiMzNDtNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRSBkZXZpY2VzXCYjMzQ7IGlmIENPTVBJTEVfVEVTVFxuLVx0ZGVwZW5kcyBvbiBORVRcbiYjNDM7XHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiBcdHNlbGVjdCBEUExMXG4gXHRzZWxlY3QgTkVUX0RFVkxJTktcbiBcdHNlbGVjdCBSRUdNQVBcbkBAIC0xNiw3ICYjNDM7MTYsNyBAQCBjb25maWcgWkwzMDczWFxuIFxuIGNvbmZpZyBaTDMwNzNYX0kyQ1xuIFx0dHJpc3RhdGUgXCYjMzQ7STJDIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1wmIzM0O1xuLVx0ZGVwZW5kcyBvbiBJMkMgXHUwMDI2XHUwMDI2IE5FVFxuJiM0MztcdGRlcGVuZHMgb24gSTJDIFx1MDAyNlx1MDAyNiBORVQgXHUwMDI2XHUwMDI2IFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG4gXHRzZWxlY3QgUkVHTUFQX0kyQ1xuIFx0c2VsZWN0IFpMMzA3M1hcbiBcdGhlbHBcbkBAIC0yOCw3ICYjNDM7MjgsNyBAQCBjb25maWcgWkwzMDczWF9JMkNcbiBcbiBjb25maWcgWkwzMDczWF9TUElcbiBcdHRyaXN0YXRlIFwmIzM0O1NQSSBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcJiMzNDtcbi1cdGRlcGVuZHMgb24gTkVUIFx1MDAyNlx1MDAyNiBTUElcbiYjNDM7XHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgU1BJIFx1MDAyNlx1MDAyNiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuIFx0c2VsZWN0IFJFR01BUF9TUElcbiBcdHNlbGVjdCBaTDMwNzNYXG4gXHRoZWxwXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXG5pbmRleCA0ZWMyY2Y1M2RhZDQ2OC4uNTMwMzJlNzgyZmQ0YWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uY1xuQEAgLTMsNiAmIzQzOzMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZfcHJpbnRrLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gXG5AQCAtMjAyLDYgJiM0MzsyMDMsMTEgQEAgaW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9mZXRjaChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleClcbiBcdFx0emwzMDczeF9jaGFuX3JlZnNlbF9zdGF0ZV9nZXQoY2hhbiksXG4gXHRcdHpsMzA3M3hfY2hhbl9yZWZzZWxfcmVmX2dldChjaGFuKSk7XG4gXG4mIzQzO1x0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1NURVBfVElNRV9NQVNLLFxuJiM0MztcdFx0XHQgICAgICBcdTAwMjZjaGFuLVx1MDAzZW91dF9zdGVwX3RpbWVfbWFzayk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiBcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRldi1cdTAwM2VtdWx0aW9wX2xvY2spO1xuIFxuIFx0LyogUmVhZCBEUExMIGNvbmZpZ3VyYXRpb24gZnJvbSBtYWlsYm94ICovXG5AQCAtMjM0LDYgJiM0MzsyNDAsMzA3IEBAIGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKnpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldixcbiBcdHJldHVybiBcdTAwMjZ6bGRldi1cdTAwM2VjaGFuW2luZGV4XTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQgLSB3YWl0IGZvciBUb0Qgc2VtYXBob3JlIHRvIGNsZWFyXG4mIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuJiM0MzsgKlxuJiM0MzsgKiBQb2xscyB0aGUgVG9EIGNvbnRyb2wgcmVnaXN0ZXIgdW50aWwgdGhlIHNlbWFwaG9yZSBiaXQgaXMgY2xlYXJlZCxcbiYjNDM7ICogaW5kaWNhdGluZyB0aGUgZGV2aWNlIGhhcyBjb21wbGV0ZWQgdGhlIHByZXZpb3VzIFRvRCBvcGVyYXRpb24uXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRUJVU1kgaWYgc2VtYXBob3JlIG5vdCBjbGVhcmVkLCBcdTAwM2MwIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCB0aW1lb3V0O1xuJiM0MztcdHU4IHRvZF9jdHJsO1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSwgXHUwMDI2dG9kX2N0cmwpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChGSUVMRF9HRVQoWkxfRFBMTF9UT0RfQ1RSTF9DTUQsIHRvZF9jdHJsKSkge1xuJiM0MztcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFo6XG4mIzQzO1x0XHR0aW1lb3V0ID0gWkxfUE9MTF9UT0RfV1JfVElNRU9VVF9VUztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHR0aW1lb3V0ID0gWkxfUE9MTF9UT0RfUkRfVElNRU9VVF9VUztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLFxuJiM0MztcdFx0XHRcdCAgWkxfRFBMTF9UT0RfQ1RSTF9TRU0sIHRpbWVvdXQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmMgPT0gLUVUSU1FRE9VVCA/IC1FQlVTWSA6IHJjO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9jdHJsIC0gaXNzdWUgVG9EIGNvbW1hbmRcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEBjbWQ6IFRvRCBjb21tYW5kIHRvIGV4ZWN1dGVcbiYjNDM7ICpcbiYjNDM7ICogV3JpdGVzIHRoZSBzZW1hcGhvcmUgYW5kIGNvbW1hbmQgdG8gZHBsbF90b2RfY3RybC4gVGhlIGNhbGxlciBtdXN0XG4mIzQzOyAqIGVuc3VyZSB0aGUgZGV2aWNlIGlzIHJlYWR5IChzZW1hcGhvcmUgY2xlYXIpIGJlZm9yZSBjYWxsaW5nIGFuZFxuJiM0MzsgKiBtdXN0IHdhaXQgZm9yIGNvbXBsZXRpb24gaWYgbmVlZGVkLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHU4IGNtZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksXG4mIzQzO1x0XHRcdFx0WkxfRFBMTF9UT0RfQ1RSTF9TRU0gfCBjbWQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9yZWFkIC0gcmVhZCBUb0QgcmVnaXN0ZXJzIGFmdGVyIGlzc3VpbmcgYSBjb21tYW5kXG4mIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuJiM0MzsgKiBAbmV4dF9oejogaWYgdHJ1ZSwgcmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIejsgb3RoZXJ3aXNlIHJlYWQgY3VycmVudFxuJiM0MzsgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIHRoZSByZXN1bHRcbiYjNDM7ICogQHN0czogb3B0aW9uYWwgc3lzdGVtIHRpbWVzdGFtcCBwYWlyIGZvciBjcm9zcy10aW1lc3RhbXBpbmdcbiYjNDM7ICpcbiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4mIzQzO1x0XHRcdCAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXG4mIzQzO1x0XHRcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpXG4mIzQzO3tcbiYjNDM7XHR1MzIgbnNlYztcbiYjNDM7XHR1NjQgc2VjO1xuJiM0MztcdHU4IGNtZDtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdGlmIChuZXh0X2h6KVxuJiM0MztcdFx0Y21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFo7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0Y21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVDtcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbiYjNDM7XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cHRwX3JlYWRfc3lzdGVtX3ByZXRzKHN0cyk7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLCBjbWQpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1x0cHRwX3JlYWRfc3lzdGVtX3Bvc3R0cyhzdHMpO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfcmVhZF91NDgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9TRUMoY2gpLCBcdTAwMjZzZWMpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0LyogSFcgbmFub3NlY29uZHMgYXJlIGFsd2F5cyBpbiBbMCwgTlNFQ19QRVJfU0VDKSByYW5nZSAqL1xuJiM0MztcdHJjID0gemwzMDczeF9yZWFkX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgXHUwMDI2bnNlYyk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHR0cy1cdTAwM2V0dl9zZWMgPSBzZWM7XG4mIzQzO1x0dHMtXHUwMDNldHZfbnNlYyA9IG5zZWM7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF93cml0ZSAtIHdyaXRlIFRvRCByZWdpc3RlcnMgYW5kIHRyaWdnZXIgMSBIeiB1cGRhdGVcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEB0czogdGltZSB0byBzZXRcbiYjNDM7ICpcbiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuJiM0MztcdFx0XHQgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cylcbiYjNDM7e1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbiYjNDM7XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIHRzLnR2X3NlYyk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCB0cy50dl9uc2VjKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLFxuJiM0MztcdFx0XHRcdCAgICBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCAtIGF0b21pYyBUb0QgcmVhZC1tb2RpZnktd3JpdGUgd2l0aCByb2xsb3ZlciBndWFyZFxuJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbiYjNDM7ICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgdG8gYXBwbHlcbiYjNDM7ICpcbiYjNDM7ICogUmVhZHMgdGhlIG5leHQtSHogVG9EIGFuZCBjdXJyZW50IFRvRCwgdGhlbiBjaGVja3Mgd2hldGhlciBlbm91Z2ggdGltZVxuJiM0MzsgKiByZW1haW5zIGJlZm9yZSB0aGUgbmV4dCAxIEh6IHJvbGxvdmVyIHRvIHNhZmVseSBjb21wbGV0ZSB0aGUgd3JpdGUuXG4mIzQzOyAqIElmIGxlc3MgdGhhbiAyMCBtcyByZW1haW5zLCB3YWl0cyBmb3IgdGhlIHJvbGxvdmVyIGFuZCBpbmNyZW1lbnRzIHRoZVxuJiM0MzsgKiBuZXh0LUh6IHNlY29uZHMgYnkgb25lLiBBcHBsaWVzIEBkZWx0YSBhbmQgd3JpdGVzIHRoZSByZXN1bHQgYmFjay5cbiYjNDM7ICpcbiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RhdGljIGNvbnN0IGxvbmcgdGhyZXNob2xkX25zID0gMjAgKiBOU0VDX1BFUl9NU0VDO1xuJiM0MztcdHN0cnVjdCB0aW1lc3BlYzY0IHRzX25leHQsIHRzX2N1ciwgZGlmZjtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdC8qIFJlYWQgcHJlZGljdGVkIFRvRCBhdCBuZXh0IDEgSHogdGljayAqL1xuJiM0MztcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgdHJ1ZSwgXHUwMDI2dHNfbmV4dCwgTlVMTCk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHQvKiBSZWFkIGN1cnJlbnQgVG9EIHRvIGRldGVybWluZSByZW1haW5pbmcgbWFyZ2luICovXG4mIzQzO1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCBmYWxzZSwgXHUwMDI2dHNfY3VyLCBOVUxMKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdC8qIElmIHRvbyBjbG9zZSB0byAob3IgcGFzdCkgdGhlIG5leHQgcm9sbG92ZXIsIHdhaXQgaXQgb3V0ICovXG4mIzQzO1x0ZGlmZiA9IHRpbWVzcGVjNjRfc3ViKHRzX25leHQsIHRzX2N1cik7XG4mIzQzO1x0aWYgKGRpZmYudHZfc2VjIFx1MDAzYyAwIHx8ICghZGlmZi50dl9zZWMgXHUwMDI2XHUwMDI2IGRpZmYudHZfbnNlYyBcdTAwM2MgdGhyZXNob2xkX25zKSkge1xuJiM0MztcdFx0aWYgKCFkaWZmLnR2X3NlYyBcdTAwMjZcdTAwMjYgZGlmZi50dl9uc2VjKVxuJiM0MztcdFx0XHRmc2xlZXAoKHVuc2lnbmVkIGxvbmcpZGlmZi50dl9uc2VjIC8gTlNFQ19QRVJfVVNFQyAmIzQzOyAxKTtcbiYjNDM7XHRcdHRzX25leHQudHZfc2VjJiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEFwcGx5IGRlbHRhIHRvIHRoZSBuZXh0LUh6IFRvRCAqL1xuJiM0MztcdHRzX25leHQgPSB0aW1lc3BlYzY0X2FkZCh0c19uZXh0LCBkZWx0YSk7XG4mIzQzO1x0aWYgKCF0aW1lc3BlYzY0X3ZhbGlkKFx1MDAyNnRzX25leHQpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdC8qIFdyaXRlIGFkanVzdGVkIFRvRCBiYWNrIGFuZCB3YWl0IGZvciBjb21wbGV0aW9uICovXG4mIzQzO1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZGV2LCBjaCwgdHNfbmV4dCk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCAtIHdyaXRlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgdG8gaGFyZHdhcmVcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEBvZmZzZXQ6IGZyZXF1ZW5jeSBvZmZzZXQgaW4gMl4tNDggc3RlcHNcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldClcbiYjNDM7e1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfREZfT0ZGU0VUKGNoKSwgb2Zmc2V0KTtcbiYjNDM7XHRpZiAoIXJjKVxuJiM0MztcdFx0emxkZXYtXHUwMDNlY2hhbltjaF0uZGZfb2Zmc2V0ID0gb2Zmc2V0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlIC0gYWRqdXN0IERQTEwgcGhhc2UgdXNpbmcgVElFIHdyaXRlXG4mIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuJiM0MzsgKiBAZGVsdGFfbnM6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMgKG11c3QgYmUgd2l0aGluICYjNDM7LTFzKVxuJiM0MzsgKlxuJiM0MzsgKiBDb252ZXJ0cyBuYW5vc2Vjb25kcyB0byBUSUUgdW5pdHMgKDAuMDEgcHMpIGFuZCB3cml0ZXMgVElFIGRhdGFcbiYjNDM7ICogdG8gdGhlIHNwZWNpZmllZCBjaGFubmVsLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7aW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucylcbiYjNDM7e1xuJiM0MztcdHM2NCB0aWVfZGF0YTtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRldi1cdTAwM2V0aWVfbG9jayk7XG4mIzQzO1xuJiM0MztcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUSUUgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXG4mIzQzO1x0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsXG4mIzQzO1x0XHRcdFx0ICBaTF9EUExMX1RJRV9DVFJMX09QLFxuJiM0MztcdFx0XHRcdCAgWkxfUE9MTF9USUVfV1JfVElNRU9VVF9VUyk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHQvKiBDb252ZXJ0IG5zIHRvIFRJRSB1bml0cyAoMC4wMSBwcyA9IDEwXi0xNCBzKSAqL1xuJiM0MztcdHRpZV9kYXRhID0gZGVsdGFfbnMgKiAxMDAwMDBMTDtcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0RBVEEoY2gpLCB0aWVfZGF0YSk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0ssIEJJVChjaCkpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLFxuJiM0MztcdFx0XHRcdFpMX0RQTExfVElFX0NUUkxfT1BfV1IpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAgLSBleGVjdXRlIG9uZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb25cbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEBvdXRfbWFzazogYml0bWFzayBvZiBvdXRwdXRzIHRvIHN0ZXBcbiYjNDM7ICogQHN0ZXBfY3ljbGVzOiBwaGFzZSBzdGVwIGluIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlc1xuJiM0MzsgKiBAdG9kX3N0ZXA6IGFsc28gc3RlcCB0aGUgVG9EIGNvdW50ZXJcbiYjNDM7ICpcbiYjNDM7ICogQWxsIG1hc2tlZCBvdXRwdXRzIG11c3QgdXNlIHN5bnRoZXNpemVycyBvZiB0aGUgc2FtZSBmcmVxdWVuY3kgc2luY2VcbiYjNDM7ICogdGhlIHN0ZXAgdmFsdWUgaXMgaW4gc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7aW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuJiM0MztcdFx0XHQgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsXG4mIzQzO1x0XHRcdCAgICBib29sIHRvZF9zdGVwKVxuJiM0Mzt7XG4mIzQzO1x0dTggY3RybDtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRldi1cdTAwM2VwaGFzZV9zdGVwX2xvY2spO1xuJiM0MztcbiYjNDM7XHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgcGhhc2Ugc3RlcCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbiYjNDM7XHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTCxcbiYjNDM7XHRcdFx0XHQgIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AsXG4mIzQzO1x0XHRcdFx0ICBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VUyk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfREFUQSxcbiYjNDM7XHRcdFx0ICAgICAgIHN0ZXBfY3ljbGVzKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHJjID0gemwzMDczeF93cml0ZV91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLLCBvdXRfbWFzayk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9OVU1CRVIsIDEpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0Y3RybCA9IEZJRUxEX1BSRVAoWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9EUExMLCBjaCkgfFxuJiM0MztcdCAgICAgICBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AsXG4mIzQzO1x0XHRcdCAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURSk7XG4mIzQzO1x0aWYgKHRvZF9zdGVwKVxuJiM0MztcdFx0Y3RybCB8PSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX1RPRF9TVEVQO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwsIGN0cmwpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQgLSBjb21taXQgRFBMTCBjaGFubmVsIHN0YXRlIGNoYW5nZXMgdG8gaGFyZHdhcmVcbiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXG5pbmRleCBkYzljNmQ5NWJkZWU3NS4uOWRjNWEzZjE5OTFmMTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaFxuQEAgLTUsMTAgJiM0Mzs1LDEyIEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0ZGRlZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWU2NC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O3JlZ3MuaFwmIzM0O1xuIFxuJiM0MztzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXA7XG4gc3RydWN0IHpsMzA3M3hfZGV2O1xuIFxuIC8qKlxuQEAgLTE2LDYgJiM0MzsxOCw3IEBAIHN0cnVjdCB6bDMwNzN4X2RldjtcbiAgKiBAY3RybDogRFBMTCBjb250cm9sIHJlZ2lzdGVyIHZhbHVlXG4gICogQG1vZGVfcmVmc2VsOiBtb2RlIGFuZCByZWZlcmVuY2Ugc2VsZWN0aW9uIHJlZ2lzdGVyIHZhbHVlXG4gICogQHJlZl9wcmlvOiByZWZlcmVuY2UgcHJpb3JpdHkgcmVnaXN0ZXJzICg0IGJpdHMgcGVyIHJlZiwgUC9OIHBhY2tlZClcbiYjNDM7ICogQG91dF9zdGVwX3RpbWVfbWFzazogb3V0cHV0IHN0ZXAtdGltZSBtYXNrXG4gICogQG1vbl9zdGF0dXM6IG1vbml0b3Igc3RhdHVzIHJlZ2lzdGVyIHZhbHVlXG4gICogQHJlZnNlbF9zdGF0dXM6IHJlZmVyZW5jZSBzZWxlY3Rpb24gc3RhdHVzIHJlZ2lzdGVyIHZhbHVlXG4gICogQGRmX29mZnNldDogZnJlcXVlbmN5IG9mZnNldCB2cyB0cmFja2VkIHJlZmVyZW5jZSBpbiAyXi00OCBzdGVwc1xuQEAgLTI2LDYgJiM0MzsyOSw5IEBAIHN0cnVjdCB6bDMwNzN4X2NoYW4ge1xuIFx0XHR1OFx0bW9kZV9yZWZzZWw7XG4gXHRcdHU4XHRyZWZfcHJpb1taTDMwNzNYX05VTV9SRUZTIC8gMl07XG4gXHQpO1xuJiM0MztcdHN0cnVjdF9ncm91cChpbnYsIC8qIEludmFyaWFudHMgKi9cbiYjNDM7XHRcdHUxNlx0b3V0X3N0ZXBfdGltZV9tYXNrO1xuJiM0MztcdCk7XG4gXHRzdHJ1Y3RfZ3JvdXAoc3RhdCxcbiBcdFx0dThcdG1vbl9zdGF0dXM7XG4gXHRcdHU4XHRyZWZzZWxfc3RhdHVzO1xuQEAgLTQyLDYgJiM0Mzs0OCwyMCBAQCBpbnQgemwzMDczeF9jaGFuX3N0YXRlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCxcbiBpbnQgemwzMDczeF9jaGFuX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7XG4gaW50IHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpO1xuIFxuJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuJiM0MztcdFx0XHQgIGJvb2wgbmV4dF9oeiwgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxuJiM0MztcdFx0XHQgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKTtcbiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCB0aW1lc3BlYzY0IHRzKTtcbiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuJiM0MztcdFx0XHQgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpO1xuJiM0MztpbnQgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4mIzQzO1x0XHRcdCAgICB1MTYgb3V0X21hc2ssIHMzMiBzdGVwX2N5Y2xlcywgYm9vbCB0b2Rfc3RlcCk7XG4mIzQzO1xuJiM0MztpbnQgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBvZmZzZXQpO1xuJiM0MztcbiYjNDM7aW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucyk7XG4mIzQzO1xuIC8qKlxuICAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfZ2V0IC0gZ2V0IGNhY2hlZCBkZl9vZmZzZXQgdnMgdHJhY2tlZCByZWZlcmVuY2VcbiAgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG5AQCAtMjAwLDYgJiM0MzsyMjAsMjEgQEAgc3RhdGljIGlubGluZSBib29sIHpsMzA3M3hfY2hhbl9tb2RlX2lzX3JlZmxvY2soY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcbiBcdHJldHVybiB6bDMwNzN4X2NoYW5fbW9kZV9nZXQoY2hhbikgPT0gWkxfRFBMTF9NT0RFX1JFRlNFTF9NT0RFX1JFRkxPQ0s7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllIC0gY2hlY2sgaWYgY2hhbm5lbCBtb2RlIHN1cHBvcnRzIFRJRSB3cml0ZVxuJiM0MzsgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG4mIzQzOyAqXG4mIzQzOyAqIFRJRSB3cml0ZSBpcyBzdXBwb3J0ZWQgaW4gQVVUTyBhbmQgUkVGTE9DSyBtb2RlcyByZWdhcmRsZXNzIG9mIGxvY2sgc3RhdGUuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogdHJ1ZSBpZiBUSUUgd3JpdGUgaXMgc3VwcG9ydGVkLCBmYWxzZSBvdGhlcndpc2VcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbFxuJiM0Mzt6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcbiYjNDM7e1xuJiM0MztcdHJldHVybiB6bDMwNzN4X2NoYW5fbW9kZV9pc19hdXRvKGNoYW4pIHx8XG4mIzQzO1x0XHR6bDMwNzN4X2NoYW5fbW9kZV9pc19yZWZsb2NrKGNoYW4pO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIHpsMzA3M3hfY2hhbl9pc19ob19yZWFkeSAtIGNoZWNrIGlmIGhvbGRvdmVyIGlzIHJlYWR5XG4gICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuQEAgLTIzMyw0ICYjNDM7MjY4LDE3IEBAIHN0YXRpYyBpbmxpbmUgdTggemwzMDczeF9jaGFuX3JlZnNlbF9yZWZfZ2V0KGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXG4gXHRyZXR1cm4gRklFTERfR0VUKFpMX0RQTExfUkVGU0VMX1NUQVRVU19SRUZTRUwsIGNoYW4tXHUwMDNlcmVmc2VsX3N0YXR1cyk7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX2lzX291dF9zdGVwcGVkIC0gY2hlY2sgaWYgb3V0cHV0IGlzIGluIHN0ZXAtdGltZSBtYXNrXG4mIzQzOyAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbiYjNDM7ICogQG91dDogb3V0cHV0IGluZGV4XG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogdHJ1ZSBpZiBvdXRwdXQgaXMgYWZmZWN0ZWQgYnkgc3RlcC10aW1lIG9wZXJhdGlvbnNcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbFxuJiM0Mzt6bDMwNzN4X2NoYW5faXNfb3V0X3N0ZXBwZWQoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiwgdTggb3V0KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuICEhKGNoYW4tXHUwMDNlb3V0X3N0ZXBfdGltZV9tYXNrIFx1MDAyNiBCSVQob3V0KSk7XG4mIzQzO31cbiYjNDM7XG4gI2VuZGlmIC8qIF9aTDMwNzNYX0NIQU5fSCAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1xuaW5kZXggN2Y1YWZhYWFlNjM0MmYuLmIyZjlmYzk3ZmQxYjY4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcbkBAIC0xMDMzLDYgJiM0MzsxMDMzLDE0IEBAIGludCB6bDMwNzN4X2Rldl9wcm9iZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxuIFx0ICogYW5kL29yIHBvbGxzIGFyZSByZXF1aXJlZCB0byBiZSBkb25lIGF0b21pY2FsbHkuXG4gXHQgKi9cbiBcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVx1MDAzZWRldiwgXHUwMDI2emxkZXYtXHUwMDNlbXVsdGlvcF9sb2NrKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIHJjLFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXG5cJiMzNDspO1xuJiM0MztcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVx1MDAzZWRldiwgXHUwMDI2emxkZXYtXHUwMDNlcGhhc2Vfc3RlcF9sb2NrKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIHJjLFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXG5cJiMzNDspO1xuJiM0MztcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVx1MDAzZWRldiwgXHUwMDI2emxkZXYtXHUwMDNldGllX2xvY2spO1xuIFx0aWYgKHJjKVxuIFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIHJjLFxuIFx0XHRcdFx0ICAgICBcJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcblwmIzM0Oyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oXG5pbmRleCA3OGRjMjA4ZjNlZWEyYS4uMmRjODM2ZDBjOGY2YjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaFxuQEAgLTI2LDYgJiM0MzsyNiwxMCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsO1xuICNkZWZpbmUgWkxfUE9MTF9IV1JFR19USU1FT1VUX1VTXHQoNTAgKiBVU0VDX1BFUl9NU0VDKVxuICNkZWZpbmUgWkxfUE9MTF9NQl9USU1FT1VUX1VTXHRcdCgzMCAqIFVTRUNfUEVSX01TRUMpXG4gI2RlZmluZSBaTF9QT0xMX1BIQVNFX0VSUl9USU1FT1VUX1VTXHQoNTAgKiBVU0VDX1BFUl9NU0VDKVxuJiM0MzsjZGVmaW5lIFpMX1BPTExfUEhBU0VfU1RFUF9USU1FT1VUX1VTXHQoMzAwMCAqIFVTRUNfUEVSX01TRUMpXG4mIzQzOyNkZWZpbmUgWkxfUE9MTF9USUVfV1JfVElNRU9VVF9VU1x0KDEwMDAgKiBVU0VDX1BFUl9NU0VDKVxuJiM0MzsjZGVmaW5lIFpMX1BPTExfVE9EX1JEX1RJTUVPVVRfVVNcdCgzMCAqIFVTRUNfUEVSX01TRUMpXG4mIzQzOyNkZWZpbmUgWkxfUE9MTF9UT0RfV1JfVElNRU9VVF9VU1x0KDEwMDAgKiBVU0VDX1BFUl9NU0VDKVxuIFxuIGVudW0gemwzMDczeF9mbGFncyB7XG4gXHRaTDMwNzNYX0ZMQUdfUkVGX1BIQVNFX0NPTVBfMzJfQklULFxuQEAgLTU1LDYgJiM0Mzs1OSw4IEBAIHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mbyB7XG4gICogQHJlZ21hcDogcmVnbWFwIHRvIGFjY2VzcyBkZXZpY2UgcmVnaXN0ZXJzXG4gICogQGluZm86IGRldGVjdGVkIGNoaXAgaW5mb1xuICAqIEBtdWx0aW9wX2xvY2s6IHRvIHNlcmlhbGl6ZSBtdWx0aXBsZSByZWdpc3RlciBvcGVyYXRpb25zXG4mIzQzOyAqIEB0aWVfbG9jazogdG8gc2VyaWFsaXplIFRJRSB3cml0ZSBvcGVyYXRpb25zXG4mIzQzOyAqIEBwaGFzZV9zdGVwX2xvY2s6IHRvIHNlcmlhbGl6ZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb25zXG4gICogQHJlZjogYXJyYXkgb2YgaW5wdXQgcmVmZXJlbmNlcyYjMzk7IGludmFyaWFudHNcbiAgKiBAb3V0OiBhcnJheSBvZiBvdXRzJiMzOTsgaW52YXJpYW50c1xuICAqIEBzeW50aDogYXJyYXkgb2Ygc3ludGhzJiMzOTsgaW52YXJpYW50c1xuQEAgLTcxLDYgJiM0Mzs3Nyw4IEBAIHN0cnVjdCB6bDMwNzN4X2RldiB7XG4gXHRzdHJ1Y3QgcmVnbWFwXHRcdFx0KnJlZ21hcDtcbiBcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mb1x0KmluZm87XG4gXHRzdHJ1Y3QgbXV0ZXhcdFx0XHRtdWx0aW9wX2xvY2s7XG4mIzQzO1x0c3RydWN0IG11dGV4XHRcdFx0dGllX2xvY2s7XG4mIzQzO1x0c3RydWN0IG11dGV4XHRcdFx0cGhhc2Vfc3RlcF9sb2NrO1xuIFxuIFx0LyogSW52YXJpYW50cyAqL1xuIFx0c3RydWN0IHpsMzA3M3hfcmVmXHRyZWZbWkwzMDczWF9OVU1fUkVGU107XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jXG5pbmRleCBkOTFmNTJiNThlYWUzNC4uNzQwMDFlNmQ0YTMyZjUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuY1xuQEAgLTIsNiAmIzQzOzIsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnVnLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jb250YWluZXJfb2YuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Rldl9wcmludGsuaFx1MDAzZVxuQEAgLTE0LDYgJiM0MzsxNSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwcmludGYuaFx1MDAzZVxuIFxuQEAgLTQyLDYgJiM0Mzs0NCw3IEBAXG4gICogQHBoYXNlX29mZnNldDogbGFzdCBzYXZlZCBwaW4gcGhhc2Ugb2Zmc2V0XG4gICogQGZyZXFfb2Zmc2V0OiBsYXN0IHNhdmVkIGZyYWN0aW9uYWwgZnJlcXVlbmN5IG9mZnNldFxuICAqIEBtZWFzdXJlZF9mcmVxOiBsYXN0IHNhdmVkIG1lYXN1cmVkIGZyZXF1ZW5jeVxuJiM0MzsgKiBAcGVyb3V0X2lkeDogUFRQIHBlcm91dCBjaGFubmVsIGluZGV4LCBvciAtMSBpZiBub3QgcGVyb3V0LWVsaWdpYmxlXG4gICovXG4gc3RydWN0IHpsMzA3M3hfZHBsbF9waW4ge1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0bGlzdDtcbkBAIC01OSw2ICYjNDM7NjIsNyBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiB7XG4gXHRzNjRcdFx0XHRwaGFzZV9vZmZzZXQ7XG4gXHRzNjRcdFx0XHRmcmVxX29mZnNldDtcbiBcdHUzMlx0XHRcdG1lYXN1cmVkX2ZyZXE7XG4mIzQzO1x0czhcdFx0XHRwZXJvdXRfaWR4O1xuIH07XG4gXG4gLypcbkBAIC05MzYsMjEgJiM0Mzs5NDAsMTcgQEAgemwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxuIH1cbiBcbiBzdGF0aWMgaW50XG4temwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxuLVx0XHRcdFx0ICAgICAgdm9pZCAqcGluX3ByaXYsXG4tXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXG4tXHRcdFx0XHQgICAgICB2b2lkICpkcGxsX3ByaXYsIHU2NCBmcmVxdWVuY3ksXG4tXHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzQzO19femwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldChzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluLFxuJiM0MztcdFx0XHRcdFx0dTY0IGZyZXF1ZW5jeSlcbiB7XG4tXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBkcGxsX3ByaXY7XG4gXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbi1cdHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4gPSBwaW5fcHJpdjtcbiBcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X3N5bnRoICpzeW50aDtcbiBcdHUzMiBuZXdfZGl2LCBzeW50aF9mcmVxO1xuIFx0c3RydWN0IHpsMzA3M3hfb3V0IG91dDtcbiBcdHU4IG91dF9pZDtcbiBcbi1cdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4gXG4gXHRvdXRfaWQgPSB6bDMwNzN4X291dHB1dF9waW5fb3V0X2dldChwaW4tXHUwMDNlaWQpO1xuIFx0b3V0ID0gKnpsMzA3M3hfb3V0X3N0YXRlX2dldCh6bGRldiwgb3V0X2lkKTtcbkBAIC0xMDExLDYgJiM0MzsxMDExLDIxIEBAIHpsMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3BpbixcbiBcdHJldHVybiB6bDMwNzN4X291dF9zdGF0ZV9zZXQoemxkZXYsIG91dF9pZCwgXHUwMDI2b3V0KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7emwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxuJiM0MztcdFx0XHRcdCAgICAgIHZvaWQgKnBpbl9wcml2LFxuJiM0MztcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcbiYjNDM7XHRcdFx0XHQgICAgICB2b2lkICpkcGxsX3ByaXYsIHU2NCBmcmVxdWVuY3ksXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gZHBsbF9wcml2O1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gX196bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfc2V0KHpsZHBsbCwgcGluX3ByaXYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBmcmVxdWVuY3kpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnRcbiB6bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9waGFzZV9hZGp1c3RfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXG4gXHRcdFx0XHRcdCB2b2lkICpwaW5fcHJpdixcbkBAIC0xNjA4LDYgJiM0MzsxNjIzLDcgQEAgemwzMDczeF9kcGxsX3Bpbl9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwsIGVudW0gZHBsbF9waW5fZGlyZWN0aW9uIGRpcixcbiBcdHBpbi1cdTAwM2VkcGxsID0gemxkcGxsO1xuIFx0cGluLVx1MDAzZWRpciA9IGRpcjtcbiBcdHBpbi1cdTAwM2VpZCA9IGlkO1xuJiM0MztcdHBpbi1cdTAwM2VwZXJvdXRfaWR4ID0gLTE7XG4gXG4gXHRyZXR1cm4gcGluO1xuIH1cbkBAIC0xNjI2LDYgJiM0MzsxNjQyLDQ0IEBAIHpsMzA3M3hfZHBsbF9waW5fZnJlZShzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluKVxuIFx0a2ZyZWUocGluKTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcGluX2lzX3Blcm91dCAtIGNoZWNrIGlmIG91dHB1dCBwaW4gaXMgcGVyb3V0LWVsaWdpYmxlXG4mIzQzOyAqIEBwaW46IERQTEwgcGluIHRvIGNoZWNrXG4mIzQzOyAqIEBwcm9wczogcGluIHByb3BlcnRpZXMgKGFscmVhZHkgZmV0Y2hlZCBieSBjYWxsZXIpXG4mIzQzOyAqXG4mIzQzOyAqIEFuIG91dHB1dCBwaW4gaXMgZWxpZ2libGUgZm9yIFBUUCBwZXJpb2RpYyBvdXRwdXQgaWYgaXQgaXMgc2luZ2xlLWVuZGVkXG4mIzQzOyAqIChub3QgZGlmZmVyZW50aWFsKSBhbmQgc3VwcG9ydHMgMSBIeiBpbiBpdHMgZnJlcXVlbmN5IGxpc3QuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogdHJ1ZSBpZiBlbGlnaWJsZSwgZmFsc2Ugb3RoZXJ3aXNlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgYm9vbFxuJiM0Mzt6bDMwNzN4X2RwbGxfcGluX2lzX3Blcm91dChzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluLFxuJiM0MztcdFx0XHQgICBjb25zdCBzdHJ1Y3QgemwzMDczeF9waW5fcHJvcHMgKnByb3BzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gcGluLVx1MDAzZWRwbGw7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjtcbiYjNDM7XHR1OCBvdXRfaWQ7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGlmICh6bDMwNzN4X2RwbGxfaXNfaW5wdXRfcGluKHBpbikpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdG91dF9pZCA9IHpsMzA3M3hfb3V0cHV0X3Bpbl9vdXRfZ2V0KHBpbi1cdTAwM2VpZCk7XG4mIzQzO1x0aWYgKHpsMzA3M3hfZGV2X291dF9pc19kaWZmKHpsZHBsbC1cdTAwM2VkZXYsIG91dF9pZCkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCk7XG4mIzQzO1x0aWYgKCF6bDMwNzN4X2NoYW5faXNfb3V0X3N0ZXBwZWQoY2hhbiwgb3V0X2lkKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcHJvcHMtXHUwMDNlZHBsbF9wcm9wcy5mcmVxX3N1cHBvcnRlZF9udW07IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAocHJvcHMtXHUwMDNlZHBsbF9wcm9wcy5mcmVxX3N1cHBvcnRlZFtpXS5taW4gPT0gMSlcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogemwzMDczeF9kcGxsX3Bpbl9yZWdpc3RlciAtIHJlZ2lzdGVyIERQTEwgcGluXG4gICogQHBpbjogcG9pbnRlciB0byBEUExMIHBpblxuQEAgLTE2NjcsNiAmIzQzOzE3MjEsOCBAQCB6bDMwNzN4X2RwbGxfcGluX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4sIHUzMiBpbmRleClcbiBcdFx0aWYgKHBpbi1cdTAwM2VwcmlvID09IFpMX0RQTExfUkVGX1BSSU9fTk9ORSlcbiBcdFx0XHQvKiBDbGFtcCBwcmlvIHRvIG1heCB2YWx1ZSAqL1xuIFx0XHRcdHBpbi1cdTAwM2VwcmlvID0gWkxfRFBMTF9SRUZfUFJJT19NQVg7XG4mIzQzO1x0fSBlbHNlIGlmICh6bDMwNzN4X2RwbGxfcGluX2lzX3Blcm91dChwaW4sIHByb3BzKSkge1xuJiM0MztcdFx0cGluLVx1MDAzZXBlcm91dF9pZHggPSB6bGRwbGwtXHUwMDNlcHRwX2luZm8ubl9wZXJfb3V0JiM0MzsmIzQzOztcbiBcdH1cbiBcbiBcdC8qIENyZWF0ZSBvciBnZXQgZXhpc3RpbmcgRFBMTCBwaW4gKi9cbkBAIC0xODk3LDYgJiM0MzsxOTUzLDggQEAgemwzMDczeF9kcGxsX3BpbnNfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIFx0dTggaWQsIGluZGV4O1xuIFx0aW50IHJjO1xuIFxuJiM0MztcdHpsZHBsbC1cdTAwM2VwdHBfaW5mby5uX3Blcl9vdXQgPSAwO1xuJiM0MztcbiBcdC8qIFByb2Nlc3MgaW5wdXQgcGlucyAqL1xuIFx0Zm9yIChpbmRleCA9IDA7IGluZGV4IFx1MDAzYyBaTDMwNzNYX05VTV9QSU5TOyBpbmRleCYjNDM7JiM0MzspIHtcbiBcdFx0LyogRmlyc3QgaW5wdXQgcGlucyBhbmQgdGhlbiBvdXRwdXQgcGlucyAqL1xuQEAgLTIyODAsNDUgJiM0MzsyMzM4LDQ0NyBAQCB6bDMwNzN4X2RwbGxfaW5pdF9maW5lX3BoYXNlX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxuIFx0cmV0dXJuIHJjO1xuIH1cbiBcbiYjNDM7LyogTWF4aW11bSBmcmVxdWVuY3kgYWRqdXN0bWVudDogJiM0MzstMSUgb2Ygbm9taW5hbCBpbiBwcGIgKi9cbiYjNDM7I2RlZmluZSBaTDMwNzNYX0RQTExfUFRQX01BWF9BREpcdDEwMDAwMDAwXG4mIzQzO1xuIC8qKlxuLSAqIHpsMzA3M3hfZHBsbF9hbGxvYyAtIGFsbG9jYXRlIERQTEwgZGV2aWNlXG4tICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4tICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyXG4mIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCAtIHJlYWQgY3VycmVudCB0aW1lIGZyb20gVG9EIGNvdW50ZXJzXG4mIzQzOyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xuJiM0MzsgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIGN1cnJlbnQgdGltZVxuJiM0MzsgKiBAc3RzOiBvcHRpb25hbCBzeXN0ZW0gdGltZXN0YW1wIHBhaXIgZm9yIGNyb3NzLXRpbWVzdGFtcGluZ1xuICAqXG4tICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIHB0cF9pbmZvKTtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRwbGwtXHUwMDNlZGV2LCB6bGRwbGwtXHUwMDNlaWQsIGZhbHNlLCB0cywgc3RzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0IC0gc2V0IFRvRCBjb3VudGVycyB0byBnaXZlbiB0aW1lXG4mIzQzOyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xuJiM0MzsgKiBAdHM6IHRpbWVzcGVjIHdpdGggdGltZSB0byBzZXRcbiAgKlxuLSAqIFJldHVybjogcG9pbnRlciB0byBEUExMIGRldmljZSBvbiBzdWNjZXNzLCBlcnJvciBwb2ludGVyIG9uIGVycm9yXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4gICovXG4tc3RydWN0IHpsMzA3M3hfZHBsbCAqXG4temwzMDczeF9kcGxsX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKVxuJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcbiYjNDM7XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpXG4ge1xuLVx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsO1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxuJiM0MztcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4gXG4tXHR6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTtcbi1cdGlmICghemxkcGxsKVxuLVx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuIFxuLVx0emxkcGxsLVx1MDAzZWRldiA9IHpsZGV2O1xuLVx0emxkcGxsLVx1MDAzZWlkID0gY2g7XG4tXHRtdXRleF9pbml0KFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbi1cdElOSVRfTElTVF9IRUFEKFx1MDAyNnpsZHBsbC1cdTAwM2VwaW5zKTtcbiYjNDM7XHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF93cml0ZSh6bGRwbGwtXHUwMDNlZGV2LCB6bGRwbGwtXHUwMDNlaWQsICp0cyk7XG4mIzQzO31cbiBcbi1cdHJldHVybiB6bGRwbGw7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCAtIGFkanVzdCBzdWItc2Vjb25kIHRpbWUgdmlhIHBoYXNlIHN0ZXBcbiYjNDM7ICogQHpsZHBsbDogRFBMTCBjaGFubmVsXG4mIzQzOyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzIChtdXN0IGJlIHdpdGhpbiAoLU5TRUNfUEVSX1NFQyxcbiYjNDM7ICogICAgICAgICBOU0VDX1BFUl9TRUMpKVxuJiM0MzsgKlxuJiM0MzsgKiBVc2VzIHRoZSBvdXRwdXQgcGhhc2Ugc3RlcCBtZWNoYW5pc20gd2l0aCB0b2Rfc3RlcD0xIHRvIGFkanVzdCBib3RoXG4mIzQzOyAqIHRoZSBvdXRwdXQgY2xvY2sgcGhhc2UgYW5kIHRoZSBUb0QgY291bnRlciBzaW11bHRhbmVvdXNseS4gVGhpcyBrZWVwc1xuJiM0MzsgKiBvdXRwdXRzIGFuZCBUb0QgY29oZXJlbnQuIE9ubHkgdmFsaWQgaW4gTkNPIG1vZGUuXG4mIzQzOyAqXG4mIzQzOyAqIE91dHB1dHMgYXJlIGdyb3VwZWQgYnkgc3ludGhlc2l6ZXIgc2luY2UgdGhlIHBoYXNlIHN0ZXAgdmFsdWUgaXMgaW5cbiYjNDM7ICogc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzLiBUaGUgZmlyc3Qgc3ludGggZ3JvdXAgd2l0aCBlbmFibGVkIG91dHB1dHNcbiYjNDM7ICogdXNlcyB0b2Rfc3RlcCB0byBhZGp1c3QgYm90aCBvdXRwdXRzIGFuZCB0aGUgVG9EIGNvdW50ZXIuIFJlbWFpbmluZ1xuJiM0MzsgKiBncm91cHMgc3RlcCBvdXRwdXRzIG9ubHkuIElmIG5vIHN5bnRoIGhhcyBlbmFibGVkIG91dHB1dHMsIHRoZSBUb0RcbiYjNDM7ICogY291bnRlciBpcyBzdGVwcGVkIGFsb25lIHVzaW5nIGFuIGVtcHR5IG91dHB1dCBtYXNrICh0aGUgRlcgdXNlcyB0aGVcbiYjNDM7ICogbG93ZXN0LUlEIHN5bnRoJiMzOTtzIHBlcmlvZCBmb3IgdGhlIGNvbnZlcnNpb24pLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVPUE5PVFNVUFAgaWYgbm8gc3ludGhzIGF2YWlsYWJsZSwgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgczY0IGRlbHRhKVxuJiM0Mzt7XG4mIzQzO1x0dTE2IHN5bnRoX21hc2tbWkwzMDczWF9OVU1fU1lOVEhTXSA9IHt9O1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuJiM0MztcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X3N5bnRoICpzeW50aDtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW47XG4mIzQzO1x0dTMyIGZpcnN0X3N5bnRoX2ZyZXEgPSAwO1xuJiM0MztcdGJvb2wgdG9kX3N0ZXBwZWQgPSBmYWxzZTtcbiYjNDM7XHRzMzIgc3RlcF9jeWNsZXM7XG4mIzQzO1x0dTMyIHN5bnRoX2ZyZXE7XG4mIzQzO1x0aW50IHJjO1xuJiM0MztcdHU4IGk7XG4mIzQzO1xuJiM0MztcdGNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQpO1xuJiM0MztcbiYjNDM7XHQvKiBCdWlsZCBwZXItc3ludGggb3V0cHV0IG1hc2tzIGZyb20gcmVnaXN0ZXJlZCBvdXRwdXQgcGlucyAqL1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnkocGluLCBcdTAwMjZ6bGRwbGwtXHUwMDNlcGlucywgbGlzdCkge1xuJiM0MztcdFx0dTggb3V0X2lkLCBzeW50aF9pZDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoemwzMDczeF9kcGxsX2lzX2lucHV0X3BpbihwaW4pKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRvdXRfaWQgPSB6bDMwNzN4X291dHB1dF9waW5fb3V0X2dldChwaW4tXHUwMDNlaWQpO1xuJiM0MztcbiYjNDM7XHRcdGlmICghemwzMDczeF9jaGFuX2lzX291dF9zdGVwcGVkKGNoYW4sIG91dF9pZCkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdHN5bnRoX2lkID0gemwzMDczeF9kZXZfb3V0X3N5bnRoX2dldCh6bGRldiwgb3V0X2lkKTtcbiYjNDM7XHRcdGlmIChzeW50aF9pZCBcdTAwM2U9IFpMMzA3M1hfTlVNX1NZTlRIUykge1xuJiM0MztcdFx0XHRkZXZfd2Fybih6bGRldi1cdTAwM2VkZXYsIFwmIzM0O1VuZXhwZWN0ZWQgc3ludGggaWQgZm9yIE9VVCV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCBvdXRfaWQpO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHN5bnRoX21hc2tbc3ludGhfaWRdIHw9IEJJVChvdXRfaWQpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogUHJvY2VzcyBlYWNoIHN5bnRoIGdyb3VwICovXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgWkwzMDczWF9OVU1fU1lOVEhTOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3ludGggPSB6bDMwNzN4X3N5bnRoX3N0YXRlX2dldCh6bGRldiwgaSk7XG4mIzQzO1x0XHRpZiAoIXpsMzA3M3hfc3ludGhfaXNfZW5hYmxlZChzeW50aCkgfHxcbiYjNDM7XHRcdCAgICB6bDMwNzN4X3N5bnRoX2RwbGxfZ2V0KHN5bnRoKSAhPSB6bGRwbGwtXHUwMDNlaWQpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdHN5bnRoX2ZyZXEgPSB6bDMwNzN4X3N5bnRoX2ZyZXFfZ2V0KHN5bnRoKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBSZW1lbWJlciBsb3dlc3QtSUQgc3ludGggZnJlcSBmb3IgVG9ELW9ubHkgZmFsbGJhY2sgKi9cbiYjNDM7XHRcdGlmICghZmlyc3Rfc3ludGhfZnJlcSlcbiYjNDM7XHRcdFx0Zmlyc3Rfc3ludGhfZnJlcSA9IHN5bnRoX2ZyZXE7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFzeW50aF9tYXNrW2ldKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBTYWZlIGZvciBzMzI6IG1heCBzeW50aCBmcmVxIGlzIDc1MCBNSHogKi9cbiYjNDM7XHRcdHN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIHN5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7XG4mIzQzO1xuJiM0MztcdFx0cmMgPSB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLFxuJiM0MztcdFx0XHRcdFx0ICAgICBzeW50aF9tYXNrW2ldLCBzdGVwX2N5Y2xlcyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIXRvZF9zdGVwcGVkKTtcbiYjNDM7XHRcdGlmIChyYykge1xuJiM0MztcdFx0XHRpZiAodG9kX3N0ZXBwZWQpIHtcbiYjNDM7XHRcdFx0XHRkZXZfd2Fybih6bGRldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0XHQgXCYjMzQ7UGFydGlhbCBwaGFzZSBzdGVwIGZhaWx1cmVcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdHJldHVybiByYztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHRvZF9zdGVwcGVkID0gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghZmlyc3Rfc3ludGhfZnJlcSlcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0LyogTm8gZW5hYmxlZCBvdXRwdXRzIGZvdW5kOyBzdGVwIFRvRCBjb3VudGVyIG9ubHkgdXNpbmcgdGhlXG4mIzQzO1x0ICogbG93ZXN0LUlEIHN5bnRoJiMzOTtzIHBlcmlvZCAoZW1wdHkgb3V0cHV0IG1hc2spLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghdG9kX3N0ZXBwZWQpIHtcbiYjNDM7XHRcdHN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIGZpcnN0X3N5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7XG4mIzQzO1x0XHRyZXR1cm4gemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCwgMCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBzdGVwX2N5Y2xlcywgdHJ1ZSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gLyoqXG4tICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlXG4tICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXG4mIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSAtIGFkanVzdCBQVFAgY2xvY2sgdGltZVxuJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbiYjNDM7ICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHNcbiAgKlxuLSAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuXG4mIzQzOyAqIEluIE5DTyBtb2RlLCBsYXJnZSBkZWx0YXMgKFx1MDAzZT0gMSBzZWNvbmQpIGFyZSBzcGxpdCBpbnRvIGEgVG9EXG4mIzQzOyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciB0aGUgc2Vjb25kcyBwYXJ0IGFuZCBhbiBvdXRwdXQgcGhhc2Ugc3RlcCBmb3JcbiYjNDM7ICogdGhlIHN1Yi1zZWNvbmQgcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgcGhhc2Ugc3RlcCBkaXJlY3RseSxcbiYjNDM7ICogZmFsbGluZyBiYWNrIHRvIFRvRCByZWFkLW1vZGlmeS13cml0ZSBpZiBwaGFzZSBzdGVwIGlzIHVuYXZhaWxhYmxlLlxuJiM0MzsgKiBJbiBBVVRPL1JFRkxPQ0sgbW9kZXMsIGxhcmdlIGRlbHRhcyBhcmUgc3BsaXQgaW50byBUb0RcbiYjNDM7ICogcmVhZC1tb2RpZnktd3JpdGUgZm9yIHNlY29uZHMgYW5kIFRJRSB3cml0ZSBmb3IgdGhlIHN1Yi1zZWNvbmRcbiYjNDM7ICogcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgVElFIHdyaXRlIGRpcmVjdGx5LlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuICAqL1xuLXZvaWRcbi16bDMwNzN4X2RwbGxfZnJlZShzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4mIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczY0IGRlbHRhKVxuIHtcbi1cdFdBUk4oemxkcGxsLVx1MDAzZWRwbGxfZGV2LCBcJiMzNDtEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuJiM0MztcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XG4mIzQzO1x0Ym9vbCBzZWNfYWRqdXN0ZWQgPSBmYWxzZTtcbiYjNDM7XHRzdHJ1Y3QgdGltZXNwZWM2NCB0cztcbiYjNDM7XHRpbnQgcmM7XG4gXG4tXHRtdXRleF9kZXN0cm95KFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbi1cdGtmcmVlKHpsZHBsbCk7XG4mIzQzO1x0aWYgKCFkZWx0YSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHQvKiBNb2RlcyB3aXRob3V0IHBoYXNlIHN0ZXAgb3IgVElFIHVzZSBwbGFpbiBUb0QgYWRqdXN0ICovXG4mIzQzO1x0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCk7XG4mIzQzO1x0aWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICF6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY2hhbikpXG4mIzQzO1x0XHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBuc190b190aW1lc3BlYzY0KGRlbHRhKSk7XG4mIzQzO1xuJiM0MztcdC8qIFNwbGl0IG9mZiBzZWNvbmRzIHZpYSBUb0QgcmVhZC1tb2RpZnktd3JpdGUgc28gdGhlIHN1Yi1zZWNvbmRcbiYjNDM7XHQgKiByZW1haW5kZXIgY2FuIGJlIGFwcGxpZWQgdGhyb3VnaCB0aGUgb3V0cHV0LWNvaGVyZW50IG1lY2hhbmlzbVxuJiM0MztcdCAqIChwaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSkuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGFicyhkZWx0YSkgXHUwMDNlPSBOU0VDX1BFUl9TRUMpIHtcbiYjNDM7XHRcdHMzMiByZW1haW5kZXI7XG4mIzQzO1xuJiM0MztcdFx0dHMudHZfc2VjID0gZGl2X3M2NF9yZW0oZGVsdGEsIE5TRUNfUEVSX1NFQywgXHUwMDI2cmVtYWluZGVyKTtcbiYjNDM7XHRcdHRzLnR2X25zZWMgPSAwO1xuJiM0MztcdFx0ZGVsdGEgPSByZW1haW5kZXI7XG4mIzQzO1xuJiM0MztcdFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCB0cyk7XG4mIzQzO1x0XHRpZiAocmMpXG4mIzQzO1x0XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0XHRzZWNfYWRqdXN0ZWQgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRcdC8qIE5vIHN1Yi1zZWNvbmQgcmVtYWluZGVyLCBkb25lICovXG4mIzQzO1x0XHRpZiAoIWRlbHRhKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEFwcGx5IHN1Yi1zZWNvbmQgZGVsdGEgdmlhIHBoYXNlIHN0ZXAgKE5DTykgb3IgVElFIHdyaXRlICovXG4mIzQzO1x0aWYgKHpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSkge1xuJiM0MztcdFx0cmMgPSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCh6bGRwbGwsIGRlbHRhKTtcbiYjNDM7XHRcdGlmICghcmMpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyYyA9IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCwgZGVsdGEpO1xuJiM0MztcdFx0aWYgKCFyYylcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBQaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSBmYWlsZWQsIGZhbGwgYmFjayB0byBUb0QgYWRqdXN0ICovXG4mIzQzO1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLFxuJiM0MztcdFx0XHRcdCAgICAgbnNfdG9fdGltZXNwZWM2NChkZWx0YSkpO1xuJiM0MztcbiYjNDM7XHQvKiBJbiB0aGUgdW5saWtlbHkgZXZlbnQgdGhhdCBib3RoIHBoYXNlIHN0ZXAvVElFIHdyaXRlIGFuZCBmYWxsYmFja1xuJiM0MztcdCAqIFRvRCBhZGp1c3QgZmFpbCBhZnRlciBzZWNvbmRzIHdlcmUgYWxyZWFkeSBjb21taXR0ZWQsIHJldHVyblxuJiM0MztcdCAqIHN1Y2Nlc3MgdG8gcHJldmVudCB0aGUgUFRQIHNlcnZvIGZyb20gcmV0cnlpbmcgdGhlIGZ1bGwgZGVsdGEgYW5kXG4mIzQzO1x0ICogYXBwbHlpbmcgc2Vjb25kcyBhZ2Fpbi4gVGhlIHN1Yi1zZWNvbmQgcmVzaWR1YWwgd2lsbCBzZWxmLWNvcnJlY3RcbiYjNDM7XHQgKiBpbiB0aGUgbmV4dCBzZXJ2byBjeWNsZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocmMgXHUwMDI2XHUwMDI2IHNlY19hZGp1c3RlZCkge1xuJiM0MztcdFx0ZGV2X3dhcm4oemxkZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHQgXCYjMzQ7U3ViLXNlY29uZCBhZGp1c3RtZW50IGZhaWxlZCBhZnRlciBzZWNvbmRzIGFwcGxpZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUgLSBhZGp1c3QgUFRQIGNsb2NrIGZyZXF1ZW5jeVxuJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbiYjNDM7ICogQHNjYWxlZF9wcG06IGZyZXF1ZW5jeSBhZGp1c3RtZW50IGluIHNjYWxlZCBwcG0gKHBwbSAqIDJeMTYpXG4mIzQzOyAqXG4mIzQzOyAqIE9ubHkgc3VwcG9ydGVkIGluIE5DTyBtb2RlLiBXcml0ZXMgdGhlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgcmVnaXN0ZXIuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRU9QTk9UU1VQUCBpZiBub3QgaW4gTkNPIG1vZGUsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7emwzMDczeF9kcGxsX3B0cF9hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgbG9uZyBzY2FsZWRfcHBtKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIHB0cF9pbmZvKTtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xuJiM0MztcdHM2NCBvZmZzZXQ7XG4mIzQzO1xuJiM0MztcdC8qIENvbnZlcnQgc2NhbGVkX3BwbSB0byBkZl9vZmZzZXQgaW4gMl4tNDggc3RlcHM6XG4mIzQzO1x0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjMyKSAvIDEwXjZcbiYjNDM7XHQgKlxuJiM0MztcdCAqIFNpbXBsaWZ5IHRvIGF2b2lkIG92ZXJmbG93OlxuJiM0MztcdCAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogMl4yNikgLyA1XjZcbiYjNDM7XHQgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDY3MTA4ODY0KSAvIDE1NjI1XG4mIzQzO1x0ICovXG4mIzQzO1x0b2Zmc2V0ID0gLWRpdl9zNjQoKHM2NClzY2FsZWRfcHBtICogNjcxMDg4NjRMTCwgMTU2MjUpO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRwbGwtXHUwMDNlZGV2LCB6bGRwbGwtXHUwMDNlaWQpO1xuJiM0MztcdGlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKVxuJiM0MztcdFx0cmV0dXJuIHNjYWxlZF9wcG0gPyAtRU9QTk9UU1VQUCA6IDA7XG4mIzQzO1x0aWYgKG9mZnNldCA9PSBjaGFuLVx1MDAzZWRmX29mZnNldClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoemxkcGxsLVx1MDAzZWRldiwgemxkcGxsLVx1MDAzZWlkLCBvZmZzZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSAtIGFkanVzdCBQVFAgY2xvY2sgcGhhc2VcbiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4mIzQzOyAqIEBkZWx0YTogcGhhc2UgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kc1xuJiM0MzsgKlxuJiM0MzsgKiBPbmx5IHN1cHBvcnRlZCBpbiBBVVRPIGFuZCBSRUZMT0NLIG1vZGVzLiBVc2VzIFRJRSB3cml0ZSBmb3JcbiYjNDM7ICogbmFub3NlY29uZCByZXNvbHV0aW9uIHBoYXNlIGFkanVzdG1lbnQuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRU9QTk9UU1VQUCBpZiBtb2RlIGRvZXNuJiMzOTt0IHN1cHBvcnQgVElFLCBcdTAwM2MwIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2Uoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBzMzIgZGVsdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuJiM0MztcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XG4mIzQzO1xuJiM0MztcdGlmICghZGVsdGEpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCk7XG4mIzQzO1xuJiM0MztcdGlmICghemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gemwzMDczeF9jaGFuX3RpZV93cml0ZSh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCBkZWx0YSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzMzJcbiYjNDM7emwzMDczeF9kcGxsX3B0cF9nZXRtYXhwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8gX19hbHdheXNfdW51c2VkKVxuJiM0Mzt7XG4mIzQzO1x0LyogSFcgbGltaXRzIFRJRSB3cml0ZSB0byAmIzQzOy0xIHNlY29uZC4gUmV0dXJuIHRoZSBjb25zdGFudCBIV1xuJiM0MztcdCAqIGxpbWl0IGFuZCBsZXQgYWRqcGhhc2UgaGFuZGxlIG1vZGUtc3BlY2lmaWMgY2hlY2tzLlxuJiM0MztcdCAqL1xuJiM0MztcdHJldHVybiBOU0VDX1BFUl9TRUMgLSAxO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9wZXJvdXRfZmluZF9waW4gLSBmaW5kIHBpbiBieSBwZXJvdXQgY2hhbm5lbCBpbmRleFxuJiM0MzsgKiBAemxkcGxsOiBEUExMIGNoYW5uZWxcbiYjNDM7ICogQGlkeDogcGVyb3V0IGNoYW5uZWwgaW5kZXggdG8gZmluZFxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IHBvaW50ZXIgdG8gdGhlIHBpbiwgb3IgTlVMTCBpZiBub3QgZm91bmRcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqXG4mIzQzO3psMzA3M3hfZHBsbF9wdHBfcGVyb3V0X2ZpbmRfcGluKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCwgaW50IGlkeClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW47XG4mIzQzO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnkocGluLCBcdTAwMjZ6bGRwbGwtXHUwMDNlcGlucywgbGlzdCkge1xuJiM0MztcdFx0aWYgKHBpbi1cdTAwM2VwZXJvdXRfaWR4ID09IGlkeClcbiYjNDM7XHRcdFx0cmV0dXJuIHBpbjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9lbmFibGUgLSBlbmFibGUvZGlzYWJsZSBQVFAgY2xvY2sgZnVuY3Rpb25zXG4mIzQzOyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xuJiM0MzsgKiBAcnE6IHRoZSByZXF1ZXN0ZWQgY2xvY2sgZnVuY3Rpb24gYW5kIHBhcmFtZXRlcnNcbiYjNDM7ICogQG9uOiB0cnVlIHRvIGVuYWJsZSwgZmFsc2UgdG8gZGlzYWJsZVxuJiM0MzsgKlxuJiM0MzsgKiBIYW5kbGVzIFBUUF9DTEtfUkVRX1BFUk9VVCByZXF1ZXN0cy4gT25seSAxUFBTIChwZXJpb2QgPSAxcykgaXMgc3VwcG9ydGVkLlxuJiM0MzsgKiBPbiBlbmFibGUsIGNvbmZpZ3VyZXMgdGhlIG91dHB1dCBkaXZpZGVyIGZvciAxIEh6LiBPbiBkaXNhYmxlLCBkb2VzIG5vdGhpbmdcbiYjNDM7ICogYXMgdGhlIHNpZ25hbCBpcyBub3QgZGlzYWJsZWQuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfZW5hYmxlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3QgcHRwX2Nsb2NrX3JlcXVlc3QgKnJxLCBpbnQgb24pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW47XG4mIzQzO1x0dW5zaWduZWQgaW50IGlkeDtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdGlmIChycS1cdTAwM2V0eXBlICE9IFBUUF9DTEtfUkVRX1BFUk9VVClcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0aWR4ID0gcnEtXHUwMDNlcGVyb3V0LmluZGV4O1xuJiM0MztcdGlmIChpZHggXHUwMDNlPSBpbmZvLVx1MDAzZW5fcGVyX291dClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHQvKiBUb2dnbGluZyBvdXRwdXQgcGlucyBjYW4gcHJvZHVjZSBydW50IHB1bHNlcywgc28gZGlzYWJsZVxuJiM0MztcdCAqIGlzIGEgbm8tb3AuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFvbilcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHQvKiBPbmx5IGFjY2VwdCBleGFjdGx5IDFQUFMgKHBlcmlvZC5zZWMgPT0gMSwgbnNlYyA9PSAwKSAqL1xuJiM0MztcdGlmIChycS1cdTAwM2VwZXJvdXQucGVyaW9kLnNlYyAhPSAxIHx8IHJxLVx1MDAzZXBlcm91dC5wZXJpb2QubnNlYyAhPSAwKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRwaW4gPSB6bDMwNzN4X2RwbGxfcHRwX3Blcm91dF9maW5kX3Bpbih6bGRwbGwsIGlkeCk7XG4mIzQzO1x0aWYgKCFwaW4pIHtcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEFscmVhZHkgYXQgMSBIeiwgbm90aGluZyB0byBkbyAqL1xuJiM0MztcdGlmICh6bDMwNzN4X2Rldl9vdXRwdXRfcGluX2ZyZXFfZ2V0KHpsZHBsbC1cdTAwM2VkZXYsIHBpbi1cdTAwM2VpZCkgPT0gMSkge1xuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmMgPSBfX3psMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoemxkcGxsLCBwaW4sIDEpO1xuJiM0MztcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAoIXJjKVxuJiM0MztcdFx0ZHBsbF9waW5fY2hhbmdlX250ZihwaW4tXHUwMDNlZHBsbF9waW4pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvID0ge1xuJiM0MztcdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuJiM0MztcdC5tYXhfYWRqXHQ9IFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESixcbiYjNDM7XHQuZ2V0dGltZXg2NFx0PSB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQsXG4mIzQzO1x0LnNldHRpbWU2NFx0PSB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCxcbiYjNDM7XHQuYWRqdGltZVx0PSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUsXG4mIzQzO1x0LmFkamZpbmVcdD0gemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lLFxuJiM0MztcdC5hZGpwaGFzZVx0PSB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlLFxuJiM0MztcdC5nZXRtYXhwaGFzZVx0PSB6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlLFxuJiM0MztcdC5lbmFibGVcdFx0PSB6bDMwNzN4X2RwbGxfcHRwX2VuYWJsZSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBhIERQTEwgY2hhbm5lbFxuJiM0MzsgKiBAemxkcGxsOiBEUExMIGNoYW5uZWwgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvclxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuJiM0MztcdHN0cnVjdCBwdHBfY2xvY2sgKnB0cF9jbG9jaztcbiYjNDM7XG4mIzQzO1x0c25wcmludGYoemxkcGxsLVx1MDAzZXB0cF9pbmZvLm5hbWUsIHNpemVvZih6bGRwbGwtXHUwMDNlcHRwX2luZm8ubmFtZSksXG4mIzQzO1x0XHQgXCYjMzQ7emwzMDczeC1kcGxsJXVcJiMzNDssIHpsZHBsbC1cdTAwM2VpZCk7XG4mIzQzO1xuJiM0MztcdHB0cF9jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcihcdTAwMjZ6bGRwbGwtXHUwMDNlcHRwX2luZm8sIHpsZGV2LVx1MDAzZWRldik7XG4mIzQzO1x0aWYgKElTX0VSUihwdHBfY2xvY2spKSB7XG4mIzQzO1x0XHRkZXZfZXJyKHpsZGV2LVx1MDAzZWRldiwgXCYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgRFBMTCV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR6bGRwbGwtXHUwMDNlaWQpO1xuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIocHRwX2Nsb2NrKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHpsZHBsbC1cdTAwM2VwdHBfY2xvY2sgPSBwdHBfY2xvY2s7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyIC0gdW5yZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsXG4mIzQzOyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byB1bnJlZ2lzdGVyIFBUUCBjbG9jayBmb3JcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIUlTX0VSUl9PUl9OVUxMKHpsZHBsbC1cdTAwM2VwdHBfY2xvY2spKSB7XG4mIzQzO1x0XHRwdHBfY2xvY2tfdW5yZWdpc3Rlcih6bGRwbGwtXHUwMDNlcHRwX2Nsb2NrKTtcbiYjNDM7XHRcdHpsZHBsbC1cdTAwM2VwdHBfY2xvY2sgPSBOVUxMO1xuJiM0MztcdH1cbiB9XG4gXG4gLyoqXG5AQCAtMjQwMyw2ICYjNDM7Mjg2Myw0OCBAQCB6bDMwNzN4X2RwbGxfcmVmX3N5bmNfcGFpcnNfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kcGxsX2FsbG9jIC0gYWxsb2NhdGUgRFBMTCBkZXZpY2VcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlclxuJiM0MzsgKlxuJiM0MzsgKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogcG9pbnRlciB0byBEUExMIGRldmljZSBvbiBzdWNjZXNzLCBlcnJvciBwb2ludGVyIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgemwzMDczeF9kcGxsICpcbiYjNDM7emwzMDczeF9kcGxsX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsO1xuJiM0MztcbiYjNDM7XHR6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTtcbiYjNDM7XHRpZiAoIXpsZHBsbClcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuJiM0MztcbiYjNDM7XHR6bGRwbGwtXHUwMDNlZGV2ID0gemxkZXY7XG4mIzQzO1x0emxkcGxsLVx1MDAzZWlkID0gY2g7XG4mIzQzO1x0emxkcGxsLVx1MDAzZXB0cF9pbmZvID0gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvO1xuJiM0MztcdG11dGV4X2luaXQoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcdElOSVRfTElTVF9IRUFEKFx1MDAyNnpsZHBsbC1cdTAwM2VwaW5zKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHpsZHBsbDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfZHBsbF9mcmVlIC0gZnJlZSBEUExMIGRldmljZVxuJiM0MzsgKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmVcbiYjNDM7ICpcbiYjNDM7ICogRGVhbGxvY2F0ZXMgZ2l2ZW4gRFBMTCBkZXZpY2UgcHJldmlvdXNseSBhbGxvY2F0ZWQgYnkgQHpsMzA3M3hfZHBsbF9hbGxvYy5cbiYjNDM7ICovXG4mIzQzO3ZvaWRcbiYjNDM7emwzMDczeF9kcGxsX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuJiM0Mzt7XG4mIzQzO1x0V0FSTih6bGRwbGwtXHUwMDNlZHBsbF9kZXYsIFwmIzM0O0RQTEwgZGV2aWNlIGlzIHN0aWxsIHJlZ2lzdGVyZWRcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRtdXRleF9kZXN0cm95KFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRrZnJlZSh6bGRwbGwpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIHpsMzA3M3hfZHBsbF9yZWdpc3RlciAtIHJlZ2lzdGVyIERQTEwgZGV2aWNlIGFuZCBhbGwgaXRzIHBpbnNcbiAgKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmVcbkBAIC0yNDMzLDYgJiM0MzsyOTM1LDEzIEBAIHpsMzA3M3hfZHBsbF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4gXHRcdHJldHVybiByYztcbiBcdH1cbiBcbiYjNDM7XHRyYyA9IHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIoemxkcGxsKTtcbiYjNDM7XHRpZiAocmMpIHtcbiYjNDM7XHRcdHpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTtcbiYjNDM7XHRcdHpsMzA3M3hfZHBsbF9kZXZpY2VfdW5yZWdpc3Rlcih6bGRwbGwpO1xuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMjQ0Niw3ICYjNDM7Mjk1NSw3IEBAIHpsMzA3M3hfZHBsbF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4gdm9pZFxuIHpsMzA3M3hfZHBsbF91bnJlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiB7XG4tXHQvKiBVbnJlZ2lzdGVyIGFsbCBwaW5zIGFuZCBkcGxsICovXG4mIzQzO1x0emwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHpsZHBsbCk7XG4gXHR6bDMwNzN4X2RwbGxfcGluc191bnJlZ2lzdGVyKHpsZHBsbCk7XG4gXHR6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXG5pbmRleCBmYWViYzQwMmJhMWI3MC4uOWI1ZjcyYzMzODQ5Y2UgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaFxuQEAgLTUsNiAmIzQzOzUsOCBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RwbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O2NvcmUuaFwmIzM0O1xuIFxuQEAgLTIyLDYgJiM0MzsyNCw4IEBAXG4gICogQHR5cGU6IERQTEwgdHlwZSAoUFBTIG9yIEVFQylcbiAgKiBAbG9ja19zdGF0dXM6IGxhc3Qgc2F2ZWQgRFBMTCBsb2NrIHN0YXR1c1xuICAqIEBwaW5zOiBsaXN0IG9mIHBpbnNcbiYjNDM7ICogQHB0cF9pbmZvOiBQVFAgY2xvY2sgaW5mb1xuJiM0MzsgKiBAcHRwX2Nsb2NrOiByZWdpc3RlcmVkIFBUUCBjbG9jayAob3IgTlVMTClcbiAgKi9cbiBzdHJ1Y3QgemwzMDczeF9kcGxsIHtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdFx0bGlzdDtcbkBAIC0zNiw2ICYjNDM7NDAsOCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsIHtcbiBcdGVudW0gZHBsbF90eXBlXHRcdFx0dHlwZTtcbiBcdGVudW0gZHBsbF9sb2NrX3N0YXR1c1x0XHRsb2NrX3N0YXR1cztcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdFx0cGlucztcbiYjNDM7XHRzdHJ1Y3QgcHRwX2Nsb2NrX2luZm9cdFx0cHRwX2luZm87XG4mIzQzO1x0c3RydWN0IHB0cF9jbG9ja1x0XHQqcHRwX2Nsb2NrO1xuIH07XG4gXG4gc3RydWN0IHpsMzA3M3hfZHBsbCAqemwzMDczeF9kcGxsX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhcbmluZGV4IGI3MGVhZDdkNDQ5NWIyLi40NDc3NTdlOTk4NDVkOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXG5AQCAtMTc5LDYgJiM0MzsxNzksMjAgQEBcbiAjZGVmaW5lIFpMX0RQTExfREZfUkVBRF9DTURcdFx0XHRHRU5NQVNLKDIsIDApXG4gI2RlZmluZSBaTF9EUExMX0RGX1JFQURfQ01EX0FDQ19JXHRcdDRcbiBcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTFx0XHRcdFpMX1JFRyg1LCAweDMwLCAxKVxuJiM0MzsjZGVmaW5lIFpMX0RQTExfVElFX0NUUkxfT1BcdFx0XHRHRU5NQVNLKDIsIDApXG4mIzQzOyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUF9XUlx0XHRcdDRcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0NUUkxfTUFTS1x0XHRaTF9SRUcoNSwgMHgzMSwgMSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX0NUUkwoX2lkeClcdFx0XHRcdFx0XFxcbiYjNDM7XHRaTF9SRUdfSURYKF9pZHgsIDUsIDB4MzgsIDEsIDgsIDEpXG4mIzQzOyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9TRU1cdFx0XHRCSVQoNClcbiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRFx0XHRcdEdFTk1BU0soMywgMClcbiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWlx0MVxuJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX0NVUlJFTlRcdDhcbiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9ORVhUXzFIWlx0OVxuJiM0MztcbiAjZGVmaW5lIFpMX1JFR19EUExMX01FQVNfQ1RSTFx0XHRcdFpMX1JFRyg1LCAweDUwLCAxKVxuICNkZWZpbmUgWkxfRFBMTF9NRUFTX0NUUkxfRU5cdFx0XHRCSVQoMClcbiAjZGVmaW5lIFpMX0RQTExfTUVBU19DVFJMX0FWR19GQUNUT1JcdFx0R0VOTUFTSyg3LCA0KVxuQEAgLTE5Myw2ICYjNDM7MjA3LDkgQEBcbiBcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAqIFJlZ2lzdGVyIFBhZ2VzIDYtNywgRFBMTCBEYXRhXG4mIzQzOyAqXG4mIzQzOyAqIFBlci1jaGFubmVsIHJlZ2lzdGVycyB3aXRoIHN0cmlkZSAweDIwLiBDaGFubmVscyAwLTMgcmVzaWRlIG9uIHBhZ2UgNixcbiYjNDM7ICogY2hhbm5lbCA0IG9uIHBhZ2UgNy5cbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiBcbiAjZGVmaW5lIFpMX1JFR19EUExMX0RGX09GRlNFVF8wMyhfaWR4KVx0XHRcdFx0XHRcXFxuQEAgLTIwMiw2ICYjNDM7MjE5LDI0IEBAXG4gXHQoKF9pZHgpIFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfREZfT0ZGU0VUXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfREZfT0ZGU0VUXzQpXG4gI2RlZmluZSBaTF9EUExMX0RGX09GRlNFVF9VTktOT1dOXHRTNjRfTUlOXG4gXG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEFfMDMoX2lkeClcdFx0XHRcdFx0XFxcbiYjNDM7XHRaTF9SRUdfSURYKF9pZHgsIDYsIDB4MEMsIDYsIDQsIDB4MjApXG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEFfNFx0XHRcdFpMX1JFRyg3LCAweDBDLCA2KVxuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBKF9pZHgpXHRcdFx0XHRcdFxcXG4mIzQzO1x0KChfaWR4KSBcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RJRV9EQVRBXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVElFX0RBVEFfNClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQ18wMyhfaWR4KVx0XHRcdFx0XHRcXFxuJiM0MztcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgxMiwgNiwgNCwgMHgyMClcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzRcdFx0XHRaTF9SRUcoNywgMHgxMiwgNilcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDKF9pZHgpXHRcdFx0XHRcdFxcXG4mIzQzO1x0KChfaWR4KSBcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RPRF9TRUNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfU0VDXzQpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU18wMyhfaWR4KVx0XHRcdFx0XHRcXFxuJiM0MztcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgxOCwgNCwgNCwgMHgyMClcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlNfNFx0XHRcdFpMX1JFRyg3LCAweDE4LCA0KVxuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OUyhfaWR4KVx0XHRcdFx0XHRcXFxuJiM0MztcdCgoX2lkeCkgXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9UT0RfTlNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfTlNfNClcbiYjNDM7XG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICogUmVnaXN0ZXIgUGFnZSA5LCBTeW50aCBhbmQgT3V0cHV0XG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuQEAgLTIyMSw2ICYjNDM7MjU2LDggQEBcbiAjZGVmaW5lIFpMX09VVFBVVF9DVFJMX0VOXHRcdFx0QklUKDApXG4gI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9TWU5USF9TRUxcdFx0R0VOTUFTSyg2LCA0KVxuIFxuJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfU1RFUF9USU1FX01BU0tcdFx0WkxfUkVHKDksIDB4MzYsIDIpXG4mIzQzO1xuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICogUmVnaXN0ZXIgUGFnZSAxMCwgUmVmIE1haWxib3hcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbkBAIC0zMTYsNiAmIzQzOzM1MywyNSBAQFxuICNkZWZpbmUgWkxfUkVHX09VVFBVVF9FU1lOQ19XSURUSFx0XHRaTF9SRUcoMTQsIDB4MTgsIDQpXG4gI2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX0NPTVBcdFx0WkxfUkVHKDE0LCAweDIwLCA0KVxuIFxuJiM0MzsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiYjNDM7ICogUmVnaXN0ZXIgUGFnZSA5LCBPdXRwdXQgUGhhc2UgU3RlcFxuJiM0MzsgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMXHRcdFpMX1JFRyg5LCAweDM4LCAxKVxuJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfRFBMTFx0XHRHRU5NQVNLKDYsIDQpXG4mIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9UT0RfU1RFUFx0QklUKDMpXG4mIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUFx0XHRHRU5NQVNLKDEsIDApXG4mIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9OT05FXHQwXG4mIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9SRVNFVFx0MVxuJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfUkVBRFx0MlxuJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfV1JJVEVcdDNcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUlx0XHRaTF9SRUcoOSwgMHgzOSwgMSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX01BU0tcdFx0WkxfUkVHKDksIDB4M2EsIDIpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBXHRcdFpMX1JFRyg5LCAweDNjLCA0KVxuJiM0MztcbiAvKlxuICAqIFJlZ2lzdGVyIFBhZ2UgMjU1IC0gSFcgcmVnaXN0ZXJzIGFjY2Vzc1xuICAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDExOjEyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pMMzA3M1gmIzM0OywKICAgICYjMzQ7WkwzMDczWF9JMkMmIzM0OywKICAgICYjMzQ7WkwzMDczWF9TUEkmIzM0OywKICAgICYjMzQ7UFRQXzE1ODhfQ0xPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQmIzM0OywKICAgICYjMzQ7emwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQmIzM0OywKICAgICYjMzQ7emwzMDczeF9kcGxsX3B0cF9hZGp0aW1lJiMzNDssCiAgICAmIzM0O3psMzA3M3hfZHBsbF9wdHBfYWRqZmluZSYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlJiMzNDssCiAgICAmIzM0O3psMzA3M3hfZHBsbF9wdHBfZW5hYmxlJiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl90b2RfcmVhZCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fdG9kX3dyaXRlJiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl90b2RfYWRqdXN0JiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl9waGFzZV9zdGVwJiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl90aWVfd3JpdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIgKHpsMzA3M3gpLiBJdCBpbXBsZW1lbnRzIHZhcmlvdXMgUFRQIGNsb2NrIG9wZXJhdGlvbnMgKGdldC9zZXQgdGltZSwgYWRqdXN0IHRpbWUvcGhhc2UvZnJlcXVlbmN5KSB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgUFRQIGlvY3RsIGludGVyZmFjZS4gRnV6emluZyB0aGVzZSBmdW5jdGlvbnMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGUgZHJpdmVyIGhhbmRsZXMgZWRnZSBjYXNlcyBhbmQgY29uY3VycmVudCBhY2Nlc3NlcyBjb3JyZWN0bHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDEyN2VjMWRhY2ViNTVjZTg0OTFiNjRhOWRjZjU4YWQxMDI1ZTMwNTcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCA5IDExOjEyOjQ0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWcKaW5kZXggNWJiY2ExNDAwNTgxMzEuLmQwNTc0YWQ1NzFkM2ZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWcKQEAgLTIsNyAmIzQzOzIsNyBAQAogCiBjb25maWcgWkwzMDczWAogCXRyaXN0YXRlICYjMzQ7TWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlcyYjMzQ7IGlmIENPTVBJTEVfVEVTVAotCWRlcGVuZHMgb24gTkVUCiYjNDM7CWRlcGVuZHMgb24gTkVUICZhbXA7JmFtcDsgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUwKIAlzZWxlY3QgRFBMTAogCXNlbGVjdCBORVRfREVWTElOSwogCXNlbGVjdCBSRUdNQVAKQEAgLTE2LDcgJiM0MzsxNiw3IEBAIGNvbmZpZyBaTDMwNzNYCiAKIGNvbmZpZyBaTDMwNzNYX0kyQwogCXRyaXN0YXRlICYjMzQ7STJDIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlcyYjMzQ7Ci0JZGVwZW5kcyBvbiBJMkMgJmFtcDsmYW1wOyBORVQKJiM0MzsJZGVwZW5kcyBvbiBJMkMgJmFtcDsmYW1wOyBORVQgJmFtcDsmYW1wOyBQVFBfMTU4OF9DTE9DS19PUFRJT05BTAogCXNlbGVjdCBSRUdNQVBfSTJDCiAJc2VsZWN0IFpMMzA3M1gKIAloZWxwCkBAIC0yOCw3ICYjNDM7MjgsNyBAQCBjb25maWcgWkwzMDczWF9JMkMKIAogY29uZmlnIFpMMzA3M1hfU1BJCiAJdHJpc3RhdGUgJiMzNDtTUEkgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzJiMzNDsKLQlkZXBlbmRzIG9uIE5FVCAmYW1wOyZhbXA7IFNQSQomIzQzOwlkZXBlbmRzIG9uIE5FVCAmYW1wOyZhbXA7IFNQSSAmYW1wOyZhbXA7IFBUUF8xNTg4X0NMT0NLX09QVElPTkFMCiAJc2VsZWN0IFJFR01BUF9TUEkKIAlzZWxlY3QgWkwzMDczWAogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYwppbmRleCA0ZWMyY2Y1M2RhZDQ2OC4uNTMwMzJlNzgyZmQ0YWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMKQEAgLTMsNiAmIzQzOzMsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2NsZWFudXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZWxheS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2Rldl9wcmludGsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3N0cmluZy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiAKQEAgLTIwMiw2ICYjNDM7MjAzLDExIEBAIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfZmV0Y2goc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpCiAJCXpsMzA3M3hfY2hhbl9yZWZzZWxfc3RhdGVfZ2V0KGNoYW4pLAogCQl6bDMwNzN4X2NoYW5fcmVmc2VsX3JlZl9nZXQoY2hhbikpOwogCiYjNDM7CXJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTSywKJiM0MzsJCQkgICAgICAmYW1wO2NoYW4tJmd0O291dF9zdGVwX3RpbWVfbWFzayk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKIAlndWFyZChtdXRleCkoJmFtcDt6bGRldi0mZ3Q7bXVsdGlvcF9sb2NrKTsKIAogCS8qIFJlYWQgRFBMTCBjb25maWd1cmF0aW9uIGZyb20gbWFpbGJveCAqLwpAQCAtMjM0LDYgJiM0MzsyNDAsMzA3IEBAIGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKnpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwKIAlyZXR1cm4gJmFtcDt6bGRldi0mZ3Q7Y2hhbltpbmRleF07CiB9CiAKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQgLSB3YWl0IGZvciBUb0Qgc2VtYXBob3JlIHRvIGNsZWFyCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKgomIzQzOyAqIFBvbGxzIHRoZSBUb0QgY29udHJvbCByZWdpc3RlciB1bnRpbCB0aGUgc2VtYXBob3JlIGJpdCBpcyBjbGVhcmVkLAomIzQzOyAqIGluZGljYXRpbmcgdGhlIGRldmljZSBoYXMgY29tcGxldGVkIHRoZSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FQlVTWSBpZiBzZW1hcGhvcmUgbm90IGNsZWFyZWQsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBpbnQgdGltZW91dDsKJiM0MzsJdTggdG9kX2N0cmw7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSwgJmFtcDt0b2RfY3RybCk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJc3dpdGNoIChGSUVMRF9HRVQoWkxfRFBMTF9UT0RfQ1RSTF9DTUQsIHRvZF9jdHJsKSkgewomIzQzOwljYXNlIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaOgomIzQzOwkJdGltZW91dCA9IFpMX1BPTExfVE9EX1dSX1RJTUVPVVRfVVM7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXRpbWVvdXQgPSBaTF9QT0xMX1RPRF9SRF9USU1FT1VUX1VTOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLAomIzQzOwkJCQkgIFpMX0RQTExfVE9EX0NUUkxfU0VNLCB0aW1lb3V0KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJjID09IC1FVElNRURPVVQgPyAtRUJVU1kgOiByYzsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9jdHJsIC0gaXNzdWUgVG9EIGNvbW1hbmQKJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleAomIzQzOyAqIEBjbWQ6IFRvRCBjb21tYW5kIHRvIGV4ZWN1dGUKJiM0MzsgKgomIzQzOyAqIFdyaXRlcyB0aGUgc2VtYXBob3JlIGFuZCBjb21tYW5kIHRvIGRwbGxfdG9kX2N0cmwuIFRoZSBjYWxsZXIgbXVzdAomIzQzOyAqIGVuc3VyZSB0aGUgZGV2aWNlIGlzIHJlYWR5IChzZW1hcGhvcmUgY2xlYXIpIGJlZm9yZSBjYWxsaW5nIGFuZAomIzQzOyAqIG11c3Qgd2FpdCBmb3IgY29tcGxldGlvbiBpZiBuZWVkZWQuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfY2hhbl90b2RfY3RybChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgdTggY21kKQomIzQzO3sKJiM0MzsJcmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSwKJiM0MzsJCQkJWkxfRFBMTF9UT0RfQ1RSTF9TRU0gfCBjbWQpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fdG9kX3JlYWQgLSByZWFkIFRvRCByZWdpc3RlcnMgYWZ0ZXIgaXNzdWluZyBhIGNvbW1hbmQKJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleAomIzQzOyAqIEBuZXh0X2h6OiBpZiB0cnVlLCByZWFkIHByZWRpY3RlZCBUb0QgYXQgbmV4dCAxIEh6OyBvdGhlcndpc2UgcmVhZCBjdXJyZW50CiYjNDM7ICogQHRzOiB0aW1lc3BlYyB0byBzdG9yZSB0aGUgcmVzdWx0CiYjNDM7ICogQHN0czogb3B0aW9uYWwgc3lzdGVtIHRpbWVzdGFtcCBwYWlyIGZvciBjcm9zcy10aW1lc3RhbXBpbmcKJiM0MzsgKgomIzQzOyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgIGJvb2wgbmV4dF9oeiwgc3RydWN0IHRpbWVzcGVjNjQgKnRzLAomIzQzOwkJCSAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpCiYjNDM7ewomIzQzOwl1MzIgbnNlYzsKJiM0MzsJdTY0IHNlYzsKJiM0MzsJdTggY21kOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CWlmIChuZXh0X2h6KQomIzQzOwkJY21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFo7CiYjNDM7CWVsc2UKJiM0MzsJCWNtZCA9IFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX0NVUlJFTlQ7CiYjNDM7CiYjNDM7CS8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCiYjNDM7CXJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcHRwX3JlYWRfc3lzdGVtX3ByZXRzKHN0cyk7CiYjNDM7CXJjID0gemwzMDczeF9jaGFuX3RvZF9jdHJsKHpsZGV2LCBjaCwgY21kKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CXB0cF9yZWFkX3N5c3RlbV9wb3N0dHMoc3RzKTsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3JlYWRfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfU0VDKGNoKSwgJmFtcDtzZWMpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CS8qIEhXIG5hbm9zZWNvbmRzIGFyZSBhbHdheXMgaW4gWzAsIE5TRUNfUEVSX1NFQykgcmFuZ2UgKi8KJiM0MzsJcmMgPSB6bDMwNzN4X3JlYWRfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCAmYW1wO25zZWMpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXRzLSZndDt0dl9zZWMgPSBzZWM7CiYjNDM7CXRzLSZndDt0dl9uc2VjID0gbnNlYzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUgLSB3cml0ZSBUb0QgcmVnaXN0ZXJzIGFuZCB0cmlnZ2VyIDEgSHogdXBkYXRlCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAdHM6IHRpbWUgdG8gc2V0CiYjNDM7ICoKJiM0MzsgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLAomIzQzOwkJCSAgIHN0cnVjdCB0aW1lc3BlYzY0IHRzKQomIzQzO3sKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwkvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVG9EIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqLwomIzQzOwlyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9TRUMoY2gpLCB0cy50dl9zZWMpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19EUExMX1RPRF9OUyhjaCksIHRzLnR2X25zZWMpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLAomIzQzOwkJCQkgICAgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFopOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCAtIGF0b21pYyBUb0QgcmVhZC1tb2RpZnktd3JpdGUgd2l0aCByb2xsb3ZlciBndWFyZAomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgdG8gYXBwbHkKJiM0MzsgKgomIzQzOyAqIFJlYWRzIHRoZSBuZXh0LUh6IFRvRCBhbmQgY3VycmVudCBUb0QsIHRoZW4gY2hlY2tzIHdoZXRoZXIgZW5vdWdoIHRpbWUKJiM0MzsgKiByZW1haW5zIGJlZm9yZSB0aGUgbmV4dCAxIEh6IHJvbGxvdmVyIHRvIHNhZmVseSBjb21wbGV0ZSB0aGUgd3JpdGUuCiYjNDM7ICogSWYgbGVzcyB0aGFuIDIwIG1zIHJlbWFpbnMsIHdhaXRzIGZvciB0aGUgcm9sbG92ZXIgYW5kIGluY3JlbWVudHMgdGhlCiYjNDM7ICogbmV4dC1IeiBzZWNvbmRzIGJ5IG9uZS4gQXBwbGllcyBAZGVsdGEgYW5kIHdyaXRlcyB0aGUgcmVzdWx0IGJhY2suCiYjNDM7ICoKJiM0MzsgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpCiYjNDM7ewomIzQzOwlzdGF0aWMgY29uc3QgbG9uZyB0aHJlc2hvbGRfbnMgPSAyMCAqIE5TRUNfUEVSX01TRUM7CiYjNDM7CXN0cnVjdCB0aW1lc3BlYzY0IHRzX25leHQsIHRzX2N1ciwgZGlmZjsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwkvKiBSZWFkIHByZWRpY3RlZCBUb0QgYXQgbmV4dCAxIEh6IHRpY2sgKi8KJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCB0cnVlLCAmYW1wO3RzX25leHQsIE5VTEwpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CS8qIFJlYWQgY3VycmVudCBUb0QgdG8gZGV0ZXJtaW5lIHJlbWFpbmluZyBtYXJnaW4gKi8KJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCBmYWxzZSwgJmFtcDt0c19jdXIsIE5VTEwpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CS8qIElmIHRvbyBjbG9zZSB0byAob3IgcGFzdCkgdGhlIG5leHQgcm9sbG92ZXIsIHdhaXQgaXQgb3V0ICovCiYjNDM7CWRpZmYgPSB0aW1lc3BlYzY0X3N1Yih0c19uZXh0LCB0c19jdXIpOwomIzQzOwlpZiAoZGlmZi50dl9zZWMgJmx0OyAwIHx8ICghZGlmZi50dl9zZWMgJmFtcDsmYW1wOyBkaWZmLnR2X25zZWMgJmx0OyB0aHJlc2hvbGRfbnMpKSB7CiYjNDM7CQlpZiAoIWRpZmYudHZfc2VjICZhbXA7JmFtcDsgZGlmZi50dl9uc2VjKQomIzQzOwkJCWZzbGVlcCgodW5zaWduZWQgbG9uZylkaWZmLnR2X25zZWMgLyBOU0VDX1BFUl9VU0VDICYjNDM7IDEpOwomIzQzOwkJdHNfbmV4dC50dl9zZWMmIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEFwcGx5IGRlbHRhIHRvIHRoZSBuZXh0LUh6IFRvRCAqLwomIzQzOwl0c19uZXh0ID0gdGltZXNwZWM2NF9hZGQodHNfbmV4dCwgZGVsdGEpOwomIzQzOwlpZiAoIXRpbWVzcGVjNjRfdmFsaWQoJmFtcDt0c19uZXh0KSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkvKiBXcml0ZSBhZGp1c3RlZCBUb0QgYmFjayBhbmQgd2FpdCBmb3IgY29tcGxldGlvbiAqLwomIzQzOwlyYyA9IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkZXYsIGNoLCB0c19uZXh0KTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0IC0gd3JpdGUgZGVsdGEgZnJlcXVlbmN5IG9mZnNldCB0byBoYXJkd2FyZQomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQG9mZnNldDogZnJlcXVlbmN5IG9mZnNldCBpbiAyXi00OCBzdGVwcwomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7aW50IHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgb2Zmc2V0KQomIzQzO3sKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9PRkZTRVQoY2gpLCBvZmZzZXQpOwomIzQzOwlpZiAoIXJjKQomIzQzOwkJemxkZXYtJmd0O2NoYW5bY2hdLmRmX29mZnNldCA9IG9mZnNldDsKJiM0MzsKJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlIC0gYWRqdXN0IERQTEwgcGhhc2UgdXNpbmcgVElFIHdyaXRlCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAZGVsdGFfbnM6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMgKG11c3QgYmUgd2l0aGluICYjNDM7LTFzKQomIzQzOyAqCiYjNDM7ICogQ29udmVydHMgbmFub3NlY29uZHMgdG8gVElFIHVuaXRzICgwLjAxIHBzKSBhbmQgd3JpdGVzIFRJRSBkYXRhCiYjNDM7ICogdG8gdGhlIHNwZWNpZmllZCBjaGFubmVsLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7aW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucykKJiM0Mzt7CiYjNDM7CXM2NCB0aWVfZGF0YTsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRldi0mZ3Q7dGllX2xvY2spOwomIzQzOwomIzQzOwkvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVElFIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqLwomIzQzOwlyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTCwKJiM0MzsJCQkJICBaTF9EUExMX1RJRV9DVFJMX09QLAomIzQzOwkJCQkgIFpMX1BPTExfVElFX1dSX1RJTUVPVVRfVVMpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CS8qIENvbnZlcnQgbnMgdG8gVElFIHVuaXRzICgwLjAxIHBzID0gMTBeLTE0IHMpICovCiYjNDM7CXRpZV9kYXRhID0gZGVsdGFfbnMgKiAxMDAwMDBMTDsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0RBVEEoY2gpLCB0aWVfZGF0YSk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTF9NQVNLLCBCSVQoY2gpKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsCiYjNDM7CQkJCVpMX0RQTExfVElFX0NUUkxfT1BfV1IpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCAtIGV4ZWN1dGUgb25lIG91dHB1dCBwaGFzZSBzdGVwIG9wZXJhdGlvbgomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQG91dF9tYXNrOiBiaXRtYXNrIG9mIG91dHB1dHMgdG8gc3RlcAomIzQzOyAqIEBzdGVwX2N5Y2xlczogcGhhc2Ugc3RlcCBpbiBzeW50aGVzaXplciBjbG9jayBjeWNsZXMKJiM0MzsgKiBAdG9kX3N0ZXA6IGFsc28gc3RlcCB0aGUgVG9EIGNvdW50ZXIKJiM0MzsgKgomIzQzOyAqIEFsbCBtYXNrZWQgb3V0cHV0cyBtdXN0IHVzZSBzeW50aGVzaXplcnMgb2YgdGhlIHNhbWUgZnJlcXVlbmN5IHNpbmNlCiYjNDM7ICogdGhlIHN0ZXAgdmFsdWUgaXMgaW4gc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7aW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLAomIzQzOwkJCSAgICB1MTYgb3V0X21hc2ssIHMzMiBzdGVwX2N5Y2xlcywKJiM0MzsJCQkgICAgYm9vbCB0b2Rfc3RlcCkKJiM0Mzt7CiYjNDM7CXU4IGN0cmw7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7emxkZXYtJmd0O3BoYXNlX3N0ZXBfbG9jayk7CiYjNDM7CiYjNDM7CS8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBwaGFzZSBzdGVwIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqLwomIzQzOwlyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTCwKJiM0MzsJCQkJICBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QLAomIzQzOwkJCQkgIFpMX1BPTExfUEhBU0VfU1RFUF9USU1FT1VUX1VTKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfREFUQSwKJiM0MzsJCQkgICAgICAgc3RlcF9jeWNsZXMpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF93cml0ZV91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLLCBvdXRfbWFzayk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTlVNQkVSLCAxKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwljdHJsID0gRklFTERfUFJFUChaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX0RQTEwsIGNoKSB8CiYjNDM7CSAgICAgICBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AsCiYjNDM7CQkJICBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1dSSVRFKTsKJiM0MzsJaWYgKHRvZF9zdGVwKQomIzQzOwkJY3RybCB8PSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX1RPRF9TVEVQOwomIzQzOwomIzQzOwlyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwsIGN0cmwpOwomIzQzO30KJiM0MzsKIC8qKgogICogemwzMDczeF9jaGFuX3N0YXRlX3NldCAtIGNvbW1pdCBEUExMIGNoYW5uZWwgc3RhdGUgY2hhbmdlcyB0byBoYXJkd2FyZQogICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3hfZGV2IHN0cnVjdHVyZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oCmluZGV4IGRjOWM2ZDk1YmRlZTc1Li45ZGM1YTNmMTk5MWYxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaApAQCAtNSwxMCAmIzQzOzUsMTIgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3RkZGVmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3RpbWU2NC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7cmVncy5oJiMzNDsKIAomIzQzO3N0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcDsKIHN0cnVjdCB6bDMwNzN4X2RldjsKIAogLyoqCkBAIC0xNiw2ICYjNDM7MTgsNyBAQCBzdHJ1Y3QgemwzMDczeF9kZXY7CiAgKiBAY3RybDogRFBMTCBjb250cm9sIHJlZ2lzdGVyIHZhbHVlCiAgKiBAbW9kZV9yZWZzZWw6IG1vZGUgYW5kIHJlZmVyZW5jZSBzZWxlY3Rpb24gcmVnaXN0ZXIgdmFsdWUKICAqIEByZWZfcHJpbzogcmVmZXJlbmNlIHByaW9yaXR5IHJlZ2lzdGVycyAoNCBiaXRzIHBlciByZWYsIFAvTiBwYWNrZWQpCiYjNDM7ICogQG91dF9zdGVwX3RpbWVfbWFzazogb3V0cHV0IHN0ZXAtdGltZSBtYXNrCiAgKiBAbW9uX3N0YXR1czogbW9uaXRvciBzdGF0dXMgcmVnaXN0ZXIgdmFsdWUKICAqIEByZWZzZWxfc3RhdHVzOiByZWZlcmVuY2Ugc2VsZWN0aW9uIHN0YXR1cyByZWdpc3RlciB2YWx1ZQogICogQGRmX29mZnNldDogZnJlcXVlbmN5IG9mZnNldCB2cyB0cmFja2VkIHJlZmVyZW5jZSBpbiAyXi00OCBzdGVwcwpAQCAtMjYsNiAmIzQzOzI5LDkgQEAgc3RydWN0IHpsMzA3M3hfY2hhbiB7CiAJCXU4CW1vZGVfcmVmc2VsOwogCQl1OAlyZWZfcHJpb1taTDMwNzNYX05VTV9SRUZTIC8gMl07CiAJKTsKJiM0MzsJc3RydWN0X2dyb3VwKGludiwgLyogSW52YXJpYW50cyAqLwomIzQzOwkJdTE2CW91dF9zdGVwX3RpbWVfbWFzazsKJiM0MzsJKTsKIAlzdHJ1Y3RfZ3JvdXAoc3RhdCwKIAkJdTgJbW9uX3N0YXR1czsKIAkJdTgJcmVmc2VsX3N0YXR1czsKQEAgLTQyLDYgJiM0Mzs0OCwyMCBAQCBpbnQgemwzMDczeF9jaGFuX3N0YXRlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCwKIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfdXBkYXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTsKIGludCB6bDMwNzN4X2NoYW5fbmNvX21vZGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTsKIAomIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cywKJiM0MzsJCQkgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKTsKJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cyk7CiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLAomIzQzOwkJCSAgICBzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YSk7CiYjNDM7aW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLAomIzQzOwkJCSAgICB1MTYgb3V0X21hc2ssIHMzMiBzdGVwX2N5Y2xlcywgYm9vbCB0b2Rfc3RlcCk7CiYjNDM7CiYjNDM7aW50IHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgb2Zmc2V0KTsKJiM0MzsKJiM0MztpbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKTsKJiM0MzsKIC8qKgogICogemwzMDczeF9jaGFuX2RmX29mZnNldF9nZXQgLSBnZXQgY2FjaGVkIGRmX29mZnNldCB2cyB0cmFja2VkIHJlZmVyZW5jZQogICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZQpAQCAtMjAwLDYgJiM0MzsyMjAsMjEgQEAgc3RhdGljIGlubGluZSBib29sIHpsMzA3M3hfY2hhbl9tb2RlX2lzX3JlZmxvY2soY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbikKIAlyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfZ2V0KGNoYW4pID09IFpMX0RQTExfTU9ERV9SRUZTRUxfTU9ERV9SRUZMT0NLOwogfQogCiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllIC0gY2hlY2sgaWYgY2hhbm5lbCBtb2RlIHN1cHBvcnRzIFRJRSB3cml0ZQomIzQzOyAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGUKJiM0MzsgKgomIzQzOyAqIFRJRSB3cml0ZSBpcyBzdXBwb3J0ZWQgaW4gQVVUTyBhbmQgUkVGTE9DSyBtb2RlcyByZWdhcmRsZXNzIG9mIGxvY2sgc3RhdGUuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgVElFIHdyaXRlIGlzIHN1cHBvcnRlZCwgZmFsc2Ugb3RoZXJ3aXNlCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBib29sCiYjNDM7emwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pCiYjNDM7ewomIzQzOwlyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfaXNfYXV0byhjaGFuKSB8fAomIzQzOwkJemwzMDczeF9jaGFuX21vZGVfaXNfcmVmbG9jayhjaGFuKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHpsMzA3M3hfY2hhbl9pc19ob19yZWFkeSAtIGNoZWNrIGlmIGhvbGRvdmVyIGlzIHJlYWR5CiAgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlCkBAIC0yMzMsNCAmIzQzOzI2OCwxNyBAQCBzdGF0aWMgaW5saW5lIHU4IHpsMzA3M3hfY2hhbl9yZWZzZWxfcmVmX2dldChjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKQogCXJldHVybiBGSUVMRF9HRVQoWkxfRFBMTF9SRUZTRUxfU1RBVFVTX1JFRlNFTCwgY2hhbi0mZ3Q7cmVmc2VsX3N0YXR1cyk7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5faXNfb3V0X3N0ZXBwZWQgLSBjaGVjayBpZiBvdXRwdXQgaXMgaW4gc3RlcC10aW1lIG1hc2sKJiM0MzsgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlCiYjNDM7ICogQG91dDogb3V0cHV0IGluZGV4CiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgb3V0cHV0IGlzIGFmZmVjdGVkIGJ5IHN0ZXAtdGltZSBvcGVyYXRpb25zCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBib29sCiYjNDM7emwzMDczeF9jaGFuX2lzX291dF9zdGVwcGVkKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4sIHU4IG91dCkKJiM0Mzt7CiYjNDM7CXJldHVybiAhIShjaGFuLSZndDtvdXRfc3RlcF90aW1lX21hc2sgJmFtcDsgQklUKG91dCkpOwomIzQzO30KJiM0MzsKICNlbmRpZiAvKiBfWkwzMDczWF9DSEFOX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYwppbmRleCA3ZjVhZmFhYWU2MzQyZi4uYjJmOWZjOTdmZDFiNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMKQEAgLTEwMzMsNiAmIzQzOzEwMzMsMTQgQEAgaW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpCiAJICogYW5kL29yIHBvbGxzIGFyZSByZXF1aXJlZCB0byBiZSBkb25lIGF0b21pY2FsbHkuCiAJICovCiAJcmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtJmd0O2RldiwgJmFtcDt6bGRldi0mZ3Q7bXVsdGlvcF9sb2NrKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtJmd0O2RldiwgcmMsCiYjNDM7CQkJCSAgICAgJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxuJiMzNDspOwomIzQzOwlyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi0mZ3Q7ZGV2LCAmYW1wO3psZGV2LSZndDtwaGFzZV9zdGVwX2xvY2spOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi0mZ3Q7ZGV2LCByYywKJiM0MzsJCQkJICAgICAmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XG4mIzM0Oyk7CiYjNDM7CXJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LSZndDtkZXYsICZhbXA7emxkZXYtJmd0O3RpZV9sb2NrKTsKIAlpZiAocmMpCiAJCXJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LSZndDtkZXYsIHJjLAogCQkJCSAgICAgJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxuJiMzNDspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oCmluZGV4IDc4ZGMyMDhmM2VlYTJhLi4yZGM4MzZkMGM4ZjZiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaApAQCAtMjYsNiAmIzQzOzI2LDEwIEBAIHN0cnVjdCB6bDMwNzN4X2RwbGw7CiAjZGVmaW5lIFpMX1BPTExfSFdSRUdfVElNRU9VVF9VUwkoNTAgKiBVU0VDX1BFUl9NU0VDKQogI2RlZmluZSBaTF9QT0xMX01CX1RJTUVPVVRfVVMJCSgzMCAqIFVTRUNfUEVSX01TRUMpCiAjZGVmaW5lIFpMX1BPTExfUEhBU0VfRVJSX1RJTUVPVVRfVVMJKDUwICogVVNFQ19QRVJfTVNFQykKJiM0MzsjZGVmaW5lIFpMX1BPTExfUEhBU0VfU1RFUF9USU1FT1VUX1VTCSgzMDAwICogVVNFQ19QRVJfTVNFQykKJiM0MzsjZGVmaW5lIFpMX1BPTExfVElFX1dSX1RJTUVPVVRfVVMJKDEwMDAgKiBVU0VDX1BFUl9NU0VDKQomIzQzOyNkZWZpbmUgWkxfUE9MTF9UT0RfUkRfVElNRU9VVF9VUwkoMzAgKiBVU0VDX1BFUl9NU0VDKQomIzQzOyNkZWZpbmUgWkxfUE9MTF9UT0RfV1JfVElNRU9VVF9VUwkoMTAwMCAqIFVTRUNfUEVSX01TRUMpCiAKIGVudW0gemwzMDczeF9mbGFncyB7CiAJWkwzMDczWF9GTEFHX1JFRl9QSEFTRV9DT01QXzMyX0JJVCwKQEAgLTU1LDYgJiM0Mzs1OSw4IEBAIHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mbyB7CiAgKiBAcmVnbWFwOiByZWdtYXAgdG8gYWNjZXNzIGRldmljZSByZWdpc3RlcnMKICAqIEBpbmZvOiBkZXRlY3RlZCBjaGlwIGluZm8KICAqIEBtdWx0aW9wX2xvY2s6IHRvIHNlcmlhbGl6ZSBtdWx0aXBsZSByZWdpc3RlciBvcGVyYXRpb25zCiYjNDM7ICogQHRpZV9sb2NrOiB0byBzZXJpYWxpemUgVElFIHdyaXRlIG9wZXJhdGlvbnMKJiM0MzsgKiBAcGhhc2Vfc3RlcF9sb2NrOiB0byBzZXJpYWxpemUgb3V0cHV0IHBoYXNlIHN0ZXAgb3BlcmF0aW9ucwogICogQHJlZjogYXJyYXkgb2YgaW5wdXQgcmVmZXJlbmNlcyYjMzk7IGludmFyaWFudHMKICAqIEBvdXQ6IGFycmF5IG9mIG91dHMmIzM5OyBpbnZhcmlhbnRzCiAgKiBAc3ludGg6IGFycmF5IG9mIHN5bnRocyYjMzk7IGludmFyaWFudHMKQEAgLTcxLDYgJiM0Mzs3Nyw4IEBAIHN0cnVjdCB6bDMwNzN4X2RldiB7CiAJc3RydWN0IHJlZ21hcAkJCSpyZWdtYXA7CiAJY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hpcF9pbmZvCSppbmZvOwogCXN0cnVjdCBtdXRleAkJCW11bHRpb3BfbG9jazsKJiM0MzsJc3RydWN0IG11dGV4CQkJdGllX2xvY2s7CiYjNDM7CXN0cnVjdCBtdXRleAkJCXBoYXNlX3N0ZXBfbG9jazsKIAogCS8qIEludmFyaWFudHMgKi8KIAlzdHJ1Y3QgemwzMDczeF9yZWYJcmVmW1pMMzA3M1hfTlVNX1JFRlNdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jCmluZGV4IGQ5MWY1MmI1OGVhZTM0Li43NDAwMWU2ZDRhMzJmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYwpAQCAtMiw2ICYjNDM7Miw3IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9iaXRzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYml0ZmllbGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY2xlYW51cC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2J1Zy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2NvbnRhaW5lcl9vZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2Rldl9wcmludGsuaCZndDsKQEAgLTE0LDYgJiM0MzsxNSw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvbmV0bGluay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BsYXRmb3JtX2RldmljZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3Byb3BlcnR5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3ByaW50Zi5oJmd0OwogCkBAIC00Miw2ICYjNDM7NDQsNyBAQAogICogQHBoYXNlX29mZnNldDogbGFzdCBzYXZlZCBwaW4gcGhhc2Ugb2Zmc2V0CiAgKiBAZnJlcV9vZmZzZXQ6IGxhc3Qgc2F2ZWQgZnJhY3Rpb25hbCBmcmVxdWVuY3kgb2Zmc2V0CiAgKiBAbWVhc3VyZWRfZnJlcTogbGFzdCBzYXZlZCBtZWFzdXJlZCBmcmVxdWVuY3kKJiM0MzsgKiBAcGVyb3V0X2lkeDogUFRQIHBlcm91dCBjaGFubmVsIGluZGV4LCBvciAtMSBpZiBub3QgcGVyb3V0LWVsaWdpYmxlCiAgKi8KIHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CkBAIC01OSw2ICYjNDM7NjIsNyBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiB7CiAJczY0CQkJcGhhc2Vfb2Zmc2V0OwogCXM2NAkJCWZyZXFfb2Zmc2V0OwogCXUzMgkJCW1lYXN1cmVkX2ZyZXE7CiYjNDM7CXM4CQkJcGVyb3V0X2lkeDsKIH07CiAKIC8qCkBAIC05MzYsMjEgJiM0Mzs5NDAsMTcgQEAgemwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLAogfQogCiBzdGF0aWMgaW50Ci16bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sCi0JCQkJICAgICAgdm9pZCAqcGluX3ByaXYsCi0JCQkJICAgICAgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLAotCQkJCSAgICAgIHZvaWQgKmRwbGxfcHJpdiwgdTY0IGZyZXF1ZW5jeSwKLQkJCQkgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiYjNDM7X196bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfc2V0KHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCwKJiM0MzsJCQkJCXN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4sCiYjNDM7CQkJCQl1NjQgZnJlcXVlbmN5KQogewotCXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGRwbGxfcHJpdjsKIAlzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLSZndDtkZXY7Ci0Jc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbiA9IHBpbl9wcml2OwogCWNvbnN0IHN0cnVjdCB6bDMwNzN4X3N5bnRoICpzeW50aDsKIAl1MzIgbmV3X2Rpdiwgc3ludGhfZnJlcTsKIAlzdHJ1Y3QgemwzMDczeF9vdXQgb3V0OwogCXU4IG91dF9pZDsKIAotCWd1YXJkKG11dGV4KSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwogCiAJb3V0X2lkID0gemwzMDczeF9vdXRwdXRfcGluX291dF9nZXQocGluLSZndDtpZCk7CiAJb3V0ID0gKnpsMzA3M3hfb3V0X3N0YXRlX2dldCh6bGRldiwgb3V0X2lkKTsKQEAgLTEwMTEsNiAmIzQzOzEwMTEsMjEgQEAgemwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLAogCXJldHVybiB6bDMwNzN4X291dF9zdGF0ZV9zZXQoemxkZXYsIG91dF9pZCwgJmFtcDtvdXQpOwogfQogCiYjNDM7c3RhdGljIGludAomIzQzO3psMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3BpbiwKJiM0MzsJCQkJICAgICAgdm9pZCAqcGluX3ByaXYsCiYjNDM7CQkJCSAgICAgIGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwKJiM0MzsJCQkJICAgICAgdm9pZCAqZHBsbF9wcml2LCB1NjQgZnJlcXVlbmN5LAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBkcGxsX3ByaXY7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiBfX3psMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoemxkcGxsLCBwaW5fcHJpdiwKJiM0MzsJCQkJCQkgICAgICAgZnJlcXVlbmN5KTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50CiB6bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9waGFzZV9hZGp1c3RfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sCiAJCQkJCSB2b2lkICpwaW5fcHJpdiwKQEAgLTE2MDgsNiAmIzQzOzE2MjMsNyBAQCB6bDMwNzN4X2RwbGxfcGluX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCwgZW51bSBkcGxsX3Bpbl9kaXJlY3Rpb24gZGlyLAogCXBpbi0mZ3Q7ZHBsbCA9IHpsZHBsbDsKIAlwaW4tJmd0O2RpciA9IGRpcjsKIAlwaW4tJmd0O2lkID0gaWQ7CiYjNDM7CXBpbi0mZ3Q7cGVyb3V0X2lkeCA9IC0xOwogCiAJcmV0dXJuIHBpbjsKIH0KQEAgLTE2MjYsNiAmIzQzOzE2NDIsNDQgQEAgemwzMDczeF9kcGxsX3Bpbl9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4pCiAJa2ZyZWUocGluKTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9waW5faXNfcGVyb3V0IC0gY2hlY2sgaWYgb3V0cHV0IHBpbiBpcyBwZXJvdXQtZWxpZ2libGUKJiM0MzsgKiBAcGluOiBEUExMIHBpbiB0byBjaGVjawomIzQzOyAqIEBwcm9wczogcGluIHByb3BlcnRpZXMgKGFscmVhZHkgZmV0Y2hlZCBieSBjYWxsZXIpCiYjNDM7ICoKJiM0MzsgKiBBbiBvdXRwdXQgcGluIGlzIGVsaWdpYmxlIGZvciBQVFAgcGVyaW9kaWMgb3V0cHV0IGlmIGl0IGlzIHNpbmdsZS1lbmRlZAomIzQzOyAqIChub3QgZGlmZmVyZW50aWFsKSBhbmQgc3VwcG9ydHMgMSBIeiBpbiBpdHMgZnJlcXVlbmN5IGxpc3QuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgZWxpZ2libGUsIGZhbHNlIG90aGVyd2lzZQomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sCiYjNDM7emwzMDczeF9kcGxsX3Bpbl9pc19wZXJvdXQoc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbiwKJiM0MzsJCQkgICBjb25zdCBzdHJ1Y3QgemwzMDczeF9waW5fcHJvcHMgKnByb3BzKQomIzQzO3sKJiM0MzsJc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gcGluLSZndDtkcGxsOwomIzQzOwljb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuOwomIzQzOwl1OCBvdXRfaWQ7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlpZiAoemwzMDczeF9kcGxsX2lzX2lucHV0X3BpbihwaW4pKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlvdXRfaWQgPSB6bDMwNzN4X291dHB1dF9waW5fb3V0X2dldChwaW4tJmd0O2lkKTsKJiM0MzsJaWYgKHpsMzA3M3hfZGV2X291dF9pc19kaWZmKHpsZHBsbC0mZ3Q7ZGV2LCBvdXRfaWQpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwljaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRwbGwtJmd0O2RldiwgemxkcGxsLSZndDtpZCk7CiYjNDM7CWlmICghemwzMDczeF9jaGFuX2lzX291dF9zdGVwcGVkKGNoYW4sIG91dF9pZCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBwcm9wcy0mZ3Q7ZHBsbF9wcm9wcy5mcmVxX3N1cHBvcnRlZF9udW07IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAocHJvcHMtJmd0O2RwbGxfcHJvcHMuZnJlcV9zdXBwb3J0ZWRbaV0ubWluID09IDEpCiYjNDM7CQkJcmV0dXJuIHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKIC8qKgogICogemwzMDczeF9kcGxsX3Bpbl9yZWdpc3RlciAtIHJlZ2lzdGVyIERQTEwgcGluCiAgKiBAcGluOiBwb2ludGVyIHRvIERQTEwgcGluCkBAIC0xNjY3LDYgJiM0MzsxNzIxLDggQEAgemwzMDczeF9kcGxsX3Bpbl9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluLCB1MzIgaW5kZXgpCiAJCWlmIChwaW4tJmd0O3ByaW8gPT0gWkxfRFBMTF9SRUZfUFJJT19OT05FKQogCQkJLyogQ2xhbXAgcHJpbyB0byBtYXggdmFsdWUgKi8KIAkJCXBpbi0mZ3Q7cHJpbyA9IFpMX0RQTExfUkVGX1BSSU9fTUFYOwomIzQzOwl9IGVsc2UgaWYgKHpsMzA3M3hfZHBsbF9waW5faXNfcGVyb3V0KHBpbiwgcHJvcHMpKSB7CiYjNDM7CQlwaW4tJmd0O3Blcm91dF9pZHggPSB6bGRwbGwtJmd0O3B0cF9pbmZvLm5fcGVyX291dCYjNDM7JiM0Mzs7CiAJfQogCiAJLyogQ3JlYXRlIG9yIGdldCBleGlzdGluZyBEUExMIHBpbiAqLwpAQCAtMTg5Nyw2ICYjNDM7MTk1Myw4IEBAIHpsMzA3M3hfZHBsbF9waW5zX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKIAl1OCBpZCwgaW5kZXg7CiAJaW50IHJjOwogCiYjNDM7CXpsZHBsbC0mZ3Q7cHRwX2luZm8ubl9wZXJfb3V0ID0gMDsKJiM0MzsKIAkvKiBQcm9jZXNzIGlucHV0IHBpbnMgKi8KIAlmb3IgKGluZGV4ID0gMDsgaW5kZXggJmx0OyBaTDMwNzNYX05VTV9QSU5TOyBpbmRleCYjNDM7JiM0MzspIHsKIAkJLyogRmlyc3QgaW5wdXQgcGlucyBhbmQgdGhlbiBvdXRwdXQgcGlucyAqLwpAQCAtMjI4MCw0NSAmIzQzOzIzMzgsNDQ3IEBAIHpsMzA3M3hfZHBsbF9pbml0X2ZpbmVfcGhhc2VfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpCiAJcmV0dXJuIHJjOwogfQogCiYjNDM7LyogTWF4aW11bSBmcmVxdWVuY3kgYWRqdXN0bWVudDogJiM0MzstMSUgb2Ygbm9taW5hbCBpbiBwcGIgKi8KJiM0MzsjZGVmaW5lIFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESgkxMDAwMDAwMAomIzQzOwogLyoqCi0gKiB6bDMwNzN4X2RwbGxfYWxsb2MgLSBhbGxvY2F0ZSBEUExMIGRldmljZQotICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCi0gKiBAY2g6IERQTEwgY2hhbm5lbCBudW1iZXIKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQgLSByZWFkIGN1cnJlbnQgdGltZSBmcm9tIFRvRCBjb3VudGVycwomIzQzOyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mbwomIzQzOyAqIEB0czogdGltZXNwZWMgdG8gc3RvcmUgY3VycmVudCB0aW1lCiYjNDM7ICogQHN0czogb3B0aW9uYWwgc3lzdGVtIHRpbWVzdGFtcCBwYWlyIGZvciBjcm9zcy10aW1lc3RhbXBpbmcKICAqCi0gKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLAomIzQzOwkJCQkgICAgICAgc3RydWN0IHRpbWVzcGVjNjQgKnRzLAomIzQzOwkJCQkgICAgICAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCwKJiM0MzsJCQkJCQkgICBwdHBfaW5mbyk7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkcGxsLSZndDtkZXYsIHpsZHBsbC0mZ3Q7aWQsIGZhbHNlLCB0cywgc3RzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQgLSBzZXQgVG9EIGNvdW50ZXJzIHRvIGdpdmVuIHRpbWUKJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm8KJiM0MzsgKiBAdHM6IHRpbWVzcGVjIHdpdGggdGltZSB0byBzZXQKICAqCi0gKiBSZXR1cm46IHBvaW50ZXIgdG8gRFBMTCBkZXZpY2Ugb24gc3VjY2VzcywgZXJyb3IgcG9pbnRlciBvbiBlcnJvcgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgogICovCi1zdHJ1Y3QgemwzMDczeF9kcGxsICoKLXpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCkKJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywKJiM0MzsJCQkJICAgICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjNjQgKnRzKQogewotCXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbDsKJiM0MzsJc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsCiYjNDM7CQkJCQkJICAgcHRwX2luZm8pOwogCi0JemxkcGxsID0ga3phbGxvY19vYmooKnpsZHBsbCk7Ci0JaWYgKCF6bGRwbGwpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwogCi0JemxkcGxsLSZndDtkZXYgPSB6bGRldjsKLQl6bGRwbGwtJmd0O2lkID0gY2g7Ci0JbXV0ZXhfaW5pdCgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJmFtcDt6bGRwbGwtJmd0O3BpbnMpOwomIzQzOwlyZXR1cm4gemwzMDczeF9jaGFuX3RvZF93cml0ZSh6bGRwbGwtJmd0O2RldiwgemxkcGxsLSZndDtpZCwgKnRzKTsKJiM0Mzt9CiAKLQlyZXR1cm4gemxkcGxsOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwIC0gYWRqdXN0IHN1Yi1zZWNvbmQgdGltZSB2aWEgcGhhc2Ugc3RlcAomIzQzOyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbAomIzQzOyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzIChtdXN0IGJlIHdpdGhpbiAoLU5TRUNfUEVSX1NFQywKJiM0MzsgKiAgICAgICAgIE5TRUNfUEVSX1NFQykpCiYjNDM7ICoKJiM0MzsgKiBVc2VzIHRoZSBvdXRwdXQgcGhhc2Ugc3RlcCBtZWNoYW5pc20gd2l0aCB0b2Rfc3RlcD0xIHRvIGFkanVzdCBib3RoCiYjNDM7ICogdGhlIG91dHB1dCBjbG9jayBwaGFzZSBhbmQgdGhlIFRvRCBjb3VudGVyIHNpbXVsdGFuZW91c2x5LiBUaGlzIGtlZXBzCiYjNDM7ICogb3V0cHV0cyBhbmQgVG9EIGNvaGVyZW50LiBPbmx5IHZhbGlkIGluIE5DTyBtb2RlLgomIzQzOyAqCiYjNDM7ICogT3V0cHV0cyBhcmUgZ3JvdXBlZCBieSBzeW50aGVzaXplciBzaW5jZSB0aGUgcGhhc2Ugc3RlcCB2YWx1ZSBpcyBpbgomIzQzOyAqIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcy4gVGhlIGZpcnN0IHN5bnRoIGdyb3VwIHdpdGggZW5hYmxlZCBvdXRwdXRzCiYjNDM7ICogdXNlcyB0b2Rfc3RlcCB0byBhZGp1c3QgYm90aCBvdXRwdXRzIGFuZCB0aGUgVG9EIGNvdW50ZXIuIFJlbWFpbmluZwomIzQzOyAqIGdyb3VwcyBzdGVwIG91dHB1dHMgb25seS4gSWYgbm8gc3ludGggaGFzIGVuYWJsZWQgb3V0cHV0cywgdGhlIFRvRAomIzQzOyAqIGNvdW50ZXIgaXMgc3RlcHBlZCBhbG9uZSB1c2luZyBhbiBlbXB0eSBvdXRwdXQgbWFzayAodGhlIEZXIHVzZXMgdGhlCiYjNDM7ICogbG93ZXN0LUlEIHN5bnRoJiMzOTtzIHBlcmlvZCBmb3IgdGhlIGNvbnZlcnNpb24pLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIG5vIHN5bnRocyBhdmFpbGFibGUsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwsCiYjNDM7CQkJCQkgICAgICAgczY0IGRlbHRhKQomIzQzO3sKJiM0MzsJdTE2IHN5bnRoX21hc2tbWkwzMDczWF9OVU1fU1lOVEhTXSA9IHt9OwomIzQzOwlzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLSZndDtkZXY7CiYjNDM7CWNvbnN0IHN0cnVjdCB6bDMwNzN4X3N5bnRoICpzeW50aDsKJiM0MzsJY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjsKJiM0MzsJc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbjsKJiM0MzsJdTMyIGZpcnN0X3N5bnRoX2ZyZXEgPSAwOwomIzQzOwlib29sIHRvZF9zdGVwcGVkID0gZmFsc2U7CiYjNDM7CXMzMiBzdGVwX2N5Y2xlczsKJiM0MzsJdTMyIHN5bnRoX2ZyZXE7CiYjNDM7CWludCByYzsKJiM0MzsJdTggaTsKJiM0MzsKJiM0MzsJY2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC0mZ3Q7aWQpOwomIzQzOwomIzQzOwkvKiBCdWlsZCBwZXItc3ludGggb3V0cHV0IG1hc2tzIGZyb20gcmVnaXN0ZXJlZCBvdXRwdXQgcGlucyAqLwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBpbiwgJmFtcDt6bGRwbGwtJmd0O3BpbnMsIGxpc3QpIHsKJiM0MzsJCXU4IG91dF9pZCwgc3ludGhfaWQ7CiYjNDM7CiYjNDM7CQlpZiAoemwzMDczeF9kcGxsX2lzX2lucHV0X3BpbihwaW4pKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJb3V0X2lkID0gemwzMDczeF9vdXRwdXRfcGluX291dF9nZXQocGluLSZndDtpZCk7CiYjNDM7CiYjNDM7CQlpZiAoIXpsMzA3M3hfY2hhbl9pc19vdXRfc3RlcHBlZChjaGFuLCBvdXRfaWQpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJc3ludGhfaWQgPSB6bDMwNzN4X2Rldl9vdXRfc3ludGhfZ2V0KHpsZGV2LCBvdXRfaWQpOwomIzQzOwkJaWYgKHN5bnRoX2lkICZndDs9IFpMMzA3M1hfTlVNX1NZTlRIUykgewomIzQzOwkJCWRldl93YXJuKHpsZGV2LSZndDtkZXYsICYjMzQ7VW5leHBlY3RlZCBzeW50aCBpZCBmb3IgT1VUJXVcbiYjMzQ7LAomIzQzOwkJCQkgb3V0X2lkKTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsJCXN5bnRoX21hc2tbc3ludGhfaWRdIHw9IEJJVChvdXRfaWQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFByb2Nlc3MgZWFjaCBzeW50aCBncm91cCAqLwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgWkwzMDczWF9OVU1fU1lOVEhTOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3ludGggPSB6bDMwNzN4X3N5bnRoX3N0YXRlX2dldCh6bGRldiwgaSk7CiYjNDM7CQlpZiAoIXpsMzA3M3hfc3ludGhfaXNfZW5hYmxlZChzeW50aCkgfHwKJiM0MzsJCSAgICB6bDMwNzN4X3N5bnRoX2RwbGxfZ2V0KHN5bnRoKSAhPSB6bGRwbGwtJmd0O2lkKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJc3ludGhfZnJlcSA9IHpsMzA3M3hfc3ludGhfZnJlcV9nZXQoc3ludGgpOwomIzQzOwomIzQzOwkJLyogUmVtZW1iZXIgbG93ZXN0LUlEIHN5bnRoIGZyZXEgZm9yIFRvRC1vbmx5IGZhbGxiYWNrICovCiYjNDM7CQlpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpCiYjNDM7CQkJZmlyc3Rfc3ludGhfZnJlcSA9IHN5bnRoX2ZyZXE7CiYjNDM7CiYjNDM7CQlpZiAoIXN5bnRoX21hc2tbaV0pCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkvKiBTYWZlIGZvciBzMzI6IG1heCBzeW50aCBmcmVxIGlzIDc1MCBNSHogKi8KJiM0MzsJCXN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIHN5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7CiYjNDM7CiYjNDM7CQlyYyA9IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtJmd0O2lkLAomIzQzOwkJCQkJICAgICBzeW50aF9tYXNrW2ldLCBzdGVwX2N5Y2xlcywKJiM0MzsJCQkJCSAgICAgIXRvZF9zdGVwcGVkKTsKJiM0MzsJCWlmIChyYykgewomIzQzOwkJCWlmICh0b2Rfc3RlcHBlZCkgewomIzQzOwkJCQlkZXZfd2Fybih6bGRldi0mZ3Q7ZGV2LAomIzQzOwkJCQkJICYjMzQ7UGFydGlhbCBwaGFzZSBzdGVwIGZhaWx1cmVcbiYjMzQ7KTsKJiM0MzsJCQkJcmV0dXJuIDA7CiYjNDM7CQkJfQomIzQzOwkJCXJldHVybiByYzsKJiM0MzsJCX0KJiM0MzsJCXRvZF9zdGVwcGVkID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CS8qIE5vIGVuYWJsZWQgb3V0cHV0cyBmb3VuZDsgc3RlcCBUb0QgY291bnRlciBvbmx5IHVzaW5nIHRoZQomIzQzOwkgKiBsb3dlc3QtSUQgc3ludGgmIzM5O3MgcGVyaW9kIChlbXB0eSBvdXRwdXQgbWFzaykuCiYjNDM7CSAqLwomIzQzOwlpZiAoIXRvZF9zdGVwcGVkKSB7CiYjNDM7CQlzdGVwX2N5Y2xlcyA9IGRpdl9zNjQoZGVsdGEgKiBmaXJzdF9zeW50aF9mcmVxLCBOU0VDX1BFUl9TRUMpOwomIzQzOwkJcmV0dXJuIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtJmd0O2lkLCAwLAomIzQzOwkJCQkJICAgICAgIHN0ZXBfY3ljbGVzLCB0cnVlKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogLyoqCi0gKiB6bDMwNzN4X2RwbGxfZnJlZSAtIGZyZWUgRFBMTCBkZXZpY2UKLSAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZQomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSAtIGFkanVzdCBQVFAgY2xvY2sgdGltZQomIzQzOyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mbwomIzQzOyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzCiAgKgotICogRGVhbGxvY2F0ZXMgZ2l2ZW4gRFBMTCBkZXZpY2UgcHJldmlvdXNseSBhbGxvY2F0ZWQgYnkgQHpsMzA3M3hfZHBsbF9hbGxvYy4KJiM0MzsgKiBJbiBOQ08gbW9kZSwgbGFyZ2UgZGVsdGFzICgmZ3Q7PSAxIHNlY29uZCkgYXJlIHNwbGl0IGludG8gYSBUb0QKJiM0MzsgKiByZWFkLW1vZGlmeS13cml0ZSBmb3IgdGhlIHNlY29uZHMgcGFydCBhbmQgYW4gb3V0cHV0IHBoYXNlIHN0ZXAgZm9yCiYjNDM7ICogdGhlIHN1Yi1zZWNvbmQgcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgcGhhc2Ugc3RlcCBkaXJlY3RseSwKJiM0MzsgKiBmYWxsaW5nIGJhY2sgdG8gVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIGlmIHBoYXNlIHN0ZXAgaXMgdW5hdmFpbGFibGUuCiYjNDM7ICogSW4gQVVUTy9SRUZMT0NLIG1vZGVzLCBsYXJnZSBkZWx0YXMgYXJlIHNwbGl0IGludG8gVG9ECiYjNDM7ICogcmVhZC1tb2RpZnktd3JpdGUgZm9yIHNlY29uZHMgYW5kIFRJRSB3cml0ZSBmb3IgdGhlIHN1Yi1zZWNvbmQKJiM0MzsgKiByZW1haW5kZXIuIFN1Yi1zZWNvbmQgZGVsdGFzIHVzZSBUSUUgd3JpdGUgZGlyZWN0bHkuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKICAqLwotdm9pZAotemwzMDczeF9kcGxsX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczY0IGRlbHRhKQogewotCVdBUk4oemxkcGxsLSZndDtkcGxsX2RldiwgJiMzNDtEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXG4mIzM0Oyk7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLAomIzQzOwkJCQkJCSAgIHB0cF9pbmZvKTsKJiM0MzsJc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC0mZ3Q7ZGV2OwomIzQzOwljb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuOwomIzQzOwlib29sIHNlY19hZGp1c3RlZCA9IGZhbHNlOwomIzQzOwlzdHJ1Y3QgdGltZXNwZWM2NCB0czsKJiM0MzsJaW50IHJjOwogCi0JbXV0ZXhfZGVzdHJveSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7Ci0Ja2ZyZWUoemxkcGxsKTsKJiM0MzsJaWYgKCFkZWx0YSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwomIzQzOwkvKiBNb2RlcyB3aXRob3V0IHBoYXNlIHN0ZXAgb3IgVElFIHVzZSBwbGFpbiBUb0QgYWRqdXN0ICovCiYjNDM7CWNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZGV2LCB6bGRwbGwtJmd0O2lkKTsKJiM0MzsJaWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikgJmFtcDsmYW1wOwomIzQzOwkgICAgIXpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjaGFuKSkKJiM0MzsJCXJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLSZndDtpZCwKJiM0MzsJCQkJCSAgICAgICBuc190b190aW1lc3BlYzY0KGRlbHRhKSk7CiYjNDM7CiYjNDM7CS8qIFNwbGl0IG9mZiBzZWNvbmRzIHZpYSBUb0QgcmVhZC1tb2RpZnktd3JpdGUgc28gdGhlIHN1Yi1zZWNvbmQKJiM0MzsJICogcmVtYWluZGVyIGNhbiBiZSBhcHBsaWVkIHRocm91Z2ggdGhlIG91dHB1dC1jb2hlcmVudCBtZWNoYW5pc20KJiM0MzsJICogKHBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlKS4KJiM0MzsJICovCiYjNDM7CWlmIChhYnMoZGVsdGEpICZndDs9IE5TRUNfUEVSX1NFQykgewomIzQzOwkJczMyIHJlbWFpbmRlcjsKJiM0MzsKJiM0MzsJCXRzLnR2X3NlYyA9IGRpdl9zNjRfcmVtKGRlbHRhLCBOU0VDX1BFUl9TRUMsICZhbXA7cmVtYWluZGVyKTsKJiM0MzsJCXRzLnR2X25zZWMgPSAwOwomIzQzOwkJZGVsdGEgPSByZW1haW5kZXI7CiYjNDM7CiYjNDM7CQlyYyA9IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtJmd0O2lkLCB0cyk7CiYjNDM7CQlpZiAocmMpCiYjNDM7CQkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwkJc2VjX2FkanVzdGVkID0gdHJ1ZTsKJiM0MzsKJiM0MzsJCS8qIE5vIHN1Yi1zZWNvbmQgcmVtYWluZGVyLCBkb25lICovCiYjNDM7CQlpZiAoIWRlbHRhKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEFwcGx5IHN1Yi1zZWNvbmQgZGVsdGEgdmlhIHBoYXNlIHN0ZXAgKE5DTykgb3IgVElFIHdyaXRlICovCiYjNDM7CWlmICh6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikpIHsKJiM0MzsJCXJjID0gemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoemxkcGxsLCBkZWx0YSk7CiYjNDM7CQlpZiAoIXJjKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcmMgPSB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHpsZGV2LCB6bGRwbGwtJmd0O2lkLCBkZWx0YSk7CiYjNDM7CQlpZiAoIXJjKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlIGZhaWxlZCwgZmFsbCBiYWNrIHRvIFRvRCBhZGp1c3QgKi8KJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLSZndDtpZCwKJiM0MzsJCQkJICAgICBuc190b190aW1lc3BlYzY0KGRlbHRhKSk7CiYjNDM7CiYjNDM7CS8qIEluIHRoZSB1bmxpa2VseSBldmVudCB0aGF0IGJvdGggcGhhc2Ugc3RlcC9USUUgd3JpdGUgYW5kIGZhbGxiYWNrCiYjNDM7CSAqIFRvRCBhZGp1c3QgZmFpbCBhZnRlciBzZWNvbmRzIHdlcmUgYWxyZWFkeSBjb21taXR0ZWQsIHJldHVybgomIzQzOwkgKiBzdWNjZXNzIHRvIHByZXZlbnQgdGhlIFBUUCBzZXJ2byBmcm9tIHJldHJ5aW5nIHRoZSBmdWxsIGRlbHRhIGFuZAomIzQzOwkgKiBhcHBseWluZyBzZWNvbmRzIGFnYWluLiBUaGUgc3ViLXNlY29uZCByZXNpZHVhbCB3aWxsIHNlbGYtY29ycmVjdAomIzQzOwkgKiBpbiB0aGUgbmV4dCBzZXJ2byBjeWNsZS4KJiM0MzsJICovCiYjNDM7CWlmIChyYyAmYW1wOyZhbXA7IHNlY19hZGp1c3RlZCkgewomIzQzOwkJZGV2X3dhcm4oemxkZXYtJmd0O2RldiwKJiM0MzsJCQkgJiMzNDtTdWItc2Vjb25kIGFkanVzdG1lbnQgZmFpbGVkIGFmdGVyIHNlY29uZHMgYXBwbGllZFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUgLSBhZGp1c3QgUFRQIGNsb2NrIGZyZXF1ZW5jeQomIzQzOyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mbwomIzQzOyAqIEBzY2FsZWRfcHBtOiBmcmVxdWVuY3kgYWRqdXN0bWVudCBpbiBzY2FsZWQgcHBtIChwcG0gKiAyXjE2KQomIzQzOyAqCiYjNDM7ICogT25seSBzdXBwb3J0ZWQgaW4gTkNPIG1vZGUuIFdyaXRlcyB0aGUgZGVsdGEgZnJlcXVlbmN5IG9mZnNldCByZWdpc3Rlci4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRU9QTk9UU1VQUCBpZiBub3QgaW4gTkNPIG1vZGUsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludAomIzQzO3psMzA3M3hfZHBsbF9wdHBfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGxvbmcgc2NhbGVkX3BwbSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLAomIzQzOwkJCQkJCSAgIHB0cF9pbmZvKTsKJiM0MzsJY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjsKJiM0MzsJczY0IG9mZnNldDsKJiM0MzsKJiM0MzsJLyogQ29udmVydCBzY2FsZWRfcHBtIHRvIGRmX29mZnNldCBpbiAyXi00OCBzdGVwczoKJiM0MzsJICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjMyKSAvIDEwXjYKJiM0MzsJICoKJiM0MzsJICogU2ltcGxpZnkgdG8gYXZvaWQgb3ZlcmZsb3c6CiYjNDM7CSAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogMl4yNikgLyA1XjYKJiM0MzsJICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiA2NzEwODg2NCkgLyAxNTYyNQomIzQzOwkgKi8KJiM0MzsJb2Zmc2V0ID0gLWRpdl9zNjQoKHM2NClzY2FsZWRfcHBtICogNjcxMDg4NjRMTCwgMTU2MjUpOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwomIzQzOwljaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRwbGwtJmd0O2RldiwgemxkcGxsLSZndDtpZCk7CiYjNDM7CWlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKQomIzQzOwkJcmV0dXJuIHNjYWxlZF9wcG0gPyAtRU9QTk9UU1VQUCA6IDA7CiYjNDM7CWlmIChvZmZzZXQgPT0gY2hhbi0mZ3Q7ZGZfb2Zmc2V0KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCh6bGRwbGwtJmd0O2RldiwgemxkcGxsLSZndDtpZCwgb2Zmc2V0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSAtIGFkanVzdCBQVFAgY2xvY2sgcGhhc2UKJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm8KJiM0MzsgKiBAZGVsdGE6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMKJiM0MzsgKgomIzQzOyAqIE9ubHkgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMuIFVzZXMgVElFIHdyaXRlIGZvcgomIzQzOyAqIG5hbm9zZWNvbmQgcmVzb2x1dGlvbiBwaGFzZSBhZGp1c3RtZW50LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIG1vZGUgZG9lc24mIzM5O3Qgc3VwcG9ydCBUSUUsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczMyIGRlbHRhKQomIzQzO3sKJiM0MzsJc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsCiYjNDM7CQkJCQkJICAgcHRwX2luZm8pOwomIzQzOwlzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLSZndDtkZXY7CiYjNDM7CWNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47CiYjNDM7CiYjNDM7CWlmICghZGVsdGEpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7emxkcGxsLSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJY2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC0mZ3Q7aWQpOwomIzQzOwomIzQzOwlpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjaGFuKSkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoemxkZXYsIHpsZHBsbC0mZ3Q7aWQsIGRlbHRhKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHMzMgomIzQzO3psMzA3M3hfZHBsbF9wdHBfZ2V0bWF4cGhhc2Uoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvIF9fYWx3YXlzX3VudXNlZCkKJiM0Mzt7CiYjNDM7CS8qIEhXIGxpbWl0cyBUSUUgd3JpdGUgdG8gJiM0MzstMSBzZWNvbmQuIFJldHVybiB0aGUgY29uc3RhbnQgSFcKJiM0MzsJICogbGltaXQgYW5kIGxldCBhZGpwaGFzZSBoYW5kbGUgbW9kZS1zcGVjaWZpYyBjaGVja3MuCiYjNDM7CSAqLwomIzQzOwlyZXR1cm4gTlNFQ19QRVJfU0VDIC0gMTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9wZXJvdXRfZmluZF9waW4gLSBmaW5kIHBpbiBieSBwZXJvdXQgY2hhbm5lbCBpbmRleAomIzQzOyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbAomIzQzOyAqIEBpZHg6IHBlcm91dCBjaGFubmVsIGluZGV4IHRvIGZpbmQKJiM0MzsgKgomIzQzOyAqIFJldHVybjogcG9pbnRlciB0byB0aGUgcGluLCBvciBOVUxMIGlmIG5vdCBmb3VuZAomIzQzOyAqLwomIzQzO3N0YXRpYyBzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqCiYjNDM7emwzMDczeF9kcGxsX3B0cF9wZXJvdXRfZmluZF9waW4oc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLCBpbnQgaWR4KQomIzQzO3sKJiM0MzsJc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbjsKJiM0MzsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeShwaW4sICZhbXA7emxkcGxsLSZndDtwaW5zLCBsaXN0KSB7CiYjNDM7CQlpZiAocGluLSZndDtwZXJvdXRfaWR4ID09IGlkeCkKJiM0MzsJCQlyZXR1cm4gcGluOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2VuYWJsZSAtIGVuYWJsZS9kaXNhYmxlIFBUUCBjbG9jayBmdW5jdGlvbnMKJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm8KJiM0MzsgKiBAcnE6IHRoZSByZXF1ZXN0ZWQgY2xvY2sgZnVuY3Rpb24gYW5kIHBhcmFtZXRlcnMKJiM0MzsgKiBAb246IHRydWUgdG8gZW5hYmxlLCBmYWxzZSB0byBkaXNhYmxlCiYjNDM7ICoKJiM0MzsgKiBIYW5kbGVzIFBUUF9DTEtfUkVRX1BFUk9VVCByZXF1ZXN0cy4gT25seSAxUFBTIChwZXJpb2QgPSAxcykgaXMgc3VwcG9ydGVkLgomIzQzOyAqIE9uIGVuYWJsZSwgY29uZmlndXJlcyB0aGUgb3V0cHV0IGRpdmlkZXIgZm9yIDEgSHouIE9uIGRpc2FibGUsIGRvZXMgbm90aGluZwomIzQzOyAqIGFzIHRoZSBzaWduYWwgaXMgbm90IGRpc2FibGVkLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2VuYWJsZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sCiYjNDM7CQkJCSAgIHN0cnVjdCBwdHBfY2xvY2tfcmVxdWVzdCAqcnEsIGludCBvbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLAomIzQzOwkJCQkJCSAgIHB0cF9pbmZvKTsKJiM0MzsJc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbjsKJiM0MzsJdW5zaWduZWQgaW50IGlkeDsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlpZiAocnEtJmd0O3R5cGUgIT0gUFRQX0NMS19SRVFfUEVST1VUKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlpZHggPSBycS0mZ3Q7cGVyb3V0LmluZGV4OwomIzQzOwlpZiAoaWR4ICZndDs9IGluZm8tJmd0O25fcGVyX291dCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkvKiBUb2dnbGluZyBvdXRwdXQgcGlucyBjYW4gcHJvZHVjZSBydW50IHB1bHNlcywgc28gZGlzYWJsZQomIzQzOwkgKiBpcyBhIG5vLW9wLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFvbikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwkvKiBPbmx5IGFjY2VwdCBleGFjdGx5IDFQUFMgKHBlcmlvZC5zZWMgPT0gMSwgbnNlYyA9PSAwKSAqLwomIzQzOwlpZiAocnEtJmd0O3Blcm91dC5wZXJpb2Quc2VjICE9IDEgfHwgcnEtJmd0O3Blcm91dC5wZXJpb2QubnNlYyAhPSAwKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwomIzQzOwlwaW4gPSB6bDMwNzN4X2RwbGxfcHRwX3Blcm91dF9maW5kX3Bpbih6bGRwbGwsIGlkeCk7CiYjNDM7CWlmICghcGluKSB7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQWxyZWFkeSBhdCAxIEh6LCBub3RoaW5nIHRvIGRvICovCiYjNDM7CWlmICh6bDMwNzN4X2Rldl9vdXRwdXRfcGluX2ZyZXFfZ2V0KHpsZHBsbC0mZ3Q7ZGV2LCBwaW4tJmd0O2lkKSA9PSAxKSB7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmMgPSBfX3psMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoemxkcGxsLCBwaW4sIDEpOwomIzQzOwomIzQzOwltdXRleF91bmxvY2soJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwomIzQzOwlpZiAoIXJjKQomIzQzOwkJZHBsbF9waW5fY2hhbmdlX250ZihwaW4tJmd0O2RwbGxfcGluKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHB0cF9jbG9ja19pbmZvIHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mbyA9IHsKJiM0MzsJLm93bmVyCQk9IFRISVNfTU9EVUxFLAomIzQzOwkubWF4X2Fkagk9IFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESiwKJiM0MzsJLmdldHRpbWV4NjQJPSB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQsCiYjNDM7CS5zZXR0aW1lNjQJPSB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCwKJiM0MzsJLmFkanRpbWUJPSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUsCiYjNDM7CS5hZGpmaW5lCT0gemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lLAomIzQzOwkuYWRqcGhhc2UJPSB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlLAomIzQzOwkuZ2V0bWF4cGhhc2UJPSB6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlLAomIzQzOwkuZW5hYmxlCQk9IHpsMzA3M3hfZHBsbF9wdHBfZW5hYmxlLAomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9yZWdpc3RlciAtIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgYSBEUExMIGNoYW5uZWwKJiM0MzsgKiBAemxkcGxsOiBEUExMIGNoYW5uZWwgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvcgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtJmd0O2RldjsKJiM0MzsJc3RydWN0IHB0cF9jbG9jayAqcHRwX2Nsb2NrOwomIzQzOwomIzQzOwlzbnByaW50Zih6bGRwbGwtJmd0O3B0cF9pbmZvLm5hbWUsIHNpemVvZih6bGRwbGwtJmd0O3B0cF9pbmZvLm5hbWUpLAomIzQzOwkJICYjMzQ7emwzMDczeC1kcGxsJXUmIzM0OywgemxkcGxsLSZndDtpZCk7CiYjNDM7CiYjNDM7CXB0cF9jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcigmYW1wO3psZHBsbC0mZ3Q7cHRwX2luZm8sIHpsZGV2LSZndDtkZXYpOwomIzQzOwlpZiAoSVNfRVJSKHB0cF9jbG9jaykpIHsKJiM0MzsJCWRldl9lcnIoemxkZXYtJmd0O2RldiwgJiMzNDtGYWlsZWQgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBEUExMJXVcbiYjMzQ7LAomIzQzOwkJCXpsZHBsbC0mZ3Q7aWQpOwomIzQzOwkJcmV0dXJuIFBUUl9FUlIocHRwX2Nsb2NrKTsKJiM0MzsJfQomIzQzOwomIzQzOwl6bGRwbGwtJmd0O3B0cF9jbG9jayA9IHB0cF9jbG9jazsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlciAtIHVucmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBhIERQTEwgY2hhbm5lbAomIzQzOyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byB1bnJlZ2lzdGVyIFBUUCBjbG9jayBmb3IKJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCB6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQomIzQzO3sKJiM0MzsJaWYgKCFJU19FUlJfT1JfTlVMTCh6bGRwbGwtJmd0O3B0cF9jbG9jaykpIHsKJiM0MzsJCXB0cF9jbG9ja191bnJlZ2lzdGVyKHpsZHBsbC0mZ3Q7cHRwX2Nsb2NrKTsKJiM0MzsJCXpsZHBsbC0mZ3Q7cHRwX2Nsb2NrID0gTlVMTDsKJiM0MzsJfQogfQogCiAvKioKQEAgLTI0MDMsNiAmIzQzOzI4NjMsNDggQEAgemwzMDczeF9kcGxsX3JlZl9zeW5jX3BhaXJzX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9hbGxvYyAtIGFsbG9jYXRlIERQTEwgZGV2aWNlCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyCiYjNDM7ICoKJiM0MzsgKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHBvaW50ZXIgdG8gRFBMTCBkZXZpY2Ugb24gc3VjY2VzcywgZXJyb3IgcG9pbnRlciBvbiBlcnJvcgomIzQzOyAqLwomIzQzO3N0cnVjdCB6bDMwNzN4X2RwbGwgKgomIzQzO3psMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbDsKJiM0MzsKJiM0MzsJemxkcGxsID0ga3phbGxvY19vYmooKnpsZHBsbCk7CiYjNDM7CWlmICghemxkcGxsKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiYjNDM7CiYjNDM7CXpsZHBsbC0mZ3Q7ZGV2ID0gemxkZXY7CiYjNDM7CXpsZHBsbC0mZ3Q7aWQgPSBjaDsKJiM0MzsJemxkcGxsLSZndDtwdHBfaW5mbyA9IHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mbzsKJiM0MzsJbXV0ZXhfaW5pdCgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiYjNDM7CUlOSVRfTElTVF9IRUFEKCZhbXA7emxkcGxsLSZndDtwaW5zKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsZHBsbDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlCiYjNDM7ICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlCiYjNDM7ICoKJiM0MzsgKiBEZWFsbG9jYXRlcyBnaXZlbiBEUExMIGRldmljZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBieSBAemwzMDczeF9kcGxsX2FsbG9jLgomIzQzOyAqLwomIzQzO3ZvaWQKJiM0Mzt6bDMwNzN4X2RwbGxfZnJlZShzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpCiYjNDM7ewomIzQzOwlXQVJOKHpsZHBsbC0mZ3Q7ZHBsbF9kZXYsICYjMzQ7RFBMTCBkZXZpY2UgaXMgc3RpbGwgcmVnaXN0ZXJlZFxuJiMzNDspOwomIzQzOwomIzQzOwltdXRleF9kZXN0cm95KCZhbXA7emxkcGxsLSZndDtsb2NrKTsKJiM0MzsJa2ZyZWUoemxkcGxsKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHpsMzA3M3hfZHBsbF9yZWdpc3RlciAtIHJlZ2lzdGVyIERQTEwgZGV2aWNlIGFuZCBhbGwgaXRzIHBpbnMKICAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZQpAQCAtMjQzMyw2ICYjNDM7MjkzNSwxMyBAQCB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQogCQlyZXR1cm4gcmM7CiAJfQogCiYjNDM7CXJjID0gemwzMDczeF9kcGxsX3B0cF9yZWdpc3Rlcih6bGRwbGwpOwomIzQzOwlpZiAocmMpIHsKJiM0MzsJCXpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTsKJiM0MzsJCXpsMzA3M3hfZHBsbF9kZXZpY2VfdW5yZWdpc3Rlcih6bGRwbGwpOwomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI0NDYsNyAmIzQzOzI5NTUsNyBAQCB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQogdm9pZAogemwzMDczeF9kcGxsX3VucmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQogewotCS8qIFVucmVnaXN0ZXIgYWxsIHBpbnMgYW5kIGRwbGwgKi8KJiM0MzsJemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHpsZHBsbCk7CiAJemwzMDczeF9kcGxsX3BpbnNfdW5yZWdpc3Rlcih6bGRwbGwpOwogCXpsMzA3M3hfZHBsbF9kZXZpY2VfdW5yZWdpc3Rlcih6bGRwbGwpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oCmluZGV4IGZhZWJjNDAyYmExYjcwLi45YjVmNzJjMzM4NDljZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaApAQCAtNSw2ICYjNDM7NSw4IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9kcGxsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbGlzdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tdXRleC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wdHBfY2xvY2tfa2VybmVsLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7Y29yZS5oJiMzNDsKIApAQCAtMjIsNiAmIzQzOzI0LDggQEAKICAqIEB0eXBlOiBEUExMIHR5cGUgKFBQUyBvciBFRUMpCiAgKiBAbG9ja19zdGF0dXM6IGxhc3Qgc2F2ZWQgRFBMTCBsb2NrIHN0YXR1cwogICogQHBpbnM6IGxpc3Qgb2YgcGlucwomIzQzOyAqIEBwdHBfaW5mbzogUFRQIGNsb2NrIGluZm8KJiM0MzsgKiBAcHRwX2Nsb2NrOiByZWdpc3RlcmVkIFBUUCBjbG9jayAob3IgTlVMTCkKICAqLwogc3RydWN0IHpsMzA3M3hfZHBsbCB7CiAJc3RydWN0IGxpc3RfaGVhZAkJbGlzdDsKQEAgLTM2LDYgJiM0Mzs0MCw4IEBAIHN0cnVjdCB6bDMwNzN4X2RwbGwgewogCWVudW0gZHBsbF90eXBlCQkJdHlwZTsKIAllbnVtIGRwbGxfbG9ja19zdGF0dXMJCWxvY2tfc3RhdHVzOwogCXN0cnVjdCBsaXN0X2hlYWQJCXBpbnM7CiYjNDM7CXN0cnVjdCBwdHBfY2xvY2tfaW5mbwkJcHRwX2luZm87CiYjNDM7CXN0cnVjdCBwdHBfY2xvY2sJCSpwdHBfY2xvY2s7CiB9OwogCiBzdHJ1Y3QgemwzMDczeF9kcGxsICp6bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oCmluZGV4IGI3MGVhZDdkNDQ5NWIyLi40NDc3NTdlOTk4NDVkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaApAQCAtMTc5LDYgJiM0MzsxNzksMjAgQEAKICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRAkJCUdFTk1BU0soMiwgMCkKICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRF9BQ0NfSQkJNAogCiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTAkJCVpMX1JFRyg1LCAweDMwLCAxKQomIzQzOyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUAkJCUdFTk1BU0soMiwgMCkKJiM0MzsjZGVmaW5lIFpMX0RQTExfVElFX0NUUkxfT1BfV1IJCQk0CiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTF9NQVNLCQlaTF9SRUcoNSwgMHgzMSwgMSkKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9DVFJMKF9pZHgpCQkJCQlcCiYjNDM7CVpMX1JFR19JRFgoX2lkeCwgNSwgMHgzOCwgMSwgOCwgMSkKJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfU0VNCQkJQklUKDQpCiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRAkJCUdFTk1BU0soMywgMCkKJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaCTEKJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX0NVUlJFTlQJOAomIzQzOyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFoJOQomIzQzOwogI2RlZmluZSBaTF9SRUdfRFBMTF9NRUFTX0NUUkwJCQlaTF9SRUcoNSwgMHg1MCwgMSkKICNkZWZpbmUgWkxfRFBMTF9NRUFTX0NUUkxfRU4JCQlCSVQoMCkKICNkZWZpbmUgWkxfRFBMTF9NRUFTX0NUUkxfQVZHX0ZBQ1RPUgkJR0VOTUFTSyg3LCA0KQpAQCAtMTkzLDYgJiM0MzsyMDcsOSBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogUmVnaXN0ZXIgUGFnZXMgNi03LCBEUExMIERhdGEKJiM0MzsgKgomIzQzOyAqIFBlci1jaGFubmVsIHJlZ2lzdGVycyB3aXRoIHN0cmlkZSAweDIwLiBDaGFubmVscyAwLTMgcmVzaWRlIG9uIHBhZ2UgNiwKJiM0MzsgKiBjaGFubmVsIDQgb24gcGFnZSA3LgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNkZWZpbmUgWkxfUkVHX0RQTExfREZfT0ZGU0VUXzAzKF9pZHgpCQkJCQlcCkBAIC0yMDIsNiAmIzQzOzIxOSwyNCBAQAogCSgoX2lkeCkgJmx0OyA0ID8gWkxfUkVHX0RQTExfREZfT0ZGU0VUXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfREZfT0ZGU0VUXzQpCiAjZGVmaW5lIFpMX0RQTExfREZfT0ZGU0VUX1VOS05PV04JUzY0X01JTgogCiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KQkJCQkJXAomIzQzOwlaTF9SRUdfSURYKF9pZHgsIDYsIDB4MEMsIDYsIDQsIDB4MjApCiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQV80CQkJWkxfUkVHKDcsIDB4MEMsIDYpCiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQShfaWR4KQkJCQkJXAomIzQzOwkoKF9pZHgpICZsdDsgNCA/IFpMX1JFR19EUExMX1RJRV9EQVRBXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVElFX0RBVEFfNCkKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUNfMDMoX2lkeCkJCQkJCVwKJiM0MzsJWkxfUkVHX0lEWChfaWR4LCA2LCAweDEyLCA2LCA0LCAweDIwKQomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQ180CQkJWkxfUkVHKDcsIDB4MTIsIDYpCiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDKF9pZHgpCQkJCQlcCiYjNDM7CSgoX2lkeCkgJmx0OyA0ID8gWkxfUkVHX0RQTExfVE9EX1NFQ18wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RPRF9TRUNfNCkKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU18wMyhfaWR4KQkJCQkJXAomIzQzOwlaTF9SRUdfSURYKF9pZHgsIDYsIDB4MTgsIDQsIDQsIDB4MjApCiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlNfNAkJCVpMX1JFRyg3LCAweDE4LCA0KQomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TKF9pZHgpCQkJCQlcCiYjNDM7CSgoX2lkeCkgJmx0OyA0ID8gWkxfUkVHX0RQTExfVE9EX05TXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVE9EX05TXzQpCiYjNDM7CiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFJlZ2lzdGVyIFBhZ2UgOSwgU3ludGggYW5kIE91dHB1dAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMjIxLDYgJiM0MzsyNTYsOCBAQAogI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9FTgkJCUJJVCgwKQogI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9TWU5USF9TRUwJCUdFTk1BU0soNiwgNCkKIAomIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTSwkJWkxfUkVHKDksIDB4MzYsIDIpCiYjNDM7CiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogUmVnaXN0ZXIgUGFnZSAxMCwgUmVmIE1haWxib3gKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMzE2LDYgJiM0MzszNTMsMjUgQEAKICNkZWZpbmUgWkxfUkVHX09VVFBVVF9FU1lOQ19XSURUSAkJWkxfUkVHKDE0LCAweDE4LCA0KQogI2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX0NPTVAJCVpMX1JFRygxNCwgMHgyMCwgNCkKIAomIzQzOy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgomIzQzOyAqIFJlZ2lzdGVyIFBhZ2UgOSwgT3V0cHV0IFBoYXNlIFN0ZXAKJiM0MzsgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTAkJWkxfUkVHKDksIDB4MzgsIDEpCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX0RQTEwJCUdFTk1BU0soNiwgNCkKJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVAJQklUKDMpCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QCQlHRU5NQVNLKDEsIDApCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX05PTkUJMAomIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9SRVNFVAkxCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1JFQUQJMgomIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURQkzCiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTlVNQkVSCQlaTF9SRUcoOSwgMHgzOSwgMSkKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLCQlaTF9SRUcoOSwgMHgzYSwgMikKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBCQlaTF9SRUcoOSwgMHgzYywgNCkKJiM0MzsKIC8qCiAgKiBSZWdpc3RlciBQYWdlIDI1NSAtIEhXIHJlZ2lzdGVycyBhY2Nlc3MKICAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxMToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDE0MQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDc2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBUUCBDbG9jayBQYXRjaCBmb3IgdGhlIEF6dXJpdGUgRFBMTCBEcml2ZXIgKHpsMzA3M3gpKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGFkZGluZyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIsIGBkcml2ZXJzL2RwbGwvemwzMDczeC9gLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiBpdCYjMzk7cyByZWFjaGFibGUgYW5kIGlkZW50aWZ5IHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBmdW5jdGlvbnMgdG8gdGFyZ2V0LgoKRmlyc3QsIEkgc2VlIHRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYEtjb25maWdgIGZpbGUsIG1ha2luZyB0aGUgZHJpdmVyIGRlcGVuZCBvbiBgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxgLiBUaGF0IG1lYW5zIGBQVFBfMTU4OF9DTE9DS2AgaXMgbm93IGNydWNpYWwsIGFsb25nIHdpdGggdGhlIHN0YW5kYXJkIGBaTDMwNzNYYCwgYFpMMzA3M1hfSTJDYCwgYW5kIGBaTDMwNzNYX1NQSWAgY29uZmlndXJhdGlvbnMuIFNvLCB0aGUgYmFzZSByZXF1aXJlbWVudHMgYXJlIGBaTDMwNzNYYCwgYW5kIG9uZSBvZiB0aGUgY29tbXVuaWNhdGlvbiBwcm90b2NvbHMgKGBaTDMwNzNYX0kyQ2Agb3IgYFpMMzA3M1hfU1BJYCksIGFuZCBub3cgdGhlIGBQVFBfMTU4OF9DTE9DS2AgY29uZmlnLgoKTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIHRoZSBuZXcgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgSSBzaG91bGQgYmUgZnV6emluZy4gTG9va3MgbGlrZSB0aGVyZSBhcmUgYSBudW1iZXIgb2YgZnVuY3Rpb25zIGFkZGVkIGZvciByZWFkL3dyaXRlIFRpbWUgb2YgRGF5IChUb0QpLCBwaGFzZSBhZGp1c3RtZW50LCBmcmVxdWVuY3kgYWRqdXN0bWVudCwgYW5kIFBUUCBjbG9jayByZWdpc3RyYXRpb24uIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGVzZTogYHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NGAsIGB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NGAsIGB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVgLCBgemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lYCwgYHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2VgLCBgemwzMDczeF9kcGxsX3B0cF9lbmFibGVgLCBgemwzMDczeF9jaGFuX3RvZF9yZWFkYCwgYHpsMzA3M3hfY2hhbl90b2Rfd3JpdGVgLCBgemwzMDczeF9jaGFuX3RvZF9hZGp1c3RgLCBgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXBgLCBhbmQgYHpsMzA3M3hfY2hhbl90aWVfd3JpdGVgLiBUaGVzZSBhcmUgbXkgaW5pdGlhbCB0YXJnZXRzLgoKTmV4dCwgaG93IGRvIEkgZ2V0IHRvIHRoZSBkcml2ZXI/IEl0JiMzOTtzIGFuIEkyQy9TUEkgZHJpdmVyLCBzbyBpdCBjYW4gYmUgcmVhY2hlZCB0aHJvdWdoIHRoZSBJMkMvU1BJIHN1YnN5c3RlbXMuIEkgY291bGQgaGl0IGl0IGZyb20gdXNlcnNwYWNlIHZpYSBgL2Rldi9pMmMtZGV2YCBvciBgL2Rldi9zcGlkZXZgLCBwb3RlbnRpYWxseSB1c2luZyBkZXZpY2UgdHJlZSBvdmVybGF5cywgb3IsIGlmIFN5emthbGxlciBzdXBwb3J0cyBpdCwgaXQgY291bGQgaW5qZWN0IEkyQy9TUEkgZGV2aWNlcy4gQmVjYXVzZSBpdCByZWdpc3RlcnMgYSBQVFAgY2xvY2ssIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGlzIGdvaW5nIHRvIGJlIHRoZSBQVFAgaW9jdGxzIHRocm91Z2ggYC9kZXYvcHRwWGAuIFRoYW5rZnVsbHksIFN5emthbGxlciBzdXBwb3J0cyBmdXp6aW5nIFBUUCBjbG9ja3MuIFNvIHRoYXQmIzM5O3MgdGhlIHBhdGguCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bGwgcXVpY2tseSB2ZXJpZnkgdGhvc2UgY29uZmlnIG5hbWVzIGFnYWluOiBgWkwzMDczWGAsIGBaTDMwNzNYX0kyQ2AsIGBaTDMwNzNYX1NQSWAsIGFuZCBgUFRQXzE1ODhfQ0xPQ0tgLgoKQmVmb3JlIEkgY2FsbCB0aGUgYHNldC1yZXN1bHRzYCB0b29sLCBsZXQgbWUganVzdCBxdWlja2x5IHJ1biB0aHJvdWdoIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gYERQTExgIGlzIHNlbGVjdGVkLCBgTkVUX0RFVkxJTktgIGlzIHNlbGVjdGVkLCBhbmQgYFJFR01BUGAgaXMgc2VsZWN0ZWQuIE9rYXksIGxvb2tzIGdvb2QuIFRpbWUgdG8gc2V0IHRob3NlIHJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTE6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFpMMzA3M1gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctMi1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWc6Mzpjb25maWcgWkwzMDczWFxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZy00LVx0dHJpc3RhdGUgXCYjMzQ7TWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlc1wmIzM0OyBpZiBDT01QSUxFX1RFU1Rcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTE2LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZzoxNzpjb25maWcgWkwzMDczWF9JMkNcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctMTgtXHR0cmlzdGF0ZSBcJiMzNDtJMkMgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzXCYjMzQ7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZy0yOC1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWc6Mjk6Y29uZmlnIFpMMzA3M1hfU1BJXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTMwLVx0dHJpc3RhdGUgXCYjMzQ7U1BJIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDExOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxOTcwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgUFRQIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGNvbmZpZ3VyYXRpb25zOiBgWkwzMDczWGAsIGBaTDMwNzNYX0kyQ2AsIGFuZCBgWkwzMDczWF9TUElgLiBTZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJk4oCUZGlmZmVyZW50IGNvbW11bmljYXRpb24gaW50ZXJmYWNlcyBmb3IgdGhlIHNhbWUgY29yZSBjaGlwLiBBbmQsIGFzIGV4cGVjdGVkLCB3ZSBuZWVkIGBQVFBfMTU4OF9DTE9DS2AgZm9yIFByZWNpc2lvbiBUaW1lIFByb3RvY29sIHN1cHBvcnQuIFRoaXMgYWxsIG1ha2VzIHNlbnNlLCBhcyB0aGUgWkwzMDczWCBpcyBhIGNvbW1vbiBQVFAgY2xvY2sgY2hpcC4KCk5vdywgbGV0IG1lIHF1aWNrbHkgcmV2aWV3IHRoZSBrZXkgZnVuY3Rpb24gY2FsbHMgSSYjMzk7bSBsaWtlbHkgdG8gZW5jb3VudGVyIHJlbGF0ZWQgdG8gdGhlIGBaTDMwNzNYYCBhbmQgaXRzIFBUUCBjYXBhYmlsaXRpZXMuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhvc2Ugc3BlY2lmaWMgYHpsMzA3M3hfZHBsbF9wdHBfKmAgY2FsbHMg4oCTIHRoYXQgZ2l2ZXMgbWUgYSBncmVhdCBtZW50YWwgbWFwIG9mIHRoZSBjb3JlIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBmdW5jdGlvbnMgcmVsYXRlZCB0byBnZXR0aW5nIGFuZCBzZXR0aW5nIHRpbWUsIGFkanVzdGluZywgZW5hYmxpbmcsIGFuZCByZWFkaW5nIGFuZCB3cml0aW5nIHRvIFRPRCAoVGltZSBvZiBEYXkpLiBUaGUgYWRqdXN0bWVudCBmdW5jdGlvbnMgYW5kIHBoYXNlIHN0ZXBwaW5nIGFyZSBrZXkuIEkgYWxzbyBzZWUgYSBmdW5jdGlvbiB0aGF0IGhhcyB0aWUsIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHdoYXQmIzM5O3MgaW52b2x2ZWQgd2l0aCB0aGF0LgoKQWxyaWdodCwgSSBzaG91bGQgY2hlY2sgd2hldGhlciBgUFRQXzE1ODhfQ0xPQ0tgIGlzIHNldCBhcyBJIG5lZWQgdG8gZW5hYmxlIHRoZSBQVFAgZmVhdHVyZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTE6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBUUF8xNTg4X0NMT0NLJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9wdHAvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3B0cC9LY29uZmlnPTY9bWVudSBcJiMzNDtQVFAgY2xvY2sgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9wdHAvS2NvbmZpZy03LVxuZHJpdmVycy9wdHAvS2NvbmZpZzo4OmNvbmZpZyBQVFBfMTU4OF9DTE9DS1xuZHJpdmVycy9wdHAvS2NvbmZpZy05LVx0dHJpc3RhdGUgXCYjMzQ7UFRQIGNsb2NrIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL3B0cC9LY29uZmlnLTI5LVxuZHJpdmVycy9wdHAvS2NvbmZpZzozMDpjb25maWcgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbmRyaXZlcnMvcHRwL0tjb25maWctMzEtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvcHRwL0tjb25maWctNDEtXG5kcml2ZXJzL3B0cC9LY29uZmlnOjQyOmNvbmZpZyBQVFBfMTU4OF9DTE9DS19EVEVcbmRyaXZlcnMvcHRwL0tjb25maWctNDMtXHR0cmlzdGF0ZSBcJiMzNDtCcm9hZGNvbSBEVEUgYXMgUFRQIGNsb2NrXCYjMzQ7XG4tLVxuZHJpdmVycy9wdHAvS2NvbmZpZy01Ny1cbmRyaXZlcnMvcHRwL0tjb25maWc6NTg6Y29uZmlnIFBUUF8xNTg4X0NMT0NLX1FPUklRXG5kcml2ZXJzL3B0cC9LY29uZmlnLTU5LVx0dHJpc3RhdGUgXCYjMzQ7RnJlZXNjYWxlIFFvcklRIDE1ODggdGltZXIgYXMgUFRQIGNsb2NrXCYjMzQ7XG4tLVxuZHJpdmVycy9wdHAvS2NvbmZpZz03NT1jb25maWcgRFA4MzY0MF9QSFlcbi0tXG5kcml2ZXJzL3B0cC9LY29uZmlnLTkxLVxuZHJpdmVycy9wdHAvS2NvbmZpZzo5Mjpjb25maWcgUFRQXzE1ODhfQ0xPQ0tfSU5FU1xuZHJpdmVycy9wdHAvS2NvbmZpZy05My1cdHRyaXN0YXRlIFwmIzM0O1pIQVcgSW5FUyBQVFAgdGltZSBzdGFtcGluZyBJUCBjb3JlXCYjMzQ7XG4tLVxuZHJpdmVycy9wdHAvS2NvbmZpZy0xMDItXG5kcml2ZXJzL3B0cC9LY29uZmlnOjEwMzpjb25maWcgUFRQXzE1ODhfQ0xPQ0tfUENIXG5kcml2ZXJzL3B0cC9LY29uZmlnLTEwNC1cdHRyaXN0YXRlIFwmIzM0O0ludGVsIFBDSCBFRzIwVCBhcyBQVFAgY2xvY2tcJiMzNDtcbi0tXG5kcml2ZXJzL3B0cC9LY29uZmlnLTEyMS1cbmRyaXZlcnMvcHRwL0tjb25maWc6MTIyOmNvbmZpZyBQVFBfMTU4OF9DTE9DS19LVk1cbmRyaXZlcnMvcHRwL0tjb25maWctMTIzLVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIHZpcnR1YWwgUFRQIGNsb2NrXCYjMzQ7XG4tLVxuZHJpdmVycy9wdHAvS2NvbmZpZy0xMzMtXG5kcml2ZXJzL3B0cC9LY29uZmlnOjEzNDpjb25maWcgUFRQXzE1ODhfQ0xPQ0tfVk1DTE9DS1xuZHJpdmVycy9wdHAvS2NvbmZpZy0xMzUtXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIG1hY2hpbmUgUFRQIGNsb2NrXCYjMzQ7XG4tLVxuZHJpdmVycy9wdHAvS2NvbmZpZy0xNTAtXG5kcml2ZXJzL3B0cC9LY29uZmlnOjE1MTpjb25maWcgUFRQXzE1ODhfQ0xPQ0tfSURUODJQMzNcbmRyaXZlcnMvcHRwL0tjb25maWctMTUyLVx0dHJpc3RhdGUgXCYjMzQ7SURUIDgyUDMzeHh4IFBUUCBjbG9ja1wmIzM0O1xuLS1cbmRyaXZlcnMvcHRwL0tjb25maWctMTYyLVxuZHJpdmVycy9wdHAvS2NvbmZpZzoxNjM6Y29uZmlnIFBUUF8xNTg4X0NMT0NLX0lEVENNXG5kcml2ZXJzL3B0cC9LY29uZmlnLTE2NC1cdHRyaXN0YXRlIFwmIzM0O0lEVCBDTE9DS01BVFJJWCBhcyBQVFAgY2xvY2tcJiMzNDtcbi0tXG5kcml2ZXJzL3B0cC9LY29uZmlnLTE3NC1cbmRyaXZlcnMvcHRwL0tjb25maWc6MTc1OmNvbmZpZyBQVFBfMTU4OF9DTE9DS19GQzNXXG5kcml2ZXJzL3B0cC9LY29uZmlnLTE3Ni1cdHRyaXN0YXRlIFwmIzM0O1JFTkVTQVMgRmVtdG9DbG9jazMgV2lyZWxlc3MgYXMgUFRQIGNsb2NrXCYjMzQ7XG4tLVxuZHJpdmVycy9wdHAvS2NvbmZpZy0xODYtXG5kcml2ZXJzL3B0cC9LY29uZmlnOjE4Nzpjb25maWcgUFRQXzE1ODhfQ0xPQ0tfTU9DS1xuZHJpdmVycy9wdHAvS2NvbmZpZy0xODgtXHR0cmlzdGF0ZSBcJiMzNDtNb2NrLXVwIFBUUCBjbG9ja1wmIzM0O1xuLS1cbmRyaXZlcnMvcHRwL0tjb25maWctMTk3LVxuZHJpdmVycy9wdHAvS2NvbmZpZzoxOTg6Y29uZmlnIFBUUF8xNTg4X0NMT0NLX1ZNV1xuZHJpdmVycy9wdHAvS2NvbmZpZy0xOTktXHR0cmlzdGF0ZSBcJiMzNDtWTXdhcmUgdmlydHVhbCBQVFAgY2xvY2tcJiMzNDtcbi0tXG5kcml2ZXJzL3B0cC9LY29uZmlnLTIwOS1cbmRyaXZlcnMvcHRwL0tjb25maWc6MjEwOmNvbmZpZyBQVFBfMTU4OF9DTE9DS19PQ1BcbmRyaXZlcnMvcHRwL0tjb25maWctMjExLVx0dHJpc3RhdGUgXCYjMzQ7T3BlbkNvbXB1dGUgVGltZUNhcmQgYXMgUFRQIGNsb2NrXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTE6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM1NDQKCQkJCQkJCW91dHB1dDogMzQ1CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgcmVxdWVzdGVkOgoKKipDb25maWd1cmF0aW9uIGFuZCBSZXBvcnRpbmcgU3RyYXRlZ3kqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24gbm93LiBJIGRlZmluaXRlbHkgbmVlZCB0byBpbmNsdWRlIHRoZSBgUFRQXzE1ODhfQ0xPQ0tgIGNvbXBvbmVudCBpbiB0aGUgb3ZlcmFsbCBjb25maWd1cmF0aW9uLiBUaGlzIGlzIG5vbi1uZWdvdGlhYmxlLCBnaXZlbiB0aGUgcHJvamVjdCByZXF1aXJlbWVudHMuIEkmIzM5O3ZlIGdvdCB0byBtYWtlIHN1cmUgdGhhdCYjMzk7cyBiYWtlZCBpbiBmcm9tIHRoZSBnZXQtZ28uCgpBbmQgdGhlbiwgb25jZSBJJiMzOTt2ZSBnb3QgYSBoYW5kbGUgb24gZXZlcnl0aGluZywgaXQmIzM5O3MgdGltZSB0byB0cmlnZ2VyIHRoYXQgcmVwb3J0aW5nIGZ1bmN0aW9uLiBJJiMzOTttIGdvaW5nIHRvIGNhbGwgaXQgYHNldC1yZXN1bHRzYC4gVGhpcyBuYW1pbmcgY29udmVudGlvbiBpcyBjbGVhciBhbmQgYWxpZ25zIHdpdGggb3VyIGV4aXN0aW5nIGFyY2hpdGVjdHVyZS4gSeKAmWxsIG1ha2Ugc3VyZSB0aGF0IGl0JiMzOTtzIHJvYnVzdCBhbmQgcmVhZHkgdG8gaGFuZGxlIHdoYXRldmVyIGRhdGEgdGhlIHN5c3RlbSB0aHJvd3MgYXQgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTE6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pMMzA3M1gmIzM0OywKICAgICYjMzQ7WkwzMDczWF9JMkMmIzM0OywKICAgICYjMzQ7WkwzMDczWF9TUEkmIzM0OywKICAgICYjMzQ7UFRQXzE1ODhfQ0xPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQmIzM0OywKICAgICYjMzQ7emwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQmIzM0OywKICAgICYjMzQ7emwzMDczeF9kcGxsX3B0cF9hZGp0aW1lJiMzNDssCiAgICAmIzM0O3psMzA3M3hfZHBsbF9wdHBfYWRqZmluZSYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlJiMzNDssCiAgICAmIzM0O3psMzA3M3hfZHBsbF9wdHBfZW5hYmxlJiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl90b2RfcmVhZCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fdG9kX3dyaXRlJiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl90b2RfYWRqdXN0JiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl9waGFzZV9zdGVwJiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl90aWVfd3JpdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIgKHpsMzA3M3gpLiBJdCBpbXBsZW1lbnRzIHZhcmlvdXMgUFRQIGNsb2NrIG9wZXJhdGlvbnMgKGdldC9zZXQgdGltZSwgYWRqdXN0IHRpbWUvcGhhc2UvZnJlcXVlbmN5KSB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgUFRQIGlvY3RsIGludGVyZmFjZS4gRnV6emluZyB0aGVzZSBmdW5jdGlvbnMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGUgZHJpdmVyIGhhbmRsZXMgZWRnZSBjYXNlcyBhbmQgY29uY3VycmVudCBhY2Nlc3NlcyBjb3JyZWN0bHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pMMzA3M1gmIzM0OywKICAgICYjMzQ7WkwzMDczWF9JMkMmIzM0OywKICAgICYjMzQ7WkwzMDczWF9TUEkmIzM0OywKICAgICYjMzQ7UFRQXzE1ODhfQ0xPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQmIzM0OywKICAgICYjMzQ7emwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQmIzM0OywKICAgICYjMzQ7emwzMDczeF9kcGxsX3B0cF9hZGp0aW1lJiMzNDssCiAgICAmIzM0O3psMzA3M3hfZHBsbF9wdHBfYWRqZmluZSYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlJiMzNDssCiAgICAmIzM0O3psMzA3M3hfZHBsbF9wdHBfZW5hYmxlJiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl90b2RfcmVhZCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fdG9kX3dyaXRlJiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl90b2RfYWRqdXN0JiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl9waGFzZV9zdGVwJiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl90aWVfd3JpdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIgKHpsMzA3M3gpLiBJdCBpbXBsZW1lbnRzIHZhcmlvdXMgUFRQIGNsb2NrIG9wZXJhdGlvbnMgKGdldC9zZXQgdGltZSwgYWRqdXN0IHRpbWUvcGhhc2UvZnJlcXVlbmN5KSB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgUFRQIGlvY3RsIGludGVyZmFjZS4gRnV6emluZyB0aGVzZSBmdW5jdGlvbnMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGUgZHJpdmVyIGhhbmRsZXMgZWRnZSBjYXNlcyBhbmQgY29uY3VycmVudCBhY2Nlc3NlcyBjb3JyZWN0bHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxMToxMjo0Ni41NjI2NzE0OTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzQzNjM4NTcyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaTDMwNzNYXCIsXG4gICAgXCJaTDMwNzNYX0kyQ1wiLFxuICAgIFwiWkwzMDczWF9TUElcIixcbiAgICBcIlBUUF8xNTg4X0NMT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0XCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NFwiLFxuICAgIFwiemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lXCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmVcIixcbiAgICBcInpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2VcIixcbiAgICBcInpsMzA3M3hfZHBsbF9wdHBfZW5hYmxlXCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fdG9kX3JlYWRcIixcbiAgICBcInpsMzA3M3hfY2hhbl90b2Rfd3JpdGVcIixcbiAgICBcInpsMzA3M3hfY2hhbl90b2RfYWRqdXN0XCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcFwiLFxuICAgIFwiemwzMDczeF9jaGFuX3RpZV93cml0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgUFRQIGNsb2NrIHN1cHBvcnQgdG8gdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyICh6bDMwNzN4KS4gSXQgaW1wbGVtZW50cyB2YXJpb3VzIFBUUCBjbG9jayBvcGVyYXRpb25zIChnZXQvc2V0IHRpbWUsIGFkanVzdCB0aW1lL3BoYXNlL2ZyZXF1ZW5jeSkgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIFBUUCBpb2N0bCBpbnRlcmZhY2UuIEZ1enppbmcgdGhlc2UgZnVuY3Rpb25zIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlIGRyaXZlciBoYW5kbGVzIGVkZ2UgY2FzZXMgYW5kIGNvbmN1cnJlbnQgYWNjZXNzZXMgY29ycmVjdGx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxMToxMjo0Ni41NjI2ODAwOTNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3MzY1NjM1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDEyN2VjMWRhY2ViNTVjZTg0OTFiNjRhOWRjZjU4YWQxMDI1ZTMwNTdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgOSAxMToxMjo0NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xcbmluZGV4IDViYmNhMTQwMDU4MTMxLi5kMDU3NGFkNTcxZDNmYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xcbkBAIC0yLDcgKzIsNyBAQFxcbiBcXG4gY29uZmlnIFpMMzA3M1hcXG4gXFx0dHJpc3RhdGUgXFxcIk1pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXNcXFwiIGlmIENPTVBJTEVfVEVTVFxcbi1cXHRkZXBlbmRzIG9uIE5FVFxcbitcXHRkZXBlbmRzIG9uIE5FVCBcXHUwMDI2XFx1MDAyNiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbiBcXHRzZWxlY3QgRFBMTFxcbiBcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG4gXFx0c2VsZWN0IFJFR01BUFxcbkBAIC0xNiw3ICsxNiw3IEBAIGNvbmZpZyBaTDMwNzNYXFxuIFxcbiBjb25maWcgWkwzMDczWF9JMkNcXG4gXFx0dHJpc3RhdGUgXFxcIkkyQyBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcXFwiXFxuLVxcdGRlcGVuZHMgb24gSTJDIFxcdTAwMjZcXHUwMDI2IE5FVFxcbitcXHRkZXBlbmRzIG9uIEkyQyBcXHUwMDI2XFx1MDAyNiBORVQgXFx1MDAyNlxcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG4gXFx0c2VsZWN0IFJFR01BUF9JMkNcXG4gXFx0c2VsZWN0IFpMMzA3M1hcXG4gXFx0aGVscFxcbkBAIC0yOCw3ICsyOCw3IEBAIGNvbmZpZyBaTDMwNzNYX0kyQ1xcbiBcXG4gY29uZmlnIFpMMzA3M1hfU1BJXFxuIFxcdHRyaXN0YXRlIFxcXCJTUEkgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzXFxcIlxcbi1cXHRkZXBlbmRzIG9uIE5FVCBcXHUwMDI2XFx1MDAyNiBTUElcXG4rXFx0ZGVwZW5kcyBvbiBORVQgXFx1MDAyNlxcdTAwMjYgU1BJIFxcdTAwMjZcXHUwMDI2IFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuIFxcdHNlbGVjdCBSRUdNQVBfU1BJXFxuIFxcdHNlbGVjdCBaTDMwNzNYXFxuIFxcdGhlbHBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXFxuaW5kZXggNGVjMmNmNTNkYWQ0NjguLjUzMDMyZTc4MmZkNGFmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uY1xcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uY1xcbkBAIC0zLDYgKzMsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY2xlYW51cC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVsYXkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Rldl9wcmludGsuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N0cmluZy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4gXFxuQEAgLTIwMiw2ICsyMDMsMTEgQEAgaW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9mZXRjaChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleClcXG4gXFx0XFx0emwzMDczeF9jaGFuX3JlZnNlbF9zdGF0ZV9nZXQoY2hhbiksXFxuIFxcdFxcdHpsMzA3M3hfY2hhbl9yZWZzZWxfcmVmX2dldChjaGFuKSk7XFxuIFxcbitcXHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfU1RFUF9USU1FX01BU0ssXFxuK1xcdFxcdFxcdCAgICAgIFxcdTAwMjZjaGFuLVxcdTAwM2VvdXRfc3RlcF90aW1lX21hc2spO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuIFxcdGd1YXJkKG11dGV4KShcXHUwMDI2emxkZXYtXFx1MDAzZW11bHRpb3BfbG9jayk7XFxuIFxcbiBcXHQvKiBSZWFkIERQTEwgY29uZmlndXJhdGlvbiBmcm9tIG1haWxib3ggKi9cXG5AQCAtMjM0LDYgKzI0MCwzMDcgQEAgY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqemwzMDczeF9jaGFuX3N0YXRlX2dldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LFxcbiBcXHRyZXR1cm4gXFx1MDAyNnpsZGV2LVxcdTAwM2VjaGFuW2luZGV4XTtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCAtIHdhaXQgZm9yIFRvRCBzZW1hcGhvcmUgdG8gY2xlYXJcXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuKyAqXFxuKyAqIFBvbGxzIHRoZSBUb0QgY29udHJvbCByZWdpc3RlciB1bnRpbCB0aGUgc2VtYXBob3JlIGJpdCBpcyBjbGVhcmVkLFxcbisgKiBpbmRpY2F0aW5nIHRoZSBkZXZpY2UgaGFzIGNvbXBsZXRlZCB0aGUgcHJldmlvdXMgVG9EIG9wZXJhdGlvbi5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FQlVTWSBpZiBzZW1hcGhvcmUgbm90IGNsZWFyZWQsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitzdGF0aWMgaW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgdGltZW91dDtcXG4rXFx0dTggdG9kX2N0cmw7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdHJjID0gemwzMDczeF9yZWFkX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksIFxcdTAwMjZ0b2RfY3RybCk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0c3dpdGNoIChGSUVMRF9HRVQoWkxfRFBMTF9UT0RfQ1RSTF9DTUQsIHRvZF9jdHJsKSkge1xcbitcXHRjYXNlIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaOlxcbitcXHRcXHR0aW1lb3V0ID0gWkxfUE9MTF9UT0RfV1JfVElNRU9VVF9VUztcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHRpbWVvdXQgPSBaTF9QT0xMX1RPRF9SRF9USU1FT1VUX1VTO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLFxcbitcXHRcXHRcXHRcXHQgIFpMX0RQTExfVE9EX0NUUkxfU0VNLCB0aW1lb3V0KTtcXG4rXFxuK1xcdHJldHVybiByYyA9PSAtRVRJTUVET1VUID8gLUVCVVNZIDogcmM7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwgLSBpc3N1ZSBUb0QgY29tbWFuZFxcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4rICogQGNtZDogVG9EIGNvbW1hbmQgdG8gZXhlY3V0ZVxcbisgKlxcbisgKiBXcml0ZXMgdGhlIHNlbWFwaG9yZSBhbmQgY29tbWFuZCB0byBkcGxsX3RvZF9jdHJsLiBUaGUgY2FsbGVyIG11c3RcXG4rICogZW5zdXJlIHRoZSBkZXZpY2UgaXMgcmVhZHkgKHNlbWFwaG9yZSBjbGVhcikgYmVmb3JlIGNhbGxpbmcgYW5kXFxuKyAqIG11c3Qgd2FpdCBmb3IgY29tcGxldGlvbiBpZiBuZWVkZWQuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4rc3RhdGljIGludCB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHU4IGNtZClcXG4re1xcbitcXHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLFxcbitcXHRcXHRcXHRcXHRaTF9EUExMX1RPRF9DVFJMX1NFTSB8IGNtZCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5fdG9kX3JlYWQgLSByZWFkIFRvRCByZWdpc3RlcnMgYWZ0ZXIgaXNzdWluZyBhIGNvbW1hbmRcXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuKyAqIEBuZXh0X2h6OiBpZiB0cnVlLCByZWFkIHByZWRpY3RlZCBUb0QgYXQgbmV4dCAxIEh6OyBvdGhlcndpc2UgcmVhZCBjdXJyZW50XFxuKyAqIEB0czogdGltZXNwZWMgdG8gc3RvcmUgdGhlIHJlc3VsdFxcbisgKiBAc3RzOiBvcHRpb25hbCBzeXN0ZW0gdGltZXN0YW1wIHBhaXIgZm9yIGNyb3NzLXRpbWVzdGFtcGluZ1xcbisgKlxcbisgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuK1xcdFxcdFxcdCAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXFxuK1xcdFxcdFxcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpXFxuK3tcXG4rXFx0dTMyIG5zZWM7XFxuK1xcdHU2NCBzZWM7XFxuK1xcdHU4IGNtZDtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0aWYgKG5leHRfaHopXFxuK1xcdFxcdGNtZCA9IFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaO1xcbitcXHRlbHNlXFxuK1xcdFxcdGNtZCA9IFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX0NVUlJFTlQ7XFxuK1xcbitcXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVG9EIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xcbitcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHB0cF9yZWFkX3N5c3RlbV9wcmV0cyhzdHMpO1xcbitcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfY3RybCh6bGRldiwgY2gsIGNtZCk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcdHB0cF9yZWFkX3N5c3RlbV9wb3N0dHMoc3RzKTtcXG4rXFxuK1xcdHJjID0gemwzMDczeF9yZWFkX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIFxcdTAwMjZzZWMpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdC8qIEhXIG5hbm9zZWNvbmRzIGFyZSBhbHdheXMgaW4gWzAsIE5TRUNfUEVSX1NFQykgcmFuZ2UgKi9cXG4rXFx0cmMgPSB6bDMwNzN4X3JlYWRfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCBcXHUwMDI2bnNlYyk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0dHMtXFx1MDAzZXR2X3NlYyA9IHNlYztcXG4rXFx0dHMtXFx1MDAzZXR2X25zZWMgPSBuc2VjO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlIC0gd3JpdGUgVG9EIHJlZ2lzdGVycyBhbmQgdHJpZ2dlciAxIEh6IHVwZGF0ZVxcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4rICogQHRzOiB0aW1lIHRvIHNldFxcbisgKlxcbisgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbitcXHRcXHRcXHQgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cylcXG4re1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVG9EIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xcbitcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9TRUMoY2gpLCB0cy50dl9zZWMpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19EUExMX1RPRF9OUyhjaCksIHRzLnR2X25zZWMpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLFxcbitcXHRcXHRcXHRcXHQgICAgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFopO1xcbit9XFxuK1xcbisvKipcXG4rICogemwzMDczeF9jaGFuX3RvZF9hZGp1c3QgLSBhdG9taWMgVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIHdpdGggcm9sbG92ZXIgZ3VhcmRcXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuKyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IHRvIGFwcGx5XFxuKyAqXFxuKyAqIFJlYWRzIHRoZSBuZXh0LUh6IFRvRCBhbmQgY3VycmVudCBUb0QsIHRoZW4gY2hlY2tzIHdoZXRoZXIgZW5vdWdoIHRpbWVcXG4rICogcmVtYWlucyBiZWZvcmUgdGhlIG5leHQgMSBIeiByb2xsb3ZlciB0byBzYWZlbHkgY29tcGxldGUgdGhlIHdyaXRlLlxcbisgKiBJZiBsZXNzIHRoYW4gMjAgbXMgcmVtYWlucywgd2FpdHMgZm9yIHRoZSByb2xsb3ZlciBhbmQgaW5jcmVtZW50cyB0aGVcXG4rICogbmV4dC1IeiBzZWNvbmRzIGJ5IG9uZS4gQXBwbGllcyBAZGVsdGEgYW5kIHdyaXRlcyB0aGUgcmVzdWx0IGJhY2suXFxuKyAqXFxuKyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4raW50IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbitcXHRcXHRcXHQgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpXFxuK3tcXG4rXFx0c3RhdGljIGNvbnN0IGxvbmcgdGhyZXNob2xkX25zID0gMjAgKiBOU0VDX1BFUl9NU0VDO1xcbitcXHRzdHJ1Y3QgdGltZXNwZWM2NCB0c19uZXh0LCB0c19jdXIsIGRpZmY7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdC8qIFJlYWQgcHJlZGljdGVkIFRvRCBhdCBuZXh0IDEgSHogdGljayAqL1xcbitcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRldiwgY2gsIHRydWUsIFxcdTAwMjZ0c19uZXh0LCBOVUxMKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHQvKiBSZWFkIGN1cnJlbnQgVG9EIHRvIGRldGVybWluZSByZW1haW5pbmcgbWFyZ2luICovXFxuK1xcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgZmFsc2UsIFxcdTAwMjZ0c19jdXIsIE5VTEwpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdC8qIElmIHRvbyBjbG9zZSB0byAob3IgcGFzdCkgdGhlIG5leHQgcm9sbG92ZXIsIHdhaXQgaXQgb3V0ICovXFxuK1xcdGRpZmYgPSB0aW1lc3BlYzY0X3N1Yih0c19uZXh0LCB0c19jdXIpO1xcbitcXHRpZiAoZGlmZi50dl9zZWMgXFx1MDAzYyAwIHx8ICghZGlmZi50dl9zZWMgXFx1MDAyNlxcdTAwMjYgZGlmZi50dl9uc2VjIFxcdTAwM2MgdGhyZXNob2xkX25zKSkge1xcbitcXHRcXHRpZiAoIWRpZmYudHZfc2VjIFxcdTAwMjZcXHUwMDI2IGRpZmYudHZfbnNlYylcXG4rXFx0XFx0XFx0ZnNsZWVwKCh1bnNpZ25lZCBsb25nKWRpZmYudHZfbnNlYyAvIE5TRUNfUEVSX1VTRUMgKyAxKTtcXG4rXFx0XFx0dHNfbmV4dC50dl9zZWMrKztcXG4rXFx0fVxcbitcXG4rXFx0LyogQXBwbHkgZGVsdGEgdG8gdGhlIG5leHQtSHogVG9EICovXFxuK1xcdHRzX25leHQgPSB0aW1lc3BlYzY0X2FkZCh0c19uZXh0LCBkZWx0YSk7XFxuK1xcdGlmICghdGltZXNwZWM2NF92YWxpZChcXHUwMDI2dHNfbmV4dCkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0LyogV3JpdGUgYWRqdXN0ZWQgVG9EIGJhY2sgYW5kIHdhaXQgZm9yIGNvbXBsZXRpb24gKi9cXG4rXFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZGV2LCBjaCwgdHNfbmV4dCk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xcbit9XFxuK1xcbisvKipcXG4rICogemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQgLSB3cml0ZSBkZWx0YSBmcmVxdWVuY3kgb2Zmc2V0IHRvIGhhcmR3YXJlXFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxcbisgKiBAb2Zmc2V0OiBmcmVxdWVuY3kgb2Zmc2V0IGluIDJeLTQ4IHN0ZXBzXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4raW50IHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgb2Zmc2V0KVxcbit7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdHJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX0RGX09GRlNFVChjaCksIG9mZnNldCk7XFxuK1xcdGlmICghcmMpXFxuK1xcdFxcdHpsZGV2LVxcdTAwM2VjaGFuW2NoXS5kZl9vZmZzZXQgPSBvZmZzZXQ7XFxuK1xcbitcXHRyZXR1cm4gcmM7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlIC0gYWRqdXN0IERQTEwgcGhhc2UgdXNpbmcgVElFIHdyaXRlXFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxcbisgKiBAZGVsdGFfbnM6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMgKG11c3QgYmUgd2l0aGluICstMXMpXFxuKyAqXFxuKyAqIENvbnZlcnRzIG5hbm9zZWNvbmRzIHRvIFRJRSB1bml0cyAoMC4wMSBwcykgYW5kIHdyaXRlcyBUSUUgZGF0YVxcbisgKiB0byB0aGUgc3BlY2lmaWVkIGNoYW5uZWwuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4raW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucylcXG4re1xcbitcXHRzNjQgdGllX2RhdGE7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2emxkZXYtXFx1MDAzZXRpZV9sb2NrKTtcXG4rXFxuK1xcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUSUUgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXFxuK1xcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLFxcbitcXHRcXHRcXHRcXHQgIFpMX0RQTExfVElFX0NUUkxfT1AsXFxuK1xcdFxcdFxcdFxcdCAgWkxfUE9MTF9USUVfV1JfVElNRU9VVF9VUyk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0LyogQ29udmVydCBucyB0byBUSUUgdW5pdHMgKDAuMDEgcHMgPSAxMF4tMTQgcykgKi9cXG4rXFx0dGllX2RhdGEgPSBkZWx0YV9ucyAqIDEwMDAwMExMO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0RBVEEoY2gpLCB0aWVfZGF0YSk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTF9NQVNLLCBCSVQoY2gpKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsXFxuK1xcdFxcdFxcdFxcdFpMX0RQTExfVElFX0NUUkxfT1BfV1IpO1xcbit9XFxuK1xcbisvKipcXG4rICogemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAgLSBleGVjdXRlIG9uZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb25cXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuKyAqIEBvdXRfbWFzazogYml0bWFzayBvZiBvdXRwdXRzIHRvIHN0ZXBcXG4rICogQHN0ZXBfY3ljbGVzOiBwaGFzZSBzdGVwIGluIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlc1xcbisgKiBAdG9kX3N0ZXA6IGFsc28gc3RlcCB0aGUgVG9EIGNvdW50ZXJcXG4rICpcXG4rICogQWxsIG1hc2tlZCBvdXRwdXRzIG11c3QgdXNlIHN5bnRoZXNpemVycyBvZiB0aGUgc2FtZSBmcmVxdWVuY3kgc2luY2VcXG4rICogdGhlIHN0ZXAgdmFsdWUgaXMgaW4gc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK2ludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG4rXFx0XFx0XFx0ICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLFxcbitcXHRcXHRcXHQgICAgYm9vbCB0b2Rfc3RlcClcXG4re1xcbitcXHR1OCBjdHJsO1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNnpsZGV2LVxcdTAwM2VwaGFzZV9zdGVwX2xvY2spO1xcbitcXG4rXFx0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIHBoYXNlIHN0ZXAgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXFxuK1xcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLFxcbitcXHRcXHRcXHRcXHQgIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AsXFxuK1xcdFxcdFxcdFxcdCAgWkxfUE9MTF9QSEFTRV9TVEVQX1RJTUVPVVRfVVMpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBLFxcbitcXHRcXHRcXHQgICAgICAgc3RlcF9jeWNsZXMpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHJjID0gemwzMDczeF93cml0ZV91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLLCBvdXRfbWFzayk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTlVNQkVSLCAxKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRjdHJsID0gRklFTERfUFJFUChaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX0RQTEwsIGNoKSB8XFxuK1xcdCAgICAgICBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AsXFxuK1xcdFxcdFxcdCAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURSk7XFxuK1xcdGlmICh0b2Rfc3RlcClcXG4rXFx0XFx0Y3RybCB8PSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX1RPRF9TVEVQO1xcbitcXG4rXFx0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLCBjdHJsKTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQgLSBjb21taXQgRFBMTCBjaGFubmVsIHN0YXRlIGNoYW5nZXMgdG8gaGFyZHdhcmVcXG4gICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3hfZGV2IHN0cnVjdHVyZVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhcXG5pbmRleCBkYzljNmQ5NWJkZWU3NS4uOWRjNWEzZjE5OTFmMTMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXFxuQEAgLTUsMTAgKzUsMTIgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RkZGVmLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC90aW1lNjQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwicmVncy5oXFxcIlxcbiBcXG4rc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wO1xcbiBzdHJ1Y3QgemwzMDczeF9kZXY7XFxuIFxcbiAvKipcXG5AQCAtMTYsNiArMTgsNyBAQCBzdHJ1Y3QgemwzMDczeF9kZXY7XFxuICAqIEBjdHJsOiBEUExMIGNvbnRyb2wgcmVnaXN0ZXIgdmFsdWVcXG4gICogQG1vZGVfcmVmc2VsOiBtb2RlIGFuZCByZWZlcmVuY2Ugc2VsZWN0aW9uIHJlZ2lzdGVyIHZhbHVlXFxuICAqIEByZWZfcHJpbzogcmVmZXJlbmNlIHByaW9yaXR5IHJlZ2lzdGVycyAoNCBiaXRzIHBlciByZWYsIFAvTiBwYWNrZWQpXFxuKyAqIEBvdXRfc3RlcF90aW1lX21hc2s6IG91dHB1dCBzdGVwLXRpbWUgbWFza1xcbiAgKiBAbW9uX3N0YXR1czogbW9uaXRvciBzdGF0dXMgcmVnaXN0ZXIgdmFsdWVcXG4gICogQHJlZnNlbF9zdGF0dXM6IHJlZmVyZW5jZSBzZWxlY3Rpb24gc3RhdHVzIHJlZ2lzdGVyIHZhbHVlXFxuICAqIEBkZl9vZmZzZXQ6IGZyZXF1ZW5jeSBvZmZzZXQgdnMgdHJhY2tlZCByZWZlcmVuY2UgaW4gMl4tNDggc3RlcHNcXG5AQCAtMjYsNiArMjksOSBAQCBzdHJ1Y3QgemwzMDczeF9jaGFuIHtcXG4gXFx0XFx0dThcXHRtb2RlX3JlZnNlbDtcXG4gXFx0XFx0dThcXHRyZWZfcHJpb1taTDMwNzNYX05VTV9SRUZTIC8gMl07XFxuIFxcdCk7XFxuK1xcdHN0cnVjdF9ncm91cChpbnYsIC8qIEludmFyaWFudHMgKi9cXG4rXFx0XFx0dTE2XFx0b3V0X3N0ZXBfdGltZV9tYXNrO1xcbitcXHQpO1xcbiBcXHRzdHJ1Y3RfZ3JvdXAoc3RhdCxcXG4gXFx0XFx0dThcXHRtb25fc3RhdHVzO1xcbiBcXHRcXHR1OFxcdHJlZnNlbF9zdGF0dXM7XFxuQEAgLTQyLDYgKzQ4LDIwIEBAIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4LFxcbiBpbnQgemwzMDczeF9jaGFuX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7XFxuIGludCB6bDMwNzN4X2NoYW5fbmNvX21vZGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTtcXG4gXFxuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuK1xcdFxcdFxcdCAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXFxuK1xcdFxcdFxcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpO1xcbitpbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG4rXFx0XFx0XFx0ICAgc3RydWN0IHRpbWVzcGVjNjQgdHMpO1xcbitpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YSk7XFxuK2ludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG4rXFx0XFx0XFx0ICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLCBib29sIHRvZF9zdGVwKTtcXG4rXFxuK2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldCk7XFxuK1xcbitpbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKTtcXG4rXFxuIC8qKlxcbiAgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X2dldCAtIGdldCBjYWNoZWQgZGZfb2Zmc2V0IHZzIHRyYWNrZWQgcmVmZXJlbmNlXFxuICAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcXG5AQCAtMjAwLDYgKzIyMCwyMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgemwzMDczeF9jaGFuX21vZGVfaXNfcmVmbG9jayhjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxcbiBcXHRyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfZ2V0KGNoYW4pID09IFpMX0RQTExfTU9ERV9SRUZTRUxfTU9ERV9SRUZMT0NLO1xcbiB9XFxuIFxcbisvKipcXG4rICogemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllIC0gY2hlY2sgaWYgY2hhbm5lbCBtb2RlIHN1cHBvcnRzIFRJRSB3cml0ZVxcbisgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXFxuKyAqXFxuKyAqIFRJRSB3cml0ZSBpcyBzdXBwb3J0ZWQgaW4gQVVUTyBhbmQgUkVGTE9DSyBtb2RlcyByZWdhcmRsZXNzIG9mIGxvY2sgc3RhdGUuXFxuKyAqXFxuKyAqIFJldHVybjogdHJ1ZSBpZiBUSUUgd3JpdGUgaXMgc3VwcG9ydGVkLCBmYWxzZSBvdGhlcndpc2VcXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgYm9vbFxcbit6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcXG4re1xcbitcXHRyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfaXNfYXV0byhjaGFuKSB8fFxcbitcXHRcXHR6bDMwNzN4X2NoYW5fbW9kZV9pc19yZWZsb2NrKGNoYW4pO1xcbit9XFxuK1xcbiAvKipcXG4gICogemwzMDczeF9jaGFuX2lzX2hvX3JlYWR5IC0gY2hlY2sgaWYgaG9sZG92ZXIgaXMgcmVhZHlcXG4gICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxcbkBAIC0yMzMsNCArMjY4LDE3IEBAIHN0YXRpYyBpbmxpbmUgdTggemwzMDczeF9jaGFuX3JlZnNlbF9yZWZfZ2V0KGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXFxuIFxcdHJldHVybiBGSUVMRF9HRVQoWkxfRFBMTF9SRUZTRUxfU1RBVFVTX1JFRlNFTCwgY2hhbi1cXHUwMDNlcmVmc2VsX3N0YXR1cyk7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5faXNfb3V0X3N0ZXBwZWQgLSBjaGVjayBpZiBvdXRwdXQgaXMgaW4gc3RlcC10aW1lIG1hc2tcXG4rICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxcbisgKiBAb3V0OiBvdXRwdXQgaW5kZXhcXG4rICpcXG4rICogUmV0dXJuOiB0cnVlIGlmIG91dHB1dCBpcyBhZmZlY3RlZCBieSBzdGVwLXRpbWUgb3BlcmF0aW9uc1xcbisgKi9cXG4rc3RhdGljIGlubGluZSBib29sXFxuK3psMzA3M3hfY2hhbl9pc19vdXRfc3RlcHBlZChjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuLCB1OCBvdXQpXFxuK3tcXG4rXFx0cmV0dXJuICEhKGNoYW4tXFx1MDAzZW91dF9zdGVwX3RpbWVfbWFzayBcXHUwMDI2IEJJVChvdXQpKTtcXG4rfVxcbitcXG4gI2VuZGlmIC8qIF9aTDMwNzNYX0NIQU5fSCAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcXG5pbmRleCA3ZjVhZmFhYWU2MzQyZi4uYjJmOWZjOTdmZDFiNjggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jXFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jXFxuQEAgLTEwMzMsNiArMTAzMywxNCBAQCBpbnQgemwzMDczeF9kZXZfcHJvYmUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcXG4gXFx0ICogYW5kL29yIHBvbGxzIGFyZSByZXF1aXJlZCB0byBiZSBkb25lIGF0b21pY2FsbHkuXFxuIFxcdCAqL1xcbiBcXHRyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi1cXHUwMDNlZGV2LCBcXHUwMDI2emxkZXYtXFx1MDAzZW11bHRpb3BfbG9jayk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXFx1MDAzZWRldiwgcmMsXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxcXG5cXFwiKTtcXG4rXFx0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXFx1MDAzZWRldiwgXFx1MDAyNnpsZGV2LVxcdTAwM2VwaGFzZV9zdGVwX2xvY2spO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVxcdTAwM2VkZXYsIHJjLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcXFxuXFxcIik7XFxuK1xcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVxcdTAwM2VkZXYsIFxcdTAwMjZ6bGRldi1cXHUwMDNldGllX2xvY2spO1xcbiBcXHRpZiAocmMpXFxuIFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVxcdTAwM2VkZXYsIHJjLFxcbiBcXHRcXHRcXHRcXHQgICAgIFxcXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcXFxuXFxcIik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaFxcbmluZGV4IDc4ZGMyMDhmM2VlYTJhLi4yZGM4MzZkMGM4ZjZiMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcXG5AQCAtMjYsNiArMjYsMTAgQEAgc3RydWN0IHpsMzA3M3hfZHBsbDtcXG4gI2RlZmluZSBaTF9QT0xMX0hXUkVHX1RJTUVPVVRfVVNcXHQoNTAgKiBVU0VDX1BFUl9NU0VDKVxcbiAjZGVmaW5lIFpMX1BPTExfTUJfVElNRU9VVF9VU1xcdFxcdCgzMCAqIFVTRUNfUEVSX01TRUMpXFxuICNkZWZpbmUgWkxfUE9MTF9QSEFTRV9FUlJfVElNRU9VVF9VU1xcdCg1MCAqIFVTRUNfUEVSX01TRUMpXFxuKyNkZWZpbmUgWkxfUE9MTF9QSEFTRV9TVEVQX1RJTUVPVVRfVVNcXHQoMzAwMCAqIFVTRUNfUEVSX01TRUMpXFxuKyNkZWZpbmUgWkxfUE9MTF9USUVfV1JfVElNRU9VVF9VU1xcdCgxMDAwICogVVNFQ19QRVJfTVNFQylcXG4rI2RlZmluZSBaTF9QT0xMX1RPRF9SRF9USU1FT1VUX1VTXFx0KDMwICogVVNFQ19QRVJfTVNFQylcXG4rI2RlZmluZSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTXFx0KDEwMDAgKiBVU0VDX1BFUl9NU0VDKVxcbiBcXG4gZW51bSB6bDMwNzN4X2ZsYWdzIHtcXG4gXFx0WkwzMDczWF9GTEFHX1JFRl9QSEFTRV9DT01QXzMyX0JJVCxcXG5AQCAtNTUsNiArNTksOCBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8ge1xcbiAgKiBAcmVnbWFwOiByZWdtYXAgdG8gYWNjZXNzIGRldmljZSByZWdpc3RlcnNcXG4gICogQGluZm86IGRldGVjdGVkIGNoaXAgaW5mb1xcbiAgKiBAbXVsdGlvcF9sb2NrOiB0byBzZXJpYWxpemUgbXVsdGlwbGUgcmVnaXN0ZXIgb3BlcmF0aW9uc1xcbisgKiBAdGllX2xvY2s6IHRvIHNlcmlhbGl6ZSBUSUUgd3JpdGUgb3BlcmF0aW9uc1xcbisgKiBAcGhhc2Vfc3RlcF9sb2NrOiB0byBzZXJpYWxpemUgb3V0cHV0IHBoYXNlIHN0ZXAgb3BlcmF0aW9uc1xcbiAgKiBAcmVmOiBhcnJheSBvZiBpbnB1dCByZWZlcmVuY2VzJyBpbnZhcmlhbnRzXFxuICAqIEBvdXQ6IGFycmF5IG9mIG91dHMnIGludmFyaWFudHNcXG4gICogQHN5bnRoOiBhcnJheSBvZiBzeW50aHMnIGludmFyaWFudHNcXG5AQCAtNzEsNiArNzcsOCBAQCBzdHJ1Y3QgemwzMDczeF9kZXYge1xcbiBcXHRzdHJ1Y3QgcmVnbWFwXFx0XFx0XFx0KnJlZ21hcDtcXG4gXFx0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hpcF9pbmZvXFx0KmluZm87XFxuIFxcdHN0cnVjdCBtdXRleFxcdFxcdFxcdG11bHRpb3BfbG9jaztcXG4rXFx0c3RydWN0IG11dGV4XFx0XFx0XFx0dGllX2xvY2s7XFxuK1xcdHN0cnVjdCBtdXRleFxcdFxcdFxcdHBoYXNlX3N0ZXBfbG9jaztcXG4gXFxuIFxcdC8qIEludmFyaWFudHMgKi9cXG4gXFx0c3RydWN0IHpsMzA3M3hfcmVmXFx0cmVmW1pMMzA3M1hfTlVNX1JFRlNdO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcXG5pbmRleCBkOTFmNTJiNThlYWUzNC4uNzQwMDFlNmQ0YTMyZjUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jXFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jXFxuQEAgLTIsNiArMiw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0cy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NsZWFudXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2J1Zy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY29udGFpbmVyX29mLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZXZfcHJpbnRrLmhcXHUwMDNlXFxuQEAgLTE0LDYgKzE1LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGxpbmsuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcHJvcGVydHkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NwcmludGYuaFxcdTAwM2VcXG4gXFxuQEAgLTQyLDYgKzQ0LDcgQEBcXG4gICogQHBoYXNlX29mZnNldDogbGFzdCBzYXZlZCBwaW4gcGhhc2Ugb2Zmc2V0XFxuICAqIEBmcmVxX29mZnNldDogbGFzdCBzYXZlZCBmcmFjdGlvbmFsIGZyZXF1ZW5jeSBvZmZzZXRcXG4gICogQG1lYXN1cmVkX2ZyZXE6IGxhc3Qgc2F2ZWQgbWVhc3VyZWQgZnJlcXVlbmN5XFxuKyAqIEBwZXJvdXRfaWR4OiBQVFAgcGVyb3V0IGNoYW5uZWwgaW5kZXgsIG9yIC0xIGlmIG5vdCBwZXJvdXQtZWxpZ2libGVcXG4gICovXFxuIHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluIHtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZFxcdGxpc3Q7XFxuQEAgLTU5LDYgKzYyLDcgQEAgc3RydWN0IHpsMzA3M3hfZHBsbF9waW4ge1xcbiBcXHRzNjRcXHRcXHRcXHRwaGFzZV9vZmZzZXQ7XFxuIFxcdHM2NFxcdFxcdFxcdGZyZXFfb2Zmc2V0O1xcbiBcXHR1MzJcXHRcXHRcXHRtZWFzdXJlZF9mcmVxO1xcbitcXHRzOFxcdFxcdFxcdHBlcm91dF9pZHg7XFxuIH07XFxuIFxcbiAvKlxcbkBAIC05MzYsMjEgKzk0MCwxNyBAQCB6bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnRcXG4temwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxcbi1cXHRcXHRcXHRcXHQgICAgICB2b2lkICpwaW5fcHJpdixcXG4tXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxcbi1cXHRcXHRcXHRcXHQgICAgICB2b2lkICpkcGxsX3ByaXYsIHU2NCBmcmVxdWVuY3ksXFxuLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4rX196bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfc2V0KHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCxcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbixcXG4rXFx0XFx0XFx0XFx0XFx0dTY0IGZyZXF1ZW5jeSlcXG4ge1xcbi1cXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBkcGxsX3ByaXY7XFxuIFxcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXFx1MDAzZWRldjtcXG4tXFx0c3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbiA9IHBpbl9wcml2O1xcbiBcXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9zeW50aCAqc3ludGg7XFxuIFxcdHUzMiBuZXdfZGl2LCBzeW50aF9mcmVxO1xcbiBcXHRzdHJ1Y3QgemwzMDczeF9vdXQgb3V0O1xcbiBcXHR1OCBvdXRfaWQ7XFxuIFxcbi1cXHRndWFyZChtdXRleCkoXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuIFxcbiBcXHRvdXRfaWQgPSB6bDMwNzN4X291dHB1dF9waW5fb3V0X2dldChwaW4tXFx1MDAzZWlkKTtcXG4gXFx0b3V0ID0gKnpsMzA3M3hfb3V0X3N0YXRlX2dldCh6bGRldiwgb3V0X2lkKTtcXG5AQCAtMTAxMSw2ICsxMDExLDIxIEBAIHpsMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3BpbixcXG4gXFx0cmV0dXJuIHpsMzA3M3hfb3V0X3N0YXRlX3NldCh6bGRldiwgb3V0X2lkLCBcXHUwMDI2b3V0KTtcXG4gfVxcbiBcXG4rc3RhdGljIGludFxcbit6bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXFxuK1xcdFxcdFxcdFxcdCAgICAgIHZvaWQgKnBpbl9wcml2LFxcbitcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHZvaWQgKmRwbGxfcHJpdiwgdTY0IGZyZXF1ZW5jeSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbit7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGRwbGxfcHJpdjtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdHJldHVybiBfX3psMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoemxkcGxsLCBwaW5fcHJpdixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGZyZXF1ZW5jeSk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnRcXG4gemwzMDczeF9kcGxsX291dHB1dF9waW5fcGhhc2VfYWRqdXN0X2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxcbiBcXHRcXHRcXHRcXHRcXHQgdm9pZCAqcGluX3ByaXYsXFxuQEAgLTE2MDgsNiArMTYyMyw3IEBAIHpsMzA3M3hfZHBsbF9waW5fYWxsb2Moc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLCBlbnVtIGRwbGxfcGluX2RpcmVjdGlvbiBkaXIsXFxuIFxcdHBpbi1cXHUwMDNlZHBsbCA9IHpsZHBsbDtcXG4gXFx0cGluLVxcdTAwM2VkaXIgPSBkaXI7XFxuIFxcdHBpbi1cXHUwMDNlaWQgPSBpZDtcXG4rXFx0cGluLVxcdTAwM2VwZXJvdXRfaWR4ID0gLTE7XFxuIFxcbiBcXHRyZXR1cm4gcGluO1xcbiB9XFxuQEAgLTE2MjYsNiArMTY0Miw0NCBAQCB6bDMwNzN4X2RwbGxfcGluX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbilcXG4gXFx0a2ZyZWUocGluKTtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9waW5faXNfcGVyb3V0IC0gY2hlY2sgaWYgb3V0cHV0IHBpbiBpcyBwZXJvdXQtZWxpZ2libGVcXG4rICogQHBpbjogRFBMTCBwaW4gdG8gY2hlY2tcXG4rICogQHByb3BzOiBwaW4gcHJvcGVydGllcyAoYWxyZWFkeSBmZXRjaGVkIGJ5IGNhbGxlcilcXG4rICpcXG4rICogQW4gb3V0cHV0IHBpbiBpcyBlbGlnaWJsZSBmb3IgUFRQIHBlcmlvZGljIG91dHB1dCBpZiBpdCBpcyBzaW5nbGUtZW5kZWRcXG4rICogKG5vdCBkaWZmZXJlbnRpYWwpIGFuZCBzdXBwb3J0cyAxIEh6IGluIGl0cyBmcmVxdWVuY3kgbGlzdC5cXG4rICpcXG4rICogUmV0dXJuOiB0cnVlIGlmIGVsaWdpYmxlLCBmYWxzZSBvdGhlcndpc2VcXG4rICovXFxuK3N0YXRpYyBib29sXFxuK3psMzA3M3hfZHBsbF9waW5faXNfcGVyb3V0KHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4sXFxuK1xcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCB6bDMwNzN4X3Bpbl9wcm9wcyAqcHJvcHMpXFxuK3tcXG4rXFx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gcGluLVxcdTAwM2VkcGxsO1xcbitcXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xcbitcXHR1OCBvdXRfaWQ7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0aWYgKHpsMzA3M3hfZHBsbF9pc19pbnB1dF9waW4ocGluKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0b3V0X2lkID0gemwzMDczeF9vdXRwdXRfcGluX291dF9nZXQocGluLVxcdTAwM2VpZCk7XFxuK1xcdGlmICh6bDMwNzN4X2Rldl9vdXRfaXNfZGlmZih6bGRwbGwtXFx1MDAzZWRldiwgb3V0X2lkKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkcGxsLVxcdTAwM2VkZXYsIHpsZHBsbC1cXHUwMDNlaWQpO1xcbitcXHRpZiAoIXpsMzA3M3hfY2hhbl9pc19vdXRfc3RlcHBlZChjaGFuLCBvdXRfaWQpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcHJvcHMtXFx1MDAzZWRwbGxfcHJvcHMuZnJlcV9zdXBwb3J0ZWRfbnVtOyBpKyspIHtcXG4rXFx0XFx0aWYgKHByb3BzLVxcdTAwM2VkcGxsX3Byb3BzLmZyZXFfc3VwcG9ydGVkW2ldLm1pbiA9PSAxKVxcbitcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbiAvKipcXG4gICogemwzMDczeF9kcGxsX3Bpbl9yZWdpc3RlciAtIHJlZ2lzdGVyIERQTEwgcGluXFxuICAqIEBwaW46IHBvaW50ZXIgdG8gRFBMTCBwaW5cXG5AQCAtMTY2Nyw2ICsxNzIxLDggQEAgemwzMDczeF9kcGxsX3Bpbl9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluLCB1MzIgaW5kZXgpXFxuIFxcdFxcdGlmIChwaW4tXFx1MDAzZXByaW8gPT0gWkxfRFBMTF9SRUZfUFJJT19OT05FKVxcbiBcXHRcXHRcXHQvKiBDbGFtcCBwcmlvIHRvIG1heCB2YWx1ZSAqL1xcbiBcXHRcXHRcXHRwaW4tXFx1MDAzZXByaW8gPSBaTF9EUExMX1JFRl9QUklPX01BWDtcXG4rXFx0fSBlbHNlIGlmICh6bDMwNzN4X2RwbGxfcGluX2lzX3Blcm91dChwaW4sIHByb3BzKSkge1xcbitcXHRcXHRwaW4tXFx1MDAzZXBlcm91dF9pZHggPSB6bGRwbGwtXFx1MDAzZXB0cF9pbmZvLm5fcGVyX291dCsrO1xcbiBcXHR9XFxuIFxcbiBcXHQvKiBDcmVhdGUgb3IgZ2V0IGV4aXN0aW5nIERQTEwgcGluICovXFxuQEAgLTE4OTcsNiArMTk1Myw4IEBAIHpsMzA3M3hfZHBsbF9waW5zX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcXG4gXFx0dTggaWQsIGluZGV4O1xcbiBcXHRpbnQgcmM7XFxuIFxcbitcXHR6bGRwbGwtXFx1MDAzZXB0cF9pbmZvLm5fcGVyX291dCA9IDA7XFxuK1xcbiBcXHQvKiBQcm9jZXNzIGlucHV0IHBpbnMgKi9cXG4gXFx0Zm9yIChpbmRleCA9IDA7IGluZGV4IFxcdTAwM2MgWkwzMDczWF9OVU1fUElOUzsgaW5kZXgrKykge1xcbiBcXHRcXHQvKiBGaXJzdCBpbnB1dCBwaW5zIGFuZCB0aGVuIG91dHB1dCBwaW5zICovXFxuQEAgLTIyODAsNDUgKzIzMzgsNDQ3IEBAIHpsMzA3M3hfZHBsbF9pbml0X2ZpbmVfcGhhc2VfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXFxuIFxcdHJldHVybiByYztcXG4gfVxcbiBcXG4rLyogTWF4aW11bSBmcmVxdWVuY3kgYWRqdXN0bWVudDogKy0xJSBvZiBub21pbmFsIGluIHBwYiAqL1xcbisjZGVmaW5lIFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESlxcdDEwMDAwMDAwXFxuK1xcbiAvKipcXG4tICogemwzMDczeF9kcGxsX2FsbG9jIC0gYWxsb2NhdGUgRFBMTCBkZXZpY2VcXG4tICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuLSAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlclxcbisgKiB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQgLSByZWFkIGN1cnJlbnQgdGltZSBmcm9tIFRvRCBjb3VudGVyc1xcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cXG4rICogQHRzOiB0aW1lc3BlYyB0byBzdG9yZSBjdXJyZW50IHRpbWVcXG4rICogQHN0czogb3B0aW9uYWwgc3lzdGVtIHRpbWVzdGFtcCBwYWlyIGZvciBjcm9zcy10aW1lc3RhbXBpbmdcXG4gICpcXG4tICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKVxcbit7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBwdHBfaW5mbyk7XFxuK1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZHBsbC1cXHUwMDNlZGV2LCB6bGRwbGwtXFx1MDAzZWlkLCBmYWxzZSwgdHMsIHN0cyk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCAtIHNldCBUb0QgY291bnRlcnMgdG8gZ2l2ZW4gdGltZVxcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cXG4rICogQHRzOiB0aW1lc3BlYyB3aXRoIHRpbWUgdG8gc2V0XFxuICAqXFxuLSAqIFJldHVybjogcG9pbnRlciB0byBEUExMIGRldmljZSBvbiBzdWNjZXNzLCBlcnJvciBwb2ludGVyIG9uIGVycm9yXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbiAgKi9cXG4tc3RydWN0IHpsMzA3M3hfZHBsbCAqXFxuLXpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXFxuK1xcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcXG4ge1xcbi1cXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBwdHBfaW5mbyk7XFxuIFxcbi1cXHR6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTtcXG4tXFx0aWYgKCF6bGRwbGwpXFxuLVxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuIFxcbi1cXHR6bGRwbGwtXFx1MDAzZWRldiA9IHpsZGV2O1xcbi1cXHR6bGRwbGwtXFx1MDAzZWlkID0gY2g7XFxuLVxcdG11dGV4X2luaXQoXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuLVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZ6bGRwbGwtXFx1MDAzZXBpbnMpO1xcbitcXHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF93cml0ZSh6bGRwbGwtXFx1MDAzZWRldiwgemxkcGxsLVxcdTAwM2VpZCwgKnRzKTtcXG4rfVxcbiBcXG4tXFx0cmV0dXJuIHpsZHBsbDtcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwIC0gYWRqdXN0IHN1Yi1zZWNvbmQgdGltZSB2aWEgcGhhc2Ugc3RlcFxcbisgKiBAemxkcGxsOiBEUExMIGNoYW5uZWxcXG4rICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMgKG11c3QgYmUgd2l0aGluICgtTlNFQ19QRVJfU0VDLFxcbisgKiAgICAgICAgIE5TRUNfUEVSX1NFQykpXFxuKyAqXFxuKyAqIFVzZXMgdGhlIG91dHB1dCBwaGFzZSBzdGVwIG1lY2hhbmlzbSB3aXRoIHRvZF9zdGVwPTEgdG8gYWRqdXN0IGJvdGhcXG4rICogdGhlIG91dHB1dCBjbG9jayBwaGFzZSBhbmQgdGhlIFRvRCBjb3VudGVyIHNpbXVsdGFuZW91c2x5LiBUaGlzIGtlZXBzXFxuKyAqIG91dHB1dHMgYW5kIFRvRCBjb2hlcmVudC4gT25seSB2YWxpZCBpbiBOQ08gbW9kZS5cXG4rICpcXG4rICogT3V0cHV0cyBhcmUgZ3JvdXBlZCBieSBzeW50aGVzaXplciBzaW5jZSB0aGUgcGhhc2Ugc3RlcCB2YWx1ZSBpcyBpblxcbisgKiBzeW50aGVzaXplciBjbG9jayBjeWNsZXMuIFRoZSBmaXJzdCBzeW50aCBncm91cCB3aXRoIGVuYWJsZWQgb3V0cHV0c1xcbisgKiB1c2VzIHRvZF9zdGVwIHRvIGFkanVzdCBib3RoIG91dHB1dHMgYW5kIHRoZSBUb0QgY291bnRlci4gUmVtYWluaW5nXFxuKyAqIGdyb3VwcyBzdGVwIG91dHB1dHMgb25seS4gSWYgbm8gc3ludGggaGFzIGVuYWJsZWQgb3V0cHV0cywgdGhlIFRvRFxcbisgKiBjb3VudGVyIGlzIHN0ZXBwZWQgYWxvbmUgdXNpbmcgYW4gZW1wdHkgb3V0cHV0IG1hc2sgKHRoZSBGVyB1c2VzIHRoZVxcbisgKiBsb3dlc3QtSUQgc3ludGgncyBwZXJpb2QgZm9yIHRoZSBjb252ZXJzaW9uKS5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIG5vIHN5bnRocyBhdmFpbGFibGUsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHM2NCBkZWx0YSlcXG4re1xcbitcXHR1MTYgc3ludGhfbWFza1taTDMwNzNYX05VTV9TWU5USFNdID0ge307XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXFx1MDAzZWRldjtcXG4rXFx0Y29uc3Qgc3RydWN0IHpsMzA3M3hfc3ludGggKnN5bnRoO1xcbitcXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluO1xcbitcXHR1MzIgZmlyc3Rfc3ludGhfZnJlcSA9IDA7XFxuK1xcdGJvb2wgdG9kX3N0ZXBwZWQgPSBmYWxzZTtcXG4rXFx0czMyIHN0ZXBfY3ljbGVzO1xcbitcXHR1MzIgc3ludGhfZnJlcTtcXG4rXFx0aW50IHJjO1xcbitcXHR1OCBpO1xcbitcXG4rXFx0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQpO1xcbitcXG4rXFx0LyogQnVpbGQgcGVyLXN5bnRoIG91dHB1dCBtYXNrcyBmcm9tIHJlZ2lzdGVyZWQgb3V0cHV0IHBpbnMgKi9cXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwaW4sIFxcdTAwMjZ6bGRwbGwtXFx1MDAzZXBpbnMsIGxpc3QpIHtcXG4rXFx0XFx0dTggb3V0X2lkLCBzeW50aF9pZDtcXG4rXFxuK1xcdFxcdGlmICh6bDMwNzN4X2RwbGxfaXNfaW5wdXRfcGluKHBpbikpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0b3V0X2lkID0gemwzMDczeF9vdXRwdXRfcGluX291dF9nZXQocGluLVxcdTAwM2VpZCk7XFxuK1xcbitcXHRcXHRpZiAoIXpsMzA3M3hfY2hhbl9pc19vdXRfc3RlcHBlZChjaGFuLCBvdXRfaWQpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHN5bnRoX2lkID0gemwzMDczeF9kZXZfb3V0X3N5bnRoX2dldCh6bGRldiwgb3V0X2lkKTtcXG4rXFx0XFx0aWYgKHN5bnRoX2lkIFxcdTAwM2U9IFpMMzA3M1hfTlVNX1NZTlRIUykge1xcbitcXHRcXHRcXHRkZXZfd2Fybih6bGRldi1cXHUwMDNlZGV2LCBcXFwiVW5leHBlY3RlZCBzeW50aCBpZCBmb3IgT1VUJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCBvdXRfaWQpO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXHRcXHRzeW50aF9tYXNrW3N5bnRoX2lkXSB8PSBCSVQob3V0X2lkKTtcXG4rXFx0fVxcbitcXG4rXFx0LyogUHJvY2VzcyBlYWNoIHN5bnRoIGdyb3VwICovXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBaTDMwNzNYX05VTV9TWU5USFM7IGkrKykge1xcbitcXHRcXHRzeW50aCA9IHpsMzA3M3hfc3ludGhfc3RhdGVfZ2V0KHpsZGV2LCBpKTtcXG4rXFx0XFx0aWYgKCF6bDMwNzN4X3N5bnRoX2lzX2VuYWJsZWQoc3ludGgpIHx8XFxuK1xcdFxcdCAgICB6bDMwNzN4X3N5bnRoX2RwbGxfZ2V0KHN5bnRoKSAhPSB6bGRwbGwtXFx1MDAzZWlkKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHN5bnRoX2ZyZXEgPSB6bDMwNzN4X3N5bnRoX2ZyZXFfZ2V0KHN5bnRoKTtcXG4rXFxuK1xcdFxcdC8qIFJlbWVtYmVyIGxvd2VzdC1JRCBzeW50aCBmcmVxIGZvciBUb0Qtb25seSBmYWxsYmFjayAqL1xcbitcXHRcXHRpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpXFxuK1xcdFxcdFxcdGZpcnN0X3N5bnRoX2ZyZXEgPSBzeW50aF9mcmVxO1xcbitcXG4rXFx0XFx0aWYgKCFzeW50aF9tYXNrW2ldKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdC8qIFNhZmUgZm9yIHMzMjogbWF4IHN5bnRoIGZyZXEgaXMgNzUwIE1IeiAqL1xcbitcXHRcXHRzdGVwX2N5Y2xlcyA9IGRpdl9zNjQoZGVsdGEgKiBzeW50aF9mcmVxLCBOU0VDX1BFUl9TRUMpO1xcbitcXG4rXFx0XFx0cmMgPSB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCh6bGRldiwgemxkcGxsLVxcdTAwM2VpZCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBzeW50aF9tYXNrW2ldLCBzdGVwX2N5Y2xlcyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAhdG9kX3N0ZXBwZWQpO1xcbitcXHRcXHRpZiAocmMpIHtcXG4rXFx0XFx0XFx0aWYgKHRvZF9zdGVwcGVkKSB7XFxuK1xcdFxcdFxcdFxcdGRldl93YXJuKHpsZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCBcXFwiUGFydGlhbCBwaGFzZSBzdGVwIGZhaWx1cmVcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRyZXR1cm4gcmM7XFxuK1xcdFxcdH1cXG4rXFx0XFx0dG9kX3N0ZXBwZWQgPSB0cnVlO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdC8qIE5vIGVuYWJsZWQgb3V0cHV0cyBmb3VuZDsgc3RlcCBUb0QgY291bnRlciBvbmx5IHVzaW5nIHRoZVxcbitcXHQgKiBsb3dlc3QtSUQgc3ludGgncyBwZXJpb2QgKGVtcHR5IG91dHB1dCBtYXNrKS5cXG4rXFx0ICovXFxuK1xcdGlmICghdG9kX3N0ZXBwZWQpIHtcXG4rXFx0XFx0c3RlcF9jeWNsZXMgPSBkaXZfczY0KGRlbHRhICogZmlyc3Rfc3ludGhfZnJlcSwgTlNFQ19QRVJfU0VDKTtcXG4rXFx0XFx0cmV0dXJuIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkLCAwLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RlcF9jeWNsZXMsIHRydWUpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gLyoqXFxuLSAqIHpsMzA3M3hfZHBsbF9mcmVlIC0gZnJlZSBEUExMIGRldmljZVxcbi0gKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmVcXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lIC0gYWRqdXN0IFBUUCBjbG9jayB0aW1lXFxuKyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xcbisgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kc1xcbiAgKlxcbi0gKiBEZWFsbG9jYXRlcyBnaXZlbiBEUExMIGRldmljZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBieSBAemwzMDczeF9kcGxsX2FsbG9jLlxcbisgKiBJbiBOQ08gbW9kZSwgbGFyZ2UgZGVsdGFzIChcXHUwMDNlPSAxIHNlY29uZCkgYXJlIHNwbGl0IGludG8gYSBUb0RcXG4rICogcmVhZC1tb2RpZnktd3JpdGUgZm9yIHRoZSBzZWNvbmRzIHBhcnQgYW5kIGFuIG91dHB1dCBwaGFzZSBzdGVwIGZvclxcbisgKiB0aGUgc3ViLXNlY29uZCByZW1haW5kZXIuIFN1Yi1zZWNvbmQgZGVsdGFzIHVzZSBwaGFzZSBzdGVwIGRpcmVjdGx5LFxcbisgKiBmYWxsaW5nIGJhY2sgdG8gVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIGlmIHBoYXNlIHN0ZXAgaXMgdW5hdmFpbGFibGUuXFxuKyAqIEluIEFVVE8vUkVGTE9DSyBtb2RlcywgbGFyZ2UgZGVsdGFzIGFyZSBzcGxpdCBpbnRvIFRvRFxcbisgKiByZWFkLW1vZGlmeS13cml0ZSBmb3Igc2Vjb25kcyBhbmQgVElFIHdyaXRlIGZvciB0aGUgc3ViLXNlY29uZFxcbisgKiByZW1haW5kZXIuIFN1Yi1zZWNvbmQgZGVsdGFzIHVzZSBUSUUgd3JpdGUgZGlyZWN0bHkuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbiAgKi9cXG4tdm9pZFxcbi16bDMwNzN4X2RwbGxfZnJlZShzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXFxuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczY0IGRlbHRhKVxcbiB7XFxuLVxcdFdBUk4oemxkcGxsLVxcdTAwM2VkcGxsX2RldiwgXFxcIkRQTEwgZGV2aWNlIGlzIHN0aWxsIHJlZ2lzdGVyZWRcXFxcblxcXCIpO1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgcHRwX2luZm8pO1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVxcdTAwM2VkZXY7XFxuK1xcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XFxuK1xcdGJvb2wgc2VjX2FkanVzdGVkID0gZmFsc2U7XFxuK1xcdHN0cnVjdCB0aW1lc3BlYzY0IHRzO1xcbitcXHRpbnQgcmM7XFxuIFxcbi1cXHRtdXRleF9kZXN0cm95KFxcdTAwMjZ6bGRwbGwtXFx1MDAzZWxvY2spO1xcbi1cXHRrZnJlZSh6bGRwbGwpO1xcbitcXHRpZiAoIWRlbHRhKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdC8qIE1vZGVzIHdpdGhvdXQgcGhhc2Ugc3RlcCBvciBUSUUgdXNlIHBsYWluIFRvRCBhZGp1c3QgKi9cXG4rXFx0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQpO1xcbitcXHRpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIXpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjaGFuKSlcXG4rXFx0XFx0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgbnNfdG9fdGltZXNwZWM2NChkZWx0YSkpO1xcbitcXG4rXFx0LyogU3BsaXQgb2ZmIHNlY29uZHMgdmlhIFRvRCByZWFkLW1vZGlmeS13cml0ZSBzbyB0aGUgc3ViLXNlY29uZFxcbitcXHQgKiByZW1haW5kZXIgY2FuIGJlIGFwcGxpZWQgdGhyb3VnaCB0aGUgb3V0cHV0LWNvaGVyZW50IG1lY2hhbmlzbVxcbitcXHQgKiAocGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUpLlxcbitcXHQgKi9cXG4rXFx0aWYgKGFicyhkZWx0YSkgXFx1MDAzZT0gTlNFQ19QRVJfU0VDKSB7XFxuK1xcdFxcdHMzMiByZW1haW5kZXI7XFxuK1xcbitcXHRcXHR0cy50dl9zZWMgPSBkaXZfczY0X3JlbShkZWx0YSwgTlNFQ19QRVJfU0VDLCBcXHUwMDI2cmVtYWluZGVyKTtcXG4rXFx0XFx0dHMudHZfbnNlYyA9IDA7XFxuK1xcdFxcdGRlbHRhID0gcmVtYWluZGVyO1xcbitcXG4rXFx0XFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVxcdTAwM2VpZCwgdHMpO1xcbitcXHRcXHRpZiAocmMpXFxuK1xcdFxcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdFxcdHNlY19hZGp1c3RlZCA9IHRydWU7XFxuK1xcbitcXHRcXHQvKiBObyBzdWItc2Vjb25kIHJlbWFpbmRlciwgZG9uZSAqL1xcbitcXHRcXHRpZiAoIWRlbHRhKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0LyogQXBwbHkgc3ViLXNlY29uZCBkZWx0YSB2aWEgcGhhc2Ugc3RlcCAoTkNPKSBvciBUSUUgd3JpdGUgKi9cXG4rXFx0aWYgKHpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSkge1xcbitcXHRcXHRyYyA9IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwKHpsZHBsbCwgZGVsdGEpO1xcbitcXHRcXHRpZiAoIXJjKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmMgPSB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkLCBkZWx0YSk7XFxuK1xcdFxcdGlmICghcmMpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHQvKiBQaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSBmYWlsZWQsIGZhbGwgYmFjayB0byBUb0QgYWRqdXN0ICovXFxuK1xcdHJjID0gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQsXFxuK1xcdFxcdFxcdFxcdCAgICAgbnNfdG9fdGltZXNwZWM2NChkZWx0YSkpO1xcbitcXG4rXFx0LyogSW4gdGhlIHVubGlrZWx5IGV2ZW50IHRoYXQgYm90aCBwaGFzZSBzdGVwL1RJRSB3cml0ZSBhbmQgZmFsbGJhY2tcXG4rXFx0ICogVG9EIGFkanVzdCBmYWlsIGFmdGVyIHNlY29uZHMgd2VyZSBhbHJlYWR5IGNvbW1pdHRlZCwgcmV0dXJuXFxuK1xcdCAqIHN1Y2Nlc3MgdG8gcHJldmVudCB0aGUgUFRQIHNlcnZvIGZyb20gcmV0cnlpbmcgdGhlIGZ1bGwgZGVsdGEgYW5kXFxuK1xcdCAqIGFwcGx5aW5nIHNlY29uZHMgYWdhaW4uIFRoZSBzdWItc2Vjb25kIHJlc2lkdWFsIHdpbGwgc2VsZi1jb3JyZWN0XFxuK1xcdCAqIGluIHRoZSBuZXh0IHNlcnZvIGN5Y2xlLlxcbitcXHQgKi9cXG4rXFx0aWYgKHJjIFxcdTAwMjZcXHUwMDI2IHNlY19hZGp1c3RlZCkge1xcbitcXHRcXHRkZXZfd2Fybih6bGRldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHQgXFxcIlN1Yi1zZWNvbmQgYWRqdXN0bWVudCBmYWlsZWQgYWZ0ZXIgc2Vjb25kcyBhcHBsaWVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiByYztcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSAtIGFkanVzdCBQVFAgY2xvY2sgZnJlcXVlbmN5XFxuKyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xcbisgKiBAc2NhbGVkX3BwbTogZnJlcXVlbmN5IGFkanVzdG1lbnQgaW4gc2NhbGVkIHBwbSAocHBtICogMl4xNilcXG4rICpcXG4rICogT25seSBzdXBwb3J0ZWQgaW4gTkNPIG1vZGUuIFdyaXRlcyB0aGUgZGVsdGEgZnJlcXVlbmN5IG9mZnNldCByZWdpc3Rlci5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIG5vdCBpbiBOQ08gbW9kZSwgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK3N0YXRpYyBpbnRcXG4remwzMDczeF9kcGxsX3B0cF9hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgbG9uZyBzY2FsZWRfcHBtKVxcbit7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBwdHBfaW5mbyk7XFxuK1xcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XFxuK1xcdHM2NCBvZmZzZXQ7XFxuK1xcbitcXHQvKiBDb252ZXJ0IHNjYWxlZF9wcG0gdG8gZGZfb2Zmc2V0IGluIDJeLTQ4IHN0ZXBzOlxcbitcXHQgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDJeMzIpIC8gMTBeNlxcbitcXHQgKlxcbitcXHQgKiBTaW1wbGlmeSB0byBhdm9pZCBvdmVyZmxvdzpcXG4rXFx0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjI2KSAvIDVeNlxcbitcXHQgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDY3MTA4ODY0KSAvIDE1NjI1XFxuK1xcdCAqL1xcbitcXHRvZmZzZXQgPSAtZGl2X3M2NCgoczY0KXNjYWxlZF9wcG0gKiA2NzEwODg2NExMLCAxNTYyNSk7XFxuK1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRwbGwtXFx1MDAzZWRldiwgemxkcGxsLVxcdTAwM2VpZCk7XFxuK1xcdGlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKVxcbitcXHRcXHRyZXR1cm4gc2NhbGVkX3BwbSA/IC1FT1BOT1RTVVBQIDogMDtcXG4rXFx0aWYgKG9mZnNldCA9PSBjaGFuLVxcdTAwM2VkZl9vZmZzZXQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0dXJuIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHpsZHBsbC1cXHUwMDNlZGV2LCB6bGRwbGwtXFx1MDAzZWlkLCBvZmZzZXQpO1xcbit9XFxuK1xcbisvKipcXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSAtIGFkanVzdCBQVFAgY2xvY2sgcGhhc2VcXG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXFxuKyAqIEBkZWx0YTogcGhhc2UgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kc1xcbisgKlxcbisgKiBPbmx5IHN1cHBvcnRlZCBpbiBBVVRPIGFuZCBSRUZMT0NLIG1vZGVzLiBVc2VzIFRJRSB3cml0ZSBmb3JcXG4rICogbmFub3NlY29uZCByZXNvbHV0aW9uIHBoYXNlIGFkanVzdG1lbnQuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRU9QTk9UU1VQUCBpZiBtb2RlIGRvZXNuJ3Qgc3VwcG9ydCBUSUUsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2Uoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBzMzIgZGVsdGEpXFxuK3tcXG4rXFx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIHB0cF9pbmZvKTtcXG4rXFx0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cXHUwMDNlZGV2O1xcbitcXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xcbitcXG4rXFx0aWYgKCFkZWx0YSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLVxcdTAwM2VpZCk7XFxuK1xcbitcXHRpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjaGFuKSlcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0cmV0dXJuIHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQsIGRlbHRhKTtcXG4rfVxcbitcXG4rc3RhdGljIHMzMlxcbit6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyBfX2Fsd2F5c191bnVzZWQpXFxuK3tcXG4rXFx0LyogSFcgbGltaXRzIFRJRSB3cml0ZSB0byArLTEgc2Vjb25kLiBSZXR1cm4gdGhlIGNvbnN0YW50IEhXXFxuK1xcdCAqIGxpbWl0IGFuZCBsZXQgYWRqcGhhc2UgaGFuZGxlIG1vZGUtc3BlY2lmaWMgY2hlY2tzLlxcbitcXHQgKi9cXG4rXFx0cmV0dXJuIE5TRUNfUEVSX1NFQyAtIDE7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2RwbGxfcHRwX3Blcm91dF9maW5kX3BpbiAtIGZpbmQgcGluIGJ5IHBlcm91dCBjaGFubmVsIGluZGV4XFxuKyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbFxcbisgKiBAaWR4OiBwZXJvdXQgY2hhbm5lbCBpbmRleCB0byBmaW5kXFxuKyAqXFxuKyAqIFJldHVybjogcG9pbnRlciB0byB0aGUgcGluLCBvciBOVUxMIGlmIG5vdCBmb3VuZFxcbisgKi9cXG4rc3RhdGljIHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpcXG4remwzMDczeF9kcGxsX3B0cF9wZXJvdXRfZmluZF9waW4oc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLCBpbnQgaWR4KVxcbit7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW47XFxuK1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBpbiwgXFx1MDAyNnpsZHBsbC1cXHUwMDNlcGlucywgbGlzdCkge1xcbitcXHRcXHRpZiAocGluLVxcdTAwM2VwZXJvdXRfaWR4ID09IGlkeClcXG4rXFx0XFx0XFx0cmV0dXJuIHBpbjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2RwbGxfcHRwX2VuYWJsZSAtIGVuYWJsZS9kaXNhYmxlIFBUUCBjbG9jayBmdW5jdGlvbnNcXG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXFxuKyAqIEBycTogdGhlIHJlcXVlc3RlZCBjbG9jayBmdW5jdGlvbiBhbmQgcGFyYW1ldGVyc1xcbisgKiBAb246IHRydWUgdG8gZW5hYmxlLCBmYWxzZSB0byBkaXNhYmxlXFxuKyAqXFxuKyAqIEhhbmRsZXMgUFRQX0NMS19SRVFfUEVST1VUIHJlcXVlc3RzLiBPbmx5IDFQUFMgKHBlcmlvZCA9IDFzKSBpcyBzdXBwb3J0ZWQuXFxuKyAqIE9uIGVuYWJsZSwgY29uZmlndXJlcyB0aGUgb3V0cHV0IGRpdmlkZXIgZm9yIDEgSHouIE9uIGRpc2FibGUsIGRvZXMgbm90aGluZ1xcbisgKiBhcyB0aGUgc2lnbmFsIGlzIG5vdCBkaXNhYmxlZC5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfZW5hYmxlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IHB0cF9jbG9ja19yZXF1ZXN0ICpycSwgaW50IG9uKVxcbit7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBwdHBfaW5mbyk7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW47XFxuK1xcdHVuc2lnbmVkIGludCBpZHg7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdGlmIChycS1cXHUwMDNldHlwZSAhPSBQVFBfQ0xLX1JFUV9QRVJPVVQpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGlkeCA9IHJxLVxcdTAwM2VwZXJvdXQuaW5kZXg7XFxuK1xcdGlmIChpZHggXFx1MDAzZT0gaW5mby1cXHUwMDNlbl9wZXJfb3V0KVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdC8qIFRvZ2dsaW5nIG91dHB1dCBwaW5zIGNhbiBwcm9kdWNlIHJ1bnQgcHVsc2VzLCBzbyBkaXNhYmxlXFxuK1xcdCAqIGlzIGEgbm8tb3AuXFxuK1xcdCAqL1xcbitcXHRpZiAoIW9uKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdC8qIE9ubHkgYWNjZXB0IGV4YWN0bHkgMVBQUyAocGVyaW9kLnNlYyA9PSAxLCBuc2VjID09IDApICovXFxuK1xcdGlmIChycS1cXHUwMDNlcGVyb3V0LnBlcmlvZC5zZWMgIT0gMSB8fCBycS1cXHUwMDNlcGVyb3V0LnBlcmlvZC5uc2VjICE9IDApXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdHBpbiA9IHpsMzA3M3hfZHBsbF9wdHBfcGVyb3V0X2ZpbmRfcGluKHpsZHBsbCwgaWR4KTtcXG4rXFx0aWYgKCFwaW4pIHtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ6bGRwbGwtXFx1MDAzZWxvY2spO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0LyogQWxyZWFkeSBhdCAxIEh6LCBub3RoaW5nIHRvIGRvICovXFxuK1xcdGlmICh6bDMwNzN4X2Rldl9vdXRwdXRfcGluX2ZyZXFfZ2V0KHpsZHBsbC1cXHUwMDNlZGV2LCBwaW4tXFx1MDAzZWlkKSA9PSAxKSB7XFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdHJjID0gX196bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfc2V0KHpsZHBsbCwgcGluLCAxKTtcXG4rXFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdGlmICghcmMpXFxuK1xcdFxcdGRwbGxfcGluX2NoYW5nZV9udGYocGluLVxcdTAwM2VkcGxsX3Bpbik7XFxuK1xcbitcXHRyZXR1cm4gcmM7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvID0ge1xcbitcXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbitcXHQubWF4X2FkalxcdD0gWkwzMDczWF9EUExMX1BUUF9NQVhfQURKLFxcbitcXHQuZ2V0dGltZXg2NFxcdD0gemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0LFxcbitcXHQuc2V0dGltZTY0XFx0PSB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCxcXG4rXFx0LmFkanRpbWVcXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSxcXG4rXFx0LmFkamZpbmVcXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSxcXG4rXFx0LmFkanBoYXNlXFx0PSB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlLFxcbitcXHQuZ2V0bWF4cGhhc2VcXHQ9IHpsMzA3M3hfZHBsbF9wdHBfZ2V0bWF4cGhhc2UsXFxuK1xcdC5lbmFibGVcXHRcXHQ9IHpsMzA3M3hfZHBsbF9wdHBfZW5hYmxlLFxcbit9O1xcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIgLSByZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsXFxuKyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byByZWdpc3RlciBQVFAgY2xvY2sgZm9yXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcXG4re1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVxcdTAwM2VkZXY7XFxuK1xcdHN0cnVjdCBwdHBfY2xvY2sgKnB0cF9jbG9jaztcXG4rXFxuK1xcdHNucHJpbnRmKHpsZHBsbC1cXHUwMDNlcHRwX2luZm8ubmFtZSwgc2l6ZW9mKHpsZHBsbC1cXHUwMDNlcHRwX2luZm8ubmFtZSksXFxuK1xcdFxcdCBcXFwiemwzMDczeC1kcGxsJXVcXFwiLCB6bGRwbGwtXFx1MDAzZWlkKTtcXG4rXFxuK1xcdHB0cF9jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcihcXHUwMDI2emxkcGxsLVxcdTAwM2VwdHBfaW5mbywgemxkZXYtXFx1MDAzZWRldik7XFxuK1xcdGlmIChJU19FUlIocHRwX2Nsb2NrKSkge1xcbitcXHRcXHRkZXZfZXJyKHpsZGV2LVxcdTAwM2VkZXYsIFxcXCJGYWlsZWQgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBEUExMJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHpsZHBsbC1cXHUwMDNlaWQpO1xcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihwdHBfY2xvY2spO1xcbitcXHR9XFxuK1xcbitcXHR6bGRwbGwtXFx1MDAzZXB0cF9jbG9jayA9IHB0cF9jbG9jaztcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKipcXG4rICogemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyIC0gdW5yZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsXFxuKyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byB1bnJlZ2lzdGVyIFBUUCBjbG9jayBmb3JcXG4rICovXFxuK3N0YXRpYyB2b2lkIHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXFxuK3tcXG4rXFx0aWYgKCFJU19FUlJfT1JfTlVMTCh6bGRwbGwtXFx1MDAzZXB0cF9jbG9jaykpIHtcXG4rXFx0XFx0cHRwX2Nsb2NrX3VucmVnaXN0ZXIoemxkcGxsLVxcdTAwM2VwdHBfY2xvY2spO1xcbitcXHRcXHR6bGRwbGwtXFx1MDAzZXB0cF9jbG9jayA9IE5VTEw7XFxuK1xcdH1cXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTI0MDMsNiArMjg2Myw0OCBAQCB6bDMwNzN4X2RwbGxfcmVmX3N5bmNfcGFpcnNfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9hbGxvYyAtIGFsbG9jYXRlIERQTEwgZGV2aWNlXFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBudW1iZXJcXG4rICpcXG4rICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLlxcbisgKlxcbisgKiBSZXR1cm46IHBvaW50ZXIgdG8gRFBMTCBkZXZpY2Ugb24gc3VjY2VzcywgZXJyb3IgcG9pbnRlciBvbiBlcnJvclxcbisgKi9cXG4rc3RydWN0IHpsMzA3M3hfZHBsbCAqXFxuK3psMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcXG4re1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7XFxuK1xcbitcXHR6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTtcXG4rXFx0aWYgKCF6bGRwbGwpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXG4rXFx0emxkcGxsLVxcdTAwM2VkZXYgPSB6bGRldjtcXG4rXFx0emxkcGxsLVxcdTAwM2VpZCA9IGNoO1xcbitcXHR6bGRwbGwtXFx1MDAzZXB0cF9pbmZvID0gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvO1xcbitcXHRtdXRleF9pbml0KFxcdTAwMjZ6bGRwbGwtXFx1MDAzZWxvY2spO1xcbitcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2emxkcGxsLVxcdTAwM2VwaW5zKTtcXG4rXFxuK1xcdHJldHVybiB6bGRwbGw7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2RwbGxfZnJlZSAtIGZyZWUgRFBMTCBkZXZpY2VcXG4rICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXFxuKyAqXFxuKyAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuXFxuKyAqL1xcbit2b2lkXFxuK3psMzA3M3hfZHBsbF9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcXG4re1xcbitcXHRXQVJOKHpsZHBsbC1cXHUwMDNlZHBsbF9kZXYsIFxcXCJEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXFxcXG5cXFwiKTtcXG4rXFxuK1xcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuK1xcdGtmcmVlKHpsZHBsbCk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIgLSByZWdpc3RlciBEUExMIGRldmljZSBhbmQgYWxsIGl0cyBwaW5zXFxuICAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZVxcbkBAIC0yNDMzLDYgKzI5MzUsMTMgQEAgemwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcXG4gXFx0XFx0cmV0dXJuIHJjO1xcbiBcXHR9XFxuIFxcbitcXHRyYyA9IHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIoemxkcGxsKTtcXG4rXFx0aWYgKHJjKSB7XFxuK1xcdFxcdHpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTtcXG4rXFx0XFx0emwzMDczeF9kcGxsX2RldmljZV91bnJlZ2lzdGVyKHpsZHBsbCk7XFxuK1xcdFxcdHJldHVybiByYztcXG4rXFx0fVxcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTI0NDYsNyArMjk1NSw3IEBAIHpsMzA3M3hfZHBsbF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXFxuIHZvaWRcXG4gemwzMDczeF9kcGxsX3VucmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxcbiB7XFxuLVxcdC8qIFVucmVnaXN0ZXIgYWxsIHBpbnMgYW5kIGRwbGwgKi9cXG4rXFx0emwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHpsZHBsbCk7XFxuIFxcdHpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTtcXG4gXFx0emwzMDczeF9kcGxsX2RldmljZV91bnJlZ2lzdGVyKHpsZHBsbCk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXFxuaW5kZXggZmFlYmM0MDJiYTFiNzAuLjliNWY3MmMzMzg0OWNlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaFxcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaFxcbkBAIC01LDYgKzUsOCBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RwbGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpc3QuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L211dGV4LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwiY29yZS5oXFxcIlxcbiBcXG5AQCAtMjIsNiArMjQsOCBAQFxcbiAgKiBAdHlwZTogRFBMTCB0eXBlIChQUFMgb3IgRUVDKVxcbiAgKiBAbG9ja19zdGF0dXM6IGxhc3Qgc2F2ZWQgRFBMTCBsb2NrIHN0YXR1c1xcbiAgKiBAcGluczogbGlzdCBvZiBwaW5zXFxuKyAqIEBwdHBfaW5mbzogUFRQIGNsb2NrIGluZm9cXG4rICogQHB0cF9jbG9jazogcmVnaXN0ZXJlZCBQVFAgY2xvY2sgKG9yIE5VTEwpXFxuICAqL1xcbiBzdHJ1Y3QgemwzMDczeF9kcGxsIHtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZFxcdFxcdGxpc3Q7XFxuQEAgLTM2LDYgKzQwLDggQEAgc3RydWN0IHpsMzA3M3hfZHBsbCB7XFxuIFxcdGVudW0gZHBsbF90eXBlXFx0XFx0XFx0dHlwZTtcXG4gXFx0ZW51bSBkcGxsX2xvY2tfc3RhdHVzXFx0XFx0bG9ja19zdGF0dXM7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWRcXHRcXHRwaW5zO1xcbitcXHRzdHJ1Y3QgcHRwX2Nsb2NrX2luZm9cXHRcXHRwdHBfaW5mbztcXG4rXFx0c3RydWN0IHB0cF9jbG9ja1xcdFxcdCpwdHBfY2xvY2s7XFxuIH07XFxuIFxcbiBzdHJ1Y3QgemwzMDczeF9kcGxsICp6bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhcXG5pbmRleCBiNzBlYWQ3ZDQ0OTViMi4uNDQ3NzU3ZTk5ODQ1ZDggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXFxuQEAgLTE3OSw2ICsxNzksMjAgQEBcXG4gI2RlZmluZSBaTF9EUExMX0RGX1JFQURfQ01EXFx0XFx0XFx0R0VOTUFTSygyLCAwKVxcbiAjZGVmaW5lIFpMX0RQTExfREZfUkVBRF9DTURfQUNDX0lcXHRcXHQ0XFxuIFxcbisjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9DVFJMXFx0XFx0XFx0WkxfUkVHKDUsIDB4MzAsIDEpXFxuKyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUFxcdFxcdFxcdEdFTk1BU0soMiwgMClcXG4rI2RlZmluZSBaTF9EUExMX1RJRV9DVFJMX09QX1dSXFx0XFx0XFx0NFxcbitcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTF9NQVNLXFx0XFx0WkxfUkVHKDUsIDB4MzEsIDEpXFxuK1xcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9DVFJMKF9pZHgpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRaTF9SRUdfSURYKF9pZHgsIDUsIDB4MzgsIDEsIDgsIDEpXFxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9TRU1cXHRcXHRcXHRCSVQoNClcXG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRFxcdFxcdFxcdEdFTk1BU0soMywgMClcXG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWlxcdDFcXG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UXFx0OFxcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaXFx0OVxcbitcXG4gI2RlZmluZSBaTF9SRUdfRFBMTF9NRUFTX0NUUkxcXHRcXHRcXHRaTF9SRUcoNSwgMHg1MCwgMSlcXG4gI2RlZmluZSBaTF9EUExMX01FQVNfQ1RSTF9FTlxcdFxcdFxcdEJJVCgwKVxcbiAjZGVmaW5lIFpMX0RQTExfTUVBU19DVFJMX0FWR19GQUNUT1JcXHRcXHRHRU5NQVNLKDcsIDQpXFxuQEAgLTE5Myw2ICsyMDcsOSBAQFxcbiBcXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcXG4gICogUmVnaXN0ZXIgUGFnZXMgNi03LCBEUExMIERhdGFcXG4rICpcXG4rICogUGVyLWNoYW5uZWwgcmVnaXN0ZXJzIHdpdGggc3RyaWRlIDB4MjAuIENoYW5uZWxzIDAtMyByZXNpZGUgb24gcGFnZSA2LFxcbisgKiBjaGFubmVsIDQgb24gcGFnZSA3LlxcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4gXFxuICNkZWZpbmUgWkxfUkVHX0RQTExfREZfT0ZGU0VUXzAzKF9pZHgpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbkBAIC0yMDIsNiArMjE5LDI0IEBAXFxuIFxcdCgoX2lkeCkgXFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfREZfT0ZGU0VUXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfREZfT0ZGU0VUXzQpXFxuICNkZWZpbmUgWkxfRFBMTF9ERl9PRkZTRVRfVU5LTk9XTlxcdFM2NF9NSU5cXG4gXFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEFfMDMoX2lkeClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgwQywgNiwgNCwgMHgyMClcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQV80XFx0XFx0XFx0WkxfUkVHKDcsIDB4MEMsIDYpXFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEEoX2lkeClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdCgoX2lkeCkgXFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfVElFX0RBVEFfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9USUVfREFUQV80KVxcbitcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRaTF9SRUdfSURYKF9pZHgsIDYsIDB4MTIsIDYsIDQsIDB4MjApXFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQ180XFx0XFx0XFx0WkxfUkVHKDcsIDB4MTIsIDYpXFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQyhfaWR4KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0KChfaWR4KSBcXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVE9EX1NFQ180KVxcbitcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlNfMDMoX2lkeClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgxOCwgNCwgNCwgMHgyMClcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlNfNFxcdFxcdFxcdFpMX1JFRyg3LCAweDE4LCA0KVxcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OUyhfaWR4KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0KChfaWR4KSBcXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9UT0RfTlNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfTlNfNClcXG4rXFxuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbiAgKiBSZWdpc3RlciBQYWdlIDksIFN5bnRoIGFuZCBPdXRwdXRcXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbkBAIC0yMjEsNiArMjU2LDggQEBcXG4gI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9FTlxcdFxcdFxcdEJJVCgwKVxcbiAjZGVmaW5lIFpMX09VVFBVVF9DVFJMX1NZTlRIX1NFTFxcdFxcdEdFTk1BU0soNiwgNClcXG4gXFxuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTS1xcdFxcdFpMX1JFRyg5LCAweDM2LCAyKVxcbitcXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcXG4gICogUmVnaXN0ZXIgUGFnZSAxMCwgUmVmIE1haWxib3hcXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuQEAgLTMxNiw2ICszNTMsMjUgQEBcXG4gI2RlZmluZSBaTF9SRUdfT1VUUFVUX0VTWU5DX1dJRFRIXFx0XFx0WkxfUkVHKDE0LCAweDE4LCA0KVxcbiAjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfQ09NUFxcdFxcdFpMX1JFRygxNCwgMHgyMCwgNClcXG4gXFxuKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbisgKiBSZWdpc3RlciBQYWdlIDksIE91dHB1dCBQaGFzZSBTdGVwXFxuKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4rXFxuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxcXHRcXHRaTF9SRUcoOSwgMHgzOCwgMSlcXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX0RQTExcXHRcXHRHRU5NQVNLKDYsIDQpXFxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9UT0RfU1RFUFxcdEJJVCgzKVxcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BcXHRcXHRHRU5NQVNLKDEsIDApXFxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9OT05FXFx0MFxcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfUkVTRVRcXHQxXFxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9SRUFEXFx0MlxcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfV1JJVEVcXHQzXFxuK1xcbisjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9OVU1CRVJcXHRcXHRaTF9SRUcoOSwgMHgzOSwgMSlcXG4rXFxuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX01BU0tcXHRcXHRaTF9SRUcoOSwgMHgzYSwgMilcXG4rXFxuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0RBVEFcXHRcXHRaTF9SRUcoOSwgMHgzYywgNClcXG4rXFxuIC8qXFxuICAqIFJlZ2lzdGVyIFBhZ2UgMjU1IC0gSFcgcmVnaXN0ZXJzIGFjY2Vzc1xcbiAgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTE6MTI6NDcuMzM3MzUwMDc3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMjY2MTY5MjU2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaTDMwNzNYXCIsXG4gICAgXCJaTDMwNzNYX0kyQ1wiLFxuICAgIFwiWkwzMDczWF9TUElcIixcbiAgICBcIlBUUF8xNTg4X0NMT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0XCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NFwiLFxuICAgIFwiemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lXCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmVcIixcbiAgICBcInpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2VcIixcbiAgICBcInpsMzA3M3hfZHBsbF9wdHBfZW5hYmxlXCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fdG9kX3JlYWRcIixcbiAgICBcInpsMzA3M3hfY2hhbl90b2Rfd3JpdGVcIixcbiAgICBcInpsMzA3M3hfY2hhbl90b2RfYWRqdXN0XCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcFwiLFxuICAgIFwiemwzMDczeF9jaGFuX3RpZV93cml0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgUFRQIGNsb2NrIHN1cHBvcnQgdG8gdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyICh6bDMwNzN4KS4gSXQgaW1wbGVtZW50cyB2YXJpb3VzIFBUUCBjbG9jayBvcGVyYXRpb25zIChnZXQvc2V0IHRpbWUsIGFkanVzdCB0aW1lL3BoYXNlL2ZyZXF1ZW5jeSkgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIFBUUCBpb2N0bCBpbnRlcmZhY2UuIEZ1enppbmcgdGhlc2UgZnVuY3Rpb25zIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlIGRyaXZlciBoYW5kbGVzIGVkZ2UgY2FzZXMgYW5kIGNvbmN1cnJlbnQgYWNjZXNzZXMgY29ycmVjdGx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDEyN2VjMWRhY2ViNTVjZTg0OTFiNjRhOWRjZjU4YWQxMDI1ZTMwNTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCA5IDExOjEyOjQ0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdcbmluZGV4IDViYmNhMTQwMDU4MTMxLi5kMDU3NGFkNTcxZDNmYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdcbkBAIC0yLDcgKzIsNyBAQFxuIFxuIGNvbmZpZyBaTDMwNzNYXG4gXHR0cmlzdGF0ZSBcIk1pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXNcIiBpZiBDT01QSUxFX1RFU1Rcbi1cdGRlcGVuZHMgb24gTkVUXG4rXHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiBcdHNlbGVjdCBEUExMXG4gXHRzZWxlY3QgTkVUX0RFVkxJTktcbiBcdHNlbGVjdCBSRUdNQVBcbkBAIC0xNiw3ICsxNiw3IEBAIGNvbmZpZyBaTDMwNzNYXG4gXG4gY29uZmlnIFpMMzA3M1hfSTJDXG4gXHR0cmlzdGF0ZSBcIkkyQyBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcIlxuLVx0ZGVwZW5kcyBvbiBJMkMgXHUwMDI2XHUwMDI2IE5FVFxuK1x0ZGVwZW5kcyBvbiBJMkMgXHUwMDI2XHUwMDI2IE5FVCBcdTAwMjZcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiBcdHNlbGVjdCBSRUdNQVBfSTJDXG4gXHRzZWxlY3QgWkwzMDczWFxuIFx0aGVscFxuQEAgLTI4LDcgKzI4LDcgQEAgY29uZmlnIFpMMzA3M1hfSTJDXG4gXG4gY29uZmlnIFpMMzA3M1hfU1BJXG4gXHR0cmlzdGF0ZSBcIlNQSSBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcIlxuLVx0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IFNQSVxuK1x0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IFNQSSBcdTAwMjZcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiBcdHNlbGVjdCBSRUdNQVBfU1BJXG4gXHRzZWxlY3QgWkwzMDczWFxuIFx0aGVscFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uY1xuaW5kZXggNGVjMmNmNTNkYWQ0NjguLjUzMDMyZTc4MmZkNGFmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNcbkBAIC0zLDYgKzMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZfcHJpbnRrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiBcbkBAIC0yMDIsNiArMjAzLDExIEBAIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfZmV0Y2goc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpXG4gXHRcdHpsMzA3M3hfY2hhbl9yZWZzZWxfc3RhdGVfZ2V0KGNoYW4pLFxuIFx0XHR6bDMwNzN4X2NoYW5fcmVmc2VsX3JlZl9nZXQoY2hhbikpO1xuIFxuK1x0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1NURVBfVElNRV9NQVNLLFxuK1x0XHRcdCAgICAgIFx1MDAyNmNoYW4tXHUwMDNlb3V0X3N0ZXBfdGltZV9tYXNrKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuIFx0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZGV2LVx1MDAzZW11bHRpb3BfbG9jayk7XG4gXG4gXHQvKiBSZWFkIERQTEwgY29uZmlndXJhdGlvbiBmcm9tIG1haWxib3ggKi9cbkBAIC0yMzQsNiArMjQwLDMwNyBAQCBjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICp6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsXG4gXHRyZXR1cm4gXHUwMDI2emxkZXYtXHUwMDNlY2hhbltpbmRleF07XG4gfVxuIFxuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCAtIHdhaXQgZm9yIFRvRCBzZW1hcGhvcmUgdG8gY2xlYXJcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqXG4rICogUG9sbHMgdGhlIFRvRCBjb250cm9sIHJlZ2lzdGVyIHVudGlsIHRoZSBzZW1hcGhvcmUgYml0IGlzIGNsZWFyZWQsXG4rICogaW5kaWNhdGluZyB0aGUgZGV2aWNlIGhhcyBjb21wbGV0ZWQgdGhlIHByZXZpb3VzIFRvRCBvcGVyYXRpb24uXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVCVVNZIGlmIHNlbWFwaG9yZSBub3QgY2xlYXJlZCwgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK3N0YXRpYyBpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKVxuK3tcbitcdHVuc2lnbmVkIGludCB0aW1lb3V0O1xuK1x0dTggdG9kX2N0cmw7XG4rXHRpbnQgcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfcmVhZF91OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLCBcdTAwMjZ0b2RfY3RybCk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHN3aXRjaCAoRklFTERfR0VUKFpMX0RQTExfVE9EX0NUUkxfQ01ELCB0b2RfY3RybCkpIHtcbitcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFo6XG4rXHRcdHRpbWVvdXQgPSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHRpbWVvdXQgPSBaTF9QT0xMX1RPRF9SRF9USU1FT1VUX1VTO1xuK1x0XHRicmVhaztcbitcdH1cbitcbitcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSxcbitcdFx0XHRcdCAgWkxfRFBMTF9UT0RfQ1RSTF9TRU0sIHRpbWVvdXQpO1xuK1xuK1x0cmV0dXJuIHJjID09IC1FVElNRURPVVQgPyAtRUJVU1kgOiByYztcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3RvZF9jdHJsIC0gaXNzdWUgVG9EIGNvbW1hbmRcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqIEBjbWQ6IFRvRCBjb21tYW5kIHRvIGV4ZWN1dGVcbisgKlxuKyAqIFdyaXRlcyB0aGUgc2VtYXBob3JlIGFuZCBjb21tYW5kIHRvIGRwbGxfdG9kX2N0cmwuIFRoZSBjYWxsZXIgbXVzdFxuKyAqIGVuc3VyZSB0aGUgZGV2aWNlIGlzIHJlYWR5IChzZW1hcGhvcmUgY2xlYXIpIGJlZm9yZSBjYWxsaW5nIGFuZFxuKyAqIG11c3Qgd2FpdCBmb3IgY29tcGxldGlvbiBpZiBuZWVkZWQuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK3N0YXRpYyBpbnQgemwzMDczeF9jaGFuX3RvZF9jdHJsKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCB1OCBjbWQpXG4re1xuK1x0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSxcbitcdFx0XHRcdFpMX0RQTExfVE9EX0NUUkxfU0VNIHwgY21kKTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3RvZF9yZWFkIC0gcmVhZCBUb0QgcmVnaXN0ZXJzIGFmdGVyIGlzc3VpbmcgYSBjb21tYW5kXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKiBAbmV4dF9oejogaWYgdHJ1ZSwgcmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIejsgb3RoZXJ3aXNlIHJlYWQgY3VycmVudFxuKyAqIEB0czogdGltZXNwZWMgdG8gc3RvcmUgdGhlIHJlc3VsdFxuKyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nXG4rICpcbisgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4raW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgIGJvb2wgbmV4dF9oeiwgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxuK1x0XHRcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpXG4re1xuK1x0dTMyIG5zZWM7XG4rXHR1NjQgc2VjO1xuK1x0dTggY21kO1xuK1x0aW50IHJjO1xuK1xuK1x0aWYgKG5leHRfaHopXG4rXHRcdGNtZCA9IFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaO1xuK1x0ZWxzZVxuK1x0XHRjbWQgPSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UO1xuK1xuK1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbitcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHB0cF9yZWFkX3N5c3RlbV9wcmV0cyhzdHMpO1xuK1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLCBjbWQpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXHRwdHBfcmVhZF9zeXN0ZW1fcG9zdHRzKHN0cyk7XG4rXG4rXHRyYyA9IHpsMzA3M3hfcmVhZF91NDgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9TRUMoY2gpLCBcdTAwMjZzZWMpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHQvKiBIVyBuYW5vc2Vjb25kcyBhcmUgYWx3YXlzIGluIFswLCBOU0VDX1BFUl9TRUMpIHJhbmdlICovXG4rXHRyYyA9IHpsMzA3M3hfcmVhZF91MzIoemxkZXYsIFpMX1JFR19EUExMX1RPRF9OUyhjaCksIFx1MDAyNm5zZWMpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHR0cy1cdTAwM2V0dl9zZWMgPSBzZWM7XG4rXHR0cy1cdTAwM2V0dl9uc2VjID0gbnNlYztcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlIC0gd3JpdGUgVG9EIHJlZ2lzdGVycyBhbmQgdHJpZ2dlciAxIEh6IHVwZGF0ZVxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICogQHRzOiB0aW1lIHRvIHNldFxuKyAqXG4rICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuK1x0XHRcdCAgIHN0cnVjdCB0aW1lc3BlYzY0IHRzKVxuK3tcbitcdGludCByYztcbitcbitcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfU0VDKGNoKSwgdHMudHZfc2VjKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgdHMudHZfbnNlYyk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLFxuK1x0XHRcdFx0ICAgIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaKTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3RvZF9hZGp1c3QgLSBhdG9taWMgVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIHdpdGggcm9sbG92ZXIgZ3VhcmRcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IHRvIGFwcGx5XG4rICpcbisgKiBSZWFkcyB0aGUgbmV4dC1IeiBUb0QgYW5kIGN1cnJlbnQgVG9ELCB0aGVuIGNoZWNrcyB3aGV0aGVyIGVub3VnaCB0aW1lXG4rICogcmVtYWlucyBiZWZvcmUgdGhlIG5leHQgMSBIeiByb2xsb3ZlciB0byBzYWZlbHkgY29tcGxldGUgdGhlIHdyaXRlLlxuKyAqIElmIGxlc3MgdGhhbiAyMCBtcyByZW1haW5zLCB3YWl0cyBmb3IgdGhlIHJvbGxvdmVyIGFuZCBpbmNyZW1lbnRzIHRoZVxuKyAqIG5leHQtSHogc2Vjb25kcyBieSBvbmUuIEFwcGxpZXMgQGRlbHRhIGFuZCB3cml0ZXMgdGhlIHJlc3VsdCBiYWNrLlxuKyAqXG4rICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK2ludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpXG4re1xuK1x0c3RhdGljIGNvbnN0IGxvbmcgdGhyZXNob2xkX25zID0gMjAgKiBOU0VDX1BFUl9NU0VDO1xuK1x0c3RydWN0IHRpbWVzcGVjNjQgdHNfbmV4dCwgdHNfY3VyLCBkaWZmO1xuK1x0aW50IHJjO1xuK1xuK1x0LyogUmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIeiB0aWNrICovXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRldiwgY2gsIHRydWUsIFx1MDAyNnRzX25leHQsIE5VTEwpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHQvKiBSZWFkIGN1cnJlbnQgVG9EIHRvIGRldGVybWluZSByZW1haW5pbmcgbWFyZ2luICovXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRldiwgY2gsIGZhbHNlLCBcdTAwMjZ0c19jdXIsIE5VTEwpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHQvKiBJZiB0b28gY2xvc2UgdG8gKG9yIHBhc3QpIHRoZSBuZXh0IHJvbGxvdmVyLCB3YWl0IGl0IG91dCAqL1xuK1x0ZGlmZiA9IHRpbWVzcGVjNjRfc3ViKHRzX25leHQsIHRzX2N1cik7XG4rXHRpZiAoZGlmZi50dl9zZWMgXHUwMDNjIDAgfHwgKCFkaWZmLnR2X3NlYyBcdTAwMjZcdTAwMjYgZGlmZi50dl9uc2VjIFx1MDAzYyB0aHJlc2hvbGRfbnMpKSB7XG4rXHRcdGlmICghZGlmZi50dl9zZWMgXHUwMDI2XHUwMDI2IGRpZmYudHZfbnNlYylcbitcdFx0XHRmc2xlZXAoKHVuc2lnbmVkIGxvbmcpZGlmZi50dl9uc2VjIC8gTlNFQ19QRVJfVVNFQyArIDEpO1xuK1x0XHR0c19uZXh0LnR2X3NlYysrO1xuK1x0fVxuK1xuK1x0LyogQXBwbHkgZGVsdGEgdG8gdGhlIG5leHQtSHogVG9EICovXG4rXHR0c19uZXh0ID0gdGltZXNwZWM2NF9hZGQodHNfbmV4dCwgZGVsdGEpO1xuK1x0aWYgKCF0aW1lc3BlYzY0X3ZhbGlkKFx1MDAyNnRzX25leHQpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdC8qIFdyaXRlIGFkanVzdGVkIFRvRCBiYWNrIGFuZCB3YWl0IGZvciBjb21wbGV0aW9uICovXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkZXYsIGNoLCB0c19uZXh0KTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCAtIHdyaXRlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgdG8gaGFyZHdhcmVcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqIEBvZmZzZXQ6IGZyZXF1ZW5jeSBvZmZzZXQgaW4gMl4tNDggc3RlcHNcbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4raW50IHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgb2Zmc2V0KVxuK3tcbitcdGludCByYztcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX0RGX09GRlNFVChjaCksIG9mZnNldCk7XG4rXHRpZiAoIXJjKVxuK1x0XHR6bGRldi1cdTAwM2VjaGFuW2NoXS5kZl9vZmZzZXQgPSBvZmZzZXQ7XG4rXG4rXHRyZXR1cm4gcmM7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl90aWVfd3JpdGUgLSBhZGp1c3QgRFBMTCBwaGFzZSB1c2luZyBUSUUgd3JpdGVcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqIEBkZWx0YV9uczogcGhhc2UgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcyAobXVzdCBiZSB3aXRoaW4gKy0xcylcbisgKlxuKyAqIENvbnZlcnRzIG5hbm9zZWNvbmRzIHRvIFRJRSB1bml0cyAoMC4wMSBwcykgYW5kIHdyaXRlcyBUSUUgZGF0YVxuKyAqIHRvIHRoZSBzcGVjaWZpZWQgY2hhbm5lbC5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4raW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucylcbit7XG4rXHRzNjQgdGllX2RhdGE7XG4rXHRpbnQgcmM7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkZXYtXHUwMDNldGllX2xvY2spO1xuK1xuK1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRJRSBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbitcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLFxuK1x0XHRcdFx0ICBaTF9EUExMX1RJRV9DVFJMX09QLFxuK1x0XHRcdFx0ICBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0LyogQ29udmVydCBucyB0byBUSUUgdW5pdHMgKDAuMDEgcHMgPSAxMF4tMTQgcykgKi9cbitcdHRpZV9kYXRhID0gZGVsdGFfbnMgKiAxMDAwMDBMTDtcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9EQVRBKGNoKSwgdGllX2RhdGEpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0ssIEJJVChjaCkpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsXG4rXHRcdFx0XHRaTF9EUExMX1RJRV9DVFJMX09QX1dSKTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAgLSBleGVjdXRlIG9uZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb25cbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqIEBvdXRfbWFzazogYml0bWFzayBvZiBvdXRwdXRzIHRvIHN0ZXBcbisgKiBAc3RlcF9jeWNsZXM6IHBoYXNlIHN0ZXAgaW4gc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzXG4rICogQHRvZF9zdGVwOiBhbHNvIHN0ZXAgdGhlIFRvRCBjb3VudGVyXG4rICpcbisgKiBBbGwgbWFza2VkIG91dHB1dHMgbXVzdCB1c2Ugc3ludGhlc2l6ZXJzIG9mIHRoZSBzYW1lIGZyZXF1ZW5jeSBzaW5jZVxuKyAqIHRoZSBzdGVwIHZhbHVlIGlzIGluIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcy5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4raW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuK1x0XHRcdCAgICB1MTYgb3V0X21hc2ssIHMzMiBzdGVwX2N5Y2xlcyxcbitcdFx0XHQgICAgYm9vbCB0b2Rfc3RlcClcbit7XG4rXHR1OCBjdHJsO1xuK1x0aW50IHJjO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZGV2LVx1MDAzZXBoYXNlX3N0ZXBfbG9jayk7XG4rXG4rXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgcGhhc2Ugc3RlcCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbitcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLFxuK1x0XHRcdFx0ICBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QLFxuK1x0XHRcdFx0ICBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VUyk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBLFxuK1x0XHRcdCAgICAgICBzdGVwX2N5Y2xlcyk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLLCBvdXRfbWFzayk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUiwgMSk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdGN0cmwgPSBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfRFBMTCwgY2gpIHxcbitcdCAgICAgICBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AsXG4rXHRcdFx0ICBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1dSSVRFKTtcbitcdGlmICh0b2Rfc3RlcClcbitcdFx0Y3RybCB8PSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX1RPRF9TVEVQO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLCBjdHJsKTtcbit9XG4rXG4gLyoqXG4gICogemwzMDczeF9jaGFuX3N0YXRlX3NldCAtIGNvbW1pdCBEUExMIGNoYW5uZWwgc3RhdGUgY2hhbmdlcyB0byBoYXJkd2FyZVxuICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhcbmluZGV4IGRjOWM2ZDk1YmRlZTc1Li45ZGM1YTNmMTk5MWYxMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXG5AQCAtNSwxMCArNSwxMiBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdGRkZWYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWU2NC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwicmVncy5oXCJcbiBcbitzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXA7XG4gc3RydWN0IHpsMzA3M3hfZGV2O1xuIFxuIC8qKlxuQEAgLTE2LDYgKzE4LDcgQEAgc3RydWN0IHpsMzA3M3hfZGV2O1xuICAqIEBjdHJsOiBEUExMIGNvbnRyb2wgcmVnaXN0ZXIgdmFsdWVcbiAgKiBAbW9kZV9yZWZzZWw6IG1vZGUgYW5kIHJlZmVyZW5jZSBzZWxlY3Rpb24gcmVnaXN0ZXIgdmFsdWVcbiAgKiBAcmVmX3ByaW86IHJlZmVyZW5jZSBwcmlvcml0eSByZWdpc3RlcnMgKDQgYml0cyBwZXIgcmVmLCBQL04gcGFja2VkKVxuKyAqIEBvdXRfc3RlcF90aW1lX21hc2s6IG91dHB1dCBzdGVwLXRpbWUgbWFza1xuICAqIEBtb25fc3RhdHVzOiBtb25pdG9yIHN0YXR1cyByZWdpc3RlciB2YWx1ZVxuICAqIEByZWZzZWxfc3RhdHVzOiByZWZlcmVuY2Ugc2VsZWN0aW9uIHN0YXR1cyByZWdpc3RlciB2YWx1ZVxuICAqIEBkZl9vZmZzZXQ6IGZyZXF1ZW5jeSBvZmZzZXQgdnMgdHJhY2tlZCByZWZlcmVuY2UgaW4gMl4tNDggc3RlcHNcbkBAIC0yNiw2ICsyOSw5IEBAIHN0cnVjdCB6bDMwNzN4X2NoYW4ge1xuIFx0XHR1OFx0bW9kZV9yZWZzZWw7XG4gXHRcdHU4XHRyZWZfcHJpb1taTDMwNzNYX05VTV9SRUZTIC8gMl07XG4gXHQpO1xuK1x0c3RydWN0X2dyb3VwKGludiwgLyogSW52YXJpYW50cyAqL1xuK1x0XHR1MTZcdG91dF9zdGVwX3RpbWVfbWFzaztcbitcdCk7XG4gXHRzdHJ1Y3RfZ3JvdXAoc3RhdCxcbiBcdFx0dThcdG1vbl9zdGF0dXM7XG4gXHRcdHU4XHRyZWZzZWxfc3RhdHVzO1xuQEAgLTQyLDYgKzQ4LDIwIEBAIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4LFxuIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfdXBkYXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTtcbiBpbnQgemwzMDczeF9jaGFuX25jb19tb2RlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7XG4gXG4raW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgIGJvb2wgbmV4dF9oeiwgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxuK1x0XHRcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpO1xuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuK1x0XHRcdCAgIHN0cnVjdCB0aW1lc3BlYzY0IHRzKTtcbitpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKTtcbitpbnQgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLCBib29sIHRvZF9zdGVwKTtcbitcbitpbnQgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBvZmZzZXQpO1xuK1xuK2ludCB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgZGVsdGFfbnMpO1xuK1xuIC8qKlxuICAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfZ2V0IC0gZ2V0IGNhY2hlZCBkZl9vZmZzZXQgdnMgdHJhY2tlZCByZWZlcmVuY2VcbiAgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG5AQCAtMjAwLDYgKzIyMCwyMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgemwzMDczeF9jaGFuX21vZGVfaXNfcmVmbG9jayhjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxuIFx0cmV0dXJuIHpsMzA3M3hfY2hhbl9tb2RlX2dldChjaGFuKSA9PSBaTF9EUExMX01PREVfUkVGU0VMX01PREVfUkVGTE9DSztcbiB9XG4gXG4rLyoqXG4rICogemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllIC0gY2hlY2sgaWYgY2hhbm5lbCBtb2RlIHN1cHBvcnRzIFRJRSB3cml0ZVxuKyAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbisgKlxuKyAqIFRJRSB3cml0ZSBpcyBzdXBwb3J0ZWQgaW4gQVVUTyBhbmQgUkVGTE9DSyBtb2RlcyByZWdhcmRsZXNzIG9mIGxvY2sgc3RhdGUuXG4rICpcbisgKiBSZXR1cm46IHRydWUgaWYgVElFIHdyaXRlIGlzIHN1cHBvcnRlZCwgZmFsc2Ugb3RoZXJ3aXNlXG4rICovXG4rc3RhdGljIGlubGluZSBib29sXG4remwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXG4re1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl9tb2RlX2lzX2F1dG8oY2hhbikgfHxcbitcdFx0emwzMDczeF9jaGFuX21vZGVfaXNfcmVmbG9jayhjaGFuKTtcbit9XG4rXG4gLyoqXG4gICogemwzMDczeF9jaGFuX2lzX2hvX3JlYWR5IC0gY2hlY2sgaWYgaG9sZG92ZXIgaXMgcmVhZHlcbiAgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG5AQCAtMjMzLDQgKzI2OCwxNyBAQCBzdGF0aWMgaW5saW5lIHU4IHpsMzA3M3hfY2hhbl9yZWZzZWxfcmVmX2dldChjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxuIFx0cmV0dXJuIEZJRUxEX0dFVChaTF9EUExMX1JFRlNFTF9TVEFUVVNfUkVGU0VMLCBjaGFuLVx1MDAzZXJlZnNlbF9zdGF0dXMpO1xuIH1cbiBcbisvKipcbisgKiB6bDMwNzN4X2NoYW5faXNfb3V0X3N0ZXBwZWQgLSBjaGVjayBpZiBvdXRwdXQgaXMgaW4gc3RlcC10aW1lIG1hc2tcbisgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG4rICogQG91dDogb3V0cHV0IGluZGV4XG4rICpcbisgKiBSZXR1cm46IHRydWUgaWYgb3V0cHV0IGlzIGFmZmVjdGVkIGJ5IHN0ZXAtdGltZSBvcGVyYXRpb25zXG4rICovXG4rc3RhdGljIGlubGluZSBib29sXG4remwzMDczeF9jaGFuX2lzX291dF9zdGVwcGVkKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4sIHU4IG91dClcbit7XG4rXHRyZXR1cm4gISEoY2hhbi1cdTAwM2VvdXRfc3RlcF90aW1lX21hc2sgXHUwMDI2IEJJVChvdXQpKTtcbit9XG4rXG4gI2VuZGlmIC8qIF9aTDMwNzNYX0NIQU5fSCAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1xuaW5kZXggN2Y1YWZhYWFlNjM0MmYuLmIyZjlmYzk3ZmQxYjY4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcbkBAIC0xMDMzLDYgKzEwMzMsMTQgQEAgaW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXG4gXHQgKiBhbmQvb3IgcG9sbHMgYXJlIHJlcXVpcmVkIHRvIGJlIGRvbmUgYXRvbWljYWxseS5cbiBcdCAqL1xuIFx0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2VtdWx0aW9wX2xvY2spO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIHJjLFxuK1x0XHRcdFx0ICAgICBcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxuXCIpO1xuK1x0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2VwaGFzZV9zdGVwX2xvY2spO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIHJjLFxuK1x0XHRcdFx0ICAgICBcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxuXCIpO1xuK1x0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2V0aWVfbG9jayk7XG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgcmMsXG4gXHRcdFx0XHQgICAgIFwiRmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXG5cIik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oXG5pbmRleCA3OGRjMjA4ZjNlZWEyYS4uMmRjODM2ZDBjOGY2YjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaFxuQEAgLTI2LDYgKzI2LDEwIEBAIHN0cnVjdCB6bDMwNzN4X2RwbGw7XG4gI2RlZmluZSBaTF9QT0xMX0hXUkVHX1RJTUVPVVRfVVNcdCg1MCAqIFVTRUNfUEVSX01TRUMpXG4gI2RlZmluZSBaTF9QT0xMX01CX1RJTUVPVVRfVVNcdFx0KDMwICogVVNFQ19QRVJfTVNFQylcbiAjZGVmaW5lIFpMX1BPTExfUEhBU0VfRVJSX1RJTUVPVVRfVVNcdCg1MCAqIFVTRUNfUEVSX01TRUMpXG4rI2RlZmluZSBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VU1x0KDMwMDAgKiBVU0VDX1BFUl9NU0VDKVxuKyNkZWZpbmUgWkxfUE9MTF9USUVfV1JfVElNRU9VVF9VU1x0KDEwMDAgKiBVU0VDX1BFUl9NU0VDKVxuKyNkZWZpbmUgWkxfUE9MTF9UT0RfUkRfVElNRU9VVF9VU1x0KDMwICogVVNFQ19QRVJfTVNFQylcbisjZGVmaW5lIFpMX1BPTExfVE9EX1dSX1RJTUVPVVRfVVNcdCgxMDAwICogVVNFQ19QRVJfTVNFQylcbiBcbiBlbnVtIHpsMzA3M3hfZmxhZ3Mge1xuIFx0WkwzMDczWF9GTEFHX1JFRl9QSEFTRV9DT01QXzMyX0JJVCxcbkBAIC01NSw2ICs1OSw4IEBAIHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mbyB7XG4gICogQHJlZ21hcDogcmVnbWFwIHRvIGFjY2VzcyBkZXZpY2UgcmVnaXN0ZXJzXG4gICogQGluZm86IGRldGVjdGVkIGNoaXAgaW5mb1xuICAqIEBtdWx0aW9wX2xvY2s6IHRvIHNlcmlhbGl6ZSBtdWx0aXBsZSByZWdpc3RlciBvcGVyYXRpb25zXG4rICogQHRpZV9sb2NrOiB0byBzZXJpYWxpemUgVElFIHdyaXRlIG9wZXJhdGlvbnNcbisgKiBAcGhhc2Vfc3RlcF9sb2NrOiB0byBzZXJpYWxpemUgb3V0cHV0IHBoYXNlIHN0ZXAgb3BlcmF0aW9uc1xuICAqIEByZWY6IGFycmF5IG9mIGlucHV0IHJlZmVyZW5jZXMnIGludmFyaWFudHNcbiAgKiBAb3V0OiBhcnJheSBvZiBvdXRzJyBpbnZhcmlhbnRzXG4gICogQHN5bnRoOiBhcnJheSBvZiBzeW50aHMnIGludmFyaWFudHNcbkBAIC03MSw2ICs3Nyw4IEBAIHN0cnVjdCB6bDMwNzN4X2RldiB7XG4gXHRzdHJ1Y3QgcmVnbWFwXHRcdFx0KnJlZ21hcDtcbiBcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mb1x0KmluZm87XG4gXHRzdHJ1Y3QgbXV0ZXhcdFx0XHRtdWx0aW9wX2xvY2s7XG4rXHRzdHJ1Y3QgbXV0ZXhcdFx0XHR0aWVfbG9jaztcbitcdHN0cnVjdCBtdXRleFx0XHRcdHBoYXNlX3N0ZXBfbG9jaztcbiBcbiBcdC8qIEludmFyaWFudHMgKi9cbiBcdHN0cnVjdCB6bDMwNzN4X3JlZlx0cmVmW1pMMzA3M1hfTlVNX1JFRlNdO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuY1xuaW5kZXggZDkxZjUyYjU4ZWFlMzQuLjc0MDAxZTZkNGEzMmY1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcbkBAIC0yLDYgKzIsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9idWcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbnRhaW5lcl9vZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2X3ByaW50ay5oXHUwMDNlXG5AQCAtMTQsNiArMTUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwcmludGYuaFx1MDAzZVxuIFxuQEAgLTQyLDYgKzQ0LDcgQEBcbiAgKiBAcGhhc2Vfb2Zmc2V0OiBsYXN0IHNhdmVkIHBpbiBwaGFzZSBvZmZzZXRcbiAgKiBAZnJlcV9vZmZzZXQ6IGxhc3Qgc2F2ZWQgZnJhY3Rpb25hbCBmcmVxdWVuY3kgb2Zmc2V0XG4gICogQG1lYXN1cmVkX2ZyZXE6IGxhc3Qgc2F2ZWQgbWVhc3VyZWQgZnJlcXVlbmN5XG4rICogQHBlcm91dF9pZHg6IFBUUCBwZXJvdXQgY2hhbm5lbCBpbmRleCwgb3IgLTEgaWYgbm90IHBlcm91dC1lbGlnaWJsZVxuICAqL1xuIHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluIHtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdGxpc3Q7XG5AQCAtNTksNiArNjIsNyBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiB7XG4gXHRzNjRcdFx0XHRwaGFzZV9vZmZzZXQ7XG4gXHRzNjRcdFx0XHRmcmVxX29mZnNldDtcbiBcdHUzMlx0XHRcdG1lYXN1cmVkX2ZyZXE7XG4rXHRzOFx0XHRcdHBlcm91dF9pZHg7XG4gfTtcbiBcbiAvKlxuQEAgLTkzNiwyMSArOTQwLDE3IEBAIHpsMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3BpbixcbiB9XG4gXG4gc3RhdGljIGludFxuLXpsMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3Bpbixcbi1cdFx0XHRcdCAgICAgIHZvaWQgKnBpbl9wcml2LFxuLVx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxuLVx0XHRcdFx0ICAgICAgdm9pZCAqZHBsbF9wcml2LCB1NjQgZnJlcXVlbmN5LFxuLVx0XHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK19femwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldChzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwsXG4rXHRcdFx0XHRcdHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4sXG4rXHRcdFx0XHRcdHU2NCBmcmVxdWVuY3kpXG4ge1xuLVx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gZHBsbF9wcml2O1xuIFx0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4tXHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluID0gcGluX3ByaXY7XG4gXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9zeW50aCAqc3ludGg7XG4gXHR1MzIgbmV3X2Rpdiwgc3ludGhfZnJlcTtcbiBcdHN0cnVjdCB6bDMwNzN4X291dCBvdXQ7XG4gXHR1OCBvdXRfaWQ7XG4gXG4tXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4gXG4gXHRvdXRfaWQgPSB6bDMwNzN4X291dHB1dF9waW5fb3V0X2dldChwaW4tXHUwMDNlaWQpO1xuIFx0b3V0ID0gKnpsMzA3M3hfb3V0X3N0YXRlX2dldCh6bGRldiwgb3V0X2lkKTtcbkBAIC0xMDExLDYgKzEwMTEsMjEgQEAgemwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxuIFx0cmV0dXJuIHpsMzA3M3hfb3V0X3N0YXRlX3NldCh6bGRldiwgb3V0X2lkLCBcdTAwMjZvdXQpO1xuIH1cbiBcbitzdGF0aWMgaW50XG4remwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxuK1x0XHRcdFx0ICAgICAgdm9pZCAqcGluX3ByaXYsXG4rXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXG4rXHRcdFx0XHQgICAgICB2b2lkICpkcGxsX3ByaXYsIHU2NCBmcmVxdWVuY3ksXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4re1xuK1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gZHBsbF9wcml2O1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbitcbitcdHJldHVybiBfX3psMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoemxkcGxsLCBwaW5fcHJpdixcbitcdFx0XHRcdFx0XHQgICAgICAgZnJlcXVlbmN5KTtcbit9XG4rXG4gc3RhdGljIGludFxuIHpsMzA3M3hfZHBsbF9vdXRwdXRfcGluX3BoYXNlX2FkanVzdF9nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3BpbixcbiBcdFx0XHRcdFx0IHZvaWQgKnBpbl9wcml2LFxuQEAgLTE2MDgsNiArMTYyMyw3IEBAIHpsMzA3M3hfZHBsbF9waW5fYWxsb2Moc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLCBlbnVtIGRwbGxfcGluX2RpcmVjdGlvbiBkaXIsXG4gXHRwaW4tXHUwMDNlZHBsbCA9IHpsZHBsbDtcbiBcdHBpbi1cdTAwM2VkaXIgPSBkaXI7XG4gXHRwaW4tXHUwMDNlaWQgPSBpZDtcbitcdHBpbi1cdTAwM2VwZXJvdXRfaWR4ID0gLTE7XG4gXG4gXHRyZXR1cm4gcGluO1xuIH1cbkBAIC0xNjI2LDYgKzE2NDIsNDQgQEAgemwzMDczeF9kcGxsX3Bpbl9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4pXG4gXHRrZnJlZShwaW4pO1xuIH1cbiBcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfcGluX2lzX3Blcm91dCAtIGNoZWNrIGlmIG91dHB1dCBwaW4gaXMgcGVyb3V0LWVsaWdpYmxlXG4rICogQHBpbjogRFBMTCBwaW4gdG8gY2hlY2tcbisgKiBAcHJvcHM6IHBpbiBwcm9wZXJ0aWVzIChhbHJlYWR5IGZldGNoZWQgYnkgY2FsbGVyKVxuKyAqXG4rICogQW4gb3V0cHV0IHBpbiBpcyBlbGlnaWJsZSBmb3IgUFRQIHBlcmlvZGljIG91dHB1dCBpZiBpdCBpcyBzaW5nbGUtZW5kZWRcbisgKiAobm90IGRpZmZlcmVudGlhbCkgYW5kIHN1cHBvcnRzIDEgSHogaW4gaXRzIGZyZXF1ZW5jeSBsaXN0LlxuKyAqXG4rICogUmV0dXJuOiB0cnVlIGlmIGVsaWdpYmxlLCBmYWxzZSBvdGhlcndpc2VcbisgKi9cbitzdGF0aWMgYm9vbFxuK3psMzA3M3hfZHBsbF9waW5faXNfcGVyb3V0KHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4sXG4rXHRcdFx0ICAgY29uc3Qgc3RydWN0IHpsMzA3M3hfcGluX3Byb3BzICpwcm9wcylcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBwaW4tXHUwMDNlZHBsbDtcbitcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XG4rXHR1OCBvdXRfaWQ7XG4rXHRpbnQgaTtcbitcbitcdGlmICh6bDMwNzN4X2RwbGxfaXNfaW5wdXRfcGluKHBpbikpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdG91dF9pZCA9IHpsMzA3M3hfb3V0cHV0X3Bpbl9vdXRfZ2V0KHBpbi1cdTAwM2VpZCk7XG4rXHRpZiAoemwzMDczeF9kZXZfb3V0X2lzX2RpZmYoemxkcGxsLVx1MDAzZWRldiwgb3V0X2lkKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkcGxsLVx1MDAzZWRldiwgemxkcGxsLVx1MDAzZWlkKTtcbitcdGlmICghemwzMDczeF9jaGFuX2lzX291dF9zdGVwcGVkKGNoYW4sIG91dF9pZCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHByb3BzLVx1MDAzZWRwbGxfcHJvcHMuZnJlcV9zdXBwb3J0ZWRfbnVtOyBpKyspIHtcbitcdFx0aWYgKHByb3BzLVx1MDAzZWRwbGxfcHJvcHMuZnJlcV9zdXBwb3J0ZWRbaV0ubWluID09IDEpXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIC8qKlxuICAqIHpsMzA3M3hfZHBsbF9waW5fcmVnaXN0ZXIgLSByZWdpc3RlciBEUExMIHBpblxuICAqIEBwaW46IHBvaW50ZXIgdG8gRFBMTCBwaW5cbkBAIC0xNjY3LDYgKzE3MjEsOCBAQCB6bDMwNzN4X2RwbGxfcGluX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4sIHUzMiBpbmRleClcbiBcdFx0aWYgKHBpbi1cdTAwM2VwcmlvID09IFpMX0RQTExfUkVGX1BSSU9fTk9ORSlcbiBcdFx0XHQvKiBDbGFtcCBwcmlvIHRvIG1heCB2YWx1ZSAqL1xuIFx0XHRcdHBpbi1cdTAwM2VwcmlvID0gWkxfRFBMTF9SRUZfUFJJT19NQVg7XG4rXHR9IGVsc2UgaWYgKHpsMzA3M3hfZHBsbF9waW5faXNfcGVyb3V0KHBpbiwgcHJvcHMpKSB7XG4rXHRcdHBpbi1cdTAwM2VwZXJvdXRfaWR4ID0gemxkcGxsLVx1MDAzZXB0cF9pbmZvLm5fcGVyX291dCsrO1xuIFx0fVxuIFxuIFx0LyogQ3JlYXRlIG9yIGdldCBleGlzdGluZyBEUExMIHBpbiAqL1xuQEAgLTE4OTcsNiArMTk1Myw4IEBAIHpsMzA3M3hfZHBsbF9waW5zX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiBcdHU4IGlkLCBpbmRleDtcbiBcdGludCByYztcbiBcbitcdHpsZHBsbC1cdTAwM2VwdHBfaW5mby5uX3Blcl9vdXQgPSAwO1xuK1xuIFx0LyogUHJvY2VzcyBpbnB1dCBwaW5zICovXG4gXHRmb3IgKGluZGV4ID0gMDsgaW5kZXggXHUwMDNjIFpMMzA3M1hfTlVNX1BJTlM7IGluZGV4KyspIHtcbiBcdFx0LyogRmlyc3QgaW5wdXQgcGlucyBhbmQgdGhlbiBvdXRwdXQgcGlucyAqL1xuQEAgLTIyODAsNDUgKzIzMzgsNDQ3IEBAIHpsMzA3M3hfZHBsbF9pbml0X2ZpbmVfcGhhc2VfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXG4gXHRyZXR1cm4gcmM7XG4gfVxuIFxuKy8qIE1heGltdW0gZnJlcXVlbmN5IGFkanVzdG1lbnQ6ICstMSUgb2Ygbm9taW5hbCBpbiBwcGIgKi9cbisjZGVmaW5lIFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESlx0MTAwMDAwMDBcbitcbiAvKipcbi0gKiB6bDMwNzN4X2RwbGxfYWxsb2MgLSBhbGxvY2F0ZSBEUExMIGRldmljZVxuLSAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuLSAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlclxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCAtIHJlYWQgY3VycmVudCB0aW1lIGZyb20gVG9EIGNvdW50ZXJzXG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4rICogQHRzOiB0aW1lc3BlYyB0byBzdG9yZSBjdXJyZW50IHRpbWVcbisgKiBAc3RzOiBvcHRpb25hbCBzeXN0ZW0gdGltZXN0YW1wIHBhaXIgZm9yIGNyb3NzLXRpbWVzdGFtcGluZ1xuICAqXG4tICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cylcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRwbGwtXHUwMDNlZGV2LCB6bGRwbGwtXHUwMDNlaWQsIGZhbHNlLCB0cywgc3RzKTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQgLSBzZXQgVG9EIGNvdW50ZXJzIHRvIGdpdmVuIHRpbWVcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbisgKiBAdHM6IHRpbWVzcGVjIHdpdGggdGltZSB0byBzZXRcbiAgKlxuLSAqIFJldHVybjogcG9pbnRlciB0byBEUExMIGRldmljZSBvbiBzdWNjZXNzLCBlcnJvciBwb2ludGVyIG9uIGVycm9yXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiAgKi9cbi1zdHJ1Y3QgemwzMDczeF9kcGxsICpcbi16bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXG4rXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpXG4ge1xuLVx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsO1xuK1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXG4rXHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuIFxuLVx0emxkcGxsID0ga3phbGxvY19vYmooKnpsZHBsbCk7XG4tXHRpZiAoIXpsZHBsbClcbi1cdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuIFxuLVx0emxkcGxsLVx1MDAzZWRldiA9IHpsZGV2O1xuLVx0emxkcGxsLVx1MDAzZWlkID0gY2g7XG4tXHRtdXRleF9pbml0KFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbi1cdElOSVRfTElTVF9IRUFEKFx1MDAyNnpsZHBsbC1cdTAwM2VwaW5zKTtcbitcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCwgKnRzKTtcbit9XG4gXG4tXHRyZXR1cm4gemxkcGxsO1xuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwIC0gYWRqdXN0IHN1Yi1zZWNvbmQgdGltZSB2aWEgcGhhc2Ugc3RlcFxuKyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbFxuKyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzIChtdXN0IGJlIHdpdGhpbiAoLU5TRUNfUEVSX1NFQyxcbisgKiAgICAgICAgIE5TRUNfUEVSX1NFQykpXG4rICpcbisgKiBVc2VzIHRoZSBvdXRwdXQgcGhhc2Ugc3RlcCBtZWNoYW5pc20gd2l0aCB0b2Rfc3RlcD0xIHRvIGFkanVzdCBib3RoXG4rICogdGhlIG91dHB1dCBjbG9jayBwaGFzZSBhbmQgdGhlIFRvRCBjb3VudGVyIHNpbXVsdGFuZW91c2x5LiBUaGlzIGtlZXBzXG4rICogb3V0cHV0cyBhbmQgVG9EIGNvaGVyZW50LiBPbmx5IHZhbGlkIGluIE5DTyBtb2RlLlxuKyAqXG4rICogT3V0cHV0cyBhcmUgZ3JvdXBlZCBieSBzeW50aGVzaXplciBzaW5jZSB0aGUgcGhhc2Ugc3RlcCB2YWx1ZSBpcyBpblxuKyAqIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcy4gVGhlIGZpcnN0IHN5bnRoIGdyb3VwIHdpdGggZW5hYmxlZCBvdXRwdXRzXG4rICogdXNlcyB0b2Rfc3RlcCB0byBhZGp1c3QgYm90aCBvdXRwdXRzIGFuZCB0aGUgVG9EIGNvdW50ZXIuIFJlbWFpbmluZ1xuKyAqIGdyb3VwcyBzdGVwIG91dHB1dHMgb25seS4gSWYgbm8gc3ludGggaGFzIGVuYWJsZWQgb3V0cHV0cywgdGhlIFRvRFxuKyAqIGNvdW50ZXIgaXMgc3RlcHBlZCBhbG9uZSB1c2luZyBhbiBlbXB0eSBvdXRwdXQgbWFzayAodGhlIEZXIHVzZXMgdGhlXG4rICogbG93ZXN0LUlEIHN5bnRoJ3MgcGVyaW9kIGZvciB0aGUgY29udmVyc2lvbikuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVPUE5PVFNVUFAgaWYgbm8gc3ludGhzIGF2YWlsYWJsZSwgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLFxuK1x0XHRcdFx0XHQgICAgICAgczY0IGRlbHRhKVxuK3tcbitcdHUxNiBzeW50aF9tYXNrW1pMMzA3M1hfTlVNX1NZTlRIU10gPSB7fTtcbitcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuK1x0Y29uc3Qgc3RydWN0IHpsMzA3M3hfc3ludGggKnN5bnRoO1xuK1x0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjtcbitcdHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW47XG4rXHR1MzIgZmlyc3Rfc3ludGhfZnJlcSA9IDA7XG4rXHRib29sIHRvZF9zdGVwcGVkID0gZmFsc2U7XG4rXHRzMzIgc3RlcF9jeWNsZXM7XG4rXHR1MzIgc3ludGhfZnJlcTtcbitcdGludCByYztcbitcdHU4IGk7XG4rXG4rXHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLVx1MDAzZWlkKTtcbitcbitcdC8qIEJ1aWxkIHBlci1zeW50aCBvdXRwdXQgbWFza3MgZnJvbSByZWdpc3RlcmVkIG91dHB1dCBwaW5zICovXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBpbiwgXHUwMDI2emxkcGxsLVx1MDAzZXBpbnMsIGxpc3QpIHtcbitcdFx0dTggb3V0X2lkLCBzeW50aF9pZDtcbitcbitcdFx0aWYgKHpsMzA3M3hfZHBsbF9pc19pbnB1dF9waW4ocGluKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0b3V0X2lkID0gemwzMDczeF9vdXRwdXRfcGluX291dF9nZXQocGluLVx1MDAzZWlkKTtcbitcbitcdFx0aWYgKCF6bDMwNzN4X2NoYW5faXNfb3V0X3N0ZXBwZWQoY2hhbiwgb3V0X2lkKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0c3ludGhfaWQgPSB6bDMwNzN4X2Rldl9vdXRfc3ludGhfZ2V0KHpsZGV2LCBvdXRfaWQpO1xuK1x0XHRpZiAoc3ludGhfaWQgXHUwMDNlPSBaTDMwNzNYX05VTV9TWU5USFMpIHtcbitcdFx0XHRkZXZfd2Fybih6bGRldi1cdTAwM2VkZXYsIFwiVW5leHBlY3RlZCBzeW50aCBpZCBmb3IgT1VUJXVcXG5cIixcbitcdFx0XHRcdCBvdXRfaWQpO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXHRcdHN5bnRoX21hc2tbc3ludGhfaWRdIHw9IEJJVChvdXRfaWQpO1xuK1x0fVxuK1xuK1x0LyogUHJvY2VzcyBlYWNoIHN5bnRoIGdyb3VwICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBaTDMwNzNYX05VTV9TWU5USFM7IGkrKykge1xuK1x0XHRzeW50aCA9IHpsMzA3M3hfc3ludGhfc3RhdGVfZ2V0KHpsZGV2LCBpKTtcbitcdFx0aWYgKCF6bDMwNzN4X3N5bnRoX2lzX2VuYWJsZWQoc3ludGgpIHx8XG4rXHRcdCAgICB6bDMwNzN4X3N5bnRoX2RwbGxfZ2V0KHN5bnRoKSAhPSB6bGRwbGwtXHUwMDNlaWQpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHN5bnRoX2ZyZXEgPSB6bDMwNzN4X3N5bnRoX2ZyZXFfZ2V0KHN5bnRoKTtcbitcbitcdFx0LyogUmVtZW1iZXIgbG93ZXN0LUlEIHN5bnRoIGZyZXEgZm9yIFRvRC1vbmx5IGZhbGxiYWNrICovXG4rXHRcdGlmICghZmlyc3Rfc3ludGhfZnJlcSlcbitcdFx0XHRmaXJzdF9zeW50aF9mcmVxID0gc3ludGhfZnJlcTtcbitcbitcdFx0aWYgKCFzeW50aF9tYXNrW2ldKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHQvKiBTYWZlIGZvciBzMzI6IG1heCBzeW50aCBmcmVxIGlzIDc1MCBNSHogKi9cbitcdFx0c3RlcF9jeWNsZXMgPSBkaXZfczY0KGRlbHRhICogc3ludGhfZnJlcSwgTlNFQ19QRVJfU0VDKTtcbitcbitcdFx0cmMgPSB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLFxuK1x0XHRcdFx0XHQgICAgIHN5bnRoX21hc2tbaV0sIHN0ZXBfY3ljbGVzLFxuK1x0XHRcdFx0XHQgICAgICF0b2Rfc3RlcHBlZCk7XG4rXHRcdGlmIChyYykge1xuK1x0XHRcdGlmICh0b2Rfc3RlcHBlZCkge1xuK1x0XHRcdFx0ZGV2X3dhcm4oemxkZXYtXHUwMDNlZGV2LFxuK1x0XHRcdFx0XHQgXCJQYXJ0aWFsIHBoYXNlIHN0ZXAgZmFpbHVyZVxcblwiKTtcbitcdFx0XHRcdHJldHVybiAwO1xuK1x0XHRcdH1cbitcdFx0XHRyZXR1cm4gcmM7XG4rXHRcdH1cbitcdFx0dG9kX3N0ZXBwZWQgPSB0cnVlO1xuK1x0fVxuK1xuK1x0aWYgKCFmaXJzdF9zeW50aF9mcmVxKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHQvKiBObyBlbmFibGVkIG91dHB1dHMgZm91bmQ7IHN0ZXAgVG9EIGNvdW50ZXIgb25seSB1c2luZyB0aGVcbitcdCAqIGxvd2VzdC1JRCBzeW50aCdzIHBlcmlvZCAoZW1wdHkgb3V0cHV0IG1hc2spLlxuK1x0ICovXG4rXHRpZiAoIXRvZF9zdGVwcGVkKSB7XG4rXHRcdHN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIGZpcnN0X3N5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7XG4rXHRcdHJldHVybiB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCAwLFxuK1x0XHRcdFx0XHQgICAgICAgc3RlcF9jeWNsZXMsIHRydWUpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIC8qKlxuLSAqIHpsMzA3M3hfZHBsbF9mcmVlIC0gZnJlZSBEUExMIGRldmljZVxuLSAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZVxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSAtIGFkanVzdCBQVFAgY2xvY2sgdGltZVxuKyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xuKyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzXG4gICpcbi0gKiBEZWFsbG9jYXRlcyBnaXZlbiBEUExMIGRldmljZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBieSBAemwzMDczeF9kcGxsX2FsbG9jLlxuKyAqIEluIE5DTyBtb2RlLCBsYXJnZSBkZWx0YXMgKFx1MDAzZT0gMSBzZWNvbmQpIGFyZSBzcGxpdCBpbnRvIGEgVG9EXG4rICogcmVhZC1tb2RpZnktd3JpdGUgZm9yIHRoZSBzZWNvbmRzIHBhcnQgYW5kIGFuIG91dHB1dCBwaGFzZSBzdGVwIGZvclxuKyAqIHRoZSBzdWItc2Vjb25kIHJlbWFpbmRlci4gU3ViLXNlY29uZCBkZWx0YXMgdXNlIHBoYXNlIHN0ZXAgZGlyZWN0bHksXG4rICogZmFsbGluZyBiYWNrIHRvIFRvRCByZWFkLW1vZGlmeS13cml0ZSBpZiBwaGFzZSBzdGVwIGlzIHVuYXZhaWxhYmxlLlxuKyAqIEluIEFVVE8vUkVGTE9DSyBtb2RlcywgbGFyZ2UgZGVsdGFzIGFyZSBzcGxpdCBpbnRvIFRvRFxuKyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciBzZWNvbmRzIGFuZCBUSUUgd3JpdGUgZm9yIHRoZSBzdWItc2Vjb25kXG4rICogcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgVElFIHdyaXRlIGRpcmVjdGx5LlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiAgKi9cbi12b2lkXG4temwzMDczeF9kcGxsX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczY0IGRlbHRhKVxuIHtcbi1cdFdBUk4oemxkcGxsLVx1MDAzZWRwbGxfZGV2LCBcIkRQTEwgZGV2aWNlIGlzIHN0aWxsIHJlZ2lzdGVyZWRcXG5cIik7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbitcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XG4rXHRib29sIHNlY19hZGp1c3RlZCA9IGZhbHNlO1xuK1x0c3RydWN0IHRpbWVzcGVjNjQgdHM7XG4rXHRpbnQgcmM7XG4gXG4tXHRtdXRleF9kZXN0cm95KFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbi1cdGtmcmVlKHpsZHBsbCk7XG4rXHRpZiAoIWRlbHRhKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXG4rXHQvKiBNb2RlcyB3aXRob3V0IHBoYXNlIHN0ZXAgb3IgVElFIHVzZSBwbGFpbiBUb0QgYWRqdXN0ICovXG4rXHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLVx1MDAzZWlkKTtcbitcdGlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pIFx1MDAyNlx1MDAyNlxuK1x0ICAgICF6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY2hhbikpXG4rXHRcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLFxuK1x0XHRcdFx0XHQgICAgICAgbnNfdG9fdGltZXNwZWM2NChkZWx0YSkpO1xuK1xuK1x0LyogU3BsaXQgb2ZmIHNlY29uZHMgdmlhIFRvRCByZWFkLW1vZGlmeS13cml0ZSBzbyB0aGUgc3ViLXNlY29uZFxuK1x0ICogcmVtYWluZGVyIGNhbiBiZSBhcHBsaWVkIHRocm91Z2ggdGhlIG91dHB1dC1jb2hlcmVudCBtZWNoYW5pc21cbitcdCAqIChwaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSkuXG4rXHQgKi9cbitcdGlmIChhYnMoZGVsdGEpIFx1MDAzZT0gTlNFQ19QRVJfU0VDKSB7XG4rXHRcdHMzMiByZW1haW5kZXI7XG4rXG4rXHRcdHRzLnR2X3NlYyA9IGRpdl9zNjRfcmVtKGRlbHRhLCBOU0VDX1BFUl9TRUMsIFx1MDAyNnJlbWFpbmRlcik7XG4rXHRcdHRzLnR2X25zZWMgPSAwO1xuK1x0XHRkZWx0YSA9IHJlbWFpbmRlcjtcbitcbitcdFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCB0cyk7XG4rXHRcdGlmIChyYylcbitcdFx0XHRyZXR1cm4gcmM7XG4rXG4rXHRcdHNlY19hZGp1c3RlZCA9IHRydWU7XG4rXG4rXHRcdC8qIE5vIHN1Yi1zZWNvbmQgcmVtYWluZGVyLCBkb25lICovXG4rXHRcdGlmICghZGVsdGEpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHQvKiBBcHBseSBzdWItc2Vjb25kIGRlbHRhIHZpYSBwaGFzZSBzdGVwIChOQ08pIG9yIFRJRSB3cml0ZSAqL1xuK1x0aWYgKHpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSkge1xuK1x0XHRyYyA9IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwKHpsZHBsbCwgZGVsdGEpO1xuK1x0XHRpZiAoIXJjKVxuK1x0XHRcdHJldHVybiAwO1xuK1x0fSBlbHNlIHtcbitcdFx0cmMgPSB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsIGRlbHRhKTtcbitcdFx0aWYgKCFyYylcbitcdFx0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdC8qIFBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlIGZhaWxlZCwgZmFsbCBiYWNrIHRvIFRvRCBhZGp1c3QgKi9cbitcdHJjID0gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCxcbitcdFx0XHRcdCAgICAgbnNfdG9fdGltZXNwZWM2NChkZWx0YSkpO1xuK1xuK1x0LyogSW4gdGhlIHVubGlrZWx5IGV2ZW50IHRoYXQgYm90aCBwaGFzZSBzdGVwL1RJRSB3cml0ZSBhbmQgZmFsbGJhY2tcbitcdCAqIFRvRCBhZGp1c3QgZmFpbCBhZnRlciBzZWNvbmRzIHdlcmUgYWxyZWFkeSBjb21taXR0ZWQsIHJldHVyblxuK1x0ICogc3VjY2VzcyB0byBwcmV2ZW50IHRoZSBQVFAgc2Vydm8gZnJvbSByZXRyeWluZyB0aGUgZnVsbCBkZWx0YSBhbmRcbitcdCAqIGFwcGx5aW5nIHNlY29uZHMgYWdhaW4uIFRoZSBzdWItc2Vjb25kIHJlc2lkdWFsIHdpbGwgc2VsZi1jb3JyZWN0XG4rXHQgKiBpbiB0aGUgbmV4dCBzZXJ2byBjeWNsZS5cbitcdCAqL1xuK1x0aWYgKHJjIFx1MDAyNlx1MDAyNiBzZWNfYWRqdXN0ZWQpIHtcbitcdFx0ZGV2X3dhcm4oemxkZXYtXHUwMDNlZGV2LFxuK1x0XHRcdCBcIlN1Yi1zZWNvbmQgYWRqdXN0bWVudCBmYWlsZWQgYWZ0ZXIgc2Vjb25kcyBhcHBsaWVkXFxuXCIpO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdHJldHVybiByYztcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lIC0gYWRqdXN0IFBUUCBjbG9jayBmcmVxdWVuY3lcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbisgKiBAc2NhbGVkX3BwbTogZnJlcXVlbmN5IGFkanVzdG1lbnQgaW4gc2NhbGVkIHBwbSAocHBtICogMl4xNilcbisgKlxuKyAqIE9ubHkgc3VwcG9ydGVkIGluIE5DTyBtb2RlLiBXcml0ZXMgdGhlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgcmVnaXN0ZXIuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVPUE5PVFNVUFAgaWYgbm90IGluIE5DTyBtb2RlLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4rc3RhdGljIGludFxuK3psMzA3M3hfZHBsbF9wdHBfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGxvbmcgc2NhbGVkX3BwbSlcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xuK1x0czY0IG9mZnNldDtcbitcbitcdC8qIENvbnZlcnQgc2NhbGVkX3BwbSB0byBkZl9vZmZzZXQgaW4gMl4tNDggc3RlcHM6XG4rXHQgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDJeMzIpIC8gMTBeNlxuK1x0ICpcbitcdCAqIFNpbXBsaWZ5IHRvIGF2b2lkIG92ZXJmbG93OlxuK1x0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjI2KSAvIDVeNlxuK1x0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiA2NzEwODg2NCkgLyAxNTYyNVxuK1x0ICovXG4rXHRvZmZzZXQgPSAtZGl2X3M2NCgoczY0KXNjYWxlZF9wcG0gKiA2NzEwODg2NExMLCAxNTYyNSk7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuK1x0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkcGxsLVx1MDAzZWRldiwgemxkcGxsLVx1MDAzZWlkKTtcbitcdGlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKVxuK1x0XHRyZXR1cm4gc2NhbGVkX3BwbSA/IC1FT1BOT1RTVVBQIDogMDtcbitcdGlmIChvZmZzZXQgPT0gY2hhbi1cdTAwM2VkZl9vZmZzZXQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCwgb2Zmc2V0KTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSAtIGFkanVzdCBQVFAgY2xvY2sgcGhhc2VcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbisgKiBAZGVsdGE6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHNcbisgKlxuKyAqIE9ubHkgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMuIFVzZXMgVElFIHdyaXRlIGZvclxuKyAqIG5hbm9zZWNvbmQgcmVzb2x1dGlvbiBwaGFzZSBhZGp1c3RtZW50LlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIG1vZGUgZG9lc24ndCBzdXBwb3J0IFRJRSwgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHMzMiBkZWx0YSlcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbitcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XG4rXG4rXHRpZiAoIWRlbHRhKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXG4rXHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLVx1MDAzZWlkKTtcbitcbitcdGlmICghemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRyZXR1cm4gemwzMDczeF9jaGFuX3RpZV93cml0ZSh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCBkZWx0YSk7XG4rfVxuK1xuK3N0YXRpYyBzMzJcbit6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyBfX2Fsd2F5c191bnVzZWQpXG4re1xuK1x0LyogSFcgbGltaXRzIFRJRSB3cml0ZSB0byArLTEgc2Vjb25kLiBSZXR1cm4gdGhlIGNvbnN0YW50IEhXXG4rXHQgKiBsaW1pdCBhbmQgbGV0IGFkanBoYXNlIGhhbmRsZSBtb2RlLXNwZWNpZmljIGNoZWNrcy5cbitcdCAqL1xuK1x0cmV0dXJuIE5TRUNfUEVSX1NFQyAtIDE7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfcGVyb3V0X2ZpbmRfcGluIC0gZmluZCBwaW4gYnkgcGVyb3V0IGNoYW5uZWwgaW5kZXhcbisgKiBAemxkcGxsOiBEUExMIGNoYW5uZWxcbisgKiBAaWR4OiBwZXJvdXQgY2hhbm5lbCBpbmRleCB0byBmaW5kXG4rICpcbisgKiBSZXR1cm46IHBvaW50ZXIgdG8gdGhlIHBpbiwgb3IgTlVMTCBpZiBub3QgZm91bmRcbisgKi9cbitzdGF0aWMgc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKlxuK3psMzA3M3hfZHBsbF9wdHBfcGVyb3V0X2ZpbmRfcGluKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCwgaW50IGlkeClcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluO1xuK1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeShwaW4sIFx1MDAyNnpsZHBsbC1cdTAwM2VwaW5zLCBsaXN0KSB7XG4rXHRcdGlmIChwaW4tXHUwMDNlcGVyb3V0X2lkeCA9PSBpZHgpXG4rXHRcdFx0cmV0dXJuIHBpbjtcbitcdH1cbitcbitcdHJldHVybiBOVUxMO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfcHRwX2VuYWJsZSAtIGVuYWJsZS9kaXNhYmxlIFBUUCBjbG9jayBmdW5jdGlvbnNcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbisgKiBAcnE6IHRoZSByZXF1ZXN0ZWQgY2xvY2sgZnVuY3Rpb24gYW5kIHBhcmFtZXRlcnNcbisgKiBAb246IHRydWUgdG8gZW5hYmxlLCBmYWxzZSB0byBkaXNhYmxlXG4rICpcbisgKiBIYW5kbGVzIFBUUF9DTEtfUkVRX1BFUk9VVCByZXF1ZXN0cy4gT25seSAxUFBTIChwZXJpb2QgPSAxcykgaXMgc3VwcG9ydGVkLlxuKyAqIE9uIGVuYWJsZSwgY29uZmlndXJlcyB0aGUgb3V0cHV0IGRpdmlkZXIgZm9yIDEgSHouIE9uIGRpc2FibGUsIGRvZXMgbm90aGluZ1xuKyAqIGFzIHRoZSBzaWduYWwgaXMgbm90IGRpc2FibGVkLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfZW5hYmxlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcbitcdFx0XHRcdCAgIHN0cnVjdCBwdHBfY2xvY2tfcmVxdWVzdCAqcnEsIGludCBvbilcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluO1xuK1x0dW5zaWduZWQgaW50IGlkeDtcbitcdGludCByYztcbitcbitcdGlmIChycS1cdTAwM2V0eXBlICE9IFBUUF9DTEtfUkVRX1BFUk9VVClcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0aWR4ID0gcnEtXHUwMDNlcGVyb3V0LmluZGV4O1xuK1x0aWYgKGlkeCBcdTAwM2U9IGluZm8tXHUwMDNlbl9wZXJfb3V0KVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdC8qIFRvZ2dsaW5nIG91dHB1dCBwaW5zIGNhbiBwcm9kdWNlIHJ1bnQgcHVsc2VzLCBzbyBkaXNhYmxlXG4rXHQgKiBpcyBhIG5vLW9wLlxuK1x0ICovXG4rXHRpZiAoIW9uKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdC8qIE9ubHkgYWNjZXB0IGV4YWN0bHkgMVBQUyAocGVyaW9kLnNlYyA9PSAxLCBuc2VjID09IDApICovXG4rXHRpZiAocnEtXHUwMDNlcGVyb3V0LnBlcmlvZC5zZWMgIT0gMSB8fCBycS1cdTAwM2VwZXJvdXQucGVyaW9kLm5zZWMgIT0gMClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbitcbitcdHBpbiA9IHpsMzA3M3hfZHBsbF9wdHBfcGVyb3V0X2ZpbmRfcGluKHpsZHBsbCwgaWR4KTtcbitcdGlmICghcGluKSB7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0LyogQWxyZWFkeSBhdCAxIEh6LCBub3RoaW5nIHRvIGRvICovXG4rXHRpZiAoemwzMDczeF9kZXZfb3V0cHV0X3Bpbl9mcmVxX2dldCh6bGRwbGwtXHUwMDNlZGV2LCBwaW4tXHUwMDNlaWQpID09IDEpIHtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRyYyA9IF9femwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldCh6bGRwbGwsIHBpbiwgMSk7XG4rXG4rXHRtdXRleF91bmxvY2soXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuK1x0aWYgKCFyYylcbitcdFx0ZHBsbF9waW5fY2hhbmdlX250ZihwaW4tXHUwMDNlZHBsbF9waW4pO1xuK1xuK1x0cmV0dXJuIHJjO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHB0cF9jbG9ja19pbmZvIHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mbyA9IHtcbitcdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuK1x0Lm1heF9hZGpcdD0gWkwzMDczWF9EUExMX1BUUF9NQVhfQURKLFxuK1x0LmdldHRpbWV4NjRcdD0gemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0LFxuK1x0LnNldHRpbWU2NFx0PSB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCxcbitcdC5hZGp0aW1lXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSxcbitcdC5hZGpmaW5lXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSxcbitcdC5hZGpwaGFzZVx0PSB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlLFxuK1x0LmdldG1heHBoYXNlXHQ9IHpsMzA3M3hfZHBsbF9wdHBfZ2V0bWF4cGhhc2UsXG4rXHQuZW5hYmxlXHRcdD0gemwzMDczeF9kcGxsX3B0cF9lbmFibGUsXG4rfTtcbitcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBhIERQTEwgY2hhbm5lbFxuKyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byByZWdpc3RlciBQVFAgY2xvY2sgZm9yXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4re1xuK1x0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4rXHRzdHJ1Y3QgcHRwX2Nsb2NrICpwdHBfY2xvY2s7XG4rXG4rXHRzbnByaW50Zih6bGRwbGwtXHUwMDNlcHRwX2luZm8ubmFtZSwgc2l6ZW9mKHpsZHBsbC1cdTAwM2VwdHBfaW5mby5uYW1lKSxcbitcdFx0IFwiemwzMDczeC1kcGxsJXVcIiwgemxkcGxsLVx1MDAzZWlkKTtcbitcbitcdHB0cF9jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcihcdTAwMjZ6bGRwbGwtXHUwMDNlcHRwX2luZm8sIHpsZGV2LVx1MDAzZWRldik7XG4rXHRpZiAoSVNfRVJSKHB0cF9jbG9jaykpIHtcbitcdFx0ZGV2X2Vycih6bGRldi1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgRFBMTCV1XFxuXCIsXG4rXHRcdFx0emxkcGxsLVx1MDAzZWlkKTtcbitcdFx0cmV0dXJuIFBUUl9FUlIocHRwX2Nsb2NrKTtcbitcdH1cbitcbitcdHpsZHBsbC1cdTAwM2VwdHBfY2xvY2sgPSBwdHBfY2xvY2s7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyIC0gdW5yZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsXG4rICogQHpsZHBsbDogRFBMTCBjaGFubmVsIHRvIHVucmVnaXN0ZXIgUFRQIGNsb2NrIGZvclxuKyAqL1xuK3N0YXRpYyB2b2lkIHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4re1xuK1x0aWYgKCFJU19FUlJfT1JfTlVMTCh6bGRwbGwtXHUwMDNlcHRwX2Nsb2NrKSkge1xuK1x0XHRwdHBfY2xvY2tfdW5yZWdpc3Rlcih6bGRwbGwtXHUwMDNlcHRwX2Nsb2NrKTtcbitcdFx0emxkcGxsLVx1MDAzZXB0cF9jbG9jayA9IE5VTEw7XG4rXHR9XG4gfVxuIFxuIC8qKlxuQEAgLTI0MDMsNiArMjg2Myw0OCBAQCB6bDMwNzN4X2RwbGxfcmVmX3N5bmNfcGFpcnNfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9hbGxvYyAtIGFsbG9jYXRlIERQTEwgZGV2aWNlXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyXG4rICpcbisgKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuXG4rICpcbisgKiBSZXR1cm46IHBvaW50ZXIgdG8gRFBMTCBkZXZpY2Ugb24gc3VjY2VzcywgZXJyb3IgcG9pbnRlciBvbiBlcnJvclxuKyAqL1xuK3N0cnVjdCB6bDMwNzN4X2RwbGwgKlxuK3psMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7XG4rXG4rXHR6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTtcbitcdGlmICghemxkcGxsKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcbitcdHpsZHBsbC1cdTAwM2VkZXYgPSB6bGRldjtcbitcdHpsZHBsbC1cdTAwM2VpZCA9IGNoO1xuK1x0emxkcGxsLVx1MDAzZXB0cF9pbmZvID0gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvO1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXHRJTklUX0xJU1RfSEVBRChcdTAwMjZ6bGRwbGwtXHUwMDNlcGlucyk7XG4rXG4rXHRyZXR1cm4gemxkcGxsO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfZnJlZSAtIGZyZWUgRFBMTCBkZXZpY2VcbisgKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmVcbisgKlxuKyAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuXG4rICovXG4rdm9pZFxuK3psMzA3M3hfZHBsbF9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbit7XG4rXHRXQVJOKHpsZHBsbC1cdTAwM2VkcGxsX2RldiwgXCJEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXFxuXCIpO1xuK1xuK1x0bXV0ZXhfZGVzdHJveShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXHRrZnJlZSh6bGRwbGwpO1xuK31cbitcbiAvKipcbiAgKiB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIgLSByZWdpc3RlciBEUExMIGRldmljZSBhbmQgYWxsIGl0cyBwaW5zXG4gICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXG5AQCAtMjQzMyw2ICsyOTM1LDEzIEBAIHpsMzA3M3hfZHBsbF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4gXHRcdHJldHVybiByYztcbiBcdH1cbiBcbitcdHJjID0gemwzMDczeF9kcGxsX3B0cF9yZWdpc3Rlcih6bGRwbGwpO1xuK1x0aWYgKHJjKSB7XG4rXHRcdHpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTtcbitcdFx0emwzMDczeF9kcGxsX2RldmljZV91bnJlZ2lzdGVyKHpsZHBsbCk7XG4rXHRcdHJldHVybiByYztcbitcdH1cbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0yNDQ2LDcgKzI5NTUsNyBAQCB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIHZvaWRcbiB6bDMwNzN4X2RwbGxfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4ge1xuLVx0LyogVW5yZWdpc3RlciBhbGwgcGlucyBhbmQgZHBsbCAqL1xuK1x0emwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHpsZHBsbCk7XG4gXHR6bDMwNzN4X2RwbGxfcGluc191bnJlZ2lzdGVyKHpsZHBsbCk7XG4gXHR6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXG5pbmRleCBmYWViYzQwMmJhMWI3MC4uOWI1ZjcyYzMzODQ5Y2UgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmhcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaFxuQEAgLTUsNiArNSw4IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZHBsbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiY29yZS5oXCJcbiBcbkBAIC0yMiw2ICsyNCw4IEBAXG4gICogQHR5cGU6IERQTEwgdHlwZSAoUFBTIG9yIEVFQylcbiAgKiBAbG9ja19zdGF0dXM6IGxhc3Qgc2F2ZWQgRFBMTCBsb2NrIHN0YXR1c1xuICAqIEBwaW5zOiBsaXN0IG9mIHBpbnNcbisgKiBAcHRwX2luZm86IFBUUCBjbG9jayBpbmZvXG4rICogQHB0cF9jbG9jazogcmVnaXN0ZXJlZCBQVFAgY2xvY2sgKG9yIE5VTEwpXG4gICovXG4gc3RydWN0IHpsMzA3M3hfZHBsbCB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRcdGxpc3Q7XG5AQCAtMzYsNiArNDAsOCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsIHtcbiBcdGVudW0gZHBsbF90eXBlXHRcdFx0dHlwZTtcbiBcdGVudW0gZHBsbF9sb2NrX3N0YXR1c1x0XHRsb2NrX3N0YXR1cztcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdFx0cGlucztcbitcdHN0cnVjdCBwdHBfY2xvY2tfaW5mb1x0XHRwdHBfaW5mbztcbitcdHN0cnVjdCBwdHBfY2xvY2tcdFx0KnB0cF9jbG9jaztcbiB9O1xuIFxuIHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXG5pbmRleCBiNzBlYWQ3ZDQ0OTViMi4uNDQ3NzU3ZTk5ODQ1ZDggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaFxuQEAgLTE3OSw2ICsxNzksMjAgQEBcbiAjZGVmaW5lIFpMX0RQTExfREZfUkVBRF9DTURcdFx0XHRHRU5NQVNLKDIsIDApXG4gI2RlZmluZSBaTF9EUExMX0RGX1JFQURfQ01EX0FDQ19JXHRcdDRcbiBcbisjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9DVFJMXHRcdFx0WkxfUkVHKDUsIDB4MzAsIDEpXG4rI2RlZmluZSBaTF9EUExMX1RJRV9DVFJMX09QXHRcdFx0R0VOTUFTSygyLCAwKVxuKyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUF9XUlx0XHRcdDRcbitcbisjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0tcdFx0WkxfUkVHKDUsIDB4MzEsIDEpXG4rXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfQ1RSTChfaWR4KVx0XHRcdFx0XHRcXFxuK1x0WkxfUkVHX0lEWChfaWR4LCA1LCAweDM4LCAxLCA4LCAxKVxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9TRU1cdFx0XHRCSVQoNClcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EXHRcdFx0R0VOTUFTSygzLCAwKVxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFpcdDFcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX0NVUlJFTlRcdDhcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaXHQ5XG4rXG4gI2RlZmluZSBaTF9SRUdfRFBMTF9NRUFTX0NUUkxcdFx0XHRaTF9SRUcoNSwgMHg1MCwgMSlcbiAjZGVmaW5lIFpMX0RQTExfTUVBU19DVFJMX0VOXHRcdFx0QklUKDApXG4gI2RlZmluZSBaTF9EUExMX01FQVNfQ1RSTF9BVkdfRkFDVE9SXHRcdEdFTk1BU0soNywgNClcbkBAIC0xOTMsNiArMjA3LDkgQEBcbiBcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAqIFJlZ2lzdGVyIFBhZ2VzIDYtNywgRFBMTCBEYXRhXG4rICpcbisgKiBQZXItY2hhbm5lbCByZWdpc3RlcnMgd2l0aCBzdHJpZGUgMHgyMC4gQ2hhbm5lbHMgMC0zIHJlc2lkZSBvbiBwYWdlIDYsXG4rICogY2hhbm5lbCA0IG9uIHBhZ2UgNy5cbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiBcbiAjZGVmaW5lIFpMX1JFR19EUExMX0RGX09GRlNFVF8wMyhfaWR4KVx0XHRcdFx0XHRcXFxuQEAgLTIwMiw2ICsyMTksMjQgQEBcbiBcdCgoX2lkeCkgXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfNClcbiAjZGVmaW5lIFpMX0RQTExfREZfT0ZGU0VUX1VOS05PV05cdFM2NF9NSU5cbiBcbisjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG4rXHRaTF9SRUdfSURYKF9pZHgsIDYsIDB4MEMsIDYsIDQsIDB4MjApXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQV80XHRcdFx0WkxfUkVHKDcsIDB4MEMsIDYpXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQShfaWR4KVx0XHRcdFx0XHRcXFxuK1x0KChfaWR4KSBcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RJRV9EQVRBXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVElFX0RBVEFfNClcbitcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUNfMDMoX2lkeClcdFx0XHRcdFx0XFxcbitcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgxMiwgNiwgNCwgMHgyMClcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUNfNFx0XHRcdFpMX1JFRyg3LCAweDEyLCA2KVxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQyhfaWR4KVx0XHRcdFx0XHRcXFxuK1x0KChfaWR4KSBcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RPRF9TRUNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfU0VDXzQpXG4rXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlNfMDMoX2lkeClcdFx0XHRcdFx0XFxcbitcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgxOCwgNCwgNCwgMHgyMClcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU180XHRcdFx0WkxfUkVHKDcsIDB4MTgsIDQpXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlMoX2lkeClcdFx0XHRcdFx0XFxcbitcdCgoX2lkeCkgXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9UT0RfTlNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfTlNfNClcbitcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgKiBSZWdpc3RlciBQYWdlIDksIFN5bnRoIGFuZCBPdXRwdXRcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5AQCAtMjIxLDYgKzI1Niw4IEBAXG4gI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9FTlx0XHRcdEJJVCgwKVxuICNkZWZpbmUgWkxfT1VUUFVUX0NUUkxfU1lOVEhfU0VMXHRcdEdFTk1BU0soNiwgNClcbiBcbisjZGVmaW5lIFpMX1JFR19PVVRQVVRfU1RFUF9USU1FX01BU0tcdFx0WkxfUkVHKDksIDB4MzYsIDIpXG4rXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgKiBSZWdpc3RlciBQYWdlIDEwLCBSZWYgTWFpbGJveFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuQEAgLTMxNiw2ICszNTMsMjUgQEBcbiAjZGVmaW5lIFpMX1JFR19PVVRQVVRfRVNZTkNfV0lEVEhcdFx0WkxfUkVHKDE0LCAweDE4LCA0KVxuICNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9DT01QXHRcdFpMX1JFRygxNCwgMHgyMCwgNClcbiBcbisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbisgKiBSZWdpc3RlciBQYWdlIDksIE91dHB1dCBQaGFzZSBTdGVwXG4rICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuK1xuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxcdFx0WkxfUkVHKDksIDB4MzgsIDEpXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX0RQTExcdFx0R0VOTUFTSyg2LCA0KVxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9UT0RfU1RFUFx0QklUKDMpXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QXHRcdEdFTk1BU0soMSwgMClcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfTk9ORVx0MFxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9SRVNFVFx0MVxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9SRUFEXHQyXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1dSSVRFXHQzXG4rXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTlVNQkVSXHRcdFpMX1JFRyg5LCAweDM5LCAxKVxuK1xuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX01BU0tcdFx0WkxfUkVHKDksIDB4M2EsIDIpXG4rXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfREFUQVx0XHRaTF9SRUcoOSwgMHgzYywgNClcbitcbiAvKlxuICAqIFJlZ2lzdGVyIFBhZ2UgMjU1IC0gSFcgcmVnaXN0ZXJzIGFjY2Vzc1xuICAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTE6MTI6NDcuMzM3MzUyNjc3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTExNTYxNzg2MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQVFAgQ2xvY2sgUGF0Y2ggZm9yIHRoZSBBenVyaXRlIERQTEwgRHJpdmVyICh6bDMwNzN4KSoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggYWRkaW5nIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciwgYGRyaXZlcnMvZHBsbC96bDMwNzN4L2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGlmIGl0J3MgcmVhY2hhYmxlIGFuZCBpZGVudGlmeSB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZnVuY3Rpb25zIHRvIHRhcmdldC5cblxuRmlyc3QsIEkgc2VlIHRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYEtjb25maWdgIGZpbGUsIG1ha2luZyB0aGUgZHJpdmVyIGRlcGVuZCBvbiBgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxgLiBUaGF0IG1lYW5zIGBQVFBfMTU4OF9DTE9DS2AgaXMgbm93IGNydWNpYWwsIGFsb25nIHdpdGggdGhlIHN0YW5kYXJkIGBaTDMwNzNYYCwgYFpMMzA3M1hfSTJDYCwgYW5kIGBaTDMwNzNYX1NQSWAgY29uZmlndXJhdGlvbnMuIFNvLCB0aGUgYmFzZSByZXF1aXJlbWVudHMgYXJlIGBaTDMwNzNYYCwgYW5kIG9uZSBvZiB0aGUgY29tbXVuaWNhdGlvbiBwcm90b2NvbHMgKGBaTDMwNzNYX0kyQ2Agb3IgYFpMMzA3M1hfU1BJYCksIGFuZCBub3cgdGhlIGBQVFBfMTU4OF9DTE9DS2AgY29uZmlnLlxuXG5Ob3csIGxldCdzIGRyaWxsIGRvd24gaW50byB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIEkgc2hvdWxkIGJlIGZ1enppbmcuIExvb2tzIGxpa2UgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIGZ1bmN0aW9ucyBhZGRlZCBmb3IgcmVhZC93cml0ZSBUaW1lIG9mIERheSAoVG9EKSwgcGhhc2UgYWRqdXN0bWVudCwgZnJlcXVlbmN5IGFkanVzdG1lbnQsIGFuZCBQVFAgY2xvY2sgcmVnaXN0cmF0aW9uLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCB0aGVzZTogYHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NGAsIGB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NGAsIGB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVgLCBgemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lYCwgYHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2VgLCBgemwzMDczeF9kcGxsX3B0cF9lbmFibGVgLCBgemwzMDczeF9jaGFuX3RvZF9yZWFkYCwgYHpsMzA3M3hfY2hhbl90b2Rfd3JpdGVgLCBgemwzMDczeF9jaGFuX3RvZF9hZGp1c3RgLCBgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXBgLCBhbmQgYHpsMzA3M3hfY2hhbl90aWVfd3JpdGVgLiBUaGVzZSBhcmUgbXkgaW5pdGlhbCB0YXJnZXRzLlxuXG5OZXh0LCBob3cgZG8gSSBnZXQgdG8gdGhlIGRyaXZlcj8gSXQncyBhbiBJMkMvU1BJIGRyaXZlciwgc28gaXQgY2FuIGJlIHJlYWNoZWQgdGhyb3VnaCB0aGUgSTJDL1NQSSBzdWJzeXN0ZW1zLiBJIGNvdWxkIGhpdCBpdCBmcm9tIHVzZXJzcGFjZSB2aWEgYC9kZXYvaTJjLWRldmAgb3IgYC9kZXYvc3BpZGV2YCwgcG90ZW50aWFsbHkgdXNpbmcgZGV2aWNlIHRyZWUgb3ZlcmxheXMsIG9yLCBpZiBTeXprYWxsZXIgc3VwcG9ydHMgaXQsIGl0IGNvdWxkIGluamVjdCBJMkMvU1BJIGRldmljZXMuIEJlY2F1c2UgaXQgcmVnaXN0ZXJzIGEgUFRQIGNsb2NrLCB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBpcyBnb2luZyB0byBiZSB0aGUgUFRQIGlvY3RscyB0aHJvdWdoIGAvZGV2L3B0cFhgLiBUaGFua2Z1bGx5LCBTeXprYWxsZXIgc3VwcG9ydHMgZnV6emluZyBQVFAgY2xvY2tzLiBTbyB0aGF0J3MgdGhlIHBhdGguXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ2xsIHF1aWNrbHkgdmVyaWZ5IHRob3NlIGNvbmZpZyBuYW1lcyBhZ2FpbjogYFpMMzA3M1hgLCBgWkwzMDczWF9JMkNgLCBgWkwzMDczWF9TUElgLCBhbmQgYFBUUF8xNTg4X0NMT0NLYC5cblxuQmVmb3JlIEkgY2FsbCB0aGUgYHNldC1yZXN1bHRzYCB0b29sLCBsZXQgbWUganVzdCBxdWlja2x5IHJ1biB0aHJvdWdoIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gYERQTExgIGlzIHNlbGVjdGVkLCBgTkVUX0RFVkxJTktgIGlzIHNlbGVjdGVkLCBhbmQgYFJFR01BUGAgaXMgc2VsZWN0ZWQuIE9rYXksIGxvb2tzIGdvb2QuIFRpbWUgdG8gc2V0IHRob3NlIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTQxLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTE6MTI6NTguNDkzNTM0NjUzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzUwNjczOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWkwzMDczWFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctMi1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnOjM6Y29uZmlnIFpMMzA3M1hcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTQtXFx0dHJpc3RhdGUgXFxcIk1pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXNcXFwiIGlmIENPTVBJTEVfVEVTVFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZy0xNi1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnOjE3OmNvbmZpZyBaTDMwNzNYX0kyQ1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctMTgtXFx0dHJpc3RhdGUgXFxcIkkyQyBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcXFwiXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTI4LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWc6Mjk6Y29uZmlnIFpMMzA3M1hfU1BJXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZy0zMC1cXHR0cmlzdGF0ZSBcXFwiU1BJIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTE6MTI6NTguNjA3MDUwNDMyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA3NDg1NTk4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFBUUCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbnM6IGBaTDMwNzNYYCwgYFpMMzA3M1hfSTJDYCwgYW5kIGBaTDMwNzNYX1NQSWAuIFNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmTigJRkaWZmZXJlbnQgY29tbXVuaWNhdGlvbiBpbnRlcmZhY2VzIGZvciB0aGUgc2FtZSBjb3JlIGNoaXAuIEFuZCwgYXMgZXhwZWN0ZWQsIHdlIG5lZWQgYFBUUF8xNTg4X0NMT0NLYCBmb3IgUHJlY2lzaW9uIFRpbWUgUHJvdG9jb2wgc3VwcG9ydC4gVGhpcyBhbGwgbWFrZXMgc2Vuc2UsIGFzIHRoZSBaTDMwNzNYIGlzIGEgY29tbW9uIFBUUCBjbG9jayBjaGlwLlxuXG5Ob3csIGxldCBtZSBxdWlja2x5IHJldmlldyB0aGUga2V5IGZ1bmN0aW9uIGNhbGxzIEknbSBsaWtlbHkgdG8gZW5jb3VudGVyIHJlbGF0ZWQgdG8gdGhlIGBaTDMwNzNYYCBhbmQgaXRzIFBUUCBjYXBhYmlsaXRpZXMuIEknbSBmb2N1c2luZyBvbiB0aG9zZSBzcGVjaWZpYyBgemwzMDczeF9kcGxsX3B0cF8qYCBjYWxscyDigJMgdGhhdCBnaXZlcyBtZSBhIGdyZWF0IG1lbnRhbCBtYXAgb2YgdGhlIGNvcmUgZnVuY3Rpb25zLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGZ1bmN0aW9ucyByZWxhdGVkIHRvIGdldHRpbmcgYW5kIHNldHRpbmcgdGltZSwgYWRqdXN0aW5nLCBlbmFibGluZywgYW5kIHJlYWRpbmcgYW5kIHdyaXRpbmcgdG8gVE9EIChUaW1lIG9mIERheSkuIFRoZSBhZGp1c3RtZW50IGZ1bmN0aW9ucyBhbmQgcGhhc2Ugc3RlcHBpbmcgYXJlIGtleS4gSSBhbHNvIHNlZSBhIGZ1bmN0aW9uIHRoYXQgaGFzIHRpZSwgSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB3aGF0J3MgaW52b2x2ZWQgd2l0aCB0aGF0LlxuXG5BbHJpZ2h0LCBJIHNob3VsZCBjaGVjayB3aGV0aGVyIGBQVFBfMTU4OF9DTE9DS2AgaXMgc2V0IGFzIEkgbmVlZCB0byBlbmFibGUgdGhlIFBUUCBmZWF0dXJlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE5NzAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTE6MTM6MDQuNjgxOTEwMDY2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NDMwNDgxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUFRQXzE1ODhfQ0xPQ0tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9wdHAvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3B0cC9LY29uZmlnPTY9bWVudSBcXFwiUFRQIGNsb2NrIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9wdHAvS2NvbmZpZy03LVxcbmRyaXZlcnMvcHRwL0tjb25maWc6ODpjb25maWcgUFRQXzE1ODhfQ0xPQ0tcXG5kcml2ZXJzL3B0cC9LY29uZmlnLTktXFx0dHJpc3RhdGUgXFxcIlBUUCBjbG9jayBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9wdHAvS2NvbmZpZy0yOS1cXG5kcml2ZXJzL3B0cC9LY29uZmlnOjMwOmNvbmZpZyBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbmRyaXZlcnMvcHRwL0tjb25maWctMzEtXFx0dHJpc3RhdGVcXG4tLVxcbmRyaXZlcnMvcHRwL0tjb25maWctNDEtXFxuZHJpdmVycy9wdHAvS2NvbmZpZzo0Mjpjb25maWcgUFRQXzE1ODhfQ0xPQ0tfRFRFXFxuZHJpdmVycy9wdHAvS2NvbmZpZy00My1cXHR0cmlzdGF0ZSBcXFwiQnJvYWRjb20gRFRFIGFzIFBUUCBjbG9ja1xcXCJcXG4tLVxcbmRyaXZlcnMvcHRwL0tjb25maWctNTctXFxuZHJpdmVycy9wdHAvS2NvbmZpZzo1ODpjb25maWcgUFRQXzE1ODhfQ0xPQ0tfUU9SSVFcXG5kcml2ZXJzL3B0cC9LY29uZmlnLTU5LVxcdHRyaXN0YXRlIFxcXCJGcmVlc2NhbGUgUW9ySVEgMTU4OCB0aW1lciBhcyBQVFAgY2xvY2tcXFwiXFxuLS1cXG5kcml2ZXJzL3B0cC9LY29uZmlnPTc1PWNvbmZpZyBEUDgzNjQwX1BIWVxcbi0tXFxuZHJpdmVycy9wdHAvS2NvbmZpZy05MS1cXG5kcml2ZXJzL3B0cC9LY29uZmlnOjkyOmNvbmZpZyBQVFBfMTU4OF9DTE9DS19JTkVTXFxuZHJpdmVycy9wdHAvS2NvbmZpZy05My1cXHR0cmlzdGF0ZSBcXFwiWkhBVyBJbkVTIFBUUCB0aW1lIHN0YW1waW5nIElQIGNvcmVcXFwiXFxuLS1cXG5kcml2ZXJzL3B0cC9LY29uZmlnLTEwMi1cXG5kcml2ZXJzL3B0cC9LY29uZmlnOjEwMzpjb25maWcgUFRQXzE1ODhfQ0xPQ0tfUENIXFxuZHJpdmVycy9wdHAvS2NvbmZpZy0xMDQtXFx0dHJpc3RhdGUgXFxcIkludGVsIFBDSCBFRzIwVCBhcyBQVFAgY2xvY2tcXFwiXFxuLS1cXG5kcml2ZXJzL3B0cC9LY29uZmlnLTEyMS1cXG5kcml2ZXJzL3B0cC9LY29uZmlnOjEyMjpjb25maWcgUFRQXzE1ODhfQ0xPQ0tfS1ZNXFxuZHJpdmVycy9wdHAvS2NvbmZpZy0xMjMtXFx0dHJpc3RhdGUgXFxcIktWTSB2aXJ0dWFsIFBUUCBjbG9ja1xcXCJcXG4tLVxcbmRyaXZlcnMvcHRwL0tjb25maWctMTMzLVxcbmRyaXZlcnMvcHRwL0tjb25maWc6MTM0OmNvbmZpZyBQVFBfMTU4OF9DTE9DS19WTUNMT0NLXFxuZHJpdmVycy9wdHAvS2NvbmZpZy0xMzUtXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgbWFjaGluZSBQVFAgY2xvY2tcXFwiXFxuLS1cXG5kcml2ZXJzL3B0cC9LY29uZmlnLTE1MC1cXG5kcml2ZXJzL3B0cC9LY29uZmlnOjE1MTpjb25maWcgUFRQXzE1ODhfQ0xPQ0tfSURUODJQMzNcXG5kcml2ZXJzL3B0cC9LY29uZmlnLTE1Mi1cXHR0cmlzdGF0ZSBcXFwiSURUIDgyUDMzeHh4IFBUUCBjbG9ja1xcXCJcXG4tLVxcbmRyaXZlcnMvcHRwL0tjb25maWctMTYyLVxcbmRyaXZlcnMvcHRwL0tjb25maWc6MTYzOmNvbmZpZyBQVFBfMTU4OF9DTE9DS19JRFRDTVxcbmRyaXZlcnMvcHRwL0tjb25maWctMTY0LVxcdHRyaXN0YXRlIFxcXCJJRFQgQ0xPQ0tNQVRSSVggYXMgUFRQIGNsb2NrXFxcIlxcbi0tXFxuZHJpdmVycy9wdHAvS2NvbmZpZy0xNzQtXFxuZHJpdmVycy9wdHAvS2NvbmZpZzoxNzU6Y29uZmlnIFBUUF8xNTg4X0NMT0NLX0ZDM1dcXG5kcml2ZXJzL3B0cC9LY29uZmlnLTE3Ni1cXHR0cmlzdGF0ZSBcXFwiUkVORVNBUyBGZW10b0Nsb2NrMyBXaXJlbGVzcyBhcyBQVFAgY2xvY2tcXFwiXFxuLS1cXG5kcml2ZXJzL3B0cC9LY29uZmlnLTE4Ni1cXG5kcml2ZXJzL3B0cC9LY29uZmlnOjE4Nzpjb25maWcgUFRQXzE1ODhfQ0xPQ0tfTU9DS1xcbmRyaXZlcnMvcHRwL0tjb25maWctMTg4LVxcdHRyaXN0YXRlIFxcXCJNb2NrLXVwIFBUUCBjbG9ja1xcXCJcXG4tLVxcbmRyaXZlcnMvcHRwL0tjb25maWctMTk3LVxcbmRyaXZlcnMvcHRwL0tjb25maWc6MTk4OmNvbmZpZyBQVFBfMTU4OF9DTE9DS19WTVdcXG5kcml2ZXJzL3B0cC9LY29uZmlnLTE5OS1cXHR0cmlzdGF0ZSBcXFwiVk13YXJlIHZpcnR1YWwgUFRQIGNsb2NrXFxcIlxcbi0tXFxuZHJpdmVycy9wdHAvS2NvbmZpZy0yMDktXFxuZHJpdmVycy9wdHAvS2NvbmZpZzoyMTA6Y29uZmlnIFBUUF8xNTg4X0NMT0NLX09DUFxcbmRyaXZlcnMvcHRwL0tjb25maWctMjExLVxcdHRyaXN0YXRlIFxcXCJPcGVuQ29tcHV0ZSBUaW1lQ2FyZCBhcyBQVFAgY2xvY2tcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDExOjEzOjA0LjkyNjIyMTIxMloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3ODczNjM2ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyByZXF1ZXN0ZWQ6XG5cbioqQ29uZmlndXJhdGlvbiBhbmQgUmVwb3J0aW5nIFN0cmF0ZWd5KipcblxuQWxyaWdodCwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBzeXN0ZW0gY29uZmlndXJhdGlvbiBub3cuIEkgZGVmaW5pdGVseSBuZWVkIHRvIGluY2x1ZGUgdGhlIGBQVFBfMTU4OF9DTE9DS2AgY29tcG9uZW50IGluIHRoZSBvdmVyYWxsIGNvbmZpZ3VyYXRpb24uIFRoaXMgaXMgbm9uLW5lZ290aWFibGUsIGdpdmVuIHRoZSBwcm9qZWN0IHJlcXVpcmVtZW50cy4gSSd2ZSBnb3QgdG8gbWFrZSBzdXJlIHRoYXQncyBiYWtlZCBpbiBmcm9tIHRoZSBnZXQtZ28uXG5cbkFuZCB0aGVuLCBvbmNlIEkndmUgZ290IGEgaGFuZGxlIG9uIGV2ZXJ5dGhpbmcsIGl0J3MgdGltZSB0byB0cmlnZ2VyIHRoYXQgcmVwb3J0aW5nIGZ1bmN0aW9uLiBJJ20gZ29pbmcgdG8gY2FsbCBpdCBgc2V0LXJlc3VsdHNgLiBUaGlzIG5hbWluZyBjb252ZW50aW9uIGlzIGNsZWFyIGFuZCBhbGlnbnMgd2l0aCBvdXIgZXhpc3RpbmcgYXJjaGl0ZWN0dXJlLiBJ4oCZbGwgbWFrZSBzdXJlIHRoYXQgaXQncyByb2J1c3QgYW5kIHJlYWR5IHRvIGhhbmRsZSB3aGF0ZXZlciBkYXRhIHRoZSBzeXN0ZW0gdGhyb3dzIGF0IGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzU0NCwiT3V0cHV0VG9rZW5zIjozNDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxMToxMzowOS43MTM1ODk5MjNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NTQ0NDY2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWkwzMDczWFwiLFxuICAgIFwiWkwzMDczWF9JMkNcIixcbiAgICBcIlpMMzA3M1hfU1BJXCIsXG4gICAgXCJQVFBfMTU4OF9DTE9DS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NFwiLFxuICAgIFwiemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjRcIixcbiAgICBcInpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZVwiLFxuICAgIFwiemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lXCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlXCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX2VuYWJsZVwiLFxuICAgIFwiemwzMDczeF9jaGFuX3RvZF9yZWFkXCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fdG9kX3dyaXRlXCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fdG9kX2FkanVzdFwiLFxuICAgIFwiemwzMDczeF9jaGFuX3BoYXNlX3N0ZXBcIixcbiAgICBcInpsMzA3M3hfY2hhbl90aWVfd3JpdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciAoemwzMDczeCkuIEl0IGltcGxlbWVudHMgdmFyaW91cyBQVFAgY2xvY2sgb3BlcmF0aW9ucyAoZ2V0L3NldCB0aW1lLCBhZGp1c3QgdGltZS9waGFzZS9mcmVxdWVuY3kpIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBQVFAgaW9jdGwgaW50ZXJmYWNlLiBGdXp6aW5nIHRoZXNlIGZ1bmN0aW9ucyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoZSBkcml2ZXIgaGFuZGxlcyBlZGdlIGNhc2VzIGFuZCBjb25jdXJyZW50IGFjY2Vzc2VzIGNvcnJlY3RseS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaTDMwNzNYXCIsXG4gICAgXCJaTDMwNzNYX0kyQ1wiLFxuICAgIFwiWkwzMDczWF9TUElcIixcbiAgICBcIlBUUF8xNTg4X0NMT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0XCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NFwiLFxuICAgIFwiemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lXCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmVcIixcbiAgICBcInpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2VcIixcbiAgICBcInpsMzA3M3hfZHBsbF9wdHBfZW5hYmxlXCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fdG9kX3JlYWRcIixcbiAgICBcInpsMzA3M3hfY2hhbl90b2Rfd3JpdGVcIixcbiAgICBcInpsMzA3M3hfY2hhbl90b2RfYWRqdXN0XCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcFwiLFxuICAgIFwiemwzMDczeF9jaGFuX3RpZV93cml0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgUFRQIGNsb2NrIHN1cHBvcnQgdG8gdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyICh6bDMwNzN4KS4gSXQgaW1wbGVtZW50cyB2YXJpb3VzIFBUUCBjbG9jayBvcGVyYXRpb25zIChnZXQvc2V0IHRpbWUsIGFkanVzdCB0aW1lL3BoYXNlL2ZyZXF1ZW5jeSkgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIFBUUCBpb2N0bCBpbnRlcmZhY2UuIEZ1enppbmcgdGhlc2UgZnVuY3Rpb25zIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlIGRyaXZlciBoYW5kbGVzIGVkZ2UgY2FzZXMgYW5kIGNvbmN1cnJlbnQgYWNjZXNzZXMgY29ycmVjdGx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow6hmkf[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-09 10:49:19 +0000 UTC FinishedAt: 2026-07-09 11:13:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "4a13f31a92f35161b499bf29638336885259da78", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZL3073X", "ZL3073X_I2C", "ZL3073X_SPI", "PTP_1588_CLOCK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "4a13f31a92f35161b499bf29638336885259da78", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZL3073X", "ZL3073X_I2C", "ZL3073X_SPI", "PTP_1588_CLOCK" ], "series_id": "87b9f9ec-7384-41f3-8dcf-64b754b2475f" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "zl3073x_dpll_ptp_gettimex64", "zl3073x_dpll_ptp_settime64", "zl3073x_dpll_ptp_adjtime", "zl3073x_dpll_ptp_adjfine", "zl3073x_dpll_ptp_adjphase", "zl3073x_dpll_ptp_enable", "zl3073x_chan_tod_read", "zl3073x_chan_tod_write", "zl3073x_chan_tod_adjust", "zl3073x_chan_phase_step", "zl3073x_chan_tie_write" ], "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+CgkJCTx0ZD4yMDI2LzA3LzA5IDExOjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pMMzA3M1gmIzM0OywKICAgICYjMzQ7WkwzMDczWF9JMkMmIzM0OywKICAgICYjMzQ7WkwzMDczWF9TUEkmIzM0OywKICAgICYjMzQ7UFRQXzE1ODhfQ0xPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQmIzM0OywKICAgICYjMzQ7emwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQmIzM0OywKICAgICYjMzQ7emwzMDczeF9kcGxsX3B0cF9hZGp0aW1lJiMzNDssCiAgICAmIzM0O3psMzA3M3hfZHBsbF9wdHBfYWRqZmluZSYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlJiMzNDssCiAgICAmIzM0O3psMzA3M3hfZHBsbF9wdHBfZW5hYmxlJiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl90b2RfcmVhZCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fdG9kX3dyaXRlJiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl90b2RfYWRqdXN0JiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl9waGFzZV9zdGVwJiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl90aWVfd3JpdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIgKHpsMzA3M3gpLiBJdCBpbXBsZW1lbnRzIHZhcmlvdXMgUFRQIGNsb2NrIG9wZXJhdGlvbnMgKGdldC9zZXQgdGltZSwgYWRqdXN0IHRpbWUvcGhhc2UvZnJlcXVlbmN5KSB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgUFRQIGlvY3RsIGludGVyZmFjZS4gRnV6emluZyB0aGVzZSBmdW5jdGlvbnMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGUgZHJpdmVyIGhhbmRsZXMgZWRnZSBjYXNlcyBhbmQgY29uY3VycmVudCBhY2Nlc3NlcyBjb3JyZWN0bHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTE6MTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxMjdlYzFkYWNlYjU1Y2U4NDkxYjY0YTlkY2Y1OGFkMTAyNWUzMDU3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgOSAxMToxMjo0NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xuaW5kZXggNWJiY2ExNDAwNTgxMzEuLmQwNTc0YWQ1NzFkM2ZhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xuQEAgLTIsNyAmIzQzOzIsNyBAQFxuIFxuIGNvbmZpZyBaTDMwNzNYXG4gXHR0cmlzdGF0ZSBcJiMzNDtNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRSBkZXZpY2VzXCYjMzQ7IGlmIENPTVBJTEVfVEVTVFxuLVx0ZGVwZW5kcyBvbiBORVRcbiYjNDM7XHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiBcdHNlbGVjdCBEUExMXG4gXHRzZWxlY3QgTkVUX0RFVkxJTktcbiBcdHNlbGVjdCBSRUdNQVBcbkBAIC0xNiw3ICYjNDM7MTYsNyBAQCBjb25maWcgWkwzMDczWFxuIFxuIGNvbmZpZyBaTDMwNzNYX0kyQ1xuIFx0dHJpc3RhdGUgXCYjMzQ7STJDIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1wmIzM0O1xuLVx0ZGVwZW5kcyBvbiBJMkMgXHUwMDI2XHUwMDI2IE5FVFxuJiM0MztcdGRlcGVuZHMgb24gSTJDIFx1MDAyNlx1MDAyNiBORVQgXHUwMDI2XHUwMDI2IFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG4gXHRzZWxlY3QgUkVHTUFQX0kyQ1xuIFx0c2VsZWN0IFpMMzA3M1hcbiBcdGhlbHBcbkBAIC0yOCw3ICYjNDM7MjgsNyBAQCBjb25maWcgWkwzMDczWF9JMkNcbiBcbiBjb25maWcgWkwzMDczWF9TUElcbiBcdHRyaXN0YXRlIFwmIzM0O1NQSSBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcJiMzNDtcbi1cdGRlcGVuZHMgb24gTkVUIFx1MDAyNlx1MDAyNiBTUElcbiYjNDM7XHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgU1BJIFx1MDAyNlx1MDAyNiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuIFx0c2VsZWN0IFJFR01BUF9TUElcbiBcdHNlbGVjdCBaTDMwNzNYXG4gXHRoZWxwXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXG5pbmRleCA0ZWMyY2Y1M2RhZDQ2OC4uNTMwMzJlNzgyZmQ0YWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uY1xuQEAgLTMsNiAmIzQzOzMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZfcHJpbnRrLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gXG5AQCAtMjAyLDYgJiM0MzsyMDMsMTEgQEAgaW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9mZXRjaChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleClcbiBcdFx0emwzMDczeF9jaGFuX3JlZnNlbF9zdGF0ZV9nZXQoY2hhbiksXG4gXHRcdHpsMzA3M3hfY2hhbl9yZWZzZWxfcmVmX2dldChjaGFuKSk7XG4gXG4mIzQzO1x0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1NURVBfVElNRV9NQVNLLFxuJiM0MztcdFx0XHQgICAgICBcdTAwMjZjaGFuLVx1MDAzZW91dF9zdGVwX3RpbWVfbWFzayk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiBcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRldi1cdTAwM2VtdWx0aW9wX2xvY2spO1xuIFxuIFx0LyogUmVhZCBEUExMIGNvbmZpZ3VyYXRpb24gZnJvbSBtYWlsYm94ICovXG5AQCAtMjM0LDYgJiM0MzsyNDAsMzA3IEBAIGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKnpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldixcbiBcdHJldHVybiBcdTAwMjZ6bGRldi1cdTAwM2VjaGFuW2luZGV4XTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQgLSB3YWl0IGZvciBUb0Qgc2VtYXBob3JlIHRvIGNsZWFyXG4mIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuJiM0MzsgKlxuJiM0MzsgKiBQb2xscyB0aGUgVG9EIGNvbnRyb2wgcmVnaXN0ZXIgdW50aWwgdGhlIHNlbWFwaG9yZSBiaXQgaXMgY2xlYXJlZCxcbiYjNDM7ICogaW5kaWNhdGluZyB0aGUgZGV2aWNlIGhhcyBjb21wbGV0ZWQgdGhlIHByZXZpb3VzIFRvRCBvcGVyYXRpb24uXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRUJVU1kgaWYgc2VtYXBob3JlIG5vdCBjbGVhcmVkLCBcdTAwM2MwIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCB0aW1lb3V0O1xuJiM0MztcdHU4IHRvZF9jdHJsO1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSwgXHUwMDI2dG9kX2N0cmwpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChGSUVMRF9HRVQoWkxfRFBMTF9UT0RfQ1RSTF9DTUQsIHRvZF9jdHJsKSkge1xuJiM0MztcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFo6XG4mIzQzO1x0XHR0aW1lb3V0ID0gWkxfUE9MTF9UT0RfV1JfVElNRU9VVF9VUztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHR0aW1lb3V0ID0gWkxfUE9MTF9UT0RfUkRfVElNRU9VVF9VUztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLFxuJiM0MztcdFx0XHRcdCAgWkxfRFBMTF9UT0RfQ1RSTF9TRU0sIHRpbWVvdXQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmMgPT0gLUVUSU1FRE9VVCA/IC1FQlVTWSA6IHJjO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9jdHJsIC0gaXNzdWUgVG9EIGNvbW1hbmRcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEBjbWQ6IFRvRCBjb21tYW5kIHRvIGV4ZWN1dGVcbiYjNDM7ICpcbiYjNDM7ICogV3JpdGVzIHRoZSBzZW1hcGhvcmUgYW5kIGNvbW1hbmQgdG8gZHBsbF90b2RfY3RybC4gVGhlIGNhbGxlciBtdXN0XG4mIzQzOyAqIGVuc3VyZSB0aGUgZGV2aWNlIGlzIHJlYWR5IChzZW1hcGhvcmUgY2xlYXIpIGJlZm9yZSBjYWxsaW5nIGFuZFxuJiM0MzsgKiBtdXN0IHdhaXQgZm9yIGNvbXBsZXRpb24gaWYgbmVlZGVkLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHU4IGNtZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksXG4mIzQzO1x0XHRcdFx0WkxfRFBMTF9UT0RfQ1RSTF9TRU0gfCBjbWQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9yZWFkIC0gcmVhZCBUb0QgcmVnaXN0ZXJzIGFmdGVyIGlzc3VpbmcgYSBjb21tYW5kXG4mIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuJiM0MzsgKiBAbmV4dF9oejogaWYgdHJ1ZSwgcmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIejsgb3RoZXJ3aXNlIHJlYWQgY3VycmVudFxuJiM0MzsgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIHRoZSByZXN1bHRcbiYjNDM7ICogQHN0czogb3B0aW9uYWwgc3lzdGVtIHRpbWVzdGFtcCBwYWlyIGZvciBjcm9zcy10aW1lc3RhbXBpbmdcbiYjNDM7ICpcbiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4mIzQzO1x0XHRcdCAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXG4mIzQzO1x0XHRcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpXG4mIzQzO3tcbiYjNDM7XHR1MzIgbnNlYztcbiYjNDM7XHR1NjQgc2VjO1xuJiM0MztcdHU4IGNtZDtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdGlmIChuZXh0X2h6KVxuJiM0MztcdFx0Y21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFo7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0Y21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVDtcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbiYjNDM7XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cHRwX3JlYWRfc3lzdGVtX3ByZXRzKHN0cyk7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLCBjbWQpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1x0cHRwX3JlYWRfc3lzdGVtX3Bvc3R0cyhzdHMpO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfcmVhZF91NDgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9TRUMoY2gpLCBcdTAwMjZzZWMpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0LyogSFcgbmFub3NlY29uZHMgYXJlIGFsd2F5cyBpbiBbMCwgTlNFQ19QRVJfU0VDKSByYW5nZSAqL1xuJiM0MztcdHJjID0gemwzMDczeF9yZWFkX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgXHUwMDI2bnNlYyk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHR0cy1cdTAwM2V0dl9zZWMgPSBzZWM7XG4mIzQzO1x0dHMtXHUwMDNldHZfbnNlYyA9IG5zZWM7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF93cml0ZSAtIHdyaXRlIFRvRCByZWdpc3RlcnMgYW5kIHRyaWdnZXIgMSBIeiB1cGRhdGVcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEB0czogdGltZSB0byBzZXRcbiYjNDM7ICpcbiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuJiM0MztcdFx0XHQgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cylcbiYjNDM7e1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbiYjNDM7XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIHRzLnR2X3NlYyk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCB0cy50dl9uc2VjKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLFxuJiM0MztcdFx0XHRcdCAgICBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCAtIGF0b21pYyBUb0QgcmVhZC1tb2RpZnktd3JpdGUgd2l0aCByb2xsb3ZlciBndWFyZFxuJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbiYjNDM7ICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgdG8gYXBwbHlcbiYjNDM7ICpcbiYjNDM7ICogUmVhZHMgdGhlIG5leHQtSHogVG9EIGFuZCBjdXJyZW50IFRvRCwgdGhlbiBjaGVja3Mgd2hldGhlciBlbm91Z2ggdGltZVxuJiM0MzsgKiByZW1haW5zIGJlZm9yZSB0aGUgbmV4dCAxIEh6IHJvbGxvdmVyIHRvIHNhZmVseSBjb21wbGV0ZSB0aGUgd3JpdGUuXG4mIzQzOyAqIElmIGxlc3MgdGhhbiAyMCBtcyByZW1haW5zLCB3YWl0cyBmb3IgdGhlIHJvbGxvdmVyIGFuZCBpbmNyZW1lbnRzIHRoZVxuJiM0MzsgKiBuZXh0LUh6IHNlY29uZHMgYnkgb25lLiBBcHBsaWVzIEBkZWx0YSBhbmQgd3JpdGVzIHRoZSByZXN1bHQgYmFjay5cbiYjNDM7ICpcbiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RhdGljIGNvbnN0IGxvbmcgdGhyZXNob2xkX25zID0gMjAgKiBOU0VDX1BFUl9NU0VDO1xuJiM0MztcdHN0cnVjdCB0aW1lc3BlYzY0IHRzX25leHQsIHRzX2N1ciwgZGlmZjtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdC8qIFJlYWQgcHJlZGljdGVkIFRvRCBhdCBuZXh0IDEgSHogdGljayAqL1xuJiM0MztcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgdHJ1ZSwgXHUwMDI2dHNfbmV4dCwgTlVMTCk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHQvKiBSZWFkIGN1cnJlbnQgVG9EIHRvIGRldGVybWluZSByZW1haW5pbmcgbWFyZ2luICovXG4mIzQzO1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCBmYWxzZSwgXHUwMDI2dHNfY3VyLCBOVUxMKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdC8qIElmIHRvbyBjbG9zZSB0byAob3IgcGFzdCkgdGhlIG5leHQgcm9sbG92ZXIsIHdhaXQgaXQgb3V0ICovXG4mIzQzO1x0ZGlmZiA9IHRpbWVzcGVjNjRfc3ViKHRzX25leHQsIHRzX2N1cik7XG4mIzQzO1x0aWYgKGRpZmYudHZfc2VjIFx1MDAzYyAwIHx8ICghZGlmZi50dl9zZWMgXHUwMDI2XHUwMDI2IGRpZmYudHZfbnNlYyBcdTAwM2MgdGhyZXNob2xkX25zKSkge1xuJiM0MztcdFx0aWYgKCFkaWZmLnR2X3NlYyBcdTAwMjZcdTAwMjYgZGlmZi50dl9uc2VjKVxuJiM0MztcdFx0XHRmc2xlZXAoKHVuc2lnbmVkIGxvbmcpZGlmZi50dl9uc2VjIC8gTlNFQ19QRVJfVVNFQyAmIzQzOyAxKTtcbiYjNDM7XHRcdHRzX25leHQudHZfc2VjJiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEFwcGx5IGRlbHRhIHRvIHRoZSBuZXh0LUh6IFRvRCAqL1xuJiM0MztcdHRzX25leHQgPSB0aW1lc3BlYzY0X2FkZCh0c19uZXh0LCBkZWx0YSk7XG4mIzQzO1x0aWYgKCF0aW1lc3BlYzY0X3ZhbGlkKFx1MDAyNnRzX25leHQpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdC8qIFdyaXRlIGFkanVzdGVkIFRvRCBiYWNrIGFuZCB3YWl0IGZvciBjb21wbGV0aW9uICovXG4mIzQzO1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZGV2LCBjaCwgdHNfbmV4dCk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCAtIHdyaXRlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgdG8gaGFyZHdhcmVcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEBvZmZzZXQ6IGZyZXF1ZW5jeSBvZmZzZXQgaW4gMl4tNDggc3RlcHNcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldClcbiYjNDM7e1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfREZfT0ZGU0VUKGNoKSwgb2Zmc2V0KTtcbiYjNDM7XHRpZiAoIXJjKVxuJiM0MztcdFx0emxkZXYtXHUwMDNlY2hhbltjaF0uZGZfb2Zmc2V0ID0gb2Zmc2V0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlIC0gYWRqdXN0IERQTEwgcGhhc2UgdXNpbmcgVElFIHdyaXRlXG4mIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuJiM0MzsgKiBAZGVsdGFfbnM6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMgKG11c3QgYmUgd2l0aGluICYjNDM7LTFzKVxuJiM0MzsgKlxuJiM0MzsgKiBDb252ZXJ0cyBuYW5vc2Vjb25kcyB0byBUSUUgdW5pdHMgKDAuMDEgcHMpIGFuZCB3cml0ZXMgVElFIGRhdGFcbiYjNDM7ICogdG8gdGhlIHNwZWNpZmllZCBjaGFubmVsLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7aW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucylcbiYjNDM7e1xuJiM0MztcdHM2NCB0aWVfZGF0YTtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRldi1cdTAwM2V0aWVfbG9jayk7XG4mIzQzO1xuJiM0MztcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUSUUgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXG4mIzQzO1x0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsXG4mIzQzO1x0XHRcdFx0ICBaTF9EUExMX1RJRV9DVFJMX09QLFxuJiM0MztcdFx0XHRcdCAgWkxfUE9MTF9USUVfV1JfVElNRU9VVF9VUyk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHQvKiBDb252ZXJ0IG5zIHRvIFRJRSB1bml0cyAoMC4wMSBwcyA9IDEwXi0xNCBzKSAqL1xuJiM0MztcdHRpZV9kYXRhID0gZGVsdGFfbnMgKiAxMDAwMDBMTDtcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0RBVEEoY2gpLCB0aWVfZGF0YSk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0ssIEJJVChjaCkpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLFxuJiM0MztcdFx0XHRcdFpMX0RQTExfVElFX0NUUkxfT1BfV1IpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAgLSBleGVjdXRlIG9uZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb25cbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEBvdXRfbWFzazogYml0bWFzayBvZiBvdXRwdXRzIHRvIHN0ZXBcbiYjNDM7ICogQHN0ZXBfY3ljbGVzOiBwaGFzZSBzdGVwIGluIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlc1xuJiM0MzsgKiBAdG9kX3N0ZXA6IGFsc28gc3RlcCB0aGUgVG9EIGNvdW50ZXJcbiYjNDM7ICpcbiYjNDM7ICogQWxsIG1hc2tlZCBvdXRwdXRzIG11c3QgdXNlIHN5bnRoZXNpemVycyBvZiB0aGUgc2FtZSBmcmVxdWVuY3kgc2luY2VcbiYjNDM7ICogdGhlIHN0ZXAgdmFsdWUgaXMgaW4gc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7aW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuJiM0MztcdFx0XHQgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsXG4mIzQzO1x0XHRcdCAgICBib29sIHRvZF9zdGVwKVxuJiM0Mzt7XG4mIzQzO1x0dTggY3RybDtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRldi1cdTAwM2VwaGFzZV9zdGVwX2xvY2spO1xuJiM0MztcbiYjNDM7XHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgcGhhc2Ugc3RlcCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbiYjNDM7XHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTCxcbiYjNDM7XHRcdFx0XHQgIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AsXG4mIzQzO1x0XHRcdFx0ICBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VUyk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfREFUQSxcbiYjNDM7XHRcdFx0ICAgICAgIHN0ZXBfY3ljbGVzKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHJjID0gemwzMDczeF93cml0ZV91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLLCBvdXRfbWFzayk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9OVU1CRVIsIDEpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0Y3RybCA9IEZJRUxEX1BSRVAoWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9EUExMLCBjaCkgfFxuJiM0MztcdCAgICAgICBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AsXG4mIzQzO1x0XHRcdCAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURSk7XG4mIzQzO1x0aWYgKHRvZF9zdGVwKVxuJiM0MztcdFx0Y3RybCB8PSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX1RPRF9TVEVQO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwsIGN0cmwpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQgLSBjb21taXQgRFBMTCBjaGFubmVsIHN0YXRlIGNoYW5nZXMgdG8gaGFyZHdhcmVcbiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXG5pbmRleCBkYzljNmQ5NWJkZWU3NS4uOWRjNWEzZjE5OTFmMTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaFxuQEAgLTUsMTAgJiM0Mzs1LDEyIEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0ZGRlZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWU2NC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O3JlZ3MuaFwmIzM0O1xuIFxuJiM0MztzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXA7XG4gc3RydWN0IHpsMzA3M3hfZGV2O1xuIFxuIC8qKlxuQEAgLTE2LDYgJiM0MzsxOCw3IEBAIHN0cnVjdCB6bDMwNzN4X2RldjtcbiAgKiBAY3RybDogRFBMTCBjb250cm9sIHJlZ2lzdGVyIHZhbHVlXG4gICogQG1vZGVfcmVmc2VsOiBtb2RlIGFuZCByZWZlcmVuY2Ugc2VsZWN0aW9uIHJlZ2lzdGVyIHZhbHVlXG4gICogQHJlZl9wcmlvOiByZWZlcmVuY2UgcHJpb3JpdHkgcmVnaXN0ZXJzICg0IGJpdHMgcGVyIHJlZiwgUC9OIHBhY2tlZClcbiYjNDM7ICogQG91dF9zdGVwX3RpbWVfbWFzazogb3V0cHV0IHN0ZXAtdGltZSBtYXNrXG4gICogQG1vbl9zdGF0dXM6IG1vbml0b3Igc3RhdHVzIHJlZ2lzdGVyIHZhbHVlXG4gICogQHJlZnNlbF9zdGF0dXM6IHJlZmVyZW5jZSBzZWxlY3Rpb24gc3RhdHVzIHJlZ2lzdGVyIHZhbHVlXG4gICogQGRmX29mZnNldDogZnJlcXVlbmN5IG9mZnNldCB2cyB0cmFja2VkIHJlZmVyZW5jZSBpbiAyXi00OCBzdGVwc1xuQEAgLTI2LDYgJiM0MzsyOSw5IEBAIHN0cnVjdCB6bDMwNzN4X2NoYW4ge1xuIFx0XHR1OFx0bW9kZV9yZWZzZWw7XG4gXHRcdHU4XHRyZWZfcHJpb1taTDMwNzNYX05VTV9SRUZTIC8gMl07XG4gXHQpO1xuJiM0MztcdHN0cnVjdF9ncm91cChpbnYsIC8qIEludmFyaWFudHMgKi9cbiYjNDM7XHRcdHUxNlx0b3V0X3N0ZXBfdGltZV9tYXNrO1xuJiM0MztcdCk7XG4gXHRzdHJ1Y3RfZ3JvdXAoc3RhdCxcbiBcdFx0dThcdG1vbl9zdGF0dXM7XG4gXHRcdHU4XHRyZWZzZWxfc3RhdHVzO1xuQEAgLTQyLDYgJiM0Mzs0OCwyMCBAQCBpbnQgemwzMDczeF9jaGFuX3N0YXRlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCxcbiBpbnQgemwzMDczeF9jaGFuX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7XG4gaW50IHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpO1xuIFxuJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuJiM0MztcdFx0XHQgIGJvb2wgbmV4dF9oeiwgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxuJiM0MztcdFx0XHQgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKTtcbiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCB0aW1lc3BlYzY0IHRzKTtcbiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuJiM0MztcdFx0XHQgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpO1xuJiM0MztpbnQgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4mIzQzO1x0XHRcdCAgICB1MTYgb3V0X21hc2ssIHMzMiBzdGVwX2N5Y2xlcywgYm9vbCB0b2Rfc3RlcCk7XG4mIzQzO1xuJiM0MztpbnQgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBvZmZzZXQpO1xuJiM0MztcbiYjNDM7aW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucyk7XG4mIzQzO1xuIC8qKlxuICAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfZ2V0IC0gZ2V0IGNhY2hlZCBkZl9vZmZzZXQgdnMgdHJhY2tlZCByZWZlcmVuY2VcbiAgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG5AQCAtMjAwLDYgJiM0MzsyMjAsMjEgQEAgc3RhdGljIGlubGluZSBib29sIHpsMzA3M3hfY2hhbl9tb2RlX2lzX3JlZmxvY2soY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcbiBcdHJldHVybiB6bDMwNzN4X2NoYW5fbW9kZV9nZXQoY2hhbikgPT0gWkxfRFBMTF9NT0RFX1JFRlNFTF9NT0RFX1JFRkxPQ0s7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllIC0gY2hlY2sgaWYgY2hhbm5lbCBtb2RlIHN1cHBvcnRzIFRJRSB3cml0ZVxuJiM0MzsgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG4mIzQzOyAqXG4mIzQzOyAqIFRJRSB3cml0ZSBpcyBzdXBwb3J0ZWQgaW4gQVVUTyBhbmQgUkVGTE9DSyBtb2RlcyByZWdhcmRsZXNzIG9mIGxvY2sgc3RhdGUuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogdHJ1ZSBpZiBUSUUgd3JpdGUgaXMgc3VwcG9ydGVkLCBmYWxzZSBvdGhlcndpc2VcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbFxuJiM0Mzt6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcbiYjNDM7e1xuJiM0MztcdHJldHVybiB6bDMwNzN4X2NoYW5fbW9kZV9pc19hdXRvKGNoYW4pIHx8XG4mIzQzO1x0XHR6bDMwNzN4X2NoYW5fbW9kZV9pc19yZWZsb2NrKGNoYW4pO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIHpsMzA3M3hfY2hhbl9pc19ob19yZWFkeSAtIGNoZWNrIGlmIGhvbGRvdmVyIGlzIHJlYWR5XG4gICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuQEAgLTIzMyw0ICYjNDM7MjY4LDE3IEBAIHN0YXRpYyBpbmxpbmUgdTggemwzMDczeF9jaGFuX3JlZnNlbF9yZWZfZ2V0KGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXG4gXHRyZXR1cm4gRklFTERfR0VUKFpMX0RQTExfUkVGU0VMX1NUQVRVU19SRUZTRUwsIGNoYW4tXHUwMDNlcmVmc2VsX3N0YXR1cyk7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX2lzX291dF9zdGVwcGVkIC0gY2hlY2sgaWYgb3V0cHV0IGlzIGluIHN0ZXAtdGltZSBtYXNrXG4mIzQzOyAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbiYjNDM7ICogQG91dDogb3V0cHV0IGluZGV4XG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogdHJ1ZSBpZiBvdXRwdXQgaXMgYWZmZWN0ZWQgYnkgc3RlcC10aW1lIG9wZXJhdGlvbnNcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbFxuJiM0Mzt6bDMwNzN4X2NoYW5faXNfb3V0X3N0ZXBwZWQoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiwgdTggb3V0KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuICEhKGNoYW4tXHUwMDNlb3V0X3N0ZXBfdGltZV9tYXNrIFx1MDAyNiBCSVQob3V0KSk7XG4mIzQzO31cbiYjNDM7XG4gI2VuZGlmIC8qIF9aTDMwNzNYX0NIQU5fSCAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1xuaW5kZXggN2Y1YWZhYWFlNjM0MmYuLmIyZjlmYzk3ZmQxYjY4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcbkBAIC0xMDMzLDYgJiM0MzsxMDMzLDE0IEBAIGludCB6bDMwNzN4X2Rldl9wcm9iZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxuIFx0ICogYW5kL29yIHBvbGxzIGFyZSByZXF1aXJlZCB0byBiZSBkb25lIGF0b21pY2FsbHkuXG4gXHQgKi9cbiBcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVx1MDAzZWRldiwgXHUwMDI2emxkZXYtXHUwMDNlbXVsdGlvcF9sb2NrKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIHJjLFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXG5cJiMzNDspO1xuJiM0MztcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVx1MDAzZWRldiwgXHUwMDI2emxkZXYtXHUwMDNlcGhhc2Vfc3RlcF9sb2NrKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIHJjLFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXG5cJiMzNDspO1xuJiM0MztcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVx1MDAzZWRldiwgXHUwMDI2emxkZXYtXHUwMDNldGllX2xvY2spO1xuIFx0aWYgKHJjKVxuIFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIHJjLFxuIFx0XHRcdFx0ICAgICBcJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcblwmIzM0Oyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oXG5pbmRleCA3OGRjMjA4ZjNlZWEyYS4uMmRjODM2ZDBjOGY2YjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaFxuQEAgLTI2LDYgJiM0MzsyNiwxMCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsO1xuICNkZWZpbmUgWkxfUE9MTF9IV1JFR19USU1FT1VUX1VTXHQoNTAgKiBVU0VDX1BFUl9NU0VDKVxuICNkZWZpbmUgWkxfUE9MTF9NQl9USU1FT1VUX1VTXHRcdCgzMCAqIFVTRUNfUEVSX01TRUMpXG4gI2RlZmluZSBaTF9QT0xMX1BIQVNFX0VSUl9USU1FT1VUX1VTXHQoNTAgKiBVU0VDX1BFUl9NU0VDKVxuJiM0MzsjZGVmaW5lIFpMX1BPTExfUEhBU0VfU1RFUF9USU1FT1VUX1VTXHQoMzAwMCAqIFVTRUNfUEVSX01TRUMpXG4mIzQzOyNkZWZpbmUgWkxfUE9MTF9USUVfV1JfVElNRU9VVF9VU1x0KDEwMDAgKiBVU0VDX1BFUl9NU0VDKVxuJiM0MzsjZGVmaW5lIFpMX1BPTExfVE9EX1JEX1RJTUVPVVRfVVNcdCgzMCAqIFVTRUNfUEVSX01TRUMpXG4mIzQzOyNkZWZpbmUgWkxfUE9MTF9UT0RfV1JfVElNRU9VVF9VU1x0KDEwMDAgKiBVU0VDX1BFUl9NU0VDKVxuIFxuIGVudW0gemwzMDczeF9mbGFncyB7XG4gXHRaTDMwNzNYX0ZMQUdfUkVGX1BIQVNFX0NPTVBfMzJfQklULFxuQEAgLTU1LDYgJiM0Mzs1OSw4IEBAIHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mbyB7XG4gICogQHJlZ21hcDogcmVnbWFwIHRvIGFjY2VzcyBkZXZpY2UgcmVnaXN0ZXJzXG4gICogQGluZm86IGRldGVjdGVkIGNoaXAgaW5mb1xuICAqIEBtdWx0aW9wX2xvY2s6IHRvIHNlcmlhbGl6ZSBtdWx0aXBsZSByZWdpc3RlciBvcGVyYXRpb25zXG4mIzQzOyAqIEB0aWVfbG9jazogdG8gc2VyaWFsaXplIFRJRSB3cml0ZSBvcGVyYXRpb25zXG4mIzQzOyAqIEBwaGFzZV9zdGVwX2xvY2s6IHRvIHNlcmlhbGl6ZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb25zXG4gICogQHJlZjogYXJyYXkgb2YgaW5wdXQgcmVmZXJlbmNlcyYjMzk7IGludmFyaWFudHNcbiAgKiBAb3V0OiBhcnJheSBvZiBvdXRzJiMzOTsgaW52YXJpYW50c1xuICAqIEBzeW50aDogYXJyYXkgb2Ygc3ludGhzJiMzOTsgaW52YXJpYW50c1xuQEAgLTcxLDYgJiM0Mzs3Nyw4IEBAIHN0cnVjdCB6bDMwNzN4X2RldiB7XG4gXHRzdHJ1Y3QgcmVnbWFwXHRcdFx0KnJlZ21hcDtcbiBcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mb1x0KmluZm87XG4gXHRzdHJ1Y3QgbXV0ZXhcdFx0XHRtdWx0aW9wX2xvY2s7XG4mIzQzO1x0c3RydWN0IG11dGV4XHRcdFx0dGllX2xvY2s7XG4mIzQzO1x0c3RydWN0IG11dGV4XHRcdFx0cGhhc2Vfc3RlcF9sb2NrO1xuIFxuIFx0LyogSW52YXJpYW50cyAqL1xuIFx0c3RydWN0IHpsMzA3M3hfcmVmXHRyZWZbWkwzMDczWF9OVU1fUkVGU107XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jXG5pbmRleCBkOTFmNTJiNThlYWUzNC4uNzQwMDFlNmQ0YTMyZjUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuY1xuQEAgLTIsNiAmIzQzOzIsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnVnLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jb250YWluZXJfb2YuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Rldl9wcmludGsuaFx1MDAzZVxuQEAgLTE0LDYgJiM0MzsxNSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwcmludGYuaFx1MDAzZVxuIFxuQEAgLTQyLDYgJiM0Mzs0NCw3IEBAXG4gICogQHBoYXNlX29mZnNldDogbGFzdCBzYXZlZCBwaW4gcGhhc2Ugb2Zmc2V0XG4gICogQGZyZXFfb2Zmc2V0OiBsYXN0IHNhdmVkIGZyYWN0aW9uYWwgZnJlcXVlbmN5IG9mZnNldFxuICAqIEBtZWFzdXJlZF9mcmVxOiBsYXN0IHNhdmVkIG1lYXN1cmVkIGZyZXF1ZW5jeVxuJiM0MzsgKiBAcGVyb3V0X2lkeDogUFRQIHBlcm91dCBjaGFubmVsIGluZGV4LCBvciAtMSBpZiBub3QgcGVyb3V0LWVsaWdpYmxlXG4gICovXG4gc3RydWN0IHpsMzA3M3hfZHBsbF9waW4ge1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0bGlzdDtcbkBAIC01OSw2ICYjNDM7NjIsNyBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiB7XG4gXHRzNjRcdFx0XHRwaGFzZV9vZmZzZXQ7XG4gXHRzNjRcdFx0XHRmcmVxX29mZnNldDtcbiBcdHUzMlx0XHRcdG1lYXN1cmVkX2ZyZXE7XG4mIzQzO1x0czhcdFx0XHRwZXJvdXRfaWR4O1xuIH07XG4gXG4gLypcbkBAIC05MzYsMjEgJiM0Mzs5NDAsMTcgQEAgemwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxuIH1cbiBcbiBzdGF0aWMgaW50XG4temwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxuLVx0XHRcdFx0ICAgICAgdm9pZCAqcGluX3ByaXYsXG4tXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXG4tXHRcdFx0XHQgICAgICB2b2lkICpkcGxsX3ByaXYsIHU2NCBmcmVxdWVuY3ksXG4tXHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzQzO19femwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldChzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluLFxuJiM0MztcdFx0XHRcdFx0dTY0IGZyZXF1ZW5jeSlcbiB7XG4tXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBkcGxsX3ByaXY7XG4gXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbi1cdHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4gPSBwaW5fcHJpdjtcbiBcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X3N5bnRoICpzeW50aDtcbiBcdHUzMiBuZXdfZGl2LCBzeW50aF9mcmVxO1xuIFx0c3RydWN0IHpsMzA3M3hfb3V0IG91dDtcbiBcdHU4IG91dF9pZDtcbiBcbi1cdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4gXG4gXHRvdXRfaWQgPSB6bDMwNzN4X291dHB1dF9waW5fb3V0X2dldChwaW4tXHUwMDNlaWQpO1xuIFx0b3V0ID0gKnpsMzA3M3hfb3V0X3N0YXRlX2dldCh6bGRldiwgb3V0X2lkKTtcbkBAIC0xMDExLDYgJiM0MzsxMDExLDIxIEBAIHpsMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3BpbixcbiBcdHJldHVybiB6bDMwNzN4X291dF9zdGF0ZV9zZXQoemxkZXYsIG91dF9pZCwgXHUwMDI2b3V0KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7emwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxuJiM0MztcdFx0XHRcdCAgICAgIHZvaWQgKnBpbl9wcml2LFxuJiM0MztcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcbiYjNDM7XHRcdFx0XHQgICAgICB2b2lkICpkcGxsX3ByaXYsIHU2NCBmcmVxdWVuY3ksXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gZHBsbF9wcml2O1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gX196bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfc2V0KHpsZHBsbCwgcGluX3ByaXYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBmcmVxdWVuY3kpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnRcbiB6bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9waGFzZV9hZGp1c3RfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXG4gXHRcdFx0XHRcdCB2b2lkICpwaW5fcHJpdixcbkBAIC0xNjA4LDYgJiM0MzsxNjIzLDcgQEAgemwzMDczeF9kcGxsX3Bpbl9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwsIGVudW0gZHBsbF9waW5fZGlyZWN0aW9uIGRpcixcbiBcdHBpbi1cdTAwM2VkcGxsID0gemxkcGxsO1xuIFx0cGluLVx1MDAzZWRpciA9IGRpcjtcbiBcdHBpbi1cdTAwM2VpZCA9IGlkO1xuJiM0MztcdHBpbi1cdTAwM2VwZXJvdXRfaWR4ID0gLTE7XG4gXG4gXHRyZXR1cm4gcGluO1xuIH1cbkBAIC0xNjI2LDYgJiM0MzsxNjQyLDQ0IEBAIHpsMzA3M3hfZHBsbF9waW5fZnJlZShzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluKVxuIFx0a2ZyZWUocGluKTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcGluX2lzX3Blcm91dCAtIGNoZWNrIGlmIG91dHB1dCBwaW4gaXMgcGVyb3V0LWVsaWdpYmxlXG4mIzQzOyAqIEBwaW46IERQTEwgcGluIHRvIGNoZWNrXG4mIzQzOyAqIEBwcm9wczogcGluIHByb3BlcnRpZXMgKGFscmVhZHkgZmV0Y2hlZCBieSBjYWxsZXIpXG4mIzQzOyAqXG4mIzQzOyAqIEFuIG91dHB1dCBwaW4gaXMgZWxpZ2libGUgZm9yIFBUUCBwZXJpb2RpYyBvdXRwdXQgaWYgaXQgaXMgc2luZ2xlLWVuZGVkXG4mIzQzOyAqIChub3QgZGlmZmVyZW50aWFsKSBhbmQgc3VwcG9ydHMgMSBIeiBpbiBpdHMgZnJlcXVlbmN5IGxpc3QuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogdHJ1ZSBpZiBlbGlnaWJsZSwgZmFsc2Ugb3RoZXJ3aXNlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgYm9vbFxuJiM0Mzt6bDMwNzN4X2RwbGxfcGluX2lzX3Blcm91dChzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluLFxuJiM0MztcdFx0XHQgICBjb25zdCBzdHJ1Y3QgemwzMDczeF9waW5fcHJvcHMgKnByb3BzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gcGluLVx1MDAzZWRwbGw7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjtcbiYjNDM7XHR1OCBvdXRfaWQ7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGlmICh6bDMwNzN4X2RwbGxfaXNfaW5wdXRfcGluKHBpbikpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdG91dF9pZCA9IHpsMzA3M3hfb3V0cHV0X3Bpbl9vdXRfZ2V0KHBpbi1cdTAwM2VpZCk7XG4mIzQzO1x0aWYgKHpsMzA3M3hfZGV2X291dF9pc19kaWZmKHpsZHBsbC1cdTAwM2VkZXYsIG91dF9pZCkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCk7XG4mIzQzO1x0aWYgKCF6bDMwNzN4X2NoYW5faXNfb3V0X3N0ZXBwZWQoY2hhbiwgb3V0X2lkKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcHJvcHMtXHUwMDNlZHBsbF9wcm9wcy5mcmVxX3N1cHBvcnRlZF9udW07IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAocHJvcHMtXHUwMDNlZHBsbF9wcm9wcy5mcmVxX3N1cHBvcnRlZFtpXS5taW4gPT0gMSlcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogemwzMDczeF9kcGxsX3Bpbl9yZWdpc3RlciAtIHJlZ2lzdGVyIERQTEwgcGluXG4gICogQHBpbjogcG9pbnRlciB0byBEUExMIHBpblxuQEAgLTE2NjcsNiAmIzQzOzE3MjEsOCBAQCB6bDMwNzN4X2RwbGxfcGluX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4sIHUzMiBpbmRleClcbiBcdFx0aWYgKHBpbi1cdTAwM2VwcmlvID09IFpMX0RQTExfUkVGX1BSSU9fTk9ORSlcbiBcdFx0XHQvKiBDbGFtcCBwcmlvIHRvIG1heCB2YWx1ZSAqL1xuIFx0XHRcdHBpbi1cdTAwM2VwcmlvID0gWkxfRFBMTF9SRUZfUFJJT19NQVg7XG4mIzQzO1x0fSBlbHNlIGlmICh6bDMwNzN4X2RwbGxfcGluX2lzX3Blcm91dChwaW4sIHByb3BzKSkge1xuJiM0MztcdFx0cGluLVx1MDAzZXBlcm91dF9pZHggPSB6bGRwbGwtXHUwMDNlcHRwX2luZm8ubl9wZXJfb3V0JiM0MzsmIzQzOztcbiBcdH1cbiBcbiBcdC8qIENyZWF0ZSBvciBnZXQgZXhpc3RpbmcgRFBMTCBwaW4gKi9cbkBAIC0xODk3LDYgJiM0MzsxOTUzLDggQEAgemwzMDczeF9kcGxsX3BpbnNfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIFx0dTggaWQsIGluZGV4O1xuIFx0aW50IHJjO1xuIFxuJiM0MztcdHpsZHBsbC1cdTAwM2VwdHBfaW5mby5uX3Blcl9vdXQgPSAwO1xuJiM0MztcbiBcdC8qIFByb2Nlc3MgaW5wdXQgcGlucyAqL1xuIFx0Zm9yIChpbmRleCA9IDA7IGluZGV4IFx1MDAzYyBaTDMwNzNYX05VTV9QSU5TOyBpbmRleCYjNDM7JiM0MzspIHtcbiBcdFx0LyogRmlyc3QgaW5wdXQgcGlucyBhbmQgdGhlbiBvdXRwdXQgcGlucyAqL1xuQEAgLTIyODAsNDUgJiM0MzsyMzM4LDQ0NyBAQCB6bDMwNzN4X2RwbGxfaW5pdF9maW5lX3BoYXNlX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxuIFx0cmV0dXJuIHJjO1xuIH1cbiBcbiYjNDM7LyogTWF4aW11bSBmcmVxdWVuY3kgYWRqdXN0bWVudDogJiM0MzstMSUgb2Ygbm9taW5hbCBpbiBwcGIgKi9cbiYjNDM7I2RlZmluZSBaTDMwNzNYX0RQTExfUFRQX01BWF9BREpcdDEwMDAwMDAwXG4mIzQzO1xuIC8qKlxuLSAqIHpsMzA3M3hfZHBsbF9hbGxvYyAtIGFsbG9jYXRlIERQTEwgZGV2aWNlXG4tICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4tICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyXG4mIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCAtIHJlYWQgY3VycmVudCB0aW1lIGZyb20gVG9EIGNvdW50ZXJzXG4mIzQzOyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xuJiM0MzsgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIGN1cnJlbnQgdGltZVxuJiM0MzsgKiBAc3RzOiBvcHRpb25hbCBzeXN0ZW0gdGltZXN0YW1wIHBhaXIgZm9yIGNyb3NzLXRpbWVzdGFtcGluZ1xuICAqXG4tICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIHB0cF9pbmZvKTtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRwbGwtXHUwMDNlZGV2LCB6bGRwbGwtXHUwMDNlaWQsIGZhbHNlLCB0cywgc3RzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0IC0gc2V0IFRvRCBjb3VudGVycyB0byBnaXZlbiB0aW1lXG4mIzQzOyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xuJiM0MzsgKiBAdHM6IHRpbWVzcGVjIHdpdGggdGltZSB0byBzZXRcbiAgKlxuLSAqIFJldHVybjogcG9pbnRlciB0byBEUExMIGRldmljZSBvbiBzdWNjZXNzLCBlcnJvciBwb2ludGVyIG9uIGVycm9yXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4gICovXG4tc3RydWN0IHpsMzA3M3hfZHBsbCAqXG4temwzMDczeF9kcGxsX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKVxuJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcbiYjNDM7XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpXG4ge1xuLVx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsO1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxuJiM0MztcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4gXG4tXHR6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTtcbi1cdGlmICghemxkcGxsKVxuLVx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuIFxuLVx0emxkcGxsLVx1MDAzZWRldiA9IHpsZGV2O1xuLVx0emxkcGxsLVx1MDAzZWlkID0gY2g7XG4tXHRtdXRleF9pbml0KFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbi1cdElOSVRfTElTVF9IRUFEKFx1MDAyNnpsZHBsbC1cdTAwM2VwaW5zKTtcbiYjNDM7XHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF93cml0ZSh6bGRwbGwtXHUwMDNlZGV2LCB6bGRwbGwtXHUwMDNlaWQsICp0cyk7XG4mIzQzO31cbiBcbi1cdHJldHVybiB6bGRwbGw7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCAtIGFkanVzdCBzdWItc2Vjb25kIHRpbWUgdmlhIHBoYXNlIHN0ZXBcbiYjNDM7ICogQHpsZHBsbDogRFBMTCBjaGFubmVsXG4mIzQzOyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzIChtdXN0IGJlIHdpdGhpbiAoLU5TRUNfUEVSX1NFQyxcbiYjNDM7ICogICAgICAgICBOU0VDX1BFUl9TRUMpKVxuJiM0MzsgKlxuJiM0MzsgKiBVc2VzIHRoZSBvdXRwdXQgcGhhc2Ugc3RlcCBtZWNoYW5pc20gd2l0aCB0b2Rfc3RlcD0xIHRvIGFkanVzdCBib3RoXG4mIzQzOyAqIHRoZSBvdXRwdXQgY2xvY2sgcGhhc2UgYW5kIHRoZSBUb0QgY291bnRlciBzaW11bHRhbmVvdXNseS4gVGhpcyBrZWVwc1xuJiM0MzsgKiBvdXRwdXRzIGFuZCBUb0QgY29oZXJlbnQuIE9ubHkgdmFsaWQgaW4gTkNPIG1vZGUuXG4mIzQzOyAqXG4mIzQzOyAqIE91dHB1dHMgYXJlIGdyb3VwZWQgYnkgc3ludGhlc2l6ZXIgc2luY2UgdGhlIHBoYXNlIHN0ZXAgdmFsdWUgaXMgaW5cbiYjNDM7ICogc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzLiBUaGUgZmlyc3Qgc3ludGggZ3JvdXAgd2l0aCBlbmFibGVkIG91dHB1dHNcbiYjNDM7ICogdXNlcyB0b2Rfc3RlcCB0byBhZGp1c3QgYm90aCBvdXRwdXRzIGFuZCB0aGUgVG9EIGNvdW50ZXIuIFJlbWFpbmluZ1xuJiM0MzsgKiBncm91cHMgc3RlcCBvdXRwdXRzIG9ubHkuIElmIG5vIHN5bnRoIGhhcyBlbmFibGVkIG91dHB1dHMsIHRoZSBUb0RcbiYjNDM7ICogY291bnRlciBpcyBzdGVwcGVkIGFsb25lIHVzaW5nIGFuIGVtcHR5IG91dHB1dCBtYXNrICh0aGUgRlcgdXNlcyB0aGVcbiYjNDM7ICogbG93ZXN0LUlEIHN5bnRoJiMzOTtzIHBlcmlvZCBmb3IgdGhlIGNvbnZlcnNpb24pLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVPUE5PVFNVUFAgaWYgbm8gc3ludGhzIGF2YWlsYWJsZSwgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgczY0IGRlbHRhKVxuJiM0Mzt7XG4mIzQzO1x0dTE2IHN5bnRoX21hc2tbWkwzMDczWF9OVU1fU1lOVEhTXSA9IHt9O1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuJiM0MztcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X3N5bnRoICpzeW50aDtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW47XG4mIzQzO1x0dTMyIGZpcnN0X3N5bnRoX2ZyZXEgPSAwO1xuJiM0MztcdGJvb2wgdG9kX3N0ZXBwZWQgPSBmYWxzZTtcbiYjNDM7XHRzMzIgc3RlcF9jeWNsZXM7XG4mIzQzO1x0dTMyIHN5bnRoX2ZyZXE7XG4mIzQzO1x0aW50IHJjO1xuJiM0MztcdHU4IGk7XG4mIzQzO1xuJiM0MztcdGNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQpO1xuJiM0MztcbiYjNDM7XHQvKiBCdWlsZCBwZXItc3ludGggb3V0cHV0IG1hc2tzIGZyb20gcmVnaXN0ZXJlZCBvdXRwdXQgcGlucyAqL1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnkocGluLCBcdTAwMjZ6bGRwbGwtXHUwMDNlcGlucywgbGlzdCkge1xuJiM0MztcdFx0dTggb3V0X2lkLCBzeW50aF9pZDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoemwzMDczeF9kcGxsX2lzX2lucHV0X3BpbihwaW4pKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRvdXRfaWQgPSB6bDMwNzN4X291dHB1dF9waW5fb3V0X2dldChwaW4tXHUwMDNlaWQpO1xuJiM0MztcbiYjNDM7XHRcdGlmICghemwzMDczeF9jaGFuX2lzX291dF9zdGVwcGVkKGNoYW4sIG91dF9pZCkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdHN5bnRoX2lkID0gemwzMDczeF9kZXZfb3V0X3N5bnRoX2dldCh6bGRldiwgb3V0X2lkKTtcbiYjNDM7XHRcdGlmIChzeW50aF9pZCBcdTAwM2U9IFpMMzA3M1hfTlVNX1NZTlRIUykge1xuJiM0MztcdFx0XHRkZXZfd2Fybih6bGRldi1cdTAwM2VkZXYsIFwmIzM0O1VuZXhwZWN0ZWQgc3ludGggaWQgZm9yIE9VVCV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCBvdXRfaWQpO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHN5bnRoX21hc2tbc3ludGhfaWRdIHw9IEJJVChvdXRfaWQpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogUHJvY2VzcyBlYWNoIHN5bnRoIGdyb3VwICovXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgWkwzMDczWF9OVU1fU1lOVEhTOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3ludGggPSB6bDMwNzN4X3N5bnRoX3N0YXRlX2dldCh6bGRldiwgaSk7XG4mIzQzO1x0XHRpZiAoIXpsMzA3M3hfc3ludGhfaXNfZW5hYmxlZChzeW50aCkgfHxcbiYjNDM7XHRcdCAgICB6bDMwNzN4X3N5bnRoX2RwbGxfZ2V0KHN5bnRoKSAhPSB6bGRwbGwtXHUwMDNlaWQpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdHN5bnRoX2ZyZXEgPSB6bDMwNzN4X3N5bnRoX2ZyZXFfZ2V0KHN5bnRoKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBSZW1lbWJlciBsb3dlc3QtSUQgc3ludGggZnJlcSBmb3IgVG9ELW9ubHkgZmFsbGJhY2sgKi9cbiYjNDM7XHRcdGlmICghZmlyc3Rfc3ludGhfZnJlcSlcbiYjNDM7XHRcdFx0Zmlyc3Rfc3ludGhfZnJlcSA9IHN5bnRoX2ZyZXE7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFzeW50aF9tYXNrW2ldKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBTYWZlIGZvciBzMzI6IG1heCBzeW50aCBmcmVxIGlzIDc1MCBNSHogKi9cbiYjNDM7XHRcdHN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIHN5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7XG4mIzQzO1xuJiM0MztcdFx0cmMgPSB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLFxuJiM0MztcdFx0XHRcdFx0ICAgICBzeW50aF9tYXNrW2ldLCBzdGVwX2N5Y2xlcyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIXRvZF9zdGVwcGVkKTtcbiYjNDM7XHRcdGlmIChyYykge1xuJiM0MztcdFx0XHRpZiAodG9kX3N0ZXBwZWQpIHtcbiYjNDM7XHRcdFx0XHRkZXZfd2Fybih6bGRldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0XHQgXCYjMzQ7UGFydGlhbCBwaGFzZSBzdGVwIGZhaWx1cmVcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdHJldHVybiByYztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHRvZF9zdGVwcGVkID0gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghZmlyc3Rfc3ludGhfZnJlcSlcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0LyogTm8gZW5hYmxlZCBvdXRwdXRzIGZvdW5kOyBzdGVwIFRvRCBjb3VudGVyIG9ubHkgdXNpbmcgdGhlXG4mIzQzO1x0ICogbG93ZXN0LUlEIHN5bnRoJiMzOTtzIHBlcmlvZCAoZW1wdHkgb3V0cHV0IG1hc2spLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghdG9kX3N0ZXBwZWQpIHtcbiYjNDM7XHRcdHN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIGZpcnN0X3N5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7XG4mIzQzO1x0XHRyZXR1cm4gemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCwgMCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBzdGVwX2N5Y2xlcywgdHJ1ZSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gLyoqXG4tICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlXG4tICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXG4mIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSAtIGFkanVzdCBQVFAgY2xvY2sgdGltZVxuJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbiYjNDM7ICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHNcbiAgKlxuLSAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuXG4mIzQzOyAqIEluIE5DTyBtb2RlLCBsYXJnZSBkZWx0YXMgKFx1MDAzZT0gMSBzZWNvbmQpIGFyZSBzcGxpdCBpbnRvIGEgVG9EXG4mIzQzOyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciB0aGUgc2Vjb25kcyBwYXJ0IGFuZCBhbiBvdXRwdXQgcGhhc2Ugc3RlcCBmb3JcbiYjNDM7ICogdGhlIHN1Yi1zZWNvbmQgcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgcGhhc2Ugc3RlcCBkaXJlY3RseSxcbiYjNDM7ICogZmFsbGluZyBiYWNrIHRvIFRvRCByZWFkLW1vZGlmeS13cml0ZSBpZiBwaGFzZSBzdGVwIGlzIHVuYXZhaWxhYmxlLlxuJiM0MzsgKiBJbiBBVVRPL1JFRkxPQ0sgbW9kZXMsIGxhcmdlIGRlbHRhcyBhcmUgc3BsaXQgaW50byBUb0RcbiYjNDM7ICogcmVhZC1tb2RpZnktd3JpdGUgZm9yIHNlY29uZHMgYW5kIFRJRSB3cml0ZSBmb3IgdGhlIHN1Yi1zZWNvbmRcbiYjNDM7ICogcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgVElFIHdyaXRlIGRpcmVjdGx5LlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuICAqL1xuLXZvaWRcbi16bDMwNzN4X2RwbGxfZnJlZShzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4mIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczY0IGRlbHRhKVxuIHtcbi1cdFdBUk4oemxkcGxsLVx1MDAzZWRwbGxfZGV2LCBcJiMzNDtEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuJiM0MztcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XG4mIzQzO1x0Ym9vbCBzZWNfYWRqdXN0ZWQgPSBmYWxzZTtcbiYjNDM7XHRzdHJ1Y3QgdGltZXNwZWM2NCB0cztcbiYjNDM7XHRpbnQgcmM7XG4gXG4tXHRtdXRleF9kZXN0cm95KFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbi1cdGtmcmVlKHpsZHBsbCk7XG4mIzQzO1x0aWYgKCFkZWx0YSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHQvKiBNb2RlcyB3aXRob3V0IHBoYXNlIHN0ZXAgb3IgVElFIHVzZSBwbGFpbiBUb0QgYWRqdXN0ICovXG4mIzQzO1x0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCk7XG4mIzQzO1x0aWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICF6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY2hhbikpXG4mIzQzO1x0XHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBuc190b190aW1lc3BlYzY0KGRlbHRhKSk7XG4mIzQzO1xuJiM0MztcdC8qIFNwbGl0IG9mZiBzZWNvbmRzIHZpYSBUb0QgcmVhZC1tb2RpZnktd3JpdGUgc28gdGhlIHN1Yi1zZWNvbmRcbiYjNDM7XHQgKiByZW1haW5kZXIgY2FuIGJlIGFwcGxpZWQgdGhyb3VnaCB0aGUgb3V0cHV0LWNvaGVyZW50IG1lY2hhbmlzbVxuJiM0MztcdCAqIChwaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSkuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGFicyhkZWx0YSkgXHUwMDNlPSBOU0VDX1BFUl9TRUMpIHtcbiYjNDM7XHRcdHMzMiByZW1haW5kZXI7XG4mIzQzO1xuJiM0MztcdFx0dHMudHZfc2VjID0gZGl2X3M2NF9yZW0oZGVsdGEsIE5TRUNfUEVSX1NFQywgXHUwMDI2cmVtYWluZGVyKTtcbiYjNDM7XHRcdHRzLnR2X25zZWMgPSAwO1xuJiM0MztcdFx0ZGVsdGEgPSByZW1haW5kZXI7XG4mIzQzO1xuJiM0MztcdFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCB0cyk7XG4mIzQzO1x0XHRpZiAocmMpXG4mIzQzO1x0XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0XHRzZWNfYWRqdXN0ZWQgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRcdC8qIE5vIHN1Yi1zZWNvbmQgcmVtYWluZGVyLCBkb25lICovXG4mIzQzO1x0XHRpZiAoIWRlbHRhKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEFwcGx5IHN1Yi1zZWNvbmQgZGVsdGEgdmlhIHBoYXNlIHN0ZXAgKE5DTykgb3IgVElFIHdyaXRlICovXG4mIzQzO1x0aWYgKHpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSkge1xuJiM0MztcdFx0cmMgPSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCh6bGRwbGwsIGRlbHRhKTtcbiYjNDM7XHRcdGlmICghcmMpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyYyA9IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCwgZGVsdGEpO1xuJiM0MztcdFx0aWYgKCFyYylcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBQaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSBmYWlsZWQsIGZhbGwgYmFjayB0byBUb0QgYWRqdXN0ICovXG4mIzQzO1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLFxuJiM0MztcdFx0XHRcdCAgICAgbnNfdG9fdGltZXNwZWM2NChkZWx0YSkpO1xuJiM0MztcbiYjNDM7XHQvKiBJbiB0aGUgdW5saWtlbHkgZXZlbnQgdGhhdCBib3RoIHBoYXNlIHN0ZXAvVElFIHdyaXRlIGFuZCBmYWxsYmFja1xuJiM0MztcdCAqIFRvRCBhZGp1c3QgZmFpbCBhZnRlciBzZWNvbmRzIHdlcmUgYWxyZWFkeSBjb21taXR0ZWQsIHJldHVyblxuJiM0MztcdCAqIHN1Y2Nlc3MgdG8gcHJldmVudCB0aGUgUFRQIHNlcnZvIGZyb20gcmV0cnlpbmcgdGhlIGZ1bGwgZGVsdGEgYW5kXG4mIzQzO1x0ICogYXBwbHlpbmcgc2Vjb25kcyBhZ2Fpbi4gVGhlIHN1Yi1zZWNvbmQgcmVzaWR1YWwgd2lsbCBzZWxmLWNvcnJlY3RcbiYjNDM7XHQgKiBpbiB0aGUgbmV4dCBzZXJ2byBjeWNsZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocmMgXHUwMDI2XHUwMDI2IHNlY19hZGp1c3RlZCkge1xuJiM0MztcdFx0ZGV2X3dhcm4oemxkZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHQgXCYjMzQ7U3ViLXNlY29uZCBhZGp1c3RtZW50IGZhaWxlZCBhZnRlciBzZWNvbmRzIGFwcGxpZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUgLSBhZGp1c3QgUFRQIGNsb2NrIGZyZXF1ZW5jeVxuJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbiYjNDM7ICogQHNjYWxlZF9wcG06IGZyZXF1ZW5jeSBhZGp1c3RtZW50IGluIHNjYWxlZCBwcG0gKHBwbSAqIDJeMTYpXG4mIzQzOyAqXG4mIzQzOyAqIE9ubHkgc3VwcG9ydGVkIGluIE5DTyBtb2RlLiBXcml0ZXMgdGhlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgcmVnaXN0ZXIuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRU9QTk9UU1VQUCBpZiBub3QgaW4gTkNPIG1vZGUsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7emwzMDczeF9kcGxsX3B0cF9hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgbG9uZyBzY2FsZWRfcHBtKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIHB0cF9pbmZvKTtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xuJiM0MztcdHM2NCBvZmZzZXQ7XG4mIzQzO1xuJiM0MztcdC8qIENvbnZlcnQgc2NhbGVkX3BwbSB0byBkZl9vZmZzZXQgaW4gMl4tNDggc3RlcHM6XG4mIzQzO1x0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjMyKSAvIDEwXjZcbiYjNDM7XHQgKlxuJiM0MztcdCAqIFNpbXBsaWZ5IHRvIGF2b2lkIG92ZXJmbG93OlxuJiM0MztcdCAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogMl4yNikgLyA1XjZcbiYjNDM7XHQgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDY3MTA4ODY0KSAvIDE1NjI1XG4mIzQzO1x0ICovXG4mIzQzO1x0b2Zmc2V0ID0gLWRpdl9zNjQoKHM2NClzY2FsZWRfcHBtICogNjcxMDg4NjRMTCwgMTU2MjUpO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRwbGwtXHUwMDNlZGV2LCB6bGRwbGwtXHUwMDNlaWQpO1xuJiM0MztcdGlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKVxuJiM0MztcdFx0cmV0dXJuIHNjYWxlZF9wcG0gPyAtRU9QTk9UU1VQUCA6IDA7XG4mIzQzO1x0aWYgKG9mZnNldCA9PSBjaGFuLVx1MDAzZWRmX29mZnNldClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoemxkcGxsLVx1MDAzZWRldiwgemxkcGxsLVx1MDAzZWlkLCBvZmZzZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSAtIGFkanVzdCBQVFAgY2xvY2sgcGhhc2VcbiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4mIzQzOyAqIEBkZWx0YTogcGhhc2UgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kc1xuJiM0MzsgKlxuJiM0MzsgKiBPbmx5IHN1cHBvcnRlZCBpbiBBVVRPIGFuZCBSRUZMT0NLIG1vZGVzLiBVc2VzIFRJRSB3cml0ZSBmb3JcbiYjNDM7ICogbmFub3NlY29uZCByZXNvbHV0aW9uIHBoYXNlIGFkanVzdG1lbnQuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRU9QTk9UU1VQUCBpZiBtb2RlIGRvZXNuJiMzOTt0IHN1cHBvcnQgVElFLCBcdTAwM2MwIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2Uoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBzMzIgZGVsdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuJiM0MztcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XG4mIzQzO1xuJiM0MztcdGlmICghZGVsdGEpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCk7XG4mIzQzO1xuJiM0MztcdGlmICghemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gemwzMDczeF9jaGFuX3RpZV93cml0ZSh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCBkZWx0YSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzMzJcbiYjNDM7emwzMDczeF9kcGxsX3B0cF9nZXRtYXhwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8gX19hbHdheXNfdW51c2VkKVxuJiM0Mzt7XG4mIzQzO1x0LyogSFcgbGltaXRzIFRJRSB3cml0ZSB0byAmIzQzOy0xIHNlY29uZC4gUmV0dXJuIHRoZSBjb25zdGFudCBIV1xuJiM0MztcdCAqIGxpbWl0IGFuZCBsZXQgYWRqcGhhc2UgaGFuZGxlIG1vZGUtc3BlY2lmaWMgY2hlY2tzLlxuJiM0MztcdCAqL1xuJiM0MztcdHJldHVybiBOU0VDX1BFUl9TRUMgLSAxO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9wZXJvdXRfZmluZF9waW4gLSBmaW5kIHBpbiBieSBwZXJvdXQgY2hhbm5lbCBpbmRleFxuJiM0MzsgKiBAemxkcGxsOiBEUExMIGNoYW5uZWxcbiYjNDM7ICogQGlkeDogcGVyb3V0IGNoYW5uZWwgaW5kZXggdG8gZmluZFxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IHBvaW50ZXIgdG8gdGhlIHBpbiwgb3IgTlVMTCBpZiBub3QgZm91bmRcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqXG4mIzQzO3psMzA3M3hfZHBsbF9wdHBfcGVyb3V0X2ZpbmRfcGluKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCwgaW50IGlkeClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW47XG4mIzQzO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnkocGluLCBcdTAwMjZ6bGRwbGwtXHUwMDNlcGlucywgbGlzdCkge1xuJiM0MztcdFx0aWYgKHBpbi1cdTAwM2VwZXJvdXRfaWR4ID09IGlkeClcbiYjNDM7XHRcdFx0cmV0dXJuIHBpbjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9lbmFibGUgLSBlbmFibGUvZGlzYWJsZSBQVFAgY2xvY2sgZnVuY3Rpb25zXG4mIzQzOyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xuJiM0MzsgKiBAcnE6IHRoZSByZXF1ZXN0ZWQgY2xvY2sgZnVuY3Rpb24gYW5kIHBhcmFtZXRlcnNcbiYjNDM7ICogQG9uOiB0cnVlIHRvIGVuYWJsZSwgZmFsc2UgdG8gZGlzYWJsZVxuJiM0MzsgKlxuJiM0MzsgKiBIYW5kbGVzIFBUUF9DTEtfUkVRX1BFUk9VVCByZXF1ZXN0cy4gT25seSAxUFBTIChwZXJpb2QgPSAxcykgaXMgc3VwcG9ydGVkLlxuJiM0MzsgKiBPbiBlbmFibGUsIGNvbmZpZ3VyZXMgdGhlIG91dHB1dCBkaXZpZGVyIGZvciAxIEh6LiBPbiBkaXNhYmxlLCBkb2VzIG5vdGhpbmdcbiYjNDM7ICogYXMgdGhlIHNpZ25hbCBpcyBub3QgZGlzYWJsZWQuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfZW5hYmxlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3QgcHRwX2Nsb2NrX3JlcXVlc3QgKnJxLCBpbnQgb24pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW47XG4mIzQzO1x0dW5zaWduZWQgaW50IGlkeDtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdGlmIChycS1cdTAwM2V0eXBlICE9IFBUUF9DTEtfUkVRX1BFUk9VVClcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0aWR4ID0gcnEtXHUwMDNlcGVyb3V0LmluZGV4O1xuJiM0MztcdGlmIChpZHggXHUwMDNlPSBpbmZvLVx1MDAzZW5fcGVyX291dClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHQvKiBUb2dnbGluZyBvdXRwdXQgcGlucyBjYW4gcHJvZHVjZSBydW50IHB1bHNlcywgc28gZGlzYWJsZVxuJiM0MztcdCAqIGlzIGEgbm8tb3AuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFvbilcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHQvKiBPbmx5IGFjY2VwdCBleGFjdGx5IDFQUFMgKHBlcmlvZC5zZWMgPT0gMSwgbnNlYyA9PSAwKSAqL1xuJiM0MztcdGlmIChycS1cdTAwM2VwZXJvdXQucGVyaW9kLnNlYyAhPSAxIHx8IHJxLVx1MDAzZXBlcm91dC5wZXJpb2QubnNlYyAhPSAwKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRwaW4gPSB6bDMwNzN4X2RwbGxfcHRwX3Blcm91dF9maW5kX3Bpbih6bGRwbGwsIGlkeCk7XG4mIzQzO1x0aWYgKCFwaW4pIHtcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEFscmVhZHkgYXQgMSBIeiwgbm90aGluZyB0byBkbyAqL1xuJiM0MztcdGlmICh6bDMwNzN4X2Rldl9vdXRwdXRfcGluX2ZyZXFfZ2V0KHpsZHBsbC1cdTAwM2VkZXYsIHBpbi1cdTAwM2VpZCkgPT0gMSkge1xuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmMgPSBfX3psMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoemxkcGxsLCBwaW4sIDEpO1xuJiM0MztcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAoIXJjKVxuJiM0MztcdFx0ZHBsbF9waW5fY2hhbmdlX250ZihwaW4tXHUwMDNlZHBsbF9waW4pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvID0ge1xuJiM0MztcdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuJiM0MztcdC5tYXhfYWRqXHQ9IFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESixcbiYjNDM7XHQuZ2V0dGltZXg2NFx0PSB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQsXG4mIzQzO1x0LnNldHRpbWU2NFx0PSB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCxcbiYjNDM7XHQuYWRqdGltZVx0PSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUsXG4mIzQzO1x0LmFkamZpbmVcdD0gemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lLFxuJiM0MztcdC5hZGpwaGFzZVx0PSB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlLFxuJiM0MztcdC5nZXRtYXhwaGFzZVx0PSB6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlLFxuJiM0MztcdC5lbmFibGVcdFx0PSB6bDMwNzN4X2RwbGxfcHRwX2VuYWJsZSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBhIERQTEwgY2hhbm5lbFxuJiM0MzsgKiBAemxkcGxsOiBEUExMIGNoYW5uZWwgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvclxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuJiM0MztcdHN0cnVjdCBwdHBfY2xvY2sgKnB0cF9jbG9jaztcbiYjNDM7XG4mIzQzO1x0c25wcmludGYoemxkcGxsLVx1MDAzZXB0cF9pbmZvLm5hbWUsIHNpemVvZih6bGRwbGwtXHUwMDNlcHRwX2luZm8ubmFtZSksXG4mIzQzO1x0XHQgXCYjMzQ7emwzMDczeC1kcGxsJXVcJiMzNDssIHpsZHBsbC1cdTAwM2VpZCk7XG4mIzQzO1xuJiM0MztcdHB0cF9jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcihcdTAwMjZ6bGRwbGwtXHUwMDNlcHRwX2luZm8sIHpsZGV2LVx1MDAzZWRldik7XG4mIzQzO1x0aWYgKElTX0VSUihwdHBfY2xvY2spKSB7XG4mIzQzO1x0XHRkZXZfZXJyKHpsZGV2LVx1MDAzZWRldiwgXCYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgRFBMTCV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR6bGRwbGwtXHUwMDNlaWQpO1xuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIocHRwX2Nsb2NrKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHpsZHBsbC1cdTAwM2VwdHBfY2xvY2sgPSBwdHBfY2xvY2s7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyIC0gdW5yZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsXG4mIzQzOyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byB1bnJlZ2lzdGVyIFBUUCBjbG9jayBmb3JcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIUlTX0VSUl9PUl9OVUxMKHpsZHBsbC1cdTAwM2VwdHBfY2xvY2spKSB7XG4mIzQzO1x0XHRwdHBfY2xvY2tfdW5yZWdpc3Rlcih6bGRwbGwtXHUwMDNlcHRwX2Nsb2NrKTtcbiYjNDM7XHRcdHpsZHBsbC1cdTAwM2VwdHBfY2xvY2sgPSBOVUxMO1xuJiM0MztcdH1cbiB9XG4gXG4gLyoqXG5AQCAtMjQwMyw2ICYjNDM7Mjg2Myw0OCBAQCB6bDMwNzN4X2RwbGxfcmVmX3N5bmNfcGFpcnNfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kcGxsX2FsbG9jIC0gYWxsb2NhdGUgRFBMTCBkZXZpY2VcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlclxuJiM0MzsgKlxuJiM0MzsgKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogcG9pbnRlciB0byBEUExMIGRldmljZSBvbiBzdWNjZXNzLCBlcnJvciBwb2ludGVyIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgemwzMDczeF9kcGxsICpcbiYjNDM7emwzMDczeF9kcGxsX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsO1xuJiM0MztcbiYjNDM7XHR6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTtcbiYjNDM7XHRpZiAoIXpsZHBsbClcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuJiM0MztcbiYjNDM7XHR6bGRwbGwtXHUwMDNlZGV2ID0gemxkZXY7XG4mIzQzO1x0emxkcGxsLVx1MDAzZWlkID0gY2g7XG4mIzQzO1x0emxkcGxsLVx1MDAzZXB0cF9pbmZvID0gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvO1xuJiM0MztcdG11dGV4X2luaXQoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcdElOSVRfTElTVF9IRUFEKFx1MDAyNnpsZHBsbC1cdTAwM2VwaW5zKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHpsZHBsbDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfZHBsbF9mcmVlIC0gZnJlZSBEUExMIGRldmljZVxuJiM0MzsgKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmVcbiYjNDM7ICpcbiYjNDM7ICogRGVhbGxvY2F0ZXMgZ2l2ZW4gRFBMTCBkZXZpY2UgcHJldmlvdXNseSBhbGxvY2F0ZWQgYnkgQHpsMzA3M3hfZHBsbF9hbGxvYy5cbiYjNDM7ICovXG4mIzQzO3ZvaWRcbiYjNDM7emwzMDczeF9kcGxsX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuJiM0Mzt7XG4mIzQzO1x0V0FSTih6bGRwbGwtXHUwMDNlZHBsbF9kZXYsIFwmIzM0O0RQTEwgZGV2aWNlIGlzIHN0aWxsIHJlZ2lzdGVyZWRcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRtdXRleF9kZXN0cm95KFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRrZnJlZSh6bGRwbGwpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIHpsMzA3M3hfZHBsbF9yZWdpc3RlciAtIHJlZ2lzdGVyIERQTEwgZGV2aWNlIGFuZCBhbGwgaXRzIHBpbnNcbiAgKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmVcbkBAIC0yNDMzLDYgJiM0MzsyOTM1LDEzIEBAIHpsMzA3M3hfZHBsbF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4gXHRcdHJldHVybiByYztcbiBcdH1cbiBcbiYjNDM7XHRyYyA9IHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIoemxkcGxsKTtcbiYjNDM7XHRpZiAocmMpIHtcbiYjNDM7XHRcdHpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTtcbiYjNDM7XHRcdHpsMzA3M3hfZHBsbF9kZXZpY2VfdW5yZWdpc3Rlcih6bGRwbGwpO1xuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMjQ0Niw3ICYjNDM7Mjk1NSw3IEBAIHpsMzA3M3hfZHBsbF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4gdm9pZFxuIHpsMzA3M3hfZHBsbF91bnJlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiB7XG4tXHQvKiBVbnJlZ2lzdGVyIGFsbCBwaW5zIGFuZCBkcGxsICovXG4mIzQzO1x0emwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHpsZHBsbCk7XG4gXHR6bDMwNzN4X2RwbGxfcGluc191bnJlZ2lzdGVyKHpsZHBsbCk7XG4gXHR6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXG5pbmRleCBmYWViYzQwMmJhMWI3MC4uOWI1ZjcyYzMzODQ5Y2UgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaFxuQEAgLTUsNiAmIzQzOzUsOCBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RwbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O2NvcmUuaFwmIzM0O1xuIFxuQEAgLTIyLDYgJiM0MzsyNCw4IEBAXG4gICogQHR5cGU6IERQTEwgdHlwZSAoUFBTIG9yIEVFQylcbiAgKiBAbG9ja19zdGF0dXM6IGxhc3Qgc2F2ZWQgRFBMTCBsb2NrIHN0YXR1c1xuICAqIEBwaW5zOiBsaXN0IG9mIHBpbnNcbiYjNDM7ICogQHB0cF9pbmZvOiBQVFAgY2xvY2sgaW5mb1xuJiM0MzsgKiBAcHRwX2Nsb2NrOiByZWdpc3RlcmVkIFBUUCBjbG9jayAob3IgTlVMTClcbiAgKi9cbiBzdHJ1Y3QgemwzMDczeF9kcGxsIHtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdFx0bGlzdDtcbkBAIC0zNiw2ICYjNDM7NDAsOCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsIHtcbiBcdGVudW0gZHBsbF90eXBlXHRcdFx0dHlwZTtcbiBcdGVudW0gZHBsbF9sb2NrX3N0YXR1c1x0XHRsb2NrX3N0YXR1cztcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdFx0cGlucztcbiYjNDM7XHRzdHJ1Y3QgcHRwX2Nsb2NrX2luZm9cdFx0cHRwX2luZm87XG4mIzQzO1x0c3RydWN0IHB0cF9jbG9ja1x0XHQqcHRwX2Nsb2NrO1xuIH07XG4gXG4gc3RydWN0IHpsMzA3M3hfZHBsbCAqemwzMDczeF9kcGxsX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhcbmluZGV4IGI3MGVhZDdkNDQ5NWIyLi40NDc3NTdlOTk4NDVkOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXG5AQCAtMTc5LDYgJiM0MzsxNzksMjAgQEBcbiAjZGVmaW5lIFpMX0RQTExfREZfUkVBRF9DTURcdFx0XHRHRU5NQVNLKDIsIDApXG4gI2RlZmluZSBaTF9EUExMX0RGX1JFQURfQ01EX0FDQ19JXHRcdDRcbiBcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTFx0XHRcdFpMX1JFRyg1LCAweDMwLCAxKVxuJiM0MzsjZGVmaW5lIFpMX0RQTExfVElFX0NUUkxfT1BcdFx0XHRHRU5NQVNLKDIsIDApXG4mIzQzOyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUF9XUlx0XHRcdDRcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0NUUkxfTUFTS1x0XHRaTF9SRUcoNSwgMHgzMSwgMSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX0NUUkwoX2lkeClcdFx0XHRcdFx0XFxcbiYjNDM7XHRaTF9SRUdfSURYKF9pZHgsIDUsIDB4MzgsIDEsIDgsIDEpXG4mIzQzOyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9TRU1cdFx0XHRCSVQoNClcbiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRFx0XHRcdEdFTk1BU0soMywgMClcbiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWlx0MVxuJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX0NVUlJFTlRcdDhcbiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9ORVhUXzFIWlx0OVxuJiM0MztcbiAjZGVmaW5lIFpMX1JFR19EUExMX01FQVNfQ1RSTFx0XHRcdFpMX1JFRyg1LCAweDUwLCAxKVxuICNkZWZpbmUgWkxfRFBMTF9NRUFTX0NUUkxfRU5cdFx0XHRCSVQoMClcbiAjZGVmaW5lIFpMX0RQTExfTUVBU19DVFJMX0FWR19GQUNUT1JcdFx0R0VOTUFTSyg3LCA0KVxuQEAgLTE5Myw2ICYjNDM7MjA3LDkgQEBcbiBcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAqIFJlZ2lzdGVyIFBhZ2VzIDYtNywgRFBMTCBEYXRhXG4mIzQzOyAqXG4mIzQzOyAqIFBlci1jaGFubmVsIHJlZ2lzdGVycyB3aXRoIHN0cmlkZSAweDIwLiBDaGFubmVscyAwLTMgcmVzaWRlIG9uIHBhZ2UgNixcbiYjNDM7ICogY2hhbm5lbCA0IG9uIHBhZ2UgNy5cbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiBcbiAjZGVmaW5lIFpMX1JFR19EUExMX0RGX09GRlNFVF8wMyhfaWR4KVx0XHRcdFx0XHRcXFxuQEAgLTIwMiw2ICYjNDM7MjE5LDI0IEBAXG4gXHQoKF9pZHgpIFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfREZfT0ZGU0VUXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfREZfT0ZGU0VUXzQpXG4gI2RlZmluZSBaTF9EUExMX0RGX09GRlNFVF9VTktOT1dOXHRTNjRfTUlOXG4gXG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEFfMDMoX2lkeClcdFx0XHRcdFx0XFxcbiYjNDM7XHRaTF9SRUdfSURYKF9pZHgsIDYsIDB4MEMsIDYsIDQsIDB4MjApXG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEFfNFx0XHRcdFpMX1JFRyg3LCAweDBDLCA2KVxuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBKF9pZHgpXHRcdFx0XHRcdFxcXG4mIzQzO1x0KChfaWR4KSBcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RJRV9EQVRBXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVElFX0RBVEFfNClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQ18wMyhfaWR4KVx0XHRcdFx0XHRcXFxuJiM0MztcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgxMiwgNiwgNCwgMHgyMClcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzRcdFx0XHRaTF9SRUcoNywgMHgxMiwgNilcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDKF9pZHgpXHRcdFx0XHRcdFxcXG4mIzQzO1x0KChfaWR4KSBcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RPRF9TRUNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfU0VDXzQpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU18wMyhfaWR4KVx0XHRcdFx0XHRcXFxuJiM0MztcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgxOCwgNCwgNCwgMHgyMClcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlNfNFx0XHRcdFpMX1JFRyg3LCAweDE4LCA0KVxuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OUyhfaWR4KVx0XHRcdFx0XHRcXFxuJiM0MztcdCgoX2lkeCkgXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9UT0RfTlNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfTlNfNClcbiYjNDM7XG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICogUmVnaXN0ZXIgUGFnZSA5LCBTeW50aCBhbmQgT3V0cHV0XG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuQEAgLTIyMSw2ICYjNDM7MjU2LDggQEBcbiAjZGVmaW5lIFpMX09VVFBVVF9DVFJMX0VOXHRcdFx0QklUKDApXG4gI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9TWU5USF9TRUxcdFx0R0VOTUFTSyg2LCA0KVxuIFxuJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfU1RFUF9USU1FX01BU0tcdFx0WkxfUkVHKDksIDB4MzYsIDIpXG4mIzQzO1xuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICogUmVnaXN0ZXIgUGFnZSAxMCwgUmVmIE1haWxib3hcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbkBAIC0zMTYsNiAmIzQzOzM1MywyNSBAQFxuICNkZWZpbmUgWkxfUkVHX09VVFBVVF9FU1lOQ19XSURUSFx0XHRaTF9SRUcoMTQsIDB4MTgsIDQpXG4gI2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX0NPTVBcdFx0WkxfUkVHKDE0LCAweDIwLCA0KVxuIFxuJiM0MzsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiYjNDM7ICogUmVnaXN0ZXIgUGFnZSA5LCBPdXRwdXQgUGhhc2UgU3RlcFxuJiM0MzsgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMXHRcdFpMX1JFRyg5LCAweDM4LCAxKVxuJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfRFBMTFx0XHRHRU5NQVNLKDYsIDQpXG4mIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9UT0RfU1RFUFx0QklUKDMpXG4mIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUFx0XHRHRU5NQVNLKDEsIDApXG4mIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9OT05FXHQwXG4mIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9SRVNFVFx0MVxuJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfUkVBRFx0MlxuJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfV1JJVEVcdDNcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUlx0XHRaTF9SRUcoOSwgMHgzOSwgMSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX01BU0tcdFx0WkxfUkVHKDksIDB4M2EsIDIpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBXHRcdFpMX1JFRyg5LCAweDNjLCA0KVxuJiM0MztcbiAvKlxuICAqIFJlZ2lzdGVyIFBhZ2UgMjU1IC0gSFcgcmVnaXN0ZXJzIGFjY2Vzc1xuICAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDExOjEyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pMMzA3M1gmIzM0OywKICAgICYjMzQ7WkwzMDczWF9JMkMmIzM0OywKICAgICYjMzQ7WkwzMDczWF9TUEkmIzM0OywKICAgICYjMzQ7UFRQXzE1ODhfQ0xPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQmIzM0OywKICAgICYjMzQ7emwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQmIzM0OywKICAgICYjMzQ7emwzMDczeF9kcGxsX3B0cF9hZGp0aW1lJiMzNDssCiAgICAmIzM0O3psMzA3M3hfZHBsbF9wdHBfYWRqZmluZSYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlJiMzNDssCiAgICAmIzM0O3psMzA3M3hfZHBsbF9wdHBfZW5hYmxlJiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl90b2RfcmVhZCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fdG9kX3dyaXRlJiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl90b2RfYWRqdXN0JiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl9waGFzZV9zdGVwJiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl90aWVfd3JpdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIgKHpsMzA3M3gpLiBJdCBpbXBsZW1lbnRzIHZhcmlvdXMgUFRQIGNsb2NrIG9wZXJhdGlvbnMgKGdldC9zZXQgdGltZSwgYWRqdXN0IHRpbWUvcGhhc2UvZnJlcXVlbmN5KSB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgUFRQIGlvY3RsIGludGVyZmFjZS4gRnV6emluZyB0aGVzZSBmdW5jdGlvbnMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGUgZHJpdmVyIGhhbmRsZXMgZWRnZSBjYXNlcyBhbmQgY29uY3VycmVudCBhY2Nlc3NlcyBjb3JyZWN0bHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDEyN2VjMWRhY2ViNTVjZTg0OTFiNjRhOWRjZjU4YWQxMDI1ZTMwNTcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCA5IDExOjEyOjQ0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWcKaW5kZXggNWJiY2ExNDAwNTgxMzEuLmQwNTc0YWQ1NzFkM2ZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWcKQEAgLTIsNyAmIzQzOzIsNyBAQAogCiBjb25maWcgWkwzMDczWAogCXRyaXN0YXRlICYjMzQ7TWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlcyYjMzQ7IGlmIENPTVBJTEVfVEVTVAotCWRlcGVuZHMgb24gTkVUCiYjNDM7CWRlcGVuZHMgb24gTkVUICZhbXA7JmFtcDsgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUwKIAlzZWxlY3QgRFBMTAogCXNlbGVjdCBORVRfREVWTElOSwogCXNlbGVjdCBSRUdNQVAKQEAgLTE2LDcgJiM0MzsxNiw3IEBAIGNvbmZpZyBaTDMwNzNYCiAKIGNvbmZpZyBaTDMwNzNYX0kyQwogCXRyaXN0YXRlICYjMzQ7STJDIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlcyYjMzQ7Ci0JZGVwZW5kcyBvbiBJMkMgJmFtcDsmYW1wOyBORVQKJiM0MzsJZGVwZW5kcyBvbiBJMkMgJmFtcDsmYW1wOyBORVQgJmFtcDsmYW1wOyBQVFBfMTU4OF9DTE9DS19PUFRJT05BTAogCXNlbGVjdCBSRUdNQVBfSTJDCiAJc2VsZWN0IFpMMzA3M1gKIAloZWxwCkBAIC0yOCw3ICYjNDM7MjgsNyBAQCBjb25maWcgWkwzMDczWF9JMkMKIAogY29uZmlnIFpMMzA3M1hfU1BJCiAJdHJpc3RhdGUgJiMzNDtTUEkgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzJiMzNDsKLQlkZXBlbmRzIG9uIE5FVCAmYW1wOyZhbXA7IFNQSQomIzQzOwlkZXBlbmRzIG9uIE5FVCAmYW1wOyZhbXA7IFNQSSAmYW1wOyZhbXA7IFBUUF8xNTg4X0NMT0NLX09QVElPTkFMCiAJc2VsZWN0IFJFR01BUF9TUEkKIAlzZWxlY3QgWkwzMDczWAogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYwppbmRleCA0ZWMyY2Y1M2RhZDQ2OC4uNTMwMzJlNzgyZmQ0YWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMKQEAgLTMsNiAmIzQzOzMsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2NsZWFudXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZWxheS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2Rldl9wcmludGsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3N0cmluZy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiAKQEAgLTIwMiw2ICYjNDM7MjAzLDExIEBAIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfZmV0Y2goc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpCiAJCXpsMzA3M3hfY2hhbl9yZWZzZWxfc3RhdGVfZ2V0KGNoYW4pLAogCQl6bDMwNzN4X2NoYW5fcmVmc2VsX3JlZl9nZXQoY2hhbikpOwogCiYjNDM7CXJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTSywKJiM0MzsJCQkgICAgICAmYW1wO2NoYW4tJmd0O291dF9zdGVwX3RpbWVfbWFzayk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKIAlndWFyZChtdXRleCkoJmFtcDt6bGRldi0mZ3Q7bXVsdGlvcF9sb2NrKTsKIAogCS8qIFJlYWQgRFBMTCBjb25maWd1cmF0aW9uIGZyb20gbWFpbGJveCAqLwpAQCAtMjM0LDYgJiM0MzsyNDAsMzA3IEBAIGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKnpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwKIAlyZXR1cm4gJmFtcDt6bGRldi0mZ3Q7Y2hhbltpbmRleF07CiB9CiAKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQgLSB3YWl0IGZvciBUb0Qgc2VtYXBob3JlIHRvIGNsZWFyCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKgomIzQzOyAqIFBvbGxzIHRoZSBUb0QgY29udHJvbCByZWdpc3RlciB1bnRpbCB0aGUgc2VtYXBob3JlIGJpdCBpcyBjbGVhcmVkLAomIzQzOyAqIGluZGljYXRpbmcgdGhlIGRldmljZSBoYXMgY29tcGxldGVkIHRoZSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FQlVTWSBpZiBzZW1hcGhvcmUgbm90IGNsZWFyZWQsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBpbnQgdGltZW91dDsKJiM0MzsJdTggdG9kX2N0cmw7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSwgJmFtcDt0b2RfY3RybCk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJc3dpdGNoIChGSUVMRF9HRVQoWkxfRFBMTF9UT0RfQ1RSTF9DTUQsIHRvZF9jdHJsKSkgewomIzQzOwljYXNlIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaOgomIzQzOwkJdGltZW91dCA9IFpMX1BPTExfVE9EX1dSX1RJTUVPVVRfVVM7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXRpbWVvdXQgPSBaTF9QT0xMX1RPRF9SRF9USU1FT1VUX1VTOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLAomIzQzOwkJCQkgIFpMX0RQTExfVE9EX0NUUkxfU0VNLCB0aW1lb3V0KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJjID09IC1FVElNRURPVVQgPyAtRUJVU1kgOiByYzsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9jdHJsIC0gaXNzdWUgVG9EIGNvbW1hbmQKJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleAomIzQzOyAqIEBjbWQ6IFRvRCBjb21tYW5kIHRvIGV4ZWN1dGUKJiM0MzsgKgomIzQzOyAqIFdyaXRlcyB0aGUgc2VtYXBob3JlIGFuZCBjb21tYW5kIHRvIGRwbGxfdG9kX2N0cmwuIFRoZSBjYWxsZXIgbXVzdAomIzQzOyAqIGVuc3VyZSB0aGUgZGV2aWNlIGlzIHJlYWR5IChzZW1hcGhvcmUgY2xlYXIpIGJlZm9yZSBjYWxsaW5nIGFuZAomIzQzOyAqIG11c3Qgd2FpdCBmb3IgY29tcGxldGlvbiBpZiBuZWVkZWQuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfY2hhbl90b2RfY3RybChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgdTggY21kKQomIzQzO3sKJiM0MzsJcmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSwKJiM0MzsJCQkJWkxfRFBMTF9UT0RfQ1RSTF9TRU0gfCBjbWQpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fdG9kX3JlYWQgLSByZWFkIFRvRCByZWdpc3RlcnMgYWZ0ZXIgaXNzdWluZyBhIGNvbW1hbmQKJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleAomIzQzOyAqIEBuZXh0X2h6OiBpZiB0cnVlLCByZWFkIHByZWRpY3RlZCBUb0QgYXQgbmV4dCAxIEh6OyBvdGhlcndpc2UgcmVhZCBjdXJyZW50CiYjNDM7ICogQHRzOiB0aW1lc3BlYyB0byBzdG9yZSB0aGUgcmVzdWx0CiYjNDM7ICogQHN0czogb3B0aW9uYWwgc3lzdGVtIHRpbWVzdGFtcCBwYWlyIGZvciBjcm9zcy10aW1lc3RhbXBpbmcKJiM0MzsgKgomIzQzOyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgIGJvb2wgbmV4dF9oeiwgc3RydWN0IHRpbWVzcGVjNjQgKnRzLAomIzQzOwkJCSAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpCiYjNDM7ewomIzQzOwl1MzIgbnNlYzsKJiM0MzsJdTY0IHNlYzsKJiM0MzsJdTggY21kOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CWlmIChuZXh0X2h6KQomIzQzOwkJY21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFo7CiYjNDM7CWVsc2UKJiM0MzsJCWNtZCA9IFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX0NVUlJFTlQ7CiYjNDM7CiYjNDM7CS8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCiYjNDM7CXJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcHRwX3JlYWRfc3lzdGVtX3ByZXRzKHN0cyk7CiYjNDM7CXJjID0gemwzMDczeF9jaGFuX3RvZF9jdHJsKHpsZGV2LCBjaCwgY21kKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CXB0cF9yZWFkX3N5c3RlbV9wb3N0dHMoc3RzKTsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3JlYWRfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfU0VDKGNoKSwgJmFtcDtzZWMpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CS8qIEhXIG5hbm9zZWNvbmRzIGFyZSBhbHdheXMgaW4gWzAsIE5TRUNfUEVSX1NFQykgcmFuZ2UgKi8KJiM0MzsJcmMgPSB6bDMwNzN4X3JlYWRfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCAmYW1wO25zZWMpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXRzLSZndDt0dl9zZWMgPSBzZWM7CiYjNDM7CXRzLSZndDt0dl9uc2VjID0gbnNlYzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUgLSB3cml0ZSBUb0QgcmVnaXN0ZXJzIGFuZCB0cmlnZ2VyIDEgSHogdXBkYXRlCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAdHM6IHRpbWUgdG8gc2V0CiYjNDM7ICoKJiM0MzsgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLAomIzQzOwkJCSAgIHN0cnVjdCB0aW1lc3BlYzY0IHRzKQomIzQzO3sKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwkvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVG9EIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqLwomIzQzOwlyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9TRUMoY2gpLCB0cy50dl9zZWMpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19EUExMX1RPRF9OUyhjaCksIHRzLnR2X25zZWMpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLAomIzQzOwkJCQkgICAgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFopOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCAtIGF0b21pYyBUb0QgcmVhZC1tb2RpZnktd3JpdGUgd2l0aCByb2xsb3ZlciBndWFyZAomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgdG8gYXBwbHkKJiM0MzsgKgomIzQzOyAqIFJlYWRzIHRoZSBuZXh0LUh6IFRvRCBhbmQgY3VycmVudCBUb0QsIHRoZW4gY2hlY2tzIHdoZXRoZXIgZW5vdWdoIHRpbWUKJiM0MzsgKiByZW1haW5zIGJlZm9yZSB0aGUgbmV4dCAxIEh6IHJvbGxvdmVyIHRvIHNhZmVseSBjb21wbGV0ZSB0aGUgd3JpdGUuCiYjNDM7ICogSWYgbGVzcyB0aGFuIDIwIG1zIHJlbWFpbnMsIHdhaXRzIGZvciB0aGUgcm9sbG92ZXIgYW5kIGluY3JlbWVudHMgdGhlCiYjNDM7ICogbmV4dC1IeiBzZWNvbmRzIGJ5IG9uZS4gQXBwbGllcyBAZGVsdGEgYW5kIHdyaXRlcyB0aGUgcmVzdWx0IGJhY2suCiYjNDM7ICoKJiM0MzsgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpCiYjNDM7ewomIzQzOwlzdGF0aWMgY29uc3QgbG9uZyB0aHJlc2hvbGRfbnMgPSAyMCAqIE5TRUNfUEVSX01TRUM7CiYjNDM7CXN0cnVjdCB0aW1lc3BlYzY0IHRzX25leHQsIHRzX2N1ciwgZGlmZjsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwkvKiBSZWFkIHByZWRpY3RlZCBUb0QgYXQgbmV4dCAxIEh6IHRpY2sgKi8KJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCB0cnVlLCAmYW1wO3RzX25leHQsIE5VTEwpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CS8qIFJlYWQgY3VycmVudCBUb0QgdG8gZGV0ZXJtaW5lIHJlbWFpbmluZyBtYXJnaW4gKi8KJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCBmYWxzZSwgJmFtcDt0c19jdXIsIE5VTEwpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CS8qIElmIHRvbyBjbG9zZSB0byAob3IgcGFzdCkgdGhlIG5leHQgcm9sbG92ZXIsIHdhaXQgaXQgb3V0ICovCiYjNDM7CWRpZmYgPSB0aW1lc3BlYzY0X3N1Yih0c19uZXh0LCB0c19jdXIpOwomIzQzOwlpZiAoZGlmZi50dl9zZWMgJmx0OyAwIHx8ICghZGlmZi50dl9zZWMgJmFtcDsmYW1wOyBkaWZmLnR2X25zZWMgJmx0OyB0aHJlc2hvbGRfbnMpKSB7CiYjNDM7CQlpZiAoIWRpZmYudHZfc2VjICZhbXA7JmFtcDsgZGlmZi50dl9uc2VjKQomIzQzOwkJCWZzbGVlcCgodW5zaWduZWQgbG9uZylkaWZmLnR2X25zZWMgLyBOU0VDX1BFUl9VU0VDICYjNDM7IDEpOwomIzQzOwkJdHNfbmV4dC50dl9zZWMmIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEFwcGx5IGRlbHRhIHRvIHRoZSBuZXh0LUh6IFRvRCAqLwomIzQzOwl0c19uZXh0ID0gdGltZXNwZWM2NF9hZGQodHNfbmV4dCwgZGVsdGEpOwomIzQzOwlpZiAoIXRpbWVzcGVjNjRfdmFsaWQoJmFtcDt0c19uZXh0KSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkvKiBXcml0ZSBhZGp1c3RlZCBUb0QgYmFjayBhbmQgd2FpdCBmb3IgY29tcGxldGlvbiAqLwomIzQzOwlyYyA9IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkZXYsIGNoLCB0c19uZXh0KTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0IC0gd3JpdGUgZGVsdGEgZnJlcXVlbmN5IG9mZnNldCB0byBoYXJkd2FyZQomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQG9mZnNldDogZnJlcXVlbmN5IG9mZnNldCBpbiAyXi00OCBzdGVwcwomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7aW50IHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgb2Zmc2V0KQomIzQzO3sKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9PRkZTRVQoY2gpLCBvZmZzZXQpOwomIzQzOwlpZiAoIXJjKQomIzQzOwkJemxkZXYtJmd0O2NoYW5bY2hdLmRmX29mZnNldCA9IG9mZnNldDsKJiM0MzsKJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlIC0gYWRqdXN0IERQTEwgcGhhc2UgdXNpbmcgVElFIHdyaXRlCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAZGVsdGFfbnM6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMgKG11c3QgYmUgd2l0aGluICYjNDM7LTFzKQomIzQzOyAqCiYjNDM7ICogQ29udmVydHMgbmFub3NlY29uZHMgdG8gVElFIHVuaXRzICgwLjAxIHBzKSBhbmQgd3JpdGVzIFRJRSBkYXRhCiYjNDM7ICogdG8gdGhlIHNwZWNpZmllZCBjaGFubmVsLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7aW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucykKJiM0Mzt7CiYjNDM7CXM2NCB0aWVfZGF0YTsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRldi0mZ3Q7dGllX2xvY2spOwomIzQzOwomIzQzOwkvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVElFIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqLwomIzQzOwlyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTCwKJiM0MzsJCQkJICBaTF9EUExMX1RJRV9DVFJMX09QLAomIzQzOwkJCQkgIFpMX1BPTExfVElFX1dSX1RJTUVPVVRfVVMpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CS8qIENvbnZlcnQgbnMgdG8gVElFIHVuaXRzICgwLjAxIHBzID0gMTBeLTE0IHMpICovCiYjNDM7CXRpZV9kYXRhID0gZGVsdGFfbnMgKiAxMDAwMDBMTDsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0RBVEEoY2gpLCB0aWVfZGF0YSk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTF9NQVNLLCBCSVQoY2gpKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsCiYjNDM7CQkJCVpMX0RQTExfVElFX0NUUkxfT1BfV1IpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCAtIGV4ZWN1dGUgb25lIG91dHB1dCBwaGFzZSBzdGVwIG9wZXJhdGlvbgomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQG91dF9tYXNrOiBiaXRtYXNrIG9mIG91dHB1dHMgdG8gc3RlcAomIzQzOyAqIEBzdGVwX2N5Y2xlczogcGhhc2Ugc3RlcCBpbiBzeW50aGVzaXplciBjbG9jayBjeWNsZXMKJiM0MzsgKiBAdG9kX3N0ZXA6IGFsc28gc3RlcCB0aGUgVG9EIGNvdW50ZXIKJiM0MzsgKgomIzQzOyAqIEFsbCBtYXNrZWQgb3V0cHV0cyBtdXN0IHVzZSBzeW50aGVzaXplcnMgb2YgdGhlIHNhbWUgZnJlcXVlbmN5IHNpbmNlCiYjNDM7ICogdGhlIHN0ZXAgdmFsdWUgaXMgaW4gc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7aW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLAomIzQzOwkJCSAgICB1MTYgb3V0X21hc2ssIHMzMiBzdGVwX2N5Y2xlcywKJiM0MzsJCQkgICAgYm9vbCB0b2Rfc3RlcCkKJiM0Mzt7CiYjNDM7CXU4IGN0cmw7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7emxkZXYtJmd0O3BoYXNlX3N0ZXBfbG9jayk7CiYjNDM7CiYjNDM7CS8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBwaGFzZSBzdGVwIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqLwomIzQzOwlyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTCwKJiM0MzsJCQkJICBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QLAomIzQzOwkJCQkgIFpMX1BPTExfUEhBU0VfU1RFUF9USU1FT1VUX1VTKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfREFUQSwKJiM0MzsJCQkgICAgICAgc3RlcF9jeWNsZXMpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF93cml0ZV91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLLCBvdXRfbWFzayk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTlVNQkVSLCAxKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwljdHJsID0gRklFTERfUFJFUChaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX0RQTEwsIGNoKSB8CiYjNDM7CSAgICAgICBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AsCiYjNDM7CQkJICBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1dSSVRFKTsKJiM0MzsJaWYgKHRvZF9zdGVwKQomIzQzOwkJY3RybCB8PSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX1RPRF9TVEVQOwomIzQzOwomIzQzOwlyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwsIGN0cmwpOwomIzQzO30KJiM0MzsKIC8qKgogICogemwzMDczeF9jaGFuX3N0YXRlX3NldCAtIGNvbW1pdCBEUExMIGNoYW5uZWwgc3RhdGUgY2hhbmdlcyB0byBoYXJkd2FyZQogICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3hfZGV2IHN0cnVjdHVyZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oCmluZGV4IGRjOWM2ZDk1YmRlZTc1Li45ZGM1YTNmMTk5MWYxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaApAQCAtNSwxMCAmIzQzOzUsMTIgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3RkZGVmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3RpbWU2NC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7cmVncy5oJiMzNDsKIAomIzQzO3N0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcDsKIHN0cnVjdCB6bDMwNzN4X2RldjsKIAogLyoqCkBAIC0xNiw2ICYjNDM7MTgsNyBAQCBzdHJ1Y3QgemwzMDczeF9kZXY7CiAgKiBAY3RybDogRFBMTCBjb250cm9sIHJlZ2lzdGVyIHZhbHVlCiAgKiBAbW9kZV9yZWZzZWw6IG1vZGUgYW5kIHJlZmVyZW5jZSBzZWxlY3Rpb24gcmVnaXN0ZXIgdmFsdWUKICAqIEByZWZfcHJpbzogcmVmZXJlbmNlIHByaW9yaXR5IHJlZ2lzdGVycyAoNCBiaXRzIHBlciByZWYsIFAvTiBwYWNrZWQpCiYjNDM7ICogQG91dF9zdGVwX3RpbWVfbWFzazogb3V0cHV0IHN0ZXAtdGltZSBtYXNrCiAgKiBAbW9uX3N0YXR1czogbW9uaXRvciBzdGF0dXMgcmVnaXN0ZXIgdmFsdWUKICAqIEByZWZzZWxfc3RhdHVzOiByZWZlcmVuY2Ugc2VsZWN0aW9uIHN0YXR1cyByZWdpc3RlciB2YWx1ZQogICogQGRmX29mZnNldDogZnJlcXVlbmN5IG9mZnNldCB2cyB0cmFja2VkIHJlZmVyZW5jZSBpbiAyXi00OCBzdGVwcwpAQCAtMjYsNiAmIzQzOzI5LDkgQEAgc3RydWN0IHpsMzA3M3hfY2hhbiB7CiAJCXU4CW1vZGVfcmVmc2VsOwogCQl1OAlyZWZfcHJpb1taTDMwNzNYX05VTV9SRUZTIC8gMl07CiAJKTsKJiM0MzsJc3RydWN0X2dyb3VwKGludiwgLyogSW52YXJpYW50cyAqLwomIzQzOwkJdTE2CW91dF9zdGVwX3RpbWVfbWFzazsKJiM0MzsJKTsKIAlzdHJ1Y3RfZ3JvdXAoc3RhdCwKIAkJdTgJbW9uX3N0YXR1czsKIAkJdTgJcmVmc2VsX3N0YXR1czsKQEAgLTQyLDYgJiM0Mzs0OCwyMCBAQCBpbnQgemwzMDczeF9jaGFuX3N0YXRlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCwKIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfdXBkYXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTsKIGludCB6bDMwNzN4X2NoYW5fbmNvX21vZGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTsKIAomIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cywKJiM0MzsJCQkgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKTsKJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cyk7CiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLAomIzQzOwkJCSAgICBzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YSk7CiYjNDM7aW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLAomIzQzOwkJCSAgICB1MTYgb3V0X21hc2ssIHMzMiBzdGVwX2N5Y2xlcywgYm9vbCB0b2Rfc3RlcCk7CiYjNDM7CiYjNDM7aW50IHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgb2Zmc2V0KTsKJiM0MzsKJiM0MztpbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKTsKJiM0MzsKIC8qKgogICogemwzMDczeF9jaGFuX2RmX29mZnNldF9nZXQgLSBnZXQgY2FjaGVkIGRmX29mZnNldCB2cyB0cmFja2VkIHJlZmVyZW5jZQogICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZQpAQCAtMjAwLDYgJiM0MzsyMjAsMjEgQEAgc3RhdGljIGlubGluZSBib29sIHpsMzA3M3hfY2hhbl9tb2RlX2lzX3JlZmxvY2soY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbikKIAlyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfZ2V0KGNoYW4pID09IFpMX0RQTExfTU9ERV9SRUZTRUxfTU9ERV9SRUZMT0NLOwogfQogCiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllIC0gY2hlY2sgaWYgY2hhbm5lbCBtb2RlIHN1cHBvcnRzIFRJRSB3cml0ZQomIzQzOyAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGUKJiM0MzsgKgomIzQzOyAqIFRJRSB3cml0ZSBpcyBzdXBwb3J0ZWQgaW4gQVVUTyBhbmQgUkVGTE9DSyBtb2RlcyByZWdhcmRsZXNzIG9mIGxvY2sgc3RhdGUuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgVElFIHdyaXRlIGlzIHN1cHBvcnRlZCwgZmFsc2Ugb3RoZXJ3aXNlCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBib29sCiYjNDM7emwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pCiYjNDM7ewomIzQzOwlyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfaXNfYXV0byhjaGFuKSB8fAomIzQzOwkJemwzMDczeF9jaGFuX21vZGVfaXNfcmVmbG9jayhjaGFuKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHpsMzA3M3hfY2hhbl9pc19ob19yZWFkeSAtIGNoZWNrIGlmIGhvbGRvdmVyIGlzIHJlYWR5CiAgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlCkBAIC0yMzMsNCAmIzQzOzI2OCwxNyBAQCBzdGF0aWMgaW5saW5lIHU4IHpsMzA3M3hfY2hhbl9yZWZzZWxfcmVmX2dldChjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKQogCXJldHVybiBGSUVMRF9HRVQoWkxfRFBMTF9SRUZTRUxfU1RBVFVTX1JFRlNFTCwgY2hhbi0mZ3Q7cmVmc2VsX3N0YXR1cyk7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5faXNfb3V0X3N0ZXBwZWQgLSBjaGVjayBpZiBvdXRwdXQgaXMgaW4gc3RlcC10aW1lIG1hc2sKJiM0MzsgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlCiYjNDM7ICogQG91dDogb3V0cHV0IGluZGV4CiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgb3V0cHV0IGlzIGFmZmVjdGVkIGJ5IHN0ZXAtdGltZSBvcGVyYXRpb25zCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBib29sCiYjNDM7emwzMDczeF9jaGFuX2lzX291dF9zdGVwcGVkKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4sIHU4IG91dCkKJiM0Mzt7CiYjNDM7CXJldHVybiAhIShjaGFuLSZndDtvdXRfc3RlcF90aW1lX21hc2sgJmFtcDsgQklUKG91dCkpOwomIzQzO30KJiM0MzsKICNlbmRpZiAvKiBfWkwzMDczWF9DSEFOX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYwppbmRleCA3ZjVhZmFhYWU2MzQyZi4uYjJmOWZjOTdmZDFiNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMKQEAgLTEwMzMsNiAmIzQzOzEwMzMsMTQgQEAgaW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpCiAJICogYW5kL29yIHBvbGxzIGFyZSByZXF1aXJlZCB0byBiZSBkb25lIGF0b21pY2FsbHkuCiAJICovCiAJcmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtJmd0O2RldiwgJmFtcDt6bGRldi0mZ3Q7bXVsdGlvcF9sb2NrKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtJmd0O2RldiwgcmMsCiYjNDM7CQkJCSAgICAgJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxuJiMzNDspOwomIzQzOwlyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi0mZ3Q7ZGV2LCAmYW1wO3psZGV2LSZndDtwaGFzZV9zdGVwX2xvY2spOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi0mZ3Q7ZGV2LCByYywKJiM0MzsJCQkJICAgICAmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XG4mIzM0Oyk7CiYjNDM7CXJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LSZndDtkZXYsICZhbXA7emxkZXYtJmd0O3RpZV9sb2NrKTsKIAlpZiAocmMpCiAJCXJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LSZndDtkZXYsIHJjLAogCQkJCSAgICAgJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxuJiMzNDspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oCmluZGV4IDc4ZGMyMDhmM2VlYTJhLi4yZGM4MzZkMGM4ZjZiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaApAQCAtMjYsNiAmIzQzOzI2LDEwIEBAIHN0cnVjdCB6bDMwNzN4X2RwbGw7CiAjZGVmaW5lIFpMX1BPTExfSFdSRUdfVElNRU9VVF9VUwkoNTAgKiBVU0VDX1BFUl9NU0VDKQogI2RlZmluZSBaTF9QT0xMX01CX1RJTUVPVVRfVVMJCSgzMCAqIFVTRUNfUEVSX01TRUMpCiAjZGVmaW5lIFpMX1BPTExfUEhBU0VfRVJSX1RJTUVPVVRfVVMJKDUwICogVVNFQ19QRVJfTVNFQykKJiM0MzsjZGVmaW5lIFpMX1BPTExfUEhBU0VfU1RFUF9USU1FT1VUX1VTCSgzMDAwICogVVNFQ19QRVJfTVNFQykKJiM0MzsjZGVmaW5lIFpMX1BPTExfVElFX1dSX1RJTUVPVVRfVVMJKDEwMDAgKiBVU0VDX1BFUl9NU0VDKQomIzQzOyNkZWZpbmUgWkxfUE9MTF9UT0RfUkRfVElNRU9VVF9VUwkoMzAgKiBVU0VDX1BFUl9NU0VDKQomIzQzOyNkZWZpbmUgWkxfUE9MTF9UT0RfV1JfVElNRU9VVF9VUwkoMTAwMCAqIFVTRUNfUEVSX01TRUMpCiAKIGVudW0gemwzMDczeF9mbGFncyB7CiAJWkwzMDczWF9GTEFHX1JFRl9QSEFTRV9DT01QXzMyX0JJVCwKQEAgLTU1LDYgJiM0Mzs1OSw4IEBAIHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mbyB7CiAgKiBAcmVnbWFwOiByZWdtYXAgdG8gYWNjZXNzIGRldmljZSByZWdpc3RlcnMKICAqIEBpbmZvOiBkZXRlY3RlZCBjaGlwIGluZm8KICAqIEBtdWx0aW9wX2xvY2s6IHRvIHNlcmlhbGl6ZSBtdWx0aXBsZSByZWdpc3RlciBvcGVyYXRpb25zCiYjNDM7ICogQHRpZV9sb2NrOiB0byBzZXJpYWxpemUgVElFIHdyaXRlIG9wZXJhdGlvbnMKJiM0MzsgKiBAcGhhc2Vfc3RlcF9sb2NrOiB0byBzZXJpYWxpemUgb3V0cHV0IHBoYXNlIHN0ZXAgb3BlcmF0aW9ucwogICogQHJlZjogYXJyYXkgb2YgaW5wdXQgcmVmZXJlbmNlcyYjMzk7IGludmFyaWFudHMKICAqIEBvdXQ6IGFycmF5IG9mIG91dHMmIzM5OyBpbnZhcmlhbnRzCiAgKiBAc3ludGg6IGFycmF5IG9mIHN5bnRocyYjMzk7IGludmFyaWFudHMKQEAgLTcxLDYgJiM0Mzs3Nyw4IEBAIHN0cnVjdCB6bDMwNzN4X2RldiB7CiAJc3RydWN0IHJlZ21hcAkJCSpyZWdtYXA7CiAJY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hpcF9pbmZvCSppbmZvOwogCXN0cnVjdCBtdXRleAkJCW11bHRpb3BfbG9jazsKJiM0MzsJc3RydWN0IG11dGV4CQkJdGllX2xvY2s7CiYjNDM7CXN0cnVjdCBtdXRleAkJCXBoYXNlX3N0ZXBfbG9jazsKIAogCS8qIEludmFyaWFudHMgKi8KIAlzdHJ1Y3QgemwzMDczeF9yZWYJcmVmW1pMMzA3M1hfTlVNX1JFRlNdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jCmluZGV4IGQ5MWY1MmI1OGVhZTM0Li43NDAwMWU2ZDRhMzJmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYwpAQCAtMiw2ICYjNDM7Miw3IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9iaXRzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYml0ZmllbGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY2xlYW51cC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2J1Zy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2NvbnRhaW5lcl9vZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2Rldl9wcmludGsuaCZndDsKQEAgLTE0LDYgJiM0MzsxNSw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvbmV0bGluay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BsYXRmb3JtX2RldmljZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3Byb3BlcnR5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3ByaW50Zi5oJmd0OwogCkBAIC00Miw2ICYjNDM7NDQsNyBAQAogICogQHBoYXNlX29mZnNldDogbGFzdCBzYXZlZCBwaW4gcGhhc2Ugb2Zmc2V0CiAgKiBAZnJlcV9vZmZzZXQ6IGxhc3Qgc2F2ZWQgZnJhY3Rpb25hbCBmcmVxdWVuY3kgb2Zmc2V0CiAgKiBAbWVhc3VyZWRfZnJlcTogbGFzdCBzYXZlZCBtZWFzdXJlZCBmcmVxdWVuY3kKJiM0MzsgKiBAcGVyb3V0X2lkeDogUFRQIHBlcm91dCBjaGFubmVsIGluZGV4LCBvciAtMSBpZiBub3QgcGVyb3V0LWVsaWdpYmxlCiAgKi8KIHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CkBAIC01OSw2ICYjNDM7NjIsNyBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiB7CiAJczY0CQkJcGhhc2Vfb2Zmc2V0OwogCXM2NAkJCWZyZXFfb2Zmc2V0OwogCXUzMgkJCW1lYXN1cmVkX2ZyZXE7CiYjNDM7CXM4CQkJcGVyb3V0X2lkeDsKIH07CiAKIC8qCkBAIC05MzYsMjEgJiM0Mzs5NDAsMTcgQEAgemwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLAogfQogCiBzdGF0aWMgaW50Ci16bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sCi0JCQkJICAgICAgdm9pZCAqcGluX3ByaXYsCi0JCQkJICAgICAgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLAotCQkJCSAgICAgIHZvaWQgKmRwbGxfcHJpdiwgdTY0IGZyZXF1ZW5jeSwKLQkJCQkgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiYjNDM7X196bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfc2V0KHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCwKJiM0MzsJCQkJCXN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4sCiYjNDM7CQkJCQl1NjQgZnJlcXVlbmN5KQogewotCXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGRwbGxfcHJpdjsKIAlzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLSZndDtkZXY7Ci0Jc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbiA9IHBpbl9wcml2OwogCWNvbnN0IHN0cnVjdCB6bDMwNzN4X3N5bnRoICpzeW50aDsKIAl1MzIgbmV3X2Rpdiwgc3ludGhfZnJlcTsKIAlzdHJ1Y3QgemwzMDczeF9vdXQgb3V0OwogCXU4IG91dF9pZDsKIAotCWd1YXJkKG11dGV4KSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwogCiAJb3V0X2lkID0gemwzMDczeF9vdXRwdXRfcGluX291dF9nZXQocGluLSZndDtpZCk7CiAJb3V0ID0gKnpsMzA3M3hfb3V0X3N0YXRlX2dldCh6bGRldiwgb3V0X2lkKTsKQEAgLTEwMTEsNiAmIzQzOzEwMTEsMjEgQEAgemwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLAogCXJldHVybiB6bDMwNzN4X291dF9zdGF0ZV9zZXQoemxkZXYsIG91dF9pZCwgJmFtcDtvdXQpOwogfQogCiYjNDM7c3RhdGljIGludAomIzQzO3psMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3BpbiwKJiM0MzsJCQkJICAgICAgdm9pZCAqcGluX3ByaXYsCiYjNDM7CQkJCSAgICAgIGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwKJiM0MzsJCQkJICAgICAgdm9pZCAqZHBsbF9wcml2LCB1NjQgZnJlcXVlbmN5LAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBkcGxsX3ByaXY7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiBfX3psMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoemxkcGxsLCBwaW5fcHJpdiwKJiM0MzsJCQkJCQkgICAgICAgZnJlcXVlbmN5KTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50CiB6bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9waGFzZV9hZGp1c3RfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sCiAJCQkJCSB2b2lkICpwaW5fcHJpdiwKQEAgLTE2MDgsNiAmIzQzOzE2MjMsNyBAQCB6bDMwNzN4X2RwbGxfcGluX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCwgZW51bSBkcGxsX3Bpbl9kaXJlY3Rpb24gZGlyLAogCXBpbi0mZ3Q7ZHBsbCA9IHpsZHBsbDsKIAlwaW4tJmd0O2RpciA9IGRpcjsKIAlwaW4tJmd0O2lkID0gaWQ7CiYjNDM7CXBpbi0mZ3Q7cGVyb3V0X2lkeCA9IC0xOwogCiAJcmV0dXJuIHBpbjsKIH0KQEAgLTE2MjYsNiAmIzQzOzE2NDIsNDQgQEAgemwzMDczeF9kcGxsX3Bpbl9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4pCiAJa2ZyZWUocGluKTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9waW5faXNfcGVyb3V0IC0gY2hlY2sgaWYgb3V0cHV0IHBpbiBpcyBwZXJvdXQtZWxpZ2libGUKJiM0MzsgKiBAcGluOiBEUExMIHBpbiB0byBjaGVjawomIzQzOyAqIEBwcm9wczogcGluIHByb3BlcnRpZXMgKGFscmVhZHkgZmV0Y2hlZCBieSBjYWxsZXIpCiYjNDM7ICoKJiM0MzsgKiBBbiBvdXRwdXQgcGluIGlzIGVsaWdpYmxlIGZvciBQVFAgcGVyaW9kaWMgb3V0cHV0IGlmIGl0IGlzIHNpbmdsZS1lbmRlZAomIzQzOyAqIChub3QgZGlmZmVyZW50aWFsKSBhbmQgc3VwcG9ydHMgMSBIeiBpbiBpdHMgZnJlcXVlbmN5IGxpc3QuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgZWxpZ2libGUsIGZhbHNlIG90aGVyd2lzZQomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sCiYjNDM7emwzMDczeF9kcGxsX3Bpbl9pc19wZXJvdXQoc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbiwKJiM0MzsJCQkgICBjb25zdCBzdHJ1Y3QgemwzMDczeF9waW5fcHJvcHMgKnByb3BzKQomIzQzO3sKJiM0MzsJc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gcGluLSZndDtkcGxsOwomIzQzOwljb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuOwomIzQzOwl1OCBvdXRfaWQ7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlpZiAoemwzMDczeF9kcGxsX2lzX2lucHV0X3BpbihwaW4pKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlvdXRfaWQgPSB6bDMwNzN4X291dHB1dF9waW5fb3V0X2dldChwaW4tJmd0O2lkKTsKJiM0MzsJaWYgKHpsMzA3M3hfZGV2X291dF9pc19kaWZmKHpsZHBsbC0mZ3Q7ZGV2LCBvdXRfaWQpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwljaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRwbGwtJmd0O2RldiwgemxkcGxsLSZndDtpZCk7CiYjNDM7CWlmICghemwzMDczeF9jaGFuX2lzX291dF9zdGVwcGVkKGNoYW4sIG91dF9pZCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBwcm9wcy0mZ3Q7ZHBsbF9wcm9wcy5mcmVxX3N1cHBvcnRlZF9udW07IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAocHJvcHMtJmd0O2RwbGxfcHJvcHMuZnJlcV9zdXBwb3J0ZWRbaV0ubWluID09IDEpCiYjNDM7CQkJcmV0dXJuIHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKIC8qKgogICogemwzMDczeF9kcGxsX3Bpbl9yZWdpc3RlciAtIHJlZ2lzdGVyIERQTEwgcGluCiAgKiBAcGluOiBwb2ludGVyIHRvIERQTEwgcGluCkBAIC0xNjY3LDYgJiM0MzsxNzIxLDggQEAgemwzMDczeF9kcGxsX3Bpbl9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluLCB1MzIgaW5kZXgpCiAJCWlmIChwaW4tJmd0O3ByaW8gPT0gWkxfRFBMTF9SRUZfUFJJT19OT05FKQogCQkJLyogQ2xhbXAgcHJpbyB0byBtYXggdmFsdWUgKi8KIAkJCXBpbi0mZ3Q7cHJpbyA9IFpMX0RQTExfUkVGX1BSSU9fTUFYOwomIzQzOwl9IGVsc2UgaWYgKHpsMzA3M3hfZHBsbF9waW5faXNfcGVyb3V0KHBpbiwgcHJvcHMpKSB7CiYjNDM7CQlwaW4tJmd0O3Blcm91dF9pZHggPSB6bGRwbGwtJmd0O3B0cF9pbmZvLm5fcGVyX291dCYjNDM7JiM0Mzs7CiAJfQogCiAJLyogQ3JlYXRlIG9yIGdldCBleGlzdGluZyBEUExMIHBpbiAqLwpAQCAtMTg5Nyw2ICYjNDM7MTk1Myw4IEBAIHpsMzA3M3hfZHBsbF9waW5zX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKIAl1OCBpZCwgaW5kZXg7CiAJaW50IHJjOwogCiYjNDM7CXpsZHBsbC0mZ3Q7cHRwX2luZm8ubl9wZXJfb3V0ID0gMDsKJiM0MzsKIAkvKiBQcm9jZXNzIGlucHV0IHBpbnMgKi8KIAlmb3IgKGluZGV4ID0gMDsgaW5kZXggJmx0OyBaTDMwNzNYX05VTV9QSU5TOyBpbmRleCYjNDM7JiM0MzspIHsKIAkJLyogRmlyc3QgaW5wdXQgcGlucyBhbmQgdGhlbiBvdXRwdXQgcGlucyAqLwpAQCAtMjI4MCw0NSAmIzQzOzIzMzgsNDQ3IEBAIHpsMzA3M3hfZHBsbF9pbml0X2ZpbmVfcGhhc2VfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpCiAJcmV0dXJuIHJjOwogfQogCiYjNDM7LyogTWF4aW11bSBmcmVxdWVuY3kgYWRqdXN0bWVudDogJiM0MzstMSUgb2Ygbm9taW5hbCBpbiBwcGIgKi8KJiM0MzsjZGVmaW5lIFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESgkxMDAwMDAwMAomIzQzOwogLyoqCi0gKiB6bDMwNzN4X2RwbGxfYWxsb2MgLSBhbGxvY2F0ZSBEUExMIGRldmljZQotICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCi0gKiBAY2g6IERQTEwgY2hhbm5lbCBudW1iZXIKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQgLSByZWFkIGN1cnJlbnQgdGltZSBmcm9tIFRvRCBjb3VudGVycwomIzQzOyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mbwomIzQzOyAqIEB0czogdGltZXNwZWMgdG8gc3RvcmUgY3VycmVudCB0aW1lCiYjNDM7ICogQHN0czogb3B0aW9uYWwgc3lzdGVtIHRpbWVzdGFtcCBwYWlyIGZvciBjcm9zcy10aW1lc3RhbXBpbmcKICAqCi0gKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLAomIzQzOwkJCQkgICAgICAgc3RydWN0IHRpbWVzcGVjNjQgKnRzLAomIzQzOwkJCQkgICAgICAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCwKJiM0MzsJCQkJCQkgICBwdHBfaW5mbyk7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkcGxsLSZndDtkZXYsIHpsZHBsbC0mZ3Q7aWQsIGZhbHNlLCB0cywgc3RzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQgLSBzZXQgVG9EIGNvdW50ZXJzIHRvIGdpdmVuIHRpbWUKJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm8KJiM0MzsgKiBAdHM6IHRpbWVzcGVjIHdpdGggdGltZSB0byBzZXQKICAqCi0gKiBSZXR1cm46IHBvaW50ZXIgdG8gRFBMTCBkZXZpY2Ugb24gc3VjY2VzcywgZXJyb3IgcG9pbnRlciBvbiBlcnJvcgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgogICovCi1zdHJ1Y3QgemwzMDczeF9kcGxsICoKLXpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCkKJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywKJiM0MzsJCQkJICAgICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjNjQgKnRzKQogewotCXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbDsKJiM0MzsJc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsCiYjNDM7CQkJCQkJICAgcHRwX2luZm8pOwogCi0JemxkcGxsID0ga3phbGxvY19vYmooKnpsZHBsbCk7Ci0JaWYgKCF6bGRwbGwpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwogCi0JemxkcGxsLSZndDtkZXYgPSB6bGRldjsKLQl6bGRwbGwtJmd0O2lkID0gY2g7Ci0JbXV0ZXhfaW5pdCgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJmFtcDt6bGRwbGwtJmd0O3BpbnMpOwomIzQzOwlyZXR1cm4gemwzMDczeF9jaGFuX3RvZF93cml0ZSh6bGRwbGwtJmd0O2RldiwgemxkcGxsLSZndDtpZCwgKnRzKTsKJiM0Mzt9CiAKLQlyZXR1cm4gemxkcGxsOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwIC0gYWRqdXN0IHN1Yi1zZWNvbmQgdGltZSB2aWEgcGhhc2Ugc3RlcAomIzQzOyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbAomIzQzOyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzIChtdXN0IGJlIHdpdGhpbiAoLU5TRUNfUEVSX1NFQywKJiM0MzsgKiAgICAgICAgIE5TRUNfUEVSX1NFQykpCiYjNDM7ICoKJiM0MzsgKiBVc2VzIHRoZSBvdXRwdXQgcGhhc2Ugc3RlcCBtZWNoYW5pc20gd2l0aCB0b2Rfc3RlcD0xIHRvIGFkanVzdCBib3RoCiYjNDM7ICogdGhlIG91dHB1dCBjbG9jayBwaGFzZSBhbmQgdGhlIFRvRCBjb3VudGVyIHNpbXVsdGFuZW91c2x5LiBUaGlzIGtlZXBzCiYjNDM7ICogb3V0cHV0cyBhbmQgVG9EIGNvaGVyZW50LiBPbmx5IHZhbGlkIGluIE5DTyBtb2RlLgomIzQzOyAqCiYjNDM7ICogT3V0cHV0cyBhcmUgZ3JvdXBlZCBieSBzeW50aGVzaXplciBzaW5jZSB0aGUgcGhhc2Ugc3RlcCB2YWx1ZSBpcyBpbgomIzQzOyAqIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcy4gVGhlIGZpcnN0IHN5bnRoIGdyb3VwIHdpdGggZW5hYmxlZCBvdXRwdXRzCiYjNDM7ICogdXNlcyB0b2Rfc3RlcCB0byBhZGp1c3QgYm90aCBvdXRwdXRzIGFuZCB0aGUgVG9EIGNvdW50ZXIuIFJlbWFpbmluZwomIzQzOyAqIGdyb3VwcyBzdGVwIG91dHB1dHMgb25seS4gSWYgbm8gc3ludGggaGFzIGVuYWJsZWQgb3V0cHV0cywgdGhlIFRvRAomIzQzOyAqIGNvdW50ZXIgaXMgc3RlcHBlZCBhbG9uZSB1c2luZyBhbiBlbXB0eSBvdXRwdXQgbWFzayAodGhlIEZXIHVzZXMgdGhlCiYjNDM7ICogbG93ZXN0LUlEIHN5bnRoJiMzOTtzIHBlcmlvZCBmb3IgdGhlIGNvbnZlcnNpb24pLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIG5vIHN5bnRocyBhdmFpbGFibGUsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwsCiYjNDM7CQkJCQkgICAgICAgczY0IGRlbHRhKQomIzQzO3sKJiM0MzsJdTE2IHN5bnRoX21hc2tbWkwzMDczWF9OVU1fU1lOVEhTXSA9IHt9OwomIzQzOwlzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLSZndDtkZXY7CiYjNDM7CWNvbnN0IHN0cnVjdCB6bDMwNzN4X3N5bnRoICpzeW50aDsKJiM0MzsJY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjsKJiM0MzsJc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbjsKJiM0MzsJdTMyIGZpcnN0X3N5bnRoX2ZyZXEgPSAwOwomIzQzOwlib29sIHRvZF9zdGVwcGVkID0gZmFsc2U7CiYjNDM7CXMzMiBzdGVwX2N5Y2xlczsKJiM0MzsJdTMyIHN5bnRoX2ZyZXE7CiYjNDM7CWludCByYzsKJiM0MzsJdTggaTsKJiM0MzsKJiM0MzsJY2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC0mZ3Q7aWQpOwomIzQzOwomIzQzOwkvKiBCdWlsZCBwZXItc3ludGggb3V0cHV0IG1hc2tzIGZyb20gcmVnaXN0ZXJlZCBvdXRwdXQgcGlucyAqLwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBpbiwgJmFtcDt6bGRwbGwtJmd0O3BpbnMsIGxpc3QpIHsKJiM0MzsJCXU4IG91dF9pZCwgc3ludGhfaWQ7CiYjNDM7CiYjNDM7CQlpZiAoemwzMDczeF9kcGxsX2lzX2lucHV0X3BpbihwaW4pKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJb3V0X2lkID0gemwzMDczeF9vdXRwdXRfcGluX291dF9nZXQocGluLSZndDtpZCk7CiYjNDM7CiYjNDM7CQlpZiAoIXpsMzA3M3hfY2hhbl9pc19vdXRfc3RlcHBlZChjaGFuLCBvdXRfaWQpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJc3ludGhfaWQgPSB6bDMwNzN4X2Rldl9vdXRfc3ludGhfZ2V0KHpsZGV2LCBvdXRfaWQpOwomIzQzOwkJaWYgKHN5bnRoX2lkICZndDs9IFpMMzA3M1hfTlVNX1NZTlRIUykgewomIzQzOwkJCWRldl93YXJuKHpsZGV2LSZndDtkZXYsICYjMzQ7VW5leHBlY3RlZCBzeW50aCBpZCBmb3IgT1VUJXVcbiYjMzQ7LAomIzQzOwkJCQkgb3V0X2lkKTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsJCXN5bnRoX21hc2tbc3ludGhfaWRdIHw9IEJJVChvdXRfaWQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFByb2Nlc3MgZWFjaCBzeW50aCBncm91cCAqLwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgWkwzMDczWF9OVU1fU1lOVEhTOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3ludGggPSB6bDMwNzN4X3N5bnRoX3N0YXRlX2dldCh6bGRldiwgaSk7CiYjNDM7CQlpZiAoIXpsMzA3M3hfc3ludGhfaXNfZW5hYmxlZChzeW50aCkgfHwKJiM0MzsJCSAgICB6bDMwNzN4X3N5bnRoX2RwbGxfZ2V0KHN5bnRoKSAhPSB6bGRwbGwtJmd0O2lkKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJc3ludGhfZnJlcSA9IHpsMzA3M3hfc3ludGhfZnJlcV9nZXQoc3ludGgpOwomIzQzOwomIzQzOwkJLyogUmVtZW1iZXIgbG93ZXN0LUlEIHN5bnRoIGZyZXEgZm9yIFRvRC1vbmx5IGZhbGxiYWNrICovCiYjNDM7CQlpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpCiYjNDM7CQkJZmlyc3Rfc3ludGhfZnJlcSA9IHN5bnRoX2ZyZXE7CiYjNDM7CiYjNDM7CQlpZiAoIXN5bnRoX21hc2tbaV0pCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkvKiBTYWZlIGZvciBzMzI6IG1heCBzeW50aCBmcmVxIGlzIDc1MCBNSHogKi8KJiM0MzsJCXN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIHN5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7CiYjNDM7CiYjNDM7CQlyYyA9IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtJmd0O2lkLAomIzQzOwkJCQkJICAgICBzeW50aF9tYXNrW2ldLCBzdGVwX2N5Y2xlcywKJiM0MzsJCQkJCSAgICAgIXRvZF9zdGVwcGVkKTsKJiM0MzsJCWlmIChyYykgewomIzQzOwkJCWlmICh0b2Rfc3RlcHBlZCkgewomIzQzOwkJCQlkZXZfd2Fybih6bGRldi0mZ3Q7ZGV2LAomIzQzOwkJCQkJICYjMzQ7UGFydGlhbCBwaGFzZSBzdGVwIGZhaWx1cmVcbiYjMzQ7KTsKJiM0MzsJCQkJcmV0dXJuIDA7CiYjNDM7CQkJfQomIzQzOwkJCXJldHVybiByYzsKJiM0MzsJCX0KJiM0MzsJCXRvZF9zdGVwcGVkID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CS8qIE5vIGVuYWJsZWQgb3V0cHV0cyBmb3VuZDsgc3RlcCBUb0QgY291bnRlciBvbmx5IHVzaW5nIHRoZQomIzQzOwkgKiBsb3dlc3QtSUQgc3ludGgmIzM5O3MgcGVyaW9kIChlbXB0eSBvdXRwdXQgbWFzaykuCiYjNDM7CSAqLwomIzQzOwlpZiAoIXRvZF9zdGVwcGVkKSB7CiYjNDM7CQlzdGVwX2N5Y2xlcyA9IGRpdl9zNjQoZGVsdGEgKiBmaXJzdF9zeW50aF9mcmVxLCBOU0VDX1BFUl9TRUMpOwomIzQzOwkJcmV0dXJuIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtJmd0O2lkLCAwLAomIzQzOwkJCQkJICAgICAgIHN0ZXBfY3ljbGVzLCB0cnVlKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogLyoqCi0gKiB6bDMwNzN4X2RwbGxfZnJlZSAtIGZyZWUgRFBMTCBkZXZpY2UKLSAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZQomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSAtIGFkanVzdCBQVFAgY2xvY2sgdGltZQomIzQzOyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mbwomIzQzOyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzCiAgKgotICogRGVhbGxvY2F0ZXMgZ2l2ZW4gRFBMTCBkZXZpY2UgcHJldmlvdXNseSBhbGxvY2F0ZWQgYnkgQHpsMzA3M3hfZHBsbF9hbGxvYy4KJiM0MzsgKiBJbiBOQ08gbW9kZSwgbGFyZ2UgZGVsdGFzICgmZ3Q7PSAxIHNlY29uZCkgYXJlIHNwbGl0IGludG8gYSBUb0QKJiM0MzsgKiByZWFkLW1vZGlmeS13cml0ZSBmb3IgdGhlIHNlY29uZHMgcGFydCBhbmQgYW4gb3V0cHV0IHBoYXNlIHN0ZXAgZm9yCiYjNDM7ICogdGhlIHN1Yi1zZWNvbmQgcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgcGhhc2Ugc3RlcCBkaXJlY3RseSwKJiM0MzsgKiBmYWxsaW5nIGJhY2sgdG8gVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIGlmIHBoYXNlIHN0ZXAgaXMgdW5hdmFpbGFibGUuCiYjNDM7ICogSW4gQVVUTy9SRUZMT0NLIG1vZGVzLCBsYXJnZSBkZWx0YXMgYXJlIHNwbGl0IGludG8gVG9ECiYjNDM7ICogcmVhZC1tb2RpZnktd3JpdGUgZm9yIHNlY29uZHMgYW5kIFRJRSB3cml0ZSBmb3IgdGhlIHN1Yi1zZWNvbmQKJiM0MzsgKiByZW1haW5kZXIuIFN1Yi1zZWNvbmQgZGVsdGFzIHVzZSBUSUUgd3JpdGUgZGlyZWN0bHkuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKICAqLwotdm9pZAotemwzMDczeF9kcGxsX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczY0IGRlbHRhKQogewotCVdBUk4oemxkcGxsLSZndDtkcGxsX2RldiwgJiMzNDtEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXG4mIzM0Oyk7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLAomIzQzOwkJCQkJCSAgIHB0cF9pbmZvKTsKJiM0MzsJc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC0mZ3Q7ZGV2OwomIzQzOwljb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuOwomIzQzOwlib29sIHNlY19hZGp1c3RlZCA9IGZhbHNlOwomIzQzOwlzdHJ1Y3QgdGltZXNwZWM2NCB0czsKJiM0MzsJaW50IHJjOwogCi0JbXV0ZXhfZGVzdHJveSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7Ci0Ja2ZyZWUoemxkcGxsKTsKJiM0MzsJaWYgKCFkZWx0YSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwomIzQzOwkvKiBNb2RlcyB3aXRob3V0IHBoYXNlIHN0ZXAgb3IgVElFIHVzZSBwbGFpbiBUb0QgYWRqdXN0ICovCiYjNDM7CWNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZGV2LCB6bGRwbGwtJmd0O2lkKTsKJiM0MzsJaWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikgJmFtcDsmYW1wOwomIzQzOwkgICAgIXpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjaGFuKSkKJiM0MzsJCXJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLSZndDtpZCwKJiM0MzsJCQkJCSAgICAgICBuc190b190aW1lc3BlYzY0KGRlbHRhKSk7CiYjNDM7CiYjNDM7CS8qIFNwbGl0IG9mZiBzZWNvbmRzIHZpYSBUb0QgcmVhZC1tb2RpZnktd3JpdGUgc28gdGhlIHN1Yi1zZWNvbmQKJiM0MzsJICogcmVtYWluZGVyIGNhbiBiZSBhcHBsaWVkIHRocm91Z2ggdGhlIG91dHB1dC1jb2hlcmVudCBtZWNoYW5pc20KJiM0MzsJICogKHBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlKS4KJiM0MzsJICovCiYjNDM7CWlmIChhYnMoZGVsdGEpICZndDs9IE5TRUNfUEVSX1NFQykgewomIzQzOwkJczMyIHJlbWFpbmRlcjsKJiM0MzsKJiM0MzsJCXRzLnR2X3NlYyA9IGRpdl9zNjRfcmVtKGRlbHRhLCBOU0VDX1BFUl9TRUMsICZhbXA7cmVtYWluZGVyKTsKJiM0MzsJCXRzLnR2X25zZWMgPSAwOwomIzQzOwkJZGVsdGEgPSByZW1haW5kZXI7CiYjNDM7CiYjNDM7CQlyYyA9IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtJmd0O2lkLCB0cyk7CiYjNDM7CQlpZiAocmMpCiYjNDM7CQkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwkJc2VjX2FkanVzdGVkID0gdHJ1ZTsKJiM0MzsKJiM0MzsJCS8qIE5vIHN1Yi1zZWNvbmQgcmVtYWluZGVyLCBkb25lICovCiYjNDM7CQlpZiAoIWRlbHRhKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEFwcGx5IHN1Yi1zZWNvbmQgZGVsdGEgdmlhIHBoYXNlIHN0ZXAgKE5DTykgb3IgVElFIHdyaXRlICovCiYjNDM7CWlmICh6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikpIHsKJiM0MzsJCXJjID0gemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoemxkcGxsLCBkZWx0YSk7CiYjNDM7CQlpZiAoIXJjKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcmMgPSB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHpsZGV2LCB6bGRwbGwtJmd0O2lkLCBkZWx0YSk7CiYjNDM7CQlpZiAoIXJjKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlIGZhaWxlZCwgZmFsbCBiYWNrIHRvIFRvRCBhZGp1c3QgKi8KJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLSZndDtpZCwKJiM0MzsJCQkJICAgICBuc190b190aW1lc3BlYzY0KGRlbHRhKSk7CiYjNDM7CiYjNDM7CS8qIEluIHRoZSB1bmxpa2VseSBldmVudCB0aGF0IGJvdGggcGhhc2Ugc3RlcC9USUUgd3JpdGUgYW5kIGZhbGxiYWNrCiYjNDM7CSAqIFRvRCBhZGp1c3QgZmFpbCBhZnRlciBzZWNvbmRzIHdlcmUgYWxyZWFkeSBjb21taXR0ZWQsIHJldHVybgomIzQzOwkgKiBzdWNjZXNzIHRvIHByZXZlbnQgdGhlIFBUUCBzZXJ2byBmcm9tIHJldHJ5aW5nIHRoZSBmdWxsIGRlbHRhIGFuZAomIzQzOwkgKiBhcHBseWluZyBzZWNvbmRzIGFnYWluLiBUaGUgc3ViLXNlY29uZCByZXNpZHVhbCB3aWxsIHNlbGYtY29ycmVjdAomIzQzOwkgKiBpbiB0aGUgbmV4dCBzZXJ2byBjeWNsZS4KJiM0MzsJICovCiYjNDM7CWlmIChyYyAmYW1wOyZhbXA7IHNlY19hZGp1c3RlZCkgewomIzQzOwkJZGV2X3dhcm4oemxkZXYtJmd0O2RldiwKJiM0MzsJCQkgJiMzNDtTdWItc2Vjb25kIGFkanVzdG1lbnQgZmFpbGVkIGFmdGVyIHNlY29uZHMgYXBwbGllZFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUgLSBhZGp1c3QgUFRQIGNsb2NrIGZyZXF1ZW5jeQomIzQzOyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mbwomIzQzOyAqIEBzY2FsZWRfcHBtOiBmcmVxdWVuY3kgYWRqdXN0bWVudCBpbiBzY2FsZWQgcHBtIChwcG0gKiAyXjE2KQomIzQzOyAqCiYjNDM7ICogT25seSBzdXBwb3J0ZWQgaW4gTkNPIG1vZGUuIFdyaXRlcyB0aGUgZGVsdGEgZnJlcXVlbmN5IG9mZnNldCByZWdpc3Rlci4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRU9QTk9UU1VQUCBpZiBub3QgaW4gTkNPIG1vZGUsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludAomIzQzO3psMzA3M3hfZHBsbF9wdHBfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGxvbmcgc2NhbGVkX3BwbSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLAomIzQzOwkJCQkJCSAgIHB0cF9pbmZvKTsKJiM0MzsJY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjsKJiM0MzsJczY0IG9mZnNldDsKJiM0MzsKJiM0MzsJLyogQ29udmVydCBzY2FsZWRfcHBtIHRvIGRmX29mZnNldCBpbiAyXi00OCBzdGVwczoKJiM0MzsJICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjMyKSAvIDEwXjYKJiM0MzsJICoKJiM0MzsJICogU2ltcGxpZnkgdG8gYXZvaWQgb3ZlcmZsb3c6CiYjNDM7CSAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogMl4yNikgLyA1XjYKJiM0MzsJICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiA2NzEwODg2NCkgLyAxNTYyNQomIzQzOwkgKi8KJiM0MzsJb2Zmc2V0ID0gLWRpdl9zNjQoKHM2NClzY2FsZWRfcHBtICogNjcxMDg4NjRMTCwgMTU2MjUpOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwomIzQzOwljaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRwbGwtJmd0O2RldiwgemxkcGxsLSZndDtpZCk7CiYjNDM7CWlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKQomIzQzOwkJcmV0dXJuIHNjYWxlZF9wcG0gPyAtRU9QTk9UU1VQUCA6IDA7CiYjNDM7CWlmIChvZmZzZXQgPT0gY2hhbi0mZ3Q7ZGZfb2Zmc2V0KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCh6bGRwbGwtJmd0O2RldiwgemxkcGxsLSZndDtpZCwgb2Zmc2V0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSAtIGFkanVzdCBQVFAgY2xvY2sgcGhhc2UKJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm8KJiM0MzsgKiBAZGVsdGE6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMKJiM0MzsgKgomIzQzOyAqIE9ubHkgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMuIFVzZXMgVElFIHdyaXRlIGZvcgomIzQzOyAqIG5hbm9zZWNvbmQgcmVzb2x1dGlvbiBwaGFzZSBhZGp1c3RtZW50LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIG1vZGUgZG9lc24mIzM5O3Qgc3VwcG9ydCBUSUUsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczMyIGRlbHRhKQomIzQzO3sKJiM0MzsJc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsCiYjNDM7CQkJCQkJICAgcHRwX2luZm8pOwomIzQzOwlzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLSZndDtkZXY7CiYjNDM7CWNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47CiYjNDM7CiYjNDM7CWlmICghZGVsdGEpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7emxkcGxsLSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJY2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC0mZ3Q7aWQpOwomIzQzOwomIzQzOwlpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjaGFuKSkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoemxkZXYsIHpsZHBsbC0mZ3Q7aWQsIGRlbHRhKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHMzMgomIzQzO3psMzA3M3hfZHBsbF9wdHBfZ2V0bWF4cGhhc2Uoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvIF9fYWx3YXlzX3VudXNlZCkKJiM0Mzt7CiYjNDM7CS8qIEhXIGxpbWl0cyBUSUUgd3JpdGUgdG8gJiM0MzstMSBzZWNvbmQuIFJldHVybiB0aGUgY29uc3RhbnQgSFcKJiM0MzsJICogbGltaXQgYW5kIGxldCBhZGpwaGFzZSBoYW5kbGUgbW9kZS1zcGVjaWZpYyBjaGVja3MuCiYjNDM7CSAqLwomIzQzOwlyZXR1cm4gTlNFQ19QRVJfU0VDIC0gMTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9wZXJvdXRfZmluZF9waW4gLSBmaW5kIHBpbiBieSBwZXJvdXQgY2hhbm5lbCBpbmRleAomIzQzOyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbAomIzQzOyAqIEBpZHg6IHBlcm91dCBjaGFubmVsIGluZGV4IHRvIGZpbmQKJiM0MzsgKgomIzQzOyAqIFJldHVybjogcG9pbnRlciB0byB0aGUgcGluLCBvciBOVUxMIGlmIG5vdCBmb3VuZAomIzQzOyAqLwomIzQzO3N0YXRpYyBzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqCiYjNDM7emwzMDczeF9kcGxsX3B0cF9wZXJvdXRfZmluZF9waW4oc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLCBpbnQgaWR4KQomIzQzO3sKJiM0MzsJc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbjsKJiM0MzsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeShwaW4sICZhbXA7emxkcGxsLSZndDtwaW5zLCBsaXN0KSB7CiYjNDM7CQlpZiAocGluLSZndDtwZXJvdXRfaWR4ID09IGlkeCkKJiM0MzsJCQlyZXR1cm4gcGluOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2VuYWJsZSAtIGVuYWJsZS9kaXNhYmxlIFBUUCBjbG9jayBmdW5jdGlvbnMKJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm8KJiM0MzsgKiBAcnE6IHRoZSByZXF1ZXN0ZWQgY2xvY2sgZnVuY3Rpb24gYW5kIHBhcmFtZXRlcnMKJiM0MzsgKiBAb246IHRydWUgdG8gZW5hYmxlLCBmYWxzZSB0byBkaXNhYmxlCiYjNDM7ICoKJiM0MzsgKiBIYW5kbGVzIFBUUF9DTEtfUkVRX1BFUk9VVCByZXF1ZXN0cy4gT25seSAxUFBTIChwZXJpb2QgPSAxcykgaXMgc3VwcG9ydGVkLgomIzQzOyAqIE9uIGVuYWJsZSwgY29uZmlndXJlcyB0aGUgb3V0cHV0IGRpdmlkZXIgZm9yIDEgSHouIE9uIGRpc2FibGUsIGRvZXMgbm90aGluZwomIzQzOyAqIGFzIHRoZSBzaWduYWwgaXMgbm90IGRpc2FibGVkLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2VuYWJsZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sCiYjNDM7CQkJCSAgIHN0cnVjdCBwdHBfY2xvY2tfcmVxdWVzdCAqcnEsIGludCBvbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLAomIzQzOwkJCQkJCSAgIHB0cF9pbmZvKTsKJiM0MzsJc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbjsKJiM0MzsJdW5zaWduZWQgaW50IGlkeDsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlpZiAocnEtJmd0O3R5cGUgIT0gUFRQX0NMS19SRVFfUEVST1VUKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlpZHggPSBycS0mZ3Q7cGVyb3V0LmluZGV4OwomIzQzOwlpZiAoaWR4ICZndDs9IGluZm8tJmd0O25fcGVyX291dCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkvKiBUb2dnbGluZyBvdXRwdXQgcGlucyBjYW4gcHJvZHVjZSBydW50IHB1bHNlcywgc28gZGlzYWJsZQomIzQzOwkgKiBpcyBhIG5vLW9wLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFvbikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwkvKiBPbmx5IGFjY2VwdCBleGFjdGx5IDFQUFMgKHBlcmlvZC5zZWMgPT0gMSwgbnNlYyA9PSAwKSAqLwomIzQzOwlpZiAocnEtJmd0O3Blcm91dC5wZXJpb2Quc2VjICE9IDEgfHwgcnEtJmd0O3Blcm91dC5wZXJpb2QubnNlYyAhPSAwKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwomIzQzOwlwaW4gPSB6bDMwNzN4X2RwbGxfcHRwX3Blcm91dF9maW5kX3Bpbih6bGRwbGwsIGlkeCk7CiYjNDM7CWlmICghcGluKSB7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQWxyZWFkeSBhdCAxIEh6LCBub3RoaW5nIHRvIGRvICovCiYjNDM7CWlmICh6bDMwNzN4X2Rldl9vdXRwdXRfcGluX2ZyZXFfZ2V0KHpsZHBsbC0mZ3Q7ZGV2LCBwaW4tJmd0O2lkKSA9PSAxKSB7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmMgPSBfX3psMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoemxkcGxsLCBwaW4sIDEpOwomIzQzOwomIzQzOwltdXRleF91bmxvY2soJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwomIzQzOwlpZiAoIXJjKQomIzQzOwkJZHBsbF9waW5fY2hhbmdlX250ZihwaW4tJmd0O2RwbGxfcGluKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHB0cF9jbG9ja19pbmZvIHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mbyA9IHsKJiM0MzsJLm93bmVyCQk9IFRISVNfTU9EVUxFLAomIzQzOwkubWF4X2Fkagk9IFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESiwKJiM0MzsJLmdldHRpbWV4NjQJPSB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQsCiYjNDM7CS5zZXR0aW1lNjQJPSB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCwKJiM0MzsJLmFkanRpbWUJPSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUsCiYjNDM7CS5hZGpmaW5lCT0gemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lLAomIzQzOwkuYWRqcGhhc2UJPSB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlLAomIzQzOwkuZ2V0bWF4cGhhc2UJPSB6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlLAomIzQzOwkuZW5hYmxlCQk9IHpsMzA3M3hfZHBsbF9wdHBfZW5hYmxlLAomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9yZWdpc3RlciAtIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgYSBEUExMIGNoYW5uZWwKJiM0MzsgKiBAemxkcGxsOiBEUExMIGNoYW5uZWwgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvcgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtJmd0O2RldjsKJiM0MzsJc3RydWN0IHB0cF9jbG9jayAqcHRwX2Nsb2NrOwomIzQzOwomIzQzOwlzbnByaW50Zih6bGRwbGwtJmd0O3B0cF9pbmZvLm5hbWUsIHNpemVvZih6bGRwbGwtJmd0O3B0cF9pbmZvLm5hbWUpLAomIzQzOwkJICYjMzQ7emwzMDczeC1kcGxsJXUmIzM0OywgemxkcGxsLSZndDtpZCk7CiYjNDM7CiYjNDM7CXB0cF9jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcigmYW1wO3psZHBsbC0mZ3Q7cHRwX2luZm8sIHpsZGV2LSZndDtkZXYpOwomIzQzOwlpZiAoSVNfRVJSKHB0cF9jbG9jaykpIHsKJiM0MzsJCWRldl9lcnIoemxkZXYtJmd0O2RldiwgJiMzNDtGYWlsZWQgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBEUExMJXVcbiYjMzQ7LAomIzQzOwkJCXpsZHBsbC0mZ3Q7aWQpOwomIzQzOwkJcmV0dXJuIFBUUl9FUlIocHRwX2Nsb2NrKTsKJiM0MzsJfQomIzQzOwomIzQzOwl6bGRwbGwtJmd0O3B0cF9jbG9jayA9IHB0cF9jbG9jazsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlciAtIHVucmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBhIERQTEwgY2hhbm5lbAomIzQzOyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byB1bnJlZ2lzdGVyIFBUUCBjbG9jayBmb3IKJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCB6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQomIzQzO3sKJiM0MzsJaWYgKCFJU19FUlJfT1JfTlVMTCh6bGRwbGwtJmd0O3B0cF9jbG9jaykpIHsKJiM0MzsJCXB0cF9jbG9ja191bnJlZ2lzdGVyKHpsZHBsbC0mZ3Q7cHRwX2Nsb2NrKTsKJiM0MzsJCXpsZHBsbC0mZ3Q7cHRwX2Nsb2NrID0gTlVMTDsKJiM0MzsJfQogfQogCiAvKioKQEAgLTI0MDMsNiAmIzQzOzI4NjMsNDggQEAgemwzMDczeF9kcGxsX3JlZl9zeW5jX3BhaXJzX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9hbGxvYyAtIGFsbG9jYXRlIERQTEwgZGV2aWNlCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyCiYjNDM7ICoKJiM0MzsgKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHBvaW50ZXIgdG8gRFBMTCBkZXZpY2Ugb24gc3VjY2VzcywgZXJyb3IgcG9pbnRlciBvbiBlcnJvcgomIzQzOyAqLwomIzQzO3N0cnVjdCB6bDMwNzN4X2RwbGwgKgomIzQzO3psMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbDsKJiM0MzsKJiM0MzsJemxkcGxsID0ga3phbGxvY19vYmooKnpsZHBsbCk7CiYjNDM7CWlmICghemxkcGxsKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiYjNDM7CiYjNDM7CXpsZHBsbC0mZ3Q7ZGV2ID0gemxkZXY7CiYjNDM7CXpsZHBsbC0mZ3Q7aWQgPSBjaDsKJiM0MzsJemxkcGxsLSZndDtwdHBfaW5mbyA9IHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mbzsKJiM0MzsJbXV0ZXhfaW5pdCgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiYjNDM7CUlOSVRfTElTVF9IRUFEKCZhbXA7emxkcGxsLSZndDtwaW5zKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsZHBsbDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlCiYjNDM7ICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlCiYjNDM7ICoKJiM0MzsgKiBEZWFsbG9jYXRlcyBnaXZlbiBEUExMIGRldmljZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBieSBAemwzMDczeF9kcGxsX2FsbG9jLgomIzQzOyAqLwomIzQzO3ZvaWQKJiM0Mzt6bDMwNzN4X2RwbGxfZnJlZShzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpCiYjNDM7ewomIzQzOwlXQVJOKHpsZHBsbC0mZ3Q7ZHBsbF9kZXYsICYjMzQ7RFBMTCBkZXZpY2UgaXMgc3RpbGwgcmVnaXN0ZXJlZFxuJiMzNDspOwomIzQzOwomIzQzOwltdXRleF9kZXN0cm95KCZhbXA7emxkcGxsLSZndDtsb2NrKTsKJiM0MzsJa2ZyZWUoemxkcGxsKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHpsMzA3M3hfZHBsbF9yZWdpc3RlciAtIHJlZ2lzdGVyIERQTEwgZGV2aWNlIGFuZCBhbGwgaXRzIHBpbnMKICAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZQpAQCAtMjQzMyw2ICYjNDM7MjkzNSwxMyBAQCB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQogCQlyZXR1cm4gcmM7CiAJfQogCiYjNDM7CXJjID0gemwzMDczeF9kcGxsX3B0cF9yZWdpc3Rlcih6bGRwbGwpOwomIzQzOwlpZiAocmMpIHsKJiM0MzsJCXpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTsKJiM0MzsJCXpsMzA3M3hfZHBsbF9kZXZpY2VfdW5yZWdpc3Rlcih6bGRwbGwpOwomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI0NDYsNyAmIzQzOzI5NTUsNyBAQCB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQogdm9pZAogemwzMDczeF9kcGxsX3VucmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQogewotCS8qIFVucmVnaXN0ZXIgYWxsIHBpbnMgYW5kIGRwbGwgKi8KJiM0MzsJemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHpsZHBsbCk7CiAJemwzMDczeF9kcGxsX3BpbnNfdW5yZWdpc3Rlcih6bGRwbGwpOwogCXpsMzA3M3hfZHBsbF9kZXZpY2VfdW5yZWdpc3Rlcih6bGRwbGwpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oCmluZGV4IGZhZWJjNDAyYmExYjcwLi45YjVmNzJjMzM4NDljZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaApAQCAtNSw2ICYjNDM7NSw4IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9kcGxsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbGlzdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tdXRleC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wdHBfY2xvY2tfa2VybmVsLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7Y29yZS5oJiMzNDsKIApAQCAtMjIsNiAmIzQzOzI0LDggQEAKICAqIEB0eXBlOiBEUExMIHR5cGUgKFBQUyBvciBFRUMpCiAgKiBAbG9ja19zdGF0dXM6IGxhc3Qgc2F2ZWQgRFBMTCBsb2NrIHN0YXR1cwogICogQHBpbnM6IGxpc3Qgb2YgcGlucwomIzQzOyAqIEBwdHBfaW5mbzogUFRQIGNsb2NrIGluZm8KJiM0MzsgKiBAcHRwX2Nsb2NrOiByZWdpc3RlcmVkIFBUUCBjbG9jayAob3IgTlVMTCkKICAqLwogc3RydWN0IHpsMzA3M3hfZHBsbCB7CiAJc3RydWN0IGxpc3RfaGVhZAkJbGlzdDsKQEAgLTM2LDYgJiM0Mzs0MCw4IEBAIHN0cnVjdCB6bDMwNzN4X2RwbGwgewogCWVudW0gZHBsbF90eXBlCQkJdHlwZTsKIAllbnVtIGRwbGxfbG9ja19zdGF0dXMJCWxvY2tfc3RhdHVzOwogCXN0cnVjdCBsaXN0X2hlYWQJCXBpbnM7CiYjNDM7CXN0cnVjdCBwdHBfY2xvY2tfaW5mbwkJcHRwX2luZm87CiYjNDM7CXN0cnVjdCBwdHBfY2xvY2sJCSpwdHBfY2xvY2s7CiB9OwogCiBzdHJ1Y3QgemwzMDczeF9kcGxsICp6bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oCmluZGV4IGI3MGVhZDdkNDQ5NWIyLi40NDc3NTdlOTk4NDVkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaApAQCAtMTc5LDYgJiM0MzsxNzksMjAgQEAKICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRAkJCUdFTk1BU0soMiwgMCkKICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRF9BQ0NfSQkJNAogCiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTAkJCVpMX1JFRyg1LCAweDMwLCAxKQomIzQzOyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUAkJCUdFTk1BU0soMiwgMCkKJiM0MzsjZGVmaW5lIFpMX0RQTExfVElFX0NUUkxfT1BfV1IJCQk0CiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTF9NQVNLCQlaTF9SRUcoNSwgMHgzMSwgMSkKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9DVFJMKF9pZHgpCQkJCQlcCiYjNDM7CVpMX1JFR19JRFgoX2lkeCwgNSwgMHgzOCwgMSwgOCwgMSkKJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfU0VNCQkJQklUKDQpCiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRAkJCUdFTk1BU0soMywgMCkKJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaCTEKJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX0NVUlJFTlQJOAomIzQzOyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFoJOQomIzQzOwogI2RlZmluZSBaTF9SRUdfRFBMTF9NRUFTX0NUUkwJCQlaTF9SRUcoNSwgMHg1MCwgMSkKICNkZWZpbmUgWkxfRFBMTF9NRUFTX0NUUkxfRU4JCQlCSVQoMCkKICNkZWZpbmUgWkxfRFBMTF9NRUFTX0NUUkxfQVZHX0ZBQ1RPUgkJR0VOTUFTSyg3LCA0KQpAQCAtMTkzLDYgJiM0MzsyMDcsOSBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogUmVnaXN0ZXIgUGFnZXMgNi03LCBEUExMIERhdGEKJiM0MzsgKgomIzQzOyAqIFBlci1jaGFubmVsIHJlZ2lzdGVycyB3aXRoIHN0cmlkZSAweDIwLiBDaGFubmVscyAwLTMgcmVzaWRlIG9uIHBhZ2UgNiwKJiM0MzsgKiBjaGFubmVsIDQgb24gcGFnZSA3LgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNkZWZpbmUgWkxfUkVHX0RQTExfREZfT0ZGU0VUXzAzKF9pZHgpCQkJCQlcCkBAIC0yMDIsNiAmIzQzOzIxOSwyNCBAQAogCSgoX2lkeCkgJmx0OyA0ID8gWkxfUkVHX0RQTExfREZfT0ZGU0VUXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfREZfT0ZGU0VUXzQpCiAjZGVmaW5lIFpMX0RQTExfREZfT0ZGU0VUX1VOS05PV04JUzY0X01JTgogCiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KQkJCQkJXAomIzQzOwlaTF9SRUdfSURYKF9pZHgsIDYsIDB4MEMsIDYsIDQsIDB4MjApCiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQV80CQkJWkxfUkVHKDcsIDB4MEMsIDYpCiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQShfaWR4KQkJCQkJXAomIzQzOwkoKF9pZHgpICZsdDsgNCA/IFpMX1JFR19EUExMX1RJRV9EQVRBXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVElFX0RBVEFfNCkKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUNfMDMoX2lkeCkJCQkJCVwKJiM0MzsJWkxfUkVHX0lEWChfaWR4LCA2LCAweDEyLCA2LCA0LCAweDIwKQomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQ180CQkJWkxfUkVHKDcsIDB4MTIsIDYpCiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDKF9pZHgpCQkJCQlcCiYjNDM7CSgoX2lkeCkgJmx0OyA0ID8gWkxfUkVHX0RQTExfVE9EX1NFQ18wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RPRF9TRUNfNCkKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU18wMyhfaWR4KQkJCQkJXAomIzQzOwlaTF9SRUdfSURYKF9pZHgsIDYsIDB4MTgsIDQsIDQsIDB4MjApCiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlNfNAkJCVpMX1JFRyg3LCAweDE4LCA0KQomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TKF9pZHgpCQkJCQlcCiYjNDM7CSgoX2lkeCkgJmx0OyA0ID8gWkxfUkVHX0RQTExfVE9EX05TXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVE9EX05TXzQpCiYjNDM7CiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFJlZ2lzdGVyIFBhZ2UgOSwgU3ludGggYW5kIE91dHB1dAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMjIxLDYgJiM0MzsyNTYsOCBAQAogI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9FTgkJCUJJVCgwKQogI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9TWU5USF9TRUwJCUdFTk1BU0soNiwgNCkKIAomIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTSwkJWkxfUkVHKDksIDB4MzYsIDIpCiYjNDM7CiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogUmVnaXN0ZXIgUGFnZSAxMCwgUmVmIE1haWxib3gKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMzE2LDYgJiM0MzszNTMsMjUgQEAKICNkZWZpbmUgWkxfUkVHX09VVFBVVF9FU1lOQ19XSURUSAkJWkxfUkVHKDE0LCAweDE4LCA0KQogI2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX0NPTVAJCVpMX1JFRygxNCwgMHgyMCwgNCkKIAomIzQzOy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgomIzQzOyAqIFJlZ2lzdGVyIFBhZ2UgOSwgT3V0cHV0IFBoYXNlIFN0ZXAKJiM0MzsgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTAkJWkxfUkVHKDksIDB4MzgsIDEpCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX0RQTEwJCUdFTk1BU0soNiwgNCkKJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVAJQklUKDMpCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QCQlHRU5NQVNLKDEsIDApCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX05PTkUJMAomIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9SRVNFVAkxCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1JFQUQJMgomIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURQkzCiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTlVNQkVSCQlaTF9SRUcoOSwgMHgzOSwgMSkKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLCQlaTF9SRUcoOSwgMHgzYSwgMikKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBCQlaTF9SRUcoOSwgMHgzYywgNCkKJiM0MzsKIC8qCiAgKiBSZWdpc3RlciBQYWdlIDI1NSAtIEhXIHJlZ2lzdGVycyBhY2Nlc3MKICAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxMToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDE0MQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDc2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBUUCBDbG9jayBQYXRjaCBmb3IgdGhlIEF6dXJpdGUgRFBMTCBEcml2ZXIgKHpsMzA3M3gpKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGFkZGluZyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIsIGBkcml2ZXJzL2RwbGwvemwzMDczeC9gLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiBpdCYjMzk7cyByZWFjaGFibGUgYW5kIGlkZW50aWZ5IHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBmdW5jdGlvbnMgdG8gdGFyZ2V0LgoKRmlyc3QsIEkgc2VlIHRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYEtjb25maWdgIGZpbGUsIG1ha2luZyB0aGUgZHJpdmVyIGRlcGVuZCBvbiBgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxgLiBUaGF0IG1lYW5zIGBQVFBfMTU4OF9DTE9DS2AgaXMgbm93IGNydWNpYWwsIGFsb25nIHdpdGggdGhlIHN0YW5kYXJkIGBaTDMwNzNYYCwgYFpMMzA3M1hfSTJDYCwgYW5kIGBaTDMwNzNYX1NQSWAgY29uZmlndXJhdGlvbnMuIFNvLCB0aGUgYmFzZSByZXF1aXJlbWVudHMgYXJlIGBaTDMwNzNYYCwgYW5kIG9uZSBvZiB0aGUgY29tbXVuaWNhdGlvbiBwcm90b2NvbHMgKGBaTDMwNzNYX0kyQ2Agb3IgYFpMMzA3M1hfU1BJYCksIGFuZCBub3cgdGhlIGBQVFBfMTU4OF9DTE9DS2AgY29uZmlnLgoKTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIHRoZSBuZXcgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgSSBzaG91bGQgYmUgZnV6emluZy4gTG9va3MgbGlrZSB0aGVyZSBhcmUgYSBudW1iZXIgb2YgZnVuY3Rpb25zIGFkZGVkIGZvciByZWFkL3dyaXRlIFRpbWUgb2YgRGF5IChUb0QpLCBwaGFzZSBhZGp1c3RtZW50LCBmcmVxdWVuY3kgYWRqdXN0bWVudCwgYW5kIFBUUCBjbG9jayByZWdpc3RyYXRpb24uIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGVzZTogYHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NGAsIGB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NGAsIGB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVgLCBgemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lYCwgYHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2VgLCBgemwzMDczeF9kcGxsX3B0cF9lbmFibGVgLCBgemwzMDczeF9jaGFuX3RvZF9yZWFkYCwgYHpsMzA3M3hfY2hhbl90b2Rfd3JpdGVgLCBgemwzMDczeF9jaGFuX3RvZF9hZGp1c3RgLCBgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXBgLCBhbmQgYHpsMzA3M3hfY2hhbl90aWVfd3JpdGVgLiBUaGVzZSBhcmUgbXkgaW5pdGlhbCB0YXJnZXRzLgoKTmV4dCwgaG93IGRvIEkgZ2V0IHRvIHRoZSBkcml2ZXI/IEl0JiMzOTtzIGFuIEkyQy9TUEkgZHJpdmVyLCBzbyBpdCBjYW4gYmUgcmVhY2hlZCB0aHJvdWdoIHRoZSBJMkMvU1BJIHN1YnN5c3RlbXMuIEkgY291bGQgaGl0IGl0IGZyb20gdXNlcnNwYWNlIHZpYSBgL2Rldi9pMmMtZGV2YCBvciBgL2Rldi9zcGlkZXZgLCBwb3RlbnRpYWxseSB1c2luZyBkZXZpY2UgdHJlZSBvdmVybGF5cywgb3IsIGlmIFN5emthbGxlciBzdXBwb3J0cyBpdCwgaXQgY291bGQgaW5qZWN0IEkyQy9TUEkgZGV2aWNlcy4gQmVjYXVzZSBpdCByZWdpc3RlcnMgYSBQVFAgY2xvY2ssIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGlzIGdvaW5nIHRvIGJlIHRoZSBQVFAgaW9jdGxzIHRocm91Z2ggYC9kZXYvcHRwWGAuIFRoYW5rZnVsbHksIFN5emthbGxlciBzdXBwb3J0cyBmdXp6aW5nIFBUUCBjbG9ja3MuIFNvIHRoYXQmIzM5O3MgdGhlIHBhdGguCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bGwgcXVpY2tseSB2ZXJpZnkgdGhvc2UgY29uZmlnIG5hbWVzIGFnYWluOiBgWkwzMDczWGAsIGBaTDMwNzNYX0kyQ2AsIGBaTDMwNzNYX1NQSWAsIGFuZCBgUFRQXzE1ODhfQ0xPQ0tgLgoKQmVmb3JlIEkgY2FsbCB0aGUgYHNldC1yZXN1bHRzYCB0b29sLCBsZXQgbWUganVzdCBxdWlja2x5IHJ1biB0aHJvdWdoIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gYERQTExgIGlzIHNlbGVjdGVkLCBgTkVUX0RFVkxJTktgIGlzIHNlbGVjdGVkLCBhbmQgYFJFR01BUGAgaXMgc2VsZWN0ZWQuIE9rYXksIGxvb2tzIGdvb2QuIFRpbWUgdG8gc2V0IHRob3NlIHJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTE6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFpMMzA3M1gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctMi1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWc6Mzpjb25maWcgWkwzMDczWFxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZy00LVx0dHJpc3RhdGUgXCYjMzQ7TWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlc1wmIzM0OyBpZiBDT01QSUxFX1RFU1Rcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTE2LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZzoxNzpjb25maWcgWkwzMDczWF9JMkNcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctMTgtXHR0cmlzdGF0ZSBcJiMzNDtJMkMgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzXCYjMzQ7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZy0yOC1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWc6Mjk6Y29uZmlnIFpMMzA3M1hfU1BJXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTMwLVx0dHJpc3RhdGUgXCYjMzQ7U1BJIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDExOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxOTcwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgUFRQIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGNvbmZpZ3VyYXRpb25zOiBgWkwzMDczWGAsIGBaTDMwNzNYX0kyQ2AsIGFuZCBgWkwzMDczWF9TUElgLiBTZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJk4oCUZGlmZmVyZW50IGNvbW11bmljYXRpb24gaW50ZXJmYWNlcyBmb3IgdGhlIHNhbWUgY29yZSBjaGlwLiBBbmQsIGFzIGV4cGVjdGVkLCB3ZSBuZWVkIGBQVFBfMTU4OF9DTE9DS2AgZm9yIFByZWNpc2lvbiBUaW1lIFByb3RvY29sIHN1cHBvcnQuIFRoaXMgYWxsIG1ha2VzIHNlbnNlLCBhcyB0aGUgWkwzMDczWCBpcyBhIGNvbW1vbiBQVFAgY2xvY2sgY2hpcC4KCk5vdywgbGV0IG1lIHF1aWNrbHkgcmV2aWV3IHRoZSBrZXkgZnVuY3Rpb24gY2FsbHMgSSYjMzk7bSBsaWtlbHkgdG8gZW5jb3VudGVyIHJlbGF0ZWQgdG8gdGhlIGBaTDMwNzNYYCBhbmQgaXRzIFBUUCBjYXBhYmlsaXRpZXMuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhvc2Ugc3BlY2lmaWMgYHpsMzA3M3hfZHBsbF9wdHBfKmAgY2FsbHMg4oCTIHRoYXQgZ2l2ZXMgbWUgYSBncmVhdCBtZW50YWwgbWFwIG9mIHRoZSBjb3JlIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBmdW5jdGlvbnMgcmVsYXRlZCB0byBnZXR0aW5nIGFuZCBzZXR0aW5nIHRpbWUsIGFkanVzdGluZywgZW5hYmxpbmcsIGFuZCByZWFkaW5nIGFuZCB3cml0aW5nIHRvIFRPRCAoVGltZSBvZiBEYXkpLiBUaGUgYWRqdXN0bWVudCBmdW5jdGlvbnMgYW5kIHBoYXNlIHN0ZXBwaW5nIGFyZSBrZXkuIEkgYWxzbyBzZWUgYSBmdW5jdGlvbiB0aGF0IGhhcyB0aWUsIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHdoYXQmIzM5O3MgaW52b2x2ZWQgd2l0aCB0aGF0LgoKQWxyaWdodCwgSSBzaG91bGQgY2hlY2sgd2hldGhlciBgUFRQXzE1ODhfQ0xPQ0tgIGlzIHNldCBhcyBJIG5lZWQgdG8gZW5hYmxlIHRoZSBQVFAgZmVhdHVyZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTE6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBUUF8xNTg4X0NMT0NLJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9wdHAvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3B0cC9LY29uZmlnPTY9bWVudSBcJiMzNDtQVFAgY2xvY2sgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9wdHAvS2NvbmZpZy03LVxuZHJpdmVycy9wdHAvS2NvbmZpZzo4OmNvbmZpZyBQVFBfMTU4OF9DTE9DS1xuZHJpdmVycy9wdHAvS2NvbmZpZy05LVx0dHJpc3RhdGUgXCYjMzQ7UFRQIGNsb2NrIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL3B0cC9LY29uZmlnLTI5LVxuZHJpdmVycy9wdHAvS2NvbmZpZzozMDpjb25maWcgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbmRyaXZlcnMvcHRwL0tjb25maWctMzEtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvcHRwL0tjb25maWctNDEtXG5kcml2ZXJzL3B0cC9LY29uZmlnOjQyOmNvbmZpZyBQVFBfMTU4OF9DTE9DS19EVEVcbmRyaXZlcnMvcHRwL0tjb25maWctNDMtXHR0cmlzdGF0ZSBcJiMzNDtCcm9hZGNvbSBEVEUgYXMgUFRQIGNsb2NrXCYjMzQ7XG4tLVxuZHJpdmVycy9wdHAvS2NvbmZpZy01Ny1cbmRyaXZlcnMvcHRwL0tjb25maWc6NTg6Y29uZmlnIFBUUF8xNTg4X0NMT0NLX1FPUklRXG5kcml2ZXJzL3B0cC9LY29uZmlnLTU5LVx0dHJpc3RhdGUgXCYjMzQ7RnJlZXNjYWxlIFFvcklRIDE1ODggdGltZXIgYXMgUFRQIGNsb2NrXCYjMzQ7XG4tLVxuZHJpdmVycy9wdHAvS2NvbmZpZz03NT1jb25maWcgRFA4MzY0MF9QSFlcbi0tXG5kcml2ZXJzL3B0cC9LY29uZmlnLTkxLVxuZHJpdmVycy9wdHAvS2NvbmZpZzo5Mjpjb25maWcgUFRQXzE1ODhfQ0xPQ0tfSU5FU1xuZHJpdmVycy9wdHAvS2NvbmZpZy05My1cdHRyaXN0YXRlIFwmIzM0O1pIQVcgSW5FUyBQVFAgdGltZSBzdGFtcGluZyBJUCBjb3JlXCYjMzQ7XG4tLVxuZHJpdmVycy9wdHAvS2NvbmZpZy0xMDItXG5kcml2ZXJzL3B0cC9LY29uZmlnOjEwMzpjb25maWcgUFRQXzE1ODhfQ0xPQ0tfUENIXG5kcml2ZXJzL3B0cC9LY29uZmlnLTEwNC1cdHRyaXN0YXRlIFwmIzM0O0ludGVsIFBDSCBFRzIwVCBhcyBQVFAgY2xvY2tcJiMzNDtcbi0tXG5kcml2ZXJzL3B0cC9LY29uZmlnLTEyMS1cbmRyaXZlcnMvcHRwL0tjb25maWc6MTIyOmNvbmZpZyBQVFBfMTU4OF9DTE9DS19LVk1cbmRyaXZlcnMvcHRwL0tjb25maWctMTIzLVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIHZpcnR1YWwgUFRQIGNsb2NrXCYjMzQ7XG4tLVxuZHJpdmVycy9wdHAvS2NvbmZpZy0xMzMtXG5kcml2ZXJzL3B0cC9LY29uZmlnOjEzNDpjb25maWcgUFRQXzE1ODhfQ0xPQ0tfVk1DTE9DS1xuZHJpdmVycy9wdHAvS2NvbmZpZy0xMzUtXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIG1hY2hpbmUgUFRQIGNsb2NrXCYjMzQ7XG4tLVxuZHJpdmVycy9wdHAvS2NvbmZpZy0xNTAtXG5kcml2ZXJzL3B0cC9LY29uZmlnOjE1MTpjb25maWcgUFRQXzE1ODhfQ0xPQ0tfSURUODJQMzNcbmRyaXZlcnMvcHRwL0tjb25maWctMTUyLVx0dHJpc3RhdGUgXCYjMzQ7SURUIDgyUDMzeHh4IFBUUCBjbG9ja1wmIzM0O1xuLS1cbmRyaXZlcnMvcHRwL0tjb25maWctMTYyLVxuZHJpdmVycy9wdHAvS2NvbmZpZzoxNjM6Y29uZmlnIFBUUF8xNTg4X0NMT0NLX0lEVENNXG5kcml2ZXJzL3B0cC9LY29uZmlnLTE2NC1cdHRyaXN0YXRlIFwmIzM0O0lEVCBDTE9DS01BVFJJWCBhcyBQVFAgY2xvY2tcJiMzNDtcbi0tXG5kcml2ZXJzL3B0cC9LY29uZmlnLTE3NC1cbmRyaXZlcnMvcHRwL0tjb25maWc6MTc1OmNvbmZpZyBQVFBfMTU4OF9DTE9DS19GQzNXXG5kcml2ZXJzL3B0cC9LY29uZmlnLTE3Ni1cdHRyaXN0YXRlIFwmIzM0O1JFTkVTQVMgRmVtdG9DbG9jazMgV2lyZWxlc3MgYXMgUFRQIGNsb2NrXCYjMzQ7XG4tLVxuZHJpdmVycy9wdHAvS2NvbmZpZy0xODYtXG5kcml2ZXJzL3B0cC9LY29uZmlnOjE4Nzpjb25maWcgUFRQXzE1ODhfQ0xPQ0tfTU9DS1xuZHJpdmVycy9wdHAvS2NvbmZpZy0xODgtXHR0cmlzdGF0ZSBcJiMzNDtNb2NrLXVwIFBUUCBjbG9ja1wmIzM0O1xuLS1cbmRyaXZlcnMvcHRwL0tjb25maWctMTk3LVxuZHJpdmVycy9wdHAvS2NvbmZpZzoxOTg6Y29uZmlnIFBUUF8xNTg4X0NMT0NLX1ZNV1xuZHJpdmVycy9wdHAvS2NvbmZpZy0xOTktXHR0cmlzdGF0ZSBcJiMzNDtWTXdhcmUgdmlydHVhbCBQVFAgY2xvY2tcJiMzNDtcbi0tXG5kcml2ZXJzL3B0cC9LY29uZmlnLTIwOS1cbmRyaXZlcnMvcHRwL0tjb25maWc6MjEwOmNvbmZpZyBQVFBfMTU4OF9DTE9DS19PQ1BcbmRyaXZlcnMvcHRwL0tjb25maWctMjExLVx0dHJpc3RhdGUgXCYjMzQ7T3BlbkNvbXB1dGUgVGltZUNhcmQgYXMgUFRQIGNsb2NrXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTE6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM1NDQKCQkJCQkJCW91dHB1dDogMzQ1CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgcmVxdWVzdGVkOgoKKipDb25maWd1cmF0aW9uIGFuZCBSZXBvcnRpbmcgU3RyYXRlZ3kqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24gbm93LiBJIGRlZmluaXRlbHkgbmVlZCB0byBpbmNsdWRlIHRoZSBgUFRQXzE1ODhfQ0xPQ0tgIGNvbXBvbmVudCBpbiB0aGUgb3ZlcmFsbCBjb25maWd1cmF0aW9uLiBUaGlzIGlzIG5vbi1uZWdvdGlhYmxlLCBnaXZlbiB0aGUgcHJvamVjdCByZXF1aXJlbWVudHMuIEkmIzM5O3ZlIGdvdCB0byBtYWtlIHN1cmUgdGhhdCYjMzk7cyBiYWtlZCBpbiBmcm9tIHRoZSBnZXQtZ28uCgpBbmQgdGhlbiwgb25jZSBJJiMzOTt2ZSBnb3QgYSBoYW5kbGUgb24gZXZlcnl0aGluZywgaXQmIzM5O3MgdGltZSB0byB0cmlnZ2VyIHRoYXQgcmVwb3J0aW5nIGZ1bmN0aW9uLiBJJiMzOTttIGdvaW5nIHRvIGNhbGwgaXQgYHNldC1yZXN1bHRzYC4gVGhpcyBuYW1pbmcgY29udmVudGlvbiBpcyBjbGVhciBhbmQgYWxpZ25zIHdpdGggb3VyIGV4aXN0aW5nIGFyY2hpdGVjdHVyZS4gSeKAmWxsIG1ha2Ugc3VyZSB0aGF0IGl0JiMzOTtzIHJvYnVzdCBhbmQgcmVhZHkgdG8gaGFuZGxlIHdoYXRldmVyIGRhdGEgdGhlIHN5c3RlbSB0aHJvd3MgYXQgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTE6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pMMzA3M1gmIzM0OywKICAgICYjMzQ7WkwzMDczWF9JMkMmIzM0OywKICAgICYjMzQ7WkwzMDczWF9TUEkmIzM0OywKICAgICYjMzQ7UFRQXzE1ODhfQ0xPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQmIzM0OywKICAgICYjMzQ7emwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQmIzM0OywKICAgICYjMzQ7emwzMDczeF9kcGxsX3B0cF9hZGp0aW1lJiMzNDssCiAgICAmIzM0O3psMzA3M3hfZHBsbF9wdHBfYWRqZmluZSYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlJiMzNDssCiAgICAmIzM0O3psMzA3M3hfZHBsbF9wdHBfZW5hYmxlJiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl90b2RfcmVhZCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fdG9kX3dyaXRlJiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl90b2RfYWRqdXN0JiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl9waGFzZV9zdGVwJiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl90aWVfd3JpdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIgKHpsMzA3M3gpLiBJdCBpbXBsZW1lbnRzIHZhcmlvdXMgUFRQIGNsb2NrIG9wZXJhdGlvbnMgKGdldC9zZXQgdGltZSwgYWRqdXN0IHRpbWUvcGhhc2UvZnJlcXVlbmN5KSB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgUFRQIGlvY3RsIGludGVyZmFjZS4gRnV6emluZyB0aGVzZSBmdW5jdGlvbnMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGUgZHJpdmVyIGhhbmRsZXMgZWRnZSBjYXNlcyBhbmQgY29uY3VycmVudCBhY2Nlc3NlcyBjb3JyZWN0bHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pMMzA3M1gmIzM0OywKICAgICYjMzQ7WkwzMDczWF9JMkMmIzM0OywKICAgICYjMzQ7WkwzMDczWF9TUEkmIzM0OywKICAgICYjMzQ7UFRQXzE1ODhfQ0xPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQmIzM0OywKICAgICYjMzQ7emwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQmIzM0OywKICAgICYjMzQ7emwzMDczeF9kcGxsX3B0cF9hZGp0aW1lJiMzNDssCiAgICAmIzM0O3psMzA3M3hfZHBsbF9wdHBfYWRqZmluZSYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlJiMzNDssCiAgICAmIzM0O3psMzA3M3hfZHBsbF9wdHBfZW5hYmxlJiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl90b2RfcmVhZCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fdG9kX3dyaXRlJiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl90b2RfYWRqdXN0JiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl9waGFzZV9zdGVwJiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl90aWVfd3JpdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIgKHpsMzA3M3gpLiBJdCBpbXBsZW1lbnRzIHZhcmlvdXMgUFRQIGNsb2NrIG9wZXJhdGlvbnMgKGdldC9zZXQgdGltZSwgYWRqdXN0IHRpbWUvcGhhc2UvZnJlcXVlbmN5KSB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgUFRQIGlvY3RsIGludGVyZmFjZS4gRnV6emluZyB0aGVzZSBmdW5jdGlvbnMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGUgZHJpdmVyIGhhbmRsZXMgZWRnZSBjYXNlcyBhbmQgY29uY3VycmVudCBhY2Nlc3NlcyBjb3JyZWN0bHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxMToxMjo0Ni41NjI2NzE0OTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzQzNjM4NTcyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaTDMwNzNYXCIsXG4gICAgXCJaTDMwNzNYX0kyQ1wiLFxuICAgIFwiWkwzMDczWF9TUElcIixcbiAgICBcIlBUUF8xNTg4X0NMT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0XCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NFwiLFxuICAgIFwiemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lXCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmVcIixcbiAgICBcInpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2VcIixcbiAgICBcInpsMzA3M3hfZHBsbF9wdHBfZW5hYmxlXCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fdG9kX3JlYWRcIixcbiAgICBcInpsMzA3M3hfY2hhbl90b2Rfd3JpdGVcIixcbiAgICBcInpsMzA3M3hfY2hhbl90b2RfYWRqdXN0XCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcFwiLFxuICAgIFwiemwzMDczeF9jaGFuX3RpZV93cml0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgUFRQIGNsb2NrIHN1cHBvcnQgdG8gdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyICh6bDMwNzN4KS4gSXQgaW1wbGVtZW50cyB2YXJpb3VzIFBUUCBjbG9jayBvcGVyYXRpb25zIChnZXQvc2V0IHRpbWUsIGFkanVzdCB0aW1lL3BoYXNlL2ZyZXF1ZW5jeSkgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIFBUUCBpb2N0bCBpbnRlcmZhY2UuIEZ1enppbmcgdGhlc2UgZnVuY3Rpb25zIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlIGRyaXZlciBoYW5kbGVzIGVkZ2UgY2FzZXMgYW5kIGNvbmN1cnJlbnQgYWNjZXNzZXMgY29ycmVjdGx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxMToxMjo0Ni41NjI2ODAwOTNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3MzY1NjM1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDEyN2VjMWRhY2ViNTVjZTg0OTFiNjRhOWRjZjU4YWQxMDI1ZTMwNTdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgOSAxMToxMjo0NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xcbmluZGV4IDViYmNhMTQwMDU4MTMxLi5kMDU3NGFkNTcxZDNmYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xcbkBAIC0yLDcgKzIsNyBAQFxcbiBcXG4gY29uZmlnIFpMMzA3M1hcXG4gXFx0dHJpc3RhdGUgXFxcIk1pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXNcXFwiIGlmIENPTVBJTEVfVEVTVFxcbi1cXHRkZXBlbmRzIG9uIE5FVFxcbitcXHRkZXBlbmRzIG9uIE5FVCBcXHUwMDI2XFx1MDAyNiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbiBcXHRzZWxlY3QgRFBMTFxcbiBcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG4gXFx0c2VsZWN0IFJFR01BUFxcbkBAIC0xNiw3ICsxNiw3IEBAIGNvbmZpZyBaTDMwNzNYXFxuIFxcbiBjb25maWcgWkwzMDczWF9JMkNcXG4gXFx0dHJpc3RhdGUgXFxcIkkyQyBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcXFwiXFxuLVxcdGRlcGVuZHMgb24gSTJDIFxcdTAwMjZcXHUwMDI2IE5FVFxcbitcXHRkZXBlbmRzIG9uIEkyQyBcXHUwMDI2XFx1MDAyNiBORVQgXFx1MDAyNlxcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG4gXFx0c2VsZWN0IFJFR01BUF9JMkNcXG4gXFx0c2VsZWN0IFpMMzA3M1hcXG4gXFx0aGVscFxcbkBAIC0yOCw3ICsyOCw3IEBAIGNvbmZpZyBaTDMwNzNYX0kyQ1xcbiBcXG4gY29uZmlnIFpMMzA3M1hfU1BJXFxuIFxcdHRyaXN0YXRlIFxcXCJTUEkgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzXFxcIlxcbi1cXHRkZXBlbmRzIG9uIE5FVCBcXHUwMDI2XFx1MDAyNiBTUElcXG4rXFx0ZGVwZW5kcyBvbiBORVQgXFx1MDAyNlxcdTAwMjYgU1BJIFxcdTAwMjZcXHUwMDI2IFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuIFxcdHNlbGVjdCBSRUdNQVBfU1BJXFxuIFxcdHNlbGVjdCBaTDMwNzNYXFxuIFxcdGhlbHBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXFxuaW5kZXggNGVjMmNmNTNkYWQ0NjguLjUzMDMyZTc4MmZkNGFmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uY1xcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uY1xcbkBAIC0zLDYgKzMsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY2xlYW51cC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVsYXkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Rldl9wcmludGsuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N0cmluZy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4gXFxuQEAgLTIwMiw2ICsyMDMsMTEgQEAgaW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9mZXRjaChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleClcXG4gXFx0XFx0emwzMDczeF9jaGFuX3JlZnNlbF9zdGF0ZV9nZXQoY2hhbiksXFxuIFxcdFxcdHpsMzA3M3hfY2hhbl9yZWZzZWxfcmVmX2dldChjaGFuKSk7XFxuIFxcbitcXHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfU1RFUF9USU1FX01BU0ssXFxuK1xcdFxcdFxcdCAgICAgIFxcdTAwMjZjaGFuLVxcdTAwM2VvdXRfc3RlcF90aW1lX21hc2spO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuIFxcdGd1YXJkKG11dGV4KShcXHUwMDI2emxkZXYtXFx1MDAzZW11bHRpb3BfbG9jayk7XFxuIFxcbiBcXHQvKiBSZWFkIERQTEwgY29uZmlndXJhdGlvbiBmcm9tIG1haWxib3ggKi9cXG5AQCAtMjM0LDYgKzI0MCwzMDcgQEAgY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqemwzMDczeF9jaGFuX3N0YXRlX2dldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LFxcbiBcXHRyZXR1cm4gXFx1MDAyNnpsZGV2LVxcdTAwM2VjaGFuW2luZGV4XTtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCAtIHdhaXQgZm9yIFRvRCBzZW1hcGhvcmUgdG8gY2xlYXJcXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuKyAqXFxuKyAqIFBvbGxzIHRoZSBUb0QgY29udHJvbCByZWdpc3RlciB1bnRpbCB0aGUgc2VtYXBob3JlIGJpdCBpcyBjbGVhcmVkLFxcbisgKiBpbmRpY2F0aW5nIHRoZSBkZXZpY2UgaGFzIGNvbXBsZXRlZCB0aGUgcHJldmlvdXMgVG9EIG9wZXJhdGlvbi5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FQlVTWSBpZiBzZW1hcGhvcmUgbm90IGNsZWFyZWQsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitzdGF0aWMgaW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgdGltZW91dDtcXG4rXFx0dTggdG9kX2N0cmw7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdHJjID0gemwzMDczeF9yZWFkX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksIFxcdTAwMjZ0b2RfY3RybCk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0c3dpdGNoIChGSUVMRF9HRVQoWkxfRFBMTF9UT0RfQ1RSTF9DTUQsIHRvZF9jdHJsKSkge1xcbitcXHRjYXNlIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaOlxcbitcXHRcXHR0aW1lb3V0ID0gWkxfUE9MTF9UT0RfV1JfVElNRU9VVF9VUztcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHRpbWVvdXQgPSBaTF9QT0xMX1RPRF9SRF9USU1FT1VUX1VTO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLFxcbitcXHRcXHRcXHRcXHQgIFpMX0RQTExfVE9EX0NUUkxfU0VNLCB0aW1lb3V0KTtcXG4rXFxuK1xcdHJldHVybiByYyA9PSAtRVRJTUVET1VUID8gLUVCVVNZIDogcmM7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwgLSBpc3N1ZSBUb0QgY29tbWFuZFxcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4rICogQGNtZDogVG9EIGNvbW1hbmQgdG8gZXhlY3V0ZVxcbisgKlxcbisgKiBXcml0ZXMgdGhlIHNlbWFwaG9yZSBhbmQgY29tbWFuZCB0byBkcGxsX3RvZF9jdHJsLiBUaGUgY2FsbGVyIG11c3RcXG4rICogZW5zdXJlIHRoZSBkZXZpY2UgaXMgcmVhZHkgKHNlbWFwaG9yZSBjbGVhcikgYmVmb3JlIGNhbGxpbmcgYW5kXFxuKyAqIG11c3Qgd2FpdCBmb3IgY29tcGxldGlvbiBpZiBuZWVkZWQuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4rc3RhdGljIGludCB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHU4IGNtZClcXG4re1xcbitcXHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLFxcbitcXHRcXHRcXHRcXHRaTF9EUExMX1RPRF9DVFJMX1NFTSB8IGNtZCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5fdG9kX3JlYWQgLSByZWFkIFRvRCByZWdpc3RlcnMgYWZ0ZXIgaXNzdWluZyBhIGNvbW1hbmRcXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuKyAqIEBuZXh0X2h6OiBpZiB0cnVlLCByZWFkIHByZWRpY3RlZCBUb0QgYXQgbmV4dCAxIEh6OyBvdGhlcndpc2UgcmVhZCBjdXJyZW50XFxuKyAqIEB0czogdGltZXNwZWMgdG8gc3RvcmUgdGhlIHJlc3VsdFxcbisgKiBAc3RzOiBvcHRpb25hbCBzeXN0ZW0gdGltZXN0YW1wIHBhaXIgZm9yIGNyb3NzLXRpbWVzdGFtcGluZ1xcbisgKlxcbisgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuK1xcdFxcdFxcdCAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXFxuK1xcdFxcdFxcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpXFxuK3tcXG4rXFx0dTMyIG5zZWM7XFxuK1xcdHU2NCBzZWM7XFxuK1xcdHU4IGNtZDtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0aWYgKG5leHRfaHopXFxuK1xcdFxcdGNtZCA9IFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaO1xcbitcXHRlbHNlXFxuK1xcdFxcdGNtZCA9IFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX0NVUlJFTlQ7XFxuK1xcbitcXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVG9EIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xcbitcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHB0cF9yZWFkX3N5c3RlbV9wcmV0cyhzdHMpO1xcbitcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfY3RybCh6bGRldiwgY2gsIGNtZCk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcdHB0cF9yZWFkX3N5c3RlbV9wb3N0dHMoc3RzKTtcXG4rXFxuK1xcdHJjID0gemwzMDczeF9yZWFkX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIFxcdTAwMjZzZWMpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdC8qIEhXIG5hbm9zZWNvbmRzIGFyZSBhbHdheXMgaW4gWzAsIE5TRUNfUEVSX1NFQykgcmFuZ2UgKi9cXG4rXFx0cmMgPSB6bDMwNzN4X3JlYWRfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCBcXHUwMDI2bnNlYyk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0dHMtXFx1MDAzZXR2X3NlYyA9IHNlYztcXG4rXFx0dHMtXFx1MDAzZXR2X25zZWMgPSBuc2VjO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlIC0gd3JpdGUgVG9EIHJlZ2lzdGVycyBhbmQgdHJpZ2dlciAxIEh6IHVwZGF0ZVxcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4rICogQHRzOiB0aW1lIHRvIHNldFxcbisgKlxcbisgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbitcXHRcXHRcXHQgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cylcXG4re1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVG9EIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xcbitcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9TRUMoY2gpLCB0cy50dl9zZWMpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19EUExMX1RPRF9OUyhjaCksIHRzLnR2X25zZWMpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLFxcbitcXHRcXHRcXHRcXHQgICAgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFopO1xcbit9XFxuK1xcbisvKipcXG4rICogemwzMDczeF9jaGFuX3RvZF9hZGp1c3QgLSBhdG9taWMgVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIHdpdGggcm9sbG92ZXIgZ3VhcmRcXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuKyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IHRvIGFwcGx5XFxuKyAqXFxuKyAqIFJlYWRzIHRoZSBuZXh0LUh6IFRvRCBhbmQgY3VycmVudCBUb0QsIHRoZW4gY2hlY2tzIHdoZXRoZXIgZW5vdWdoIHRpbWVcXG4rICogcmVtYWlucyBiZWZvcmUgdGhlIG5leHQgMSBIeiByb2xsb3ZlciB0byBzYWZlbHkgY29tcGxldGUgdGhlIHdyaXRlLlxcbisgKiBJZiBsZXNzIHRoYW4gMjAgbXMgcmVtYWlucywgd2FpdHMgZm9yIHRoZSByb2xsb3ZlciBhbmQgaW5jcmVtZW50cyB0aGVcXG4rICogbmV4dC1IeiBzZWNvbmRzIGJ5IG9uZS4gQXBwbGllcyBAZGVsdGEgYW5kIHdyaXRlcyB0aGUgcmVzdWx0IGJhY2suXFxuKyAqXFxuKyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4raW50IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbitcXHRcXHRcXHQgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpXFxuK3tcXG4rXFx0c3RhdGljIGNvbnN0IGxvbmcgdGhyZXNob2xkX25zID0gMjAgKiBOU0VDX1BFUl9NU0VDO1xcbitcXHRzdHJ1Y3QgdGltZXNwZWM2NCB0c19uZXh0LCB0c19jdXIsIGRpZmY7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdC8qIFJlYWQgcHJlZGljdGVkIFRvRCBhdCBuZXh0IDEgSHogdGljayAqL1xcbitcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRldiwgY2gsIHRydWUsIFxcdTAwMjZ0c19uZXh0LCBOVUxMKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHQvKiBSZWFkIGN1cnJlbnQgVG9EIHRvIGRldGVybWluZSByZW1haW5pbmcgbWFyZ2luICovXFxuK1xcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgZmFsc2UsIFxcdTAwMjZ0c19jdXIsIE5VTEwpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdC8qIElmIHRvbyBjbG9zZSB0byAob3IgcGFzdCkgdGhlIG5leHQgcm9sbG92ZXIsIHdhaXQgaXQgb3V0ICovXFxuK1xcdGRpZmYgPSB0aW1lc3BlYzY0X3N1Yih0c19uZXh0LCB0c19jdXIpO1xcbitcXHRpZiAoZGlmZi50dl9zZWMgXFx1MDAzYyAwIHx8ICghZGlmZi50dl9zZWMgXFx1MDAyNlxcdTAwMjYgZGlmZi50dl9uc2VjIFxcdTAwM2MgdGhyZXNob2xkX25zKSkge1xcbitcXHRcXHRpZiAoIWRpZmYudHZfc2VjIFxcdTAwMjZcXHUwMDI2IGRpZmYudHZfbnNlYylcXG4rXFx0XFx0XFx0ZnNsZWVwKCh1bnNpZ25lZCBsb25nKWRpZmYudHZfbnNlYyAvIE5TRUNfUEVSX1VTRUMgKyAxKTtcXG4rXFx0XFx0dHNfbmV4dC50dl9zZWMrKztcXG4rXFx0fVxcbitcXG4rXFx0LyogQXBwbHkgZGVsdGEgdG8gdGhlIG5leHQtSHogVG9EICovXFxuK1xcdHRzX25leHQgPSB0aW1lc3BlYzY0X2FkZCh0c19uZXh0LCBkZWx0YSk7XFxuK1xcdGlmICghdGltZXNwZWM2NF92YWxpZChcXHUwMDI2dHNfbmV4dCkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0LyogV3JpdGUgYWRqdXN0ZWQgVG9EIGJhY2sgYW5kIHdhaXQgZm9yIGNvbXBsZXRpb24gKi9cXG4rXFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZGV2LCBjaCwgdHNfbmV4dCk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xcbit9XFxuK1xcbisvKipcXG4rICogemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQgLSB3cml0ZSBkZWx0YSBmcmVxdWVuY3kgb2Zmc2V0IHRvIGhhcmR3YXJlXFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxcbisgKiBAb2Zmc2V0OiBmcmVxdWVuY3kgb2Zmc2V0IGluIDJeLTQ4IHN0ZXBzXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4raW50IHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgb2Zmc2V0KVxcbit7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdHJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX0RGX09GRlNFVChjaCksIG9mZnNldCk7XFxuK1xcdGlmICghcmMpXFxuK1xcdFxcdHpsZGV2LVxcdTAwM2VjaGFuW2NoXS5kZl9vZmZzZXQgPSBvZmZzZXQ7XFxuK1xcbitcXHRyZXR1cm4gcmM7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlIC0gYWRqdXN0IERQTEwgcGhhc2UgdXNpbmcgVElFIHdyaXRlXFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxcbisgKiBAZGVsdGFfbnM6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMgKG11c3QgYmUgd2l0aGluICstMXMpXFxuKyAqXFxuKyAqIENvbnZlcnRzIG5hbm9zZWNvbmRzIHRvIFRJRSB1bml0cyAoMC4wMSBwcykgYW5kIHdyaXRlcyBUSUUgZGF0YVxcbisgKiB0byB0aGUgc3BlY2lmaWVkIGNoYW5uZWwuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4raW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucylcXG4re1xcbitcXHRzNjQgdGllX2RhdGE7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2emxkZXYtXFx1MDAzZXRpZV9sb2NrKTtcXG4rXFxuK1xcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUSUUgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXFxuK1xcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLFxcbitcXHRcXHRcXHRcXHQgIFpMX0RQTExfVElFX0NUUkxfT1AsXFxuK1xcdFxcdFxcdFxcdCAgWkxfUE9MTF9USUVfV1JfVElNRU9VVF9VUyk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0LyogQ29udmVydCBucyB0byBUSUUgdW5pdHMgKDAuMDEgcHMgPSAxMF4tMTQgcykgKi9cXG4rXFx0dGllX2RhdGEgPSBkZWx0YV9ucyAqIDEwMDAwMExMO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0RBVEEoY2gpLCB0aWVfZGF0YSk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTF9NQVNLLCBCSVQoY2gpKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsXFxuK1xcdFxcdFxcdFxcdFpMX0RQTExfVElFX0NUUkxfT1BfV1IpO1xcbit9XFxuK1xcbisvKipcXG4rICogemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAgLSBleGVjdXRlIG9uZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb25cXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuKyAqIEBvdXRfbWFzazogYml0bWFzayBvZiBvdXRwdXRzIHRvIHN0ZXBcXG4rICogQHN0ZXBfY3ljbGVzOiBwaGFzZSBzdGVwIGluIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlc1xcbisgKiBAdG9kX3N0ZXA6IGFsc28gc3RlcCB0aGUgVG9EIGNvdW50ZXJcXG4rICpcXG4rICogQWxsIG1hc2tlZCBvdXRwdXRzIG11c3QgdXNlIHN5bnRoZXNpemVycyBvZiB0aGUgc2FtZSBmcmVxdWVuY3kgc2luY2VcXG4rICogdGhlIHN0ZXAgdmFsdWUgaXMgaW4gc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK2ludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG4rXFx0XFx0XFx0ICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLFxcbitcXHRcXHRcXHQgICAgYm9vbCB0b2Rfc3RlcClcXG4re1xcbitcXHR1OCBjdHJsO1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNnpsZGV2LVxcdTAwM2VwaGFzZV9zdGVwX2xvY2spO1xcbitcXG4rXFx0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIHBoYXNlIHN0ZXAgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXFxuK1xcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLFxcbitcXHRcXHRcXHRcXHQgIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AsXFxuK1xcdFxcdFxcdFxcdCAgWkxfUE9MTF9QSEFTRV9TVEVQX1RJTUVPVVRfVVMpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBLFxcbitcXHRcXHRcXHQgICAgICAgc3RlcF9jeWNsZXMpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHJjID0gemwzMDczeF93cml0ZV91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLLCBvdXRfbWFzayk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTlVNQkVSLCAxKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRjdHJsID0gRklFTERfUFJFUChaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX0RQTEwsIGNoKSB8XFxuK1xcdCAgICAgICBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AsXFxuK1xcdFxcdFxcdCAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURSk7XFxuK1xcdGlmICh0b2Rfc3RlcClcXG4rXFx0XFx0Y3RybCB8PSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX1RPRF9TVEVQO1xcbitcXG4rXFx0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLCBjdHJsKTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQgLSBjb21taXQgRFBMTCBjaGFubmVsIHN0YXRlIGNoYW5nZXMgdG8gaGFyZHdhcmVcXG4gICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3hfZGV2IHN0cnVjdHVyZVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhcXG5pbmRleCBkYzljNmQ5NWJkZWU3NS4uOWRjNWEzZjE5OTFmMTMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXFxuQEAgLTUsMTAgKzUsMTIgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RkZGVmLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC90aW1lNjQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwicmVncy5oXFxcIlxcbiBcXG4rc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wO1xcbiBzdHJ1Y3QgemwzMDczeF9kZXY7XFxuIFxcbiAvKipcXG5AQCAtMTYsNiArMTgsNyBAQCBzdHJ1Y3QgemwzMDczeF9kZXY7XFxuICAqIEBjdHJsOiBEUExMIGNvbnRyb2wgcmVnaXN0ZXIgdmFsdWVcXG4gICogQG1vZGVfcmVmc2VsOiBtb2RlIGFuZCByZWZlcmVuY2Ugc2VsZWN0aW9uIHJlZ2lzdGVyIHZhbHVlXFxuICAqIEByZWZfcHJpbzogcmVmZXJlbmNlIHByaW9yaXR5IHJlZ2lzdGVycyAoNCBiaXRzIHBlciByZWYsIFAvTiBwYWNrZWQpXFxuKyAqIEBvdXRfc3RlcF90aW1lX21hc2s6IG91dHB1dCBzdGVwLXRpbWUgbWFza1xcbiAgKiBAbW9uX3N0YXR1czogbW9uaXRvciBzdGF0dXMgcmVnaXN0ZXIgdmFsdWVcXG4gICogQHJlZnNlbF9zdGF0dXM6IHJlZmVyZW5jZSBzZWxlY3Rpb24gc3RhdHVzIHJlZ2lzdGVyIHZhbHVlXFxuICAqIEBkZl9vZmZzZXQ6IGZyZXF1ZW5jeSBvZmZzZXQgdnMgdHJhY2tlZCByZWZlcmVuY2UgaW4gMl4tNDggc3RlcHNcXG5AQCAtMjYsNiArMjksOSBAQCBzdHJ1Y3QgemwzMDczeF9jaGFuIHtcXG4gXFx0XFx0dThcXHRtb2RlX3JlZnNlbDtcXG4gXFx0XFx0dThcXHRyZWZfcHJpb1taTDMwNzNYX05VTV9SRUZTIC8gMl07XFxuIFxcdCk7XFxuK1xcdHN0cnVjdF9ncm91cChpbnYsIC8qIEludmFyaWFudHMgKi9cXG4rXFx0XFx0dTE2XFx0b3V0X3N0ZXBfdGltZV9tYXNrO1xcbitcXHQpO1xcbiBcXHRzdHJ1Y3RfZ3JvdXAoc3RhdCxcXG4gXFx0XFx0dThcXHRtb25fc3RhdHVzO1xcbiBcXHRcXHR1OFxcdHJlZnNlbF9zdGF0dXM7XFxuQEAgLTQyLDYgKzQ4LDIwIEBAIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4LFxcbiBpbnQgemwzMDczeF9jaGFuX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7XFxuIGludCB6bDMwNzN4X2NoYW5fbmNvX21vZGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTtcXG4gXFxuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuK1xcdFxcdFxcdCAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXFxuK1xcdFxcdFxcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpO1xcbitpbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG4rXFx0XFx0XFx0ICAgc3RydWN0IHRpbWVzcGVjNjQgdHMpO1xcbitpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YSk7XFxuK2ludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG4rXFx0XFx0XFx0ICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLCBib29sIHRvZF9zdGVwKTtcXG4rXFxuK2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldCk7XFxuK1xcbitpbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKTtcXG4rXFxuIC8qKlxcbiAgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X2dldCAtIGdldCBjYWNoZWQgZGZfb2Zmc2V0IHZzIHRyYWNrZWQgcmVmZXJlbmNlXFxuICAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcXG5AQCAtMjAwLDYgKzIyMCwyMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgemwzMDczeF9jaGFuX21vZGVfaXNfcmVmbG9jayhjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxcbiBcXHRyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfZ2V0KGNoYW4pID09IFpMX0RQTExfTU9ERV9SRUZTRUxfTU9ERV9SRUZMT0NLO1xcbiB9XFxuIFxcbisvKipcXG4rICogemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllIC0gY2hlY2sgaWYgY2hhbm5lbCBtb2RlIHN1cHBvcnRzIFRJRSB3cml0ZVxcbisgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXFxuKyAqXFxuKyAqIFRJRSB3cml0ZSBpcyBzdXBwb3J0ZWQgaW4gQVVUTyBhbmQgUkVGTE9DSyBtb2RlcyByZWdhcmRsZXNzIG9mIGxvY2sgc3RhdGUuXFxuKyAqXFxuKyAqIFJldHVybjogdHJ1ZSBpZiBUSUUgd3JpdGUgaXMgc3VwcG9ydGVkLCBmYWxzZSBvdGhlcndpc2VcXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgYm9vbFxcbit6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcXG4re1xcbitcXHRyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfaXNfYXV0byhjaGFuKSB8fFxcbitcXHRcXHR6bDMwNzN4X2NoYW5fbW9kZV9pc19yZWZsb2NrKGNoYW4pO1xcbit9XFxuK1xcbiAvKipcXG4gICogemwzMDczeF9jaGFuX2lzX2hvX3JlYWR5IC0gY2hlY2sgaWYgaG9sZG92ZXIgaXMgcmVhZHlcXG4gICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxcbkBAIC0yMzMsNCArMjY4LDE3IEBAIHN0YXRpYyBpbmxpbmUgdTggemwzMDczeF9jaGFuX3JlZnNlbF9yZWZfZ2V0KGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXFxuIFxcdHJldHVybiBGSUVMRF9HRVQoWkxfRFBMTF9SRUZTRUxfU1RBVFVTX1JFRlNFTCwgY2hhbi1cXHUwMDNlcmVmc2VsX3N0YXR1cyk7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5faXNfb3V0X3N0ZXBwZWQgLSBjaGVjayBpZiBvdXRwdXQgaXMgaW4gc3RlcC10aW1lIG1hc2tcXG4rICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxcbisgKiBAb3V0OiBvdXRwdXQgaW5kZXhcXG4rICpcXG4rICogUmV0dXJuOiB0cnVlIGlmIG91dHB1dCBpcyBhZmZlY3RlZCBieSBzdGVwLXRpbWUgb3BlcmF0aW9uc1xcbisgKi9cXG4rc3RhdGljIGlubGluZSBib29sXFxuK3psMzA3M3hfY2hhbl9pc19vdXRfc3RlcHBlZChjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuLCB1OCBvdXQpXFxuK3tcXG4rXFx0cmV0dXJuICEhKGNoYW4tXFx1MDAzZW91dF9zdGVwX3RpbWVfbWFzayBcXHUwMDI2IEJJVChvdXQpKTtcXG4rfVxcbitcXG4gI2VuZGlmIC8qIF9aTDMwNzNYX0NIQU5fSCAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcXG5pbmRleCA3ZjVhZmFhYWU2MzQyZi4uYjJmOWZjOTdmZDFiNjggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jXFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jXFxuQEAgLTEwMzMsNiArMTAzMywxNCBAQCBpbnQgemwzMDczeF9kZXZfcHJvYmUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcXG4gXFx0ICogYW5kL29yIHBvbGxzIGFyZSByZXF1aXJlZCB0byBiZSBkb25lIGF0b21pY2FsbHkuXFxuIFxcdCAqL1xcbiBcXHRyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi1cXHUwMDNlZGV2LCBcXHUwMDI2emxkZXYtXFx1MDAzZW11bHRpb3BfbG9jayk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXFx1MDAzZWRldiwgcmMsXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxcXG5cXFwiKTtcXG4rXFx0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXFx1MDAzZWRldiwgXFx1MDAyNnpsZGV2LVxcdTAwM2VwaGFzZV9zdGVwX2xvY2spO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVxcdTAwM2VkZXYsIHJjLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcXFxuXFxcIik7XFxuK1xcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVxcdTAwM2VkZXYsIFxcdTAwMjZ6bGRldi1cXHUwMDNldGllX2xvY2spO1xcbiBcXHRpZiAocmMpXFxuIFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVxcdTAwM2VkZXYsIHJjLFxcbiBcXHRcXHRcXHRcXHQgICAgIFxcXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcXFxuXFxcIik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaFxcbmluZGV4IDc4ZGMyMDhmM2VlYTJhLi4yZGM4MzZkMGM4ZjZiMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcXG5AQCAtMjYsNiArMjYsMTAgQEAgc3RydWN0IHpsMzA3M3hfZHBsbDtcXG4gI2RlZmluZSBaTF9QT0xMX0hXUkVHX1RJTUVPVVRfVVNcXHQoNTAgKiBVU0VDX1BFUl9NU0VDKVxcbiAjZGVmaW5lIFpMX1BPTExfTUJfVElNRU9VVF9VU1xcdFxcdCgzMCAqIFVTRUNfUEVSX01TRUMpXFxuICNkZWZpbmUgWkxfUE9MTF9QSEFTRV9FUlJfVElNRU9VVF9VU1xcdCg1MCAqIFVTRUNfUEVSX01TRUMpXFxuKyNkZWZpbmUgWkxfUE9MTF9QSEFTRV9TVEVQX1RJTUVPVVRfVVNcXHQoMzAwMCAqIFVTRUNfUEVSX01TRUMpXFxuKyNkZWZpbmUgWkxfUE9MTF9USUVfV1JfVElNRU9VVF9VU1xcdCgxMDAwICogVVNFQ19QRVJfTVNFQylcXG4rI2RlZmluZSBaTF9QT0xMX1RPRF9SRF9USU1FT1VUX1VTXFx0KDMwICogVVNFQ19QRVJfTVNFQylcXG4rI2RlZmluZSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTXFx0KDEwMDAgKiBVU0VDX1BFUl9NU0VDKVxcbiBcXG4gZW51bSB6bDMwNzN4X2ZsYWdzIHtcXG4gXFx0WkwzMDczWF9GTEFHX1JFRl9QSEFTRV9DT01QXzMyX0JJVCxcXG5AQCAtNTUsNiArNTksOCBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8ge1xcbiAgKiBAcmVnbWFwOiByZWdtYXAgdG8gYWNjZXNzIGRldmljZSByZWdpc3RlcnNcXG4gICogQGluZm86IGRldGVjdGVkIGNoaXAgaW5mb1xcbiAgKiBAbXVsdGlvcF9sb2NrOiB0byBzZXJpYWxpemUgbXVsdGlwbGUgcmVnaXN0ZXIgb3BlcmF0aW9uc1xcbisgKiBAdGllX2xvY2s6IHRvIHNlcmlhbGl6ZSBUSUUgd3JpdGUgb3BlcmF0aW9uc1xcbisgKiBAcGhhc2Vfc3RlcF9sb2NrOiB0byBzZXJpYWxpemUgb3V0cHV0IHBoYXNlIHN0ZXAgb3BlcmF0aW9uc1xcbiAgKiBAcmVmOiBhcnJheSBvZiBpbnB1dCByZWZlcmVuY2VzJyBpbnZhcmlhbnRzXFxuICAqIEBvdXQ6IGFycmF5IG9mIG91dHMnIGludmFyaWFudHNcXG4gICogQHN5bnRoOiBhcnJheSBvZiBzeW50aHMnIGludmFyaWFudHNcXG5AQCAtNzEsNiArNzcsOCBAQCBzdHJ1Y3QgemwzMDczeF9kZXYge1xcbiBcXHRzdHJ1Y3QgcmVnbWFwXFx0XFx0XFx0KnJlZ21hcDtcXG4gXFx0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hpcF9pbmZvXFx0KmluZm87XFxuIFxcdHN0cnVjdCBtdXRleFxcdFxcdFxcdG11bHRpb3BfbG9jaztcXG4rXFx0c3RydWN0IG11dGV4XFx0XFx0XFx0dGllX2xvY2s7XFxuK1xcdHN0cnVjdCBtdXRleFxcdFxcdFxcdHBoYXNlX3N0ZXBfbG9jaztcXG4gXFxuIFxcdC8qIEludmFyaWFudHMgKi9cXG4gXFx0c3RydWN0IHpsMzA3M3hfcmVmXFx0cmVmW1pMMzA3M1hfTlVNX1JFRlNdO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcXG5pbmRleCBkOTFmNTJiNThlYWUzNC4uNzQwMDFlNmQ0YTMyZjUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jXFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jXFxuQEAgLTIsNiArMiw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0cy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NsZWFudXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2J1Zy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY29udGFpbmVyX29mLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZXZfcHJpbnRrLmhcXHUwMDNlXFxuQEAgLTE0LDYgKzE1LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGxpbmsuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcHJvcGVydHkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NwcmludGYuaFxcdTAwM2VcXG4gXFxuQEAgLTQyLDYgKzQ0LDcgQEBcXG4gICogQHBoYXNlX29mZnNldDogbGFzdCBzYXZlZCBwaW4gcGhhc2Ugb2Zmc2V0XFxuICAqIEBmcmVxX29mZnNldDogbGFzdCBzYXZlZCBmcmFjdGlvbmFsIGZyZXF1ZW5jeSBvZmZzZXRcXG4gICogQG1lYXN1cmVkX2ZyZXE6IGxhc3Qgc2F2ZWQgbWVhc3VyZWQgZnJlcXVlbmN5XFxuKyAqIEBwZXJvdXRfaWR4OiBQVFAgcGVyb3V0IGNoYW5uZWwgaW5kZXgsIG9yIC0xIGlmIG5vdCBwZXJvdXQtZWxpZ2libGVcXG4gICovXFxuIHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluIHtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZFxcdGxpc3Q7XFxuQEAgLTU5LDYgKzYyLDcgQEAgc3RydWN0IHpsMzA3M3hfZHBsbF9waW4ge1xcbiBcXHRzNjRcXHRcXHRcXHRwaGFzZV9vZmZzZXQ7XFxuIFxcdHM2NFxcdFxcdFxcdGZyZXFfb2Zmc2V0O1xcbiBcXHR1MzJcXHRcXHRcXHRtZWFzdXJlZF9mcmVxO1xcbitcXHRzOFxcdFxcdFxcdHBlcm91dF9pZHg7XFxuIH07XFxuIFxcbiAvKlxcbkBAIC05MzYsMjEgKzk0MCwxNyBAQCB6bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnRcXG4temwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxcbi1cXHRcXHRcXHRcXHQgICAgICB2b2lkICpwaW5fcHJpdixcXG4tXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxcbi1cXHRcXHRcXHRcXHQgICAgICB2b2lkICpkcGxsX3ByaXYsIHU2NCBmcmVxdWVuY3ksXFxuLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4rX196bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfc2V0KHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCxcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbixcXG4rXFx0XFx0XFx0XFx0XFx0dTY0IGZyZXF1ZW5jeSlcXG4ge1xcbi1cXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBkcGxsX3ByaXY7XFxuIFxcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXFx1MDAzZWRldjtcXG4tXFx0c3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbiA9IHBpbl9wcml2O1xcbiBcXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9zeW50aCAqc3ludGg7XFxuIFxcdHUzMiBuZXdfZGl2LCBzeW50aF9mcmVxO1xcbiBcXHRzdHJ1Y3QgemwzMDczeF9vdXQgb3V0O1xcbiBcXHR1OCBvdXRfaWQ7XFxuIFxcbi1cXHRndWFyZChtdXRleCkoXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuIFxcbiBcXHRvdXRfaWQgPSB6bDMwNzN4X291dHB1dF9waW5fb3V0X2dldChwaW4tXFx1MDAzZWlkKTtcXG4gXFx0b3V0ID0gKnpsMzA3M3hfb3V0X3N0YXRlX2dldCh6bGRldiwgb3V0X2lkKTtcXG5AQCAtMTAxMSw2ICsxMDExLDIxIEBAIHpsMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3BpbixcXG4gXFx0cmV0dXJuIHpsMzA3M3hfb3V0X3N0YXRlX3NldCh6bGRldiwgb3V0X2lkLCBcXHUwMDI2b3V0KTtcXG4gfVxcbiBcXG4rc3RhdGljIGludFxcbit6bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXFxuK1xcdFxcdFxcdFxcdCAgICAgIHZvaWQgKnBpbl9wcml2LFxcbitcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHZvaWQgKmRwbGxfcHJpdiwgdTY0IGZyZXF1ZW5jeSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbit7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGRwbGxfcHJpdjtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdHJldHVybiBfX3psMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoemxkcGxsLCBwaW5fcHJpdixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGZyZXF1ZW5jeSk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnRcXG4gemwzMDczeF9kcGxsX291dHB1dF9waW5fcGhhc2VfYWRqdXN0X2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxcbiBcXHRcXHRcXHRcXHRcXHQgdm9pZCAqcGluX3ByaXYsXFxuQEAgLTE2MDgsNiArMTYyMyw3IEBAIHpsMzA3M3hfZHBsbF9waW5fYWxsb2Moc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLCBlbnVtIGRwbGxfcGluX2RpcmVjdGlvbiBkaXIsXFxuIFxcdHBpbi1cXHUwMDNlZHBsbCA9IHpsZHBsbDtcXG4gXFx0cGluLVxcdTAwM2VkaXIgPSBkaXI7XFxuIFxcdHBpbi1cXHUwMDNlaWQgPSBpZDtcXG4rXFx0cGluLVxcdTAwM2VwZXJvdXRfaWR4ID0gLTE7XFxuIFxcbiBcXHRyZXR1cm4gcGluO1xcbiB9XFxuQEAgLTE2MjYsNiArMTY0Miw0NCBAQCB6bDMwNzN4X2RwbGxfcGluX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbilcXG4gXFx0a2ZyZWUocGluKTtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9waW5faXNfcGVyb3V0IC0gY2hlY2sgaWYgb3V0cHV0IHBpbiBpcyBwZXJvdXQtZWxpZ2libGVcXG4rICogQHBpbjogRFBMTCBwaW4gdG8gY2hlY2tcXG4rICogQHByb3BzOiBwaW4gcHJvcGVydGllcyAoYWxyZWFkeSBmZXRjaGVkIGJ5IGNhbGxlcilcXG4rICpcXG4rICogQW4gb3V0cHV0IHBpbiBpcyBlbGlnaWJsZSBmb3IgUFRQIHBlcmlvZGljIG91dHB1dCBpZiBpdCBpcyBzaW5nbGUtZW5kZWRcXG4rICogKG5vdCBkaWZmZXJlbnRpYWwpIGFuZCBzdXBwb3J0cyAxIEh6IGluIGl0cyBmcmVxdWVuY3kgbGlzdC5cXG4rICpcXG4rICogUmV0dXJuOiB0cnVlIGlmIGVsaWdpYmxlLCBmYWxzZSBvdGhlcndpc2VcXG4rICovXFxuK3N0YXRpYyBib29sXFxuK3psMzA3M3hfZHBsbF9waW5faXNfcGVyb3V0KHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4sXFxuK1xcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCB6bDMwNzN4X3Bpbl9wcm9wcyAqcHJvcHMpXFxuK3tcXG4rXFx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gcGluLVxcdTAwM2VkcGxsO1xcbitcXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xcbitcXHR1OCBvdXRfaWQ7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0aWYgKHpsMzA3M3hfZHBsbF9pc19pbnB1dF9waW4ocGluKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0b3V0X2lkID0gemwzMDczeF9vdXRwdXRfcGluX291dF9nZXQocGluLVxcdTAwM2VpZCk7XFxuK1xcdGlmICh6bDMwNzN4X2Rldl9vdXRfaXNfZGlmZih6bGRwbGwtXFx1MDAzZWRldiwgb3V0X2lkKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkcGxsLVxcdTAwM2VkZXYsIHpsZHBsbC1cXHUwMDNlaWQpO1xcbitcXHRpZiAoIXpsMzA3M3hfY2hhbl9pc19vdXRfc3RlcHBlZChjaGFuLCBvdXRfaWQpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcHJvcHMtXFx1MDAzZWRwbGxfcHJvcHMuZnJlcV9zdXBwb3J0ZWRfbnVtOyBpKyspIHtcXG4rXFx0XFx0aWYgKHByb3BzLVxcdTAwM2VkcGxsX3Byb3BzLmZyZXFfc3VwcG9ydGVkW2ldLm1pbiA9PSAxKVxcbitcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbiAvKipcXG4gICogemwzMDczeF9kcGxsX3Bpbl9yZWdpc3RlciAtIHJlZ2lzdGVyIERQTEwgcGluXFxuICAqIEBwaW46IHBvaW50ZXIgdG8gRFBMTCBwaW5cXG5AQCAtMTY2Nyw2ICsxNzIxLDggQEAgemwzMDczeF9kcGxsX3Bpbl9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluLCB1MzIgaW5kZXgpXFxuIFxcdFxcdGlmIChwaW4tXFx1MDAzZXByaW8gPT0gWkxfRFBMTF9SRUZfUFJJT19OT05FKVxcbiBcXHRcXHRcXHQvKiBDbGFtcCBwcmlvIHRvIG1heCB2YWx1ZSAqL1xcbiBcXHRcXHRcXHRwaW4tXFx1MDAzZXByaW8gPSBaTF9EUExMX1JFRl9QUklPX01BWDtcXG4rXFx0fSBlbHNlIGlmICh6bDMwNzN4X2RwbGxfcGluX2lzX3Blcm91dChwaW4sIHByb3BzKSkge1xcbitcXHRcXHRwaW4tXFx1MDAzZXBlcm91dF9pZHggPSB6bGRwbGwtXFx1MDAzZXB0cF9pbmZvLm5fcGVyX291dCsrO1xcbiBcXHR9XFxuIFxcbiBcXHQvKiBDcmVhdGUgb3IgZ2V0IGV4aXN0aW5nIERQTEwgcGluICovXFxuQEAgLTE4OTcsNiArMTk1Myw4IEBAIHpsMzA3M3hfZHBsbF9waW5zX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcXG4gXFx0dTggaWQsIGluZGV4O1xcbiBcXHRpbnQgcmM7XFxuIFxcbitcXHR6bGRwbGwtXFx1MDAzZXB0cF9pbmZvLm5fcGVyX291dCA9IDA7XFxuK1xcbiBcXHQvKiBQcm9jZXNzIGlucHV0IHBpbnMgKi9cXG4gXFx0Zm9yIChpbmRleCA9IDA7IGluZGV4IFxcdTAwM2MgWkwzMDczWF9OVU1fUElOUzsgaW5kZXgrKykge1xcbiBcXHRcXHQvKiBGaXJzdCBpbnB1dCBwaW5zIGFuZCB0aGVuIG91dHB1dCBwaW5zICovXFxuQEAgLTIyODAsNDUgKzIzMzgsNDQ3IEBAIHpsMzA3M3hfZHBsbF9pbml0X2ZpbmVfcGhhc2VfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXFxuIFxcdHJldHVybiByYztcXG4gfVxcbiBcXG4rLyogTWF4aW11bSBmcmVxdWVuY3kgYWRqdXN0bWVudDogKy0xJSBvZiBub21pbmFsIGluIHBwYiAqL1xcbisjZGVmaW5lIFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESlxcdDEwMDAwMDAwXFxuK1xcbiAvKipcXG4tICogemwzMDczeF9kcGxsX2FsbG9jIC0gYWxsb2NhdGUgRFBMTCBkZXZpY2VcXG4tICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuLSAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlclxcbisgKiB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQgLSByZWFkIGN1cnJlbnQgdGltZSBmcm9tIFRvRCBjb3VudGVyc1xcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cXG4rICogQHRzOiB0aW1lc3BlYyB0byBzdG9yZSBjdXJyZW50IHRpbWVcXG4rICogQHN0czogb3B0aW9uYWwgc3lzdGVtIHRpbWVzdGFtcCBwYWlyIGZvciBjcm9zcy10aW1lc3RhbXBpbmdcXG4gICpcXG4tICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKVxcbit7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBwdHBfaW5mbyk7XFxuK1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZHBsbC1cXHUwMDNlZGV2LCB6bGRwbGwtXFx1MDAzZWlkLCBmYWxzZSwgdHMsIHN0cyk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCAtIHNldCBUb0QgY291bnRlcnMgdG8gZ2l2ZW4gdGltZVxcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cXG4rICogQHRzOiB0aW1lc3BlYyB3aXRoIHRpbWUgdG8gc2V0XFxuICAqXFxuLSAqIFJldHVybjogcG9pbnRlciB0byBEUExMIGRldmljZSBvbiBzdWNjZXNzLCBlcnJvciBwb2ludGVyIG9uIGVycm9yXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbiAgKi9cXG4tc3RydWN0IHpsMzA3M3hfZHBsbCAqXFxuLXpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXFxuK1xcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcXG4ge1xcbi1cXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBwdHBfaW5mbyk7XFxuIFxcbi1cXHR6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTtcXG4tXFx0aWYgKCF6bGRwbGwpXFxuLVxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuIFxcbi1cXHR6bGRwbGwtXFx1MDAzZWRldiA9IHpsZGV2O1xcbi1cXHR6bGRwbGwtXFx1MDAzZWlkID0gY2g7XFxuLVxcdG11dGV4X2luaXQoXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuLVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZ6bGRwbGwtXFx1MDAzZXBpbnMpO1xcbitcXHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF93cml0ZSh6bGRwbGwtXFx1MDAzZWRldiwgemxkcGxsLVxcdTAwM2VpZCwgKnRzKTtcXG4rfVxcbiBcXG4tXFx0cmV0dXJuIHpsZHBsbDtcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwIC0gYWRqdXN0IHN1Yi1zZWNvbmQgdGltZSB2aWEgcGhhc2Ugc3RlcFxcbisgKiBAemxkcGxsOiBEUExMIGNoYW5uZWxcXG4rICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMgKG11c3QgYmUgd2l0aGluICgtTlNFQ19QRVJfU0VDLFxcbisgKiAgICAgICAgIE5TRUNfUEVSX1NFQykpXFxuKyAqXFxuKyAqIFVzZXMgdGhlIG91dHB1dCBwaGFzZSBzdGVwIG1lY2hhbmlzbSB3aXRoIHRvZF9zdGVwPTEgdG8gYWRqdXN0IGJvdGhcXG4rICogdGhlIG91dHB1dCBjbG9jayBwaGFzZSBhbmQgdGhlIFRvRCBjb3VudGVyIHNpbXVsdGFuZW91c2x5LiBUaGlzIGtlZXBzXFxuKyAqIG91dHB1dHMgYW5kIFRvRCBjb2hlcmVudC4gT25seSB2YWxpZCBpbiBOQ08gbW9kZS5cXG4rICpcXG4rICogT3V0cHV0cyBhcmUgZ3JvdXBlZCBieSBzeW50aGVzaXplciBzaW5jZSB0aGUgcGhhc2Ugc3RlcCB2YWx1ZSBpcyBpblxcbisgKiBzeW50aGVzaXplciBjbG9jayBjeWNsZXMuIFRoZSBmaXJzdCBzeW50aCBncm91cCB3aXRoIGVuYWJsZWQgb3V0cHV0c1xcbisgKiB1c2VzIHRvZF9zdGVwIHRvIGFkanVzdCBib3RoIG91dHB1dHMgYW5kIHRoZSBUb0QgY291bnRlci4gUmVtYWluaW5nXFxuKyAqIGdyb3VwcyBzdGVwIG91dHB1dHMgb25seS4gSWYgbm8gc3ludGggaGFzIGVuYWJsZWQgb3V0cHV0cywgdGhlIFRvRFxcbisgKiBjb3VudGVyIGlzIHN0ZXBwZWQgYWxvbmUgdXNpbmcgYW4gZW1wdHkgb3V0cHV0IG1hc2sgKHRoZSBGVyB1c2VzIHRoZVxcbisgKiBsb3dlc3QtSUQgc3ludGgncyBwZXJpb2QgZm9yIHRoZSBjb252ZXJzaW9uKS5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIG5vIHN5bnRocyBhdmFpbGFibGUsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHM2NCBkZWx0YSlcXG4re1xcbitcXHR1MTYgc3ludGhfbWFza1taTDMwNzNYX05VTV9TWU5USFNdID0ge307XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXFx1MDAzZWRldjtcXG4rXFx0Y29uc3Qgc3RydWN0IHpsMzA3M3hfc3ludGggKnN5bnRoO1xcbitcXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluO1xcbitcXHR1MzIgZmlyc3Rfc3ludGhfZnJlcSA9IDA7XFxuK1xcdGJvb2wgdG9kX3N0ZXBwZWQgPSBmYWxzZTtcXG4rXFx0czMyIHN0ZXBfY3ljbGVzO1xcbitcXHR1MzIgc3ludGhfZnJlcTtcXG4rXFx0aW50IHJjO1xcbitcXHR1OCBpO1xcbitcXG4rXFx0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQpO1xcbitcXG4rXFx0LyogQnVpbGQgcGVyLXN5bnRoIG91dHB1dCBtYXNrcyBmcm9tIHJlZ2lzdGVyZWQgb3V0cHV0IHBpbnMgKi9cXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwaW4sIFxcdTAwMjZ6bGRwbGwtXFx1MDAzZXBpbnMsIGxpc3QpIHtcXG4rXFx0XFx0dTggb3V0X2lkLCBzeW50aF9pZDtcXG4rXFxuK1xcdFxcdGlmICh6bDMwNzN4X2RwbGxfaXNfaW5wdXRfcGluKHBpbikpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0b3V0X2lkID0gemwzMDczeF9vdXRwdXRfcGluX291dF9nZXQocGluLVxcdTAwM2VpZCk7XFxuK1xcbitcXHRcXHRpZiAoIXpsMzA3M3hfY2hhbl9pc19vdXRfc3RlcHBlZChjaGFuLCBvdXRfaWQpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHN5bnRoX2lkID0gemwzMDczeF9kZXZfb3V0X3N5bnRoX2dldCh6bGRldiwgb3V0X2lkKTtcXG4rXFx0XFx0aWYgKHN5bnRoX2lkIFxcdTAwM2U9IFpMMzA3M1hfTlVNX1NZTlRIUykge1xcbitcXHRcXHRcXHRkZXZfd2Fybih6bGRldi1cXHUwMDNlZGV2LCBcXFwiVW5leHBlY3RlZCBzeW50aCBpZCBmb3IgT1VUJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCBvdXRfaWQpO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXHRcXHRzeW50aF9tYXNrW3N5bnRoX2lkXSB8PSBCSVQob3V0X2lkKTtcXG4rXFx0fVxcbitcXG4rXFx0LyogUHJvY2VzcyBlYWNoIHN5bnRoIGdyb3VwICovXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBaTDMwNzNYX05VTV9TWU5USFM7IGkrKykge1xcbitcXHRcXHRzeW50aCA9IHpsMzA3M3hfc3ludGhfc3RhdGVfZ2V0KHpsZGV2LCBpKTtcXG4rXFx0XFx0aWYgKCF6bDMwNzN4X3N5bnRoX2lzX2VuYWJsZWQoc3ludGgpIHx8XFxuK1xcdFxcdCAgICB6bDMwNzN4X3N5bnRoX2RwbGxfZ2V0KHN5bnRoKSAhPSB6bGRwbGwtXFx1MDAzZWlkKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHN5bnRoX2ZyZXEgPSB6bDMwNzN4X3N5bnRoX2ZyZXFfZ2V0KHN5bnRoKTtcXG4rXFxuK1xcdFxcdC8qIFJlbWVtYmVyIGxvd2VzdC1JRCBzeW50aCBmcmVxIGZvciBUb0Qtb25seSBmYWxsYmFjayAqL1xcbitcXHRcXHRpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpXFxuK1xcdFxcdFxcdGZpcnN0X3N5bnRoX2ZyZXEgPSBzeW50aF9mcmVxO1xcbitcXG4rXFx0XFx0aWYgKCFzeW50aF9tYXNrW2ldKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdC8qIFNhZmUgZm9yIHMzMjogbWF4IHN5bnRoIGZyZXEgaXMgNzUwIE1IeiAqL1xcbitcXHRcXHRzdGVwX2N5Y2xlcyA9IGRpdl9zNjQoZGVsdGEgKiBzeW50aF9mcmVxLCBOU0VDX1BFUl9TRUMpO1xcbitcXG4rXFx0XFx0cmMgPSB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCh6bGRldiwgemxkcGxsLVxcdTAwM2VpZCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBzeW50aF9tYXNrW2ldLCBzdGVwX2N5Y2xlcyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAhdG9kX3N0ZXBwZWQpO1xcbitcXHRcXHRpZiAocmMpIHtcXG4rXFx0XFx0XFx0aWYgKHRvZF9zdGVwcGVkKSB7XFxuK1xcdFxcdFxcdFxcdGRldl93YXJuKHpsZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCBcXFwiUGFydGlhbCBwaGFzZSBzdGVwIGZhaWx1cmVcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRyZXR1cm4gcmM7XFxuK1xcdFxcdH1cXG4rXFx0XFx0dG9kX3N0ZXBwZWQgPSB0cnVlO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdC8qIE5vIGVuYWJsZWQgb3V0cHV0cyBmb3VuZDsgc3RlcCBUb0QgY291bnRlciBvbmx5IHVzaW5nIHRoZVxcbitcXHQgKiBsb3dlc3QtSUQgc3ludGgncyBwZXJpb2QgKGVtcHR5IG91dHB1dCBtYXNrKS5cXG4rXFx0ICovXFxuK1xcdGlmICghdG9kX3N0ZXBwZWQpIHtcXG4rXFx0XFx0c3RlcF9jeWNsZXMgPSBkaXZfczY0KGRlbHRhICogZmlyc3Rfc3ludGhfZnJlcSwgTlNFQ19QRVJfU0VDKTtcXG4rXFx0XFx0cmV0dXJuIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkLCAwLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RlcF9jeWNsZXMsIHRydWUpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gLyoqXFxuLSAqIHpsMzA3M3hfZHBsbF9mcmVlIC0gZnJlZSBEUExMIGRldmljZVxcbi0gKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmVcXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lIC0gYWRqdXN0IFBUUCBjbG9jayB0aW1lXFxuKyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xcbisgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kc1xcbiAgKlxcbi0gKiBEZWFsbG9jYXRlcyBnaXZlbiBEUExMIGRldmljZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBieSBAemwzMDczeF9kcGxsX2FsbG9jLlxcbisgKiBJbiBOQ08gbW9kZSwgbGFyZ2UgZGVsdGFzIChcXHUwMDNlPSAxIHNlY29uZCkgYXJlIHNwbGl0IGludG8gYSBUb0RcXG4rICogcmVhZC1tb2RpZnktd3JpdGUgZm9yIHRoZSBzZWNvbmRzIHBhcnQgYW5kIGFuIG91dHB1dCBwaGFzZSBzdGVwIGZvclxcbisgKiB0aGUgc3ViLXNlY29uZCByZW1haW5kZXIuIFN1Yi1zZWNvbmQgZGVsdGFzIHVzZSBwaGFzZSBzdGVwIGRpcmVjdGx5LFxcbisgKiBmYWxsaW5nIGJhY2sgdG8gVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIGlmIHBoYXNlIHN0ZXAgaXMgdW5hdmFpbGFibGUuXFxuKyAqIEluIEFVVE8vUkVGTE9DSyBtb2RlcywgbGFyZ2UgZGVsdGFzIGFyZSBzcGxpdCBpbnRvIFRvRFxcbisgKiByZWFkLW1vZGlmeS13cml0ZSBmb3Igc2Vjb25kcyBhbmQgVElFIHdyaXRlIGZvciB0aGUgc3ViLXNlY29uZFxcbisgKiByZW1haW5kZXIuIFN1Yi1zZWNvbmQgZGVsdGFzIHVzZSBUSUUgd3JpdGUgZGlyZWN0bHkuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbiAgKi9cXG4tdm9pZFxcbi16bDMwNzN4X2RwbGxfZnJlZShzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXFxuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczY0IGRlbHRhKVxcbiB7XFxuLVxcdFdBUk4oemxkcGxsLVxcdTAwM2VkcGxsX2RldiwgXFxcIkRQTEwgZGV2aWNlIGlzIHN0aWxsIHJlZ2lzdGVyZWRcXFxcblxcXCIpO1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgcHRwX2luZm8pO1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVxcdTAwM2VkZXY7XFxuK1xcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XFxuK1xcdGJvb2wgc2VjX2FkanVzdGVkID0gZmFsc2U7XFxuK1xcdHN0cnVjdCB0aW1lc3BlYzY0IHRzO1xcbitcXHRpbnQgcmM7XFxuIFxcbi1cXHRtdXRleF9kZXN0cm95KFxcdTAwMjZ6bGRwbGwtXFx1MDAzZWxvY2spO1xcbi1cXHRrZnJlZSh6bGRwbGwpO1xcbitcXHRpZiAoIWRlbHRhKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdC8qIE1vZGVzIHdpdGhvdXQgcGhhc2Ugc3RlcCBvciBUSUUgdXNlIHBsYWluIFRvRCBhZGp1c3QgKi9cXG4rXFx0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQpO1xcbitcXHRpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIXpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjaGFuKSlcXG4rXFx0XFx0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgbnNfdG9fdGltZXNwZWM2NChkZWx0YSkpO1xcbitcXG4rXFx0LyogU3BsaXQgb2ZmIHNlY29uZHMgdmlhIFRvRCByZWFkLW1vZGlmeS13cml0ZSBzbyB0aGUgc3ViLXNlY29uZFxcbitcXHQgKiByZW1haW5kZXIgY2FuIGJlIGFwcGxpZWQgdGhyb3VnaCB0aGUgb3V0cHV0LWNvaGVyZW50IG1lY2hhbmlzbVxcbitcXHQgKiAocGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUpLlxcbitcXHQgKi9cXG4rXFx0aWYgKGFicyhkZWx0YSkgXFx1MDAzZT0gTlNFQ19QRVJfU0VDKSB7XFxuK1xcdFxcdHMzMiByZW1haW5kZXI7XFxuK1xcbitcXHRcXHR0cy50dl9zZWMgPSBkaXZfczY0X3JlbShkZWx0YSwgTlNFQ19QRVJfU0VDLCBcXHUwMDI2cmVtYWluZGVyKTtcXG4rXFx0XFx0dHMudHZfbnNlYyA9IDA7XFxuK1xcdFxcdGRlbHRhID0gcmVtYWluZGVyO1xcbitcXG4rXFx0XFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVxcdTAwM2VpZCwgdHMpO1xcbitcXHRcXHRpZiAocmMpXFxuK1xcdFxcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdFxcdHNlY19hZGp1c3RlZCA9IHRydWU7XFxuK1xcbitcXHRcXHQvKiBObyBzdWItc2Vjb25kIHJlbWFpbmRlciwgZG9uZSAqL1xcbitcXHRcXHRpZiAoIWRlbHRhKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0LyogQXBwbHkgc3ViLXNlY29uZCBkZWx0YSB2aWEgcGhhc2Ugc3RlcCAoTkNPKSBvciBUSUUgd3JpdGUgKi9cXG4rXFx0aWYgKHpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSkge1xcbitcXHRcXHRyYyA9IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwKHpsZHBsbCwgZGVsdGEpO1xcbitcXHRcXHRpZiAoIXJjKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmMgPSB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkLCBkZWx0YSk7XFxuK1xcdFxcdGlmICghcmMpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHQvKiBQaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSBmYWlsZWQsIGZhbGwgYmFjayB0byBUb0QgYWRqdXN0ICovXFxuK1xcdHJjID0gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQsXFxuK1xcdFxcdFxcdFxcdCAgICAgbnNfdG9fdGltZXNwZWM2NChkZWx0YSkpO1xcbitcXG4rXFx0LyogSW4gdGhlIHVubGlrZWx5IGV2ZW50IHRoYXQgYm90aCBwaGFzZSBzdGVwL1RJRSB3cml0ZSBhbmQgZmFsbGJhY2tcXG4rXFx0ICogVG9EIGFkanVzdCBmYWlsIGFmdGVyIHNlY29uZHMgd2VyZSBhbHJlYWR5IGNvbW1pdHRlZCwgcmV0dXJuXFxuK1xcdCAqIHN1Y2Nlc3MgdG8gcHJldmVudCB0aGUgUFRQIHNlcnZvIGZyb20gcmV0cnlpbmcgdGhlIGZ1bGwgZGVsdGEgYW5kXFxuK1xcdCAqIGFwcGx5aW5nIHNlY29uZHMgYWdhaW4uIFRoZSBzdWItc2Vjb25kIHJlc2lkdWFsIHdpbGwgc2VsZi1jb3JyZWN0XFxuK1xcdCAqIGluIHRoZSBuZXh0IHNlcnZvIGN5Y2xlLlxcbitcXHQgKi9cXG4rXFx0aWYgKHJjIFxcdTAwMjZcXHUwMDI2IHNlY19hZGp1c3RlZCkge1xcbitcXHRcXHRkZXZfd2Fybih6bGRldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHQgXFxcIlN1Yi1zZWNvbmQgYWRqdXN0bWVudCBmYWlsZWQgYWZ0ZXIgc2Vjb25kcyBhcHBsaWVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiByYztcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSAtIGFkanVzdCBQVFAgY2xvY2sgZnJlcXVlbmN5XFxuKyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xcbisgKiBAc2NhbGVkX3BwbTogZnJlcXVlbmN5IGFkanVzdG1lbnQgaW4gc2NhbGVkIHBwbSAocHBtICogMl4xNilcXG4rICpcXG4rICogT25seSBzdXBwb3J0ZWQgaW4gTkNPIG1vZGUuIFdyaXRlcyB0aGUgZGVsdGEgZnJlcXVlbmN5IG9mZnNldCByZWdpc3Rlci5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIG5vdCBpbiBOQ08gbW9kZSwgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK3N0YXRpYyBpbnRcXG4remwzMDczeF9kcGxsX3B0cF9hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgbG9uZyBzY2FsZWRfcHBtKVxcbit7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBwdHBfaW5mbyk7XFxuK1xcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XFxuK1xcdHM2NCBvZmZzZXQ7XFxuK1xcbitcXHQvKiBDb252ZXJ0IHNjYWxlZF9wcG0gdG8gZGZfb2Zmc2V0IGluIDJeLTQ4IHN0ZXBzOlxcbitcXHQgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDJeMzIpIC8gMTBeNlxcbitcXHQgKlxcbitcXHQgKiBTaW1wbGlmeSB0byBhdm9pZCBvdmVyZmxvdzpcXG4rXFx0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjI2KSAvIDVeNlxcbitcXHQgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDY3MTA4ODY0KSAvIDE1NjI1XFxuK1xcdCAqL1xcbitcXHRvZmZzZXQgPSAtZGl2X3M2NCgoczY0KXNjYWxlZF9wcG0gKiA2NzEwODg2NExMLCAxNTYyNSk7XFxuK1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRwbGwtXFx1MDAzZWRldiwgemxkcGxsLVxcdTAwM2VpZCk7XFxuK1xcdGlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKVxcbitcXHRcXHRyZXR1cm4gc2NhbGVkX3BwbSA/IC1FT1BOT1RTVVBQIDogMDtcXG4rXFx0aWYgKG9mZnNldCA9PSBjaGFuLVxcdTAwM2VkZl9vZmZzZXQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0dXJuIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHpsZHBsbC1cXHUwMDNlZGV2LCB6bGRwbGwtXFx1MDAzZWlkLCBvZmZzZXQpO1xcbit9XFxuK1xcbisvKipcXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSAtIGFkanVzdCBQVFAgY2xvY2sgcGhhc2VcXG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXFxuKyAqIEBkZWx0YTogcGhhc2UgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kc1xcbisgKlxcbisgKiBPbmx5IHN1cHBvcnRlZCBpbiBBVVRPIGFuZCBSRUZMT0NLIG1vZGVzLiBVc2VzIFRJRSB3cml0ZSBmb3JcXG4rICogbmFub3NlY29uZCByZXNvbHV0aW9uIHBoYXNlIGFkanVzdG1lbnQuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRU9QTk9UU1VQUCBpZiBtb2RlIGRvZXNuJ3Qgc3VwcG9ydCBUSUUsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2Uoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBzMzIgZGVsdGEpXFxuK3tcXG4rXFx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIHB0cF9pbmZvKTtcXG4rXFx0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cXHUwMDNlZGV2O1xcbitcXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xcbitcXG4rXFx0aWYgKCFkZWx0YSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLVxcdTAwM2VpZCk7XFxuK1xcbitcXHRpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjaGFuKSlcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0cmV0dXJuIHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQsIGRlbHRhKTtcXG4rfVxcbitcXG4rc3RhdGljIHMzMlxcbit6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyBfX2Fsd2F5c191bnVzZWQpXFxuK3tcXG4rXFx0LyogSFcgbGltaXRzIFRJRSB3cml0ZSB0byArLTEgc2Vjb25kLiBSZXR1cm4gdGhlIGNvbnN0YW50IEhXXFxuK1xcdCAqIGxpbWl0IGFuZCBsZXQgYWRqcGhhc2UgaGFuZGxlIG1vZGUtc3BlY2lmaWMgY2hlY2tzLlxcbitcXHQgKi9cXG4rXFx0cmV0dXJuIE5TRUNfUEVSX1NFQyAtIDE7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2RwbGxfcHRwX3Blcm91dF9maW5kX3BpbiAtIGZpbmQgcGluIGJ5IHBlcm91dCBjaGFubmVsIGluZGV4XFxuKyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbFxcbisgKiBAaWR4OiBwZXJvdXQgY2hhbm5lbCBpbmRleCB0byBmaW5kXFxuKyAqXFxuKyAqIFJldHVybjogcG9pbnRlciB0byB0aGUgcGluLCBvciBOVUxMIGlmIG5vdCBmb3VuZFxcbisgKi9cXG4rc3RhdGljIHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpcXG4remwzMDczeF9kcGxsX3B0cF9wZXJvdXRfZmluZF9waW4oc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLCBpbnQgaWR4KVxcbit7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW47XFxuK1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBpbiwgXFx1MDAyNnpsZHBsbC1cXHUwMDNlcGlucywgbGlzdCkge1xcbitcXHRcXHRpZiAocGluLVxcdTAwM2VwZXJvdXRfaWR4ID09IGlkeClcXG4rXFx0XFx0XFx0cmV0dXJuIHBpbjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2RwbGxfcHRwX2VuYWJsZSAtIGVuYWJsZS9kaXNhYmxlIFBUUCBjbG9jayBmdW5jdGlvbnNcXG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXFxuKyAqIEBycTogdGhlIHJlcXVlc3RlZCBjbG9jayBmdW5jdGlvbiBhbmQgcGFyYW1ldGVyc1xcbisgKiBAb246IHRydWUgdG8gZW5hYmxlLCBmYWxzZSB0byBkaXNhYmxlXFxuKyAqXFxuKyAqIEhhbmRsZXMgUFRQX0NMS19SRVFfUEVST1VUIHJlcXVlc3RzLiBPbmx5IDFQUFMgKHBlcmlvZCA9IDFzKSBpcyBzdXBwb3J0ZWQuXFxuKyAqIE9uIGVuYWJsZSwgY29uZmlndXJlcyB0aGUgb3V0cHV0IGRpdmlkZXIgZm9yIDEgSHouIE9uIGRpc2FibGUsIGRvZXMgbm90aGluZ1xcbisgKiBhcyB0aGUgc2lnbmFsIGlzIG5vdCBkaXNhYmxlZC5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfZW5hYmxlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IHB0cF9jbG9ja19yZXF1ZXN0ICpycSwgaW50IG9uKVxcbit7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBwdHBfaW5mbyk7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW47XFxuK1xcdHVuc2lnbmVkIGludCBpZHg7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdGlmIChycS1cXHUwMDNldHlwZSAhPSBQVFBfQ0xLX1JFUV9QRVJPVVQpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGlkeCA9IHJxLVxcdTAwM2VwZXJvdXQuaW5kZXg7XFxuK1xcdGlmIChpZHggXFx1MDAzZT0gaW5mby1cXHUwMDNlbl9wZXJfb3V0KVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdC8qIFRvZ2dsaW5nIG91dHB1dCBwaW5zIGNhbiBwcm9kdWNlIHJ1bnQgcHVsc2VzLCBzbyBkaXNhYmxlXFxuK1xcdCAqIGlzIGEgbm8tb3AuXFxuK1xcdCAqL1xcbitcXHRpZiAoIW9uKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdC8qIE9ubHkgYWNjZXB0IGV4YWN0bHkgMVBQUyAocGVyaW9kLnNlYyA9PSAxLCBuc2VjID09IDApICovXFxuK1xcdGlmIChycS1cXHUwMDNlcGVyb3V0LnBlcmlvZC5zZWMgIT0gMSB8fCBycS1cXHUwMDNlcGVyb3V0LnBlcmlvZC5uc2VjICE9IDApXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdHBpbiA9IHpsMzA3M3hfZHBsbF9wdHBfcGVyb3V0X2ZpbmRfcGluKHpsZHBsbCwgaWR4KTtcXG4rXFx0aWYgKCFwaW4pIHtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ6bGRwbGwtXFx1MDAzZWxvY2spO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0LyogQWxyZWFkeSBhdCAxIEh6LCBub3RoaW5nIHRvIGRvICovXFxuK1xcdGlmICh6bDMwNzN4X2Rldl9vdXRwdXRfcGluX2ZyZXFfZ2V0KHpsZHBsbC1cXHUwMDNlZGV2LCBwaW4tXFx1MDAzZWlkKSA9PSAxKSB7XFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdHJjID0gX196bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfc2V0KHpsZHBsbCwgcGluLCAxKTtcXG4rXFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdGlmICghcmMpXFxuK1xcdFxcdGRwbGxfcGluX2NoYW5nZV9udGYocGluLVxcdTAwM2VkcGxsX3Bpbik7XFxuK1xcbitcXHRyZXR1cm4gcmM7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvID0ge1xcbitcXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbitcXHQubWF4X2FkalxcdD0gWkwzMDczWF9EUExMX1BUUF9NQVhfQURKLFxcbitcXHQuZ2V0dGltZXg2NFxcdD0gemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0LFxcbitcXHQuc2V0dGltZTY0XFx0PSB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCxcXG4rXFx0LmFkanRpbWVcXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSxcXG4rXFx0LmFkamZpbmVcXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSxcXG4rXFx0LmFkanBoYXNlXFx0PSB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlLFxcbitcXHQuZ2V0bWF4cGhhc2VcXHQ9IHpsMzA3M3hfZHBsbF9wdHBfZ2V0bWF4cGhhc2UsXFxuK1xcdC5lbmFibGVcXHRcXHQ9IHpsMzA3M3hfZHBsbF9wdHBfZW5hYmxlLFxcbit9O1xcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIgLSByZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsXFxuKyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byByZWdpc3RlciBQVFAgY2xvY2sgZm9yXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcXG4re1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVxcdTAwM2VkZXY7XFxuK1xcdHN0cnVjdCBwdHBfY2xvY2sgKnB0cF9jbG9jaztcXG4rXFxuK1xcdHNucHJpbnRmKHpsZHBsbC1cXHUwMDNlcHRwX2luZm8ubmFtZSwgc2l6ZW9mKHpsZHBsbC1cXHUwMDNlcHRwX2luZm8ubmFtZSksXFxuK1xcdFxcdCBcXFwiemwzMDczeC1kcGxsJXVcXFwiLCB6bGRwbGwtXFx1MDAzZWlkKTtcXG4rXFxuK1xcdHB0cF9jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcihcXHUwMDI2emxkcGxsLVxcdTAwM2VwdHBfaW5mbywgemxkZXYtXFx1MDAzZWRldik7XFxuK1xcdGlmIChJU19FUlIocHRwX2Nsb2NrKSkge1xcbitcXHRcXHRkZXZfZXJyKHpsZGV2LVxcdTAwM2VkZXYsIFxcXCJGYWlsZWQgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBEUExMJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHpsZHBsbC1cXHUwMDNlaWQpO1xcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihwdHBfY2xvY2spO1xcbitcXHR9XFxuK1xcbitcXHR6bGRwbGwtXFx1MDAzZXB0cF9jbG9jayA9IHB0cF9jbG9jaztcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKipcXG4rICogemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyIC0gdW5yZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsXFxuKyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byB1bnJlZ2lzdGVyIFBUUCBjbG9jayBmb3JcXG4rICovXFxuK3N0YXRpYyB2b2lkIHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXFxuK3tcXG4rXFx0aWYgKCFJU19FUlJfT1JfTlVMTCh6bGRwbGwtXFx1MDAzZXB0cF9jbG9jaykpIHtcXG4rXFx0XFx0cHRwX2Nsb2NrX3VucmVnaXN0ZXIoemxkcGxsLVxcdTAwM2VwdHBfY2xvY2spO1xcbitcXHRcXHR6bGRwbGwtXFx1MDAzZXB0cF9jbG9jayA9IE5VTEw7XFxuK1xcdH1cXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTI0MDMsNiArMjg2Myw0OCBAQCB6bDMwNzN4X2RwbGxfcmVmX3N5bmNfcGFpcnNfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9hbGxvYyAtIGFsbG9jYXRlIERQTEwgZGV2aWNlXFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBudW1iZXJcXG4rICpcXG4rICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLlxcbisgKlxcbisgKiBSZXR1cm46IHBvaW50ZXIgdG8gRFBMTCBkZXZpY2Ugb24gc3VjY2VzcywgZXJyb3IgcG9pbnRlciBvbiBlcnJvclxcbisgKi9cXG4rc3RydWN0IHpsMzA3M3hfZHBsbCAqXFxuK3psMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcXG4re1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7XFxuK1xcbitcXHR6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTtcXG4rXFx0aWYgKCF6bGRwbGwpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXG4rXFx0emxkcGxsLVxcdTAwM2VkZXYgPSB6bGRldjtcXG4rXFx0emxkcGxsLVxcdTAwM2VpZCA9IGNoO1xcbitcXHR6bGRwbGwtXFx1MDAzZXB0cF9pbmZvID0gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvO1xcbitcXHRtdXRleF9pbml0KFxcdTAwMjZ6bGRwbGwtXFx1MDAzZWxvY2spO1xcbitcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2emxkcGxsLVxcdTAwM2VwaW5zKTtcXG4rXFxuK1xcdHJldHVybiB6bGRwbGw7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2RwbGxfZnJlZSAtIGZyZWUgRFBMTCBkZXZpY2VcXG4rICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXFxuKyAqXFxuKyAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuXFxuKyAqL1xcbit2b2lkXFxuK3psMzA3M3hfZHBsbF9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcXG4re1xcbitcXHRXQVJOKHpsZHBsbC1cXHUwMDNlZHBsbF9kZXYsIFxcXCJEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXFxcXG5cXFwiKTtcXG4rXFxuK1xcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuK1xcdGtmcmVlKHpsZHBsbCk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIgLSByZWdpc3RlciBEUExMIGRldmljZSBhbmQgYWxsIGl0cyBwaW5zXFxuICAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZVxcbkBAIC0yNDMzLDYgKzI5MzUsMTMgQEAgemwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcXG4gXFx0XFx0cmV0dXJuIHJjO1xcbiBcXHR9XFxuIFxcbitcXHRyYyA9IHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIoemxkcGxsKTtcXG4rXFx0aWYgKHJjKSB7XFxuK1xcdFxcdHpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTtcXG4rXFx0XFx0emwzMDczeF9kcGxsX2RldmljZV91bnJlZ2lzdGVyKHpsZHBsbCk7XFxuK1xcdFxcdHJldHVybiByYztcXG4rXFx0fVxcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTI0NDYsNyArMjk1NSw3IEBAIHpsMzA3M3hfZHBsbF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXFxuIHZvaWRcXG4gemwzMDczeF9kcGxsX3VucmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxcbiB7XFxuLVxcdC8qIFVucmVnaXN0ZXIgYWxsIHBpbnMgYW5kIGRwbGwgKi9cXG4rXFx0emwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHpsZHBsbCk7XFxuIFxcdHpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTtcXG4gXFx0emwzMDczeF9kcGxsX2RldmljZV91bnJlZ2lzdGVyKHpsZHBsbCk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXFxuaW5kZXggZmFlYmM0MDJiYTFiNzAuLjliNWY3MmMzMzg0OWNlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaFxcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaFxcbkBAIC01LDYgKzUsOCBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RwbGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpc3QuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L211dGV4LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwiY29yZS5oXFxcIlxcbiBcXG5AQCAtMjIsNiArMjQsOCBAQFxcbiAgKiBAdHlwZTogRFBMTCB0eXBlIChQUFMgb3IgRUVDKVxcbiAgKiBAbG9ja19zdGF0dXM6IGxhc3Qgc2F2ZWQgRFBMTCBsb2NrIHN0YXR1c1xcbiAgKiBAcGluczogbGlzdCBvZiBwaW5zXFxuKyAqIEBwdHBfaW5mbzogUFRQIGNsb2NrIGluZm9cXG4rICogQHB0cF9jbG9jazogcmVnaXN0ZXJlZCBQVFAgY2xvY2sgKG9yIE5VTEwpXFxuICAqL1xcbiBzdHJ1Y3QgemwzMDczeF9kcGxsIHtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZFxcdFxcdGxpc3Q7XFxuQEAgLTM2LDYgKzQwLDggQEAgc3RydWN0IHpsMzA3M3hfZHBsbCB7XFxuIFxcdGVudW0gZHBsbF90eXBlXFx0XFx0XFx0dHlwZTtcXG4gXFx0ZW51bSBkcGxsX2xvY2tfc3RhdHVzXFx0XFx0bG9ja19zdGF0dXM7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWRcXHRcXHRwaW5zO1xcbitcXHRzdHJ1Y3QgcHRwX2Nsb2NrX2luZm9cXHRcXHRwdHBfaW5mbztcXG4rXFx0c3RydWN0IHB0cF9jbG9ja1xcdFxcdCpwdHBfY2xvY2s7XFxuIH07XFxuIFxcbiBzdHJ1Y3QgemwzMDczeF9kcGxsICp6bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhcXG5pbmRleCBiNzBlYWQ3ZDQ0OTViMi4uNDQ3NzU3ZTk5ODQ1ZDggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXFxuQEAgLTE3OSw2ICsxNzksMjAgQEBcXG4gI2RlZmluZSBaTF9EUExMX0RGX1JFQURfQ01EXFx0XFx0XFx0R0VOTUFTSygyLCAwKVxcbiAjZGVmaW5lIFpMX0RQTExfREZfUkVBRF9DTURfQUNDX0lcXHRcXHQ0XFxuIFxcbisjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9DVFJMXFx0XFx0XFx0WkxfUkVHKDUsIDB4MzAsIDEpXFxuKyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUFxcdFxcdFxcdEdFTk1BU0soMiwgMClcXG4rI2RlZmluZSBaTF9EUExMX1RJRV9DVFJMX09QX1dSXFx0XFx0XFx0NFxcbitcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTF9NQVNLXFx0XFx0WkxfUkVHKDUsIDB4MzEsIDEpXFxuK1xcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9DVFJMKF9pZHgpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRaTF9SRUdfSURYKF9pZHgsIDUsIDB4MzgsIDEsIDgsIDEpXFxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9TRU1cXHRcXHRcXHRCSVQoNClcXG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRFxcdFxcdFxcdEdFTk1BU0soMywgMClcXG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWlxcdDFcXG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UXFx0OFxcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaXFx0OVxcbitcXG4gI2RlZmluZSBaTF9SRUdfRFBMTF9NRUFTX0NUUkxcXHRcXHRcXHRaTF9SRUcoNSwgMHg1MCwgMSlcXG4gI2RlZmluZSBaTF9EUExMX01FQVNfQ1RSTF9FTlxcdFxcdFxcdEJJVCgwKVxcbiAjZGVmaW5lIFpMX0RQTExfTUVBU19DVFJMX0FWR19GQUNUT1JcXHRcXHRHRU5NQVNLKDcsIDQpXFxuQEAgLTE5Myw2ICsyMDcsOSBAQFxcbiBcXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcXG4gICogUmVnaXN0ZXIgUGFnZXMgNi03LCBEUExMIERhdGFcXG4rICpcXG4rICogUGVyLWNoYW5uZWwgcmVnaXN0ZXJzIHdpdGggc3RyaWRlIDB4MjAuIENoYW5uZWxzIDAtMyByZXNpZGUgb24gcGFnZSA2LFxcbisgKiBjaGFubmVsIDQgb24gcGFnZSA3LlxcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4gXFxuICNkZWZpbmUgWkxfUkVHX0RQTExfREZfT0ZGU0VUXzAzKF9pZHgpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbkBAIC0yMDIsNiArMjE5LDI0IEBAXFxuIFxcdCgoX2lkeCkgXFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfREZfT0ZGU0VUXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfREZfT0ZGU0VUXzQpXFxuICNkZWZpbmUgWkxfRFBMTF9ERl9PRkZTRVRfVU5LTk9XTlxcdFM2NF9NSU5cXG4gXFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEFfMDMoX2lkeClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgwQywgNiwgNCwgMHgyMClcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQV80XFx0XFx0XFx0WkxfUkVHKDcsIDB4MEMsIDYpXFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEEoX2lkeClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdCgoX2lkeCkgXFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfVElFX0RBVEFfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9USUVfREFUQV80KVxcbitcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRaTF9SRUdfSURYKF9pZHgsIDYsIDB4MTIsIDYsIDQsIDB4MjApXFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQ180XFx0XFx0XFx0WkxfUkVHKDcsIDB4MTIsIDYpXFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQyhfaWR4KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0KChfaWR4KSBcXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVE9EX1NFQ180KVxcbitcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlNfMDMoX2lkeClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgxOCwgNCwgNCwgMHgyMClcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlNfNFxcdFxcdFxcdFpMX1JFRyg3LCAweDE4LCA0KVxcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OUyhfaWR4KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0KChfaWR4KSBcXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9UT0RfTlNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfTlNfNClcXG4rXFxuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbiAgKiBSZWdpc3RlciBQYWdlIDksIFN5bnRoIGFuZCBPdXRwdXRcXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbkBAIC0yMjEsNiArMjU2LDggQEBcXG4gI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9FTlxcdFxcdFxcdEJJVCgwKVxcbiAjZGVmaW5lIFpMX09VVFBVVF9DVFJMX1NZTlRIX1NFTFxcdFxcdEdFTk1BU0soNiwgNClcXG4gXFxuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTS1xcdFxcdFpMX1JFRyg5LCAweDM2LCAyKVxcbitcXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcXG4gICogUmVnaXN0ZXIgUGFnZSAxMCwgUmVmIE1haWxib3hcXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuQEAgLTMxNiw2ICszNTMsMjUgQEBcXG4gI2RlZmluZSBaTF9SRUdfT1VUUFVUX0VTWU5DX1dJRFRIXFx0XFx0WkxfUkVHKDE0LCAweDE4LCA0KVxcbiAjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfQ09NUFxcdFxcdFpMX1JFRygxNCwgMHgyMCwgNClcXG4gXFxuKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbisgKiBSZWdpc3RlciBQYWdlIDksIE91dHB1dCBQaGFzZSBTdGVwXFxuKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4rXFxuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxcXHRcXHRaTF9SRUcoOSwgMHgzOCwgMSlcXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX0RQTExcXHRcXHRHRU5NQVNLKDYsIDQpXFxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9UT0RfU1RFUFxcdEJJVCgzKVxcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BcXHRcXHRHRU5NQVNLKDEsIDApXFxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9OT05FXFx0MFxcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfUkVTRVRcXHQxXFxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9SRUFEXFx0MlxcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfV1JJVEVcXHQzXFxuK1xcbisjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9OVU1CRVJcXHRcXHRaTF9SRUcoOSwgMHgzOSwgMSlcXG4rXFxuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX01BU0tcXHRcXHRaTF9SRUcoOSwgMHgzYSwgMilcXG4rXFxuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0RBVEFcXHRcXHRaTF9SRUcoOSwgMHgzYywgNClcXG4rXFxuIC8qXFxuICAqIFJlZ2lzdGVyIFBhZ2UgMjU1IC0gSFcgcmVnaXN0ZXJzIGFjY2Vzc1xcbiAgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTE6MTI6NDcuMzM3MzUwMDc3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMjY2MTY5MjU2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaTDMwNzNYXCIsXG4gICAgXCJaTDMwNzNYX0kyQ1wiLFxuICAgIFwiWkwzMDczWF9TUElcIixcbiAgICBcIlBUUF8xNTg4X0NMT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0XCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NFwiLFxuICAgIFwiemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lXCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmVcIixcbiAgICBcInpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2VcIixcbiAgICBcInpsMzA3M3hfZHBsbF9wdHBfZW5hYmxlXCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fdG9kX3JlYWRcIixcbiAgICBcInpsMzA3M3hfY2hhbl90b2Rfd3JpdGVcIixcbiAgICBcInpsMzA3M3hfY2hhbl90b2RfYWRqdXN0XCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcFwiLFxuICAgIFwiemwzMDczeF9jaGFuX3RpZV93cml0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgUFRQIGNsb2NrIHN1cHBvcnQgdG8gdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyICh6bDMwNzN4KS4gSXQgaW1wbGVtZW50cyB2YXJpb3VzIFBUUCBjbG9jayBvcGVyYXRpb25zIChnZXQvc2V0IHRpbWUsIGFkanVzdCB0aW1lL3BoYXNlL2ZyZXF1ZW5jeSkgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIFBUUCBpb2N0bCBpbnRlcmZhY2UuIEZ1enppbmcgdGhlc2UgZnVuY3Rpb25zIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlIGRyaXZlciBoYW5kbGVzIGVkZ2UgY2FzZXMgYW5kIGNvbmN1cnJlbnQgYWNjZXNzZXMgY29ycmVjdGx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDEyN2VjMWRhY2ViNTVjZTg0OTFiNjRhOWRjZjU4YWQxMDI1ZTMwNTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCA5IDExOjEyOjQ0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdcbmluZGV4IDViYmNhMTQwMDU4MTMxLi5kMDU3NGFkNTcxZDNmYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdcbkBAIC0yLDcgKzIsNyBAQFxuIFxuIGNvbmZpZyBaTDMwNzNYXG4gXHR0cmlzdGF0ZSBcIk1pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXNcIiBpZiBDT01QSUxFX1RFU1Rcbi1cdGRlcGVuZHMgb24gTkVUXG4rXHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiBcdHNlbGVjdCBEUExMXG4gXHRzZWxlY3QgTkVUX0RFVkxJTktcbiBcdHNlbGVjdCBSRUdNQVBcbkBAIC0xNiw3ICsxNiw3IEBAIGNvbmZpZyBaTDMwNzNYXG4gXG4gY29uZmlnIFpMMzA3M1hfSTJDXG4gXHR0cmlzdGF0ZSBcIkkyQyBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcIlxuLVx0ZGVwZW5kcyBvbiBJMkMgXHUwMDI2XHUwMDI2IE5FVFxuK1x0ZGVwZW5kcyBvbiBJMkMgXHUwMDI2XHUwMDI2IE5FVCBcdTAwMjZcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiBcdHNlbGVjdCBSRUdNQVBfSTJDXG4gXHRzZWxlY3QgWkwzMDczWFxuIFx0aGVscFxuQEAgLTI4LDcgKzI4LDcgQEAgY29uZmlnIFpMMzA3M1hfSTJDXG4gXG4gY29uZmlnIFpMMzA3M1hfU1BJXG4gXHR0cmlzdGF0ZSBcIlNQSSBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcIlxuLVx0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IFNQSVxuK1x0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IFNQSSBcdTAwMjZcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiBcdHNlbGVjdCBSRUdNQVBfU1BJXG4gXHRzZWxlY3QgWkwzMDczWFxuIFx0aGVscFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uY1xuaW5kZXggNGVjMmNmNTNkYWQ0NjguLjUzMDMyZTc4MmZkNGFmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNcbkBAIC0zLDYgKzMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZfcHJpbnRrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiBcbkBAIC0yMDIsNiArMjAzLDExIEBAIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfZmV0Y2goc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpXG4gXHRcdHpsMzA3M3hfY2hhbl9yZWZzZWxfc3RhdGVfZ2V0KGNoYW4pLFxuIFx0XHR6bDMwNzN4X2NoYW5fcmVmc2VsX3JlZl9nZXQoY2hhbikpO1xuIFxuK1x0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1NURVBfVElNRV9NQVNLLFxuK1x0XHRcdCAgICAgIFx1MDAyNmNoYW4tXHUwMDNlb3V0X3N0ZXBfdGltZV9tYXNrKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuIFx0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZGV2LVx1MDAzZW11bHRpb3BfbG9jayk7XG4gXG4gXHQvKiBSZWFkIERQTEwgY29uZmlndXJhdGlvbiBmcm9tIG1haWxib3ggKi9cbkBAIC0yMzQsNiArMjQwLDMwNyBAQCBjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICp6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsXG4gXHRyZXR1cm4gXHUwMDI2emxkZXYtXHUwMDNlY2hhbltpbmRleF07XG4gfVxuIFxuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCAtIHdhaXQgZm9yIFRvRCBzZW1hcGhvcmUgdG8gY2xlYXJcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqXG4rICogUG9sbHMgdGhlIFRvRCBjb250cm9sIHJlZ2lzdGVyIHVudGlsIHRoZSBzZW1hcGhvcmUgYml0IGlzIGNsZWFyZWQsXG4rICogaW5kaWNhdGluZyB0aGUgZGV2aWNlIGhhcyBjb21wbGV0ZWQgdGhlIHByZXZpb3VzIFRvRCBvcGVyYXRpb24uXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVCVVNZIGlmIHNlbWFwaG9yZSBub3QgY2xlYXJlZCwgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK3N0YXRpYyBpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKVxuK3tcbitcdHVuc2lnbmVkIGludCB0aW1lb3V0O1xuK1x0dTggdG9kX2N0cmw7XG4rXHRpbnQgcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfcmVhZF91OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLCBcdTAwMjZ0b2RfY3RybCk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHN3aXRjaCAoRklFTERfR0VUKFpMX0RQTExfVE9EX0NUUkxfQ01ELCB0b2RfY3RybCkpIHtcbitcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFo6XG4rXHRcdHRpbWVvdXQgPSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHRpbWVvdXQgPSBaTF9QT0xMX1RPRF9SRF9USU1FT1VUX1VTO1xuK1x0XHRicmVhaztcbitcdH1cbitcbitcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSxcbitcdFx0XHRcdCAgWkxfRFBMTF9UT0RfQ1RSTF9TRU0sIHRpbWVvdXQpO1xuK1xuK1x0cmV0dXJuIHJjID09IC1FVElNRURPVVQgPyAtRUJVU1kgOiByYztcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3RvZF9jdHJsIC0gaXNzdWUgVG9EIGNvbW1hbmRcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqIEBjbWQ6IFRvRCBjb21tYW5kIHRvIGV4ZWN1dGVcbisgKlxuKyAqIFdyaXRlcyB0aGUgc2VtYXBob3JlIGFuZCBjb21tYW5kIHRvIGRwbGxfdG9kX2N0cmwuIFRoZSBjYWxsZXIgbXVzdFxuKyAqIGVuc3VyZSB0aGUgZGV2aWNlIGlzIHJlYWR5IChzZW1hcGhvcmUgY2xlYXIpIGJlZm9yZSBjYWxsaW5nIGFuZFxuKyAqIG11c3Qgd2FpdCBmb3IgY29tcGxldGlvbiBpZiBuZWVkZWQuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK3N0YXRpYyBpbnQgemwzMDczeF9jaGFuX3RvZF9jdHJsKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCB1OCBjbWQpXG4re1xuK1x0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSxcbitcdFx0XHRcdFpMX0RQTExfVE9EX0NUUkxfU0VNIHwgY21kKTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3RvZF9yZWFkIC0gcmVhZCBUb0QgcmVnaXN0ZXJzIGFmdGVyIGlzc3VpbmcgYSBjb21tYW5kXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKiBAbmV4dF9oejogaWYgdHJ1ZSwgcmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIejsgb3RoZXJ3aXNlIHJlYWQgY3VycmVudFxuKyAqIEB0czogdGltZXNwZWMgdG8gc3RvcmUgdGhlIHJlc3VsdFxuKyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nXG4rICpcbisgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4raW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgIGJvb2wgbmV4dF9oeiwgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxuK1x0XHRcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpXG4re1xuK1x0dTMyIG5zZWM7XG4rXHR1NjQgc2VjO1xuK1x0dTggY21kO1xuK1x0aW50IHJjO1xuK1xuK1x0aWYgKG5leHRfaHopXG4rXHRcdGNtZCA9IFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaO1xuK1x0ZWxzZVxuK1x0XHRjbWQgPSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UO1xuK1xuK1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbitcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHB0cF9yZWFkX3N5c3RlbV9wcmV0cyhzdHMpO1xuK1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLCBjbWQpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXHRwdHBfcmVhZF9zeXN0ZW1fcG9zdHRzKHN0cyk7XG4rXG4rXHRyYyA9IHpsMzA3M3hfcmVhZF91NDgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9TRUMoY2gpLCBcdTAwMjZzZWMpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHQvKiBIVyBuYW5vc2Vjb25kcyBhcmUgYWx3YXlzIGluIFswLCBOU0VDX1BFUl9TRUMpIHJhbmdlICovXG4rXHRyYyA9IHpsMzA3M3hfcmVhZF91MzIoemxkZXYsIFpMX1JFR19EUExMX1RPRF9OUyhjaCksIFx1MDAyNm5zZWMpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHR0cy1cdTAwM2V0dl9zZWMgPSBzZWM7XG4rXHR0cy1cdTAwM2V0dl9uc2VjID0gbnNlYztcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlIC0gd3JpdGUgVG9EIHJlZ2lzdGVycyBhbmQgdHJpZ2dlciAxIEh6IHVwZGF0ZVxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICogQHRzOiB0aW1lIHRvIHNldFxuKyAqXG4rICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuK1x0XHRcdCAgIHN0cnVjdCB0aW1lc3BlYzY0IHRzKVxuK3tcbitcdGludCByYztcbitcbitcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfU0VDKGNoKSwgdHMudHZfc2VjKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgdHMudHZfbnNlYyk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLFxuK1x0XHRcdFx0ICAgIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaKTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3RvZF9hZGp1c3QgLSBhdG9taWMgVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIHdpdGggcm9sbG92ZXIgZ3VhcmRcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IHRvIGFwcGx5XG4rICpcbisgKiBSZWFkcyB0aGUgbmV4dC1IeiBUb0QgYW5kIGN1cnJlbnQgVG9ELCB0aGVuIGNoZWNrcyB3aGV0aGVyIGVub3VnaCB0aW1lXG4rICogcmVtYWlucyBiZWZvcmUgdGhlIG5leHQgMSBIeiByb2xsb3ZlciB0byBzYWZlbHkgY29tcGxldGUgdGhlIHdyaXRlLlxuKyAqIElmIGxlc3MgdGhhbiAyMCBtcyByZW1haW5zLCB3YWl0cyBmb3IgdGhlIHJvbGxvdmVyIGFuZCBpbmNyZW1lbnRzIHRoZVxuKyAqIG5leHQtSHogc2Vjb25kcyBieSBvbmUuIEFwcGxpZXMgQGRlbHRhIGFuZCB3cml0ZXMgdGhlIHJlc3VsdCBiYWNrLlxuKyAqXG4rICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK2ludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpXG4re1xuK1x0c3RhdGljIGNvbnN0IGxvbmcgdGhyZXNob2xkX25zID0gMjAgKiBOU0VDX1BFUl9NU0VDO1xuK1x0c3RydWN0IHRpbWVzcGVjNjQgdHNfbmV4dCwgdHNfY3VyLCBkaWZmO1xuK1x0aW50IHJjO1xuK1xuK1x0LyogUmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIeiB0aWNrICovXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRldiwgY2gsIHRydWUsIFx1MDAyNnRzX25leHQsIE5VTEwpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHQvKiBSZWFkIGN1cnJlbnQgVG9EIHRvIGRldGVybWluZSByZW1haW5pbmcgbWFyZ2luICovXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRldiwgY2gsIGZhbHNlLCBcdTAwMjZ0c19jdXIsIE5VTEwpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHQvKiBJZiB0b28gY2xvc2UgdG8gKG9yIHBhc3QpIHRoZSBuZXh0IHJvbGxvdmVyLCB3YWl0IGl0IG91dCAqL1xuK1x0ZGlmZiA9IHRpbWVzcGVjNjRfc3ViKHRzX25leHQsIHRzX2N1cik7XG4rXHRpZiAoZGlmZi50dl9zZWMgXHUwMDNjIDAgfHwgKCFkaWZmLnR2X3NlYyBcdTAwMjZcdTAwMjYgZGlmZi50dl9uc2VjIFx1MDAzYyB0aHJlc2hvbGRfbnMpKSB7XG4rXHRcdGlmICghZGlmZi50dl9zZWMgXHUwMDI2XHUwMDI2IGRpZmYudHZfbnNlYylcbitcdFx0XHRmc2xlZXAoKHVuc2lnbmVkIGxvbmcpZGlmZi50dl9uc2VjIC8gTlNFQ19QRVJfVVNFQyArIDEpO1xuK1x0XHR0c19uZXh0LnR2X3NlYysrO1xuK1x0fVxuK1xuK1x0LyogQXBwbHkgZGVsdGEgdG8gdGhlIG5leHQtSHogVG9EICovXG4rXHR0c19uZXh0ID0gdGltZXNwZWM2NF9hZGQodHNfbmV4dCwgZGVsdGEpO1xuK1x0aWYgKCF0aW1lc3BlYzY0X3ZhbGlkKFx1MDAyNnRzX25leHQpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdC8qIFdyaXRlIGFkanVzdGVkIFRvRCBiYWNrIGFuZCB3YWl0IGZvciBjb21wbGV0aW9uICovXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkZXYsIGNoLCB0c19uZXh0KTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCAtIHdyaXRlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgdG8gaGFyZHdhcmVcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqIEBvZmZzZXQ6IGZyZXF1ZW5jeSBvZmZzZXQgaW4gMl4tNDggc3RlcHNcbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4raW50IHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgb2Zmc2V0KVxuK3tcbitcdGludCByYztcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX0RGX09GRlNFVChjaCksIG9mZnNldCk7XG4rXHRpZiAoIXJjKVxuK1x0XHR6bGRldi1cdTAwM2VjaGFuW2NoXS5kZl9vZmZzZXQgPSBvZmZzZXQ7XG4rXG4rXHRyZXR1cm4gcmM7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl90aWVfd3JpdGUgLSBhZGp1c3QgRFBMTCBwaGFzZSB1c2luZyBUSUUgd3JpdGVcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqIEBkZWx0YV9uczogcGhhc2UgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcyAobXVzdCBiZSB3aXRoaW4gKy0xcylcbisgKlxuKyAqIENvbnZlcnRzIG5hbm9zZWNvbmRzIHRvIFRJRSB1bml0cyAoMC4wMSBwcykgYW5kIHdyaXRlcyBUSUUgZGF0YVxuKyAqIHRvIHRoZSBzcGVjaWZpZWQgY2hhbm5lbC5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4raW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucylcbit7XG4rXHRzNjQgdGllX2RhdGE7XG4rXHRpbnQgcmM7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkZXYtXHUwMDNldGllX2xvY2spO1xuK1xuK1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRJRSBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbitcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLFxuK1x0XHRcdFx0ICBaTF9EUExMX1RJRV9DVFJMX09QLFxuK1x0XHRcdFx0ICBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0LyogQ29udmVydCBucyB0byBUSUUgdW5pdHMgKDAuMDEgcHMgPSAxMF4tMTQgcykgKi9cbitcdHRpZV9kYXRhID0gZGVsdGFfbnMgKiAxMDAwMDBMTDtcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9EQVRBKGNoKSwgdGllX2RhdGEpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0ssIEJJVChjaCkpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsXG4rXHRcdFx0XHRaTF9EUExMX1RJRV9DVFJMX09QX1dSKTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAgLSBleGVjdXRlIG9uZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb25cbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqIEBvdXRfbWFzazogYml0bWFzayBvZiBvdXRwdXRzIHRvIHN0ZXBcbisgKiBAc3RlcF9jeWNsZXM6IHBoYXNlIHN0ZXAgaW4gc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzXG4rICogQHRvZF9zdGVwOiBhbHNvIHN0ZXAgdGhlIFRvRCBjb3VudGVyXG4rICpcbisgKiBBbGwgbWFza2VkIG91dHB1dHMgbXVzdCB1c2Ugc3ludGhlc2l6ZXJzIG9mIHRoZSBzYW1lIGZyZXF1ZW5jeSBzaW5jZVxuKyAqIHRoZSBzdGVwIHZhbHVlIGlzIGluIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcy5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4raW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuK1x0XHRcdCAgICB1MTYgb3V0X21hc2ssIHMzMiBzdGVwX2N5Y2xlcyxcbitcdFx0XHQgICAgYm9vbCB0b2Rfc3RlcClcbit7XG4rXHR1OCBjdHJsO1xuK1x0aW50IHJjO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZGV2LVx1MDAzZXBoYXNlX3N0ZXBfbG9jayk7XG4rXG4rXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgcGhhc2Ugc3RlcCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbitcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLFxuK1x0XHRcdFx0ICBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QLFxuK1x0XHRcdFx0ICBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VUyk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBLFxuK1x0XHRcdCAgICAgICBzdGVwX2N5Y2xlcyk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLLCBvdXRfbWFzayk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUiwgMSk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdGN0cmwgPSBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfRFBMTCwgY2gpIHxcbitcdCAgICAgICBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AsXG4rXHRcdFx0ICBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1dSSVRFKTtcbitcdGlmICh0b2Rfc3RlcClcbitcdFx0Y3RybCB8PSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX1RPRF9TVEVQO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLCBjdHJsKTtcbit9XG4rXG4gLyoqXG4gICogemwzMDczeF9jaGFuX3N0YXRlX3NldCAtIGNvbW1pdCBEUExMIGNoYW5uZWwgc3RhdGUgY2hhbmdlcyB0byBoYXJkd2FyZVxuICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhcbmluZGV4IGRjOWM2ZDk1YmRlZTc1Li45ZGM1YTNmMTk5MWYxMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXG5AQCAtNSwxMCArNSwxMiBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdGRkZWYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWU2NC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwicmVncy5oXCJcbiBcbitzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXA7XG4gc3RydWN0IHpsMzA3M3hfZGV2O1xuIFxuIC8qKlxuQEAgLTE2LDYgKzE4LDcgQEAgc3RydWN0IHpsMzA3M3hfZGV2O1xuICAqIEBjdHJsOiBEUExMIGNvbnRyb2wgcmVnaXN0ZXIgdmFsdWVcbiAgKiBAbW9kZV9yZWZzZWw6IG1vZGUgYW5kIHJlZmVyZW5jZSBzZWxlY3Rpb24gcmVnaXN0ZXIgdmFsdWVcbiAgKiBAcmVmX3ByaW86IHJlZmVyZW5jZSBwcmlvcml0eSByZWdpc3RlcnMgKDQgYml0cyBwZXIgcmVmLCBQL04gcGFja2VkKVxuKyAqIEBvdXRfc3RlcF90aW1lX21hc2s6IG91dHB1dCBzdGVwLXRpbWUgbWFza1xuICAqIEBtb25fc3RhdHVzOiBtb25pdG9yIHN0YXR1cyByZWdpc3RlciB2YWx1ZVxuICAqIEByZWZzZWxfc3RhdHVzOiByZWZlcmVuY2Ugc2VsZWN0aW9uIHN0YXR1cyByZWdpc3RlciB2YWx1ZVxuICAqIEBkZl9vZmZzZXQ6IGZyZXF1ZW5jeSBvZmZzZXQgdnMgdHJhY2tlZCByZWZlcmVuY2UgaW4gMl4tNDggc3RlcHNcbkBAIC0yNiw2ICsyOSw5IEBAIHN0cnVjdCB6bDMwNzN4X2NoYW4ge1xuIFx0XHR1OFx0bW9kZV9yZWZzZWw7XG4gXHRcdHU4XHRyZWZfcHJpb1taTDMwNzNYX05VTV9SRUZTIC8gMl07XG4gXHQpO1xuK1x0c3RydWN0X2dyb3VwKGludiwgLyogSW52YXJpYW50cyAqL1xuK1x0XHR1MTZcdG91dF9zdGVwX3RpbWVfbWFzaztcbitcdCk7XG4gXHRzdHJ1Y3RfZ3JvdXAoc3RhdCxcbiBcdFx0dThcdG1vbl9zdGF0dXM7XG4gXHRcdHU4XHRyZWZzZWxfc3RhdHVzO1xuQEAgLTQyLDYgKzQ4LDIwIEBAIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4LFxuIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfdXBkYXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTtcbiBpbnQgemwzMDczeF9jaGFuX25jb19tb2RlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7XG4gXG4raW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgIGJvb2wgbmV4dF9oeiwgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxuK1x0XHRcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpO1xuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuK1x0XHRcdCAgIHN0cnVjdCB0aW1lc3BlYzY0IHRzKTtcbitpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKTtcbitpbnQgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLCBib29sIHRvZF9zdGVwKTtcbitcbitpbnQgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBvZmZzZXQpO1xuK1xuK2ludCB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgZGVsdGFfbnMpO1xuK1xuIC8qKlxuICAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfZ2V0IC0gZ2V0IGNhY2hlZCBkZl9vZmZzZXQgdnMgdHJhY2tlZCByZWZlcmVuY2VcbiAgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG5AQCAtMjAwLDYgKzIyMCwyMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgemwzMDczeF9jaGFuX21vZGVfaXNfcmVmbG9jayhjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxuIFx0cmV0dXJuIHpsMzA3M3hfY2hhbl9tb2RlX2dldChjaGFuKSA9PSBaTF9EUExMX01PREVfUkVGU0VMX01PREVfUkVGTE9DSztcbiB9XG4gXG4rLyoqXG4rICogemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllIC0gY2hlY2sgaWYgY2hhbm5lbCBtb2RlIHN1cHBvcnRzIFRJRSB3cml0ZVxuKyAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbisgKlxuKyAqIFRJRSB3cml0ZSBpcyBzdXBwb3J0ZWQgaW4gQVVUTyBhbmQgUkVGTE9DSyBtb2RlcyByZWdhcmRsZXNzIG9mIGxvY2sgc3RhdGUuXG4rICpcbisgKiBSZXR1cm46IHRydWUgaWYgVElFIHdyaXRlIGlzIHN1cHBvcnRlZCwgZmFsc2Ugb3RoZXJ3aXNlXG4rICovXG4rc3RhdGljIGlubGluZSBib29sXG4remwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXG4re1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl9tb2RlX2lzX2F1dG8oY2hhbikgfHxcbitcdFx0emwzMDczeF9jaGFuX21vZGVfaXNfcmVmbG9jayhjaGFuKTtcbit9XG4rXG4gLyoqXG4gICogemwzMDczeF9jaGFuX2lzX2hvX3JlYWR5IC0gY2hlY2sgaWYgaG9sZG92ZXIgaXMgcmVhZHlcbiAgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG5AQCAtMjMzLDQgKzI2OCwxNyBAQCBzdGF0aWMgaW5saW5lIHU4IHpsMzA3M3hfY2hhbl9yZWZzZWxfcmVmX2dldChjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxuIFx0cmV0dXJuIEZJRUxEX0dFVChaTF9EUExMX1JFRlNFTF9TVEFUVVNfUkVGU0VMLCBjaGFuLVx1MDAzZXJlZnNlbF9zdGF0dXMpO1xuIH1cbiBcbisvKipcbisgKiB6bDMwNzN4X2NoYW5faXNfb3V0X3N0ZXBwZWQgLSBjaGVjayBpZiBvdXRwdXQgaXMgaW4gc3RlcC10aW1lIG1hc2tcbisgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG4rICogQG91dDogb3V0cHV0IGluZGV4XG4rICpcbisgKiBSZXR1cm46IHRydWUgaWYgb3V0cHV0IGlzIGFmZmVjdGVkIGJ5IHN0ZXAtdGltZSBvcGVyYXRpb25zXG4rICovXG4rc3RhdGljIGlubGluZSBib29sXG4remwzMDczeF9jaGFuX2lzX291dF9zdGVwcGVkKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4sIHU4IG91dClcbit7XG4rXHRyZXR1cm4gISEoY2hhbi1cdTAwM2VvdXRfc3RlcF90aW1lX21hc2sgXHUwMDI2IEJJVChvdXQpKTtcbit9XG4rXG4gI2VuZGlmIC8qIF9aTDMwNzNYX0NIQU5fSCAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1xuaW5kZXggN2Y1YWZhYWFlNjM0MmYuLmIyZjlmYzk3ZmQxYjY4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcbkBAIC0xMDMzLDYgKzEwMzMsMTQgQEAgaW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXG4gXHQgKiBhbmQvb3IgcG9sbHMgYXJlIHJlcXVpcmVkIHRvIGJlIGRvbmUgYXRvbWljYWxseS5cbiBcdCAqL1xuIFx0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2VtdWx0aW9wX2xvY2spO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIHJjLFxuK1x0XHRcdFx0ICAgICBcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxuXCIpO1xuK1x0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2VwaGFzZV9zdGVwX2xvY2spO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIHJjLFxuK1x0XHRcdFx0ICAgICBcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxuXCIpO1xuK1x0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2V0aWVfbG9jayk7XG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgcmMsXG4gXHRcdFx0XHQgICAgIFwiRmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXG5cIik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oXG5pbmRleCA3OGRjMjA4ZjNlZWEyYS4uMmRjODM2ZDBjOGY2YjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaFxuQEAgLTI2LDYgKzI2LDEwIEBAIHN0cnVjdCB6bDMwNzN4X2RwbGw7XG4gI2RlZmluZSBaTF9QT0xMX0hXUkVHX1RJTUVPVVRfVVNcdCg1MCAqIFVTRUNfUEVSX01TRUMpXG4gI2RlZmluZSBaTF9QT0xMX01CX1RJTUVPVVRfVVNcdFx0KDMwICogVVNFQ19QRVJfTVNFQylcbiAjZGVmaW5lIFpMX1BPTExfUEhBU0VfRVJSX1RJTUVPVVRfVVNcdCg1MCAqIFVTRUNfUEVSX01TRUMpXG4rI2RlZmluZSBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VU1x0KDMwMDAgKiBVU0VDX1BFUl9NU0VDKVxuKyNkZWZpbmUgWkxfUE9MTF9USUVfV1JfVElNRU9VVF9VU1x0KDEwMDAgKiBVU0VDX1BFUl9NU0VDKVxuKyNkZWZpbmUgWkxfUE9MTF9UT0RfUkRfVElNRU9VVF9VU1x0KDMwICogVVNFQ19QRVJfTVNFQylcbisjZGVmaW5lIFpMX1BPTExfVE9EX1dSX1RJTUVPVVRfVVNcdCgxMDAwICogVVNFQ19QRVJfTVNFQylcbiBcbiBlbnVtIHpsMzA3M3hfZmxhZ3Mge1xuIFx0WkwzMDczWF9GTEFHX1JFRl9QSEFTRV9DT01QXzMyX0JJVCxcbkBAIC01NSw2ICs1OSw4IEBAIHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mbyB7XG4gICogQHJlZ21hcDogcmVnbWFwIHRvIGFjY2VzcyBkZXZpY2UgcmVnaXN0ZXJzXG4gICogQGluZm86IGRldGVjdGVkIGNoaXAgaW5mb1xuICAqIEBtdWx0aW9wX2xvY2s6IHRvIHNlcmlhbGl6ZSBtdWx0aXBsZSByZWdpc3RlciBvcGVyYXRpb25zXG4rICogQHRpZV9sb2NrOiB0byBzZXJpYWxpemUgVElFIHdyaXRlIG9wZXJhdGlvbnNcbisgKiBAcGhhc2Vfc3RlcF9sb2NrOiB0byBzZXJpYWxpemUgb3V0cHV0IHBoYXNlIHN0ZXAgb3BlcmF0aW9uc1xuICAqIEByZWY6IGFycmF5IG9mIGlucHV0IHJlZmVyZW5jZXMnIGludmFyaWFudHNcbiAgKiBAb3V0OiBhcnJheSBvZiBvdXRzJyBpbnZhcmlhbnRzXG4gICogQHN5bnRoOiBhcnJheSBvZiBzeW50aHMnIGludmFyaWFudHNcbkBAIC03MSw2ICs3Nyw4IEBAIHN0cnVjdCB6bDMwNzN4X2RldiB7XG4gXHRzdHJ1Y3QgcmVnbWFwXHRcdFx0KnJlZ21hcDtcbiBcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mb1x0KmluZm87XG4gXHRzdHJ1Y3QgbXV0ZXhcdFx0XHRtdWx0aW9wX2xvY2s7XG4rXHRzdHJ1Y3QgbXV0ZXhcdFx0XHR0aWVfbG9jaztcbitcdHN0cnVjdCBtdXRleFx0XHRcdHBoYXNlX3N0ZXBfbG9jaztcbiBcbiBcdC8qIEludmFyaWFudHMgKi9cbiBcdHN0cnVjdCB6bDMwNzN4X3JlZlx0cmVmW1pMMzA3M1hfTlVNX1JFRlNdO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuY1xuaW5kZXggZDkxZjUyYjU4ZWFlMzQuLjc0MDAxZTZkNGEzMmY1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcbkBAIC0yLDYgKzIsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9idWcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbnRhaW5lcl9vZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2X3ByaW50ay5oXHUwMDNlXG5AQCAtMTQsNiArMTUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwcmludGYuaFx1MDAzZVxuIFxuQEAgLTQyLDYgKzQ0LDcgQEBcbiAgKiBAcGhhc2Vfb2Zmc2V0OiBsYXN0IHNhdmVkIHBpbiBwaGFzZSBvZmZzZXRcbiAgKiBAZnJlcV9vZmZzZXQ6IGxhc3Qgc2F2ZWQgZnJhY3Rpb25hbCBmcmVxdWVuY3kgb2Zmc2V0XG4gICogQG1lYXN1cmVkX2ZyZXE6IGxhc3Qgc2F2ZWQgbWVhc3VyZWQgZnJlcXVlbmN5XG4rICogQHBlcm91dF9pZHg6IFBUUCBwZXJvdXQgY2hhbm5lbCBpbmRleCwgb3IgLTEgaWYgbm90IHBlcm91dC1lbGlnaWJsZVxuICAqL1xuIHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluIHtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdGxpc3Q7XG5AQCAtNTksNiArNjIsNyBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiB7XG4gXHRzNjRcdFx0XHRwaGFzZV9vZmZzZXQ7XG4gXHRzNjRcdFx0XHRmcmVxX29mZnNldDtcbiBcdHUzMlx0XHRcdG1lYXN1cmVkX2ZyZXE7XG4rXHRzOFx0XHRcdHBlcm91dF9pZHg7XG4gfTtcbiBcbiAvKlxuQEAgLTkzNiwyMSArOTQwLDE3IEBAIHpsMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3BpbixcbiB9XG4gXG4gc3RhdGljIGludFxuLXpsMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3Bpbixcbi1cdFx0XHRcdCAgICAgIHZvaWQgKnBpbl9wcml2LFxuLVx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxuLVx0XHRcdFx0ICAgICAgdm9pZCAqZHBsbF9wcml2LCB1NjQgZnJlcXVlbmN5LFxuLVx0XHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK19femwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldChzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwsXG4rXHRcdFx0XHRcdHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4sXG4rXHRcdFx0XHRcdHU2NCBmcmVxdWVuY3kpXG4ge1xuLVx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gZHBsbF9wcml2O1xuIFx0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4tXHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluID0gcGluX3ByaXY7XG4gXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9zeW50aCAqc3ludGg7XG4gXHR1MzIgbmV3X2Rpdiwgc3ludGhfZnJlcTtcbiBcdHN0cnVjdCB6bDMwNzN4X291dCBvdXQ7XG4gXHR1OCBvdXRfaWQ7XG4gXG4tXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4gXG4gXHRvdXRfaWQgPSB6bDMwNzN4X291dHB1dF9waW5fb3V0X2dldChwaW4tXHUwMDNlaWQpO1xuIFx0b3V0ID0gKnpsMzA3M3hfb3V0X3N0YXRlX2dldCh6bGRldiwgb3V0X2lkKTtcbkBAIC0xMDExLDYgKzEwMTEsMjEgQEAgemwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxuIFx0cmV0dXJuIHpsMzA3M3hfb3V0X3N0YXRlX3NldCh6bGRldiwgb3V0X2lkLCBcdTAwMjZvdXQpO1xuIH1cbiBcbitzdGF0aWMgaW50XG4remwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxuK1x0XHRcdFx0ICAgICAgdm9pZCAqcGluX3ByaXYsXG4rXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXG4rXHRcdFx0XHQgICAgICB2b2lkICpkcGxsX3ByaXYsIHU2NCBmcmVxdWVuY3ksXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4re1xuK1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gZHBsbF9wcml2O1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbitcbitcdHJldHVybiBfX3psMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoemxkcGxsLCBwaW5fcHJpdixcbitcdFx0XHRcdFx0XHQgICAgICAgZnJlcXVlbmN5KTtcbit9XG4rXG4gc3RhdGljIGludFxuIHpsMzA3M3hfZHBsbF9vdXRwdXRfcGluX3BoYXNlX2FkanVzdF9nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3BpbixcbiBcdFx0XHRcdFx0IHZvaWQgKnBpbl9wcml2LFxuQEAgLTE2MDgsNiArMTYyMyw3IEBAIHpsMzA3M3hfZHBsbF9waW5fYWxsb2Moc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLCBlbnVtIGRwbGxfcGluX2RpcmVjdGlvbiBkaXIsXG4gXHRwaW4tXHUwMDNlZHBsbCA9IHpsZHBsbDtcbiBcdHBpbi1cdTAwM2VkaXIgPSBkaXI7XG4gXHRwaW4tXHUwMDNlaWQgPSBpZDtcbitcdHBpbi1cdTAwM2VwZXJvdXRfaWR4ID0gLTE7XG4gXG4gXHRyZXR1cm4gcGluO1xuIH1cbkBAIC0xNjI2LDYgKzE2NDIsNDQgQEAgemwzMDczeF9kcGxsX3Bpbl9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4pXG4gXHRrZnJlZShwaW4pO1xuIH1cbiBcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfcGluX2lzX3Blcm91dCAtIGNoZWNrIGlmIG91dHB1dCBwaW4gaXMgcGVyb3V0LWVsaWdpYmxlXG4rICogQHBpbjogRFBMTCBwaW4gdG8gY2hlY2tcbisgKiBAcHJvcHM6IHBpbiBwcm9wZXJ0aWVzIChhbHJlYWR5IGZldGNoZWQgYnkgY2FsbGVyKVxuKyAqXG4rICogQW4gb3V0cHV0IHBpbiBpcyBlbGlnaWJsZSBmb3IgUFRQIHBlcmlvZGljIG91dHB1dCBpZiBpdCBpcyBzaW5nbGUtZW5kZWRcbisgKiAobm90IGRpZmZlcmVudGlhbCkgYW5kIHN1cHBvcnRzIDEgSHogaW4gaXRzIGZyZXF1ZW5jeSBsaXN0LlxuKyAqXG4rICogUmV0dXJuOiB0cnVlIGlmIGVsaWdpYmxlLCBmYWxzZSBvdGhlcndpc2VcbisgKi9cbitzdGF0aWMgYm9vbFxuK3psMzA3M3hfZHBsbF9waW5faXNfcGVyb3V0KHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4sXG4rXHRcdFx0ICAgY29uc3Qgc3RydWN0IHpsMzA3M3hfcGluX3Byb3BzICpwcm9wcylcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBwaW4tXHUwMDNlZHBsbDtcbitcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XG4rXHR1OCBvdXRfaWQ7XG4rXHRpbnQgaTtcbitcbitcdGlmICh6bDMwNzN4X2RwbGxfaXNfaW5wdXRfcGluKHBpbikpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdG91dF9pZCA9IHpsMzA3M3hfb3V0cHV0X3Bpbl9vdXRfZ2V0KHBpbi1cdTAwM2VpZCk7XG4rXHRpZiAoemwzMDczeF9kZXZfb3V0X2lzX2RpZmYoemxkcGxsLVx1MDAzZWRldiwgb3V0X2lkKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkcGxsLVx1MDAzZWRldiwgemxkcGxsLVx1MDAzZWlkKTtcbitcdGlmICghemwzMDczeF9jaGFuX2lzX291dF9zdGVwcGVkKGNoYW4sIG91dF9pZCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHByb3BzLVx1MDAzZWRwbGxfcHJvcHMuZnJlcV9zdXBwb3J0ZWRfbnVtOyBpKyspIHtcbitcdFx0aWYgKHByb3BzLVx1MDAzZWRwbGxfcHJvcHMuZnJlcV9zdXBwb3J0ZWRbaV0ubWluID09IDEpXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIC8qKlxuICAqIHpsMzA3M3hfZHBsbF9waW5fcmVnaXN0ZXIgLSByZWdpc3RlciBEUExMIHBpblxuICAqIEBwaW46IHBvaW50ZXIgdG8gRFBMTCBwaW5cbkBAIC0xNjY3LDYgKzE3MjEsOCBAQCB6bDMwNzN4X2RwbGxfcGluX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4sIHUzMiBpbmRleClcbiBcdFx0aWYgKHBpbi1cdTAwM2VwcmlvID09IFpMX0RQTExfUkVGX1BSSU9fTk9ORSlcbiBcdFx0XHQvKiBDbGFtcCBwcmlvIHRvIG1heCB2YWx1ZSAqL1xuIFx0XHRcdHBpbi1cdTAwM2VwcmlvID0gWkxfRFBMTF9SRUZfUFJJT19NQVg7XG4rXHR9IGVsc2UgaWYgKHpsMzA3M3hfZHBsbF9waW5faXNfcGVyb3V0KHBpbiwgcHJvcHMpKSB7XG4rXHRcdHBpbi1cdTAwM2VwZXJvdXRfaWR4ID0gemxkcGxsLVx1MDAzZXB0cF9pbmZvLm5fcGVyX291dCsrO1xuIFx0fVxuIFxuIFx0LyogQ3JlYXRlIG9yIGdldCBleGlzdGluZyBEUExMIHBpbiAqL1xuQEAgLTE4OTcsNiArMTk1Myw4IEBAIHpsMzA3M3hfZHBsbF9waW5zX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiBcdHU4IGlkLCBpbmRleDtcbiBcdGludCByYztcbiBcbitcdHpsZHBsbC1cdTAwM2VwdHBfaW5mby5uX3Blcl9vdXQgPSAwO1xuK1xuIFx0LyogUHJvY2VzcyBpbnB1dCBwaW5zICovXG4gXHRmb3IgKGluZGV4ID0gMDsgaW5kZXggXHUwMDNjIFpMMzA3M1hfTlVNX1BJTlM7IGluZGV4KyspIHtcbiBcdFx0LyogRmlyc3QgaW5wdXQgcGlucyBhbmQgdGhlbiBvdXRwdXQgcGlucyAqL1xuQEAgLTIyODAsNDUgKzIzMzgsNDQ3IEBAIHpsMzA3M3hfZHBsbF9pbml0X2ZpbmVfcGhhc2VfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXG4gXHRyZXR1cm4gcmM7XG4gfVxuIFxuKy8qIE1heGltdW0gZnJlcXVlbmN5IGFkanVzdG1lbnQ6ICstMSUgb2Ygbm9taW5hbCBpbiBwcGIgKi9cbisjZGVmaW5lIFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESlx0MTAwMDAwMDBcbitcbiAvKipcbi0gKiB6bDMwNzN4X2RwbGxfYWxsb2MgLSBhbGxvY2F0ZSBEUExMIGRldmljZVxuLSAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuLSAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlclxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCAtIHJlYWQgY3VycmVudCB0aW1lIGZyb20gVG9EIGNvdW50ZXJzXG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4rICogQHRzOiB0aW1lc3BlYyB0byBzdG9yZSBjdXJyZW50IHRpbWVcbisgKiBAc3RzOiBvcHRpb25hbCBzeXN0ZW0gdGltZXN0YW1wIHBhaXIgZm9yIGNyb3NzLXRpbWVzdGFtcGluZ1xuICAqXG4tICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cylcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRwbGwtXHUwMDNlZGV2LCB6bGRwbGwtXHUwMDNlaWQsIGZhbHNlLCB0cywgc3RzKTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQgLSBzZXQgVG9EIGNvdW50ZXJzIHRvIGdpdmVuIHRpbWVcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbisgKiBAdHM6IHRpbWVzcGVjIHdpdGggdGltZSB0byBzZXRcbiAgKlxuLSAqIFJldHVybjogcG9pbnRlciB0byBEUExMIGRldmljZSBvbiBzdWNjZXNzLCBlcnJvciBwb2ludGVyIG9uIGVycm9yXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiAgKi9cbi1zdHJ1Y3QgemwzMDczeF9kcGxsICpcbi16bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXG4rXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpXG4ge1xuLVx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsO1xuK1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXG4rXHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuIFxuLVx0emxkcGxsID0ga3phbGxvY19vYmooKnpsZHBsbCk7XG4tXHRpZiAoIXpsZHBsbClcbi1cdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuIFxuLVx0emxkcGxsLVx1MDAzZWRldiA9IHpsZGV2O1xuLVx0emxkcGxsLVx1MDAzZWlkID0gY2g7XG4tXHRtdXRleF9pbml0KFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbi1cdElOSVRfTElTVF9IRUFEKFx1MDAyNnpsZHBsbC1cdTAwM2VwaW5zKTtcbitcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCwgKnRzKTtcbit9XG4gXG4tXHRyZXR1cm4gemxkcGxsO1xuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwIC0gYWRqdXN0IHN1Yi1zZWNvbmQgdGltZSB2aWEgcGhhc2Ugc3RlcFxuKyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbFxuKyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzIChtdXN0IGJlIHdpdGhpbiAoLU5TRUNfUEVSX1NFQyxcbisgKiAgICAgICAgIE5TRUNfUEVSX1NFQykpXG4rICpcbisgKiBVc2VzIHRoZSBvdXRwdXQgcGhhc2Ugc3RlcCBtZWNoYW5pc20gd2l0aCB0b2Rfc3RlcD0xIHRvIGFkanVzdCBib3RoXG4rICogdGhlIG91dHB1dCBjbG9jayBwaGFzZSBhbmQgdGhlIFRvRCBjb3VudGVyIHNpbXVsdGFuZW91c2x5LiBUaGlzIGtlZXBzXG4rICogb3V0cHV0cyBhbmQgVG9EIGNvaGVyZW50LiBPbmx5IHZhbGlkIGluIE5DTyBtb2RlLlxuKyAqXG4rICogT3V0cHV0cyBhcmUgZ3JvdXBlZCBieSBzeW50aGVzaXplciBzaW5jZSB0aGUgcGhhc2Ugc3RlcCB2YWx1ZSBpcyBpblxuKyAqIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcy4gVGhlIGZpcnN0IHN5bnRoIGdyb3VwIHdpdGggZW5hYmxlZCBvdXRwdXRzXG4rICogdXNlcyB0b2Rfc3RlcCB0byBhZGp1c3QgYm90aCBvdXRwdXRzIGFuZCB0aGUgVG9EIGNvdW50ZXIuIFJlbWFpbmluZ1xuKyAqIGdyb3VwcyBzdGVwIG91dHB1dHMgb25seS4gSWYgbm8gc3ludGggaGFzIGVuYWJsZWQgb3V0cHV0cywgdGhlIFRvRFxuKyAqIGNvdW50ZXIgaXMgc3RlcHBlZCBhbG9uZSB1c2luZyBhbiBlbXB0eSBvdXRwdXQgbWFzayAodGhlIEZXIHVzZXMgdGhlXG4rICogbG93ZXN0LUlEIHN5bnRoJ3MgcGVyaW9kIGZvciB0aGUgY29udmVyc2lvbikuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVPUE5PVFNVUFAgaWYgbm8gc3ludGhzIGF2YWlsYWJsZSwgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLFxuK1x0XHRcdFx0XHQgICAgICAgczY0IGRlbHRhKVxuK3tcbitcdHUxNiBzeW50aF9tYXNrW1pMMzA3M1hfTlVNX1NZTlRIU10gPSB7fTtcbitcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuK1x0Y29uc3Qgc3RydWN0IHpsMzA3M3hfc3ludGggKnN5bnRoO1xuK1x0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjtcbitcdHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW47XG4rXHR1MzIgZmlyc3Rfc3ludGhfZnJlcSA9IDA7XG4rXHRib29sIHRvZF9zdGVwcGVkID0gZmFsc2U7XG4rXHRzMzIgc3RlcF9jeWNsZXM7XG4rXHR1MzIgc3ludGhfZnJlcTtcbitcdGludCByYztcbitcdHU4IGk7XG4rXG4rXHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLVx1MDAzZWlkKTtcbitcbitcdC8qIEJ1aWxkIHBlci1zeW50aCBvdXRwdXQgbWFza3MgZnJvbSByZWdpc3RlcmVkIG91dHB1dCBwaW5zICovXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBpbiwgXHUwMDI2emxkcGxsLVx1MDAzZXBpbnMsIGxpc3QpIHtcbitcdFx0dTggb3V0X2lkLCBzeW50aF9pZDtcbitcbitcdFx0aWYgKHpsMzA3M3hfZHBsbF9pc19pbnB1dF9waW4ocGluKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0b3V0X2lkID0gemwzMDczeF9vdXRwdXRfcGluX291dF9nZXQocGluLVx1MDAzZWlkKTtcbitcbitcdFx0aWYgKCF6bDMwNzN4X2NoYW5faXNfb3V0X3N0ZXBwZWQoY2hhbiwgb3V0X2lkKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0c3ludGhfaWQgPSB6bDMwNzN4X2Rldl9vdXRfc3ludGhfZ2V0KHpsZGV2LCBvdXRfaWQpO1xuK1x0XHRpZiAoc3ludGhfaWQgXHUwMDNlPSBaTDMwNzNYX05VTV9TWU5USFMpIHtcbitcdFx0XHRkZXZfd2Fybih6bGRldi1cdTAwM2VkZXYsIFwiVW5leHBlY3RlZCBzeW50aCBpZCBmb3IgT1VUJXVcXG5cIixcbitcdFx0XHRcdCBvdXRfaWQpO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXHRcdHN5bnRoX21hc2tbc3ludGhfaWRdIHw9IEJJVChvdXRfaWQpO1xuK1x0fVxuK1xuK1x0LyogUHJvY2VzcyBlYWNoIHN5bnRoIGdyb3VwICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBaTDMwNzNYX05VTV9TWU5USFM7IGkrKykge1xuK1x0XHRzeW50aCA9IHpsMzA3M3hfc3ludGhfc3RhdGVfZ2V0KHpsZGV2LCBpKTtcbitcdFx0aWYgKCF6bDMwNzN4X3N5bnRoX2lzX2VuYWJsZWQoc3ludGgpIHx8XG4rXHRcdCAgICB6bDMwNzN4X3N5bnRoX2RwbGxfZ2V0KHN5bnRoKSAhPSB6bGRwbGwtXHUwMDNlaWQpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHN5bnRoX2ZyZXEgPSB6bDMwNzN4X3N5bnRoX2ZyZXFfZ2V0KHN5bnRoKTtcbitcbitcdFx0LyogUmVtZW1iZXIgbG93ZXN0LUlEIHN5bnRoIGZyZXEgZm9yIFRvRC1vbmx5IGZhbGxiYWNrICovXG4rXHRcdGlmICghZmlyc3Rfc3ludGhfZnJlcSlcbitcdFx0XHRmaXJzdF9zeW50aF9mcmVxID0gc3ludGhfZnJlcTtcbitcbitcdFx0aWYgKCFzeW50aF9tYXNrW2ldKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHQvKiBTYWZlIGZvciBzMzI6IG1heCBzeW50aCBmcmVxIGlzIDc1MCBNSHogKi9cbitcdFx0c3RlcF9jeWNsZXMgPSBkaXZfczY0KGRlbHRhICogc3ludGhfZnJlcSwgTlNFQ19QRVJfU0VDKTtcbitcbitcdFx0cmMgPSB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLFxuK1x0XHRcdFx0XHQgICAgIHN5bnRoX21hc2tbaV0sIHN0ZXBfY3ljbGVzLFxuK1x0XHRcdFx0XHQgICAgICF0b2Rfc3RlcHBlZCk7XG4rXHRcdGlmIChyYykge1xuK1x0XHRcdGlmICh0b2Rfc3RlcHBlZCkge1xuK1x0XHRcdFx0ZGV2X3dhcm4oemxkZXYtXHUwMDNlZGV2LFxuK1x0XHRcdFx0XHQgXCJQYXJ0aWFsIHBoYXNlIHN0ZXAgZmFpbHVyZVxcblwiKTtcbitcdFx0XHRcdHJldHVybiAwO1xuK1x0XHRcdH1cbitcdFx0XHRyZXR1cm4gcmM7XG4rXHRcdH1cbitcdFx0dG9kX3N0ZXBwZWQgPSB0cnVlO1xuK1x0fVxuK1xuK1x0aWYgKCFmaXJzdF9zeW50aF9mcmVxKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHQvKiBObyBlbmFibGVkIG91dHB1dHMgZm91bmQ7IHN0ZXAgVG9EIGNvdW50ZXIgb25seSB1c2luZyB0aGVcbitcdCAqIGxvd2VzdC1JRCBzeW50aCdzIHBlcmlvZCAoZW1wdHkgb3V0cHV0IG1hc2spLlxuK1x0ICovXG4rXHRpZiAoIXRvZF9zdGVwcGVkKSB7XG4rXHRcdHN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIGZpcnN0X3N5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7XG4rXHRcdHJldHVybiB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCAwLFxuK1x0XHRcdFx0XHQgICAgICAgc3RlcF9jeWNsZXMsIHRydWUpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIC8qKlxuLSAqIHpsMzA3M3hfZHBsbF9mcmVlIC0gZnJlZSBEUExMIGRldmljZVxuLSAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZVxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSAtIGFkanVzdCBQVFAgY2xvY2sgdGltZVxuKyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xuKyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzXG4gICpcbi0gKiBEZWFsbG9jYXRlcyBnaXZlbiBEUExMIGRldmljZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBieSBAemwzMDczeF9kcGxsX2FsbG9jLlxuKyAqIEluIE5DTyBtb2RlLCBsYXJnZSBkZWx0YXMgKFx1MDAzZT0gMSBzZWNvbmQpIGFyZSBzcGxpdCBpbnRvIGEgVG9EXG4rICogcmVhZC1tb2RpZnktd3JpdGUgZm9yIHRoZSBzZWNvbmRzIHBhcnQgYW5kIGFuIG91dHB1dCBwaGFzZSBzdGVwIGZvclxuKyAqIHRoZSBzdWItc2Vjb25kIHJlbWFpbmRlci4gU3ViLXNlY29uZCBkZWx0YXMgdXNlIHBoYXNlIHN0ZXAgZGlyZWN0bHksXG4rICogZmFsbGluZyBiYWNrIHRvIFRvRCByZWFkLW1vZGlmeS13cml0ZSBpZiBwaGFzZSBzdGVwIGlzIHVuYXZhaWxhYmxlLlxuKyAqIEluIEFVVE8vUkVGTE9DSyBtb2RlcywgbGFyZ2UgZGVsdGFzIGFyZSBzcGxpdCBpbnRvIFRvRFxuKyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciBzZWNvbmRzIGFuZCBUSUUgd3JpdGUgZm9yIHRoZSBzdWItc2Vjb25kXG4rICogcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgVElFIHdyaXRlIGRpcmVjdGx5LlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiAgKi9cbi12b2lkXG4temwzMDczeF9kcGxsX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczY0IGRlbHRhKVxuIHtcbi1cdFdBUk4oemxkcGxsLVx1MDAzZWRwbGxfZGV2LCBcIkRQTEwgZGV2aWNlIGlzIHN0aWxsIHJlZ2lzdGVyZWRcXG5cIik7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbitcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XG4rXHRib29sIHNlY19hZGp1c3RlZCA9IGZhbHNlO1xuK1x0c3RydWN0IHRpbWVzcGVjNjQgdHM7XG4rXHRpbnQgcmM7XG4gXG4tXHRtdXRleF9kZXN0cm95KFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbi1cdGtmcmVlKHpsZHBsbCk7XG4rXHRpZiAoIWRlbHRhKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXG4rXHQvKiBNb2RlcyB3aXRob3V0IHBoYXNlIHN0ZXAgb3IgVElFIHVzZSBwbGFpbiBUb0QgYWRqdXN0ICovXG4rXHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLVx1MDAzZWlkKTtcbitcdGlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pIFx1MDAyNlx1MDAyNlxuK1x0ICAgICF6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY2hhbikpXG4rXHRcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLFxuK1x0XHRcdFx0XHQgICAgICAgbnNfdG9fdGltZXNwZWM2NChkZWx0YSkpO1xuK1xuK1x0LyogU3BsaXQgb2ZmIHNlY29uZHMgdmlhIFRvRCByZWFkLW1vZGlmeS13cml0ZSBzbyB0aGUgc3ViLXNlY29uZFxuK1x0ICogcmVtYWluZGVyIGNhbiBiZSBhcHBsaWVkIHRocm91Z2ggdGhlIG91dHB1dC1jb2hlcmVudCBtZWNoYW5pc21cbitcdCAqIChwaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSkuXG4rXHQgKi9cbitcdGlmIChhYnMoZGVsdGEpIFx1MDAzZT0gTlNFQ19QRVJfU0VDKSB7XG4rXHRcdHMzMiByZW1haW5kZXI7XG4rXG4rXHRcdHRzLnR2X3NlYyA9IGRpdl9zNjRfcmVtKGRlbHRhLCBOU0VDX1BFUl9TRUMsIFx1MDAyNnJlbWFpbmRlcik7XG4rXHRcdHRzLnR2X25zZWMgPSAwO1xuK1x0XHRkZWx0YSA9IHJlbWFpbmRlcjtcbitcbitcdFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCB0cyk7XG4rXHRcdGlmIChyYylcbitcdFx0XHRyZXR1cm4gcmM7XG4rXG4rXHRcdHNlY19hZGp1c3RlZCA9IHRydWU7XG4rXG4rXHRcdC8qIE5vIHN1Yi1zZWNvbmQgcmVtYWluZGVyLCBkb25lICovXG4rXHRcdGlmICghZGVsdGEpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHQvKiBBcHBseSBzdWItc2Vjb25kIGRlbHRhIHZpYSBwaGFzZSBzdGVwIChOQ08pIG9yIFRJRSB3cml0ZSAqL1xuK1x0aWYgKHpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSkge1xuK1x0XHRyYyA9IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwKHpsZHBsbCwgZGVsdGEpO1xuK1x0XHRpZiAoIXJjKVxuK1x0XHRcdHJldHVybiAwO1xuK1x0fSBlbHNlIHtcbitcdFx0cmMgPSB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsIGRlbHRhKTtcbitcdFx0aWYgKCFyYylcbitcdFx0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdC8qIFBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlIGZhaWxlZCwgZmFsbCBiYWNrIHRvIFRvRCBhZGp1c3QgKi9cbitcdHJjID0gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCxcbitcdFx0XHRcdCAgICAgbnNfdG9fdGltZXNwZWM2NChkZWx0YSkpO1xuK1xuK1x0LyogSW4gdGhlIHVubGlrZWx5IGV2ZW50IHRoYXQgYm90aCBwaGFzZSBzdGVwL1RJRSB3cml0ZSBhbmQgZmFsbGJhY2tcbitcdCAqIFRvRCBhZGp1c3QgZmFpbCBhZnRlciBzZWNvbmRzIHdlcmUgYWxyZWFkeSBjb21taXR0ZWQsIHJldHVyblxuK1x0ICogc3VjY2VzcyB0byBwcmV2ZW50IHRoZSBQVFAgc2Vydm8gZnJvbSByZXRyeWluZyB0aGUgZnVsbCBkZWx0YSBhbmRcbitcdCAqIGFwcGx5aW5nIHNlY29uZHMgYWdhaW4uIFRoZSBzdWItc2Vjb25kIHJlc2lkdWFsIHdpbGwgc2VsZi1jb3JyZWN0XG4rXHQgKiBpbiB0aGUgbmV4dCBzZXJ2byBjeWNsZS5cbitcdCAqL1xuK1x0aWYgKHJjIFx1MDAyNlx1MDAyNiBzZWNfYWRqdXN0ZWQpIHtcbitcdFx0ZGV2X3dhcm4oemxkZXYtXHUwMDNlZGV2LFxuK1x0XHRcdCBcIlN1Yi1zZWNvbmQgYWRqdXN0bWVudCBmYWlsZWQgYWZ0ZXIgc2Vjb25kcyBhcHBsaWVkXFxuXCIpO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdHJldHVybiByYztcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lIC0gYWRqdXN0IFBUUCBjbG9jayBmcmVxdWVuY3lcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbisgKiBAc2NhbGVkX3BwbTogZnJlcXVlbmN5IGFkanVzdG1lbnQgaW4gc2NhbGVkIHBwbSAocHBtICogMl4xNilcbisgKlxuKyAqIE9ubHkgc3VwcG9ydGVkIGluIE5DTyBtb2RlLiBXcml0ZXMgdGhlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgcmVnaXN0ZXIuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVPUE5PVFNVUFAgaWYgbm90IGluIE5DTyBtb2RlLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4rc3RhdGljIGludFxuK3psMzA3M3hfZHBsbF9wdHBfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGxvbmcgc2NhbGVkX3BwbSlcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xuK1x0czY0IG9mZnNldDtcbitcbitcdC8qIENvbnZlcnQgc2NhbGVkX3BwbSB0byBkZl9vZmZzZXQgaW4gMl4tNDggc3RlcHM6XG4rXHQgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDJeMzIpIC8gMTBeNlxuK1x0ICpcbitcdCAqIFNpbXBsaWZ5IHRvIGF2b2lkIG92ZXJmbG93OlxuK1x0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjI2KSAvIDVeNlxuK1x0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiA2NzEwODg2NCkgLyAxNTYyNVxuK1x0ICovXG4rXHRvZmZzZXQgPSAtZGl2X3M2NCgoczY0KXNjYWxlZF9wcG0gKiA2NzEwODg2NExMLCAxNTYyNSk7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuK1x0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkcGxsLVx1MDAzZWRldiwgemxkcGxsLVx1MDAzZWlkKTtcbitcdGlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKVxuK1x0XHRyZXR1cm4gc2NhbGVkX3BwbSA/IC1FT1BOT1RTVVBQIDogMDtcbitcdGlmIChvZmZzZXQgPT0gY2hhbi1cdTAwM2VkZl9vZmZzZXQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCwgb2Zmc2V0KTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSAtIGFkanVzdCBQVFAgY2xvY2sgcGhhc2VcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbisgKiBAZGVsdGE6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHNcbisgKlxuKyAqIE9ubHkgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMuIFVzZXMgVElFIHdyaXRlIGZvclxuKyAqIG5hbm9zZWNvbmQgcmVzb2x1dGlvbiBwaGFzZSBhZGp1c3RtZW50LlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIG1vZGUgZG9lc24ndCBzdXBwb3J0IFRJRSwgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHMzMiBkZWx0YSlcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbitcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XG4rXG4rXHRpZiAoIWRlbHRhKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXG4rXHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLVx1MDAzZWlkKTtcbitcbitcdGlmICghemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRyZXR1cm4gemwzMDczeF9jaGFuX3RpZV93cml0ZSh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCBkZWx0YSk7XG4rfVxuK1xuK3N0YXRpYyBzMzJcbit6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyBfX2Fsd2F5c191bnVzZWQpXG4re1xuK1x0LyogSFcgbGltaXRzIFRJRSB3cml0ZSB0byArLTEgc2Vjb25kLiBSZXR1cm4gdGhlIGNvbnN0YW50IEhXXG4rXHQgKiBsaW1pdCBhbmQgbGV0IGFkanBoYXNlIGhhbmRsZSBtb2RlLXNwZWNpZmljIGNoZWNrcy5cbitcdCAqL1xuK1x0cmV0dXJuIE5TRUNfUEVSX1NFQyAtIDE7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfcGVyb3V0X2ZpbmRfcGluIC0gZmluZCBwaW4gYnkgcGVyb3V0IGNoYW5uZWwgaW5kZXhcbisgKiBAemxkcGxsOiBEUExMIGNoYW5uZWxcbisgKiBAaWR4OiBwZXJvdXQgY2hhbm5lbCBpbmRleCB0byBmaW5kXG4rICpcbisgKiBSZXR1cm46IHBvaW50ZXIgdG8gdGhlIHBpbiwgb3IgTlVMTCBpZiBub3QgZm91bmRcbisgKi9cbitzdGF0aWMgc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKlxuK3psMzA3M3hfZHBsbF9wdHBfcGVyb3V0X2ZpbmRfcGluKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCwgaW50IGlkeClcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluO1xuK1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeShwaW4sIFx1MDAyNnpsZHBsbC1cdTAwM2VwaW5zLCBsaXN0KSB7XG4rXHRcdGlmIChwaW4tXHUwMDNlcGVyb3V0X2lkeCA9PSBpZHgpXG4rXHRcdFx0cmV0dXJuIHBpbjtcbitcdH1cbitcbitcdHJldHVybiBOVUxMO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfcHRwX2VuYWJsZSAtIGVuYWJsZS9kaXNhYmxlIFBUUCBjbG9jayBmdW5jdGlvbnNcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbisgKiBAcnE6IHRoZSByZXF1ZXN0ZWQgY2xvY2sgZnVuY3Rpb24gYW5kIHBhcmFtZXRlcnNcbisgKiBAb246IHRydWUgdG8gZW5hYmxlLCBmYWxzZSB0byBkaXNhYmxlXG4rICpcbisgKiBIYW5kbGVzIFBUUF9DTEtfUkVRX1BFUk9VVCByZXF1ZXN0cy4gT25seSAxUFBTIChwZXJpb2QgPSAxcykgaXMgc3VwcG9ydGVkLlxuKyAqIE9uIGVuYWJsZSwgY29uZmlndXJlcyB0aGUgb3V0cHV0IGRpdmlkZXIgZm9yIDEgSHouIE9uIGRpc2FibGUsIGRvZXMgbm90aGluZ1xuKyAqIGFzIHRoZSBzaWduYWwgaXMgbm90IGRpc2FibGVkLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfZW5hYmxlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcbitcdFx0XHRcdCAgIHN0cnVjdCBwdHBfY2xvY2tfcmVxdWVzdCAqcnEsIGludCBvbilcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluO1xuK1x0dW5zaWduZWQgaW50IGlkeDtcbitcdGludCByYztcbitcbitcdGlmIChycS1cdTAwM2V0eXBlICE9IFBUUF9DTEtfUkVRX1BFUk9VVClcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0aWR4ID0gcnEtXHUwMDNlcGVyb3V0LmluZGV4O1xuK1x0aWYgKGlkeCBcdTAwM2U9IGluZm8tXHUwMDNlbl9wZXJfb3V0KVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdC8qIFRvZ2dsaW5nIG91dHB1dCBwaW5zIGNhbiBwcm9kdWNlIHJ1bnQgcHVsc2VzLCBzbyBkaXNhYmxlXG4rXHQgKiBpcyBhIG5vLW9wLlxuK1x0ICovXG4rXHRpZiAoIW9uKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdC8qIE9ubHkgYWNjZXB0IGV4YWN0bHkgMVBQUyAocGVyaW9kLnNlYyA9PSAxLCBuc2VjID09IDApICovXG4rXHRpZiAocnEtXHUwMDNlcGVyb3V0LnBlcmlvZC5zZWMgIT0gMSB8fCBycS1cdTAwM2VwZXJvdXQucGVyaW9kLm5zZWMgIT0gMClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbitcbitcdHBpbiA9IHpsMzA3M3hfZHBsbF9wdHBfcGVyb3V0X2ZpbmRfcGluKHpsZHBsbCwgaWR4KTtcbitcdGlmICghcGluKSB7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0LyogQWxyZWFkeSBhdCAxIEh6LCBub3RoaW5nIHRvIGRvICovXG4rXHRpZiAoemwzMDczeF9kZXZfb3V0cHV0X3Bpbl9mcmVxX2dldCh6bGRwbGwtXHUwMDNlZGV2LCBwaW4tXHUwMDNlaWQpID09IDEpIHtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRyYyA9IF9femwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldCh6bGRwbGwsIHBpbiwgMSk7XG4rXG4rXHRtdXRleF91bmxvY2soXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuK1x0aWYgKCFyYylcbitcdFx0ZHBsbF9waW5fY2hhbmdlX250ZihwaW4tXHUwMDNlZHBsbF9waW4pO1xuK1xuK1x0cmV0dXJuIHJjO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHB0cF9jbG9ja19pbmZvIHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mbyA9IHtcbitcdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuK1x0Lm1heF9hZGpcdD0gWkwzMDczWF9EUExMX1BUUF9NQVhfQURKLFxuK1x0LmdldHRpbWV4NjRcdD0gemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0LFxuK1x0LnNldHRpbWU2NFx0PSB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCxcbitcdC5hZGp0aW1lXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSxcbitcdC5hZGpmaW5lXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSxcbitcdC5hZGpwaGFzZVx0PSB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlLFxuK1x0LmdldG1heHBoYXNlXHQ9IHpsMzA3M3hfZHBsbF9wdHBfZ2V0bWF4cGhhc2UsXG4rXHQuZW5hYmxlXHRcdD0gemwzMDczeF9kcGxsX3B0cF9lbmFibGUsXG4rfTtcbitcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBhIERQTEwgY2hhbm5lbFxuKyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byByZWdpc3RlciBQVFAgY2xvY2sgZm9yXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4re1xuK1x0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4rXHRzdHJ1Y3QgcHRwX2Nsb2NrICpwdHBfY2xvY2s7XG4rXG4rXHRzbnByaW50Zih6bGRwbGwtXHUwMDNlcHRwX2luZm8ubmFtZSwgc2l6ZW9mKHpsZHBsbC1cdTAwM2VwdHBfaW5mby5uYW1lKSxcbitcdFx0IFwiemwzMDczeC1kcGxsJXVcIiwgemxkcGxsLVx1MDAzZWlkKTtcbitcbitcdHB0cF9jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcihcdTAwMjZ6bGRwbGwtXHUwMDNlcHRwX2luZm8sIHpsZGV2LVx1MDAzZWRldik7XG4rXHRpZiAoSVNfRVJSKHB0cF9jbG9jaykpIHtcbitcdFx0ZGV2X2Vycih6bGRldi1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgRFBMTCV1XFxuXCIsXG4rXHRcdFx0emxkcGxsLVx1MDAzZWlkKTtcbitcdFx0cmV0dXJuIFBUUl9FUlIocHRwX2Nsb2NrKTtcbitcdH1cbitcbitcdHpsZHBsbC1cdTAwM2VwdHBfY2xvY2sgPSBwdHBfY2xvY2s7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyIC0gdW5yZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsXG4rICogQHpsZHBsbDogRFBMTCBjaGFubmVsIHRvIHVucmVnaXN0ZXIgUFRQIGNsb2NrIGZvclxuKyAqL1xuK3N0YXRpYyB2b2lkIHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4re1xuK1x0aWYgKCFJU19FUlJfT1JfTlVMTCh6bGRwbGwtXHUwMDNlcHRwX2Nsb2NrKSkge1xuK1x0XHRwdHBfY2xvY2tfdW5yZWdpc3Rlcih6bGRwbGwtXHUwMDNlcHRwX2Nsb2NrKTtcbitcdFx0emxkcGxsLVx1MDAzZXB0cF9jbG9jayA9IE5VTEw7XG4rXHR9XG4gfVxuIFxuIC8qKlxuQEAgLTI0MDMsNiArMjg2Myw0OCBAQCB6bDMwNzN4X2RwbGxfcmVmX3N5bmNfcGFpcnNfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9hbGxvYyAtIGFsbG9jYXRlIERQTEwgZGV2aWNlXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyXG4rICpcbisgKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuXG4rICpcbisgKiBSZXR1cm46IHBvaW50ZXIgdG8gRFBMTCBkZXZpY2Ugb24gc3VjY2VzcywgZXJyb3IgcG9pbnRlciBvbiBlcnJvclxuKyAqL1xuK3N0cnVjdCB6bDMwNzN4X2RwbGwgKlxuK3psMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7XG4rXG4rXHR6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTtcbitcdGlmICghemxkcGxsKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcbitcdHpsZHBsbC1cdTAwM2VkZXYgPSB6bGRldjtcbitcdHpsZHBsbC1cdTAwM2VpZCA9IGNoO1xuK1x0emxkcGxsLVx1MDAzZXB0cF9pbmZvID0gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvO1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXHRJTklUX0xJU1RfSEVBRChcdTAwMjZ6bGRwbGwtXHUwMDNlcGlucyk7XG4rXG4rXHRyZXR1cm4gemxkcGxsO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfZnJlZSAtIGZyZWUgRFBMTCBkZXZpY2VcbisgKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmVcbisgKlxuKyAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuXG4rICovXG4rdm9pZFxuK3psMzA3M3hfZHBsbF9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbit7XG4rXHRXQVJOKHpsZHBsbC1cdTAwM2VkcGxsX2RldiwgXCJEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXFxuXCIpO1xuK1xuK1x0bXV0ZXhfZGVzdHJveShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXHRrZnJlZSh6bGRwbGwpO1xuK31cbitcbiAvKipcbiAgKiB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIgLSByZWdpc3RlciBEUExMIGRldmljZSBhbmQgYWxsIGl0cyBwaW5zXG4gICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXG5AQCAtMjQzMyw2ICsyOTM1LDEzIEBAIHpsMzA3M3hfZHBsbF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4gXHRcdHJldHVybiByYztcbiBcdH1cbiBcbitcdHJjID0gemwzMDczeF9kcGxsX3B0cF9yZWdpc3Rlcih6bGRwbGwpO1xuK1x0aWYgKHJjKSB7XG4rXHRcdHpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTtcbitcdFx0emwzMDczeF9kcGxsX2RldmljZV91bnJlZ2lzdGVyKHpsZHBsbCk7XG4rXHRcdHJldHVybiByYztcbitcdH1cbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0yNDQ2LDcgKzI5NTUsNyBAQCB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIHZvaWRcbiB6bDMwNzN4X2RwbGxfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4ge1xuLVx0LyogVW5yZWdpc3RlciBhbGwgcGlucyBhbmQgZHBsbCAqL1xuK1x0emwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHpsZHBsbCk7XG4gXHR6bDMwNzN4X2RwbGxfcGluc191bnJlZ2lzdGVyKHpsZHBsbCk7XG4gXHR6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXG5pbmRleCBmYWViYzQwMmJhMWI3MC4uOWI1ZjcyYzMzODQ5Y2UgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmhcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaFxuQEAgLTUsNiArNSw4IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZHBsbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiY29yZS5oXCJcbiBcbkBAIC0yMiw2ICsyNCw4IEBAXG4gICogQHR5cGU6IERQTEwgdHlwZSAoUFBTIG9yIEVFQylcbiAgKiBAbG9ja19zdGF0dXM6IGxhc3Qgc2F2ZWQgRFBMTCBsb2NrIHN0YXR1c1xuICAqIEBwaW5zOiBsaXN0IG9mIHBpbnNcbisgKiBAcHRwX2luZm86IFBUUCBjbG9jayBpbmZvXG4rICogQHB0cF9jbG9jazogcmVnaXN0ZXJlZCBQVFAgY2xvY2sgKG9yIE5VTEwpXG4gICovXG4gc3RydWN0IHpsMzA3M3hfZHBsbCB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRcdGxpc3Q7XG5AQCAtMzYsNiArNDAsOCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsIHtcbiBcdGVudW0gZHBsbF90eXBlXHRcdFx0dHlwZTtcbiBcdGVudW0gZHBsbF9sb2NrX3N0YXR1c1x0XHRsb2NrX3N0YXR1cztcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdFx0cGlucztcbitcdHN0cnVjdCBwdHBfY2xvY2tfaW5mb1x0XHRwdHBfaW5mbztcbitcdHN0cnVjdCBwdHBfY2xvY2tcdFx0KnB0cF9jbG9jaztcbiB9O1xuIFxuIHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXG5pbmRleCBiNzBlYWQ3ZDQ0OTViMi4uNDQ3NzU3ZTk5ODQ1ZDggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaFxuQEAgLTE3OSw2ICsxNzksMjAgQEBcbiAjZGVmaW5lIFpMX0RQTExfREZfUkVBRF9DTURcdFx0XHRHRU5NQVNLKDIsIDApXG4gI2RlZmluZSBaTF9EUExMX0RGX1JFQURfQ01EX0FDQ19JXHRcdDRcbiBcbisjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9DVFJMXHRcdFx0WkxfUkVHKDUsIDB4MzAsIDEpXG4rI2RlZmluZSBaTF9EUExMX1RJRV9DVFJMX09QXHRcdFx0R0VOTUFTSygyLCAwKVxuKyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUF9XUlx0XHRcdDRcbitcbisjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0tcdFx0WkxfUkVHKDUsIDB4MzEsIDEpXG4rXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfQ1RSTChfaWR4KVx0XHRcdFx0XHRcXFxuK1x0WkxfUkVHX0lEWChfaWR4LCA1LCAweDM4LCAxLCA4LCAxKVxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9TRU1cdFx0XHRCSVQoNClcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EXHRcdFx0R0VOTUFTSygzLCAwKVxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFpcdDFcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX0NVUlJFTlRcdDhcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaXHQ5XG4rXG4gI2RlZmluZSBaTF9SRUdfRFBMTF9NRUFTX0NUUkxcdFx0XHRaTF9SRUcoNSwgMHg1MCwgMSlcbiAjZGVmaW5lIFpMX0RQTExfTUVBU19DVFJMX0VOXHRcdFx0QklUKDApXG4gI2RlZmluZSBaTF9EUExMX01FQVNfQ1RSTF9BVkdfRkFDVE9SXHRcdEdFTk1BU0soNywgNClcbkBAIC0xOTMsNiArMjA3LDkgQEBcbiBcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAqIFJlZ2lzdGVyIFBhZ2VzIDYtNywgRFBMTCBEYXRhXG4rICpcbisgKiBQZXItY2hhbm5lbCByZWdpc3RlcnMgd2l0aCBzdHJpZGUgMHgyMC4gQ2hhbm5lbHMgMC0zIHJlc2lkZSBvbiBwYWdlIDYsXG4rICogY2hhbm5lbCA0IG9uIHBhZ2UgNy5cbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiBcbiAjZGVmaW5lIFpMX1JFR19EUExMX0RGX09GRlNFVF8wMyhfaWR4KVx0XHRcdFx0XHRcXFxuQEAgLTIwMiw2ICsyMTksMjQgQEBcbiBcdCgoX2lkeCkgXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfNClcbiAjZGVmaW5lIFpMX0RQTExfREZfT0ZGU0VUX1VOS05PV05cdFM2NF9NSU5cbiBcbisjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG4rXHRaTF9SRUdfSURYKF9pZHgsIDYsIDB4MEMsIDYsIDQsIDB4MjApXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQV80XHRcdFx0WkxfUkVHKDcsIDB4MEMsIDYpXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQShfaWR4KVx0XHRcdFx0XHRcXFxuK1x0KChfaWR4KSBcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RJRV9EQVRBXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVElFX0RBVEFfNClcbitcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUNfMDMoX2lkeClcdFx0XHRcdFx0XFxcbitcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgxMiwgNiwgNCwgMHgyMClcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUNfNFx0XHRcdFpMX1JFRyg3LCAweDEyLCA2KVxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQyhfaWR4KVx0XHRcdFx0XHRcXFxuK1x0KChfaWR4KSBcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RPRF9TRUNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfU0VDXzQpXG4rXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlNfMDMoX2lkeClcdFx0XHRcdFx0XFxcbitcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgxOCwgNCwgNCwgMHgyMClcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU180XHRcdFx0WkxfUkVHKDcsIDB4MTgsIDQpXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlMoX2lkeClcdFx0XHRcdFx0XFxcbitcdCgoX2lkeCkgXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9UT0RfTlNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfTlNfNClcbitcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgKiBSZWdpc3RlciBQYWdlIDksIFN5bnRoIGFuZCBPdXRwdXRcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5AQCAtMjIxLDYgKzI1Niw4IEBAXG4gI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9FTlx0XHRcdEJJVCgwKVxuICNkZWZpbmUgWkxfT1VUUFVUX0NUUkxfU1lOVEhfU0VMXHRcdEdFTk1BU0soNiwgNClcbiBcbisjZGVmaW5lIFpMX1JFR19PVVRQVVRfU1RFUF9USU1FX01BU0tcdFx0WkxfUkVHKDksIDB4MzYsIDIpXG4rXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgKiBSZWdpc3RlciBQYWdlIDEwLCBSZWYgTWFpbGJveFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuQEAgLTMxNiw2ICszNTMsMjUgQEBcbiAjZGVmaW5lIFpMX1JFR19PVVRQVVRfRVNZTkNfV0lEVEhcdFx0WkxfUkVHKDE0LCAweDE4LCA0KVxuICNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9DT01QXHRcdFpMX1JFRygxNCwgMHgyMCwgNClcbiBcbisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbisgKiBSZWdpc3RlciBQYWdlIDksIE91dHB1dCBQaGFzZSBTdGVwXG4rICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuK1xuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxcdFx0WkxfUkVHKDksIDB4MzgsIDEpXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX0RQTExcdFx0R0VOTUFTSyg2LCA0KVxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9UT0RfU1RFUFx0QklUKDMpXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QXHRcdEdFTk1BU0soMSwgMClcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfTk9ORVx0MFxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9SRVNFVFx0MVxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9SRUFEXHQyXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1dSSVRFXHQzXG4rXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTlVNQkVSXHRcdFpMX1JFRyg5LCAweDM5LCAxKVxuK1xuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX01BU0tcdFx0WkxfUkVHKDksIDB4M2EsIDIpXG4rXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfREFUQVx0XHRaTF9SRUcoOSwgMHgzYywgNClcbitcbiAvKlxuICAqIFJlZ2lzdGVyIFBhZ2UgMjU1IC0gSFcgcmVnaXN0ZXJzIGFjY2Vzc1xuICAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTE6MTI6NDcuMzM3MzUyNjc3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTExNTYxNzg2MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQVFAgQ2xvY2sgUGF0Y2ggZm9yIHRoZSBBenVyaXRlIERQTEwgRHJpdmVyICh6bDMwNzN4KSoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggYWRkaW5nIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciwgYGRyaXZlcnMvZHBsbC96bDMwNzN4L2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGlmIGl0J3MgcmVhY2hhYmxlIGFuZCBpZGVudGlmeSB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZnVuY3Rpb25zIHRvIHRhcmdldC5cblxuRmlyc3QsIEkgc2VlIHRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYEtjb25maWdgIGZpbGUsIG1ha2luZyB0aGUgZHJpdmVyIGRlcGVuZCBvbiBgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxgLiBUaGF0IG1lYW5zIGBQVFBfMTU4OF9DTE9DS2AgaXMgbm93IGNydWNpYWwsIGFsb25nIHdpdGggdGhlIHN0YW5kYXJkIGBaTDMwNzNYYCwgYFpMMzA3M1hfSTJDYCwgYW5kIGBaTDMwNzNYX1NQSWAgY29uZmlndXJhdGlvbnMuIFNvLCB0aGUgYmFzZSByZXF1aXJlbWVudHMgYXJlIGBaTDMwNzNYYCwgYW5kIG9uZSBvZiB0aGUgY29tbXVuaWNhdGlvbiBwcm90b2NvbHMgKGBaTDMwNzNYX0kyQ2Agb3IgYFpMMzA3M1hfU1BJYCksIGFuZCBub3cgdGhlIGBQVFBfMTU4OF9DTE9DS2AgY29uZmlnLlxuXG5Ob3csIGxldCdzIGRyaWxsIGRvd24gaW50byB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIEkgc2hvdWxkIGJlIGZ1enppbmcuIExvb2tzIGxpa2UgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIGZ1bmN0aW9ucyBhZGRlZCBmb3IgcmVhZC93cml0ZSBUaW1lIG9mIERheSAoVG9EKSwgcGhhc2UgYWRqdXN0bWVudCwgZnJlcXVlbmN5IGFkanVzdG1lbnQsIGFuZCBQVFAgY2xvY2sgcmVnaXN0cmF0aW9uLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCB0aGVzZTogYHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NGAsIGB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NGAsIGB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVgLCBgemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lYCwgYHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2VgLCBgemwzMDczeF9kcGxsX3B0cF9lbmFibGVgLCBgemwzMDczeF9jaGFuX3RvZF9yZWFkYCwgYHpsMzA3M3hfY2hhbl90b2Rfd3JpdGVgLCBgemwzMDczeF9jaGFuX3RvZF9hZGp1c3RgLCBgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXBgLCBhbmQgYHpsMzA3M3hfY2hhbl90aWVfd3JpdGVgLiBUaGVzZSBhcmUgbXkgaW5pdGlhbCB0YXJnZXRzLlxuXG5OZXh0LCBob3cgZG8gSSBnZXQgdG8gdGhlIGRyaXZlcj8gSXQncyBhbiBJMkMvU1BJIGRyaXZlciwgc28gaXQgY2FuIGJlIHJlYWNoZWQgdGhyb3VnaCB0aGUgSTJDL1NQSSBzdWJzeXN0ZW1zLiBJIGNvdWxkIGhpdCBpdCBmcm9tIHVzZXJzcGFjZSB2aWEgYC9kZXYvaTJjLWRldmAgb3IgYC9kZXYvc3BpZGV2YCwgcG90ZW50aWFsbHkgdXNpbmcgZGV2aWNlIHRyZWUgb3ZlcmxheXMsIG9yLCBpZiBTeXprYWxsZXIgc3VwcG9ydHMgaXQsIGl0IGNvdWxkIGluamVjdCBJMkMvU1BJIGRldmljZXMuIEJlY2F1c2UgaXQgcmVnaXN0ZXJzIGEgUFRQIGNsb2NrLCB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBpcyBnb2luZyB0byBiZSB0aGUgUFRQIGlvY3RscyB0aHJvdWdoIGAvZGV2L3B0cFhgLiBUaGFua2Z1bGx5LCBTeXprYWxsZXIgc3VwcG9ydHMgZnV6emluZyBQVFAgY2xvY2tzLiBTbyB0aGF0J3MgdGhlIHBhdGguXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ2xsIHF1aWNrbHkgdmVyaWZ5IHRob3NlIGNvbmZpZyBuYW1lcyBhZ2FpbjogYFpMMzA3M1hgLCBgWkwzMDczWF9JMkNgLCBgWkwzMDczWF9TUElgLCBhbmQgYFBUUF8xNTg4X0NMT0NLYC5cblxuQmVmb3JlIEkgY2FsbCB0aGUgYHNldC1yZXN1bHRzYCB0b29sLCBsZXQgbWUganVzdCBxdWlja2x5IHJ1biB0aHJvdWdoIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gYERQTExgIGlzIHNlbGVjdGVkLCBgTkVUX0RFVkxJTktgIGlzIHNlbGVjdGVkLCBhbmQgYFJFR01BUGAgaXMgc2VsZWN0ZWQuIE9rYXksIGxvb2tzIGdvb2QuIFRpbWUgdG8gc2V0IHRob3NlIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTQxLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTE6MTI6NTguNDkzNTM0NjUzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzUwNjczOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWkwzMDczWFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctMi1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnOjM6Y29uZmlnIFpMMzA3M1hcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTQtXFx0dHJpc3RhdGUgXFxcIk1pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXNcXFwiIGlmIENPTVBJTEVfVEVTVFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZy0xNi1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnOjE3OmNvbmZpZyBaTDMwNzNYX0kyQ1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctMTgtXFx0dHJpc3RhdGUgXFxcIkkyQyBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcXFwiXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTI4LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWc6Mjk6Y29uZmlnIFpMMzA3M1hfU1BJXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZy0zMC1cXHR0cmlzdGF0ZSBcXFwiU1BJIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTE6MTI6NTguNjA3MDUwNDMyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA3NDg1NTk4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFBUUCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbnM6IGBaTDMwNzNYYCwgYFpMMzA3M1hfSTJDYCwgYW5kIGBaTDMwNzNYX1NQSWAuIFNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmTigJRkaWZmZXJlbnQgY29tbXVuaWNhdGlvbiBpbnRlcmZhY2VzIGZvciB0aGUgc2FtZSBjb3JlIGNoaXAuIEFuZCwgYXMgZXhwZWN0ZWQsIHdlIG5lZWQgYFBUUF8xNTg4X0NMT0NLYCBmb3IgUHJlY2lzaW9uIFRpbWUgUHJvdG9jb2wgc3VwcG9ydC4gVGhpcyBhbGwgbWFrZXMgc2Vuc2UsIGFzIHRoZSBaTDMwNzNYIGlzIGEgY29tbW9uIFBUUCBjbG9jayBjaGlwLlxuXG5Ob3csIGxldCBtZSBxdWlja2x5IHJldmlldyB0aGUga2V5IGZ1bmN0aW9uIGNhbGxzIEknbSBsaWtlbHkgdG8gZW5jb3VudGVyIHJlbGF0ZWQgdG8gdGhlIGBaTDMwNzNYYCBhbmQgaXRzIFBUUCBjYXBhYmlsaXRpZXMuIEknbSBmb2N1c2luZyBvbiB0aG9zZSBzcGVjaWZpYyBgemwzMDczeF9kcGxsX3B0cF8qYCBjYWxscyDigJMgdGhhdCBnaXZlcyBtZSBhIGdyZWF0IG1lbnRhbCBtYXAgb2YgdGhlIGNvcmUgZnVuY3Rpb25zLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGZ1bmN0aW9ucyByZWxhdGVkIHRvIGdldHRpbmcgYW5kIHNldHRpbmcgdGltZSwgYWRqdXN0aW5nLCBlbmFibGluZywgYW5kIHJlYWRpbmcgYW5kIHdyaXRpbmcgdG8gVE9EIChUaW1lIG9mIERheSkuIFRoZSBhZGp1c3RtZW50IGZ1bmN0aW9ucyBhbmQgcGhhc2Ugc3RlcHBpbmcgYXJlIGtleS4gSSBhbHNvIHNlZSBhIGZ1bmN0aW9uIHRoYXQgaGFzIHRpZSwgSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB3aGF0J3MgaW52b2x2ZWQgd2l0aCB0aGF0LlxuXG5BbHJpZ2h0LCBJIHNob3VsZCBjaGVjayB3aGV0aGVyIGBQVFBfMTU4OF9DTE9DS2AgaXMgc2V0IGFzIEkgbmVlZCB0byBlbmFibGUgdGhlIFBUUCBmZWF0dXJlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE5NzAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTE6MTM6MDQuNjgxOTEwMDY2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NDMwNDgxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUFRQXzE1ODhfQ0xPQ0tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9wdHAvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3B0cC9LY29uZmlnPTY9bWVudSBcXFwiUFRQIGNsb2NrIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9wdHAvS2NvbmZpZy03LVxcbmRyaXZlcnMvcHRwL0tjb25maWc6ODpjb25maWcgUFRQXzE1ODhfQ0xPQ0tcXG5kcml2ZXJzL3B0cC9LY29uZmlnLTktXFx0dHJpc3RhdGUgXFxcIlBUUCBjbG9jayBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9wdHAvS2NvbmZpZy0yOS1cXG5kcml2ZXJzL3B0cC9LY29uZmlnOjMwOmNvbmZpZyBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbmRyaXZlcnMvcHRwL0tjb25maWctMzEtXFx0dHJpc3RhdGVcXG4tLVxcbmRyaXZlcnMvcHRwL0tjb25maWctNDEtXFxuZHJpdmVycy9wdHAvS2NvbmZpZzo0Mjpjb25maWcgUFRQXzE1ODhfQ0xPQ0tfRFRFXFxuZHJpdmVycy9wdHAvS2NvbmZpZy00My1cXHR0cmlzdGF0ZSBcXFwiQnJvYWRjb20gRFRFIGFzIFBUUCBjbG9ja1xcXCJcXG4tLVxcbmRyaXZlcnMvcHRwL0tjb25maWctNTctXFxuZHJpdmVycy9wdHAvS2NvbmZpZzo1ODpjb25maWcgUFRQXzE1ODhfQ0xPQ0tfUU9SSVFcXG5kcml2ZXJzL3B0cC9LY29uZmlnLTU5LVxcdHRyaXN0YXRlIFxcXCJGcmVlc2NhbGUgUW9ySVEgMTU4OCB0aW1lciBhcyBQVFAgY2xvY2tcXFwiXFxuLS1cXG5kcml2ZXJzL3B0cC9LY29uZmlnPTc1PWNvbmZpZyBEUDgzNjQwX1BIWVxcbi0tXFxuZHJpdmVycy9wdHAvS2NvbmZpZy05MS1cXG5kcml2ZXJzL3B0cC9LY29uZmlnOjkyOmNvbmZpZyBQVFBfMTU4OF9DTE9DS19JTkVTXFxuZHJpdmVycy9wdHAvS2NvbmZpZy05My1cXHR0cmlzdGF0ZSBcXFwiWkhBVyBJbkVTIFBUUCB0aW1lIHN0YW1waW5nIElQIGNvcmVcXFwiXFxuLS1cXG5kcml2ZXJzL3B0cC9LY29uZmlnLTEwMi1cXG5kcml2ZXJzL3B0cC9LY29uZmlnOjEwMzpjb25maWcgUFRQXzE1ODhfQ0xPQ0tfUENIXFxuZHJpdmVycy9wdHAvS2NvbmZpZy0xMDQtXFx0dHJpc3RhdGUgXFxcIkludGVsIFBDSCBFRzIwVCBhcyBQVFAgY2xvY2tcXFwiXFxuLS1cXG5kcml2ZXJzL3B0cC9LY29uZmlnLTEyMS1cXG5kcml2ZXJzL3B0cC9LY29uZmlnOjEyMjpjb25maWcgUFRQXzE1ODhfQ0xPQ0tfS1ZNXFxuZHJpdmVycy9wdHAvS2NvbmZpZy0xMjMtXFx0dHJpc3RhdGUgXFxcIktWTSB2aXJ0dWFsIFBUUCBjbG9ja1xcXCJcXG4tLVxcbmRyaXZlcnMvcHRwL0tjb25maWctMTMzLVxcbmRyaXZlcnMvcHRwL0tjb25maWc6MTM0OmNvbmZpZyBQVFBfMTU4OF9DTE9DS19WTUNMT0NLXFxuZHJpdmVycy9wdHAvS2NvbmZpZy0xMzUtXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgbWFjaGluZSBQVFAgY2xvY2tcXFwiXFxuLS1cXG5kcml2ZXJzL3B0cC9LY29uZmlnLTE1MC1cXG5kcml2ZXJzL3B0cC9LY29uZmlnOjE1MTpjb25maWcgUFRQXzE1ODhfQ0xPQ0tfSURUODJQMzNcXG5kcml2ZXJzL3B0cC9LY29uZmlnLTE1Mi1cXHR0cmlzdGF0ZSBcXFwiSURUIDgyUDMzeHh4IFBUUCBjbG9ja1xcXCJcXG4tLVxcbmRyaXZlcnMvcHRwL0tjb25maWctMTYyLVxcbmRyaXZlcnMvcHRwL0tjb25maWc6MTYzOmNvbmZpZyBQVFBfMTU4OF9DTE9DS19JRFRDTVxcbmRyaXZlcnMvcHRwL0tjb25maWctMTY0LVxcdHRyaXN0YXRlIFxcXCJJRFQgQ0xPQ0tNQVRSSVggYXMgUFRQIGNsb2NrXFxcIlxcbi0tXFxuZHJpdmVycy9wdHAvS2NvbmZpZy0xNzQtXFxuZHJpdmVycy9wdHAvS2NvbmZpZzoxNzU6Y29uZmlnIFBUUF8xNTg4X0NMT0NLX0ZDM1dcXG5kcml2ZXJzL3B0cC9LY29uZmlnLTE3Ni1cXHR0cmlzdGF0ZSBcXFwiUkVORVNBUyBGZW10b0Nsb2NrMyBXaXJlbGVzcyBhcyBQVFAgY2xvY2tcXFwiXFxuLS1cXG5kcml2ZXJzL3B0cC9LY29uZmlnLTE4Ni1cXG5kcml2ZXJzL3B0cC9LY29uZmlnOjE4Nzpjb25maWcgUFRQXzE1ODhfQ0xPQ0tfTU9DS1xcbmRyaXZlcnMvcHRwL0tjb25maWctMTg4LVxcdHRyaXN0YXRlIFxcXCJNb2NrLXVwIFBUUCBjbG9ja1xcXCJcXG4tLVxcbmRyaXZlcnMvcHRwL0tjb25maWctMTk3LVxcbmRyaXZlcnMvcHRwL0tjb25maWc6MTk4OmNvbmZpZyBQVFBfMTU4OF9DTE9DS19WTVdcXG5kcml2ZXJzL3B0cC9LY29uZmlnLTE5OS1cXHR0cmlzdGF0ZSBcXFwiVk13YXJlIHZpcnR1YWwgUFRQIGNsb2NrXFxcIlxcbi0tXFxuZHJpdmVycy9wdHAvS2NvbmZpZy0yMDktXFxuZHJpdmVycy9wdHAvS2NvbmZpZzoyMTA6Y29uZmlnIFBUUF8xNTg4X0NMT0NLX09DUFxcbmRyaXZlcnMvcHRwL0tjb25maWctMjExLVxcdHRyaXN0YXRlIFxcXCJPcGVuQ29tcHV0ZSBUaW1lQ2FyZCBhcyBQVFAgY2xvY2tcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDExOjEzOjA0LjkyNjIyMTIxMloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3ODczNjM2ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyByZXF1ZXN0ZWQ6XG5cbioqQ29uZmlndXJhdGlvbiBhbmQgUmVwb3J0aW5nIFN0cmF0ZWd5KipcblxuQWxyaWdodCwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBzeXN0ZW0gY29uZmlndXJhdGlvbiBub3cuIEkgZGVmaW5pdGVseSBuZWVkIHRvIGluY2x1ZGUgdGhlIGBQVFBfMTU4OF9DTE9DS2AgY29tcG9uZW50IGluIHRoZSBvdmVyYWxsIGNvbmZpZ3VyYXRpb24uIFRoaXMgaXMgbm9uLW5lZ290aWFibGUsIGdpdmVuIHRoZSBwcm9qZWN0IHJlcXVpcmVtZW50cy4gSSd2ZSBnb3QgdG8gbWFrZSBzdXJlIHRoYXQncyBiYWtlZCBpbiBmcm9tIHRoZSBnZXQtZ28uXG5cbkFuZCB0aGVuLCBvbmNlIEkndmUgZ290IGEgaGFuZGxlIG9uIGV2ZXJ5dGhpbmcsIGl0J3MgdGltZSB0byB0cmlnZ2VyIHRoYXQgcmVwb3J0aW5nIGZ1bmN0aW9uLiBJJ20gZ29pbmcgdG8gY2FsbCBpdCBgc2V0LXJlc3VsdHNgLiBUaGlzIG5hbWluZyBjb252ZW50aW9uIGlzIGNsZWFyIGFuZCBhbGlnbnMgd2l0aCBvdXIgZXhpc3RpbmcgYXJjaGl0ZWN0dXJlLiBJ4oCZbGwgbWFrZSBzdXJlIHRoYXQgaXQncyByb2J1c3QgYW5kIHJlYWR5IHRvIGhhbmRsZSB3aGF0ZXZlciBkYXRhIHRoZSBzeXN0ZW0gdGhyb3dzIGF0IGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzU0NCwiT3V0cHV0VG9rZW5zIjozNDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxMToxMzowOS43MTM1ODk5MjNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NTQ0NDY2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWkwzMDczWFwiLFxuICAgIFwiWkwzMDczWF9JMkNcIixcbiAgICBcIlpMMzA3M1hfU1BJXCIsXG4gICAgXCJQVFBfMTU4OF9DTE9DS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NFwiLFxuICAgIFwiemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjRcIixcbiAgICBcInpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZVwiLFxuICAgIFwiemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lXCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlXCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX2VuYWJsZVwiLFxuICAgIFwiemwzMDczeF9jaGFuX3RvZF9yZWFkXCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fdG9kX3dyaXRlXCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fdG9kX2FkanVzdFwiLFxuICAgIFwiemwzMDczeF9jaGFuX3BoYXNlX3N0ZXBcIixcbiAgICBcInpsMzA3M3hfY2hhbl90aWVfd3JpdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciAoemwzMDczeCkuIEl0IGltcGxlbWVudHMgdmFyaW91cyBQVFAgY2xvY2sgb3BlcmF0aW9ucyAoZ2V0L3NldCB0aW1lLCBhZGp1c3QgdGltZS9waGFzZS9mcmVxdWVuY3kpIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBQVFAgaW9jdGwgaW50ZXJmYWNlLiBGdXp6aW5nIHRoZXNlIGZ1bmN0aW9ucyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoZSBkcml2ZXIgaGFuZGxlcyBlZGdlIGNhc2VzIGFuZCBjb25jdXJyZW50IGFjY2Vzc2VzIGNvcnJlY3RseS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaTDMwNzNYXCIsXG4gICAgXCJaTDMwNzNYX0kyQ1wiLFxuICAgIFwiWkwzMDczWF9TUElcIixcbiAgICBcIlBUUF8xNTg4X0NMT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0XCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NFwiLFxuICAgIFwiemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lXCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmVcIixcbiAgICBcInpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2VcIixcbiAgICBcInpsMzA3M3hfZHBsbF9wdHBfZW5hYmxlXCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fdG9kX3JlYWRcIixcbiAgICBcInpsMzA3M3hfY2hhbl90b2Rfd3JpdGVcIixcbiAgICBcInpsMzA3M3hfY2hhbl90b2RfYWRqdXN0XCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcFwiLFxuICAgIFwiemwzMDczeF9jaGFuX3RpZV93cml0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgUFRQIGNsb2NrIHN1cHBvcnQgdG8gdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyICh6bDMwNzN4KS4gSXQgaW1wbGVtZW50cyB2YXJpb3VzIFBUUCBjbG9jayBvcGVyYXRpb25zIChnZXQvc2V0IHRpbWUsIGFkanVzdCB0aW1lL3BoYXNlL2ZyZXF1ZW5jeSkgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIFBUUCBpb2N0bCBpbnRlcmZhY2UuIEZ1enppbmcgdGhlc2UgZnVuY3Rpb25zIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlIGRyaXZlciBoYW5kbGVzIGVkZ2UgY2FzZXMgYW5kIGNvbmN1cnJlbnQgYWNjZXNzZXMgY29ycmVjdGx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow6hmkf[1] Phase: Succeeded StartedAt: 2026-07-09 11:13:51 +0000 UTC FinishedAt: 2026-07-09 11:13:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6hmkf[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-09 11:13:51 +0000 UTC FinishedAt: 2026-07-09 11:13:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6hmkf[2] Phase: Succeeded StartedAt: 2026-07-09 11:13:51 +0000 UTC FinishedAt: 2026-07-09 13:35:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6hmkf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase","zl3073x_dpll_ptp_enable","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_phase_step","zl3073x_chan_tie_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"87b9f9ec-7384-41f3-8dcf-64b754b2475f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-09 11:13:52 +0000 UTC FinishedAt: 2026-07-09 13:35:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase","zl3073x_dpll_ptp_enable","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_phase_step","zl3073x_chan_tie_write"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"87b9f9ec-7384-41f3-8dcf-64b754b2475f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow6hmkf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase","zl3073x_dpll_ptp_enable","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_phase_step","zl3073x_chan_tie_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"87b9f9ec-7384-41f3-8dcf-64b754b2475f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-09 11:13:52 +0000 UTC FinishedAt: 2026-07-09 11:14:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6hmkf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase","zl3073x_dpll_ptp_enable","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_phase_step","zl3073x_chan_tie_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"87b9f9ec-7384-41f3-8dcf-64b754b2475f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-09 11:13:52 +0000 UTC FinishedAt: 2026-07-09 11:14:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow6hmkf/series-workflow6hmkf-convert-artifact-523813540/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6hmkf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase","zl3073x_dpll_ptp_enable","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_phase_step","zl3073x_chan_tie_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"87b9f9ec-7384-41f3-8dcf-64b754b2475f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-09 11:14:13 +0000 UTC FinishedAt: 2026-07-09 11:48:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6hmkf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase","zl3073x_dpll_ptp_enable","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_phase_step","zl3073x_chan_tie_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"87b9f9ec-7384-41f3-8dcf-64b754b2475f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-09 11:14:13 +0000 UTC FinishedAt: 2026-07-09 11:48:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*094f595b-8e0f-4cf5-8264-457c1125534e,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-workflow6hmkf/series-workflow6hmkf-convert-artifact-523813540/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": "1fe41eb6-9de5-4f9c-a0b8-b855c1e84b11", "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-workflow6hmkf/series-workflow6hmkf-build-action-2545439970/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6hmkf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase","zl3073x_dpll_ptp_enable","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_phase_step","zl3073x_chan_tie_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"87b9f9ec-7384-41f3-8dcf-64b754b2475f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-09 11:14:13 +0000 UTC FinishedAt: 2026-07-09 11:48:42 +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:*094f595b-8e0f-4cf5-8264-457c1125534e,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-workflow6hmkf/series-workflow6hmkf-convert-artifact-523813540/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": "1fe41eb6-9de5-4f9c-a0b8-b855c1e84b11", "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-workflow6hmkf/series-workflow6hmkf-build-action-2545439970/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6hmkf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase","zl3073x_dpll_ptp_enable","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_phase_step","zl3073x_chan_tie_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"87b9f9ec-7384-41f3-8dcf-64b754b2475f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-09 11:48:52 +0000 UTC FinishedAt: 2026-07-09 11:48:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6hmkf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase","zl3073x_dpll_ptp_enable","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_phase_step","zl3073x_chan_tie_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"87b9f9ec-7384-41f3-8dcf-64b754b2475f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-09 11:48:52 +0000 UTC FinishedAt: 2026-07-09 11:48:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6hmkf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase","zl3073x_dpll_ptp_enable","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_phase_step","zl3073x_chan_tie_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"87b9f9ec-7384-41f3-8dcf-64b754b2475f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-09 11:48:52 +0000 UTC FinishedAt: 2026-07-09 11:49:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6hmkf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase","zl3073x_dpll_ptp_enable","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_phase_step","zl3073x_chan_tie_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"87b9f9ec-7384-41f3-8dcf-64b754b2475f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-09 11:48:52 +0000 UTC FinishedAt: 2026-07-09 11:48:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"87b9f9ec-7384-41f3-8dcf-64b754b2475f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow6hmkf/series-workflow6hmkf-convert-artifact-516667043/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6hmkf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase","zl3073x_dpll_ptp_enable","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_phase_step","zl3073x_chan_tie_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"87b9f9ec-7384-41f3-8dcf-64b754b2475f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-09 11:49:02 +0000 UTC FinishedAt: 2026-07-09 11:51:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6hmkf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase","zl3073x_dpll_ptp_enable","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_phase_step","zl3073x_chan_tie_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"87b9f9ec-7384-41f3-8dcf-64b754b2475f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-09 11:49:02 +0000 UTC FinishedAt: 2026-07-09 11:51:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1fe41eb6-9de5-4f9c-a0b8-b855c1e84b11,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-workflow6hmkf/series-workflow6hmkf-build-action-2545439970/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6hmkf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase","zl3073x_dpll_ptp_enable","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_phase_step","zl3073x_chan_tie_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"87b9f9ec-7384-41f3-8dcf-64b754b2475f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-09 11:51:21 +0000 UTC FinishedAt: 2026-07-09 11:51:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6hmkf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase","zl3073x_dpll_ptp_enable","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_phase_step","zl3073x_chan_tie_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"87b9f9ec-7384-41f3-8dcf-64b754b2475f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-09 11:51:21 +0000 UTC FinishedAt: 2026-07-09 11:51:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6hmkf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase","zl3073x_dpll_ptp_enable","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_phase_step","zl3073x_chan_tie_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"87b9f9ec-7384-41f3-8dcf-64b754b2475f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-09 11:51:21 +0000 UTC FinishedAt: 2026-07-09 12:38:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6hmkf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase","zl3073x_dpll_ptp_enable","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_phase_step","zl3073x_chan_tie_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"87b9f9ec-7384-41f3-8dcf-64b754b2475f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-09 11:51:21 +0000 UTC FinishedAt: 2026-07-09 12:38:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*094f595b-8e0f-4cf5-8264-457c1125534e,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-workflow6hmkf/series-workflow6hmkf-convert-artifact-516667043/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": "521182d3-7b0f-4d00-92e4-17cdf7e6f615", "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-workflow6hmkf/series-workflow6hmkf-build-action-1187429207/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6hmkf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase","zl3073x_dpll_ptp_enable","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_phase_step","zl3073x_chan_tie_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"87b9f9ec-7384-41f3-8dcf-64b754b2475f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-09 11:51:21 +0000 UTC FinishedAt: 2026-07-09 12:38:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*094f595b-8e0f-4cf5-8264-457c1125534e,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-workflow6hmkf/series-workflow6hmkf-convert-artifact-516667043/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": "521182d3-7b0f-4d00-92e4-17cdf7e6f615", "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-workflow6hmkf/series-workflow6hmkf-build-action-1187429207/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6hmkf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase","zl3073x_dpll_ptp_enable","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_phase_step","zl3073x_chan_tie_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"87b9f9ec-7384-41f3-8dcf-64b754b2475f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-09 12:38:40 +0000 UTC FinishedAt: 2026-07-09 12:38:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6hmkf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase","zl3073x_dpll_ptp_enable","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_phase_step","zl3073x_chan_tie_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"87b9f9ec-7384-41f3-8dcf-64b754b2475f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-09 12:38:40 +0000 UTC FinishedAt: 2026-07-09 12:38:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6hmkf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase","zl3073x_dpll_ptp_enable","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_phase_step","zl3073x_chan_tie_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"87b9f9ec-7384-41f3-8dcf-64b754b2475f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-09 12:38:40 +0000 UTC FinishedAt: 2026-07-09 12:40:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6hmkf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase","zl3073x_dpll_ptp_enable","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_phase_step","zl3073x_chan_tie_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"87b9f9ec-7384-41f3-8dcf-64b754b2475f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-09 12:38:40 +0000 UTC FinishedAt: 2026-07-09 12:40:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*521182d3-7b0f-4d00-92e4-17cdf7e6f615,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6hmkf/series-workflow6hmkf-build-action-1187429207/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6hmkf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase","zl3073x_dpll_ptp_enable","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_phase_step","zl3073x_chan_tie_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"87b9f9ec-7384-41f3-8dcf-64b754b2475f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-09 12:40:53 +0000 UTC FinishedAt: 2026-07-09 13:35:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6hmkf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase","zl3073x_dpll_ptp_enable","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_phase_step","zl3073x_chan_tie_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"87b9f9ec-7384-41f3-8dcf-64b754b2475f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-09 12:40:53 +0000 UTC FinishedAt: 2026-07-09 13:35:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase","zl3073x_dpll_ptp_enable","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_phase_step","zl3073x_chan_tie_write"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*1fe41eb6-9de5-4f9c-a0b8-b855c1e84b11,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*521182d3-7b0f-4d00-92e4-17cdf7e6f615,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6hmkf/series-workflow6hmkf-build-action-2545439970/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6hmkf/series-workflow6hmkf-build-action-1187429207/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6hmkf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase","zl3073x_dpll_ptp_enable","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_phase_step","zl3073x_chan_tie_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"87b9f9ec-7384-41f3-8dcf-64b754b2475f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-09 12:40:53 +0000 UTC FinishedAt: 2026-07-09 12:41:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6hmkf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase","zl3073x_dpll_ptp_enable","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_phase_step","zl3073x_chan_tie_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"87b9f9ec-7384-41f3-8dcf-64b754b2475f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-09 12:40:53 +0000 UTC FinishedAt: 2026-07-09 12:40:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase","zl3073x_dpll_ptp_enable","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_phase_step","zl3073x_chan_tie_write"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6hmkf/series-workflow6hmkf-convert-artifact-3671793852/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6hmkf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase","zl3073x_dpll_ptp_enable","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_phase_step","zl3073x_chan_tie_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"87b9f9ec-7384-41f3-8dcf-64b754b2475f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-09 12:40:53 +0000 UTC FinishedAt: 2026-07-09 12:40:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6hmkf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase","zl3073x_dpll_ptp_enable","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_phase_step","zl3073x_chan_tie_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"87b9f9ec-7384-41f3-8dcf-64b754b2475f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-09 12:40:53 +0000 UTC FinishedAt: 2026-07-09 12:40:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6hmkf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase","zl3073x_dpll_ptp_enable","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_phase_step","zl3073x_chan_tie_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"87b9f9ec-7384-41f3-8dcf-64b754b2475f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-09 12:40:53 +0000 UTC FinishedAt: 2026-07-09 12:40:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6hmkf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase","zl3073x_dpll_ptp_enable","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_phase_step","zl3073x_chan_tie_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"87b9f9ec-7384-41f3-8dcf-64b754b2475f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-09 12:41:05 +0000 UTC FinishedAt: 2026-07-09 13:35:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6hmkf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase","zl3073x_dpll_ptp_enable","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_phase_step","zl3073x_chan_tie_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"87b9f9ec-7384-41f3-8dcf-64b754b2475f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-09 12:41:05 +0000 UTC FinishedAt: 2026-07-09 13:35:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1fe41eb6-9de5-4f9c-a0b8-b855c1e84b11,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*521182d3-7b0f-4d00-92e4-17cdf7e6f615,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6hmkf/series-workflow6hmkf-build-action-2545439970/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6hmkf/series-workflow6hmkf-build-action-1187429207/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6hmkf/series-workflow6hmkf-convert-artifact-3671793852/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}