Name: series-workflowxvgbj Phase: Succeeded StartedAt: 2026-08-07 11:51:35 +0000 UTC FinishedAt: 2026-08-07 13:35:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxvgbj[0] Phase: Succeeded StartedAt: 2026-08-07 11:51:35 +0000 UTC FinishedAt: 2026-08-07 11:55:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxvgbj[0].run-triage Phase: Succeeded StartedAt: 2026-08-07 11:51:35 +0000 UTC FinishedAt: 2026-08-07 11:55:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "4fa4977a0d900f936bcae5cd2c510be5554e8dd6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZL3073X_I2C", "ZL3073X_SPI", "PTP_1588_CLOCK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "4fa4977a0d900f936bcae5cd2c510be5554e8dd6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZL3073X_I2C", "ZL3073X_SPI", "PTP_1588_CLOCK" ], "series_id": "d89a7ab3-00aa-4bed-8dfb-a0d42b357707" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "zl3073x_chan_tod_ready_wait", "zl3073x_chan_tod_read", "zl3073x_chan_tod_write", "zl3073x_chan_tod_adjust", "zl3073x_chan_df_offset_set", "zl3073x_chan_tie_write", "zl3073x_chan_phase_step" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA3IDExOjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pMMzA3M1hfSTJDJiMzNDssCiAgICAmIzM0O1pMMzA3M1hfU1BJJiMzNDssCiAgICAmIzM0O1BUUF8xNTg4X0NMT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7emwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0JiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl90b2RfcmVhZCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fdG9kX3dyaXRlJiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl90b2RfYWRqdXN0JiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0JiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl90aWVfd3JpdGUmIzM0OywKICAgICYjMzQ7emwzMDczeF9jaGFuX3BoYXNlX3N0ZXAmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIFBUUCBjbG9jayBzdXBwb3J0IGZvciB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIuIEl0IGFkZHMgZnVuY3Rpb25zIHRvIHJlYWQvd3JpdGUgVGltZSBvZiBEYXkgKFRvRCkgcmVnaXN0ZXJzLCBhZGp1c3QgZnJlcXVlbmN5LCBhbmQgYWRqdXN0IHBoYXNlLCBhcyB3ZWxsIGFzIHJlZ2lzdGVyaW5nIGEgUFRQIGNsb2NrIGRldmljZS4gQWxsIGxvY2FsIHZhcmlhYmxlcywgc3VjaCBhcyBgc3RydWN0IHRpbWVzcGVjNjRgIGFuZCBgc3ludGhfbWFza2AsIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgYHB0cF9jbG9ja19pbmZvYCBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQgZnJvbSBhIHN0YXRpYyBjb25zdCB0ZW1wbGF0ZSwgZW5zdXJpbmcgYWxsIGZpZWxkcyAoaW5jbHVkaW5nIHBhZGRpbmcgYW5kIHRoZSBgbmFtZWAgYnVmZmVyKSBhcmUgemVyby1pbml0aWFsaXplZCBiZWZvcmUgYHNucHJpbnRmYCBpcyBjYWxsZWQuIFRoZXJlIGFyZSBubyBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgUFRQIGNsb2NrIHN1cHBvcnQgdG8gdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyICh6bDMwNzN4KS4gVGhlIGRyaXZlciBjYW4gYmUgaW5zdGFudGlhdGVkIHZpYSBJMkMgb3IgU1BJLCBhbmQgdGhlIFBUUCBjbG9jayBpbnRlcmZhY2UgaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdmlhIGAvZGV2L3B0cFhgLiBTeXprYWxsZXIgY2FuIGZ1enogdGhpcyBmdW5jdGlvbmFsaXR5IHVzaW5nIEkyQy9TUEkgZW11bGF0aW9uIGFuZCBQVFAgaW9jdGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDExOjUyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNTkxZGVjODNhODVkNzA3NDU1MjYwZTkxOGU3NDEyNTdlNDVmOTI5MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMTE6NTI6NDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdcbmluZGV4IDViYmNhMTQwMDU4MTMuLmRhMTczMWFjZTE1ZjAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXG5AQCAtMiw3ICYjNDM7Miw3IEBAXG4gXG4gY29uZmlnIFpMMzA3M1hcbiBcdHRyaXN0YXRlIFwmIzM0O01pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXNcJiMzNDsgaWYgQ09NUElMRV9URVNUXG4tXHRkZXBlbmRzIG9uIE5FVFxuJiM0MztcdGRlcGVuZHMgb24gTkVUIFx1MDAyNlx1MDAyNiBQVFBfMTU4OF9DTE9DS1xuIFx0c2VsZWN0IERQTExcbiBcdHNlbGVjdCBORVRfREVWTElOS1xuIFx0c2VsZWN0IFJFR01BUFxuQEAgLTE2LDcgJiM0MzsxNiw3IEBAIGNvbmZpZyBaTDMwNzNYXG4gXG4gY29uZmlnIFpMMzA3M1hfSTJDXG4gXHR0cmlzdGF0ZSBcJiMzNDtJMkMgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzXCYjMzQ7XG4tXHRkZXBlbmRzIG9uIEkyQyBcdTAwMjZcdTAwMjYgTkVUXG4mIzQzO1x0ZGVwZW5kcyBvbiBJMkMgXHUwMDI2XHUwMDI2IE5FVCBcdTAwMjZcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tcbiBcdHNlbGVjdCBSRUdNQVBfSTJDXG4gXHRzZWxlY3QgWkwzMDczWFxuIFx0aGVscFxuQEAgLTI4LDcgJiM0MzsyOCw3IEBAIGNvbmZpZyBaTDMwNzNYX0kyQ1xuIFxuIGNvbmZpZyBaTDMwNzNYX1NQSVxuIFx0dHJpc3RhdGUgXCYjMzQ7U1BJIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1wmIzM0O1xuLVx0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IFNQSVxuJiM0MztcdGRlcGVuZHMgb24gTkVUIFx1MDAyNlx1MDAyNiBTUEkgXHUwMDI2XHUwMDI2IFBUUF8xNTg4X0NMT0NLXG4gXHRzZWxlY3QgUkVHTUFQX1NQSVxuIFx0c2VsZWN0IFpMMzA3M1hcbiBcdGhlbHBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNcbmluZGV4IDRlYzJjZjUzZGFkNDYuLmFmNmNhNDNjMzM1OTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uY1xuQEAgLTMsNiAmIzQzOzMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZfcHJpbnRrLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gXG5AQCAtMTYyLDggJiM0MzsxNjMsOCBAQCBpbnQgemwzMDczeF9jaGFuX25jb19tb2RlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleClcbiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXG4gICogQGluZGV4OiBEUExMIGNoYW5uZWwgaW5kZXggdG8gZmV0Y2ggc3RhdGUgZm9yXG4gICpcbi0gKiBSZWFkcyB0aGUgbW9kZV9yZWZzZWwgcmVnaXN0ZXIgYW5kIHJlZmVyZW5jZSBwcmlvcml0eSByZWdpc3RlcnMgZm9yXG4tICogdGhlIGdpdmVuIERQTEwgY2hhbm5lbCBhbmQgc3RvcmVzIHRoZSByYXcgdmFsdWVzIGZvciBsYXRlciB1c2UuXG4mIzQzOyAqIFJlYWRzIHRoZSBtb2RlX3JlZnNlbCwgc3RhdHVzIGFuZCByZWZlcmVuY2UgcHJpb3JpdHkgcmVnaXN0ZXJzIGZvclxuJiM0MzsgKiB0aGUgZ2l2ZW4gRFBMTCBjaGFubmVsIGFuZCBzdG9yZXMgdGhlIHZhbHVlcyBmb3IgbGF0ZXIgdXNlLlxuICAqXG4gICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiAgKi9cbkBAIC0yMzQsNiAmIzQzOzIzNSwzMjIgQEAgY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqemwzMDczeF9jaGFuX3N0YXRlX2dldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LFxuIFx0cmV0dXJuIFx1MDAyNnpsZGV2LVx1MDAzZWNoYW5baW5kZXhdO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCAtIHdhaXQgZm9yIFRvRCBzZW1hcGhvcmUgdG8gY2xlYXJcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqXG4mIzQzOyAqIFBvbGxzIHRoZSBUb0QgY29udHJvbCByZWdpc3RlciB1bnRpbCB0aGUgc2VtYXBob3JlIGJpdCBpcyBjbGVhcmVkLFxuJiM0MzsgKiBpbmRpY2F0aW5nIHRoZSBkZXZpY2UgaGFzIGNvbXBsZXRlZCB0aGUgcHJldmlvdXMgVG9EIG9wZXJhdGlvbi5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FQlVTWSBpZiBzZW1hcGhvcmUgbm90IGNsZWFyZWQsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgdGltZW91dDtcbiYjNDM7XHR1OCB0b2RfY3RybDtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdHJjID0gemwzMDczeF9yZWFkX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksIFx1MDAyNnRvZF9jdHJsKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoRklFTERfR0VUKFpMX0RQTExfVE9EX0NUUkxfQ01ELCB0b2RfY3RybCkpIHtcbiYjNDM7XHRjYXNlIDA6XG4mIzQzO1x0XHQvKiBObyBvcGVyYXRpb24gcGVuZGluZyAocG93ZXItb24vcmVzZXQgZGVmYXVsdCkgKi9cbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFo6XG4mIzQzO1x0XHR0aW1lb3V0ID0gWkxfUE9MTF9UT0RfV1JfVElNRU9VVF9VUztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVDpcbiYjNDM7XHRjYXNlIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaOlxuJiM0MztcdFx0dGltZW91dCA9IFpMX1BPTExfVE9EX1JEX1RJTUVPVVRfVVM7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0LyogRlcgbmV2ZXIgd3JpdGVzIGNtZCBiaXRzOyBvbmx5IHRoZSBkcml2ZXIgc2V0cyB0aGVtICovXG4mIzQzO1x0XHRXQVJOX09OKDEpO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLFxuJiM0MztcdFx0XHRcdCAgWkxfRFBMTF9UT0RfQ1RSTF9TRU0sIHRpbWVvdXQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmMgPT0gLUVUSU1FRE9VVCA/IC1FQlVTWSA6IHJjO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9jdHJsIC0gaXNzdWUgVG9EIGNvbW1hbmRcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEBjbWQ6IFRvRCBjb21tYW5kIHRvIGV4ZWN1dGVcbiYjNDM7ICpcbiYjNDM7ICogV3JpdGVzIHRoZSBzZW1hcGhvcmUgYW5kIGNvbW1hbmQgdG8gZHBsbF90b2RfY3RybC4gVGhlIGNhbGxlciBtdXN0XG4mIzQzOyAqIGVuc3VyZSB0aGUgZGV2aWNlIGlzIHJlYWR5IChzZW1hcGhvcmUgY2xlYXIpIGJlZm9yZSBjYWxsaW5nIGFuZFxuJiM0MzsgKiBtdXN0IHdhaXQgZm9yIGNvbXBsZXRpb24gaWYgbmVlZGVkLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHU4IGNtZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksXG4mIzQzO1x0XHRcdFx0WkxfRFBMTF9UT0RfQ1RSTF9TRU0gfCBjbWQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9yZWFkIC0gcmVhZCBUb0QgcmVnaXN0ZXJzIGFmdGVyIGlzc3VpbmcgYSBjb21tYW5kXG4mIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuJiM0MzsgKiBAbmV4dF9oejogaWYgdHJ1ZSwgcmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIejsgb3RoZXJ3aXNlIHJlYWQgY3VycmVudFxuJiM0MzsgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIHRoZSByZXN1bHRcbiYjNDM7ICogQHN0czogb3B0aW9uYWwgc3lzdGVtIHRpbWVzdGFtcCBwYWlyIGZvciBjcm9zcy10aW1lc3RhbXBpbmdcbiYjNDM7ICpcbiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4mIzQzO1x0XHRcdCAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXG4mIzQzO1x0XHRcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpXG4mIzQzO3tcbiYjNDM7XHR1MzIgbnNlYztcbiYjNDM7XHR1NjQgc2VjO1xuJiM0MztcdHU4IGNtZDtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdGlmIChuZXh0X2h6KVxuJiM0MztcdFx0Y21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFo7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0Y21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVDtcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbiYjNDM7XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cHRwX3JlYWRfc3lzdGVtX3ByZXRzKHN0cyk7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLCBjbWQpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1x0cHRwX3JlYWRfc3lzdGVtX3Bvc3R0cyhzdHMpO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfcmVhZF91NDgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9TRUMoY2gpLCBcdTAwMjZzZWMpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0LyogSFcgbmFub3NlY29uZHMgYXJlIGFsd2F5cyBpbiBbMCwgTlNFQ19QRVJfU0VDKSByYW5nZSAqL1xuJiM0MztcdHJjID0gemwzMDczeF9yZWFkX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgXHUwMDI2bnNlYyk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHR0cy1cdTAwM2V0dl9zZWMgPSBzZWM7XG4mIzQzO1x0dHMtXHUwMDNldHZfbnNlYyA9IG5zZWM7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF93cml0ZSAtIHdyaXRlIFRvRCByZWdpc3RlcnMgYW5kIHRyaWdnZXIgMSBIeiB1cGRhdGVcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEB0czogdGltZSB0byBzZXRcbiYjNDM7ICpcbiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuJiM0MztcdFx0XHQgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cylcbiYjNDM7e1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbiYjNDM7XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIHRzLnR2X3NlYyk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCB0cy50dl9uc2VjKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLFxuJiM0MztcdFx0XHRcdCAgICAgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFopO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9hZGp1c3QgLSBhdG9taWMgVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIHdpdGggcm9sbG92ZXIgZ3VhcmRcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IHRvIGFwcGx5XG4mIzQzOyAqXG4mIzQzOyAqIFJlYWRzIHRoZSBuZXh0LUh6IFRvRCBhbmQgY3VycmVudCBUb0QsIHRoZW4gY2hlY2tzIHdoZXRoZXIgZW5vdWdoIHRpbWVcbiYjNDM7ICogcmVtYWlucyBiZWZvcmUgdGhlIG5leHQgMSBIeiByb2xsb3ZlciB0byBzYWZlbHkgY29tcGxldGUgdGhlIHdyaXRlLlxuJiM0MzsgKiBSZS1yZWFkcyBpZiB0aGUgMSBIeiB0aWNrIGNyb3NzZWQgYmV0d2VlbiB0aGUgdHdvIHJlYWRzIG9yIGlmIGxlc3NcbiYjNDM7ICogdGhhbiAyMCBtcyByZW1haW5zIGJlZm9yZSB0aGUgbmV4dCByb2xsb3Zlci4gQXBwbGllcyBAZGVsdGEgYW5kIHdyaXRlc1xuJiM0MzsgKiB0aGUgcmVzdWx0IGJhY2suXG4mIzQzOyAqXG4mIzQzOyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFpMX1RPRF9NQVhfUkVUUklFU1x0MjBcbiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuJiM0MztcdFx0XHQgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpXG4mIzQzO3tcbiYjNDM7XHRzdGF0aWMgY29uc3QgbG9uZyB0aHJlc2hvbGRfbnMgPSAyMCAqIE5TRUNfUEVSX01TRUM7XG4mIzQzO1x0c3RydWN0IHRpbWVzcGVjNjQgdHNfbmV4dCwgdHNfY3VyLCBkaWZmO1xuJiM0MztcdGludCByYywgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgWkxfVE9EX01BWF9SRVRSSUVTOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCB0cnVlLCBcdTAwMjZ0c19uZXh0LCBOVUxMKTtcbiYjNDM7XHRcdGlmIChyYylcbiYjNDM7XHRcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgZmFsc2UsIFx1MDAyNnRzX2N1ciwgTlVMTCk7XG4mIzQzO1x0XHRpZiAocmMpXG4mIzQzO1x0XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0XHQvKiBFbnN1cmUgdGhlIDEgSHogdGljayBkaWQgbm90IGNyb3NzIGJldHdlZW4gdGhlIHR3byByZWFkc1xuJiM0MztcdFx0ICogYW5kIHRoYXQgZW5vdWdoIG1hcmdpbiByZW1haW5zIHRvIGNvbXBsZXRlIHRoZSB3cml0ZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0ZGlmZiA9IHRpbWVzcGVjNjRfc3ViKHRzX25leHQsIHRzX2N1cik7XG4mIzQzO1x0XHRpZiAoZGlmZi50dl9zZWMgXHUwMDNlIDAgfHxcbiYjNDM7XHRcdCAgICAoIWRpZmYudHZfc2VjIFx1MDAyNlx1MDAyNiBkaWZmLnR2X25zZWMgXHUwMDNlPSB0aHJlc2hvbGRfbnMpKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKGkgPT0gWkxfVE9EX01BWF9SRVRSSUVTKSB7XG4mIzQzO1x0XHRkZXZfd2Fybih6bGRldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdCBcJiMzNDtEUExMJXUgVG9EIGFkanVzdCBmYWlsZWQgdG8gZ2V0IHN0YWJsZSBtYXJnaW5cXG5cJiMzNDssXG4mIzQzO1x0XHRcdCBjaCk7XG4mIzQzO1x0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogQXBwbHkgZGVsdGEgdG8gdGhlIG5leHQtSHogVG9EICovXG4mIzQzO1x0dHNfbmV4dCA9IHRpbWVzcGVjNjRfYWRkKHRzX25leHQsIGRlbHRhKTtcbiYjNDM7XHRpZiAoIXRpbWVzcGVjNjRfdmFsaWQoXHUwMDI2dHNfbmV4dCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkZXYsIGNoLCB0c19uZXh0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0IC0gd3JpdGUgZGVsdGEgZnJlcXVlbmN5IG9mZnNldCB0byBoYXJkd2FyZVxuJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbiYjNDM7ICogQG9mZnNldDogZnJlcXVlbmN5IG9mZnNldCBpbiAyXi00OCBzdGVwc1xuJiM0MzsgKlxuJiM0MzsgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBob2xkIHRoZSBwZXItRFBMTCBsb2NrLlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7aW50IHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgb2Zmc2V0KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJjO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9PRkZTRVQoY2gpLCBvZmZzZXQpO1xuJiM0MztcdGlmICghcmMpXG4mIzQzO1x0XHR6bGRldi1cdTAwM2VjaGFuW2NoXS5kZl9vZmZzZXQgPSBvZmZzZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiByYztcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfY2hhbl90aWVfd3JpdGUgLSBhZGp1c3QgRFBMTCBwaGFzZSB1c2luZyBUSUUgd3JpdGVcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEBkZWx0YV9uczogcGhhc2UgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcyAobXVzdCBiZSB3aXRoaW4gJiM0MzstMXMpXG4mIzQzOyAqXG4mIzQzOyAqIENvbnZlcnRzIG5hbm9zZWNvbmRzIHRvIFRJRSB1bml0cyAoMC4wMSBwcykgYW5kIHdyaXRlcyBUSUUgZGF0YVxuJiM0MzsgKiB0byB0aGUgc3BlY2lmaWVkIGNoYW5uZWwuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MztpbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKVxuJiM0Mzt7XG4mIzQzO1x0czY0IHRpZV9kYXRhO1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0aWYgKFdBUk5fT04oZGVsdGFfbnMgXHUwMDNjPSAtTlNFQ19QRVJfU0VDIHx8IGRlbHRhX25zIFx1MDAzZT0gTlNFQ19QRVJfU0VDKSlcbiYjNDM7XHRcdHJldHVybiAtRVJBTkdFO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2emxkZXYtXHUwMDNldGllX2xvY2spO1xuJiM0MztcbiYjNDM7XHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVElFIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xuJiM0MztcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLFxuJiM0MztcdFx0XHRcdCAgWkxfRFBMTF9USUVfQ1RSTF9PUCxcbiYjNDM7XHRcdFx0XHQgIFpMX1BPTExfVElFX1dSX1RJTUVPVVRfVVMpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0LyogQ29udmVydCBucyB0byBUSUUgdW5pdHMgKDAuMDEgcHMgPSAxMF4tMTQgcykgKi9cbiYjNDM7XHR0aWVfZGF0YSA9IGRlbHRhX25zICogMTAwMDAwTEw7XG4mIzQzO1xuJiM0MztcdHJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9EQVRBKGNoKSwgdGllX2RhdGEpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTF9NQVNLLCBCSVQoY2gpKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTCxcbiYjNDM7XHRcdFx0XHRaTF9EUExMX1RJRV9DVFJMX09QX1dSKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwIC0gZXhlY3V0ZSBvbmUgb3V0cHV0IHBoYXNlIHN0ZXAgb3BlcmF0aW9uXG4mIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuJiM0MzsgKiBAb3V0X21hc2s6IGJpdG1hc2sgb2Ygb3V0cHV0cyB0byBzdGVwXG4mIzQzOyAqIEBzdGVwX2N5Y2xlczogcGhhc2Ugc3RlcCBpbiBzeW50aGVzaXplciBjbG9jayBjeWNsZXNcbiYjNDM7ICogQHRvZF9zdGVwOiBhbHNvIHN0ZXAgdGhlIFRvRCBjb3VudGVyXG4mIzQzOyAqXG4mIzQzOyAqIEFsbCBtYXNrZWQgb3V0cHV0cyBtdXN0IHVzZSBzeW50aGVzaXplcnMgb2YgdGhlIHNhbWUgZnJlcXVlbmN5IHNpbmNlXG4mIzQzOyAqIHRoZSBzdGVwIHZhbHVlIGlzIGluIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcy5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbiYjNDM7XHRcdFx0ICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLFxuJiM0MztcdFx0XHQgICAgYm9vbCB0b2Rfc3RlcClcbiYjNDM7e1xuJiM0MztcdHU4IGN0cmw7XG4mIzQzO1x0aW50IHJjO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2emxkZXYtXHUwMDNlcGhhc2Vfc3RlcF9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIHBoYXNlIHN0ZXAgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXG4mIzQzO1x0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwsXG4mIzQzO1x0XHRcdFx0ICBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QLFxuJiM0MztcdFx0XHRcdCAgWkxfUE9MTF9QSEFTRV9TVEVQX1RJTUVPVVRfVVMpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0RBVEEsXG4mIzQzO1x0XHRcdCAgICAgICBzdGVwX2N5Y2xlcyk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTE2KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTUFTSywgb3V0X21hc2spO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTlVNQkVSLCAxKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdGN0cmwgPSBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfRFBMTCwgY2gpIHxcbiYjNDM7XHQgICAgICAgRklFTERfUFJFUChaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QLFxuJiM0MztcdFx0XHQgIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfV1JJVEUpO1xuJiM0MztcdGlmICh0b2Rfc3RlcClcbiYjNDM7XHRcdGN0cmwgfD0gWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9UT0RfU1RFUDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLCBjdHJsKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0IC0gY29tbWl0IERQTEwgY2hhbm5lbCBzdGF0ZSBjaGFuZ2VzIHRvIGhhcmR3YXJlXG4gICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3hfZGV2IHN0cnVjdHVyZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaFxuaW5kZXggZGM5YzZkOTViZGVlNy4uOTljM2I3MDg4ZjY3OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXG5AQCAtNSwxMCAmIzQzOzUsMTIgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RkZGVmLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdGltZTY0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7cmVncy5oXCYjMzQ7XG4gXG4mIzQzO3N0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcDtcbiBzdHJ1Y3QgemwzMDczeF9kZXY7XG4gXG4gLyoqXG5AQCAtNDIsNiAmIzQzOzQ0LDIxIEBAIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4LFxuIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfdXBkYXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTtcbiBpbnQgemwzMDczeF9jaGFuX25jb19tb2RlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7XG4gXG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpO1xuJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuJiM0MztcdFx0XHQgIGJvb2wgbmV4dF9oeiwgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxuJiM0MztcdFx0XHQgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKTtcbiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCB0aW1lc3BlYzY0IHRzKTtcbiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuJiM0MztcdFx0XHQgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpO1xuJiM0MztpbnQgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4mIzQzO1x0XHRcdCAgICB1MTYgb3V0X21hc2ssIHMzMiBzdGVwX2N5Y2xlcywgYm9vbCB0b2Rfc3RlcCk7XG4mIzQzO1xuJiM0MztpbnQgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBvZmZzZXQpO1xuJiM0MztcbiYjNDM7aW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucyk7XG4mIzQzO1xuIC8qKlxuICAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfZ2V0IC0gZ2V0IGNhY2hlZCBkZl9vZmZzZXQgdnMgdHJhY2tlZCByZWZlcmVuY2VcbiAgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG5AQCAtMjAwLDYgJiM0MzsyMTcsMjEgQEAgc3RhdGljIGlubGluZSBib29sIHpsMzA3M3hfY2hhbl9tb2RlX2lzX3JlZmxvY2soY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcbiBcdHJldHVybiB6bDMwNzN4X2NoYW5fbW9kZV9nZXQoY2hhbikgPT0gWkxfRFBMTF9NT0RFX1JFRlNFTF9NT0RFX1JFRkxPQ0s7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllIC0gY2hlY2sgaWYgY2hhbm5lbCBtb2RlIHN1cHBvcnRzIFRJRSB3cml0ZVxuJiM0MzsgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG4mIzQzOyAqXG4mIzQzOyAqIFRJRSB3cml0ZSBpcyBzdXBwb3J0ZWQgaW4gQVVUTyBhbmQgUkVGTE9DSyBtb2RlcyByZWdhcmRsZXNzIG9mIGxvY2sgc3RhdGUuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogdHJ1ZSBpZiBUSUUgd3JpdGUgaXMgc3VwcG9ydGVkLCBmYWxzZSBvdGhlcndpc2VcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbFxuJiM0Mzt6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcbiYjNDM7e1xuJiM0MztcdHJldHVybiB6bDMwNzN4X2NoYW5fbW9kZV9pc19hdXRvKGNoYW4pIHx8XG4mIzQzO1x0XHR6bDMwNzN4X2NoYW5fbW9kZV9pc19yZWZsb2NrKGNoYW4pO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIHpsMzA3M3hfY2hhbl9pc19ob19yZWFkeSAtIGNoZWNrIGlmIGhvbGRvdmVyIGlzIHJlYWR5XG4gICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1xuaW5kZXggNWIyZDc3ZjJjMjI4OC4uMjMwZGYwOGUyN2NkMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jXG5AQCAtMzIyLDcgJiM0MzszMjIsNyBAQCBpbnQgemwzMDczeF93cml0ZV91NDgoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IHJlZywgdTY0IHZhbClcbiBpbnQgemwzMDczeF9wb2xsX3plcm9fdTgoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IHJlZyxcbiBcdFx0XHQgdTggbWFzaywgdW5zaWduZWQgaW50IHRpbWVvdXRfdXMpXG4ge1xuLSNkZWZpbmUgWkxfUE9MTF9TTEVFUF9VUyAxMFxuJiM0MztcdHVuc2lnbmVkIGludCBzbGVlcF91cyA9IHRpbWVvdXRfdXMgLyA1MDtcbiBcdHVuc2lnbmVkIGludCB2YWw7XG4gXG4gXHQvKiBDaGVjayB0aGUgcmVnaXN0ZXIgaXMgOGJpdCAqL1xuQEAgLTMzNiw3ICYjNDM7MzM2LDcgQEAgaW50IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsXG4gXHRyZWcgPSBaTF9SRUdfQUREUihyZWcpICYjNDM7IFpMX1JBTkdFX09GRlNFVDtcbiBcbiBcdHJldHVybiByZWdtYXBfcmVhZF9wb2xsX3RpbWVvdXQoemxkZXYtXHUwMDNlcmVnbWFwLCByZWcsIHZhbCwgISh2YWwgXHUwMDI2IG1hc2spLFxuLVx0XHRcdFx0XHRaTF9QT0xMX1NMRUVQX1VTLCB0aW1lb3V0X3VzKTtcbiYjNDM7XHRcdFx0XHRcdHNsZWVwX3VzLCB0aW1lb3V0X3VzKTtcbiB9XG4gXG4gaW50IHpsMzA3M3hfbWJfb3Aoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IG9wX3JlZywgdTggb3BfdmFsLFxuQEAgLTUxMSw2ICYjNDM7NTExLDExIEBAIHpsMzA3M3hfZGV2X3N0YXRlX2ZldGNoKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXG4gXHRpbnQgcmM7XG4gXHR1OCBpO1xuIFxuJiM0MztcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTSyxcbiYjNDM7XHRcdFx0ICAgICAgXHUwMDI2emxkZXYtXHUwMDNlb3V0X3N0ZXBfdGltZV9tYXNrKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgWkwzMDczWF9OVU1fUkVGUzsgaSYjNDM7JiM0MzspIHtcbiBcdFx0cmMgPSB6bDMwNzN4X3JlZl9zdGF0ZV9mZXRjaCh6bGRldiwgaSk7XG4gXHRcdGlmIChyYykge1xuQEAgLTEwMzQsNiAmIzQzOzEwMzksMTQgQEAgaW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXG4gXHQgKiBhbmQvb3IgcG9sbHMgYXJlIHJlcXVpcmVkIHRvIGJlIGRvbmUgYXRvbWljYWxseS5cbiBcdCAqL1xuIFx0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2VtdWx0aW9wX2xvY2spO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgcmMsXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcblwmIzM0Oyk7XG4mIzQzO1x0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2VwaGFzZV9zdGVwX2xvY2spO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgcmMsXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcblwmIzM0Oyk7XG4mIzQzO1x0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2V0aWVfbG9jayk7XG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgcmMsXG4gXHRcdFx0XHQgICAgIFwmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxuXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcbmluZGV4IDc4ZGMyMDhmM2VlYTIuLjY3YzEwZTI1OTUxMTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaFxuQEAgLTI2LDYgJiM0MzsyNiwxMCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsO1xuICNkZWZpbmUgWkxfUE9MTF9IV1JFR19USU1FT1VUX1VTXHQoNTAgKiBVU0VDX1BFUl9NU0VDKVxuICNkZWZpbmUgWkxfUE9MTF9NQl9USU1FT1VUX1VTXHRcdCgzMCAqIFVTRUNfUEVSX01TRUMpXG4gI2RlZmluZSBaTF9QT0xMX1BIQVNFX0VSUl9USU1FT1VUX1VTXHQoNTAgKiBVU0VDX1BFUl9NU0VDKVxuJiM0MzsjZGVmaW5lIFpMX1BPTExfUEhBU0VfU1RFUF9USU1FT1VUX1VTXHQoMzAwMCAqIFVTRUNfUEVSX01TRUMpXG4mIzQzOyNkZWZpbmUgWkxfUE9MTF9USUVfV1JfVElNRU9VVF9VU1x0KDEwMDAgKiBVU0VDX1BFUl9NU0VDKVxuJiM0MzsjZGVmaW5lIFpMX1BPTExfVE9EX1JEX1RJTUVPVVRfVVNcdCgzMCAqIFVTRUNfUEVSX01TRUMpXG4mIzQzOyNkZWZpbmUgWkxfUE9MTF9UT0RfV1JfVElNRU9VVF9VU1x0KDEwMDAgKiBVU0VDX1BFUl9NU0VDKVxuIFxuIGVudW0gemwzMDczeF9mbGFncyB7XG4gXHRaTDMwNzNYX0ZMQUdfUkVGX1BIQVNFX0NPTVBfMzJfQklULFxuQEAgLTU1LDYgJiM0Mzs1OSw4IEBAIHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mbyB7XG4gICogQHJlZ21hcDogcmVnbWFwIHRvIGFjY2VzcyBkZXZpY2UgcmVnaXN0ZXJzXG4gICogQGluZm86IGRldGVjdGVkIGNoaXAgaW5mb1xuICAqIEBtdWx0aW9wX2xvY2s6IHRvIHNlcmlhbGl6ZSBtdWx0aXBsZSByZWdpc3RlciBvcGVyYXRpb25zXG4mIzQzOyAqIEB0aWVfbG9jazogdG8gc2VyaWFsaXplIFRJRSB3cml0ZSBvcGVyYXRpb25zXG4mIzQzOyAqIEBwaGFzZV9zdGVwX2xvY2s6IHRvIHNlcmlhbGl6ZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb25zXG4gICogQHJlZjogYXJyYXkgb2YgaW5wdXQgcmVmZXJlbmNlcyYjMzk7IGludmFyaWFudHNcbiAgKiBAb3V0OiBhcnJheSBvZiBvdXRzJiMzOTsgaW52YXJpYW50c1xuICAqIEBzeW50aDogYXJyYXkgb2Ygc3ludGhzJiMzOTsgaW52YXJpYW50c1xuQEAgLTYzLDYgJiM0Mzs2OSw3IEBAIHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mbyB7XG4gICogQGt3b3JrZXI6IHRocmVhZCBmb3IgcGVyaW9kaWMgd29ya1xuICAqIEB3b3JrOiBwZXJpb2RpYyB3b3JrXG4gICogQGNsb2NrX2lkOiBjbG9jayBpZCBvZiB0aGUgZGV2aWNlXG4mIzQzOyAqIEBvdXRfc3RlcF90aW1lX21hc2s6IG91dHB1dCBzdGVwLXRpbWUgbWFzayAoZGV2aWNlLWdsb2JhbClcbiAgKiBAcGhhc2VfYXZnX2ZhY3RvcjogcGhhc2Ugb2Zmc2V0IG1lYXN1cmVtZW50IGF2ZXJhZ2luZyBmYWN0b3JcbiAgKiBAZnJlcV9tb25pdG9yOiBpcyBmcmVxdWVuY3kgbW9uaXRvciBlbmFibGVkXG4gICovXG5AQCAtNzEsNiAmIzQzOzc4LDggQEAgc3RydWN0IHpsMzA3M3hfZGV2IHtcbiBcdHN0cnVjdCByZWdtYXBcdFx0XHQqcmVnbWFwO1xuIFx0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hpcF9pbmZvXHQqaW5mbztcbiBcdHN0cnVjdCBtdXRleFx0XHRcdG11bHRpb3BfbG9jaztcbiYjNDM7XHRzdHJ1Y3QgbXV0ZXhcdFx0XHR0aWVfbG9jaztcbiYjNDM7XHRzdHJ1Y3QgbXV0ZXhcdFx0XHRwaGFzZV9zdGVwX2xvY2s7XG4gXG4gXHQvKiBJbnZhcmlhbnRzICovXG4gXHRzdHJ1Y3QgemwzMDczeF9yZWZcdHJlZltaTDMwNzNYX05VTV9SRUZTXTtcbkBAIC04Nyw2ICYjNDM7OTYsNyBAQCBzdHJ1Y3QgemwzMDczeF9kZXYge1xuIFxuIFx0LyogUGVyLWNoaXAgcGFyYW1ldGVycyAqL1xuIFx0dTY0XHRcdFx0Y2xvY2tfaWQ7XG4mIzQzO1x0dTE2XHRcdFx0b3V0X3N0ZXBfdGltZV9tYXNrO1xuIFx0dThcdFx0XHRwaGFzZV9hdmdfZmFjdG9yO1xuIFx0Ym9vbFx0XHRcdGZyZXFfbW9uaXRvcjtcbiB9O1xuQEAgLTMwOCw2ICYjNDM7MzE4LDE5IEBAIHpsMzA3M3hfZGV2X291dF9pc19lbmFibGVkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxuIFx0cmV0dXJuIHpsMzA3M3hfc3ludGhfaXNfZW5hYmxlZChzeW50aCkgXHUwMDI2XHUwMDI2IHpsMzA3M3hfb3V0X2lzX2VuYWJsZWQob3V0KTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2Rldl9vdXRfaXNfc3RlcHBlZCAtIGNoZWNrIGlmIG91dHB1dCBpcyBpbiBzdGVwLXRpbWUgbWFza1xuJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbiYjNDM7ICogQGluZGV4OiBvdXRwdXQgaW5kZXhcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIG91dHB1dCBpcyBhZmZlY3RlZCBieSBzdGVwLXRpbWUgb3BlcmF0aW9uc1xuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBib29sXG4mIzQzO3psMzA3M3hfZGV2X291dF9pc19zdGVwcGVkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuICEhKHpsZGV2LVx1MDAzZW91dF9zdGVwX3RpbWVfbWFzayBcdTAwMjYgQklUKGluZGV4KSk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogemwzMDczeF9kZXZfb3V0X2RwbGxfZ2V0IC0gZ2V0IERQTEwgSUQgdGhlIG91dHB1dCBpcyBkcml2ZW4gYnlcbiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcbmluZGV4IDA0ODhhZTZhYzQ4NmMuLmE2ODZkZDUyYmZhYzkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuY1xuQEAgLTIsNiAmIzQzOzIsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnVnLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jb250YWluZXJfb2YuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Rldl9wcmludGsuaFx1MDAzZVxuQEAgLTEzLDYgJiM0MzsxNCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwcmludGYuaFx1MDAzZVxuIFxuQEAgLTIyNzUsNDUgJiM0MzsyMjc3LDM3NSBAQCB6bDMwNzN4X2RwbGxfaW5pdF9maW5lX3BoYXNlX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxuIFx0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19TWU5USF9QSEFTRV9TSElGVF9DVFJMLCAweDAxKTtcbiB9XG4gXG4mIzQzOy8qIE1heGltdW0gZnJlcXVlbmN5IGFkanVzdG1lbnQ6ICYjNDM7LTElIG9mIG5vbWluYWwgaW4gcHBiICovXG4mIzQzOyNkZWZpbmUgWkwzMDczWF9EUExMX1BUUF9NQVhfQURKXHQxMDAwMDAwMFxuJiM0MztcbiAvKipcbi0gKiB6bDMwNzN4X2RwbGxfYWxsb2MgLSBhbGxvY2F0ZSBEUExMIGRldmljZVxuLSAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuLSAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlclxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQgLSByZWFkIGN1cnJlbnQgdGltZSBmcm9tIFRvRCBjb3VudGVyc1xuJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbiYjNDM7ICogQHRzOiB0aW1lc3BlYyB0byBzdG9yZSBjdXJyZW50IHRpbWVcbiYjNDM7ICogQHN0czogb3B0aW9uYWwgc3lzdGVtIHRpbWVzdGFtcCBwYWlyIGZvciBjcm9zcy10aW1lc3RhbXBpbmdcbiAgKlxuLSAqIEFsbG9jYXRlcyBEUExMIGRldmljZSBzdHJ1Y3R1cmUgZm9yIGdpdmVuIERQTEwgY2hhbm5lbC5cbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxuJiM0MztcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkcGxsLVx1MDAzZWRldiwgemxkcGxsLVx1MDAzZWlkLCBmYWxzZSwgdHMsIHN0cyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCAtIHNldCBUb0QgY291bnRlcnMgdG8gZ2l2ZW4gdGltZVxuJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbiYjNDM7ICogQHRzOiB0aW1lc3BlYyB3aXRoIHRpbWUgdG8gc2V0XG4gICpcbi0gKiBSZXR1cm46IHBvaW50ZXIgdG8gRFBMTCBkZXZpY2Ugb24gc3VjY2VzcywgZXJyb3IgcG9pbnRlciBvbiBlcnJvclxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuICAqL1xuLXN0cnVjdCB6bDMwNzN4X2RwbGwgKlxuLXpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcbiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXG4mIzQzO1x0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxuIHtcbi1cdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbDtcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuIFxuLVx0emxkcGxsID0ga3phbGxvY19vYmooKnpsZHBsbCk7XG4tXHRpZiAoIXpsZHBsbClcbi1cdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbiBcbi1cdHpsZHBsbC1cdTAwM2VkZXYgPSB6bGRldjtcbi1cdHpsZHBsbC1cdTAwM2VpZCA9IGNoO1xuLVx0bXV0ZXhfaW5pdChcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4tXHRJTklUX0xJU1RfSEVBRChcdTAwMjZ6bGRwbGwtXHUwMDNlcGlucyk7XG4mIzQzO1x0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkcGxsLVx1MDAzZWRldiwgemxkcGxsLVx1MDAzZWlkLCAqdHMpO1xuJiM0Mzt9XG4gXG4tXHRyZXR1cm4gemxkcGxsO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAgLSBhZGp1c3Qgc3ViLXNlY29uZCB0aW1lIHZpYSBwaGFzZSBzdGVwXG4mIzQzOyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbFxuJiM0MzsgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcyAobXVzdCBiZSB3aXRoaW4gKC1OU0VDX1BFUl9TRUMsXG4mIzQzOyAqICAgICAgICAgTlNFQ19QRVJfU0VDKSlcbiYjNDM7ICpcbiYjNDM7ICogVXNlcyB0aGUgb3V0cHV0IHBoYXNlIHN0ZXAgbWVjaGFuaXNtIHdpdGggdG9kX3N0ZXA9MSB0byBhZGp1c3QgYm90aFxuJiM0MzsgKiB0aGUgb3V0cHV0IGNsb2NrIHBoYXNlIGFuZCB0aGUgVG9EIGNvdW50ZXIgc2ltdWx0YW5lb3VzbHkuIFRoaXMga2VlcHNcbiYjNDM7ICogb3V0cHV0cyBhbmQgVG9EIGNvaGVyZW50LiBPbmx5IHZhbGlkIGZvciBOQ08uXG4mIzQzOyAqXG4mIzQzOyAqIE91dHB1dHMgYXJlIGdyb3VwZWQgYnkgc3ludGhlc2l6ZXIgc2luY2UgdGhlIHBoYXNlIHN0ZXAgdmFsdWUgaXMgaW5cbiYjNDM7ICogc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzLiBUaGUgZmlyc3Qgc3ludGggZ3JvdXAgd2l0aCBlbmFibGVkIG91dHB1dHNcbiYjNDM7ICogdXNlcyB0b2Rfc3RlcCB0byBhZGp1c3QgYm90aCBvdXRwdXRzIGFuZCB0aGUgVG9EIGNvdW50ZXIuIFJlbWFpbmluZ1xuJiM0MzsgKiBncm91cHMgc3RlcCBvdXRwdXRzIG9ubHkuIElmIG5vIHN5bnRoIGhhcyBlbmFibGVkIG91dHB1dHMsIHRoZSBUb0RcbiYjNDM7ICogY291bnRlciBpcyBzdGVwcGVkIGFsb25lIHVzaW5nIGFuIGVtcHR5IG91dHB1dCBtYXNrICh0aGUgRlcgdXNlc1xuJiM0MzsgKiB0aGUgZmlyc3QgZW5hYmxlZCBzeW50aCYjMzk7cyBwZXJpb2QgZm9yIHRoZSBjb252ZXJzaW9uKS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIG5vIHN5bnRocyBhdmFpbGFibGUsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHM2NCBkZWx0YSlcbiYjNDM7e1xuJiM0MztcdHUxNiBzeW50aF9tYXNrW1pMMzA3M1hfTlVNX1NZTlRIU10gPSB7fTtcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgemwzMDczeF9zeW50aCAqc3ludGg7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbjtcbiYjNDM7XHR1MzIgZmlyc3Rfc3ludGhfZnJlcSA9IDA7XG4mIzQzO1x0Ym9vbCB0b2Rfc3RlcHBlZCA9IGZhbHNlO1xuJiM0MztcdHMzMiBzdGVwX2N5Y2xlcztcbiYjNDM7XHR1MzIgc3ludGhfZnJlcTtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1x0dTggaTtcbiYjNDM7XG4mIzQzO1x0LyogQnVpbGQgcGVyLXN5bnRoIG91dHB1dCBtYXNrcyBmcm9tIHJlZ2lzdGVyZWQgb3V0cHV0IHBpbnMgKi9cbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBpbiwgXHUwMDI2emxkcGxsLVx1MDAzZXBpbnMsIGxpc3QpIHtcbiYjNDM7XHRcdHU4IG91dF9pZCwgc3ludGhfaWQ7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHpsMzA3M3hfZHBsbF9pc19pbnB1dF9waW4ocGluKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0b3V0X2lkID0gemwzMDczeF9vdXRwdXRfcGluX291dF9nZXQocGluLVx1MDAzZWlkKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXpsMzA3M3hfZGV2X291dF9pc19zdGVwcGVkKHpsZGV2LCBvdXRfaWQpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRzeW50aF9pZCA9IHpsMzA3M3hfZGV2X291dF9zeW50aF9nZXQoemxkZXYsIG91dF9pZCk7XG4mIzQzO1x0XHRpZiAoc3ludGhfaWQgXHUwMDNlPSBaTDMwNzNYX05VTV9TWU5USFMpIHtcbiYjNDM7XHRcdFx0ZGV2X3dhcm4oemxkZXYtXHUwMDNlZGV2LCBcJiMzNDtVbmV4cGVjdGVkIHN5bnRoIGlkIGZvciBPVVQldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgb3V0X2lkKTtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRzeW50aF9tYXNrW3N5bnRoX2lkXSB8PSBCSVQob3V0X2lkKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFByb2Nlc3MgZWFjaCBzeW50aCBncm91cCAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFpMMzA3M1hfTlVNX1NZTlRIUzsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN5bnRoID0gemwzMDczeF9zeW50aF9zdGF0ZV9nZXQoemxkZXYsIGkpO1xuJiM0MztcdFx0aWYgKCF6bDMwNzN4X3N5bnRoX2lzX2VuYWJsZWQoc3ludGgpIHx8XG4mIzQzO1x0XHQgICAgemwzMDczeF9zeW50aF9kcGxsX2dldChzeW50aCkgIT0gemxkcGxsLVx1MDAzZWlkKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRzeW50aF9mcmVxID0gemwzMDczeF9zeW50aF9mcmVxX2dldChzeW50aCk7XG4mIzQzO1xuJiM0MztcdFx0LyogUmVtZW1iZXIgZmlyc3QgZW5hYmxlZCBzeW50aCBmcmVxIGZvciBUb0Qtb25seSBmYWxsYmFjayAqL1xuJiM0MztcdFx0aWYgKCFmaXJzdF9zeW50aF9mcmVxKVxuJiM0MztcdFx0XHRmaXJzdF9zeW50aF9mcmVxID0gc3ludGhfZnJlcTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXN5bnRoX21hc2tbaV0pXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdC8qIFNhZmUgZm9yIHMzMjogbWF4IHN5bnRoIGZyZXEgaXMgNzUwIE1IeiAqL1xuJiM0MztcdFx0c3RlcF9jeWNsZXMgPSBkaXZfczY0KGRlbHRhICogc3ludGhfZnJlcSwgTlNFQ19QRVJfU0VDKTtcbiYjNDM7XG4mIzQzO1x0XHRyYyA9IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHN5bnRoX21hc2tbaV0sIHN0ZXBfY3ljbGVzLFxuJiM0MztcdFx0XHRcdFx0ICAgICAhdG9kX3N0ZXBwZWQpO1xuJiM0MztcdFx0aWYgKHJjKSB7XG4mIzQzO1x0XHRcdGlmICh0b2Rfc3RlcHBlZCkge1xuJiM0MztcdFx0XHRcdGRldl93YXJuKHpsZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcdCBcJiMzNDtQYXJ0aWFsIHBoYXNlIHN0ZXAgZmFpbHVyZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0cmV0dXJuIHJjO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0dG9kX3N0ZXBwZWQgPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFmaXJzdF9zeW50aF9mcmVxKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHQvKiBObyBlbmFibGVkIG91dHB1dHMgZm91bmQ7IHN0ZXAgVG9EIGNvdW50ZXIgb25seSB1c2luZyB0aGVcbiYjNDM7XHQgKiBmaXJzdCBlbmFibGVkIHN5bnRoJiMzOTtzIHBlcmlvZCAoZW1wdHkgb3V0cHV0IG1hc2spLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghdG9kX3N0ZXBwZWQpIHtcbiYjNDM7XHRcdHN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIGZpcnN0X3N5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7XG4mIzQzO1x0XHRyZXR1cm4gemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCwgMCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBzdGVwX2N5Y2xlcywgdHJ1ZSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gLyoqXG4tICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlXG4tICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXG4mIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSAtIGFkanVzdCBQVFAgY2xvY2sgdGltZVxuJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbiYjNDM7ICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHNcbiAgKlxuLSAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuXG4mIzQzOyAqIEZvciBOQ08sIGxhcmdlIGRlbHRhcyAoXHUwMDNlPSAxIHNlY29uZCkgYXJlIHNwbGl0IGludG8gYSBUb0RcbiYjNDM7ICogcmVhZC1tb2RpZnktd3JpdGUgZm9yIHRoZSBzZWNvbmRzIHBhcnQgYW5kIGFuIG91dHB1dCBwaGFzZSBzdGVwIGZvclxuJiM0MzsgKiB0aGUgc3ViLXNlY29uZCByZW1haW5kZXIuIFN1Yi1zZWNvbmQgZGVsdGFzIHVzZSBwaGFzZSBzdGVwIGRpcmVjdGx5LFxuJiM0MzsgKiBmYWxsaW5nIGJhY2sgdG8gVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIGlmIHBoYXNlIHN0ZXAgaXMgdW5hdmFpbGFibGUuXG4mIzQzOyAqIEluIEFVVE8vUkVGTE9DSyBtb2RlcywgbGFyZ2UgZGVsdGFzIGFyZSBzcGxpdCBpbnRvIFRvRFxuJiM0MzsgKiByZWFkLW1vZGlmeS13cml0ZSBmb3Igc2Vjb25kcyBhbmQgVElFIHdyaXRlIGZvciB0aGUgc3ViLXNlY29uZFxuJiM0MzsgKiByZW1haW5kZXIuIFN1Yi1zZWNvbmQgZGVsdGFzIHVzZSBUSUUgd3JpdGUgZGlyZWN0bHkuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4gICovXG4tdm9pZFxuLXpsMzA3M3hfZHBsbF9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBzNjQgZGVsdGEpXG4ge1xuLVx0V0FSTih6bGRwbGwtXHUwMDNlZHBsbF9kZXYsIFwmIzM0O0RQTEwgZGV2aWNlIGlzIHN0aWxsIHJlZ2lzdGVyZWRcXG5cJiMzNDspO1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxuJiM0MztcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjtcbiYjNDM7XHRib29sIHNlY19hZGp1c3RlZCA9IGZhbHNlO1xuJiM0MztcdHN0cnVjdCB0aW1lc3BlYzY0IHRzO1xuJiM0MztcdGludCByYztcbiBcbi1cdG11dGV4X2Rlc3Ryb3koXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuLVx0a2ZyZWUoemxkcGxsKTtcbiYjNDM7XHRpZiAoIWRlbHRhKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdC8qIE1vZGVzIHdpdGhvdXQgcGhhc2Ugc3RlcCBvciBUSUUgdXNlIHBsYWluIFRvRCBhZGp1c3QgKi9cbiYjNDM7XHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLVx1MDAzZWlkKTtcbiYjNDM7XHRpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIXpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjaGFuKSlcbiYjNDM7XHRcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTtcbiYjNDM7XG4mIzQzO1x0LyogU3BsaXQgb2ZmIHNlY29uZHMgdmlhIFRvRCByZWFkLW1vZGlmeS13cml0ZSBzbyB0aGUgc3ViLXNlY29uZFxuJiM0MztcdCAqIHJlbWFpbmRlciBjYW4gYmUgYXBwbGllZCB0aHJvdWdoIHRoZSBvdXRwdXQtY29oZXJlbnQgbWVjaGFuaXNtXG4mIzQzO1x0ICogKHBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoZGVsdGEgXHUwMDNlPSBOU0VDX1BFUl9TRUMgfHwgZGVsdGEgXHUwMDNjPSAtTlNFQ19QRVJfU0VDKSB7XG4mIzQzO1x0XHRzMzIgcmVtYWluZGVyO1xuJiM0MztcbiYjNDM7XHRcdHRzLnR2X3NlYyA9IGRpdl9zNjRfcmVtKGRlbHRhLCBOU0VDX1BFUl9TRUMsIFx1MDAyNnJlbWFpbmRlcik7XG4mIzQzO1x0XHR0cy50dl9uc2VjID0gMDtcbiYjNDM7XHRcdGRlbHRhID0gcmVtYWluZGVyO1xuJiM0MztcbiYjNDM7XHRcdHJjID0gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCwgdHMpO1xuJiM0MztcdFx0aWYgKHJjKVxuJiM0MztcdFx0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdFx0LyogTm8gc3ViLXNlY29uZCByZW1haW5kZXIsIGRvbmUgKi9cbiYjNDM7XHRcdGlmICghZGVsdGEpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRcdC8qIFdhaXQgZm9yIHRoZSBUb0Qgd3JpdGUgdG8gYmUgYXBwbGllZCBhdCB0aGUgMSBIeiBlZGdlXG4mIzQzO1x0XHQgKiBiZWZvcmUgaXNzdWluZyBwaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSwgc28gdGhlIHBlbmRpbmdcbiYjNDM7XHRcdCAqIFdSX05FWFRfMUhaIGRvZXMgbm90IG92ZXJ3cml0ZSB0aGUgc3ViLXNlY29uZCBhZGp1c3RtZW50LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgemxkcGxsLVx1MDAzZWlkKTtcbiYjNDM7XHRcdGlmIChyYylcbiYjNDM7XHRcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRcdHNlY19hZGp1c3RlZCA9IHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBBcHBseSBzdWItc2Vjb25kIGRlbHRhIHZpYSBwaGFzZSBzdGVwIChOQ08pIG9yIFRJRSB3cml0ZSAqL1xuJiM0MztcdGlmICh6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikpIHtcbiYjNDM7XHRcdHJjID0gemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoemxkcGxsLCBkZWx0YSk7XG4mIzQzO1x0XHRpZiAoIXJjKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cmMgPSB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsIGRlbHRhKTtcbiYjNDM7XHRcdGlmICghcmMpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogUGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUgZmFpbGVkLCBmYWxsIGJhY2sgdG8gVG9EIGFkanVzdCAqL1xuJiM0MztcdHJjID0gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCxcbiYjNDM7XHRcdFx0XHQgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTtcbiYjNDM7XG4mIzQzO1x0LyogSW4gdGhlIHVubGlrZWx5IGV2ZW50IHRoYXQgYm90aCBwaGFzZSBzdGVwL1RJRSB3cml0ZSBhbmQgZmFsbGJhY2tcbiYjNDM7XHQgKiBUb0QgYWRqdXN0IGZhaWwgYWZ0ZXIgc2Vjb25kcyB3ZXJlIGFscmVhZHkgY29tbWl0dGVkLCByZXR1cm5cbiYjNDM7XHQgKiBzdWNjZXNzIHRvIHByZXZlbnQgdGhlIFBUUCBzZXJ2byBmcm9tIHJldHJ5aW5nIHRoZSBmdWxsIGRlbHRhIGFuZFxuJiM0MztcdCAqIGFwcGx5aW5nIHNlY29uZHMgYWdhaW4uIFRoZSBzdWItc2Vjb25kIHJlc2lkdWFsIHdpbGwgc2VsZi1jb3JyZWN0XG4mIzQzO1x0ICogaW4gdGhlIG5leHQgc2Vydm8gY3ljbGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHJjIFx1MDAyNlx1MDAyNiBzZWNfYWRqdXN0ZWQpIHtcbiYjNDM7XHRcdGRldl93YXJuKHpsZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0IFwmIzM0O1N1Yi1zZWNvbmQgYWRqdXN0bWVudCBmYWlsZWQgYWZ0ZXIgc2Vjb25kcyBhcHBsaWVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJjO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lIC0gYWRqdXN0IFBUUCBjbG9jayBmcmVxdWVuY3lcbiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4mIzQzOyAqIEBzY2FsZWRfcHBtOiBmcmVxdWVuY3kgYWRqdXN0bWVudCBpbiBzY2FsZWQgcHBtIChwcG0gKiAyXjE2KVxuJiM0MzsgKlxuJiM0MzsgKiBPbmx5IHN1cHBvcnRlZCBmb3IgTkNPLiBXcml0ZXMgdGhlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgcmVnaXN0ZXIuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjpcbiYjNDM7ICogKiAlMFx0XHRcdC0gc3VjY2VzcyBvciBAc2NhbGVkX3BwbSBpcyB6ZXJvIChuby1vcClcbiYjNDM7ICogKiAlLUVPUE5PVFNVUFBcdC0gTkNPIHBpbiBpcyBub3QgY29ubmVjdGVkIGFuZCBAc2NhbGVkX3BwbSBpcyBub24temVyb1xuJiM0MzsgKiAqIG5lZ2F0aXZlXHRcdC0gb3RoZXIgZXJyb3JcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7emwzMDczeF9kcGxsX3B0cF9hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgbG9uZyBzY2FsZWRfcHBtKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIHB0cF9pbmZvKTtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xuJiM0MztcdHM2NCBvZmZzZXQ7XG4mIzQzO1xuJiM0MztcdC8qIENvbnZlcnQgc2NhbGVkX3BwbSB0byBkZl9vZmZzZXQgaW4gMl4tNDggc3RlcHM6XG4mIzQzO1x0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjMyKSAvIDEwXjZcbiYjNDM7XHQgKlxuJiM0MztcdCAqIFNpbXBsaWZ5IHRvIGF2b2lkIG92ZXJmbG93OlxuJiM0MztcdCAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogMl4yNikgLyA1XjZcbiYjNDM7XHQgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDY3MTA4ODY0KSAvIDE1NjI1XG4mIzQzO1x0ICovXG4mIzQzO1x0b2Zmc2V0ID0gLWRpdl9zNjQoKHM2NClzY2FsZWRfcHBtICogNjcxMDg4NjRMTCwgMTU2MjUpO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRwbGwtXHUwMDNlZGV2LCB6bGRwbGwtXHUwMDNlaWQpO1xuJiM0MztcdGlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKVxuJiM0MztcdFx0cmV0dXJuIHNjYWxlZF9wcG0gPyAtRU9QTk9UU1VQUCA6IDA7XG4mIzQzO1x0aWYgKG9mZnNldCA9PSBjaGFuLVx1MDAzZWRmX29mZnNldClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoemxkcGxsLVx1MDAzZWRldiwgemxkcGxsLVx1MDAzZWlkLCBvZmZzZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSAtIGFkanVzdCBQVFAgY2xvY2sgcGhhc2VcbiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4mIzQzOyAqIEBkZWx0YTogcGhhc2UgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kc1xuJiM0MzsgKlxuJiM0MzsgKiBPbmx5IHN1cHBvcnRlZCBpbiBBVVRPIGFuZCBSRUZMT0NLIG1vZGVzLiBVc2VzIFRJRSB3cml0ZSBmb3JcbiYjNDM7ICogbmFub3NlY29uZCByZXNvbHV0aW9uIHBoYXNlIGFkanVzdG1lbnQuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjpcbiYjNDM7ICogKiAlMFx0XHRcdC0gc3VjY2VzcyBvciBAZGVsdGEgaXMgemVybyAobm8tb3ApXG4mIzQzOyAqICogJS1FT1BOT1RTVVBQXHQtIG1vZGUgZG9lcyBub3Qgc3VwcG9ydCBUSUUgYW5kIEBkZWx0YSBpcyBub24temVyb1xuJiM0MzsgKiAqIG5lZ2F0aXZlXHRcdC0gb3RoZXIgZXJyb3JcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHMzMiBkZWx0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxuJiM0MztcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFkZWx0YSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLVx1MDAzZWlkKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY2hhbikpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdHJldHVybiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsIGRlbHRhKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHMzMlxuJiM0Mzt6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyBfX2Fsd2F5c191bnVzZWQpXG4mIzQzO3tcbiYjNDM7XHQvKiBIVyBsaW1pdHMgVElFIHdyaXRlIHRvICYjNDM7LTEgc2Vjb25kLiBSZXR1cm4gdGhlIGNvbnN0YW50IEhXXG4mIzQzO1x0ICogbGltaXQgYW5kIGxldCBhZGpwaGFzZSBoYW5kbGUgbW9kZS1zcGVjaWZpYyBjaGVja3MuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0dXJuIE5TRUNfUEVSX1NFQyAtIDE7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvID0ge1xuJiM0MztcdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuJiM0MztcdC5tYXhfYWRqXHQ9IFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESixcbiYjNDM7XHQuZ2V0dGltZXg2NFx0PSB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQsXG4mIzQzO1x0LnNldHRpbWU2NFx0PSB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCxcbiYjNDM7XHQuYWRqdGltZVx0PSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUsXG4mIzQzO1x0LmFkamZpbmVcdD0gemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lLFxuJiM0MztcdC5hZGpwaGFzZVx0PSB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlLFxuJiM0MztcdC5nZXRtYXhwaGFzZVx0PSB6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIgLSByZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsXG4mIzQzOyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byByZWdpc3RlciBQVFAgY2xvY2sgZm9yXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4mIzQzO1x0c3RydWN0IHB0cF9jbG9jayAqcHRwX2Nsb2NrO1xuJiM0MztcbiYjNDM7XHRzbnByaW50Zih6bGRwbGwtXHUwMDNlcHRwX2luZm8ubmFtZSwgc2l6ZW9mKHpsZHBsbC1cdTAwM2VwdHBfaW5mby5uYW1lKSxcbiYjNDM7XHRcdCBcJiMzNDslcy1kcGxsJXVcJiMzNDssIGRldl9uYW1lKHpsZGV2LVx1MDAzZWRldiksIHpsZHBsbC1cdTAwM2VpZCk7XG4mIzQzO1xuJiM0MztcdHB0cF9jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcihcdTAwMjZ6bGRwbGwtXHUwMDNlcHRwX2luZm8sIHpsZGV2LVx1MDAzZWRldik7XG4mIzQzO1x0aWYgKElTX0VSUihwdHBfY2xvY2spKSB7XG4mIzQzO1x0XHRkZXZfZXJyKHpsZGV2LVx1MDAzZWRldiwgXCYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgRFBMTCV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR6bGRwbGwtXHUwMDNlaWQpO1xuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIocHRwX2Nsb2NrKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHpsZHBsbC1cdTAwM2VwdHBfY2xvY2sgPSBwdHBfY2xvY2s7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyIC0gdW5yZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsXG4mIzQzOyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byB1bnJlZ2lzdGVyIFBUUCBjbG9jayBmb3JcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIUlTX0VSUl9PUl9OVUxMKHpsZHBsbC1cdTAwM2VwdHBfY2xvY2spKSB7XG4mIzQzO1x0XHRwdHBfY2xvY2tfdW5yZWdpc3Rlcih6bGRwbGwtXHUwMDNlcHRwX2Nsb2NrKTtcbiYjNDM7XHRcdHpsZHBsbC1cdTAwM2VwdHBfY2xvY2sgPSBOVUxMO1xuJiM0MztcdH1cbiB9XG4gXG4gLyoqXG5AQCAtMjM5OCw2ICYjNDM7MjczMCw0OCBAQCB6bDMwNzN4X2RwbGxfcmVmX3N5bmNfcGFpcnNfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kcGxsX2FsbG9jIC0gYWxsb2NhdGUgRFBMTCBkZXZpY2VcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlclxuJiM0MzsgKlxuJiM0MzsgKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogcG9pbnRlciB0byBEUExMIGRldmljZSBvbiBzdWNjZXNzLCBlcnJvciBwb2ludGVyIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgemwzMDczeF9kcGxsICpcbiYjNDM7emwzMDczeF9kcGxsX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsO1xuJiM0MztcbiYjNDM7XHR6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTtcbiYjNDM7XHRpZiAoIXpsZHBsbClcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuJiM0MztcbiYjNDM7XHR6bGRwbGwtXHUwMDNlZGV2ID0gemxkZXY7XG4mIzQzO1x0emxkcGxsLVx1MDAzZWlkID0gY2g7XG4mIzQzO1x0emxkcGxsLVx1MDAzZXB0cF9pbmZvID0gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvO1xuJiM0MztcdG11dGV4X2luaXQoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcdElOSVRfTElTVF9IRUFEKFx1MDAyNnpsZHBsbC1cdTAwM2VwaW5zKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHpsZHBsbDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfZHBsbF9mcmVlIC0gZnJlZSBEUExMIGRldmljZVxuJiM0MzsgKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmVcbiYjNDM7ICpcbiYjNDM7ICogRGVhbGxvY2F0ZXMgZ2l2ZW4gRFBMTCBkZXZpY2UgcHJldmlvdXNseSBhbGxvY2F0ZWQgYnkgQHpsMzA3M3hfZHBsbF9hbGxvYy5cbiYjNDM7ICovXG4mIzQzO3ZvaWRcbiYjNDM7emwzMDczeF9kcGxsX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuJiM0Mzt7XG4mIzQzO1x0V0FSTih6bGRwbGwtXHUwMDNlZHBsbF9kZXYsIFwmIzM0O0RQTEwgZGV2aWNlIGlzIHN0aWxsIHJlZ2lzdGVyZWRcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRtdXRleF9kZXN0cm95KFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRrZnJlZSh6bGRwbGwpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIHpsMzA3M3hfZHBsbF9yZWdpc3RlciAtIHJlZ2lzdGVyIERQTEwgZGV2aWNlIGFuZCBhbGwgaXRzIHBpbnNcbiAgKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmVcbkBAIC0yNDI4LDYgJiM0MzsyODAyLDEzIEBAIHpsMzA3M3hfZHBsbF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4gXHRcdHJldHVybiByYztcbiBcdH1cbiBcbiYjNDM7XHRyYyA9IHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIoemxkcGxsKTtcbiYjNDM7XHRpZiAocmMpIHtcbiYjNDM7XHRcdHpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTtcbiYjNDM7XHRcdHpsMzA3M3hfZHBsbF9kZXZpY2VfdW5yZWdpc3Rlcih6bGRwbGwpO1xuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMjQ0MSw3ICYjNDM7MjgyMiw3IEBAIHpsMzA3M3hfZHBsbF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4gdm9pZFxuIHpsMzA3M3hfZHBsbF91bnJlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiB7XG4tXHQvKiBVbnJlZ2lzdGVyIGFsbCBwaW5zIGFuZCBkcGxsICovXG4mIzQzO1x0emwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHpsZHBsbCk7XG4gXHR6bDMwNzN4X2RwbGxfcGluc191bnJlZ2lzdGVyKHpsZHBsbCk7XG4gXHR6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXG5pbmRleCBmYWViYzQwMmJhMWI3Li45OTMyMjFkYzYzMjQ5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmhcbkBAIC01LDYgJiM0Mzs1LDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kcGxsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7Y29yZS5oXCYjMzQ7XG4gXG5AQCAtMjIsNiAmIzQzOzIzLDggQEBcbiAgKiBAdHlwZTogRFBMTCB0eXBlIChQUFMgb3IgRUVDKVxuICAqIEBsb2NrX3N0YXR1czogbGFzdCBzYXZlZCBEUExMIGxvY2sgc3RhdHVzXG4gICogQHBpbnM6IGxpc3Qgb2YgcGluc1xuJiM0MzsgKiBAcHRwX2luZm86IFBUUCBjbG9jayBpbmZvXG4mIzQzOyAqIEBwdHBfY2xvY2s6IHJlZ2lzdGVyZWQgUFRQIGNsb2NrIChvciBOVUxMKVxuICAqL1xuIHN0cnVjdCB6bDMwNzN4X2RwbGwge1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0XHRsaXN0O1xuQEAgLTM2LDYgJiM0MzszOSw4IEBAIHN0cnVjdCB6bDMwNzN4X2RwbGwge1xuIFx0ZW51bSBkcGxsX3R5cGVcdFx0XHR0eXBlO1xuIFx0ZW51bSBkcGxsX2xvY2tfc3RhdHVzXHRcdGxvY2tfc3RhdHVzO1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0XHRwaW5zO1xuJiM0MztcdHN0cnVjdCBwdHBfY2xvY2tfaW5mb1x0XHRwdHBfaW5mbztcbiYjNDM7XHRzdHJ1Y3QgcHRwX2Nsb2NrXHRcdCpwdHBfY2xvY2s7XG4gfTtcbiBcbiBzdHJ1Y3QgemwzMDczeF9kcGxsICp6bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaFxuaW5kZXggYjcwZWFkN2Q0NDk1Yi4uZjNhNWUxMjE1YWEzNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXG5AQCAtMTc5LDYgJiM0MzsxNzksMjAgQEBcbiAjZGVmaW5lIFpMX0RQTExfREZfUkVBRF9DTURcdFx0XHRHRU5NQVNLKDIsIDApXG4gI2RlZmluZSBaTF9EUExMX0RGX1JFQURfQ01EX0FDQ19JXHRcdDRcbiBcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTFx0XHRcdFpMX1JFRyg1LCAweDMwLCAxKVxuJiM0MzsjZGVmaW5lIFpMX0RQTExfVElFX0NUUkxfT1BcdFx0XHRHRU5NQVNLKDIsIDApXG4mIzQzOyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUF9XUlx0XHRcdDRcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0NUUkxfTUFTS1x0XHRaTF9SRUcoNSwgMHgzMSwgMSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX0NUUkwoX2lkeClcdFx0XHRcdFx0XFxcbiYjNDM7XHRaTF9SRUdfSURYKF9pZHgsIDUsIDB4MzgsIDEsIFpMMzA3M1hfTUFYX0NIQU5ORUxTLCAxKVxuJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfU0VNXHRcdFx0QklUKDQpXG4mIzQzOyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURcdFx0XHRHRU5NQVNLKDMsIDApXG4mIzQzOyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFpcdDFcbiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UXHRcdDhcbiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9ORVhUXzFIWlx0OVxuJiM0MztcbiAjZGVmaW5lIFpMX1JFR19EUExMX01FQVNfQ1RSTFx0XHRcdFpMX1JFRyg1LCAweDUwLCAxKVxuICNkZWZpbmUgWkxfRFBMTF9NRUFTX0NUUkxfRU5cdFx0XHRCSVQoMClcbiAjZGVmaW5lIFpMX0RQTExfTUVBU19DVFJMX0FWR19GQUNUT1JcdFx0R0VOTUFTSyg3LCA0KVxuQEAgLTE5Myw2ICYjNDM7MjA3LDkgQEBcbiBcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAqIFJlZ2lzdGVyIFBhZ2VzIDYtNywgRFBMTCBEYXRhXG4mIzQzOyAqXG4mIzQzOyAqIFBlci1jaGFubmVsIHJlZ2lzdGVycyB3aXRoIHN0cmlkZSAweDIwLiBDaGFubmVscyAwLTMgcmVzaWRlIG9uIHBhZ2UgNixcbiYjNDM7ICogY2hhbm5lbCA0IG9uIHBhZ2UgNy5cbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiBcbiAjZGVmaW5lIFpMX1JFR19EUExMX0RGX09GRlNFVF8wMyhfaWR4KVx0XHRcdFx0XHRcXFxuQEAgLTIwMiw2ICYjNDM7MjE5LDI0IEBAXG4gXHQoKF9pZHgpIFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfREZfT0ZGU0VUXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfREZfT0ZGU0VUXzQpXG4gI2RlZmluZSBaTF9EUExMX0RGX09GRlNFVF9VTktOT1dOXHRTNjRfTUlOXG4gXG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEFfMDMoX2lkeClcdFx0XHRcdFx0XFxcbiYjNDM7XHRaTF9SRUdfSURYKF9pZHgsIDYsIDB4MEMsIDYsIDQsIDB4MjApXG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEFfNFx0XHRcdFpMX1JFRyg3LCAweDBDLCA2KVxuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBKF9pZHgpXHRcdFx0XHRcdFxcXG4mIzQzO1x0KChfaWR4KSBcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RJRV9EQVRBXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVElFX0RBVEFfNClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQ18wMyhfaWR4KVx0XHRcdFx0XHRcXFxuJiM0MztcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgxMiwgNiwgNCwgMHgyMClcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzRcdFx0XHRaTF9SRUcoNywgMHgxMiwgNilcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDKF9pZHgpXHRcdFx0XHRcdFxcXG4mIzQzO1x0KChfaWR4KSBcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RPRF9TRUNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfU0VDXzQpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU18wMyhfaWR4KVx0XHRcdFx0XHRcXFxuJiM0MztcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgxOCwgNCwgNCwgMHgyMClcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlNfNFx0XHRcdFpMX1JFRyg3LCAweDE4LCA0KVxuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OUyhfaWR4KVx0XHRcdFx0XHRcXFxuJiM0MztcdCgoX2lkeCkgXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9UT0RfTlNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfTlNfNClcbiYjNDM7XG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICogUmVnaXN0ZXIgUGFnZSA5LCBTeW50aCBhbmQgT3V0cHV0XG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuQEAgLTIyMSw2ICYjNDM7MjU2LDIzIEBAXG4gI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9FTlx0XHRcdEJJVCgwKVxuICNkZWZpbmUgWkxfT1VUUFVUX0NUUkxfU1lOVEhfU0VMXHRcdEdFTk1BU0soNiwgNClcbiBcbiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1NURVBfVElNRV9NQVNLXHRcdFpMX1JFRyg5LCAweDM2LCAyKVxuJiM0MztcbiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTFx0XHRaTF9SRUcoOSwgMHgzOCwgMSlcbiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX0RQTExcdFx0R0VOTUFTSyg2LCA0KVxuJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVBcdEJJVCgzKVxuJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BcdFx0R0VOTUFTSygxLCAwKVxuJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfTk9ORVx0MFxuJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfUkVTRVRcdDFcbiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1JFQURcdDJcbiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1dSSVRFXHQzXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9OVU1CRVJcdFx0WkxfUkVHKDksIDB4MzksIDEpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLXHRcdFpMX1JFRyg5LCAweDNhLCAyKVxuJiM0MztcbiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfREFUQVx0XHRaTF9SRUcoOSwgMHgzYywgNClcbiYjNDM7XG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgKiBSZWdpc3RlciBQYWdlIDEwLCBSZWYgTWFpbGJveFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDExOjUyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaTDMwNzNYX0kyQyYjMzQ7LAogICAgJiMzNDtaTDMwNzNYX1NQSSYjMzQ7LAogICAgJiMzNDtQVFBfMTU4OF9DTE9DSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3psMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fdG9kX3JlYWQmIzM0OywKICAgICYjMzQ7emwzMDczeF9jaGFuX3RvZF93cml0ZSYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fdGllX3dyaXRlJiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl9waGFzZV9zdGVwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgUFRQIGNsb2NrIHN1cHBvcnQgdG8gdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyICh6bDMwNzN4KS4gVGhlIGRyaXZlciBjYW4gYmUgaW5zdGFudGlhdGVkIHZpYSBJMkMgb3IgU1BJLCBhbmQgdGhlIFBUUCBjbG9jayBpbnRlcmZhY2UgaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdmlhIGAvZGV2L3B0cFhgLiBTeXprYWxsZXIgY2FuIGZ1enogdGhpcyBmdW5jdGlvbmFsaXR5IHVzaW5nIEkyQy9TUEkgZW11bGF0aW9uIGFuZCBQVFAgaW9jdGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTkxZGVjODNhODVkNzA3NDU1MjYwZTkxOGU3NDEyNTdlNDVmOTI5MQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDcgMTE6NTI6NDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZwppbmRleCA1YmJjYTE0MDA1ODEzLi5kYTE3MzFhY2UxNWYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWcKQEAgLTIsNyAmIzQzOzIsNyBAQAogCiBjb25maWcgWkwzMDczWAogCXRyaXN0YXRlICYjMzQ7TWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlcyYjMzQ7IGlmIENPTVBJTEVfVEVTVAotCWRlcGVuZHMgb24gTkVUCiYjNDM7CWRlcGVuZHMgb24gTkVUICZhbXA7JmFtcDsgUFRQXzE1ODhfQ0xPQ0sKIAlzZWxlY3QgRFBMTAogCXNlbGVjdCBORVRfREVWTElOSwogCXNlbGVjdCBSRUdNQVAKQEAgLTE2LDcgJiM0MzsxNiw3IEBAIGNvbmZpZyBaTDMwNzNYCiAKIGNvbmZpZyBaTDMwNzNYX0kyQwogCXRyaXN0YXRlICYjMzQ7STJDIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlcyYjMzQ7Ci0JZGVwZW5kcyBvbiBJMkMgJmFtcDsmYW1wOyBORVQKJiM0MzsJZGVwZW5kcyBvbiBJMkMgJmFtcDsmYW1wOyBORVQgJmFtcDsmYW1wOyBQVFBfMTU4OF9DTE9DSwogCXNlbGVjdCBSRUdNQVBfSTJDCiAJc2VsZWN0IFpMMzA3M1gKIAloZWxwCkBAIC0yOCw3ICYjNDM7MjgsNyBAQCBjb25maWcgWkwzMDczWF9JMkMKIAogY29uZmlnIFpMMzA3M1hfU1BJCiAJdHJpc3RhdGUgJiMzNDtTUEkgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzJiMzNDsKLQlkZXBlbmRzIG9uIE5FVCAmYW1wOyZhbXA7IFNQSQomIzQzOwlkZXBlbmRzIG9uIE5FVCAmYW1wOyZhbXA7IFNQSSAmYW1wOyZhbXA7IFBUUF8xNTg4X0NMT0NLCiAJc2VsZWN0IFJFR01BUF9TUEkKIAlzZWxlY3QgWkwzMDczWAogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYwppbmRleCA0ZWMyY2Y1M2RhZDQ2Li5hZjZjYTQzYzMzNTkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jCkBAIC0zLDYgJiM0MzszLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9jbGVhbnVwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGVsYXkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZXZfcHJpbnRrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zdHJpbmcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwogCkBAIC0xNjIsOCAmIzQzOzE2Myw4IEBAIGludCB6bDMwNzN4X2NoYW5fbmNvX21vZGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KQogICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3hfZGV2IHN0cnVjdHVyZQogICogQGluZGV4OiBEUExMIGNoYW5uZWwgaW5kZXggdG8gZmV0Y2ggc3RhdGUgZm9yCiAgKgotICogUmVhZHMgdGhlIG1vZGVfcmVmc2VsIHJlZ2lzdGVyIGFuZCByZWZlcmVuY2UgcHJpb3JpdHkgcmVnaXN0ZXJzIGZvcgotICogdGhlIGdpdmVuIERQTEwgY2hhbm5lbCBhbmQgc3RvcmVzIHRoZSByYXcgdmFsdWVzIGZvciBsYXRlciB1c2UuCiYjNDM7ICogUmVhZHMgdGhlIG1vZGVfcmVmc2VsLCBzdGF0dXMgYW5kIHJlZmVyZW5jZSBwcmlvcml0eSByZWdpc3RlcnMgZm9yCiYjNDM7ICogdGhlIGdpdmVuIERQTEwgY2hhbm5lbCBhbmQgc3RvcmVzIHRoZSB2YWx1ZXMgZm9yIGxhdGVyIHVzZS4KICAqCiAgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKICAqLwpAQCAtMjM0LDYgJiM0MzsyMzUsMzIyIEBAIGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKnpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwKIAlyZXR1cm4gJmFtcDt6bGRldi0mZ3Q7Y2hhbltpbmRleF07CiB9CiAKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQgLSB3YWl0IGZvciBUb0Qgc2VtYXBob3JlIHRvIGNsZWFyCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKgomIzQzOyAqIFBvbGxzIHRoZSBUb0QgY29udHJvbCByZWdpc3RlciB1bnRpbCB0aGUgc2VtYXBob3JlIGJpdCBpcyBjbGVhcmVkLAomIzQzOyAqIGluZGljYXRpbmcgdGhlIGRldmljZSBoYXMgY29tcGxldGVkIHRoZSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FQlVTWSBpZiBzZW1hcGhvcmUgbm90IGNsZWFyZWQsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCB0aW1lb3V0OwomIzQzOwl1OCB0b2RfY3RybDsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfcmVhZF91OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLCAmYW1wO3RvZF9jdHJsKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlzd2l0Y2ggKEZJRUxEX0dFVChaTF9EUExMX1RPRF9DVFJMX0NNRCwgdG9kX2N0cmwpKSB7CiYjNDM7CWNhc2UgMDoKJiM0MzsJCS8qIE5vIG9wZXJhdGlvbiBwZW5kaW5nIChwb3dlci1vbi9yZXNldCBkZWZhdWx0KSAqLwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CWNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFo6CiYjNDM7CQl0aW1lb3V0ID0gWkxfUE9MTF9UT0RfV1JfVElNRU9VVF9VUzsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX0NVUlJFTlQ6CiYjNDM7CWNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFo6CiYjNDM7CQl0aW1lb3V0ID0gWkxfUE9MTF9UT0RfUkRfVElNRU9VVF9VUzsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJLyogRlcgbmV2ZXIgd3JpdGVzIGNtZCBiaXRzOyBvbmx5IHRoZSBkcml2ZXIgc2V0cyB0aGVtICovCiYjNDM7CQlXQVJOX09OKDEpOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSwKJiM0MzsJCQkJICBaTF9EUExMX1RPRF9DVFJMX1NFTSwgdGltZW91dCk7CiYjNDM7CiYjNDM7CXJldHVybiByYyA9PSAtRVRJTUVET1VUID8gLUVCVVNZIDogcmM7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl90b2RfY3RybCAtIGlzc3VlIFRvRCBjb21tYW5kCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAY21kOiBUb0QgY29tbWFuZCB0byBleGVjdXRlCiYjNDM7ICoKJiM0MzsgKiBXcml0ZXMgdGhlIHNlbWFwaG9yZSBhbmQgY29tbWFuZCB0byBkcGxsX3RvZF9jdHJsLiBUaGUgY2FsbGVyIG11c3QKJiM0MzsgKiBlbnN1cmUgdGhlIGRldmljZSBpcyByZWFkeSAoc2VtYXBob3JlIGNsZWFyKSBiZWZvcmUgY2FsbGluZyBhbmQKJiM0MzsgKiBtdXN0IHdhaXQgZm9yIGNvbXBsZXRpb24gaWYgbmVlZGVkLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHU4IGNtZCkKJiM0Mzt7CiYjNDM7CXJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksCiYjNDM7CQkJCVpMX0RQTExfVE9EX0NUUkxfU0VNIHwgY21kKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9yZWFkIC0gcmVhZCBUb0QgcmVnaXN0ZXJzIGFmdGVyIGlzc3VpbmcgYSBjb21tYW5kCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAbmV4dF9oejogaWYgdHJ1ZSwgcmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIejsgb3RoZXJ3aXNlIHJlYWQgY3VycmVudAomIzQzOyAqIEB0czogdGltZXNwZWMgdG8gc3RvcmUgdGhlIHJlc3VsdAomIzQzOyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nCiYjNDM7ICoKJiM0MzsgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cywKJiM0MzsJCQkgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKQomIzQzO3sKJiM0MzsJdTMyIG5zZWM7CiYjNDM7CXU2NCBzZWM7CiYjNDM7CXU4IGNtZDsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlpZiAobmV4dF9oeikKJiM0MzsJCWNtZCA9IFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaOwomIzQzOwllbHNlCiYjNDM7CQljbWQgPSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UOwomIzQzOwomIzQzOwkvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVG9EIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqLwomIzQzOwlyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXB0cF9yZWFkX3N5c3RlbV9wcmV0cyhzdHMpOwomIzQzOwlyYyA9IHpsMzA3M3hfY2hhbl90b2RfY3RybCh6bGRldiwgY2gsIGNtZCk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwlwdHBfcmVhZF9zeXN0ZW1fcG9zdHRzKHN0cyk7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF9yZWFkX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksICZhbXA7c2VjKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwkvKiBIVyBuYW5vc2Vjb25kcyBhcmUgYWx3YXlzIGluIFswLCBOU0VDX1BFUl9TRUMpIHJhbmdlICovCiYjNDM7CXJjID0gemwzMDczeF9yZWFkX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgJmFtcDtuc2VjKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwl0cy0mZ3Q7dHZfc2VjID0gc2VjOwomIzQzOwl0cy0mZ3Q7dHZfbnNlYyA9IG5zZWM7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlIC0gd3JpdGUgVG9EIHJlZ2lzdGVycyBhbmQgdHJpZ2dlciAxIEh6IHVwZGF0ZQomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQHRzOiB0aW1lIHRvIHNldAomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS4KJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cykKJiM0Mzt7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi8KJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfU0VDKGNoKSwgdHMudHZfc2VjKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCB0cy50dl9uc2VjKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9jdHJsKHpsZGV2LCBjaCwKJiM0MzsJCQkJICAgICBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWik7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0IC0gYXRvbWljIFRvRCByZWFkLW1vZGlmeS13cml0ZSB3aXRoIHJvbGxvdmVyIGd1YXJkCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCB0byBhcHBseQomIzQzOyAqCiYjNDM7ICogUmVhZHMgdGhlIG5leHQtSHogVG9EIGFuZCBjdXJyZW50IFRvRCwgdGhlbiBjaGVja3Mgd2hldGhlciBlbm91Z2ggdGltZQomIzQzOyAqIHJlbWFpbnMgYmVmb3JlIHRoZSBuZXh0IDEgSHogcm9sbG92ZXIgdG8gc2FmZWx5IGNvbXBsZXRlIHRoZSB3cml0ZS4KJiM0MzsgKiBSZS1yZWFkcyBpZiB0aGUgMSBIeiB0aWNrIGNyb3NzZWQgYmV0d2VlbiB0aGUgdHdvIHJlYWRzIG9yIGlmIGxlc3MKJiM0MzsgKiB0aGFuIDIwIG1zIHJlbWFpbnMgYmVmb3JlIHRoZSBuZXh0IHJvbGxvdmVyLiBBcHBsaWVzIEBkZWx0YSBhbmQgd3JpdGVzCiYjNDM7ICogdGhlIHJlc3VsdCBiYWNrLgomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS4KJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFpMX1RPRF9NQVhfUkVUUklFUwkyMAomIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpCiYjNDM7ewomIzQzOwlzdGF0aWMgY29uc3QgbG9uZyB0aHJlc2hvbGRfbnMgPSAyMCAqIE5TRUNfUEVSX01TRUM7CiYjNDM7CXN0cnVjdCB0aW1lc3BlYzY0IHRzX25leHQsIHRzX2N1ciwgZGlmZjsKJiM0MzsJaW50IHJjLCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgWkxfVE9EX01BWF9SRVRSSUVTOyBpJiM0MzsmIzQzOykgewomIzQzOwkJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCB0cnVlLCAmYW1wO3RzX25leHQsIE5VTEwpOwomIzQzOwkJaWYgKHJjKQomIzQzOwkJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJCXJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgZmFsc2UsICZhbXA7dHNfY3VyLCBOVUxMKTsKJiM0MzsJCWlmIChyYykKJiM0MzsJCQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CQkvKiBFbnN1cmUgdGhlIDEgSHogdGljayBkaWQgbm90IGNyb3NzIGJldHdlZW4gdGhlIHR3byByZWFkcwomIzQzOwkJICogYW5kIHRoYXQgZW5vdWdoIG1hcmdpbiByZW1haW5zIHRvIGNvbXBsZXRlIHRoZSB3cml0ZS4KJiM0MzsJCSAqLwomIzQzOwkJZGlmZiA9IHRpbWVzcGVjNjRfc3ViKHRzX25leHQsIHRzX2N1cik7CiYjNDM7CQlpZiAoZGlmZi50dl9zZWMgJmd0OyAwIHx8CiYjNDM7CQkgICAgKCFkaWZmLnR2X3NlYyAmYW1wOyZhbXA7IGRpZmYudHZfbnNlYyAmZ3Q7PSB0aHJlc2hvbGRfbnMpKQomIzQzOwkJCWJyZWFrOwomIzQzOwl9CiYjNDM7CWlmIChpID09IFpMX1RPRF9NQVhfUkVUUklFUykgewomIzQzOwkJZGV2X3dhcm4oemxkZXYtJmd0O2RldiwKJiM0MzsJCQkgJiMzNDtEUExMJXUgVG9EIGFkanVzdCBmYWlsZWQgdG8gZ2V0IHN0YWJsZSBtYXJnaW5cbiYjMzQ7LAomIzQzOwkJCSBjaCk7CiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEFwcGx5IGRlbHRhIHRvIHRoZSBuZXh0LUh6IFRvRCAqLwomIzQzOwl0c19uZXh0ID0gdGltZXNwZWM2NF9hZGQodHNfbmV4dCwgZGVsdGEpOwomIzQzOwlpZiAoIXRpbWVzcGVjNjRfdmFsaWQoJmFtcDt0c19uZXh0KSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXR1cm4gemwzMDczeF9jaGFuX3RvZF93cml0ZSh6bGRldiwgY2gsIHRzX25leHQpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCAtIHdyaXRlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgdG8gaGFyZHdhcmUKJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleAomIzQzOyAqIEBvZmZzZXQ6IGZyZXF1ZW5jeSBvZmZzZXQgaW4gMl4tNDggc3RlcHMKJiM0MzsgKgomIzQzOyAqIENvbnRleHQ6IENhbGxlciBtdXN0IGhvbGQgdGhlIHBlci1EUExMIGxvY2suCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7aW50IHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgb2Zmc2V0KQomIzQzO3sKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9PRkZTRVQoY2gpLCBvZmZzZXQpOwomIzQzOwlpZiAoIXJjKQomIzQzOwkJemxkZXYtJmd0O2NoYW5bY2hdLmRmX29mZnNldCA9IG9mZnNldDsKJiM0MzsKJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlIC0gYWRqdXN0IERQTEwgcGhhc2UgdXNpbmcgVElFIHdyaXRlCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAZGVsdGFfbnM6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMgKG11c3QgYmUgd2l0aGluICYjNDM7LTFzKQomIzQzOyAqCiYjNDM7ICogQ29udmVydHMgbmFub3NlY29uZHMgdG8gVElFIHVuaXRzICgwLjAxIHBzKSBhbmQgd3JpdGVzIFRJRSBkYXRhCiYjNDM7ICogdG8gdGhlIHNwZWNpZmllZCBjaGFubmVsLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7aW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucykKJiM0Mzt7CiYjNDM7CXM2NCB0aWVfZGF0YTsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlpZiAoV0FSTl9PTihkZWx0YV9ucyAmbHQ7PSAtTlNFQ19QRVJfU0VDIHx8IGRlbHRhX25zICZndDs9IE5TRUNfUEVSX1NFQykpCiYjNDM7CQlyZXR1cm4gLUVSQU5HRTsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7emxkZXYtJmd0O3RpZV9sb2NrKTsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRJRSBvcGVyYXRpb24gdG8gY29tcGxldGUgKi8KJiM0MzsJcmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsCiYjNDM7CQkJCSAgWkxfRFBMTF9USUVfQ1RSTF9PUCwKJiM0MzsJCQkJICBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwkvKiBDb252ZXJ0IG5zIHRvIFRJRSB1bml0cyAoMC4wMSBwcyA9IDEwXi0xNCBzKSAqLwomIzQzOwl0aWVfZGF0YSA9IGRlbHRhX25zICogMTAwMDAwTEw7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9EQVRBKGNoKSwgdGllX2RhdGEpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkxfTUFTSywgQklUKGNoKSk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLAomIzQzOwkJCQlaTF9EUExMX1RJRV9DVFJMX09QX1dSKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAgLSBleGVjdXRlIG9uZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb24KJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleAomIzQzOyAqIEBvdXRfbWFzazogYml0bWFzayBvZiBvdXRwdXRzIHRvIHN0ZXAKJiM0MzsgKiBAc3RlcF9jeWNsZXM6IHBoYXNlIHN0ZXAgaW4gc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzCiYjNDM7ICogQHRvZF9zdGVwOiBhbHNvIHN0ZXAgdGhlIFRvRCBjb3VudGVyCiYjNDM7ICoKJiM0MzsgKiBBbGwgbWFza2VkIG91dHB1dHMgbXVzdCB1c2Ugc3ludGhlc2l6ZXJzIG9mIHRoZSBzYW1lIGZyZXF1ZW5jeSBzaW5jZQomIzQzOyAqIHRoZSBzdGVwIHZhbHVlIGlzIGluIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcy4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO2ludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsCiYjNDM7CQkJICAgIGJvb2wgdG9kX3N0ZXApCiYjNDM7ewomIzQzOwl1OCBjdHJsOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3psZGV2LSZndDtwaGFzZV9zdGVwX2xvY2spOwomIzQzOwomIzQzOwkvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgcGhhc2Ugc3RlcCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi8KJiM0MzsJcmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwsCiYjNDM7CQkJCSAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCwKJiM0MzsJCQkJICBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VUyk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0RBVEEsCiYjNDM7CQkJICAgICAgIHN0ZXBfY3ljbGVzKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTE2KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTUFTSywgb3V0X21hc2spOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUiwgMSk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJY3RybCA9IEZJRUxEX1BSRVAoWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9EUExMLCBjaCkgfAomIzQzOwkgICAgICAgRklFTERfUFJFUChaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QLAomIzQzOwkJCSAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURSk7CiYjNDM7CWlmICh0b2Rfc3RlcCkKJiM0MzsJCWN0cmwgfD0gWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9UT0RfU1RFUDsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLCBjdHJsKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQgLSBjb21taXQgRFBMTCBjaGFubmVsIHN0YXRlIGNoYW5nZXMgdG8gaGFyZHdhcmUKICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaAppbmRleCBkYzljNmQ5NWJkZWU3Li45OWMzYjcwODhmNjc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oCkBAIC01LDEwICYjNDM7NSwxMiBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvYml0ZmllbGQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zdGRkZWYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdGltZTY0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtyZWdzLmgmIzM0OwogCiYjNDM7c3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wOwogc3RydWN0IHpsMzA3M3hfZGV2OwogCiAvKioKQEAgLTQyLDYgJiM0Mzs0NCwyMSBAQCBpbnQgemwzMDczeF9jaGFuX3N0YXRlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCwKIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfdXBkYXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTsKIGludCB6bDMwNzN4X2NoYW5fbmNvX21vZGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTsKIAomIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpOwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cywKJiM0MzsJCQkgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKTsKJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cyk7CiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLAomIzQzOwkJCSAgICBzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YSk7CiYjNDM7aW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLAomIzQzOwkJCSAgICB1MTYgb3V0X21hc2ssIHMzMiBzdGVwX2N5Y2xlcywgYm9vbCB0b2Rfc3RlcCk7CiYjNDM7CiYjNDM7aW50IHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgb2Zmc2V0KTsKJiM0MzsKJiM0MztpbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKTsKJiM0MzsKIC8qKgogICogemwzMDczeF9jaGFuX2RmX29mZnNldF9nZXQgLSBnZXQgY2FjaGVkIGRmX29mZnNldCB2cyB0cmFja2VkIHJlZmVyZW5jZQogICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZQpAQCAtMjAwLDYgJiM0MzsyMTcsMjEgQEAgc3RhdGljIGlubGluZSBib29sIHpsMzA3M3hfY2hhbl9tb2RlX2lzX3JlZmxvY2soY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbikKIAlyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfZ2V0KGNoYW4pID09IFpMX0RQTExfTU9ERV9SRUZTRUxfTU9ERV9SRUZMT0NLOwogfQogCiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllIC0gY2hlY2sgaWYgY2hhbm5lbCBtb2RlIHN1cHBvcnRzIFRJRSB3cml0ZQomIzQzOyAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGUKJiM0MzsgKgomIzQzOyAqIFRJRSB3cml0ZSBpcyBzdXBwb3J0ZWQgaW4gQVVUTyBhbmQgUkVGTE9DSyBtb2RlcyByZWdhcmRsZXNzIG9mIGxvY2sgc3RhdGUuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgVElFIHdyaXRlIGlzIHN1cHBvcnRlZCwgZmFsc2Ugb3RoZXJ3aXNlCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBib29sCiYjNDM7emwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pCiYjNDM7ewomIzQzOwlyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfaXNfYXV0byhjaGFuKSB8fAomIzQzOwkJemwzMDczeF9jaGFuX21vZGVfaXNfcmVmbG9jayhjaGFuKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHpsMzA3M3hfY2hhbl9pc19ob19yZWFkeSAtIGNoZWNrIGlmIGhvbGRvdmVyIGlzIHJlYWR5CiAgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMKaW5kZXggNWIyZDc3ZjJjMjI4OC4uMjMwZGYwOGUyN2NkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYwpAQCAtMzIyLDcgJiM0MzszMjIsNyBAQCBpbnQgemwzMDczeF93cml0ZV91NDgoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IHJlZywgdTY0IHZhbCkKIGludCB6bDMwNzN4X3BvbGxfemVyb191OChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLAogCQkJIHU4IG1hc2ssIHVuc2lnbmVkIGludCB0aW1lb3V0X3VzKQogewotI2RlZmluZSBaTF9QT0xMX1NMRUVQX1VTIDEwCiYjNDM7CXVuc2lnbmVkIGludCBzbGVlcF91cyA9IHRpbWVvdXRfdXMgLyA1MDsKIAl1bnNpZ25lZCBpbnQgdmFsOwogCiAJLyogQ2hlY2sgdGhlIHJlZ2lzdGVyIGlzIDhiaXQgKi8KQEAgLTMzNiw3ICYjNDM7MzM2LDcgQEAgaW50IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsCiAJcmVnID0gWkxfUkVHX0FERFIocmVnKSAmIzQzOyBaTF9SQU5HRV9PRkZTRVQ7CiAKIAlyZXR1cm4gcmVnbWFwX3JlYWRfcG9sbF90aW1lb3V0KHpsZGV2LSZndDtyZWdtYXAsIHJlZywgdmFsLCAhKHZhbCAmYW1wOyBtYXNrKSwKLQkJCQkJWkxfUE9MTF9TTEVFUF9VUywgdGltZW91dF91cyk7CiYjNDM7CQkJCQlzbGVlcF91cywgdGltZW91dF91cyk7CiB9CiAKIGludCB6bDMwNzN4X21iX29wKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCBvcF9yZWcsIHU4IG9wX3ZhbCwKQEAgLTUxMSw2ICYjNDM7NTExLDExIEBAIHpsMzA3M3hfZGV2X3N0YXRlX2ZldGNoKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpCiAJaW50IHJjOwogCXU4IGk7CiAKJiM0MzsJcmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1NURVBfVElNRV9NQVNLLAomIzQzOwkJCSAgICAgICZhbXA7emxkZXYtJmd0O291dF9zdGVwX3RpbWVfbWFzayk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKIAlmb3IgKGkgPSAwOyBpICZsdDsgWkwzMDczWF9OVU1fUkVGUzsgaSYjNDM7JiM0MzspIHsKIAkJcmMgPSB6bDMwNzN4X3JlZl9zdGF0ZV9mZXRjaCh6bGRldiwgaSk7CiAJCWlmIChyYykgewpAQCAtMTAzNCw2ICYjNDM7MTAzOSwxNCBAQCBpbnQgemwzMDczeF9kZXZfcHJvYmUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldikKIAkgKiBhbmQvb3IgcG9sbHMgYXJlIHJlcXVpcmVkIHRvIGJlIGRvbmUgYXRvbWljYWxseS4KIAkgKi8KIAlyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi0mZ3Q7ZGV2LCAmYW1wO3psZGV2LSZndDttdWx0aW9wX2xvY2spOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi0mZ3Q7ZGV2LCByYywKJiM0MzsJCQkJICAgICAmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XG4mIzM0Oyk7CiYjNDM7CXJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LSZndDtkZXYsICZhbXA7emxkZXYtJmd0O3BoYXNlX3N0ZXBfbG9jayk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LSZndDtkZXYsIHJjLAomIzQzOwkJCQkgICAgICYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcbiYjMzQ7KTsKJiM0MzsJcmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtJmd0O2RldiwgJmFtcDt6bGRldi0mZ3Q7dGllX2xvY2spOwogCWlmIChyYykKIAkJcmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtJmd0O2RldiwgcmMsCiAJCQkJICAgICAmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XG4mIzM0Oyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmgKaW5kZXggNzhkYzIwOGYzZWVhMi4uNjdjMTBlMjU5NTExOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaApAQCAtMjYsNiAmIzQzOzI2LDEwIEBAIHN0cnVjdCB6bDMwNzN4X2RwbGw7CiAjZGVmaW5lIFpMX1BPTExfSFdSRUdfVElNRU9VVF9VUwkoNTAgKiBVU0VDX1BFUl9NU0VDKQogI2RlZmluZSBaTF9QT0xMX01CX1RJTUVPVVRfVVMJCSgzMCAqIFVTRUNfUEVSX01TRUMpCiAjZGVmaW5lIFpMX1BPTExfUEhBU0VfRVJSX1RJTUVPVVRfVVMJKDUwICogVVNFQ19QRVJfTVNFQykKJiM0MzsjZGVmaW5lIFpMX1BPTExfUEhBU0VfU1RFUF9USU1FT1VUX1VTCSgzMDAwICogVVNFQ19QRVJfTVNFQykKJiM0MzsjZGVmaW5lIFpMX1BPTExfVElFX1dSX1RJTUVPVVRfVVMJKDEwMDAgKiBVU0VDX1BFUl9NU0VDKQomIzQzOyNkZWZpbmUgWkxfUE9MTF9UT0RfUkRfVElNRU9VVF9VUwkoMzAgKiBVU0VDX1BFUl9NU0VDKQomIzQzOyNkZWZpbmUgWkxfUE9MTF9UT0RfV1JfVElNRU9VVF9VUwkoMTAwMCAqIFVTRUNfUEVSX01TRUMpCiAKIGVudW0gemwzMDczeF9mbGFncyB7CiAJWkwzMDczWF9GTEFHX1JFRl9QSEFTRV9DT01QXzMyX0JJVCwKQEAgLTU1LDYgJiM0Mzs1OSw4IEBAIHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mbyB7CiAgKiBAcmVnbWFwOiByZWdtYXAgdG8gYWNjZXNzIGRldmljZSByZWdpc3RlcnMKICAqIEBpbmZvOiBkZXRlY3RlZCBjaGlwIGluZm8KICAqIEBtdWx0aW9wX2xvY2s6IHRvIHNlcmlhbGl6ZSBtdWx0aXBsZSByZWdpc3RlciBvcGVyYXRpb25zCiYjNDM7ICogQHRpZV9sb2NrOiB0byBzZXJpYWxpemUgVElFIHdyaXRlIG9wZXJhdGlvbnMKJiM0MzsgKiBAcGhhc2Vfc3RlcF9sb2NrOiB0byBzZXJpYWxpemUgb3V0cHV0IHBoYXNlIHN0ZXAgb3BlcmF0aW9ucwogICogQHJlZjogYXJyYXkgb2YgaW5wdXQgcmVmZXJlbmNlcyYjMzk7IGludmFyaWFudHMKICAqIEBvdXQ6IGFycmF5IG9mIG91dHMmIzM5OyBpbnZhcmlhbnRzCiAgKiBAc3ludGg6IGFycmF5IG9mIHN5bnRocyYjMzk7IGludmFyaWFudHMKQEAgLTYzLDYgJiM0Mzs2OSw3IEBAIHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mbyB7CiAgKiBAa3dvcmtlcjogdGhyZWFkIGZvciBwZXJpb2RpYyB3b3JrCiAgKiBAd29yazogcGVyaW9kaWMgd29yawogICogQGNsb2NrX2lkOiBjbG9jayBpZCBvZiB0aGUgZGV2aWNlCiYjNDM7ICogQG91dF9zdGVwX3RpbWVfbWFzazogb3V0cHV0IHN0ZXAtdGltZSBtYXNrIChkZXZpY2UtZ2xvYmFsKQogICogQHBoYXNlX2F2Z19mYWN0b3I6IHBoYXNlIG9mZnNldCBtZWFzdXJlbWVudCBhdmVyYWdpbmcgZmFjdG9yCiAgKiBAZnJlcV9tb25pdG9yOiBpcyBmcmVxdWVuY3kgbW9uaXRvciBlbmFibGVkCiAgKi8KQEAgLTcxLDYgJiM0Mzs3OCw4IEBAIHN0cnVjdCB6bDMwNzN4X2RldiB7CiAJc3RydWN0IHJlZ21hcAkJCSpyZWdtYXA7CiAJY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hpcF9pbmZvCSppbmZvOwogCXN0cnVjdCBtdXRleAkJCW11bHRpb3BfbG9jazsKJiM0MzsJc3RydWN0IG11dGV4CQkJdGllX2xvY2s7CiYjNDM7CXN0cnVjdCBtdXRleAkJCXBoYXNlX3N0ZXBfbG9jazsKIAogCS8qIEludmFyaWFudHMgKi8KIAlzdHJ1Y3QgemwzMDczeF9yZWYJcmVmW1pMMzA3M1hfTlVNX1JFRlNdOwpAQCAtODcsNiAmIzQzOzk2LDcgQEAgc3RydWN0IHpsMzA3M3hfZGV2IHsKIAogCS8qIFBlci1jaGlwIHBhcmFtZXRlcnMgKi8KIAl1NjQJCQljbG9ja19pZDsKJiM0MzsJdTE2CQkJb3V0X3N0ZXBfdGltZV9tYXNrOwogCXU4CQkJcGhhc2VfYXZnX2ZhY3RvcjsKIAlib29sCQkJZnJlcV9tb25pdG9yOwogfTsKQEAgLTMwOCw2ICYjNDM7MzE4LDE5IEBAIHpsMzA3M3hfZGV2X291dF9pc19lbmFibGVkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KQogCXJldHVybiB6bDMwNzN4X3N5bnRoX2lzX2VuYWJsZWQoc3ludGgpICZhbXA7JmFtcDsgemwzMDczeF9vdXRfaXNfZW5hYmxlZChvdXQpOwogfQogCiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kZXZfb3V0X2lzX3N0ZXBwZWQgLSBjaGVjayBpZiBvdXRwdXQgaXMgaW4gc3RlcC10aW1lIG1hc2sKJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKJiM0MzsgKiBAaW5kZXg6IG91dHB1dCBpbmRleAomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIG91dHB1dCBpcyBhZmZlY3RlZCBieSBzdGVwLXRpbWUgb3BlcmF0aW9ucwomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbAomIzQzO3psMzA3M3hfZGV2X291dF9pc19zdGVwcGVkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KQomIzQzO3sKJiM0MzsJcmV0dXJuICEhKHpsZGV2LSZndDtvdXRfc3RlcF90aW1lX21hc2sgJmFtcDsgQklUKGluZGV4KSk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB6bDMwNzN4X2Rldl9vdXRfZHBsbF9nZXQgLSBnZXQgRFBMTCBJRCB0aGUgb3V0cHV0IGlzIGRyaXZlbiBieQogICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMKaW5kZXggMDQ4OGFlNmFjNDg2Yy4uYTY4NmRkNTJiZmFjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYwpAQCAtMiw2ICYjNDM7Miw3IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9iaXRzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYml0ZmllbGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY2xlYW51cC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2J1Zy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2NvbnRhaW5lcl9vZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2Rldl9wcmludGsuaCZndDsKQEAgLTEzLDYgJiM0MzsxNCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvbmV0bGluay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BsYXRmb3JtX2RldmljZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3Byb3BlcnR5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3ByaW50Zi5oJmd0OwogCkBAIC0yMjc1LDQ1ICYjNDM7MjI3NywzNzUgQEAgemwzMDczeF9kcGxsX2luaXRfZmluZV9waGFzZV9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldikKIAlyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX1NZTlRIX1BIQVNFX1NISUZUX0NUUkwsIDB4MDEpOwogfQogCiYjNDM7LyogTWF4aW11bSBmcmVxdWVuY3kgYWRqdXN0bWVudDogJiM0MzstMSUgb2Ygbm9taW5hbCBpbiBwcGIgKi8KJiM0MzsjZGVmaW5lIFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESgkxMDAwMDAwMAomIzQzOwogLyoqCi0gKiB6bDMwNzN4X2RwbGxfYWxsb2MgLSBhbGxvY2F0ZSBEUExMIGRldmljZQotICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCi0gKiBAY2g6IERQTEwgY2hhbm5lbCBudW1iZXIKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQgLSByZWFkIGN1cnJlbnQgdGltZSBmcm9tIFRvRCBjb3VudGVycwomIzQzOyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mbwomIzQzOyAqIEB0czogdGltZXNwZWMgdG8gc3RvcmUgY3VycmVudCB0aW1lCiYjNDM7ICogQHN0czogb3B0aW9uYWwgc3lzdGVtIHRpbWVzdGFtcCBwYWlyIGZvciBjcm9zcy10aW1lc3RhbXBpbmcKICAqCi0gKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLAomIzQzOwkJCQkgICAgICAgc3RydWN0IHRpbWVzcGVjNjQgKnRzLAomIzQzOwkJCQkgICAgICAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCwKJiM0MzsJCQkJCQkgICBwdHBfaW5mbyk7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkcGxsLSZndDtkZXYsIHpsZHBsbC0mZ3Q7aWQsIGZhbHNlLCB0cywgc3RzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQgLSBzZXQgVG9EIGNvdW50ZXJzIHRvIGdpdmVuIHRpbWUKJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm8KJiM0MzsgKiBAdHM6IHRpbWVzcGVjIHdpdGggdGltZSB0byBzZXQKICAqCi0gKiBSZXR1cm46IHBvaW50ZXIgdG8gRFBMTCBkZXZpY2Ugb24gc3VjY2VzcywgZXJyb3IgcG9pbnRlciBvbiBlcnJvcgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgogICovCi1zdHJ1Y3QgemwzMDczeF9kcGxsICoKLXpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCkKJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywKJiM0MzsJCQkJICAgICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjNjQgKnRzKQogewotCXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbDsKJiM0MzsJc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsCiYjNDM7CQkJCQkJICAgcHRwX2luZm8pOwogCi0JemxkcGxsID0ga3phbGxvY19vYmooKnpsZHBsbCk7Ci0JaWYgKCF6bGRwbGwpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwogCi0JemxkcGxsLSZndDtkZXYgPSB6bGRldjsKLQl6bGRwbGwtJmd0O2lkID0gY2g7Ci0JbXV0ZXhfaW5pdCgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJmFtcDt6bGRwbGwtJmd0O3BpbnMpOwomIzQzOwlyZXR1cm4gemwzMDczeF9jaGFuX3RvZF93cml0ZSh6bGRwbGwtJmd0O2RldiwgemxkcGxsLSZndDtpZCwgKnRzKTsKJiM0Mzt9CiAKLQlyZXR1cm4gemxkcGxsOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwIC0gYWRqdXN0IHN1Yi1zZWNvbmQgdGltZSB2aWEgcGhhc2Ugc3RlcAomIzQzOyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbAomIzQzOyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzIChtdXN0IGJlIHdpdGhpbiAoLU5TRUNfUEVSX1NFQywKJiM0MzsgKiAgICAgICAgIE5TRUNfUEVSX1NFQykpCiYjNDM7ICoKJiM0MzsgKiBVc2VzIHRoZSBvdXRwdXQgcGhhc2Ugc3RlcCBtZWNoYW5pc20gd2l0aCB0b2Rfc3RlcD0xIHRvIGFkanVzdCBib3RoCiYjNDM7ICogdGhlIG91dHB1dCBjbG9jayBwaGFzZSBhbmQgdGhlIFRvRCBjb3VudGVyIHNpbXVsdGFuZW91c2x5LiBUaGlzIGtlZXBzCiYjNDM7ICogb3V0cHV0cyBhbmQgVG9EIGNvaGVyZW50LiBPbmx5IHZhbGlkIGZvciBOQ08uCiYjNDM7ICoKJiM0MzsgKiBPdXRwdXRzIGFyZSBncm91cGVkIGJ5IHN5bnRoZXNpemVyIHNpbmNlIHRoZSBwaGFzZSBzdGVwIHZhbHVlIGlzIGluCiYjNDM7ICogc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzLiBUaGUgZmlyc3Qgc3ludGggZ3JvdXAgd2l0aCBlbmFibGVkIG91dHB1dHMKJiM0MzsgKiB1c2VzIHRvZF9zdGVwIHRvIGFkanVzdCBib3RoIG91dHB1dHMgYW5kIHRoZSBUb0QgY291bnRlci4gUmVtYWluaW5nCiYjNDM7ICogZ3JvdXBzIHN0ZXAgb3V0cHV0cyBvbmx5LiBJZiBubyBzeW50aCBoYXMgZW5hYmxlZCBvdXRwdXRzLCB0aGUgVG9ECiYjNDM7ICogY291bnRlciBpcyBzdGVwcGVkIGFsb25lIHVzaW5nIGFuIGVtcHR5IG91dHB1dCBtYXNrICh0aGUgRlcgdXNlcwomIzQzOyAqIHRoZSBmaXJzdCBlbmFibGVkIHN5bnRoJiMzOTtzIHBlcmlvZCBmb3IgdGhlIGNvbnZlcnNpb24pLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIG5vIHN5bnRocyBhdmFpbGFibGUsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwsCiYjNDM7CQkJCQkgICAgICAgczY0IGRlbHRhKQomIzQzO3sKJiM0MzsJdTE2IHN5bnRoX21hc2tbWkwzMDczWF9OVU1fU1lOVEhTXSA9IHt9OwomIzQzOwlzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLSZndDtkZXY7CiYjNDM7CWNvbnN0IHN0cnVjdCB6bDMwNzN4X3N5bnRoICpzeW50aDsKJiM0MzsJc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbjsKJiM0MzsJdTMyIGZpcnN0X3N5bnRoX2ZyZXEgPSAwOwomIzQzOwlib29sIHRvZF9zdGVwcGVkID0gZmFsc2U7CiYjNDM7CXMzMiBzdGVwX2N5Y2xlczsKJiM0MzsJdTMyIHN5bnRoX2ZyZXE7CiYjNDM7CWludCByYzsKJiM0MzsJdTggaTsKJiM0MzsKJiM0MzsJLyogQnVpbGQgcGVyLXN5bnRoIG91dHB1dCBtYXNrcyBmcm9tIHJlZ2lzdGVyZWQgb3V0cHV0IHBpbnMgKi8KJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeShwaW4sICZhbXA7emxkcGxsLSZndDtwaW5zLCBsaXN0KSB7CiYjNDM7CQl1OCBvdXRfaWQsIHN5bnRoX2lkOwomIzQzOwomIzQzOwkJaWYgKHpsMzA3M3hfZHBsbF9pc19pbnB1dF9waW4ocGluKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCW91dF9pZCA9IHpsMzA3M3hfb3V0cHV0X3Bpbl9vdXRfZ2V0KHBpbi0mZ3Q7aWQpOwomIzQzOwomIzQzOwkJaWYgKCF6bDMwNzN4X2Rldl9vdXRfaXNfc3RlcHBlZCh6bGRldiwgb3V0X2lkKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCXN5bnRoX2lkID0gemwzMDczeF9kZXZfb3V0X3N5bnRoX2dldCh6bGRldiwgb3V0X2lkKTsKJiM0MzsJCWlmIChzeW50aF9pZCAmZ3Q7PSBaTDMwNzNYX05VTV9TWU5USFMpIHsKJiM0MzsJCQlkZXZfd2Fybih6bGRldi0mZ3Q7ZGV2LCAmIzM0O1VuZXhwZWN0ZWQgc3ludGggaWQgZm9yIE9VVCV1XG4mIzM0OywKJiM0MzsJCQkJIG91dF9pZCk7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CQlzeW50aF9tYXNrW3N5bnRoX2lkXSB8PSBCSVQob3V0X2lkKTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBQcm9jZXNzIGVhY2ggc3ludGggZ3JvdXAgKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IFpMMzA3M1hfTlVNX1NZTlRIUzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN5bnRoID0gemwzMDczeF9zeW50aF9zdGF0ZV9nZXQoemxkZXYsIGkpOwomIzQzOwkJaWYgKCF6bDMwNzN4X3N5bnRoX2lzX2VuYWJsZWQoc3ludGgpIHx8CiYjNDM7CQkgICAgemwzMDczeF9zeW50aF9kcGxsX2dldChzeW50aCkgIT0gemxkcGxsLSZndDtpZCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCXN5bnRoX2ZyZXEgPSB6bDMwNzN4X3N5bnRoX2ZyZXFfZ2V0KHN5bnRoKTsKJiM0MzsKJiM0MzsJCS8qIFJlbWVtYmVyIGZpcnN0IGVuYWJsZWQgc3ludGggZnJlcSBmb3IgVG9ELW9ubHkgZmFsbGJhY2sgKi8KJiM0MzsJCWlmICghZmlyc3Rfc3ludGhfZnJlcSkKJiM0MzsJCQlmaXJzdF9zeW50aF9mcmVxID0gc3ludGhfZnJlcTsKJiM0MzsKJiM0MzsJCWlmICghc3ludGhfbWFza1tpXSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCS8qIFNhZmUgZm9yIHMzMjogbWF4IHN5bnRoIGZyZXEgaXMgNzUwIE1IeiAqLwomIzQzOwkJc3RlcF9jeWNsZXMgPSBkaXZfczY0KGRlbHRhICogc3ludGhfZnJlcSwgTlNFQ19QRVJfU0VDKTsKJiM0MzsKJiM0MzsJCXJjID0gemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoemxkZXYsIHpsZHBsbC0mZ3Q7aWQsCiYjNDM7CQkJCQkgICAgIHN5bnRoX21hc2tbaV0sIHN0ZXBfY3ljbGVzLAomIzQzOwkJCQkJICAgICAhdG9kX3N0ZXBwZWQpOwomIzQzOwkJaWYgKHJjKSB7CiYjNDM7CQkJaWYgKHRvZF9zdGVwcGVkKSB7CiYjNDM7CQkJCWRldl93YXJuKHpsZGV2LSZndDtkZXYsCiYjNDM7CQkJCQkgJiMzNDtQYXJ0aWFsIHBoYXNlIHN0ZXAgZmFpbHVyZVxuJiMzNDspOwomIzQzOwkJCQlyZXR1cm4gMDsKJiM0MzsJCQl9CiYjNDM7CQkJcmV0dXJuIHJjOwomIzQzOwkJfQomIzQzOwkJdG9kX3N0ZXBwZWQgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghZmlyc3Rfc3ludGhfZnJlcSkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJLyogTm8gZW5hYmxlZCBvdXRwdXRzIGZvdW5kOyBzdGVwIFRvRCBjb3VudGVyIG9ubHkgdXNpbmcgdGhlCiYjNDM7CSAqIGZpcnN0IGVuYWJsZWQgc3ludGgmIzM5O3MgcGVyaW9kIChlbXB0eSBvdXRwdXQgbWFzaykuCiYjNDM7CSAqLwomIzQzOwlpZiAoIXRvZF9zdGVwcGVkKSB7CiYjNDM7CQlzdGVwX2N5Y2xlcyA9IGRpdl9zNjQoZGVsdGEgKiBmaXJzdF9zeW50aF9mcmVxLCBOU0VDX1BFUl9TRUMpOwomIzQzOwkJcmV0dXJuIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtJmd0O2lkLCAwLAomIzQzOwkJCQkJICAgICAgIHN0ZXBfY3ljbGVzLCB0cnVlKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogLyoqCi0gKiB6bDMwNzN4X2RwbGxfZnJlZSAtIGZyZWUgRFBMTCBkZXZpY2UKLSAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZQomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSAtIGFkanVzdCBQVFAgY2xvY2sgdGltZQomIzQzOyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mbwomIzQzOyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzCiAgKgotICogRGVhbGxvY2F0ZXMgZ2l2ZW4gRFBMTCBkZXZpY2UgcHJldmlvdXNseSBhbGxvY2F0ZWQgYnkgQHpsMzA3M3hfZHBsbF9hbGxvYy4KJiM0MzsgKiBGb3IgTkNPLCBsYXJnZSBkZWx0YXMgKCZndDs9IDEgc2Vjb25kKSBhcmUgc3BsaXQgaW50byBhIFRvRAomIzQzOyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciB0aGUgc2Vjb25kcyBwYXJ0IGFuZCBhbiBvdXRwdXQgcGhhc2Ugc3RlcCBmb3IKJiM0MzsgKiB0aGUgc3ViLXNlY29uZCByZW1haW5kZXIuIFN1Yi1zZWNvbmQgZGVsdGFzIHVzZSBwaGFzZSBzdGVwIGRpcmVjdGx5LAomIzQzOyAqIGZhbGxpbmcgYmFjayB0byBUb0QgcmVhZC1tb2RpZnktd3JpdGUgaWYgcGhhc2Ugc3RlcCBpcyB1bmF2YWlsYWJsZS4KJiM0MzsgKiBJbiBBVVRPL1JFRkxPQ0sgbW9kZXMsIGxhcmdlIGRlbHRhcyBhcmUgc3BsaXQgaW50byBUb0QKJiM0MzsgKiByZWFkLW1vZGlmeS13cml0ZSBmb3Igc2Vjb25kcyBhbmQgVElFIHdyaXRlIGZvciB0aGUgc3ViLXNlY29uZAomIzQzOyAqIHJlbWFpbmRlci4gU3ViLXNlY29uZCBkZWx0YXMgdXNlIFRJRSB3cml0ZSBkaXJlY3RseS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgogICovCi12b2lkCi16bDMwNzN4X2RwbGxfZnJlZShzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBzNjQgZGVsdGEpCiB7Ci0JV0FSTih6bGRwbGwtJmd0O2RwbGxfZGV2LCAmIzM0O0RQTEwgZGV2aWNlIGlzIHN0aWxsIHJlZ2lzdGVyZWRcbiYjMzQ7KTsKJiM0MzsJc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsCiYjNDM7CQkJCQkJICAgcHRwX2luZm8pOwomIzQzOwlzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLSZndDtkZXY7CiYjNDM7CWNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47CiYjNDM7CWJvb2wgc2VjX2FkanVzdGVkID0gZmFsc2U7CiYjNDM7CXN0cnVjdCB0aW1lc3BlYzY0IHRzOwomIzQzOwlpbnQgcmM7CiAKLQltdXRleF9kZXN0cm95KCZhbXA7emxkcGxsLSZndDtsb2NrKTsKLQlrZnJlZSh6bGRwbGwpOwomIzQzOwlpZiAoIWRlbHRhKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CS8qIE1vZGVzIHdpdGhvdXQgcGhhc2Ugc3RlcCBvciBUSUUgdXNlIHBsYWluIFRvRCBhZGp1c3QgKi8KJiM0MzsJY2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC0mZ3Q7aWQpOwomIzQzOwlpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKQomIzQzOwkJcmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtJmd0O2lkLAomIzQzOwkJCQkJICAgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTsKJiM0MzsKJiM0MzsJLyogU3BsaXQgb2ZmIHNlY29uZHMgdmlhIFRvRCByZWFkLW1vZGlmeS13cml0ZSBzbyB0aGUgc3ViLXNlY29uZAomIzQzOwkgKiByZW1haW5kZXIgY2FuIGJlIGFwcGxpZWQgdGhyb3VnaCB0aGUgb3V0cHV0LWNvaGVyZW50IG1lY2hhbmlzbQomIzQzOwkgKiAocGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUpLgomIzQzOwkgKi8KJiM0MzsJaWYgKGRlbHRhICZndDs9IE5TRUNfUEVSX1NFQyB8fCBkZWx0YSAmbHQ7PSAtTlNFQ19QRVJfU0VDKSB7CiYjNDM7CQlzMzIgcmVtYWluZGVyOwomIzQzOwomIzQzOwkJdHMudHZfc2VjID0gZGl2X3M2NF9yZW0oZGVsdGEsIE5TRUNfUEVSX1NFQywgJmFtcDtyZW1haW5kZXIpOwomIzQzOwkJdHMudHZfbnNlYyA9IDA7CiYjNDM7CQlkZWx0YSA9IHJlbWFpbmRlcjsKJiM0MzsKJiM0MzsJCXJjID0gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC0mZ3Q7aWQsIHRzKTsKJiM0MzsJCWlmIChyYykKJiM0MzsJCQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CQkvKiBObyBzdWItc2Vjb25kIHJlbWFpbmRlciwgZG9uZSAqLwomIzQzOwkJaWYgKCFkZWx0YSkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJCS8qIFdhaXQgZm9yIHRoZSBUb0Qgd3JpdGUgdG8gYmUgYXBwbGllZCBhdCB0aGUgMSBIeiBlZGdlCiYjNDM7CQkgKiBiZWZvcmUgaXNzdWluZyBwaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSwgc28gdGhlIHBlbmRpbmcKJiM0MzsJCSAqIFdSX05FWFRfMUhaIGRvZXMgbm90IG92ZXJ3cml0ZSB0aGUgc3ViLXNlY29uZCBhZGp1c3RtZW50LgomIzQzOwkJICovCiYjNDM7CQlyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgemxkcGxsLSZndDtpZCk7CiYjNDM7CQlpZiAocmMpCiYjNDM7CQkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwkJc2VjX2FkanVzdGVkID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBBcHBseSBzdWItc2Vjb25kIGRlbHRhIHZpYSBwaGFzZSBzdGVwIChOQ08pIG9yIFRJRSB3cml0ZSAqLwomIzQzOwlpZiAoemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKSB7CiYjNDM7CQlyYyA9IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwKHpsZHBsbCwgZGVsdGEpOwomIzQzOwkJaWYgKCFyYykKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJjID0gemwzMDczeF9jaGFuX3RpZV93cml0ZSh6bGRldiwgemxkcGxsLSZndDtpZCwgZGVsdGEpOwomIzQzOwkJaWYgKCFyYykKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBQaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSBmYWlsZWQsIGZhbGwgYmFjayB0byBUb0QgYWRqdXN0ICovCiYjNDM7CXJjID0gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC0mZ3Q7aWQsCiYjNDM7CQkJCSAgICAgbnNfdG9fdGltZXNwZWM2NChkZWx0YSkpOwomIzQzOwomIzQzOwkvKiBJbiB0aGUgdW5saWtlbHkgZXZlbnQgdGhhdCBib3RoIHBoYXNlIHN0ZXAvVElFIHdyaXRlIGFuZCBmYWxsYmFjawomIzQzOwkgKiBUb0QgYWRqdXN0IGZhaWwgYWZ0ZXIgc2Vjb25kcyB3ZXJlIGFscmVhZHkgY29tbWl0dGVkLCByZXR1cm4KJiM0MzsJICogc3VjY2VzcyB0byBwcmV2ZW50IHRoZSBQVFAgc2Vydm8gZnJvbSByZXRyeWluZyB0aGUgZnVsbCBkZWx0YSBhbmQKJiM0MzsJICogYXBwbHlpbmcgc2Vjb25kcyBhZ2Fpbi4gVGhlIHN1Yi1zZWNvbmQgcmVzaWR1YWwgd2lsbCBzZWxmLWNvcnJlY3QKJiM0MzsJICogaW4gdGhlIG5leHQgc2Vydm8gY3ljbGUuCiYjNDM7CSAqLwomIzQzOwlpZiAocmMgJmFtcDsmYW1wOyBzZWNfYWRqdXN0ZWQpIHsKJiM0MzsJCWRldl93YXJuKHpsZGV2LSZndDtkZXYsCiYjNDM7CQkJICYjMzQ7U3ViLXNlY29uZCBhZGp1c3RtZW50IGZhaWxlZCBhZnRlciBzZWNvbmRzIGFwcGxpZWRcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiByYzsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lIC0gYWRqdXN0IFBUUCBjbG9jayBmcmVxdWVuY3kKJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm8KJiM0MzsgKiBAc2NhbGVkX3BwbTogZnJlcXVlbmN5IGFkanVzdG1lbnQgaW4gc2NhbGVkIHBwbSAocHBtICogMl4xNikKJiM0MzsgKgomIzQzOyAqIE9ubHkgc3VwcG9ydGVkIGZvciBOQ08uIFdyaXRlcyB0aGUgZGVsdGEgZnJlcXVlbmN5IG9mZnNldCByZWdpc3Rlci4KJiM0MzsgKgomIzQzOyAqIFJldHVybjoKJiM0MzsgKiAqICUwCQkJLSBzdWNjZXNzIG9yIEBzY2FsZWRfcHBtIGlzIHplcm8gKG5vLW9wKQomIzQzOyAqICogJS1FT1BOT1RTVVBQCS0gTkNPIHBpbiBpcyBub3QgY29ubmVjdGVkIGFuZCBAc2NhbGVkX3BwbSBpcyBub24temVybwomIzQzOyAqICogbmVnYXRpdmUJCS0gb3RoZXIgZXJyb3IKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50CiYjNDM7emwzMDczeF9kcGxsX3B0cF9hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgbG9uZyBzY2FsZWRfcHBtKQomIzQzO3sKJiM0MzsJc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsCiYjNDM7CQkJCQkJICAgcHRwX2luZm8pOwomIzQzOwljb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuOwomIzQzOwlzNjQgb2Zmc2V0OwomIzQzOwomIzQzOwkvKiBDb252ZXJ0IHNjYWxlZF9wcG0gdG8gZGZfb2Zmc2V0IGluIDJeLTQ4IHN0ZXBzOgomIzQzOwkgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDJeMzIpIC8gMTBeNgomIzQzOwkgKgomIzQzOwkgKiBTaW1wbGlmeSB0byBhdm9pZCBvdmVyZmxvdzoKJiM0MzsJICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjI2KSAvIDVeNgomIzQzOwkgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDY3MTA4ODY0KSAvIDE1NjI1CiYjNDM7CSAqLwomIzQzOwlvZmZzZXQgPSAtZGl2X3M2NCgoczY0KXNjYWxlZF9wcG0gKiA2NzEwODg2NExMLCAxNTYyNSk7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CWNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZHBsbC0mZ3Q7ZGV2LCB6bGRwbGwtJmd0O2lkKTsKJiM0MzsJaWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikpCiYjNDM7CQlyZXR1cm4gc2NhbGVkX3BwbSA/IC1FT1BOT1RTVVBQIDogMDsKJiM0MzsJaWYgKG9mZnNldCA9PSBjaGFuLSZndDtkZl9vZmZzZXQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHpsZHBsbC0mZ3Q7ZGV2LCB6bGRwbGwtJmd0O2lkLCBvZmZzZXQpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlIC0gYWRqdXN0IFBUUCBjbG9jayBwaGFzZQomIzQzOyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mbwomIzQzOyAqIEBkZWx0YTogcGhhc2UgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcwomIzQzOyAqCiYjNDM7ICogT25seSBzdXBwb3J0ZWQgaW4gQVVUTyBhbmQgUkVGTE9DSyBtb2Rlcy4gVXNlcyBUSUUgd3JpdGUgZm9yCiYjNDM7ICogbmFub3NlY29uZCByZXNvbHV0aW9uIHBoYXNlIGFkanVzdG1lbnQuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46CiYjNDM7ICogKiAlMAkJCS0gc3VjY2VzcyBvciBAZGVsdGEgaXMgemVybyAobm8tb3ApCiYjNDM7ICogKiAlLUVPUE5PVFNVUFAJLSBtb2RlIGRvZXMgbm90IHN1cHBvcnQgVElFIGFuZCBAZGVsdGEgaXMgbm9uLXplcm8KJiM0MzsgKiAqIG5lZ2F0aXZlCQktIG90aGVyIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczMyIGRlbHRhKQomIzQzO3sKJiM0MzsJc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsCiYjNDM7CQkJCQkJICAgcHRwX2luZm8pOwomIzQzOwlzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLSZndDtkZXY7CiYjNDM7CWNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47CiYjNDM7CiYjNDM7CWlmICghZGVsdGEpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7emxkcGxsLSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJY2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC0mZ3Q7aWQpOwomIzQzOwomIzQzOwlpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjaGFuKSkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoemxkZXYsIHpsZHBsbC0mZ3Q7aWQsIGRlbHRhKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHMzMgomIzQzO3psMzA3M3hfZHBsbF9wdHBfZ2V0bWF4cGhhc2Uoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvIF9fYWx3YXlzX3VudXNlZCkKJiM0Mzt7CiYjNDM7CS8qIEhXIGxpbWl0cyBUSUUgd3JpdGUgdG8gJiM0MzstMSBzZWNvbmQuIFJldHVybiB0aGUgY29uc3RhbnQgSFcKJiM0MzsJICogbGltaXQgYW5kIGxldCBhZGpwaGFzZSBoYW5kbGUgbW9kZS1zcGVjaWZpYyBjaGVja3MuCiYjNDM7CSAqLwomIzQzOwlyZXR1cm4gTlNFQ19QRVJfU0VDIC0gMTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm8gPSB7CiYjNDM7CS5vd25lcgkJPSBUSElTX01PRFVMRSwKJiM0MzsJLm1heF9hZGoJPSBaTDMwNzNYX0RQTExfUFRQX01BWF9BREosCiYjNDM7CS5nZXR0aW1leDY0CT0gemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0LAomIzQzOwkuc2V0dGltZTY0CT0gemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQsCiYjNDM7CS5hZGp0aW1lCT0gemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lLAomIzQzOwkuYWRqZmluZQk9IHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSwKJiM0MzsJLmFkanBoYXNlCT0gemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSwKJiM0MzsJLmdldG1heHBoYXNlCT0gemwzMDczeF9kcGxsX3B0cF9nZXRtYXhwaGFzZSwKJiM0Mzt9OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIgLSByZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsCiYjNDM7ICogQHpsZHBsbDogRFBMTCBjaGFubmVsIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IKJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLSZndDtkZXY7CiYjNDM7CXN0cnVjdCBwdHBfY2xvY2sgKnB0cF9jbG9jazsKJiM0MzsKJiM0MzsJc25wcmludGYoemxkcGxsLSZndDtwdHBfaW5mby5uYW1lLCBzaXplb2YoemxkcGxsLSZndDtwdHBfaW5mby5uYW1lKSwKJiM0MzsJCSAmIzM0OyVzLWRwbGwldSYjMzQ7LCBkZXZfbmFtZSh6bGRldi0mZ3Q7ZGV2KSwgemxkcGxsLSZndDtpZCk7CiYjNDM7CiYjNDM7CXB0cF9jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcigmYW1wO3psZHBsbC0mZ3Q7cHRwX2luZm8sIHpsZGV2LSZndDtkZXYpOwomIzQzOwlpZiAoSVNfRVJSKHB0cF9jbG9jaykpIHsKJiM0MzsJCWRldl9lcnIoemxkZXYtJmd0O2RldiwgJiMzNDtGYWlsZWQgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBEUExMJXVcbiYjMzQ7LAomIzQzOwkJCXpsZHBsbC0mZ3Q7aWQpOwomIzQzOwkJcmV0dXJuIFBUUl9FUlIocHRwX2Nsb2NrKTsKJiM0MzsJfQomIzQzOwomIzQzOwl6bGRwbGwtJmd0O3B0cF9jbG9jayA9IHB0cF9jbG9jazsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlciAtIHVucmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBhIERQTEwgY2hhbm5lbAomIzQzOyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byB1bnJlZ2lzdGVyIFBUUCBjbG9jayBmb3IKJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCB6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQomIzQzO3sKJiM0MzsJaWYgKCFJU19FUlJfT1JfTlVMTCh6bGRwbGwtJmd0O3B0cF9jbG9jaykpIHsKJiM0MzsJCXB0cF9jbG9ja191bnJlZ2lzdGVyKHpsZHBsbC0mZ3Q7cHRwX2Nsb2NrKTsKJiM0MzsJCXpsZHBsbC0mZ3Q7cHRwX2Nsb2NrID0gTlVMTDsKJiM0MzsJfQogfQogCiAvKioKQEAgLTIzOTgsNiAmIzQzOzI3MzAsNDggQEAgemwzMDczeF9kcGxsX3JlZl9zeW5jX3BhaXJzX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9hbGxvYyAtIGFsbG9jYXRlIERQTEwgZGV2aWNlCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyCiYjNDM7ICoKJiM0MzsgKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHBvaW50ZXIgdG8gRFBMTCBkZXZpY2Ugb24gc3VjY2VzcywgZXJyb3IgcG9pbnRlciBvbiBlcnJvcgomIzQzOyAqLwomIzQzO3N0cnVjdCB6bDMwNzN4X2RwbGwgKgomIzQzO3psMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbDsKJiM0MzsKJiM0MzsJemxkcGxsID0ga3phbGxvY19vYmooKnpsZHBsbCk7CiYjNDM7CWlmICghemxkcGxsKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiYjNDM7CiYjNDM7CXpsZHBsbC0mZ3Q7ZGV2ID0gemxkZXY7CiYjNDM7CXpsZHBsbC0mZ3Q7aWQgPSBjaDsKJiM0MzsJemxkcGxsLSZndDtwdHBfaW5mbyA9IHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mbzsKJiM0MzsJbXV0ZXhfaW5pdCgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiYjNDM7CUlOSVRfTElTVF9IRUFEKCZhbXA7emxkcGxsLSZndDtwaW5zKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsZHBsbDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlCiYjNDM7ICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlCiYjNDM7ICoKJiM0MzsgKiBEZWFsbG9jYXRlcyBnaXZlbiBEUExMIGRldmljZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBieSBAemwzMDczeF9kcGxsX2FsbG9jLgomIzQzOyAqLwomIzQzO3ZvaWQKJiM0Mzt6bDMwNzN4X2RwbGxfZnJlZShzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpCiYjNDM7ewomIzQzOwlXQVJOKHpsZHBsbC0mZ3Q7ZHBsbF9kZXYsICYjMzQ7RFBMTCBkZXZpY2UgaXMgc3RpbGwgcmVnaXN0ZXJlZFxuJiMzNDspOwomIzQzOwomIzQzOwltdXRleF9kZXN0cm95KCZhbXA7emxkcGxsLSZndDtsb2NrKTsKJiM0MzsJa2ZyZWUoemxkcGxsKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHpsMzA3M3hfZHBsbF9yZWdpc3RlciAtIHJlZ2lzdGVyIERQTEwgZGV2aWNlIGFuZCBhbGwgaXRzIHBpbnMKICAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZQpAQCAtMjQyOCw2ICYjNDM7MjgwMiwxMyBAQCB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQogCQlyZXR1cm4gcmM7CiAJfQogCiYjNDM7CXJjID0gemwzMDczeF9kcGxsX3B0cF9yZWdpc3Rlcih6bGRwbGwpOwomIzQzOwlpZiAocmMpIHsKJiM0MzsJCXpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTsKJiM0MzsJCXpsMzA3M3hfZHBsbF9kZXZpY2VfdW5yZWdpc3Rlcih6bGRwbGwpOwomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI0NDEsNyAmIzQzOzI4MjIsNyBAQCB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQogdm9pZAogemwzMDczeF9kcGxsX3VucmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQogewotCS8qIFVucmVnaXN0ZXIgYWxsIHBpbnMgYW5kIGRwbGwgKi8KJiM0MzsJemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHpsZHBsbCk7CiAJemwzMDczeF9kcGxsX3BpbnNfdW5yZWdpc3Rlcih6bGRwbGwpOwogCXpsMzA3M3hfZHBsbF9kZXZpY2VfdW5yZWdpc3Rlcih6bGRwbGwpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oCmluZGV4IGZhZWJjNDAyYmExYjcuLjk5MzIyMWRjNjMyNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmgKQEAgLTUsNiAmIzQzOzUsNyBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvZHBsbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2xpc3QuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2NvcmUuaCYjMzQ7CiAKQEAgLTIyLDYgJiM0MzsyMyw4IEBACiAgKiBAdHlwZTogRFBMTCB0eXBlIChQUFMgb3IgRUVDKQogICogQGxvY2tfc3RhdHVzOiBsYXN0IHNhdmVkIERQTEwgbG9jayBzdGF0dXMKICAqIEBwaW5zOiBsaXN0IG9mIHBpbnMKJiM0MzsgKiBAcHRwX2luZm86IFBUUCBjbG9jayBpbmZvCiYjNDM7ICogQHB0cF9jbG9jazogcmVnaXN0ZXJlZCBQVFAgY2xvY2sgKG9yIE5VTEwpCiAgKi8KIHN0cnVjdCB6bDMwNzN4X2RwbGwgewogCXN0cnVjdCBsaXN0X2hlYWQJCWxpc3Q7CkBAIC0zNiw2ICYjNDM7MzksOCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsIHsKIAllbnVtIGRwbGxfdHlwZQkJCXR5cGU7CiAJZW51bSBkcGxsX2xvY2tfc3RhdHVzCQlsb2NrX3N0YXR1czsKIAlzdHJ1Y3QgbGlzdF9oZWFkCQlwaW5zOwomIzQzOwlzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8JCXB0cF9pbmZvOwomIzQzOwlzdHJ1Y3QgcHRwX2Nsb2NrCQkqcHRwX2Nsb2NrOwogfTsKIAogc3RydWN0IHpsMzA3M3hfZHBsbCAqemwzMDczeF9kcGxsX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaAppbmRleCBiNzBlYWQ3ZDQ0OTViLi5mM2E1ZTEyMTVhYTM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oCkBAIC0xNzksNiAmIzQzOzE3OSwyMCBAQAogI2RlZmluZSBaTF9EUExMX0RGX1JFQURfQ01ECQkJR0VOTUFTSygyLCAwKQogI2RlZmluZSBaTF9EUExMX0RGX1JFQURfQ01EX0FDQ19JCQk0CiAKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9DVFJMCQkJWkxfUkVHKDUsIDB4MzAsIDEpCiYjNDM7I2RlZmluZSBaTF9EUExMX1RJRV9DVFJMX09QCQkJR0VOTUFTSygyLCAwKQomIzQzOyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUF9XUgkJCTQKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0sJCVpMX1JFRyg1LCAweDMxLCAxKQomIzQzOwomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX0NUUkwoX2lkeCkJCQkJCVwKJiM0MzsJWkxfUkVHX0lEWChfaWR4LCA1LCAweDM4LCAxLCBaTDMwNzNYX01BWF9DSEFOTkVMUywgMSkKJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfU0VNCQkJQklUKDQpCiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRAkJCUdFTk1BU0soMywgMCkKJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaCTEKJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX0NVUlJFTlQJCTgKJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaCTkKJiM0MzsKICNkZWZpbmUgWkxfUkVHX0RQTExfTUVBU19DVFJMCQkJWkxfUkVHKDUsIDB4NTAsIDEpCiAjZGVmaW5lIFpMX0RQTExfTUVBU19DVFJMX0VOCQkJQklUKDApCiAjZGVmaW5lIFpMX0RQTExfTUVBU19DVFJMX0FWR19GQUNUT1IJCUdFTk1BU0soNywgNCkKQEAgLTE5Myw2ICYjNDM7MjA3LDkgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFJlZ2lzdGVyIFBhZ2VzIDYtNywgRFBMTCBEYXRhCiYjNDM7ICoKJiM0MzsgKiBQZXItY2hhbm5lbCByZWdpc3RlcnMgd2l0aCBzdHJpZGUgMHgyMC4gQ2hhbm5lbHMgMC0zIHJlc2lkZSBvbiBwYWdlIDYsCiYjNDM7ICogY2hhbm5lbCA0IG9uIHBhZ2UgNy4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjZGVmaW5lIFpMX1JFR19EUExMX0RGX09GRlNFVF8wMyhfaWR4KQkJCQkJXApAQCAtMjAyLDYgJiM0MzsyMTksMjQgQEAKIAkoKF9pZHgpICZsdDsgNCA/IFpMX1JFR19EUExMX0RGX09GRlNFVF8wMyhfaWR4KSA6IFpMX1JFR19EUExMX0RGX09GRlNFVF80KQogI2RlZmluZSBaTF9EUExMX0RGX09GRlNFVF9VTktOT1dOCVM2NF9NSU4KIAomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEFfMDMoX2lkeCkJCQkJCVwKJiM0MzsJWkxfUkVHX0lEWChfaWR4LCA2LCAweDBDLCA2LCA0LCAweDIwKQomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEFfNAkJCVpMX1JFRyg3LCAweDBDLCA2KQomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEEoX2lkeCkJCQkJCVwKJiM0MzsJKChfaWR4KSAmbHQ7IDQgPyBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RJRV9EQVRBXzQpCiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpCQkJCQlcCiYjNDM7CVpMX1JFR19JRFgoX2lkeCwgNiwgMHgxMiwgNiwgNCwgMHgyMCkKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUNfNAkJCVpMX1JFRyg3LCAweDEyLCA2KQomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQyhfaWR4KQkJCQkJXAomIzQzOwkoKF9pZHgpICZsdDsgNCA/IFpMX1JFR19EUExMX1RPRF9TRUNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfU0VDXzQpCiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlNfMDMoX2lkeCkJCQkJCVwKJiM0MzsJWkxfUkVHX0lEWChfaWR4LCA2LCAweDE4LCA0LCA0LCAweDIwKQomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TXzQJCQlaTF9SRUcoNywgMHgxOCwgNCkKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OUyhfaWR4KQkJCQkJXAomIzQzOwkoKF9pZHgpICZsdDsgNCA/IFpMX1JFR19EUExMX1RPRF9OU18wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RPRF9OU180KQomIzQzOwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBSZWdpc3RlciBQYWdlIDksIFN5bnRoIGFuZCBPdXRwdXQKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTIyMSw2ICYjNDM7MjU2LDIzIEBACiAjZGVmaW5lIFpMX09VVFBVVF9DVFJMX0VOCQkJQklUKDApCiAjZGVmaW5lIFpMX09VVFBVVF9DVFJMX1NZTlRIX1NFTAkJR0VOTUFTSyg2LCA0KQogCiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1NURVBfVElNRV9NQVNLCQlaTF9SRUcoOSwgMHgzNiwgMikKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMCQlaTF9SRUcoOSwgMHgzOCwgMSkKJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfRFBMTAkJR0VOTUFTSyg2LCA0KQomIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9UT0RfU1RFUAlCSVQoMykKJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AJCUdFTk1BU0soMSwgMCkKJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfTk9ORQkwCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1JFU0VUCTEKJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfUkVBRAkyCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1dSSVRFCTMKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9OVU1CRVIJCVpMX1JFRyg5LCAweDM5LCAxKQomIzQzOwomIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX01BU0sJCVpMX1JFRyg5LCAweDNhLCAyKQomIzQzOwomIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0RBVEEJCVpMX1JFRyg5LCAweDNjLCA0KQomIzQzOwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFJlZ2lzdGVyIFBhZ2UgMTAsIFJlZiBNYWlsYm94CiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxMTIKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNjA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWNoaW5nIHRoZSBQVFAgQ2xvY2sgU3VwcG9ydCBpbiB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBEcml2ZXIqKgoKT2theSwgc28gd2UgaGF2ZSB0aGlzIHBhdGNoIGFkZGluZyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIgKGBkcml2ZXJzL2RwbGwvemwzMDczeC9gKS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiB3ZSBhY3R1YWxseSAqcmVhY2gqIHRoaXMgY29kZSBhbmQgd2hhdCYjMzk7cyBpbnZvbHZlZCBpbiBnZXR0aW5nIGl0IHJ1bm5pbmc/CgpGaXJzdCwgdGhlIHBhdGNoIG1vZGlmaWVzIGBLY29uZmlnYCB0byBkZXBlbmQgb24gYFBUUF8xNTg4X0NMT0NLYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEl0JiMzOTtzIGFkZGluZyBmdW5jdGlvbnMgdG8gYGNoYW4uY2AgZm9yIFRpbWUgb2YgRGF5IChUb0QpIHJlYWQvd3JpdGUvYWRqdXN0LCBUSUUgd3JpdGUsIGFuZCBwaGFzZSBzdGVwcGluZywgYW5kIGl0IHJlZ2lzdGVycyBhIFBUUCBjbG9jayBpbiBgZHBsbC5jYCB1c2luZyBgcHRwX2Nsb2NrX3JlZ2lzdGVyYC4gVGhhdCYjMzk7cyBhIHByZXR0eSBzaWduaWZpY2FudCBhZGRpdGlvbiDigJMgaXQmIzM5O3MgZGVmaW5pdGVseSBzb21ldGhpbmcgd29ydGggY29uc2lkZXJpbmcgZm9yIGZ1enppbmcuCgpUaGUgZHJpdmVyIGlzIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRSBkZXZpY2VzLCBhbmQgaXQgdXNlcyBJMkMvU1BJLiAgQ2FuIHdlIGdldCB0byB0aGlzIGluIFFFTVUsIG9yIGFueSBvdGhlciB2aXJ0dWFsIGVudmlyb25tZW50PyAgSTJDL1NQSSBkcml2ZXJzIGNhbiB1c3VhbGx5IGJlIGluc3RhbnRpYXRlZCB2aWEgZGV2aWNlIHRyZWUsIHN5c2ZzLCBvciBldmVuIGFuIGVtdWxhdG9yLiAgRXZlbiB3aXRob3V0IGFuIGVtdWxhdG9yLCB3ZSBjYW4gcHJvYmUgaXQgdmlhIHN5c2ZzLiBJIGNhbiwgZm9yIGV4YW1wbGUsIGluc3RhbnRpYXRlIHRoZSBJMkMgZGV2aWNlIHZpYSBgZWNobyB6bDMwNzN4IDB4MTAgJmd0OyAvc3lzL2J1cy9pMmMvZGV2aWNlcy9pMmMtMC9uZXdfZGV2aWNlYC4gV2FpdCBhIHNlY29uZCEgU3l6a2FsbGVyISBTeXprYWxsZXIgY2FuIGZ1enogSTJDIGFuZCBTUEkgZGV2aWNlcyB1c2luZyBgc3l6X2kyY2AgYW5kIGBzeXpfc3BpYCBvciBieSBpbnN0YW50aWF0aW5nIHRoZW0hICBUaGF0JiMzOTtzIHBlcmZlY3QuICBTbywgdGhlIGFkZGVkIFBUUCBjbG9jayBpbnRlcmZhY2UgaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdmlhIGAvZGV2L3B0cFhgLiBTeXprYWxsZXIgY2FuIGVhc2lseSBpbnRlcmFjdCB3aXRoIHRoYXQuICBUaGUgZHJpdmVyIGl0c2VsZiBsZXZlcmFnZXMgcmVnbWFwIG92ZXIgSTJDL1NQSS4KCkxldCYjMzk7cyBkaXZlIGludG8gdGhlIHNwZWNpZmljcyBvZiB0aGlzIFBUUCBjbG9jayBpbnRlcmZhY2UuIFRoZSBjb3JlIGZ1bmN0aW9ucyBJIG5lZWQgdG8gZm9jdXMgb24gYXJlOgoKKiAgIGB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjRgCiogICBgemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjRgCiogICBgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lYAoqICAgYHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZWAKKiAgIGB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlYAoqICAgYHpsMzA3M3hfY2hhbl90b2RfcmVhZGAKKiAgIGB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlYAoqICAgYHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0YAoqICAgYHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0YAoqICAgYHpsMzA3M3hfY2hhbl90aWVfd3JpdGVgCiogICBgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXBgCgpUaGVzZSBmdW5jdGlvbnMgYXJlIGhvb2tlZCBpbnRvIGBwdHBfY2xvY2tfaW5mb2AsIHdoaWNoIGlzIGEgc3RhbmRhcmQgYXBwcm9hY2guICBUaGUgYHB0cF9jbG9ja19pbmZvYCBzdHJ1Y3QgaXRzZWxmIGxvb2tzIG5vcm1hbCwgc3RhbmRhcmQgUFRQIGNsb2NrIG9wcy4KCldlIG5lZWQgdG8gbWFrZSBzdXJlIHdlJiMzOTt2ZSBnb3QgYWxsIHRoZSBuZWNlc3NhcnkgY29uZmlncyBlbmFibGVkLiBJdCBsb29rcyBsaWtlIHdlIG5lZWQgYFpMMzA3M1hfSTJDYCwgYFpMMzA3M1hfU1BJYCwgYFBUUF8xNTg4X0NMT0NLYCwgYERQTExgLCBgSTJDYCwgYFNQSWAsIGFuZCBgTkVUYC4gIEEgcXVpY2sgbG9vayBhdCBgZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ2AgY29uZmlybXMgdGhlc2UgZGVwZW5kZW5jaWVzLiBgWkwzMDczWGAgaXMgc2VsZWN0ZWQgYnkgYm90aCBgWkwzMDczWF9JMkNgIGFuZCBgWkwzMDczWF9TUElgLCBzbyBlbmFibGluZyBlaXRoZXIgb2YgdGhlbSB3aWxsIGVuYWJsZSB0aGUgd2hvbGUgdGhpbmcuCgpHaXZlbiB0aGF0IFN5emthbGxlciBjYW4gZW11bGF0ZSBJMkMgYW5kIFNQSSBkZXZpY2VzLCB3ZSBoYXZlIGEgY2xlYXIgcGF0aCB0byByZWFjaCB0aGUgY29kZS4gVGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyBub3cgYXJlIHRoZSBQVFAgY2xvY2sgZnVuY3Rpb25zLCBhcyB3ZWxsIGFzIHRoZSBjaGFubmVsIGZ1bmN0aW9ucyB0aGF0IGFmZmVjdCBUb0QsIHBoYXNlIGFkanVzdG1lbnRzLCBhbmQgVElFIHdyaXRlcy4gSSYjMzk7bSBnb2luZyB0byBydW4gYSBxdWljayBncmVwIHRvIG1ha2Ugc3VyZSB0aG9zZSBmdW5jdGlvbnMgYXJlIGRlZmluaXRlbHkgdGhlcmUgYW5kIGRlZmluZWQsIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIGJlZm9yZSBnb2luZyBhbnkgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTIzMTA9c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTIzMjEtLyoqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6MjMyMjogKiB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCAtIGFkanVzdCBzdWItc2Vjb25kIHRpbWUgdmlhIHBoYXNlIHN0ZXBcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0yMzIzLSAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0yMzM5LSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjIzNDA6c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjM0MS1cdFx0XHRcdFx0ICAgICAgIHM2NCBkZWx0YSlcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjQyMy0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoyNDI0OiAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSAtIGFkanVzdCBQVFAgY2xvY2sgdGltZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTI0MjUtICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTI0MzctICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6MjQzODpzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHM2NCBkZWx0YSlcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0yNDM5LXtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjQ5MS1cdGlmICh6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikpIHtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoyNDkyOlx0XHRyYyA9IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwKHpsZHBsbCwgZGVsdGEpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTI0OTMtXHRcdGlmICghcmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTI2MDI9c3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm8gPSB7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTI2MDYtXHQuc2V0dGltZTY0XHQ9IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0LFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjI2MDc6XHQuYWRqdGltZVx0PSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjYwOC1cdC5hZGpmaW5lXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTUzNAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyB0aGUgWkwzMDczWCBDaGFubmVsIFRpbWUtb2YtRGF5IEFkanVzdG1lbnQgRnVuY3Rpb24qKgoKUmlnaHQsIHRoZSBidWlsZGluZyBibG9ja3MgYXJlIGluIHBsYWNlLiBUaGUgY29yZSBmdW5jdGlvbmFsaXRpZXMgSSBuZWVkIGFyZSBhdmFpbGFibGUuIE5vdywgbGV0JiMzOTtzIGRyaWxsIGRvd24gaW50byB0aGUgZGV0YWlscy4gSSBuZWVkIHRvIGV4YW1pbmUgdGhlIGB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdGAgZnVuY3Rpb24uIFRoaXMgaXMgd2hlcmUgdGhlIHRpbWUtb2YtZGF5IGFkanVzdG1lbnRzIGZvciBlYWNoIGNoYW5uZWwgYXJlIGhhbmRsZWQsIHdoaWNoIGlzIGNyaXRpY2FsLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGFsZ29yaXRobSwgdGhlIGRhdGEgc3RydWN0dXJlcyBpdCBtYW5pcHVsYXRlcywgYW5kIHRoZSBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucy4gSSBuZWVkIHRvIGNvbnNpZGVyIHRoaW5ncyBsaWtlIGhvdyBpdCBoYW5kbGVzIGxlYXAgc2Vjb25kcywgdGltZSB6b25lIG9mZnNldHMsIGFuZCBhbnkgY2xvY2sgc3luY2hyb25pemF0aW9uIGlzc3VlcyB0aGF0IG1pZ2h0IGltcGFjdCB0aGUgZmluYWwgVE9EIGNhbGN1bGF0aW9uLiBUaGlzIGlzIHRoZSBoZWFydCBvZiB0aGUgdGltaW5nIHNvbHV0aW9uLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBtYWtlIHN1cmUgaXQgaXMgcm9idXN0IGFuZCBwcmVjaXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDExOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3psMzA3M3hfY2hhbl90b2RfYWRqdXN0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYz0zNjM9aW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM4NS0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozODY6ICogemwzMDczeF9jaGFuX3RvZF9hZGp1c3QgLSBhdG9taWMgVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIHdpdGggcm9sbG92ZXIgZ3VhcmRcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zODctICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQwMC0jZGVmaW5lIFpMX1RPRF9NQVhfUkVUUklFU1x0MjBcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0MDE6aW50IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQwMi1cdFx0XHQgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oPTUxPWludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTUyLVx0XHRcdCAgIHN0cnVjdCB0aW1lc3BlYzY0IHRzKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDo1MzppbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNTQtXHRcdFx0ICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKTtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9MjQzOD1zdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHM2NCBkZWx0YSlcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjQ1Ni1cdCAgICAhemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjI0NTc6XHRcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTI0NTgtXHRcdFx0XHRcdCAgICAgICBuc190b190aW1lc3BlYzY0KGRlbHRhKSk7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTI0NzAtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6MjQ3MTpcdFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCB0cyk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjQ3Mi1cdFx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0yNTAxLVx0LyogUGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUgZmFpbGVkLCBmYWxsIGJhY2sgdG8gVG9EIGFkanVzdCAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjI1MDI6XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjUwMy1cdFx0XHRcdCAgICAgbnNfdG9fdGltZXNwZWM2NChkZWx0YSkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDExOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNjc2CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBEcml2ZXIgUGF0Y2ggZm9yIFBUUCBDbG9jayBGdW5jdGlvbmFsaXR5KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBQVFAgY2xvY2sgc3VwcG9ydCBpbnRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciwgaW50ZXJlc3RpbmcuIFRoZSBkcml2ZXIgaXRzZWxmIGlzIGZhaXJseSBzdGFuZGFyZDsgaXQgY2FuIGJlIGhvb2tlZCB1cCB2aWEgZWl0aGVyIEkyQyBvciBTUEksIGdvb2QgdG8ga25vdy4gVGhlIGtleSB0aGluZyBpcyB0aGF0IHRoaXMgUFRQIGNsb2NrIGZ1bmN0aW9uYWxpdHkgaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIHdoaWNoIG1lYW5zIHdlIGNhbiBsaWtlbHkgcG9rZSBhdCBpdCBkaXJlY3RseSB0aHJvdWdoIGAvZGV2L3B0cFhgIGRldmljZXMgYW5kIHRoZSBhc3NvY2lhdGVkIGlvY3Rscy4gVGhhdCBvcGVucyB1cCBhIHdob2xlIGF2ZW51ZSBmb3IgZnV6emluZyB3aXRoIHN5emthbGxlciwgb2YgY291cnNlLgoKSSBuZWVkIHRvIHplcm8gaW4gb24gc3BlY2lmaWMgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIGRyaXZlci4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgbW9zdCBjcml0aWNhbCBvbmVzIHNlZW0gdG8gYmU6IGB6bDMwNzN4X2NoYW5fdG9kX3JlYWRgIGFuZCBgemwzMDczeF9jaGFuX3RvZF93cml0ZWAgZm9yIFRpbWUgb2YgRGF5IHJlYWRzIGFuZCB3cml0ZXM7IGB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdGAsIHdoaWNoIGlzIHByb2JhYmx5IGZvciBjb3JyZWN0aW9ucy4gIFRoZW4gdGhlcmUmIzM5O3MgYHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0YCwgYHpsMzA3M3hfY2hhbl90aWVfd3JpdGVgLCBhbmQgYHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwYCDigJMgdGhvc2Ugc291bmQgbGlrZSB0aGV5IGRlYWwgd2l0aCBmaW5lci1ncmFpbmVkIGFkanVzdG1lbnRzLgoKQW5kLCBvZiBjb3Vyc2UsIHRoZSBEUExMLXNwZWNpZmljIFBUUCBmdW5jdGlvbnMgYXJlIGNydWNpYWw6IGB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjRgLCBgemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjRgLCBgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXBgLCBgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lYCwgYHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZWAsIGFuZCBgemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZWAuIFRoZXNlIGFyZSBhbGwgcHJpbWUgY2FuZGlkYXRlcyBmb3IgY2xvc2VyIGluc3BlY3Rpb24gYW5kIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBuZWVkZWQgdG8gZW5hYmxlIHRoaXMgZnVuY3Rpb25hbGl0eS4gSSBzZWUgYFpMMzA3M1hfSTJDYCwgYFpMMzA3M1hfU1BJYCwgYFBUUF8xNTg4X0NMT0NLYCwgYW5kIGBEUExMYC4gV2FpdCwgaG9sZCBvbi4gSXQgbG9va3MgbGlrZSBgRFBMTGAgaXMgYXV0b21hdGljYWxseSBzZWxlY3RlZCBpZiBgWkwzMDczWGAgaXMgc2VsZWN0ZWQuIEFuZCBgUFRQXzE1ODhfQ0xPQ0tgIGlzIGEgZGVwZW5kZW5jeS4gT2theSwgc28gdG8gZ2V0IHRoaXMgYWxsIHdvcmtpbmcsIGl0IGxvb2tzIGxpa2UgYWxsIHRoYXQgSSBuZWVkIGFyZToKCmBaTDMwNzNYX0kyQ2Agb3IgYFpMMzA3M1hfU1BJYCwgYW5kIGBQVFBfMTU4OF9DTE9DS2AuIExldCBtZSBqdXN0IGRvdWJsZSBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIGluIGBkcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIEdvdHRhIGJlIHRob3JvdWdoIHdpdGggdGhpcyBzdHVmZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWkwzMDczWCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTItXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnOjM6Y29uZmlnIFpMMzA3M1hcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctNC1cdHRyaXN0YXRlIFwmIzM0O01pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXNcJiMzNDsgaWYgQ09NUElMRV9URVNUXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZy0xNi1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWc6MTc6Y29uZmlnIFpMMzA3M1hfSTJDXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTE4LVx0dHJpc3RhdGUgXCYjMzQ7STJDIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1wmIzM0O1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctMjgtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnOjI5OmNvbmZpZyBaTDMwNzNYX1NQSVxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZy0zMC1cdHRyaXN0YXRlIFwmIzM0O1NQSSBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDAyMwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIGNoZWNraW5nIHRoZSBgZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ2AgZGVwZW5kZW5jaWVzOgoKKipBbmFseXppbmcgdGhlIEtjb25maWcgRGVwZW5kZW5jaWVzIGZvciB6bDMwNzN4IERyaXZlcioqCgpSaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciB0aGUgemwzMDczeCBkcml2ZXIuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IHRoZSBgZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSBhc3N1bWluZywgYXMgYW4gZXhwZXJ0IGluIHRoaXMsIHRoYXQgdGhpcyBLY29uZmlnIGZpbGUgY29udGFpbnMgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGZvciBlbmFibGluZyBhbmQgZGlzYWJsaW5nIHRoZSB6bDMwNzN4IGRyaXZlciB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBidWlsZCBzeXN0ZW0uIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIHdoaWNoIG90aGVyIGtlcm5lbCBmZWF0dXJlcyBvciBoYXJkd2FyZSBjb21wb25lbnRzIG11c3QgYmUgZW5hYmxlZCBvciBjb25maWd1cmVkIGJlZm9yZSB0aGlzIHBhcnRpY3VsYXIgZHJpdmVyIGNhbiBiZSBzZWxlY3RlZC4gVGhpcyBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBzeXN0ZW0gY29uZmlndXJhdGlvbiBhbmQgdG8gZW5zdXJlIEkgZG9uJiMzOTt0IGludHJvZHVjZSBidWlsZCBlcnJvcnMgb3IgcnVudGltZSBjb25mbGljdHMuIEkmIzM5O2xsIG5lZWQgdG8gaWRlbnRpZnk6IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyAoZS5nLiwgJiMzNDtpZiYjMzQ7IHN0YXRlbWVudHMpLCBkZWZhdWx0IHZhbHVlcywgc2VsZWN0IHN0YXRlbWVudHMsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgdGhhdCByZWxhdGUgdG8gdGhlIHByb3BlciBidWlsZGluZyBhbmQgdXNlIG9mIHRoZSB6bDMwNzN4IGRyaXZlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0XG4gICAzOlx0Y29uZmlnIFpMMzA3M1hcbiAgIDQ6XHRcdHRyaXN0YXRlIFwmIzM0O01pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXNcJiMzNDsgaWYgQ09NUElMRV9URVNUXG4gICA1Olx0XHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tcbiAgIDY6XHRcdHNlbGVjdCBEUExMXG4gICA3Olx0XHRzZWxlY3QgTkVUX0RFVkxJTktcbiAgIDg6XHRcdHNlbGVjdCBSRUdNQVBcbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTWljcm9jaGlwIEF6dXJpdGUgZmFtaWx5IERQTEwvUFRQL1N5bmNFXG4gIDExOlx0XHQgIGRldmljZXMgdGhhdCBzdXBwb3J0IHVwIHRvIDUgaW5kZXBlbmRlbnQgRFBMTCBjaGFubmVscyxcbiAgMTI6XHRcdCAgMTAgaW5wdXQgcGlucyBhbmQgdXAgdG8gMjAgb3V0cHV0IHBpbnMuXG4gIDEzOlx0XG4gIDE0Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGVcbiAgMTU6XHRcdCAgd2lsbCBiZSBjYWxsZWQgemwzMDczeC5cbiAgMTY6XHRcbiAgMTc6XHRjb25maWcgWkwzMDczWF9JMkNcbiAgMTg6XHRcdHRyaXN0YXRlIFwmIzM0O0kyQyBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcJiMzNDtcbiAgMTk6XHRcdGRlcGVuZHMgb24gSTJDIFx1MDAyNlx1MDAyNiBORVQgXHUwMDI2XHUwMDI2IFBUUF8xNTg4X0NMT0NLXG4gIDIwOlx0XHRzZWxlY3QgUkVHTUFQX0kyQ1xuICAyMTpcdFx0c2VsZWN0IFpMMzA3M1hcbiAgMjI6XHRcdGhlbHBcbiAgMjM6XHRcdCAgVGhpcyBpcyBJMkMgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRVxuICAyNDpcdFx0ICBkZXZpY2VzLlxuICAyNTpcdFxuICAyNjpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcbiAgMjc6XHRcdCAgYmUgY2FsbGVkIHpsMzA3M3hfaTJjLlxuICAyODpcdFxuICAyOTpcdGNvbmZpZyBaTDMwNzNYX1NQSVxuICAzMDpcdFx0dHJpc3RhdGUgXCYjMzQ7U1BJIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1wmIzM0O1xuICAzMTpcdFx0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IFNQSSBcdTAwMjZcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tcbiAgMzI6XHRcdHNlbGVjdCBSRUdNQVBfU1BJXG4gIDMzOlx0XHRzZWxlY3QgWkwzMDczWFxuICAzNDpcdFx0aGVscFxuICAzNTpcdFx0ICBUaGlzIGlzIFNQSSBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFXG4gIDM2Olx0XHQgIGRldmljZXMuXG4gIDM3Olx0XG4gIDM4Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxuICAzOTpcdFx0ICBiZSBjYWxsZWQgemwzMDczeF9zcGkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDExOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0OTM0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZvY3VzOiBaTDMwNzNYIENsb2NrIENvbnRyb2wqKgoKT2theSwgc28gSSBuZWVkIHRvIGVuYWJsZSB0aGUgYFpMMzA3M1hfSTJDYCBhbmQgYFpMMzA3M1hfU1BJYCBpbnRlcmZhY2VzLiBUaGUgYFBUUF8xNTg4X0NMT0NLYCBmZWF0dXJlIGlzIGRlZmluaXRlbHkgbmVjZXNzYXJ5IHRvby4gQW5kIHNpbmNlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggY2xvY2sgbWFuYWdlbWVudCwgSSYjMzk7bGwgZ28gd2l0aCB0aGUgYERQTExgIHNlbGVjdGlvbi4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUga2V5IGZ1bmN0aW9ucyBJIHNob3VsZCBjb25jZW50cmF0ZSBvbiBmb3IgdGhpcyBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bSB0aGlua2luZzoKCiogICBgemwzMDczeF9jaGFuX3RvZF9yZWFkYAoqICAgYHpsMzA3M3hfY2hhbl90b2Rfd3JpdGVgCiogICBgemwzMDczeF9jaGFuX3RvZF9hZGp1c3RgCiogICBgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXRgCiogICBgemwzMDczeF9jaGFuX3RpZV93cml0ZWAKKiAgIGB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcGAKCkhvbGQgb24gYSBzZWNvbmQuLi5JIHNlZSB0aGVzZSBzdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gRFBMTCBhbmQgUFRQOgoKKiAgIGB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcGAKKiAgIGB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVgCiogICBgemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lYAoqICAgYHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2VgCiogICBgemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0YAoqICAgYHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0YAoKUmlnaHQsIEkmIzM5O2QgYmV0dGVyIGRvdWJsZS1jaGVjayB0aGF0IHRoZXkgYXJlIGFjdHVhbGx5IHN0YXRpYyAtIEkgbmVlZCB0byBrbm93IHdoeSB0aGV5IGFyZSB3cml0dGVuIHRoYXQgd2F5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9MjMxMD1zdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjMzOS0gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoyMzQwOnN0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTIzNDEtXHRcdFx0XHRcdCAgICAgICBzNjQgZGVsdGEpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTI0MzctICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6MjQzODpzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHM2NCBkZWx0YSlcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0yNDM5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTE6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU5NzgKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gRHluYW1pYyBDaGFubmVsIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGRlYWxpbmcgd2l0aCBgY2hhbi5jYCwgYW5kIEkmIzM5O3ZlIHF1aWNrbHkgY29uZmlybWVkIHRoYXQgdGhlIG1ham9yaXR5IG9mIGl0cyBmdW5jdGlvbnMgYXJlLCBhcyBleHBlY3RlZCwgc3RhdGljLiBUaGF0JiMzOTtzIGdvb2Q7IGl0IG5hcnJvd3MgZG93biBteSBmb2N1cy4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZHluYW1pY3MsIHRoZSBwYXJ0cyB0aGF0ICpkbyogY2hhbmdlLCBvciB0aGF0IGFyZSBkZXNpZ25lZCB0byBiZSBtb2RpZmllZC4KClRoZXJlZm9yZSwgSSYjMzk7bSBnb2luZyB0byBjb25jZW50cmF0ZSBvbiB0aGVzZSBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYGNoYW4uY2A6IGB6bDMwNzN4X2NoYW5fdG9kX3JlYWRgLCBgemwzMDczeF9jaGFuX3RvZF93cml0ZWAsIGB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdGAsIGB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldGAsIGB6bDMwNzN4X2NoYW5fdGllX3dyaXRlYCwgYW5kIGB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcGAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIGtleSBhcmVhcyBmb3IgbWUgdG8gaW52ZXN0aWdhdGUsIGdpdmVuIHRoZSBjb250ZXh0LgoKTXkgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgdmVyaWZ5IHdoZXRoZXIgdGhlc2UgZnVuY3Rpb25zIGFyZSBwcm9wZXJseSBleHBvcnRlZCBhbmQgdmlzaWJsZSBmb3IgdGhlIGV4dGVybmFsIGludGVyZmFjZSwgb3IgaWYgdGhlcmUmIzM5O3MgYW55IHN1YnRsZXR5IGluIHRoZWlyIGRlZmluaXRpb24gdGhhdCBJIG5lZWQgdG8gYWNjb3VudCBmb3IuIE5vIHBvaW50IGluIHdhc3RpbmcgdGltZSBpZiB0aGV5JiMzOTtyZSBub3QgZXZlbiBhY2Nlc3NpYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYz0yMzI9Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqemwzMDczeF9jaGFuX3N0YXRlX2dldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNDctICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjQ4OmludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjQ5LXtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM9MjkzPXN0YXRpYyBpbnQgemwzMDczeF9jaGFuX3RvZF9jdHJsKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCB1OCBjbWQpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMwOS0gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozMTA6aW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMTEtXHRcdFx0ICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg9NDU9aW50IHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTQ2LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjQ3OmludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjQ4OmludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNDktXHRcdFx0ICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTE6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY5NjMKCQkJCQkJCW91dHB1dDogMjUxCgkJCQkJCQl0aG91Z2h0czogNzY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBBenVyaXRlIERQTEwgRHJpdmVyIEludGVncmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgZm9jdXMgc3ltYm9scyDigJMgdGhlIGtleSBmdW5jdGlvbnMgd2UmIzM5O3JlIGludGVyZXN0ZWQgaW4uIEkmIzM5O3ZlIGdvdDoKCiogICBgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0YAoqICAgYHpsMzA3M3hfY2hhbl90b2RfcmVhZGAKKiAgIGB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlYAoqICAgYHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0YAoqICAgYHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0YAoqICAgYHpsMzA3M3hfY2hhbl90aWVfd3JpdGVgCiogICBgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXBgCgpJIHF1aWNrbHkgY29uZmlybWVkIHRoYXQgYHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdGAgaXMgbm9uLXN0YXRpYyBhcyByZXF1aXJlZC4gSSBhbHNvIGNvbmZpcm1lZCB0aGUga2V5IGNvbmZpZ3MuIFRoZSBjb2RlIGxvb2tzIGNvcnJlY3QsIHNvIHRoZSBmb2N1cyBzeW1ib2xzIGFyZSBjb3JyZWN0LgoKTm93LCB0aGUgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UmIzM5O3JlIGNvdmVyaW5nIGFsbCBiYXNlcy4gV2UgaGF2ZToKCiogICBgWkwzMDczWF9JMkNgCiogICBgWkwzMDczWF9TUElgCiogICBgUFRQXzE1ODhfQ0xPQ0tgCgpJIGNoZWNrZWQgYFBUUF8xNTg4X0NMT0NLYCwgYW5kIGl0JiMzOTtzIGEgdHJpc3RhdGUsIHNvIHRoYXQmIzM5O3MgZ29vZC4gSXQgd2lsbCBlbmFibGUgdGhlIGNvcnJlY3QgY29kZSBwYXRoIGFzIGludGVuZGVkLgoKSSBhbHNvIGNvbnNpZGVyZWQgYERQTExgLiBJdCBzZWVtcyBgRFBMTGAgaXMgc2VsZWN0ZWQgYnkgYFpMMzA3M1hgLCBzbyBpdCBzaG91bGQgYmUgYXV0b21hdGljYWxseSBlbmFibGVkLCBidXQgaW5jbHVkaW5nIGl0IGRvZXNuJiMzOTt0IGh1cnQuIEFuZCwgcmVhbGx5LCB0aGUgYHNlbGVjdGAgZGlyZWN0aXZlIGluIHRoZSBjb25maWcgaGFuZGxlcyBpdCwgc28gd2UgZG9uJiMzOTt0IG5lZWQgdG8gc3BlY2lmeSBpdC4KCkkgZGlkIGEgcXVpY2sgY2hlY2sgZm9yIG90aGVyIGRlcGVuZGVuY2llcywgYW5kIHdlJiMzOTt2ZSBnb3QgYEkyQ2AsIGBTUElgLCBhbmQgYE5FVGAuIGBORVRgIGlzIHVzdWFsbHkgZW5hYmxlZCwgYW5kIGBJMkNgIGFuZCBgU1BJYCBhcmUgcmVxdWlyZWQgZm9yIHRoaXMgZHJpdmVyLgoKU28sIHRoZSBjb25maWcgbGlzdCBpcyBzb2xpZDoKCiogICBgWkwzMDczWF9JMkNgCiogICBgWkwzMDczWF9TUElgCiogICBgUFRQXzE1ODhfQ0xPQ0tgCgpJIHZlcmlmaWVkIG5vIG90aGVyIGZ1bmN0aW9ucyBhcmUgcmVsZXZhbnQgYmVzaWRlcyB0aGUgZm9jdXMgc3ltYm9scy4gYHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXJgIGFuZCBgemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyYCBhcmUgc3RhdGljLCBzbyB0aGV5JiMzOTtyZSBub3QgcGFydCBvZiB0aGUgZnV6emluZyBzdXJmYWNlLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgd2Ugd2FudC4KCkluIGVzc2VuY2UsIHRoaXMgcGF0Y2ggaXMgYWRkaW5nIFBUUCBjbG9jayBmdW5jdGlvbmFsaXR5IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlci4gSXQmIzM5O3MgYWNjZXNzaWJsZSB2aWEgSTJDL1NQSSBhbmQgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdmlhIHRoZSBQVFAgY2xvY2sgc3Vic3lzdGVtIChgL2Rldi9wdHBYYCkuIFN5emthbGxlciB3aWxsIGJlIGFibGUgdG8gZnV6eiB0aGlzIHRocm91Z2ggSTJDL1NQSSBlbXVsYXRpb24uIFRoZSBmb2N1cyBzeW1ib2xzIGFyZSBjb3JyZWN0LCBhbmQgYWxsIGRlcGVuZGVuY2llcyBhcmUgYXBwcm9wcmlhdGVseSBjb3ZlcmVkLiBJIHRoaW5rIHRoaXMgaXMgZ29vZCB0byBnby4gVGltZSB0byBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WkwzMDczWF9JMkMmIzM0OywKICAgICYjMzQ7WkwzMDczWF9TUEkmIzM0OywKICAgICYjMzQ7UFRQXzE1ODhfQ0xPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQmIzM0OywKICAgICYjMzQ7emwzMDczeF9jaGFuX3RvZF9yZWFkJiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl90b2Rfd3JpdGUmIzM0OywKICAgICYjMzQ7emwzMDczeF9jaGFuX3RvZF9hZGp1c3QmIzM0OywKICAgICYjMzQ7emwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQmIzM0OywKICAgICYjMzQ7emwzMDczeF9jaGFuX3RpZV93cml0ZSYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciAoemwzMDczeCkuIFRoZSBkcml2ZXIgY2FuIGJlIGluc3RhbnRpYXRlZCB2aWEgSTJDIG9yIFNQSSwgYW5kIHRoZSBQVFAgY2xvY2sgaW50ZXJmYWNlIGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlIHZpYSBgL2Rldi9wdHBYYC4gU3l6a2FsbGVyIGNhbiBmdXp6IHRoaXMgZnVuY3Rpb25hbGl0eSB1c2luZyBJMkMvU1BJIGVtdWxhdGlvbiBhbmQgUFRQIGlvY3Rscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WkwzMDczWF9JMkMmIzM0OywKICAgICYjMzQ7WkwzMDczWF9TUEkmIzM0OywKICAgICYjMzQ7UFRQXzE1ODhfQ0xPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQmIzM0OywKICAgICYjMzQ7emwzMDczeF9jaGFuX3RvZF9yZWFkJiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl90b2Rfd3JpdGUmIzM0OywKICAgICYjMzQ7emwzMDczeF9jaGFuX3RvZF9hZGp1c3QmIzM0OywKICAgICYjMzQ7emwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQmIzM0OywKICAgICYjMzQ7emwzMDczeF9jaGFuX3RpZV93cml0ZSYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciAoemwzMDczeCkuIFRoZSBkcml2ZXIgY2FuIGJlIGluc3RhbnRpYXRlZCB2aWEgSTJDIG9yIFNQSSwgYW5kIHRoZSBQVFAgY2xvY2sgaW50ZXJmYWNlIGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlIHZpYSBgL2Rldi9wdHBYYC4gU3l6a2FsbGVyIGNhbiBmdXp6IHRoaXMgZnVuY3Rpb25hbGl0eSB1c2luZyBJMkMvU1BJIGVtdWxhdGlvbiBhbmQgUFRQIGlvY3Rscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTE6NTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMTo1NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIFBUUCBjbG9jayBzdXBwb3J0IGZvciB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIuIEl0IGFkZHMgZnVuY3Rpb25zIHRvIHJlYWQvd3JpdGUgVGltZSBvZiBEYXkgKFRvRCkgcmVnaXN0ZXJzLCBhZGp1c3QgZnJlcXVlbmN5LCBhbmQgYWRqdXN0IHBoYXNlLCBhcyB3ZWxsIGFzIHJlZ2lzdGVyaW5nIGEgUFRQIGNsb2NrIGRldmljZS4gQWxsIGxvY2FsIHZhcmlhYmxlcywgc3VjaCBhcyBgc3RydWN0IHRpbWVzcGVjNjRgIGFuZCBgc3ludGhfbWFza2AsIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgYHB0cF9jbG9ja19pbmZvYCBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQgZnJvbSBhIHN0YXRpYyBjb25zdCB0ZW1wbGF0ZSwgZW5zdXJpbmcgYWxsIGZpZWxkcyAoaW5jbHVkaW5nIHBhZGRpbmcgYW5kIHRoZSBgbmFtZWAgYnVmZmVyKSBhcmUgemVyby1pbml0aWFsaXplZCBiZWZvcmUgYHNucHJpbnRmYCBpcyBjYWxsZWQuIFRoZXJlIGFyZSBubyBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDU5MWRlYzgzYTg1ZDcwNzQ1NTI2MGU5MThlNzQxMjU3ZTQ1ZjkyOTEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyA3IDExOjUyOjQ2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWcKaW5kZXggNWJiY2ExNDAwNTgxMy4uZGExNzMxYWNlMTVmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnCkBAIC0yLDcgJiM0MzsyLDcgQEAKIAogY29uZmlnIFpMMzA3M1gKIAl0cmlzdGF0ZSAmIzM0O01pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXMmIzM0OyBpZiBDT01QSUxFX1RFU1QKLQlkZXBlbmRzIG9uIE5FVAomIzQzOwlkZXBlbmRzIG9uIE5FVCAmYW1wOyZhbXA7IFBUUF8xNTg4X0NMT0NLCiAJc2VsZWN0IERQTEwKIAlzZWxlY3QgTkVUX0RFVkxJTksKIAlzZWxlY3QgUkVHTUFQCkBAIC0xNiw3ICYjNDM7MTYsNyBAQCBjb25maWcgWkwzMDczWAogCiBjb25maWcgWkwzMDczWF9JMkMKIAl0cmlzdGF0ZSAmIzM0O0kyQyBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXMmIzM0OwotCWRlcGVuZHMgb24gSTJDICZhbXA7JmFtcDsgTkVUCiYjNDM7CWRlcGVuZHMgb24gSTJDICZhbXA7JmFtcDsgTkVUICZhbXA7JmFtcDsgUFRQXzE1ODhfQ0xPQ0sKIAlzZWxlY3QgUkVHTUFQX0kyQwogCXNlbGVjdCBaTDMwNzNYCiAJaGVscApAQCAtMjgsNyAmIzQzOzI4LDcgQEAgY29uZmlnIFpMMzA3M1hfSTJDCiAKIGNvbmZpZyBaTDMwNzNYX1NQSQogCXRyaXN0YXRlICYjMzQ7U1BJIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlcyYjMzQ7Ci0JZGVwZW5kcyBvbiBORVQgJmFtcDsmYW1wOyBTUEkKJiM0MzsJZGVwZW5kcyBvbiBORVQgJmFtcDsmYW1wOyBTUEkgJmFtcDsmYW1wOyBQVFBfMTU4OF9DTE9DSwogCXNlbGVjdCBSRUdNQVBfU1BJCiAJc2VsZWN0IFpMMzA3M1gKIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMKaW5kZXggNGVjMmNmNTNkYWQ0Ni4uYWY2Y2E0M2MzMzU5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYwpAQCAtMyw2ICYjNDM7Myw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvY2xlYW51cC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2RlbGF5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGV2X3ByaW50ay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wdHBfY2xvY2tfa2VybmVsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3RyaW5nLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKIApAQCAtMTYyLDggJiM0MzsxNjMsOCBAQCBpbnQgemwzMDczeF9jaGFuX25jb19tb2RlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCkKICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmUKICAqIEBpbmRleDogRFBMTCBjaGFubmVsIGluZGV4IHRvIGZldGNoIHN0YXRlIGZvcgogICoKLSAqIFJlYWRzIHRoZSBtb2RlX3JlZnNlbCByZWdpc3RlciBhbmQgcmVmZXJlbmNlIHByaW9yaXR5IHJlZ2lzdGVycyBmb3IKLSAqIHRoZSBnaXZlbiBEUExMIGNoYW5uZWwgYW5kIHN0b3JlcyB0aGUgcmF3IHZhbHVlcyBmb3IgbGF0ZXIgdXNlLgomIzQzOyAqIFJlYWRzIHRoZSBtb2RlX3JlZnNlbCwgc3RhdHVzIGFuZCByZWZlcmVuY2UgcHJpb3JpdHkgcmVnaXN0ZXJzIGZvcgomIzQzOyAqIHRoZSBnaXZlbiBEUExMIGNoYW5uZWwgYW5kIHN0b3JlcyB0aGUgdmFsdWVzIGZvciBsYXRlciB1c2UuCiAgKgogICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiAgKi8KQEAgLTIzNCw2ICYjNDM7MjM1LDMyMiBAQCBjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICp6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsCiAJcmV0dXJuICZhbXA7emxkZXYtJmd0O2NoYW5baW5kZXhdOwogfQogCiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0IC0gd2FpdCBmb3IgVG9EIHNlbWFwaG9yZSB0byBjbGVhcgomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICoKJiM0MzsgKiBQb2xscyB0aGUgVG9EIGNvbnRyb2wgcmVnaXN0ZXIgdW50aWwgdGhlIHNlbWFwaG9yZSBiaXQgaXMgY2xlYXJlZCwKJiM0MzsgKiBpbmRpY2F0aW5nIHRoZSBkZXZpY2UgaGFzIGNvbXBsZXRlZCB0aGUgcHJldmlvdXMgVG9EIG9wZXJhdGlvbi4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRUJVU1kgaWYgc2VtYXBob3JlIG5vdCBjbGVhcmVkLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBpbnQgdGltZW91dDsKJiM0MzsJdTggdG9kX2N0cmw7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSwgJmFtcDt0b2RfY3RybCk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJc3dpdGNoIChGSUVMRF9HRVQoWkxfRFBMTF9UT0RfQ1RSTF9DTUQsIHRvZF9jdHJsKSkgewomIzQzOwljYXNlIDA6CiYjNDM7CQkvKiBObyBvcGVyYXRpb24gcGVuZGluZyAocG93ZXItb24vcmVzZXQgZGVmYXVsdCkgKi8KJiM0MzsJCXJldHVybiAwOwomIzQzOwljYXNlIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaOgomIzQzOwkJdGltZW91dCA9IFpMX1BPTExfVE9EX1dSX1RJTUVPVVRfVVM7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UOgomIzQzOwljYXNlIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaOgomIzQzOwkJdGltZW91dCA9IFpMX1BPTExfVE9EX1JEX1RJTUVPVVRfVVM7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCS8qIEZXIG5ldmVyIHdyaXRlcyBjbWQgYml0czsgb25seSB0aGUgZHJpdmVyIHNldHMgdGhlbSAqLwomIzQzOwkJV0FSTl9PTigxKTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksCiYjNDM7CQkJCSAgWkxfRFBMTF9UT0RfQ1RSTF9TRU0sIHRpbWVvdXQpOwomIzQzOwomIzQzOwlyZXR1cm4gcmMgPT0gLUVUSU1FRE9VVCA/IC1FQlVTWSA6IHJjOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwgLSBpc3N1ZSBUb0QgY29tbWFuZAomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQGNtZDogVG9EIGNvbW1hbmQgdG8gZXhlY3V0ZQomIzQzOyAqCiYjNDM7ICogV3JpdGVzIHRoZSBzZW1hcGhvcmUgYW5kIGNvbW1hbmQgdG8gZHBsbF90b2RfY3RybC4gVGhlIGNhbGxlciBtdXN0CiYjNDM7ICogZW5zdXJlIHRoZSBkZXZpY2UgaXMgcmVhZHkgKHNlbWFwaG9yZSBjbGVhcikgYmVmb3JlIGNhbGxpbmcgYW5kCiYjNDM7ICogbXVzdCB3YWl0IGZvciBjb21wbGV0aW9uIGlmIG5lZWRlZC4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9jaGFuX3RvZF9jdHJsKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCB1OCBjbWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLAomIzQzOwkJCQlaTF9EUExMX1RPRF9DVFJMX1NFTSB8IGNtZCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl90b2RfcmVhZCAtIHJlYWQgVG9EIHJlZ2lzdGVycyBhZnRlciBpc3N1aW5nIGEgY29tbWFuZAomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQG5leHRfaHo6IGlmIHRydWUsIHJlYWQgcHJlZGljdGVkIFRvRCBhdCBuZXh0IDEgSHo7IG90aGVyd2lzZSByZWFkIGN1cnJlbnQKJiM0MzsgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIHRoZSByZXN1bHQKJiM0MzsgKiBAc3RzOiBvcHRpb25hbCBzeXN0ZW0gdGltZXN0YW1wIHBhaXIgZm9yIGNyb3NzLXRpbWVzdGFtcGluZwomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS4KJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLAomIzQzOwkJCSAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsCiYjNDM7CQkJICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cykKJiM0Mzt7CiYjNDM7CXUzMiBuc2VjOwomIzQzOwl1NjQgc2VjOwomIzQzOwl1OCBjbWQ7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJaWYgKG5leHRfaHopCiYjNDM7CQljbWQgPSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9ORVhUXzFIWjsKJiM0MzsJZWxzZQomIzQzOwkJY21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVDsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi8KJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlwdHBfcmVhZF9zeXN0ZW1fcHJldHMoc3RzKTsKJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLCBjbWQpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsJcHRwX3JlYWRfc3lzdGVtX3Bvc3R0cyhzdHMpOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfcmVhZF91NDgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9TRUMoY2gpLCAmYW1wO3NlYyk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJLyogSFcgbmFub3NlY29uZHMgYXJlIGFsd2F5cyBpbiBbMCwgTlNFQ19QRVJfU0VDKSByYW5nZSAqLwomIzQzOwlyYyA9IHpsMzA3M3hfcmVhZF91MzIoemxkZXYsIFpMX1JFR19EUExMX1RPRF9OUyhjaCksICZhbXA7bnNlYyk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJdHMtJmd0O3R2X3NlYyA9IHNlYzsKJiM0MzsJdHMtJmd0O3R2X25zZWMgPSBuc2VjOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF93cml0ZSAtIHdyaXRlIFRvRCByZWdpc3RlcnMgYW5kIHRyaWdnZXIgMSBIeiB1cGRhdGUKJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleAomIzQzOyAqIEB0czogdGltZSB0byBzZXQKJiM0MzsgKgomIzQzOyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICAgc3RydWN0IHRpbWVzcGVjNjQgdHMpCiYjNDM7ewomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CS8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCiYjNDM7CXJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIHRzLnR2X3NlYyk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgdHMudHZfbnNlYyk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfY3RybCh6bGRldiwgY2gsCiYjNDM7CQkJCSAgICAgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFopOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCAtIGF0b21pYyBUb0QgcmVhZC1tb2RpZnktd3JpdGUgd2l0aCByb2xsb3ZlciBndWFyZAomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgdG8gYXBwbHkKJiM0MzsgKgomIzQzOyAqIFJlYWRzIHRoZSBuZXh0LUh6IFRvRCBhbmQgY3VycmVudCBUb0QsIHRoZW4gY2hlY2tzIHdoZXRoZXIgZW5vdWdoIHRpbWUKJiM0MzsgKiByZW1haW5zIGJlZm9yZSB0aGUgbmV4dCAxIEh6IHJvbGxvdmVyIHRvIHNhZmVseSBjb21wbGV0ZSB0aGUgd3JpdGUuCiYjNDM7ICogUmUtcmVhZHMgaWYgdGhlIDEgSHogdGljayBjcm9zc2VkIGJldHdlZW4gdGhlIHR3byByZWFkcyBvciBpZiBsZXNzCiYjNDM7ICogdGhhbiAyMCBtcyByZW1haW5zIGJlZm9yZSB0aGUgbmV4dCByb2xsb3Zlci4gQXBwbGllcyBAZGVsdGEgYW5kIHdyaXRlcwomIzQzOyAqIHRoZSByZXN1bHQgYmFjay4KJiM0MzsgKgomIzQzOyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7I2RlZmluZSBaTF9UT0RfTUFYX1JFVFJJRVMJMjAKJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKQomIzQzO3sKJiM0MzsJc3RhdGljIGNvbnN0IGxvbmcgdGhyZXNob2xkX25zID0gMjAgKiBOU0VDX1BFUl9NU0VDOwomIzQzOwlzdHJ1Y3QgdGltZXNwZWM2NCB0c19uZXh0LCB0c19jdXIsIGRpZmY7CiYjNDM7CWludCByYywgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IFpMX1RPRF9NQVhfUkVUUklFUzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgdHJ1ZSwgJmFtcDt0c19uZXh0LCBOVUxMKTsKJiM0MzsJCWlmIChyYykKJiM0MzsJCQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CQlyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRldiwgY2gsIGZhbHNlLCAmYW1wO3RzX2N1ciwgTlVMTCk7CiYjNDM7CQlpZiAocmMpCiYjNDM7CQkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwkJLyogRW5zdXJlIHRoZSAxIEh6IHRpY2sgZGlkIG5vdCBjcm9zcyBiZXR3ZWVuIHRoZSB0d28gcmVhZHMKJiM0MzsJCSAqIGFuZCB0aGF0IGVub3VnaCBtYXJnaW4gcmVtYWlucyB0byBjb21wbGV0ZSB0aGUgd3JpdGUuCiYjNDM7CQkgKi8KJiM0MzsJCWRpZmYgPSB0aW1lc3BlYzY0X3N1Yih0c19uZXh0LCB0c19jdXIpOwomIzQzOwkJaWYgKGRpZmYudHZfc2VjICZndDsgMCB8fAomIzQzOwkJICAgICghZGlmZi50dl9zZWMgJmFtcDsmYW1wOyBkaWZmLnR2X25zZWMgJmd0Oz0gdGhyZXNob2xkX25zKSkKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzOwlpZiAoaSA9PSBaTF9UT0RfTUFYX1JFVFJJRVMpIHsKJiM0MzsJCWRldl93YXJuKHpsZGV2LSZndDtkZXYsCiYjNDM7CQkJICYjMzQ7RFBMTCV1IFRvRCBhZGp1c3QgZmFpbGVkIHRvIGdldCBzdGFibGUgbWFyZ2luXG4mIzM0OywKJiM0MzsJCQkgY2gpOwomIzQzOwkJcmV0dXJuIC1FQlVTWTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBBcHBseSBkZWx0YSB0byB0aGUgbmV4dC1IeiBUb0QgKi8KJiM0MzsJdHNfbmV4dCA9IHRpbWVzcGVjNjRfYWRkKHRzX25leHQsIGRlbHRhKTsKJiM0MzsJaWYgKCF0aW1lc3BlYzY0X3ZhbGlkKCZhbXA7dHNfbmV4dCkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkZXYsIGNoLCB0c19uZXh0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQgLSB3cml0ZSBkZWx0YSBmcmVxdWVuY3kgb2Zmc2V0IHRvIGhhcmR3YXJlCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAb2Zmc2V0OiBmcmVxdWVuY3kgb2Zmc2V0IGluIDJeLTQ4IHN0ZXBzCiYjNDM7ICoKJiM0MzsgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBob2xkIHRoZSBwZXItRFBMTCBsb2NrLgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldCkKJiM0Mzt7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfREZfT0ZGU0VUKGNoKSwgb2Zmc2V0KTsKJiM0MzsJaWYgKCFyYykKJiM0MzsJCXpsZGV2LSZndDtjaGFuW2NoXS5kZl9vZmZzZXQgPSBvZmZzZXQ7CiYjNDM7CiYjNDM7CXJldHVybiByYzsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX3RpZV93cml0ZSAtIGFkanVzdCBEUExMIHBoYXNlIHVzaW5nIFRJRSB3cml0ZQomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQGRlbHRhX25zOiBwaGFzZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzIChtdXN0IGJlIHdpdGhpbiAmIzQzOy0xcykKJiM0MzsgKgomIzQzOyAqIENvbnZlcnRzIG5hbm9zZWNvbmRzIHRvIFRJRSB1bml0cyAoMC4wMSBwcykgYW5kIHdyaXRlcyBUSUUgZGF0YQomIzQzOyAqIHRvIHRoZSBzcGVjaWZpZWQgY2hhbm5lbC4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgZGVsdGFfbnMpCiYjNDM7ewomIzQzOwlzNjQgdGllX2RhdGE7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJaWYgKFdBUk5fT04oZGVsdGFfbnMgJmx0Oz0gLU5TRUNfUEVSX1NFQyB8fCBkZWx0YV9ucyAmZ3Q7PSBOU0VDX1BFUl9TRUMpKQomIzQzOwkJcmV0dXJuIC1FUkFOR0U7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3psZGV2LSZndDt0aWVfbG9jayk7CiYjNDM7CiYjNDM7CS8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUSUUgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCiYjNDM7CXJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLAomIzQzOwkJCQkgIFpMX0RQTExfVElFX0NUUkxfT1AsCiYjNDM7CQkJCSAgWkxfUE9MTF9USUVfV1JfVElNRU9VVF9VUyk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJLyogQ29udmVydCBucyB0byBUSUUgdW5pdHMgKDAuMDEgcHMgPSAxMF4tMTQgcykgKi8KJiM0MzsJdGllX2RhdGEgPSBkZWx0YV9ucyAqIDEwMDAwMExMOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfREFUQShjaCksIHRpZV9kYXRhKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0ssIEJJVChjaCkpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTCwKJiM0MzsJCQkJWkxfRFBMTF9USUVfQ1RSTF9PUF9XUik7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwIC0gZXhlY3V0ZSBvbmUgb3V0cHV0IHBoYXNlIHN0ZXAgb3BlcmF0aW9uCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAb3V0X21hc2s6IGJpdG1hc2sgb2Ygb3V0cHV0cyB0byBzdGVwCiYjNDM7ICogQHN0ZXBfY3ljbGVzOiBwaGFzZSBzdGVwIGluIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcwomIzQzOyAqIEB0b2Rfc3RlcDogYWxzbyBzdGVwIHRoZSBUb0QgY291bnRlcgomIzQzOyAqCiYjNDM7ICogQWxsIG1hc2tlZCBvdXRwdXRzIG11c3QgdXNlIHN5bnRoZXNpemVycyBvZiB0aGUgc2FtZSBmcmVxdWVuY3kgc2luY2UKJiM0MzsgKiB0aGUgc3RlcCB2YWx1ZSBpcyBpbiBzeW50aGVzaXplciBjbG9jayBjeWNsZXMuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLAomIzQzOwkJCSAgICBib29sIHRvZF9zdGVwKQomIzQzO3sKJiM0MzsJdTggY3RybDsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRldi0mZ3Q7cGhhc2Vfc3RlcF9sb2NrKTsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgYW55IHByZXZpb3VzIHBoYXNlIHN0ZXAgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCiYjNDM7CXJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLAomIzQzOwkJCQkgIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AsCiYjNDM7CQkJCSAgWkxfUE9MTF9QSEFTRV9TVEVQX1RJTUVPVVRfVVMpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBLAomIzQzOwkJCSAgICAgICBzdGVwX2N5Y2xlcyk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3dyaXRlX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX01BU0ssIG91dF9tYXNrKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9OVU1CRVIsIDEpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CWN0cmwgPSBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfRFBMTCwgY2gpIHwKJiM0MzsJICAgICAgIEZJRUxEX1BSRVAoWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCwKJiM0MzsJCQkgIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfV1JJVEUpOwomIzQzOwlpZiAodG9kX3N0ZXApCiYjNDM7CQljdHJsIHw9IFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVA7CiYjNDM7CiYjNDM7CXJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTCwgY3RybCk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0IC0gY29tbWl0IERQTEwgY2hhbm5lbCBzdGF0ZSBjaGFuZ2VzIHRvIGhhcmR3YXJlCiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgKaW5kZXggZGM5YzZkOTViZGVlNy4uOTljM2I3MDg4ZjY3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaApAQCAtNSwxMCAmIzQzOzUsMTIgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3RkZGVmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3RpbWU2NC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7cmVncy5oJiMzNDsKIAomIzQzO3N0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcDsKIHN0cnVjdCB6bDMwNzN4X2RldjsKIAogLyoqCkBAIC00Miw2ICYjNDM7NDQsMjEgQEAgaW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgsCiBpbnQgemwzMDczeF9jaGFuX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7CiBpbnQgemwzMDczeF9jaGFuX25jb19tb2RlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7CiAKJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKTsKJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLAomIzQzOwkJCSAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsCiYjNDM7CQkJICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cyk7CiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICAgc3RydWN0IHRpbWVzcGVjNjQgdHMpOwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpOwomIzQzO2ludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsIGJvb2wgdG9kX3N0ZXApOwomIzQzOwomIzQzO2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldCk7CiYjNDM7CiYjNDM7aW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucyk7CiYjNDM7CiAvKioKICAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfZ2V0IC0gZ2V0IGNhY2hlZCBkZl9vZmZzZXQgdnMgdHJhY2tlZCByZWZlcmVuY2UKICAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGUKQEAgLTIwMCw2ICYjNDM7MjE3LDIxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6bDMwNzN4X2NoYW5fbW9kZV9pc19yZWZsb2NrKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pCiAJcmV0dXJuIHpsMzA3M3hfY2hhbl9tb2RlX2dldChjaGFuKSA9PSBaTF9EUExMX01PREVfUkVGU0VMX01PREVfUkVGTE9DSzsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZSAtIGNoZWNrIGlmIGNoYW5uZWwgbW9kZSBzdXBwb3J0cyBUSUUgd3JpdGUKJiM0MzsgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlCiYjNDM7ICoKJiM0MzsgKiBUSUUgd3JpdGUgaXMgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMgcmVnYXJkbGVzcyBvZiBsb2NrIHN0YXRlLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIFRJRSB3cml0ZSBpcyBzdXBwb3J0ZWQsIGZhbHNlIG90aGVyd2lzZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbAomIzQzO3psMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKQomIzQzO3sKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl9tb2RlX2lzX2F1dG8oY2hhbikgfHwKJiM0MzsJCXpsMzA3M3hfY2hhbl9tb2RlX2lzX3JlZmxvY2soY2hhbik7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB6bDMwNzN4X2NoYW5faXNfaG9fcmVhZHkgLSBjaGVjayBpZiBob2xkb3ZlciBpcyByZWFkeQogICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jCmluZGV4IDViMmQ3N2YyYzIyODguLjIzMGRmMDhlMjdjZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMKQEAgLTMyMiw3ICYjNDM7MzIyLDcgQEAgaW50IHpsMzA3M3hfd3JpdGVfdTQ4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsIHU2NCB2YWwpCiBpbnQgemwzMDczeF9wb2xsX3plcm9fdTgoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IHJlZywKIAkJCSB1OCBtYXNrLCB1bnNpZ25lZCBpbnQgdGltZW91dF91cykKIHsKLSNkZWZpbmUgWkxfUE9MTF9TTEVFUF9VUyAxMAomIzQzOwl1bnNpZ25lZCBpbnQgc2xlZXBfdXMgPSB0aW1lb3V0X3VzIC8gNTA7CiAJdW5zaWduZWQgaW50IHZhbDsKIAogCS8qIENoZWNrIHRoZSByZWdpc3RlciBpcyA4Yml0ICovCkBAIC0zMzYsNyAmIzQzOzMzNiw3IEBAIGludCB6bDMwNzN4X3BvbGxfemVyb191OChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLAogCXJlZyA9IFpMX1JFR19BRERSKHJlZykgJiM0MzsgWkxfUkFOR0VfT0ZGU0VUOwogCiAJcmV0dXJuIHJlZ21hcF9yZWFkX3BvbGxfdGltZW91dCh6bGRldi0mZ3Q7cmVnbWFwLCByZWcsIHZhbCwgISh2YWwgJmFtcDsgbWFzayksCi0JCQkJCVpMX1BPTExfU0xFRVBfVVMsIHRpbWVvdXRfdXMpOwomIzQzOwkJCQkJc2xlZXBfdXMsIHRpbWVvdXRfdXMpOwogfQogCiBpbnQgemwzMDczeF9tYl9vcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgb3BfcmVnLCB1OCBvcF92YWwsCkBAIC01MTEsNiAmIzQzOzUxMSwxMSBAQCB6bDMwNzN4X2Rldl9zdGF0ZV9mZXRjaChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KQogCWludCByYzsKIAl1OCBpOwogCiYjNDM7CXJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTSywKJiM0MzsJCQkgICAgICAmYW1wO3psZGV2LSZndDtvdXRfc3RlcF90aW1lX21hc2spOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiAJZm9yIChpID0gMDsgaSAmbHQ7IFpMMzA3M1hfTlVNX1JFRlM7IGkmIzQzOyYjNDM7KSB7CiAJCXJjID0gemwzMDczeF9yZWZfc3RhdGVfZmV0Y2goemxkZXYsIGkpOwogCQlpZiAocmMpIHsKQEAgLTEwMzQsNiAmIzQzOzEwMzksMTQgQEAgaW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpCiAJICogYW5kL29yIHBvbGxzIGFyZSByZXF1aXJlZCB0byBiZSBkb25lIGF0b21pY2FsbHkuCiAJICovCiAJcmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtJmd0O2RldiwgJmFtcDt6bGRldi0mZ3Q7bXVsdGlvcF9sb2NrKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtJmd0O2RldiwgcmMsCiYjNDM7CQkJCSAgICAgJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxuJiMzNDspOwomIzQzOwlyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi0mZ3Q7ZGV2LCAmYW1wO3psZGV2LSZndDtwaGFzZV9zdGVwX2xvY2spOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi0mZ3Q7ZGV2LCByYywKJiM0MzsJCQkJICAgICAmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XG4mIzM0Oyk7CiYjNDM7CXJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LSZndDtkZXYsICZhbXA7emxkZXYtJmd0O3RpZV9sb2NrKTsKIAlpZiAocmMpCiAJCXJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LSZndDtkZXYsIHJjLAogCQkJCSAgICAgJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxuJiMzNDspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oCmluZGV4IDc4ZGMyMDhmM2VlYTIuLjY3YzEwZTI1OTUxMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmgKQEAgLTI2LDYgJiM0MzsyNiwxMCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsOwogI2RlZmluZSBaTF9QT0xMX0hXUkVHX1RJTUVPVVRfVVMJKDUwICogVVNFQ19QRVJfTVNFQykKICNkZWZpbmUgWkxfUE9MTF9NQl9USU1FT1VUX1VTCQkoMzAgKiBVU0VDX1BFUl9NU0VDKQogI2RlZmluZSBaTF9QT0xMX1BIQVNFX0VSUl9USU1FT1VUX1VTCSg1MCAqIFVTRUNfUEVSX01TRUMpCiYjNDM7I2RlZmluZSBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VUwkoMzAwMCAqIFVTRUNfUEVSX01TRUMpCiYjNDM7I2RlZmluZSBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTCSgxMDAwICogVVNFQ19QRVJfTVNFQykKJiM0MzsjZGVmaW5lIFpMX1BPTExfVE9EX1JEX1RJTUVPVVRfVVMJKDMwICogVVNFQ19QRVJfTVNFQykKJiM0MzsjZGVmaW5lIFpMX1BPTExfVE9EX1dSX1RJTUVPVVRfVVMJKDEwMDAgKiBVU0VDX1BFUl9NU0VDKQogCiBlbnVtIHpsMzA3M3hfZmxhZ3MgewogCVpMMzA3M1hfRkxBR19SRUZfUEhBU0VfQ09NUF8zMl9CSVQsCkBAIC01NSw2ICYjNDM7NTksOCBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8gewogICogQHJlZ21hcDogcmVnbWFwIHRvIGFjY2VzcyBkZXZpY2UgcmVnaXN0ZXJzCiAgKiBAaW5mbzogZGV0ZWN0ZWQgY2hpcCBpbmZvCiAgKiBAbXVsdGlvcF9sb2NrOiB0byBzZXJpYWxpemUgbXVsdGlwbGUgcmVnaXN0ZXIgb3BlcmF0aW9ucwomIzQzOyAqIEB0aWVfbG9jazogdG8gc2VyaWFsaXplIFRJRSB3cml0ZSBvcGVyYXRpb25zCiYjNDM7ICogQHBoYXNlX3N0ZXBfbG9jazogdG8gc2VyaWFsaXplIG91dHB1dCBwaGFzZSBzdGVwIG9wZXJhdGlvbnMKICAqIEByZWY6IGFycmF5IG9mIGlucHV0IHJlZmVyZW5jZXMmIzM5OyBpbnZhcmlhbnRzCiAgKiBAb3V0OiBhcnJheSBvZiBvdXRzJiMzOTsgaW52YXJpYW50cwogICogQHN5bnRoOiBhcnJheSBvZiBzeW50aHMmIzM5OyBpbnZhcmlhbnRzCkBAIC02Myw2ICYjNDM7NjksNyBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8gewogICogQGt3b3JrZXI6IHRocmVhZCBmb3IgcGVyaW9kaWMgd29yawogICogQHdvcms6IHBlcmlvZGljIHdvcmsKICAqIEBjbG9ja19pZDogY2xvY2sgaWQgb2YgdGhlIGRldmljZQomIzQzOyAqIEBvdXRfc3RlcF90aW1lX21hc2s6IG91dHB1dCBzdGVwLXRpbWUgbWFzayAoZGV2aWNlLWdsb2JhbCkKICAqIEBwaGFzZV9hdmdfZmFjdG9yOiBwaGFzZSBvZmZzZXQgbWVhc3VyZW1lbnQgYXZlcmFnaW5nIGZhY3RvcgogICogQGZyZXFfbW9uaXRvcjogaXMgZnJlcXVlbmN5IG1vbml0b3IgZW5hYmxlZAogICovCkBAIC03MSw2ICYjNDM7NzgsOCBAQCBzdHJ1Y3QgemwzMDczeF9kZXYgewogCXN0cnVjdCByZWdtYXAJCQkqcmVnbWFwOwogCWNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mbwkqaW5mbzsKIAlzdHJ1Y3QgbXV0ZXgJCQltdWx0aW9wX2xvY2s7CiYjNDM7CXN0cnVjdCBtdXRleAkJCXRpZV9sb2NrOwomIzQzOwlzdHJ1Y3QgbXV0ZXgJCQlwaGFzZV9zdGVwX2xvY2s7CiAKIAkvKiBJbnZhcmlhbnRzICovCiAJc3RydWN0IHpsMzA3M3hfcmVmCXJlZltaTDMwNzNYX05VTV9SRUZTXTsKQEAgLTg3LDYgJiM0Mzs5Niw3IEBAIHN0cnVjdCB6bDMwNzN4X2RldiB7CiAKIAkvKiBQZXItY2hpcCBwYXJhbWV0ZXJzICovCiAJdTY0CQkJY2xvY2tfaWQ7CiYjNDM7CXUxNgkJCW91dF9zdGVwX3RpbWVfbWFzazsKIAl1OAkJCXBoYXNlX2F2Z19mYWN0b3I7CiAJYm9vbAkJCWZyZXFfbW9uaXRvcjsKIH07CkBAIC0zMDgsNiAmIzQzOzMxOCwxOSBAQCB6bDMwNzN4X2Rldl9vdXRfaXNfZW5hYmxlZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCkKIAlyZXR1cm4gemwzMDczeF9zeW50aF9pc19lbmFibGVkKHN5bnRoKSAmYW1wOyZhbXA7IHpsMzA3M3hfb3V0X2lzX2VuYWJsZWQob3V0KTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZGV2X291dF9pc19zdGVwcGVkIC0gY2hlY2sgaWYgb3V0cHV0IGlzIGluIHN0ZXAtdGltZSBtYXNrCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGluZGV4OiBvdXRwdXQgaW5kZXgKJiM0MzsgKgomIzQzOyAqIFJldHVybjogdHJ1ZSBpZiBvdXRwdXQgaXMgYWZmZWN0ZWQgYnkgc3RlcC10aW1lIG9wZXJhdGlvbnMKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wKJiM0Mzt6bDMwNzN4X2Rldl9vdXRfaXNfc3RlcHBlZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCkKJiM0Mzt7CiYjNDM7CXJldHVybiAhISh6bGRldi0mZ3Q7b3V0X3N0ZXBfdGltZV9tYXNrICZhbXA7IEJJVChpbmRleCkpOwomIzQzO30KJiM0MzsKIC8qKgogICogemwzMDczeF9kZXZfb3V0X2RwbGxfZ2V0IC0gZ2V0IERQTEwgSUQgdGhlIG91dHB1dCBpcyBkcml2ZW4gYnkKICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jCmluZGV4IDA0ODhhZTZhYzQ4NmMuLmE2ODZkZDUyYmZhYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMKQEAgLTIsNiAmIzQzOzIsNyBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvYml0cy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NsZWFudXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9idWcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jb250YWluZXJfb2YuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZXZfcHJpbnRrLmgmZ3Q7CkBAIC0xMyw2ICYjNDM7MTQsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L25ldGxpbmsuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wcm9wZXJ0eS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wdHBfY2xvY2tfa2VybmVsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NwcmludGYuaCZndDsKIApAQCAtMjI3NSw0NSAmIzQzOzIyNzcsMzc1IEBAIHpsMzA3M3hfZHBsbF9pbml0X2ZpbmVfcGhhc2VfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpCiAJcmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19TWU5USF9QSEFTRV9TSElGVF9DVFJMLCAweDAxKTsKIH0KIAomIzQzOy8qIE1heGltdW0gZnJlcXVlbmN5IGFkanVzdG1lbnQ6ICYjNDM7LTElIG9mIG5vbWluYWwgaW4gcHBiICovCiYjNDM7I2RlZmluZSBaTDMwNzNYX0RQTExfUFRQX01BWF9BREoJMTAwMDAwMDAKJiM0MzsKIC8qKgotICogemwzMDczeF9kcGxsX2FsbG9jIC0gYWxsb2NhdGUgRFBMTCBkZXZpY2UKLSAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQotICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0IC0gcmVhZCBjdXJyZW50IHRpbWUgZnJvbSBUb0QgY291bnRlcnMKJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm8KJiM0MzsgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIGN1cnJlbnQgdGltZQomIzQzOyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nCiAgKgotICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywKJiM0MzsJCQkJICAgICAgIHN0cnVjdCB0aW1lc3BlYzY0ICp0cywKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKQomIzQzO3sKJiM0MzsJc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsCiYjNDM7CQkJCQkJICAgcHRwX2luZm8pOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZHBsbC0mZ3Q7ZGV2LCB6bGRwbGwtJmd0O2lkLCBmYWxzZSwgdHMsIHN0cyk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0IC0gc2V0IFRvRCBjb3VudGVycyB0byBnaXZlbiB0aW1lCiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvCiYjNDM7ICogQHRzOiB0aW1lc3BlYyB3aXRoIHRpbWUgdG8gc2V0CiAgKgotICogUmV0dXJuOiBwb2ludGVyIHRvIERQTEwgZGV2aWNlIG9uIHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgb24gZXJyb3IKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKICAqLwotc3RydWN0IHpsMzA3M3hfZHBsbCAqCi16bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sCiYjNDM7CQkJCSAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cykKIHsKLQlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLAomIzQzOwkJCQkJCSAgIHB0cF9pbmZvKTsKIAotCXpsZHBsbCA9IGt6YWxsb2Nfb2JqKCp6bGRwbGwpOwotCWlmICghemxkcGxsKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7emxkcGxsLSZndDtsb2NrKTsKIAotCXpsZHBsbC0mZ3Q7ZGV2ID0gemxkZXY7Ci0JemxkcGxsLSZndDtpZCA9IGNoOwotCW11dGV4X2luaXQoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwotCUlOSVRfTElTVF9IRUFEKCZhbXA7emxkcGxsLSZndDtwaW5zKTsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkcGxsLSZndDtkZXYsIHpsZHBsbC0mZ3Q7aWQsICp0cyk7CiYjNDM7fQogCi0JcmV0dXJuIHpsZHBsbDsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCAtIGFkanVzdCBzdWItc2Vjb25kIHRpbWUgdmlhIHBoYXNlIHN0ZXAKJiM0MzsgKiBAemxkcGxsOiBEUExMIGNoYW5uZWwKJiM0MzsgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcyAobXVzdCBiZSB3aXRoaW4gKC1OU0VDX1BFUl9TRUMsCiYjNDM7ICogICAgICAgICBOU0VDX1BFUl9TRUMpKQomIzQzOyAqCiYjNDM7ICogVXNlcyB0aGUgb3V0cHV0IHBoYXNlIHN0ZXAgbWVjaGFuaXNtIHdpdGggdG9kX3N0ZXA9MSB0byBhZGp1c3QgYm90aAomIzQzOyAqIHRoZSBvdXRwdXQgY2xvY2sgcGhhc2UgYW5kIHRoZSBUb0QgY291bnRlciBzaW11bHRhbmVvdXNseS4gVGhpcyBrZWVwcwomIzQzOyAqIG91dHB1dHMgYW5kIFRvRCBjb2hlcmVudC4gT25seSB2YWxpZCBmb3IgTkNPLgomIzQzOyAqCiYjNDM7ICogT3V0cHV0cyBhcmUgZ3JvdXBlZCBieSBzeW50aGVzaXplciBzaW5jZSB0aGUgcGhhc2Ugc3RlcCB2YWx1ZSBpcyBpbgomIzQzOyAqIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcy4gVGhlIGZpcnN0IHN5bnRoIGdyb3VwIHdpdGggZW5hYmxlZCBvdXRwdXRzCiYjNDM7ICogdXNlcyB0b2Rfc3RlcCB0byBhZGp1c3QgYm90aCBvdXRwdXRzIGFuZCB0aGUgVG9EIGNvdW50ZXIuIFJlbWFpbmluZwomIzQzOyAqIGdyb3VwcyBzdGVwIG91dHB1dHMgb25seS4gSWYgbm8gc3ludGggaGFzIGVuYWJsZWQgb3V0cHV0cywgdGhlIFRvRAomIzQzOyAqIGNvdW50ZXIgaXMgc3RlcHBlZCBhbG9uZSB1c2luZyBhbiBlbXB0eSBvdXRwdXQgbWFzayAodGhlIEZXIHVzZXMKJiM0MzsgKiB0aGUgZmlyc3QgZW5hYmxlZCBzeW50aCYjMzk7cyBwZXJpb2QgZm9yIHRoZSBjb252ZXJzaW9uKS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRU9QTk9UU1VQUCBpZiBubyBzeW50aHMgYXZhaWxhYmxlLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLAomIzQzOwkJCQkJICAgICAgIHM2NCBkZWx0YSkKJiM0Mzt7CiYjNDM7CXUxNiBzeW50aF9tYXNrW1pMMzA3M1hfTlVNX1NZTlRIU10gPSB7fTsKJiM0MzsJc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC0mZ3Q7ZGV2OwomIzQzOwljb25zdCBzdHJ1Y3QgemwzMDczeF9zeW50aCAqc3ludGg7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW47CiYjNDM7CXUzMiBmaXJzdF9zeW50aF9mcmVxID0gMDsKJiM0MzsJYm9vbCB0b2Rfc3RlcHBlZCA9IGZhbHNlOwomIzQzOwlzMzIgc3RlcF9jeWNsZXM7CiYjNDM7CXUzMiBzeW50aF9mcmVxOwomIzQzOwlpbnQgcmM7CiYjNDM7CXU4IGk7CiYjNDM7CiYjNDM7CS8qIEJ1aWxkIHBlci1zeW50aCBvdXRwdXQgbWFza3MgZnJvbSByZWdpc3RlcmVkIG91dHB1dCBwaW5zICovCiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkocGluLCAmYW1wO3psZHBsbC0mZ3Q7cGlucywgbGlzdCkgewomIzQzOwkJdTggb3V0X2lkLCBzeW50aF9pZDsKJiM0MzsKJiM0MzsJCWlmICh6bDMwNzN4X2RwbGxfaXNfaW5wdXRfcGluKHBpbikpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlvdXRfaWQgPSB6bDMwNzN4X291dHB1dF9waW5fb3V0X2dldChwaW4tJmd0O2lkKTsKJiM0MzsKJiM0MzsJCWlmICghemwzMDczeF9kZXZfb3V0X2lzX3N0ZXBwZWQoemxkZXYsIG91dF9pZCkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlzeW50aF9pZCA9IHpsMzA3M3hfZGV2X291dF9zeW50aF9nZXQoemxkZXYsIG91dF9pZCk7CiYjNDM7CQlpZiAoc3ludGhfaWQgJmd0Oz0gWkwzMDczWF9OVU1fU1lOVEhTKSB7CiYjNDM7CQkJZGV2X3dhcm4oemxkZXYtJmd0O2RldiwgJiMzNDtVbmV4cGVjdGVkIHN5bnRoIGlkIGZvciBPVVQldVxuJiMzNDssCiYjNDM7CQkJCSBvdXRfaWQpOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwkJc3ludGhfbWFza1tzeW50aF9pZF0gfD0gQklUKG91dF9pZCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogUHJvY2VzcyBlYWNoIHN5bnRoIGdyb3VwICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBaTDMwNzNYX05VTV9TWU5USFM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzeW50aCA9IHpsMzA3M3hfc3ludGhfc3RhdGVfZ2V0KHpsZGV2LCBpKTsKJiM0MzsJCWlmICghemwzMDczeF9zeW50aF9pc19lbmFibGVkKHN5bnRoKSB8fAomIzQzOwkJICAgIHpsMzA3M3hfc3ludGhfZHBsbF9nZXQoc3ludGgpICE9IHpsZHBsbC0mZ3Q7aWQpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlzeW50aF9mcmVxID0gemwzMDczeF9zeW50aF9mcmVxX2dldChzeW50aCk7CiYjNDM7CiYjNDM7CQkvKiBSZW1lbWJlciBmaXJzdCBlbmFibGVkIHN5bnRoIGZyZXEgZm9yIFRvRC1vbmx5IGZhbGxiYWNrICovCiYjNDM7CQlpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpCiYjNDM7CQkJZmlyc3Rfc3ludGhfZnJlcSA9IHN5bnRoX2ZyZXE7CiYjNDM7CiYjNDM7CQlpZiAoIXN5bnRoX21hc2tbaV0pCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkvKiBTYWZlIGZvciBzMzI6IG1heCBzeW50aCBmcmVxIGlzIDc1MCBNSHogKi8KJiM0MzsJCXN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIHN5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7CiYjNDM7CiYjNDM7CQlyYyA9IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtJmd0O2lkLAomIzQzOwkJCQkJICAgICBzeW50aF9tYXNrW2ldLCBzdGVwX2N5Y2xlcywKJiM0MzsJCQkJCSAgICAgIXRvZF9zdGVwcGVkKTsKJiM0MzsJCWlmIChyYykgewomIzQzOwkJCWlmICh0b2Rfc3RlcHBlZCkgewomIzQzOwkJCQlkZXZfd2Fybih6bGRldi0mZ3Q7ZGV2LAomIzQzOwkJCQkJICYjMzQ7UGFydGlhbCBwaGFzZSBzdGVwIGZhaWx1cmVcbiYjMzQ7KTsKJiM0MzsJCQkJcmV0dXJuIDA7CiYjNDM7CQkJfQomIzQzOwkJCXJldHVybiByYzsKJiM0MzsJCX0KJiM0MzsJCXRvZF9zdGVwcGVkID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CS8qIE5vIGVuYWJsZWQgb3V0cHV0cyBmb3VuZDsgc3RlcCBUb0QgY291bnRlciBvbmx5IHVzaW5nIHRoZQomIzQzOwkgKiBmaXJzdCBlbmFibGVkIHN5bnRoJiMzOTtzIHBlcmlvZCAoZW1wdHkgb3V0cHV0IG1hc2spLgomIzQzOwkgKi8KJiM0MzsJaWYgKCF0b2Rfc3RlcHBlZCkgewomIzQzOwkJc3RlcF9jeWNsZXMgPSBkaXZfczY0KGRlbHRhICogZmlyc3Rfc3ludGhfZnJlcSwgTlNFQ19QRVJfU0VDKTsKJiM0MzsJCXJldHVybiB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCh6bGRldiwgemxkcGxsLSZndDtpZCwgMCwKJiM0MzsJCQkJCSAgICAgICBzdGVwX2N5Y2xlcywgdHJ1ZSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIC8qKgotICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlCi0gKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmUKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUgLSBhZGp1c3QgUFRQIGNsb2NrIHRpbWUKJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm8KJiM0MzsgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcwogICoKLSAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuCiYjNDM7ICogRm9yIE5DTywgbGFyZ2UgZGVsdGFzICgmZ3Q7PSAxIHNlY29uZCkgYXJlIHNwbGl0IGludG8gYSBUb0QKJiM0MzsgKiByZWFkLW1vZGlmeS13cml0ZSBmb3IgdGhlIHNlY29uZHMgcGFydCBhbmQgYW4gb3V0cHV0IHBoYXNlIHN0ZXAgZm9yCiYjNDM7ICogdGhlIHN1Yi1zZWNvbmQgcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgcGhhc2Ugc3RlcCBkaXJlY3RseSwKJiM0MzsgKiBmYWxsaW5nIGJhY2sgdG8gVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIGlmIHBoYXNlIHN0ZXAgaXMgdW5hdmFpbGFibGUuCiYjNDM7ICogSW4gQVVUTy9SRUZMT0NLIG1vZGVzLCBsYXJnZSBkZWx0YXMgYXJlIHNwbGl0IGludG8gVG9ECiYjNDM7ICogcmVhZC1tb2RpZnktd3JpdGUgZm9yIHNlY29uZHMgYW5kIFRJRSB3cml0ZSBmb3IgdGhlIHN1Yi1zZWNvbmQKJiM0MzsgKiByZW1haW5kZXIuIFN1Yi1zZWNvbmQgZGVsdGFzIHVzZSBUSUUgd3JpdGUgZGlyZWN0bHkuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKICAqLwotdm9pZAotemwzMDczeF9kcGxsX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczY0IGRlbHRhKQogewotCVdBUk4oemxkcGxsLSZndDtkcGxsX2RldiwgJiMzNDtEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXG4mIzM0Oyk7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLAomIzQzOwkJCQkJCSAgIHB0cF9pbmZvKTsKJiM0MzsJc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC0mZ3Q7ZGV2OwomIzQzOwljb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuOwomIzQzOwlib29sIHNlY19hZGp1c3RlZCA9IGZhbHNlOwomIzQzOwlzdHJ1Y3QgdGltZXNwZWM2NCB0czsKJiM0MzsJaW50IHJjOwogCi0JbXV0ZXhfZGVzdHJveSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7Ci0Ja2ZyZWUoemxkcGxsKTsKJiM0MzsJaWYgKCFkZWx0YSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwomIzQzOwkvKiBNb2RlcyB3aXRob3V0IHBoYXNlIHN0ZXAgb3IgVElFIHVzZSBwbGFpbiBUb0QgYWRqdXN0ICovCiYjNDM7CWNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZGV2LCB6bGRwbGwtJmd0O2lkKTsKJiM0MzsJaWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikgJmFtcDsmYW1wOwomIzQzOwkgICAgIXpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjaGFuKSkKJiM0MzsJCXJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLSZndDtpZCwKJiM0MzsJCQkJCSAgICAgICBuc190b190aW1lc3BlYzY0KGRlbHRhKSk7CiYjNDM7CiYjNDM7CS8qIFNwbGl0IG9mZiBzZWNvbmRzIHZpYSBUb0QgcmVhZC1tb2RpZnktd3JpdGUgc28gdGhlIHN1Yi1zZWNvbmQKJiM0MzsJICogcmVtYWluZGVyIGNhbiBiZSBhcHBsaWVkIHRocm91Z2ggdGhlIG91dHB1dC1jb2hlcmVudCBtZWNoYW5pc20KJiM0MzsJICogKHBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlKS4KJiM0MzsJICovCiYjNDM7CWlmIChkZWx0YSAmZ3Q7PSBOU0VDX1BFUl9TRUMgfHwgZGVsdGEgJmx0Oz0gLU5TRUNfUEVSX1NFQykgewomIzQzOwkJczMyIHJlbWFpbmRlcjsKJiM0MzsKJiM0MzsJCXRzLnR2X3NlYyA9IGRpdl9zNjRfcmVtKGRlbHRhLCBOU0VDX1BFUl9TRUMsICZhbXA7cmVtYWluZGVyKTsKJiM0MzsJCXRzLnR2X25zZWMgPSAwOwomIzQzOwkJZGVsdGEgPSByZW1haW5kZXI7CiYjNDM7CiYjNDM7CQlyYyA9IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtJmd0O2lkLCB0cyk7CiYjNDM7CQlpZiAocmMpCiYjNDM7CQkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwkJLyogTm8gc3ViLXNlY29uZCByZW1haW5kZXIsIGRvbmUgKi8KJiM0MzsJCWlmICghZGVsdGEpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CQkvKiBXYWl0IGZvciB0aGUgVG9EIHdyaXRlIHRvIGJlIGFwcGxpZWQgYXQgdGhlIDEgSHogZWRnZQomIzQzOwkJICogYmVmb3JlIGlzc3VpbmcgcGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUsIHNvIHRoZSBwZW5kaW5nCiYjNDM7CQkgKiBXUl9ORVhUXzFIWiBkb2VzIG5vdCBvdmVyd3JpdGUgdGhlIHN1Yi1zZWNvbmQgYWRqdXN0bWVudC4KJiM0MzsJCSAqLwomIzQzOwkJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIHpsZHBsbC0mZ3Q7aWQpOwomIzQzOwkJaWYgKHJjKQomIzQzOwkJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJCXNlY19hZGp1c3RlZCA9IHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQXBwbHkgc3ViLXNlY29uZCBkZWx0YSB2aWEgcGhhc2Ugc3RlcCAoTkNPKSBvciBUSUUgd3JpdGUgKi8KJiM0MzsJaWYgKHpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSkgewomIzQzOwkJcmMgPSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCh6bGRwbGwsIGRlbHRhKTsKJiM0MzsJCWlmICghcmMpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyYyA9IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoemxkZXYsIHpsZHBsbC0mZ3Q7aWQsIGRlbHRhKTsKJiM0MzsJCWlmICghcmMpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogUGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUgZmFpbGVkLCBmYWxsIGJhY2sgdG8gVG9EIGFkanVzdCAqLwomIzQzOwlyYyA9IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtJmd0O2lkLAomIzQzOwkJCQkgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTsKJiM0MzsKJiM0MzsJLyogSW4gdGhlIHVubGlrZWx5IGV2ZW50IHRoYXQgYm90aCBwaGFzZSBzdGVwL1RJRSB3cml0ZSBhbmQgZmFsbGJhY2sKJiM0MzsJICogVG9EIGFkanVzdCBmYWlsIGFmdGVyIHNlY29uZHMgd2VyZSBhbHJlYWR5IGNvbW1pdHRlZCwgcmV0dXJuCiYjNDM7CSAqIHN1Y2Nlc3MgdG8gcHJldmVudCB0aGUgUFRQIHNlcnZvIGZyb20gcmV0cnlpbmcgdGhlIGZ1bGwgZGVsdGEgYW5kCiYjNDM7CSAqIGFwcGx5aW5nIHNlY29uZHMgYWdhaW4uIFRoZSBzdWItc2Vjb25kIHJlc2lkdWFsIHdpbGwgc2VsZi1jb3JyZWN0CiYjNDM7CSAqIGluIHRoZSBuZXh0IHNlcnZvIGN5Y2xlLgomIzQzOwkgKi8KJiM0MzsJaWYgKHJjICZhbXA7JmFtcDsgc2VjX2FkanVzdGVkKSB7CiYjNDM7CQlkZXZfd2Fybih6bGRldi0mZ3Q7ZGV2LAomIzQzOwkJCSAmIzM0O1N1Yi1zZWNvbmQgYWRqdXN0bWVudCBmYWlsZWQgYWZ0ZXIgc2Vjb25kcyBhcHBsaWVkXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcmM7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSAtIGFkanVzdCBQVFAgY2xvY2sgZnJlcXVlbmN5CiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvCiYjNDM7ICogQHNjYWxlZF9wcG06IGZyZXF1ZW5jeSBhZGp1c3RtZW50IGluIHNjYWxlZCBwcG0gKHBwbSAqIDJeMTYpCiYjNDM7ICoKJiM0MzsgKiBPbmx5IHN1cHBvcnRlZCBmb3IgTkNPLiBXcml0ZXMgdGhlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgcmVnaXN0ZXIuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46CiYjNDM7ICogKiAlMAkJCS0gc3VjY2VzcyBvciBAc2NhbGVkX3BwbSBpcyB6ZXJvIChuby1vcCkKJiM0MzsgKiAqICUtRU9QTk9UU1VQUAktIE5DTyBwaW4gaXMgbm90IGNvbm5lY3RlZCBhbmQgQHNjYWxlZF9wcG0gaXMgbm9uLXplcm8KJiM0MzsgKiAqIG5lZ2F0aXZlCQktIG90aGVyIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludAomIzQzO3psMzA3M3hfZHBsbF9wdHBfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGxvbmcgc2NhbGVkX3BwbSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLAomIzQzOwkJCQkJCSAgIHB0cF9pbmZvKTsKJiM0MzsJY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjsKJiM0MzsJczY0IG9mZnNldDsKJiM0MzsKJiM0MzsJLyogQ29udmVydCBzY2FsZWRfcHBtIHRvIGRmX29mZnNldCBpbiAyXi00OCBzdGVwczoKJiM0MzsJICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjMyKSAvIDEwXjYKJiM0MzsJICoKJiM0MzsJICogU2ltcGxpZnkgdG8gYXZvaWQgb3ZlcmZsb3c6CiYjNDM7CSAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogMl4yNikgLyA1XjYKJiM0MzsJICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiA2NzEwODg2NCkgLyAxNTYyNQomIzQzOwkgKi8KJiM0MzsJb2Zmc2V0ID0gLWRpdl9zNjQoKHM2NClzY2FsZWRfcHBtICogNjcxMDg4NjRMTCwgMTU2MjUpOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwomIzQzOwljaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRwbGwtJmd0O2RldiwgemxkcGxsLSZndDtpZCk7CiYjNDM7CWlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKQomIzQzOwkJcmV0dXJuIHNjYWxlZF9wcG0gPyAtRU9QTk9UU1VQUCA6IDA7CiYjNDM7CWlmIChvZmZzZXQgPT0gY2hhbi0mZ3Q7ZGZfb2Zmc2V0KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCh6bGRwbGwtJmd0O2RldiwgemxkcGxsLSZndDtpZCwgb2Zmc2V0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSAtIGFkanVzdCBQVFAgY2xvY2sgcGhhc2UKJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm8KJiM0MzsgKiBAZGVsdGE6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMKJiM0MzsgKgomIzQzOyAqIE9ubHkgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMuIFVzZXMgVElFIHdyaXRlIGZvcgomIzQzOyAqIG5hbm9zZWNvbmQgcmVzb2x1dGlvbiBwaGFzZSBhZGp1c3RtZW50LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOgomIzQzOyAqICogJTAJCQktIHN1Y2Nlc3Mgb3IgQGRlbHRhIGlzIHplcm8gKG5vLW9wKQomIzQzOyAqICogJS1FT1BOT1RTVVBQCS0gbW9kZSBkb2VzIG5vdCBzdXBwb3J0IFRJRSBhbmQgQGRlbHRhIGlzIG5vbi16ZXJvCiYjNDM7ICogKiBuZWdhdGl2ZQkJLSBvdGhlciBlcnJvcgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHMzMiBkZWx0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLAomIzQzOwkJCQkJCSAgIHB0cF9pbmZvKTsKJiM0MzsJc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC0mZ3Q7ZGV2OwomIzQzOwljb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuOwomIzQzOwomIzQzOwlpZiAoIWRlbHRhKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CWNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZGV2LCB6bGRwbGwtJmd0O2lkKTsKJiM0MzsKJiM0MzsJaWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY2hhbikpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJldHVybiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHpsZGV2LCB6bGRwbGwtJmd0O2lkLCBkZWx0YSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzMzIKJiM0Mzt6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyBfX2Fsd2F5c191bnVzZWQpCiYjNDM7ewomIzQzOwkvKiBIVyBsaW1pdHMgVElFIHdyaXRlIHRvICYjNDM7LTEgc2Vjb25kLiBSZXR1cm4gdGhlIGNvbnN0YW50IEhXCiYjNDM7CSAqIGxpbWl0IGFuZCBsZXQgYWRqcGhhc2UgaGFuZGxlIG1vZGUtc3BlY2lmaWMgY2hlY2tzLgomIzQzOwkgKi8KJiM0MzsJcmV0dXJuIE5TRUNfUEVSX1NFQyAtIDE7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvID0gewomIzQzOwkub3duZXIJCT0gVEhJU19NT0RVTEUsCiYjNDM7CS5tYXhfYWRqCT0gWkwzMDczWF9EUExMX1BUUF9NQVhfQURKLAomIzQzOwkuZ2V0dGltZXg2NAk9IHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCwKJiM0MzsJLnNldHRpbWU2NAk9IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0LAomIzQzOwkuYWRqdGltZQk9IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSwKJiM0MzsJLmFkamZpbmUJPSB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUsCiYjNDM7CS5hZGpwaGFzZQk9IHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2UsCiYjNDM7CS5nZXRtYXhwaGFzZQk9IHpsMzA3M3hfZHBsbF9wdHBfZ2V0bWF4cGhhc2UsCiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBhIERQTEwgY2hhbm5lbAomIzQzOyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byByZWdpc3RlciBQVFAgY2xvY2sgZm9yCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQomIzQzO3sKJiM0MzsJc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC0mZ3Q7ZGV2OwomIzQzOwlzdHJ1Y3QgcHRwX2Nsb2NrICpwdHBfY2xvY2s7CiYjNDM7CiYjNDM7CXNucHJpbnRmKHpsZHBsbC0mZ3Q7cHRwX2luZm8ubmFtZSwgc2l6ZW9mKHpsZHBsbC0mZ3Q7cHRwX2luZm8ubmFtZSksCiYjNDM7CQkgJiMzNDslcy1kcGxsJXUmIzM0OywgZGV2X25hbWUoemxkZXYtJmd0O2RldiksIHpsZHBsbC0mZ3Q7aWQpOwomIzQzOwomIzQzOwlwdHBfY2xvY2sgPSBwdHBfY2xvY2tfcmVnaXN0ZXIoJmFtcDt6bGRwbGwtJmd0O3B0cF9pbmZvLCB6bGRldi0mZ3Q7ZGV2KTsKJiM0MzsJaWYgKElTX0VSUihwdHBfY2xvY2spKSB7CiYjNDM7CQlkZXZfZXJyKHpsZGV2LSZndDtkZXYsICYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgRFBMTCV1XG4mIzM0OywKJiM0MzsJCQl6bGRwbGwtJmd0O2lkKTsKJiM0MzsJCXJldHVybiBQVFJfRVJSKHB0cF9jbG9jayk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJemxkcGxsLSZndDtwdHBfY2xvY2sgPSBwdHBfY2xvY2s7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIgLSB1bnJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgYSBEUExMIGNoYW5uZWwKJiM0MzsgKiBAemxkcGxsOiBEUExMIGNoYW5uZWwgdG8gdW5yZWdpc3RlciBQVFAgY2xvY2sgZm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKJiM0Mzt7CiYjNDM7CWlmICghSVNfRVJSX09SX05VTEwoemxkcGxsLSZndDtwdHBfY2xvY2spKSB7CiYjNDM7CQlwdHBfY2xvY2tfdW5yZWdpc3Rlcih6bGRwbGwtJmd0O3B0cF9jbG9jayk7CiYjNDM7CQl6bGRwbGwtJmd0O3B0cF9jbG9jayA9IE5VTEw7CiYjNDM7CX0KIH0KIAogLyoqCkBAIC0yMzk4LDYgJiM0MzsyNzMwLDQ4IEBAIHpsMzA3M3hfZHBsbF9yZWZfc3luY19wYWlyc19yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfYWxsb2MgLSBhbGxvY2F0ZSBEUExMIGRldmljZQomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlcgomIzQzOyAqCiYjNDM7ICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBwb2ludGVyIHRvIERQTEwgZGV2aWNlIG9uIHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgemwzMDczeF9kcGxsICoKJiM0Mzt6bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7CiYjNDM7CiYjNDM7CXpsZHBsbCA9IGt6YWxsb2Nfb2JqKCp6bGRwbGwpOwomIzQzOwlpZiAoIXpsZHBsbCkKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwomIzQzOwomIzQzOwl6bGRwbGwtJmd0O2RldiA9IHpsZGV2OwomIzQzOwl6bGRwbGwtJmd0O2lkID0gY2g7CiYjNDM7CXpsZHBsbC0mZ3Q7cHRwX2luZm8gPSB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm87CiYjNDM7CW11dGV4X2luaXQoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwlJTklUX0xJU1RfSEVBRCgmYW1wO3psZHBsbC0mZ3Q7cGlucyk7CiYjNDM7CiYjNDM7CXJldHVybiB6bGRwbGw7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9mcmVlIC0gZnJlZSBEUExMIGRldmljZQomIzQzOyAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZQomIzQzOyAqCiYjNDM7ICogRGVhbGxvY2F0ZXMgZ2l2ZW4gRFBMTCBkZXZpY2UgcHJldmlvdXNseSBhbGxvY2F0ZWQgYnkgQHpsMzA3M3hfZHBsbF9hbGxvYy4KJiM0MzsgKi8KJiM0Mzt2b2lkCiYjNDM7emwzMDczeF9kcGxsX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQomIzQzO3sKJiM0MzsJV0FSTih6bGRwbGwtJmd0O2RwbGxfZGV2LCAmIzM0O0RQTEwgZGV2aWNlIGlzIHN0aWxsIHJlZ2lzdGVyZWRcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJbXV0ZXhfZGVzdHJveSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiYjNDM7CWtmcmVlKHpsZHBsbCk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIgLSByZWdpc3RlciBEUExMIGRldmljZSBhbmQgYWxsIGl0cyBwaW5zCiAgKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmUKQEAgLTI0MjgsNiAmIzQzOzI4MDIsMTMgQEAgemwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKIAkJcmV0dXJuIHJjOwogCX0KIAomIzQzOwlyYyA9IHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIoemxkcGxsKTsKJiM0MzsJaWYgKHJjKSB7CiYjNDM7CQl6bDMwNzN4X2RwbGxfcGluc191bnJlZ2lzdGVyKHpsZHBsbCk7CiYjNDM7CQl6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTsKJiM0MzsJCXJldHVybiByYzsKJiM0MzsJfQomIzQzOwogCXJldHVybiAwOwogfQogCkBAIC0yNDQxLDcgJiM0MzsyODIyLDcgQEAgemwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKIHZvaWQKIHpsMzA3M3hfZHBsbF91bnJlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKIHsKLQkvKiBVbnJlZ2lzdGVyIGFsbCBwaW5zIGFuZCBkcGxsICovCiYjNDM7CXpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3Rlcih6bGRwbGwpOwogCXpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTsKIAl6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaAppbmRleCBmYWViYzQwMmJhMWI3Li45OTMyMjFkYzYzMjQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oCkBAIC01LDYgJiM0Mzs1LDcgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2RwbGwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9saXN0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtjb3JlLmgmIzM0OwogCkBAIC0yMiw2ICYjNDM7MjMsOCBAQAogICogQHR5cGU6IERQTEwgdHlwZSAoUFBTIG9yIEVFQykKICAqIEBsb2NrX3N0YXR1czogbGFzdCBzYXZlZCBEUExMIGxvY2sgc3RhdHVzCiAgKiBAcGluczogbGlzdCBvZiBwaW5zCiYjNDM7ICogQHB0cF9pbmZvOiBQVFAgY2xvY2sgaW5mbwomIzQzOyAqIEBwdHBfY2xvY2s6IHJlZ2lzdGVyZWQgUFRQIGNsb2NrIChvciBOVUxMKQogICovCiBzdHJ1Y3QgemwzMDczeF9kcGxsIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCQlsaXN0OwpAQCAtMzYsNiAmIzQzOzM5LDggQEAgc3RydWN0IHpsMzA3M3hfZHBsbCB7CiAJZW51bSBkcGxsX3R5cGUJCQl0eXBlOwogCWVudW0gZHBsbF9sb2NrX3N0YXR1cwkJbG9ja19zdGF0dXM7CiAJc3RydWN0IGxpc3RfaGVhZAkJcGluczsKJiM0MzsJc3RydWN0IHB0cF9jbG9ja19pbmZvCQlwdHBfaW5mbzsKJiM0MzsJc3RydWN0IHB0cF9jbG9jawkJKnB0cF9jbG9jazsKIH07CiAKIHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgKaW5kZXggYjcwZWFkN2Q0NDk1Yi4uZjNhNWUxMjE1YWEzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaApAQCAtMTc5LDYgJiM0MzsxNzksMjAgQEAKICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRAkJCUdFTk1BU0soMiwgMCkKICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRF9BQ0NfSQkJNAogCiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTAkJCVpMX1JFRyg1LCAweDMwLCAxKQomIzQzOyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUAkJCUdFTk1BU0soMiwgMCkKJiM0MzsjZGVmaW5lIFpMX0RQTExfVElFX0NUUkxfT1BfV1IJCQk0CiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTF9NQVNLCQlaTF9SRUcoNSwgMHgzMSwgMSkKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9DVFJMKF9pZHgpCQkJCQlcCiYjNDM7CVpMX1JFR19JRFgoX2lkeCwgNSwgMHgzOCwgMSwgWkwzMDczWF9NQVhfQ0hBTk5FTFMsIDEpCiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX1NFTQkJCUJJVCg0KQomIzQzOyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTUQJCQlHRU5NQVNLKDMsIDApCiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWgkxCiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UCQk4CiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9ORVhUXzFIWgk5CiYjNDM7CiAjZGVmaW5lIFpMX1JFR19EUExMX01FQVNfQ1RSTAkJCVpMX1JFRyg1LCAweDUwLCAxKQogI2RlZmluZSBaTF9EUExMX01FQVNfQ1RSTF9FTgkJCUJJVCgwKQogI2RlZmluZSBaTF9EUExMX01FQVNfQ1RSTF9BVkdfRkFDVE9SCQlHRU5NQVNLKDcsIDQpCkBAIC0xOTMsNiAmIzQzOzIwNyw5IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBSZWdpc3RlciBQYWdlcyA2LTcsIERQTEwgRGF0YQomIzQzOyAqCiYjNDM7ICogUGVyLWNoYW5uZWwgcmVnaXN0ZXJzIHdpdGggc3RyaWRlIDB4MjAuIENoYW5uZWxzIDAtMyByZXNpZGUgb24gcGFnZSA2LAomIzQzOyAqIGNoYW5uZWwgNCBvbiBwYWdlIDcuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2RlZmluZSBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeCkJCQkJCVwKQEAgLTIwMiw2ICYjNDM7MjE5LDI0IEBACiAJKChfaWR4KSAmbHQ7IDQgPyBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfNCkKICNkZWZpbmUgWkxfRFBMTF9ERl9PRkZTRVRfVU5LTk9XTglTNjRfTUlOCiAKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBXzAzKF9pZHgpCQkJCQlcCiYjNDM7CVpMX1JFR19JRFgoX2lkeCwgNiwgMHgwQywgNiwgNCwgMHgyMCkKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBXzQJCQlaTF9SRUcoNywgMHgwQywgNikKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBKF9pZHgpCQkJCQlcCiYjNDM7CSgoX2lkeCkgJmx0OyA0ID8gWkxfUkVHX0RQTExfVElFX0RBVEFfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9USUVfREFUQV80KQomIzQzOwomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQ18wMyhfaWR4KQkJCQkJXAomIzQzOwlaTF9SRUdfSURYKF9pZHgsIDYsIDB4MTIsIDYsIDQsIDB4MjApCiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzQJCQlaTF9SRUcoNywgMHgxMiwgNikKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUMoX2lkeCkJCQkJCVwKJiM0MzsJKChfaWR4KSAmbHQ7IDQgPyBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVE9EX1NFQ180KQomIzQzOwomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TXzAzKF9pZHgpCQkJCQlcCiYjNDM7CVpMX1JFR19JRFgoX2lkeCwgNiwgMHgxOCwgNCwgNCwgMHgyMCkKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU180CQkJWkxfUkVHKDcsIDB4MTgsIDQpCiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlMoX2lkeCkJCQkJCVwKJiM0MzsJKChfaWR4KSAmbHQ7IDQgPyBaTF9SRUdfRFBMTF9UT0RfTlNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfTlNfNCkKJiM0MzsKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogUmVnaXN0ZXIgUGFnZSA5LCBTeW50aCBhbmQgT3V0cHV0CiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0yMjEsNiAmIzQzOzI1NiwyMyBAQAogI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9FTgkJCUJJVCgwKQogI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9TWU5USF9TRUwJCUdFTk1BU0soNiwgNCkKIAomIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTSwkJWkxfUkVHKDksIDB4MzYsIDIpCiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTAkJWkxfUkVHKDksIDB4MzgsIDEpCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX0RQTEwJCUdFTk1BU0soNiwgNCkKJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVAJQklUKDMpCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QCQlHRU5NQVNLKDEsIDApCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX05PTkUJMAomIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9SRVNFVAkxCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1JFQUQJMgomIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURQkzCiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTlVNQkVSCQlaTF9SRUcoOSwgMHgzOSwgMSkKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLCQlaTF9SRUcoOSwgMHgzYSwgMikKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBCQlaTF9SRUcoOSwgMHgzYywgNCkKJiM0MzsKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBSZWdpc3RlciBQYWdlIDEwLCBSZWYgTWFpbGJveAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODEwOQoJCQkJCQkJb3V0cHV0OiAyMDgKCQkJCQkJCXRob3VnaHRzOiAxNTg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IFBUUCBDbG9jayBTdXBwb3J0IGZvciBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0JiMzOTtzIGFkZGluZyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIsIHNwZWNpZmljYWxseSB0aGUgYGRyaXZlcnMvZHBsbC96bDMwNzN4L2AgY29kZS4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBpbXBsZW1lbnRpbmcgZnVuY3Rpb25zIHRvIHJlYWQsIHdyaXRlLCBhbmQgYWRqdXN0IHRoZSBUaW1lIG9mIERheSAoVG9EKSByZWdpc3RlcnMsIGFkanVzdCB0aGUgZnJlcXVlbmN5IGFuZCBwaGFzZSwgYW5kIHJlZ2lzdGVyaW5nIGEgUFRQIGNsb2NrIGRldmljZSBmb3IgZWFjaCBEUExMIGNoYW5uZWwuIE15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgY29kZSBpbnRyb2R1Y2VzIGFueSByaXNrcyBoZXJlLgoKRmlyc3QsIEkgc2VlIHRoZSBgcHRwX2Nsb2NrX2luZm9gIHN0cnVjdCBpcyBkZWZpbmVkIGFuZCBpbml0aWFsaXplZCBzdGF0aWNhbGx5LiBUaGF0JiMzOTtzIGdvb2QuIEluIGB6bDMwNzN4X2RwbGxfYWxsb2NgLCBpdCBpcyBjb3BpZWQgdG8gYHpsZHBsbC0mZ3Q7cHRwX2luZm9gLiBDcnVjaWFsbHksIGB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm9gIGlzIGBzdGF0aWMgY29uc3RgLCBzbyBhbnkgdW5pbml0aWFsaXplZCBmaWVsZHMgZ2V0IHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIGNvbXBpbGVyLiBUaGUgYG5hbWVgIGZpZWxkIG9mIHRoaXMgc3RydWN0IGlzIHBvcHVsYXRlZCB1c2luZyBgc25wcmludGZgIGluIGB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyYC4gVGhpcyBtZWFucyB0aGUgYmVnaW5uaW5nIG9mIGBuYW1lYCBpcyBvdmVyd3JpdHRlbiwgYnV0IHRoZSByZXN0IG9mIGBuYW1lYCB0aGF0JiMzOTtzIG5vdCBvdmVyd3JpdHRlbiBpcyB6ZXJvLiBTbywgdGhpcyBsb29rcyBzYWZlLgoKVGhlIGB6bDMwNzN4X2NoYW5fdG9kX3JlYWRgIGZ1bmN0aW9uIGxvb2tzIHN0cmFpZ2h0Zm9yd2FyZC4gSXQgcmVhZHMgaGFyZHdhcmUgcmVnaXN0ZXJzIHRvIHBvcHVsYXRlIHRoZSBgdHMtJmd0O3R2X3NlY2AgYW5kIGB0cy0mZ3Q7dHZfbnNlY2AgZmllbGRzIG9mIGEgYHN0cnVjdCB0aW1lc3BlYzY0YC4gQm90aCB2YWx1ZXMgYXJlIGluaXRpYWxpemVkIGJlZm9yZSByZXR1cm5pbmcuCgpUaGUgYHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwYCB1c2VzIGB1MTYgc3ludGhfbWFza1taTDMwNzNYX05VTV9TWU5USFNdID0ge307YCB3aGljaCBpcyB6ZXJvIGluaXRpYWxpemVkLgoKTmV4dCwgSSYjMzk7bSBjaGVja2luZyBpZiB0aGVyZSYjMzk7cyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcGFzc2VkIHRvIHVzZXIgc3BhY2UuIFRoZSBgcHRwX2Nsb2NrX2luZm9gIHN0cnVjdCAqaXMqIHBhc3NlZCB0byBgcHRwX2Nsb2NrX3JlZ2lzdGVyYC4gSSBjb25zaWRlcmVkIGBuYW1lYCwgYnV0IGFzIEkgc2FpZCwgdGhlIHN0YXRpYyBgcHRwX2Nsb2NrX2luZm9gIHN0cnVjdCBpcyB6ZXJvIGluaXRpYWxpemVkLCBhbmQgdGhlIGBzbnByaW50ZmAgZW5zdXJlcyBhdCBsZWFzdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBgbmFtZWAgaXMgdmFsaWQgYW5kIG51bGwgdGVybWluYXRlZC4gVGhlIHJlc3QgcmVtYWlucyB6ZXJvIGFuZCBpcyBoYXJtbGVzcy4KCkxvb2tpbmcgYXQgYHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0YCwgYHRzX25leHRgIGFuZCBgdHNfY3VyYCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgd2l0aGluIHRoZSBmdW5jdGlvbiBieSBgemwzMDczeF9jaGFuX3RvZF9yZWFkYC4KCkZvciBgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lYCwgYHRzYCBpcyBhbHNvIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggYHR2X3NlY2AgYW5kIGB0dl9uc2VjYC4gTm8gaXNzdWVzIHRoZXJlLgoKVGhpcyBwYXRjaCBwcmltYXJpbHkgZGVhbHMgd2l0aCBQVFAgY2xvY2sgcmVnaXN0cmF0aW9uIGFuZCBsb3ctbGV2ZWwgaGFyZHdhcmUgaW50ZXJhY3Rpb25zLiBJdCYjMzk7cyBoYW5kbGluZyByZWFkcyBhbmQgd3JpdGVzIHRvIGhhcmR3YXJlIHJlZ2lzdGVycyBhbmQgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgUFRQIHN1YnN5c3RlbS4gSSYjMzk7bSBub3Qgc2VlaW5nIGFueSBjb21wbGV4IHN0cnVjdHVyZXMgb3IgZGF0YSBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2Ugd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy4gVGhlcmUgYWxzbyBkb2VzbiYjMzk7dCBzZWVtIHRvIGJlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGJlaW5nIHVzZWQgaW4gY29udHJvbCBmbG93LiBHaXZlbiB0aGlzLCBJIGRvbiYjMzk7dCBiZWxpZXZlIEtNU0FOIGlzIG5lY2Vzc2FyeSBoZXJlLiBLQVNBTiBpcyBhbHJlYWR5IHN1ZmZpY2llbnQgZm9yIG1lbW9yeSBzYWZldHkgY29uY2VybnMgbGlrZSBvdXQtb2YtYm91bmRzIGFjY2VzcyBhbmQgdXNlLWFmdGVyLWZyZWUsIGlmIHByZXNlbnQuCgpPbmUgbGFzdCB0aGluZywgdGhlIGBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzYCBwYXJhbWV0ZXIuIEluIGB6bDMwNzN4X2NoYW5fdG9kX3JlYWRgLCB0aGlzIGlzIHBhc3NlZCB0byBgcHRwX3JlYWRfc3lzdGVtX3ByZXRzYCBhbmQgYHB0cF9yZWFkX3N5c3RlbV9wb3N0dHNgLiBUaGlzIHZhcmlhYmxlIGlzIHN1cHBsaWVkIGJ5IHRoZSBQVFAgY29yZSBpdHNlbGYsIGFuZCB0aG9zZSBmdW5jdGlvbnMgYXJlIHN0YW5kYXJkIGFuZCB3aWxsIG9ubHkgd3JpdGUgdG8gc3RzIGlmIHN0cyBpcyBub3QgTlVMTC4gVGhlIFBUUCBjb3JlIGhhbmRsZXMgaXRzIGluaXRpYWxpemF0aW9uLiBTbyBubyBwcm9ibGVtLgoKVGhlcmVmb3JlLCBteSBhc3Nlc3NtZW50IGlzIHRoYXQgS01TQU4gaXMgbm90IG5lZWRlZCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIFBUUCBjbG9jayBzdXBwb3J0IGZvciB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIuIEl0IGFkZHMgZnVuY3Rpb25zIHRvIHJlYWQvd3JpdGUgVGltZSBvZiBEYXkgKFRvRCkgcmVnaXN0ZXJzLCBhZGp1c3QgZnJlcXVlbmN5LCBhbmQgYWRqdXN0IHBoYXNlLCBhcyB3ZWxsIGFzIHJlZ2lzdGVyaW5nIGEgUFRQIGNsb2NrIGRldmljZS4gQWxsIGxvY2FsIHZhcmlhYmxlcywgc3VjaCBhcyBgc3RydWN0IHRpbWVzcGVjNjRgIGFuZCBgc3ludGhfbWFza2AsIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgYHB0cF9jbG9ja19pbmZvYCBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQgZnJvbSBhIHN0YXRpYyBjb25zdCB0ZW1wbGF0ZSwgZW5zdXJpbmcgYWxsIGZpZWxkcyAoaW5jbHVkaW5nIHBhZGRpbmcgYW5kIHRoZSBgbmFtZWAgYnVmZmVyKSBhcmUgemVyby1pbml0aWFsaXplZCBiZWZvcmUgYHNucHJpbnRmYCBpcyBjYWxsZWQuIFRoZXJlIGFyZSBubyBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIFBUUCBjbG9jayBzdXBwb3J0IGZvciB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIuIEl0IGFkZHMgZnVuY3Rpb25zIHRvIHJlYWQvd3JpdGUgVGltZSBvZiBEYXkgKFRvRCkgcmVnaXN0ZXJzLCBhZGp1c3QgZnJlcXVlbmN5LCBhbmQgYWRqdXN0IHBoYXNlLCBhcyB3ZWxsIGFzIHJlZ2lzdGVyaW5nIGEgUFRQIGNsb2NrIGRldmljZS4gQWxsIGxvY2FsIHZhcmlhYmxlcywgc3VjaCBhcyBgc3RydWN0IHRpbWVzcGVjNjRgIGFuZCBgc3ludGhfbWFza2AsIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgYHB0cF9jbG9ja19pbmZvYCBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQgZnJvbSBhIHN0YXRpYyBjb25zdCB0ZW1wbGF0ZSwgZW5zdXJpbmcgYWxsIGZpZWxkcyAoaW5jbHVkaW5nIHBhZGRpbmcgYW5kIHRoZSBgbmFtZWAgYnVmZmVyKSBhcmUgemVyby1pbml0aWFsaXplZCBiZWZvcmUgYHNucHJpbnRmYCBpcyBjYWxsZWQuIFRoZXJlIGFyZSBubyBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDExOjUyOjQ3Ljg2MjMwNDQzMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzk4MDQzNzgzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaTDMwNzNYX0kyQ1wiLFxuICAgIFwiWkwzMDczWF9TUElcIixcbiAgICBcIlBUUF8xNTg4X0NMT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0XCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fdG9kX3JlYWRcIixcbiAgICBcInpsMzA3M3hfY2hhbl90b2Rfd3JpdGVcIixcbiAgICBcInpsMzA3M3hfY2hhbl90b2RfYWRqdXN0XCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldFwiLFxuICAgIFwiemwzMDczeF9jaGFuX3RpZV93cml0ZVwiLFxuICAgIFwiemwzMDczeF9jaGFuX3BoYXNlX3N0ZXBcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgUFRQIGNsb2NrIHN1cHBvcnQgZm9yIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlci4gSXQgYWRkcyBmdW5jdGlvbnMgdG8gcmVhZC93cml0ZSBUaW1lIG9mIERheSAoVG9EKSByZWdpc3RlcnMsIGFkanVzdCBmcmVxdWVuY3ksIGFuZCBhZGp1c3QgcGhhc2UsIGFzIHdlbGwgYXMgcmVnaXN0ZXJpbmcgYSBQVFAgY2xvY2sgZGV2aWNlLiBBbGwgbG9jYWwgdmFyaWFibGVzLCBzdWNoIGFzIGBzdHJ1Y3QgdGltZXNwZWM2NGAgYW5kIGBzeW50aF9tYXNrYCwgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBgcHRwX2Nsb2NrX2luZm9gIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCBmcm9tIGEgc3RhdGljIGNvbnN0IHRlbXBsYXRlLCBlbnN1cmluZyBhbGwgZmllbGRzIChpbmNsdWRpbmcgcGFkZGluZyBhbmQgdGhlIGBuYW1lYCBidWZmZXIpIGFyZSB6ZXJvLWluaXRpYWxpemVkIGJlZm9yZSBgc25wcmludGZgIGlzIGNhbGxlZC4gVGhlcmUgYXJlIG5vIGtlcm5lbC10by11c2VyIGluZm8tbGVha3Mgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2VzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcy4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciAoemwzMDczeCkuIFRoZSBkcml2ZXIgY2FuIGJlIGluc3RhbnRpYXRlZCB2aWEgSTJDIG9yIFNQSSwgYW5kIHRoZSBQVFAgY2xvY2sgaW50ZXJmYWNlIGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlIHZpYSBgL2Rldi9wdHBYYC4gU3l6a2FsbGVyIGNhbiBmdXp6IHRoaXMgZnVuY3Rpb25hbGl0eSB1c2luZyBJMkMvU1BJIGVtdWxhdGlvbiBhbmQgUFRQIGlvY3Rscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTE6NTI6NDcuODYyMzA4NDgyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzA0MTEwMTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNTkxZGVjODNhODVkNzA3NDU1MjYwZTkxOGU3NDEyNTdlNDVmOTI5MVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyA3IDExOjUyOjQ2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWcgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXFxuaW5kZXggNWJiY2ExNDAwNTgxMy4uZGExNzMxYWNlMTVmMCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xcbkBAIC0yLDcgKzIsNyBAQFxcbiBcXG4gY29uZmlnIFpMMzA3M1hcXG4gXFx0dHJpc3RhdGUgXFxcIk1pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXNcXFwiIGlmIENPTVBJTEVfVEVTVFxcbi1cXHRkZXBlbmRzIG9uIE5FVFxcbitcXHRkZXBlbmRzIG9uIE5FVCBcXHUwMDI2XFx1MDAyNiBQVFBfMTU4OF9DTE9DS1xcbiBcXHRzZWxlY3QgRFBMTFxcbiBcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG4gXFx0c2VsZWN0IFJFR01BUFxcbkBAIC0xNiw3ICsxNiw3IEBAIGNvbmZpZyBaTDMwNzNYXFxuIFxcbiBjb25maWcgWkwzMDczWF9JMkNcXG4gXFx0dHJpc3RhdGUgXFxcIkkyQyBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcXFwiXFxuLVxcdGRlcGVuZHMgb24gSTJDIFxcdTAwMjZcXHUwMDI2IE5FVFxcbitcXHRkZXBlbmRzIG9uIEkyQyBcXHUwMDI2XFx1MDAyNiBORVQgXFx1MDAyNlxcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tcXG4gXFx0c2VsZWN0IFJFR01BUF9JMkNcXG4gXFx0c2VsZWN0IFpMMzA3M1hcXG4gXFx0aGVscFxcbkBAIC0yOCw3ICsyOCw3IEBAIGNvbmZpZyBaTDMwNzNYX0kyQ1xcbiBcXG4gY29uZmlnIFpMMzA3M1hfU1BJXFxuIFxcdHRyaXN0YXRlIFxcXCJTUEkgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzXFxcIlxcbi1cXHRkZXBlbmRzIG9uIE5FVCBcXHUwMDI2XFx1MDAyNiBTUElcXG4rXFx0ZGVwZW5kcyBvbiBORVQgXFx1MDAyNlxcdTAwMjYgU1BJIFxcdTAwMjZcXHUwMDI2IFBUUF8xNTg4X0NMT0NLXFxuIFxcdHNlbGVjdCBSRUdNQVBfU1BJXFxuIFxcdHNlbGVjdCBaTDMwNzNYXFxuIFxcdGhlbHBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXFxuaW5kZXggNGVjMmNmNTNkYWQ0Ni4uYWY2Y2E0M2MzMzU5MCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNcXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNcXG5AQCAtMyw2ICszLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NsZWFudXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlbGF5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZXZfcHJpbnRrLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdHJpbmcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuIFxcbkBAIC0xNjIsOCArMTYzLDggQEAgaW50IHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpXFxuICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmVcXG4gICogQGluZGV4OiBEUExMIGNoYW5uZWwgaW5kZXggdG8gZmV0Y2ggc3RhdGUgZm9yXFxuICAqXFxuLSAqIFJlYWRzIHRoZSBtb2RlX3JlZnNlbCByZWdpc3RlciBhbmQgcmVmZXJlbmNlIHByaW9yaXR5IHJlZ2lzdGVycyBmb3JcXG4tICogdGhlIGdpdmVuIERQTEwgY2hhbm5lbCBhbmQgc3RvcmVzIHRoZSByYXcgdmFsdWVzIGZvciBsYXRlciB1c2UuXFxuKyAqIFJlYWRzIHRoZSBtb2RlX3JlZnNlbCwgc3RhdHVzIGFuZCByZWZlcmVuY2UgcHJpb3JpdHkgcmVnaXN0ZXJzIGZvclxcbisgKiB0aGUgZ2l2ZW4gRFBMTCBjaGFubmVsIGFuZCBzdG9yZXMgdGhlIHZhbHVlcyBmb3IgbGF0ZXIgdXNlLlxcbiAgKlxcbiAgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4gICovXFxuQEAgLTIzNCw2ICsyMzUsMzIyIEBAIGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKnpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldixcXG4gXFx0cmV0dXJuIFxcdTAwMjZ6bGRldi1cXHUwMDNlY2hhbltpbmRleF07XFxuIH1cXG4gXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQgLSB3YWl0IGZvciBUb0Qgc2VtYXBob3JlIHRvIGNsZWFyXFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxcbisgKlxcbisgKiBQb2xscyB0aGUgVG9EIGNvbnRyb2wgcmVnaXN0ZXIgdW50aWwgdGhlIHNlbWFwaG9yZSBiaXQgaXMgY2xlYXJlZCxcXG4rICogaW5kaWNhdGluZyB0aGUgZGV2aWNlIGhhcyBjb21wbGV0ZWQgdGhlIHByZXZpb3VzIFRvRCBvcGVyYXRpb24uXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRUJVU1kgaWYgc2VtYXBob3JlIG5vdCBjbGVhcmVkLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4raW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgdGltZW91dDtcXG4rXFx0dTggdG9kX2N0cmw7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdHJjID0gemwzMDczeF9yZWFkX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksIFxcdTAwMjZ0b2RfY3RybCk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0c3dpdGNoIChGSUVMRF9HRVQoWkxfRFBMTF9UT0RfQ1RSTF9DTUQsIHRvZF9jdHJsKSkge1xcbitcXHRjYXNlIDA6XFxuK1xcdFxcdC8qIE5vIG9wZXJhdGlvbiBwZW5kaW5nIChwb3dlci1vbi9yZXNldCBkZWZhdWx0KSAqL1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0Y2FzZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWjpcXG4rXFx0XFx0dGltZW91dCA9IFpMX1BPTExfVE9EX1dSX1RJTUVPVVRfVVM7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX0NVUlJFTlQ6XFxuK1xcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFo6XFxuK1xcdFxcdHRpbWVvdXQgPSBaTF9QT0xMX1RPRF9SRF9USU1FT1VUX1VTO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0LyogRlcgbmV2ZXIgd3JpdGVzIGNtZCBiaXRzOyBvbmx5IHRoZSBkcml2ZXIgc2V0cyB0aGVtICovXFxuK1xcdFxcdFdBUk5fT04oMSk7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLFxcbitcXHRcXHRcXHRcXHQgIFpMX0RQTExfVE9EX0NUUkxfU0VNLCB0aW1lb3V0KTtcXG4rXFxuK1xcdHJldHVybiByYyA9PSAtRVRJTUVET1VUID8gLUVCVVNZIDogcmM7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwgLSBpc3N1ZSBUb0QgY29tbWFuZFxcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4rICogQGNtZDogVG9EIGNvbW1hbmQgdG8gZXhlY3V0ZVxcbisgKlxcbisgKiBXcml0ZXMgdGhlIHNlbWFwaG9yZSBhbmQgY29tbWFuZCB0byBkcGxsX3RvZF9jdHJsLiBUaGUgY2FsbGVyIG11c3RcXG4rICogZW5zdXJlIHRoZSBkZXZpY2UgaXMgcmVhZHkgKHNlbWFwaG9yZSBjbGVhcikgYmVmb3JlIGNhbGxpbmcgYW5kXFxuKyAqIG11c3Qgd2FpdCBmb3IgY29tcGxldGlvbiBpZiBuZWVkZWQuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4rc3RhdGljIGludCB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHU4IGNtZClcXG4re1xcbitcXHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLFxcbitcXHRcXHRcXHRcXHRaTF9EUExMX1RPRF9DVFJMX1NFTSB8IGNtZCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5fdG9kX3JlYWQgLSByZWFkIFRvRCByZWdpc3RlcnMgYWZ0ZXIgaXNzdWluZyBhIGNvbW1hbmRcXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuKyAqIEBuZXh0X2h6OiBpZiB0cnVlLCByZWFkIHByZWRpY3RlZCBUb0QgYXQgbmV4dCAxIEh6OyBvdGhlcndpc2UgcmVhZCBjdXJyZW50XFxuKyAqIEB0czogdGltZXNwZWMgdG8gc3RvcmUgdGhlIHJlc3VsdFxcbisgKiBAc3RzOiBvcHRpb25hbCBzeXN0ZW0gdGltZXN0YW1wIHBhaXIgZm9yIGNyb3NzLXRpbWVzdGFtcGluZ1xcbisgKlxcbisgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuK1xcdFxcdFxcdCAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXFxuK1xcdFxcdFxcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpXFxuK3tcXG4rXFx0dTMyIG5zZWM7XFxuK1xcdHU2NCBzZWM7XFxuK1xcdHU4IGNtZDtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0aWYgKG5leHRfaHopXFxuK1xcdFxcdGNtZCA9IFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaO1xcbitcXHRlbHNlXFxuK1xcdFxcdGNtZCA9IFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX0NVUlJFTlQ7XFxuK1xcbitcXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVG9EIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xcbitcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHB0cF9yZWFkX3N5c3RlbV9wcmV0cyhzdHMpO1xcbitcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfY3RybCh6bGRldiwgY2gsIGNtZCk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcdHB0cF9yZWFkX3N5c3RlbV9wb3N0dHMoc3RzKTtcXG4rXFxuK1xcdHJjID0gemwzMDczeF9yZWFkX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIFxcdTAwMjZzZWMpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdC8qIEhXIG5hbm9zZWNvbmRzIGFyZSBhbHdheXMgaW4gWzAsIE5TRUNfUEVSX1NFQykgcmFuZ2UgKi9cXG4rXFx0cmMgPSB6bDMwNzN4X3JlYWRfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCBcXHUwMDI2bnNlYyk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0dHMtXFx1MDAzZXR2X3NlYyA9IHNlYztcXG4rXFx0dHMtXFx1MDAzZXR2X25zZWMgPSBuc2VjO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlIC0gd3JpdGUgVG9EIHJlZ2lzdGVycyBhbmQgdHJpZ2dlciAxIEh6IHVwZGF0ZVxcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4rICogQHRzOiB0aW1lIHRvIHNldFxcbisgKlxcbisgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbitcXHRcXHRcXHQgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cylcXG4re1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVG9EIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xcbitcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9TRUMoY2gpLCB0cy50dl9zZWMpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19EUExMX1RPRF9OUyhjaCksIHRzLnR2X25zZWMpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLFxcbitcXHRcXHRcXHRcXHQgICAgIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0IC0gYXRvbWljIFRvRCByZWFkLW1vZGlmeS13cml0ZSB3aXRoIHJvbGxvdmVyIGd1YXJkXFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxcbisgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCB0byBhcHBseVxcbisgKlxcbisgKiBSZWFkcyB0aGUgbmV4dC1IeiBUb0QgYW5kIGN1cnJlbnQgVG9ELCB0aGVuIGNoZWNrcyB3aGV0aGVyIGVub3VnaCB0aW1lXFxuKyAqIHJlbWFpbnMgYmVmb3JlIHRoZSBuZXh0IDEgSHogcm9sbG92ZXIgdG8gc2FmZWx5IGNvbXBsZXRlIHRoZSB3cml0ZS5cXG4rICogUmUtcmVhZHMgaWYgdGhlIDEgSHogdGljayBjcm9zc2VkIGJldHdlZW4gdGhlIHR3byByZWFkcyBvciBpZiBsZXNzXFxuKyAqIHRoYW4gMjAgbXMgcmVtYWlucyBiZWZvcmUgdGhlIG5leHQgcm9sbG92ZXIuIEFwcGxpZXMgQGRlbHRhIGFuZCB3cml0ZXNcXG4rICogdGhlIHJlc3VsdCBiYWNrLlxcbisgKlxcbisgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuKyNkZWZpbmUgWkxfVE9EX01BWF9SRVRSSUVTXFx0MjBcXG4raW50IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbitcXHRcXHRcXHQgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpXFxuK3tcXG4rXFx0c3RhdGljIGNvbnN0IGxvbmcgdGhyZXNob2xkX25zID0gMjAgKiBOU0VDX1BFUl9NU0VDO1xcbitcXHRzdHJ1Y3QgdGltZXNwZWM2NCB0c19uZXh0LCB0c19jdXIsIGRpZmY7XFxuK1xcdGludCByYywgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBaTF9UT0RfTUFYX1JFVFJJRVM7IGkrKykge1xcbitcXHRcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRldiwgY2gsIHRydWUsIFxcdTAwMjZ0c19uZXh0LCBOVUxMKTtcXG4rXFx0XFx0aWYgKHJjKVxcbitcXHRcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRldiwgY2gsIGZhbHNlLCBcXHUwMDI2dHNfY3VyLCBOVUxMKTtcXG4rXFx0XFx0aWYgKHJjKVxcbitcXHRcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRcXHQvKiBFbnN1cmUgdGhlIDEgSHogdGljayBkaWQgbm90IGNyb3NzIGJldHdlZW4gdGhlIHR3byByZWFkc1xcbitcXHRcXHQgKiBhbmQgdGhhdCBlbm91Z2ggbWFyZ2luIHJlbWFpbnMgdG8gY29tcGxldGUgdGhlIHdyaXRlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0ZGlmZiA9IHRpbWVzcGVjNjRfc3ViKHRzX25leHQsIHRzX2N1cik7XFxuK1xcdFxcdGlmIChkaWZmLnR2X3NlYyBcXHUwMDNlIDAgfHxcXG4rXFx0XFx0ICAgICghZGlmZi50dl9zZWMgXFx1MDAyNlxcdTAwMjYgZGlmZi50dl9uc2VjIFxcdTAwM2U9IHRocmVzaG9sZF9ucykpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcdGlmIChpID09IFpMX1RPRF9NQVhfUkVUUklFUykge1xcbitcXHRcXHRkZXZfd2Fybih6bGRldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHQgXFxcIkRQTEwldSBUb0QgYWRqdXN0IGZhaWxlZCB0byBnZXQgc3RhYmxlIG1hcmdpblxcXFxuXFxcIixcXG4rXFx0XFx0XFx0IGNoKTtcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFx0fVxcbitcXG4rXFx0LyogQXBwbHkgZGVsdGEgdG8gdGhlIG5leHQtSHogVG9EICovXFxuK1xcdHRzX25leHQgPSB0aW1lc3BlYzY0X2FkZCh0c19uZXh0LCBkZWx0YSk7XFxuK1xcdGlmICghdGltZXNwZWM2NF92YWxpZChcXHUwMDI2dHNfbmV4dCkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkZXYsIGNoLCB0c19uZXh0KTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0IC0gd3JpdGUgZGVsdGEgZnJlcXVlbmN5IG9mZnNldCB0byBoYXJkd2FyZVxcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4rICogQG9mZnNldDogZnJlcXVlbmN5IG9mZnNldCBpbiAyXi00OCBzdGVwc1xcbisgKlxcbisgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBob2xkIHRoZSBwZXItRFBMTCBsb2NrLlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldClcXG4re1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9PRkZTRVQoY2gpLCBvZmZzZXQpO1xcbitcXHRpZiAoIXJjKVxcbitcXHRcXHR6bGRldi1cXHUwMDNlY2hhbltjaF0uZGZfb2Zmc2V0ID0gb2Zmc2V0O1xcbitcXG4rXFx0cmV0dXJuIHJjO1xcbit9XFxuK1xcbisvKipcXG4rICogemwzMDczeF9jaGFuX3RpZV93cml0ZSAtIGFkanVzdCBEUExMIHBoYXNlIHVzaW5nIFRJRSB3cml0ZVxcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4rICogQGRlbHRhX25zOiBwaGFzZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzIChtdXN0IGJlIHdpdGhpbiArLTFzKVxcbisgKlxcbisgKiBDb252ZXJ0cyBuYW5vc2Vjb25kcyB0byBUSUUgdW5pdHMgKDAuMDEgcHMpIGFuZCB3cml0ZXMgVElFIGRhdGFcXG4rICogdG8gdGhlIHNwZWNpZmllZCBjaGFubmVsLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK2ludCB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgZGVsdGFfbnMpXFxuK3tcXG4rXFx0czY0IHRpZV9kYXRhO1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRpZiAoV0FSTl9PTihkZWx0YV9ucyBcXHUwMDNjPSAtTlNFQ19QRVJfU0VDIHx8IGRlbHRhX25zIFxcdTAwM2U9IE5TRUNfUEVSX1NFQykpXFxuK1xcdFxcdHJldHVybiAtRVJBTkdFO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZ6bGRldi1cXHUwMDNldGllX2xvY2spO1xcbitcXG4rXFx0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRJRSBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cXG4rXFx0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsXFxuK1xcdFxcdFxcdFxcdCAgWkxfRFBMTF9USUVfQ1RSTF9PUCxcXG4rXFx0XFx0XFx0XFx0ICBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHQvKiBDb252ZXJ0IG5zIHRvIFRJRSB1bml0cyAoMC4wMSBwcyA9IDEwXi0xNCBzKSAqL1xcbitcXHR0aWVfZGF0YSA9IGRlbHRhX25zICogMTAwMDAwTEw7XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfREFUQShjaCksIHRpZV9kYXRhKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0ssIEJJVChjaCkpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTCxcXG4rXFx0XFx0XFx0XFx0WkxfRFBMTF9USUVfQ1RSTF9PUF9XUik7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCAtIGV4ZWN1dGUgb25lIG91dHB1dCBwaGFzZSBzdGVwIG9wZXJhdGlvblxcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4rICogQG91dF9tYXNrOiBiaXRtYXNrIG9mIG91dHB1dHMgdG8gc3RlcFxcbisgKiBAc3RlcF9jeWNsZXM6IHBoYXNlIHN0ZXAgaW4gc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzXFxuKyAqIEB0b2Rfc3RlcDogYWxzbyBzdGVwIHRoZSBUb0QgY291bnRlclxcbisgKlxcbisgKiBBbGwgbWFza2VkIG91dHB1dHMgbXVzdCB1c2Ugc3ludGhlc2l6ZXJzIG9mIHRoZSBzYW1lIGZyZXF1ZW5jeSBzaW5jZVxcbisgKiB0aGUgc3RlcCB2YWx1ZSBpcyBpbiBzeW50aGVzaXplciBjbG9jayBjeWNsZXMuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4raW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbitcXHRcXHRcXHQgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsXFxuK1xcdFxcdFxcdCAgICBib29sIHRvZF9zdGVwKVxcbit7XFxuK1xcdHU4IGN0cmw7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2emxkZXYtXFx1MDAzZXBoYXNlX3N0ZXBfbG9jayk7XFxuK1xcbitcXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgcGhhc2Ugc3RlcCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cXG4rXFx0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwsXFxuK1xcdFxcdFxcdFxcdCAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCxcXG4rXFx0XFx0XFx0XFx0ICBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VUyk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0RBVEEsXFxuK1xcdFxcdFxcdCAgICAgICBzdGVwX2N5Y2xlcyk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3dyaXRlX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX01BU0ssIG91dF9tYXNrKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9OVU1CRVIsIDEpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdGN0cmwgPSBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfRFBMTCwgY2gpIHxcXG4rXFx0ICAgICAgIEZJRUxEX1BSRVAoWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCxcXG4rXFx0XFx0XFx0ICBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1dSSVRFKTtcXG4rXFx0aWYgKHRvZF9zdGVwKVxcbitcXHRcXHRjdHJsIHw9IFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVA7XFxuK1xcbitcXHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwsIGN0cmwpO1xcbit9XFxuK1xcbiAvKipcXG4gICogemwzMDczeF9jaGFuX3N0YXRlX3NldCAtIGNvbW1pdCBEUExMIGNoYW5uZWwgc3RhdGUgY2hhbmdlcyB0byBoYXJkd2FyZVxcbiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaFxcbmluZGV4IGRjOWM2ZDk1YmRlZTcuLjk5YzNiNzA4OGY2NzggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXFxuQEAgLTUsMTAgKzUsMTIgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RkZGVmLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC90aW1lNjQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwicmVncy5oXFxcIlxcbiBcXG4rc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wO1xcbiBzdHJ1Y3QgemwzMDczeF9kZXY7XFxuIFxcbiAvKipcXG5AQCAtNDIsNiArNDQsMjEgQEAgaW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgsXFxuIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfdXBkYXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTtcXG4gaW50IHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpO1xcbiBcXG4raW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCk7XFxuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuK1xcdFxcdFxcdCAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXFxuK1xcdFxcdFxcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpO1xcbitpbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG4rXFx0XFx0XFx0ICAgc3RydWN0IHRpbWVzcGVjNjQgdHMpO1xcbitpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YSk7XFxuK2ludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG4rXFx0XFx0XFx0ICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLCBib29sIHRvZF9zdGVwKTtcXG4rXFxuK2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldCk7XFxuK1xcbitpbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKTtcXG4rXFxuIC8qKlxcbiAgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X2dldCAtIGdldCBjYWNoZWQgZGZfb2Zmc2V0IHZzIHRyYWNrZWQgcmVmZXJlbmNlXFxuICAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcXG5AQCAtMjAwLDYgKzIxNywyMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgemwzMDczeF9jaGFuX21vZGVfaXNfcmVmbG9jayhjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxcbiBcXHRyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfZ2V0KGNoYW4pID09IFpMX0RQTExfTU9ERV9SRUZTRUxfTU9ERV9SRUZMT0NLO1xcbiB9XFxuIFxcbisvKipcXG4rICogemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllIC0gY2hlY2sgaWYgY2hhbm5lbCBtb2RlIHN1cHBvcnRzIFRJRSB3cml0ZVxcbisgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXFxuKyAqXFxuKyAqIFRJRSB3cml0ZSBpcyBzdXBwb3J0ZWQgaW4gQVVUTyBhbmQgUkVGTE9DSyBtb2RlcyByZWdhcmRsZXNzIG9mIGxvY2sgc3RhdGUuXFxuKyAqXFxuKyAqIFJldHVybjogdHJ1ZSBpZiBUSUUgd3JpdGUgaXMgc3VwcG9ydGVkLCBmYWxzZSBvdGhlcndpc2VcXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgYm9vbFxcbit6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcXG4re1xcbitcXHRyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfaXNfYXV0byhjaGFuKSB8fFxcbitcXHRcXHR6bDMwNzN4X2NoYW5fbW9kZV9pc19yZWZsb2NrKGNoYW4pO1xcbit9XFxuK1xcbiAvKipcXG4gICogemwzMDczeF9jaGFuX2lzX2hvX3JlYWR5IC0gY2hlY2sgaWYgaG9sZG92ZXIgaXMgcmVhZHlcXG4gICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcXG5pbmRleCA1YjJkNzdmMmMyMjg4Li4yMzBkZjA4ZTI3Y2QxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1xcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1xcbkBAIC0zMjIsNyArMzIyLDcgQEAgaW50IHpsMzA3M3hfd3JpdGVfdTQ4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsIHU2NCB2YWwpXFxuIGludCB6bDMwNzN4X3BvbGxfemVyb191OChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLFxcbiBcXHRcXHRcXHQgdTggbWFzaywgdW5zaWduZWQgaW50IHRpbWVvdXRfdXMpXFxuIHtcXG4tI2RlZmluZSBaTF9QT0xMX1NMRUVQX1VTIDEwXFxuK1xcdHVuc2lnbmVkIGludCBzbGVlcF91cyA9IHRpbWVvdXRfdXMgLyA1MDtcXG4gXFx0dW5zaWduZWQgaW50IHZhbDtcXG4gXFxuIFxcdC8qIENoZWNrIHRoZSByZWdpc3RlciBpcyA4Yml0ICovXFxuQEAgLTMzNiw3ICszMzYsNyBAQCBpbnQgemwzMDczeF9wb2xsX3plcm9fdTgoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IHJlZyxcXG4gXFx0cmVnID0gWkxfUkVHX0FERFIocmVnKSArIFpMX1JBTkdFX09GRlNFVDtcXG4gXFxuIFxcdHJldHVybiByZWdtYXBfcmVhZF9wb2xsX3RpbWVvdXQoemxkZXYtXFx1MDAzZXJlZ21hcCwgcmVnLCB2YWwsICEodmFsIFxcdTAwMjYgbWFzayksXFxuLVxcdFxcdFxcdFxcdFxcdFpMX1BPTExfU0xFRVBfVVMsIHRpbWVvdXRfdXMpO1xcbitcXHRcXHRcXHRcXHRcXHRzbGVlcF91cywgdGltZW91dF91cyk7XFxuIH1cXG4gXFxuIGludCB6bDMwNzN4X21iX29wKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCBvcF9yZWcsIHU4IG9wX3ZhbCxcXG5AQCAtNTExLDYgKzUxMSwxMSBAQCB6bDMwNzN4X2Rldl9zdGF0ZV9mZXRjaChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxcbiBcXHRpbnQgcmM7XFxuIFxcdHU4IGk7XFxuIFxcbitcXHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfU1RFUF9USU1FX01BU0ssXFxuK1xcdFxcdFxcdCAgICAgIFxcdTAwMjZ6bGRldi1cXHUwMDNlb3V0X3N0ZXBfdGltZV9tYXNrKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgWkwzMDczWF9OVU1fUkVGUzsgaSsrKSB7XFxuIFxcdFxcdHJjID0gemwzMDczeF9yZWZfc3RhdGVfZmV0Y2goemxkZXYsIGkpO1xcbiBcXHRcXHRpZiAocmMpIHtcXG5AQCAtMTAzNCw2ICsxMDM5LDE0IEBAIGludCB6bDMwNzN4X2Rldl9wcm9iZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxcbiBcXHQgKiBhbmQvb3IgcG9sbHMgYXJlIHJlcXVpcmVkIHRvIGJlIGRvbmUgYXRvbWljYWxseS5cXG4gXFx0ICovXFxuIFxcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVxcdTAwM2VkZXYsIFxcdTAwMjZ6bGRldi1cXHUwMDNlbXVsdGlvcF9sb2NrKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cXHUwMDNlZGV2LCByYyxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiRmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXFxcblxcXCIpO1xcbitcXHRyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi1cXHUwMDNlZGV2LCBcXHUwMDI2emxkZXYtXFx1MDAzZXBoYXNlX3N0ZXBfbG9jayk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXFx1MDAzZWRldiwgcmMsXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxcXG5cXFwiKTtcXG4rXFx0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXFx1MDAzZWRldiwgXFx1MDAyNnpsZGV2LVxcdTAwM2V0aWVfbG9jayk7XFxuIFxcdGlmIChyYylcXG4gXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXFx1MDAzZWRldiwgcmMsXFxuIFxcdFxcdFxcdFxcdCAgICAgXFxcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxcXG5cXFwiKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oXFxuaW5kZXggNzhkYzIwOGYzZWVhMi4uNjdjMTBlMjU5NTExOCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcXG5AQCAtMjYsNiArMjYsMTAgQEAgc3RydWN0IHpsMzA3M3hfZHBsbDtcXG4gI2RlZmluZSBaTF9QT0xMX0hXUkVHX1RJTUVPVVRfVVNcXHQoNTAgKiBVU0VDX1BFUl9NU0VDKVxcbiAjZGVmaW5lIFpMX1BPTExfTUJfVElNRU9VVF9VU1xcdFxcdCgzMCAqIFVTRUNfUEVSX01TRUMpXFxuICNkZWZpbmUgWkxfUE9MTF9QSEFTRV9FUlJfVElNRU9VVF9VU1xcdCg1MCAqIFVTRUNfUEVSX01TRUMpXFxuKyNkZWZpbmUgWkxfUE9MTF9QSEFTRV9TVEVQX1RJTUVPVVRfVVNcXHQoMzAwMCAqIFVTRUNfUEVSX01TRUMpXFxuKyNkZWZpbmUgWkxfUE9MTF9USUVfV1JfVElNRU9VVF9VU1xcdCgxMDAwICogVVNFQ19QRVJfTVNFQylcXG4rI2RlZmluZSBaTF9QT0xMX1RPRF9SRF9USU1FT1VUX1VTXFx0KDMwICogVVNFQ19QRVJfTVNFQylcXG4rI2RlZmluZSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTXFx0KDEwMDAgKiBVU0VDX1BFUl9NU0VDKVxcbiBcXG4gZW51bSB6bDMwNzN4X2ZsYWdzIHtcXG4gXFx0WkwzMDczWF9GTEFHX1JFRl9QSEFTRV9DT01QXzMyX0JJVCxcXG5AQCAtNTUsNiArNTksOCBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8ge1xcbiAgKiBAcmVnbWFwOiByZWdtYXAgdG8gYWNjZXNzIGRldmljZSByZWdpc3RlcnNcXG4gICogQGluZm86IGRldGVjdGVkIGNoaXAgaW5mb1xcbiAgKiBAbXVsdGlvcF9sb2NrOiB0byBzZXJpYWxpemUgbXVsdGlwbGUgcmVnaXN0ZXIgb3BlcmF0aW9uc1xcbisgKiBAdGllX2xvY2s6IHRvIHNlcmlhbGl6ZSBUSUUgd3JpdGUgb3BlcmF0aW9uc1xcbisgKiBAcGhhc2Vfc3RlcF9sb2NrOiB0byBzZXJpYWxpemUgb3V0cHV0IHBoYXNlIHN0ZXAgb3BlcmF0aW9uc1xcbiAgKiBAcmVmOiBhcnJheSBvZiBpbnB1dCByZWZlcmVuY2VzJyBpbnZhcmlhbnRzXFxuICAqIEBvdXQ6IGFycmF5IG9mIG91dHMnIGludmFyaWFudHNcXG4gICogQHN5bnRoOiBhcnJheSBvZiBzeW50aHMnIGludmFyaWFudHNcXG5AQCAtNjMsNiArNjksNyBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8ge1xcbiAgKiBAa3dvcmtlcjogdGhyZWFkIGZvciBwZXJpb2RpYyB3b3JrXFxuICAqIEB3b3JrOiBwZXJpb2RpYyB3b3JrXFxuICAqIEBjbG9ja19pZDogY2xvY2sgaWQgb2YgdGhlIGRldmljZVxcbisgKiBAb3V0X3N0ZXBfdGltZV9tYXNrOiBvdXRwdXQgc3RlcC10aW1lIG1hc2sgKGRldmljZS1nbG9iYWwpXFxuICAqIEBwaGFzZV9hdmdfZmFjdG9yOiBwaGFzZSBvZmZzZXQgbWVhc3VyZW1lbnQgYXZlcmFnaW5nIGZhY3RvclxcbiAgKiBAZnJlcV9tb25pdG9yOiBpcyBmcmVxdWVuY3kgbW9uaXRvciBlbmFibGVkXFxuICAqL1xcbkBAIC03MSw2ICs3OCw4IEBAIHN0cnVjdCB6bDMwNzN4X2RldiB7XFxuIFxcdHN0cnVjdCByZWdtYXBcXHRcXHRcXHQqcmVnbWFwO1xcbiBcXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm9cXHQqaW5mbztcXG4gXFx0c3RydWN0IG11dGV4XFx0XFx0XFx0bXVsdGlvcF9sb2NrO1xcbitcXHRzdHJ1Y3QgbXV0ZXhcXHRcXHRcXHR0aWVfbG9jaztcXG4rXFx0c3RydWN0IG11dGV4XFx0XFx0XFx0cGhhc2Vfc3RlcF9sb2NrO1xcbiBcXG4gXFx0LyogSW52YXJpYW50cyAqL1xcbiBcXHRzdHJ1Y3QgemwzMDczeF9yZWZcXHRyZWZbWkwzMDczWF9OVU1fUkVGU107XFxuQEAgLTg3LDYgKzk2LDcgQEAgc3RydWN0IHpsMzA3M3hfZGV2IHtcXG4gXFxuIFxcdC8qIFBlci1jaGlwIHBhcmFtZXRlcnMgKi9cXG4gXFx0dTY0XFx0XFx0XFx0Y2xvY2tfaWQ7XFxuK1xcdHUxNlxcdFxcdFxcdG91dF9zdGVwX3RpbWVfbWFzaztcXG4gXFx0dThcXHRcXHRcXHRwaGFzZV9hdmdfZmFjdG9yO1xcbiBcXHRib29sXFx0XFx0XFx0ZnJlcV9tb25pdG9yO1xcbiB9O1xcbkBAIC0zMDgsNiArMzE4LDE5IEBAIHpsMzA3M3hfZGV2X291dF9pc19lbmFibGVkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxcbiBcXHRyZXR1cm4gemwzMDczeF9zeW50aF9pc19lbmFibGVkKHN5bnRoKSBcXHUwMDI2XFx1MDAyNiB6bDMwNzN4X291dF9pc19lbmFibGVkKG91dCk7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiB6bDMwNzN4X2Rldl9vdXRfaXNfc3RlcHBlZCAtIGNoZWNrIGlmIG91dHB1dCBpcyBpbiBzdGVwLXRpbWUgbWFza1xcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGluZGV4OiBvdXRwdXQgaW5kZXhcXG4rICpcXG4rICogUmV0dXJuOiB0cnVlIGlmIG91dHB1dCBpcyBhZmZlY3RlZCBieSBzdGVwLXRpbWUgb3BlcmF0aW9uc1xcbisgKi9cXG4rc3RhdGljIGlubGluZSBib29sXFxuK3psMzA3M3hfZGV2X291dF9pc19zdGVwcGVkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxcbit7XFxuK1xcdHJldHVybiAhISh6bGRldi1cXHUwMDNlb3V0X3N0ZXBfdGltZV9tYXNrIFxcdTAwMjYgQklUKGluZGV4KSk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiB6bDMwNzN4X2Rldl9vdXRfZHBsbF9nZXQgLSBnZXQgRFBMTCBJRCB0aGUgb3V0cHV0IGlzIGRyaXZlbiBieVxcbiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jXFxuaW5kZXggMDQ4OGFlNmFjNDg2Yy4uYTY4NmRkNTJiZmFjOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcXG5AQCAtMiw2ICsyLDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY2xlYW51cC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYnVnLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb250YWluZXJfb2YuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Rldl9wcmludGsuaFxcdTAwM2VcXG5AQCAtMTMsNiArMTQsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0bGluay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3ByaW50Zi5oXFx1MDAzZVxcbiBcXG5AQCAtMjI3NSw0NSArMjI3NywzNzUgQEAgemwzMDczeF9kcGxsX2luaXRfZmluZV9waGFzZV9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcXG4gXFx0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19TWU5USF9QSEFTRV9TSElGVF9DVFJMLCAweDAxKTtcXG4gfVxcbiBcXG4rLyogTWF4aW11bSBmcmVxdWVuY3kgYWRqdXN0bWVudDogKy0xJSBvZiBub21pbmFsIGluIHBwYiAqL1xcbisjZGVmaW5lIFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESlxcdDEwMDAwMDAwXFxuK1xcbiAvKipcXG4tICogemwzMDczeF9kcGxsX2FsbG9jIC0gYWxsb2NhdGUgRFBMTCBkZXZpY2VcXG4tICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuLSAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlclxcbisgKiB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQgLSByZWFkIGN1cnJlbnQgdGltZSBmcm9tIFRvRCBjb3VudGVyc1xcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cXG4rICogQHRzOiB0aW1lc3BlYyB0byBzdG9yZSBjdXJyZW50IHRpbWVcXG4rICogQHN0czogb3B0aW9uYWwgc3lzdGVtIHRpbWVzdGFtcCBwYWlyIGZvciBjcm9zcy10aW1lc3RhbXBpbmdcXG4gICpcXG4tICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKVxcbit7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBwdHBfaW5mbyk7XFxuK1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZHBsbC1cXHUwMDNlZGV2LCB6bGRwbGwtXFx1MDAzZWlkLCBmYWxzZSwgdHMsIHN0cyk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCAtIHNldCBUb0QgY291bnRlcnMgdG8gZ2l2ZW4gdGltZVxcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cXG4rICogQHRzOiB0aW1lc3BlYyB3aXRoIHRpbWUgdG8gc2V0XFxuICAqXFxuLSAqIFJldHVybjogcG9pbnRlciB0byBEUExMIGRldmljZSBvbiBzdWNjZXNzLCBlcnJvciBwb2ludGVyIG9uIGVycm9yXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbiAgKi9cXG4tc3RydWN0IHpsMzA3M3hfZHBsbCAqXFxuLXpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXFxuK1xcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcXG4ge1xcbi1cXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBwdHBfaW5mbyk7XFxuIFxcbi1cXHR6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTtcXG4tXFx0aWYgKCF6bGRwbGwpXFxuLVxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuIFxcbi1cXHR6bGRwbGwtXFx1MDAzZWRldiA9IHpsZGV2O1xcbi1cXHR6bGRwbGwtXFx1MDAzZWlkID0gY2g7XFxuLVxcdG11dGV4X2luaXQoXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuLVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZ6bGRwbGwtXFx1MDAzZXBpbnMpO1xcbitcXHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF93cml0ZSh6bGRwbGwtXFx1MDAzZWRldiwgemxkcGxsLVxcdTAwM2VpZCwgKnRzKTtcXG4rfVxcbiBcXG4tXFx0cmV0dXJuIHpsZHBsbDtcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwIC0gYWRqdXN0IHN1Yi1zZWNvbmQgdGltZSB2aWEgcGhhc2Ugc3RlcFxcbisgKiBAemxkcGxsOiBEUExMIGNoYW5uZWxcXG4rICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMgKG11c3QgYmUgd2l0aGluICgtTlNFQ19QRVJfU0VDLFxcbisgKiAgICAgICAgIE5TRUNfUEVSX1NFQykpXFxuKyAqXFxuKyAqIFVzZXMgdGhlIG91dHB1dCBwaGFzZSBzdGVwIG1lY2hhbmlzbSB3aXRoIHRvZF9zdGVwPTEgdG8gYWRqdXN0IGJvdGhcXG4rICogdGhlIG91dHB1dCBjbG9jayBwaGFzZSBhbmQgdGhlIFRvRCBjb3VudGVyIHNpbXVsdGFuZW91c2x5LiBUaGlzIGtlZXBzXFxuKyAqIG91dHB1dHMgYW5kIFRvRCBjb2hlcmVudC4gT25seSB2YWxpZCBmb3IgTkNPLlxcbisgKlxcbisgKiBPdXRwdXRzIGFyZSBncm91cGVkIGJ5IHN5bnRoZXNpemVyIHNpbmNlIHRoZSBwaGFzZSBzdGVwIHZhbHVlIGlzIGluXFxuKyAqIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcy4gVGhlIGZpcnN0IHN5bnRoIGdyb3VwIHdpdGggZW5hYmxlZCBvdXRwdXRzXFxuKyAqIHVzZXMgdG9kX3N0ZXAgdG8gYWRqdXN0IGJvdGggb3V0cHV0cyBhbmQgdGhlIFRvRCBjb3VudGVyLiBSZW1haW5pbmdcXG4rICogZ3JvdXBzIHN0ZXAgb3V0cHV0cyBvbmx5LiBJZiBubyBzeW50aCBoYXMgZW5hYmxlZCBvdXRwdXRzLCB0aGUgVG9EXFxuKyAqIGNvdW50ZXIgaXMgc3RlcHBlZCBhbG9uZSB1c2luZyBhbiBlbXB0eSBvdXRwdXQgbWFzayAodGhlIEZXIHVzZXNcXG4rICogdGhlIGZpcnN0IGVuYWJsZWQgc3ludGgncyBwZXJpb2QgZm9yIHRoZSBjb252ZXJzaW9uKS5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIG5vIHN5bnRocyBhdmFpbGFibGUsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHM2NCBkZWx0YSlcXG4re1xcbitcXHR1MTYgc3ludGhfbWFza1taTDMwNzNYX05VTV9TWU5USFNdID0ge307XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXFx1MDAzZWRldjtcXG4rXFx0Y29uc3Qgc3RydWN0IHpsMzA3M3hfc3ludGggKnN5bnRoO1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluO1xcbitcXHR1MzIgZmlyc3Rfc3ludGhfZnJlcSA9IDA7XFxuK1xcdGJvb2wgdG9kX3N0ZXBwZWQgPSBmYWxzZTtcXG4rXFx0czMyIHN0ZXBfY3ljbGVzO1xcbitcXHR1MzIgc3ludGhfZnJlcTtcXG4rXFx0aW50IHJjO1xcbitcXHR1OCBpO1xcbitcXG4rXFx0LyogQnVpbGQgcGVyLXN5bnRoIG91dHB1dCBtYXNrcyBmcm9tIHJlZ2lzdGVyZWQgb3V0cHV0IHBpbnMgKi9cXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwaW4sIFxcdTAwMjZ6bGRwbGwtXFx1MDAzZXBpbnMsIGxpc3QpIHtcXG4rXFx0XFx0dTggb3V0X2lkLCBzeW50aF9pZDtcXG4rXFxuK1xcdFxcdGlmICh6bDMwNzN4X2RwbGxfaXNfaW5wdXRfcGluKHBpbikpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0b3V0X2lkID0gemwzMDczeF9vdXRwdXRfcGluX291dF9nZXQocGluLVxcdTAwM2VpZCk7XFxuK1xcbitcXHRcXHRpZiAoIXpsMzA3M3hfZGV2X291dF9pc19zdGVwcGVkKHpsZGV2LCBvdXRfaWQpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHN5bnRoX2lkID0gemwzMDczeF9kZXZfb3V0X3N5bnRoX2dldCh6bGRldiwgb3V0X2lkKTtcXG4rXFx0XFx0aWYgKHN5bnRoX2lkIFxcdTAwM2U9IFpMMzA3M1hfTlVNX1NZTlRIUykge1xcbitcXHRcXHRcXHRkZXZfd2Fybih6bGRldi1cXHUwMDNlZGV2LCBcXFwiVW5leHBlY3RlZCBzeW50aCBpZCBmb3IgT1VUJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCBvdXRfaWQpO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXHRcXHRzeW50aF9tYXNrW3N5bnRoX2lkXSB8PSBCSVQob3V0X2lkKTtcXG4rXFx0fVxcbitcXG4rXFx0LyogUHJvY2VzcyBlYWNoIHN5bnRoIGdyb3VwICovXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBaTDMwNzNYX05VTV9TWU5USFM7IGkrKykge1xcbitcXHRcXHRzeW50aCA9IHpsMzA3M3hfc3ludGhfc3RhdGVfZ2V0KHpsZGV2LCBpKTtcXG4rXFx0XFx0aWYgKCF6bDMwNzN4X3N5bnRoX2lzX2VuYWJsZWQoc3ludGgpIHx8XFxuK1xcdFxcdCAgICB6bDMwNzN4X3N5bnRoX2RwbGxfZ2V0KHN5bnRoKSAhPSB6bGRwbGwtXFx1MDAzZWlkKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHN5bnRoX2ZyZXEgPSB6bDMwNzN4X3N5bnRoX2ZyZXFfZ2V0KHN5bnRoKTtcXG4rXFxuK1xcdFxcdC8qIFJlbWVtYmVyIGZpcnN0IGVuYWJsZWQgc3ludGggZnJlcSBmb3IgVG9ELW9ubHkgZmFsbGJhY2sgKi9cXG4rXFx0XFx0aWYgKCFmaXJzdF9zeW50aF9mcmVxKVxcbitcXHRcXHRcXHRmaXJzdF9zeW50aF9mcmVxID0gc3ludGhfZnJlcTtcXG4rXFxuK1xcdFxcdGlmICghc3ludGhfbWFza1tpXSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHQvKiBTYWZlIGZvciBzMzI6IG1heCBzeW50aCBmcmVxIGlzIDc1MCBNSHogKi9cXG4rXFx0XFx0c3RlcF9jeWNsZXMgPSBkaXZfczY0KGRlbHRhICogc3ludGhfZnJlcSwgTlNFQ19QRVJfU0VDKTtcXG4rXFxuK1xcdFxcdHJjID0gemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc3ludGhfbWFza1tpXSwgc3RlcF9jeWNsZXMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIXRvZF9zdGVwcGVkKTtcXG4rXFx0XFx0aWYgKHJjKSB7XFxuK1xcdFxcdFxcdGlmICh0b2Rfc3RlcHBlZCkge1xcbitcXHRcXHRcXHRcXHRkZXZfd2Fybih6bGRldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgXFxcIlBhcnRpYWwgcGhhc2Ugc3RlcCBmYWlsdXJlXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0cmV0dXJuIHJjO1xcbitcXHRcXHR9XFxuK1xcdFxcdHRvZF9zdGVwcGVkID0gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFmaXJzdF9zeW50aF9mcmVxKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHQvKiBObyBlbmFibGVkIG91dHB1dHMgZm91bmQ7IHN0ZXAgVG9EIGNvdW50ZXIgb25seSB1c2luZyB0aGVcXG4rXFx0ICogZmlyc3QgZW5hYmxlZCBzeW50aCdzIHBlcmlvZCAoZW1wdHkgb3V0cHV0IG1hc2spLlxcbitcXHQgKi9cXG4rXFx0aWYgKCF0b2Rfc3RlcHBlZCkge1xcbitcXHRcXHRzdGVwX2N5Y2xlcyA9IGRpdl9zNjQoZGVsdGEgKiBmaXJzdF9zeW50aF9mcmVxLCBOU0VDX1BFUl9TRUMpO1xcbitcXHRcXHRyZXR1cm4gemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQsIDAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBzdGVwX2N5Y2xlcywgdHJ1ZSk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiAvKipcXG4tICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlXFxuLSAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZVxcbisgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUgLSBhZGp1c3QgUFRQIGNsb2NrIHRpbWVcXG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXFxuKyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzXFxuICAqXFxuLSAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuXFxuKyAqIEZvciBOQ08sIGxhcmdlIGRlbHRhcyAoXFx1MDAzZT0gMSBzZWNvbmQpIGFyZSBzcGxpdCBpbnRvIGEgVG9EXFxuKyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciB0aGUgc2Vjb25kcyBwYXJ0IGFuZCBhbiBvdXRwdXQgcGhhc2Ugc3RlcCBmb3JcXG4rICogdGhlIHN1Yi1zZWNvbmQgcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgcGhhc2Ugc3RlcCBkaXJlY3RseSxcXG4rICogZmFsbGluZyBiYWNrIHRvIFRvRCByZWFkLW1vZGlmeS13cml0ZSBpZiBwaGFzZSBzdGVwIGlzIHVuYXZhaWxhYmxlLlxcbisgKiBJbiBBVVRPL1JFRkxPQ0sgbW9kZXMsIGxhcmdlIGRlbHRhcyBhcmUgc3BsaXQgaW50byBUb0RcXG4rICogcmVhZC1tb2RpZnktd3JpdGUgZm9yIHNlY29uZHMgYW5kIFRJRSB3cml0ZSBmb3IgdGhlIHN1Yi1zZWNvbmRcXG4rICogcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgVElFIHdyaXRlIGRpcmVjdGx5LlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4gICovXFxuLXZvaWRcXG4temwzMDczeF9kcGxsX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxcbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHM2NCBkZWx0YSlcXG4ge1xcbi1cXHRXQVJOKHpsZHBsbC1cXHUwMDNlZHBsbF9kZXYsIFxcXCJEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXFxcXG5cXFwiKTtcXG4rXFx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIHB0cF9pbmZvKTtcXG4rXFx0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cXHUwMDNlZGV2O1xcbitcXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xcbitcXHRib29sIHNlY19hZGp1c3RlZCA9IGZhbHNlO1xcbitcXHRzdHJ1Y3QgdGltZXNwZWM2NCB0cztcXG4rXFx0aW50IHJjO1xcbiBcXG4tXFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4tXFx0a2ZyZWUoemxkcGxsKTtcXG4rXFx0aWYgKCFkZWx0YSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHQvKiBNb2RlcyB3aXRob3V0IHBoYXNlIHN0ZXAgb3IgVElFIHVzZSBwbGFpbiBUb0QgYWRqdXN0ICovXFxuK1xcdGNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkKTtcXG4rXFx0aWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICF6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY2hhbikpXFxuK1xcdFxcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVxcdTAwM2VpZCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTtcXG4rXFxuK1xcdC8qIFNwbGl0IG9mZiBzZWNvbmRzIHZpYSBUb0QgcmVhZC1tb2RpZnktd3JpdGUgc28gdGhlIHN1Yi1zZWNvbmRcXG4rXFx0ICogcmVtYWluZGVyIGNhbiBiZSBhcHBsaWVkIHRocm91Z2ggdGhlIG91dHB1dC1jb2hlcmVudCBtZWNoYW5pc21cXG4rXFx0ICogKHBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlKS5cXG4rXFx0ICovXFxuK1xcdGlmIChkZWx0YSBcXHUwMDNlPSBOU0VDX1BFUl9TRUMgfHwgZGVsdGEgXFx1MDAzYz0gLU5TRUNfUEVSX1NFQykge1xcbitcXHRcXHRzMzIgcmVtYWluZGVyO1xcbitcXG4rXFx0XFx0dHMudHZfc2VjID0gZGl2X3M2NF9yZW0oZGVsdGEsIE5TRUNfUEVSX1NFQywgXFx1MDAyNnJlbWFpbmRlcik7XFxuK1xcdFxcdHRzLnR2X25zZWMgPSAwO1xcbitcXHRcXHRkZWx0YSA9IHJlbWFpbmRlcjtcXG4rXFxuK1xcdFxcdHJjID0gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQsIHRzKTtcXG4rXFx0XFx0aWYgKHJjKVxcbitcXHRcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRcXHQvKiBObyBzdWItc2Vjb25kIHJlbWFpbmRlciwgZG9uZSAqL1xcbitcXHRcXHRpZiAoIWRlbHRhKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdFxcdC8qIFdhaXQgZm9yIHRoZSBUb0Qgd3JpdGUgdG8gYmUgYXBwbGllZCBhdCB0aGUgMSBIeiBlZGdlXFxuK1xcdFxcdCAqIGJlZm9yZSBpc3N1aW5nIHBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlLCBzbyB0aGUgcGVuZGluZ1xcbitcXHRcXHQgKiBXUl9ORVhUXzFIWiBkb2VzIG5vdCBvdmVyd3JpdGUgdGhlIHN1Yi1zZWNvbmQgYWRqdXN0bWVudC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkKTtcXG4rXFx0XFx0aWYgKHJjKVxcbitcXHRcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRcXHRzZWNfYWRqdXN0ZWQgPSB0cnVlO1xcbitcXHR9XFxuK1xcbitcXHQvKiBBcHBseSBzdWItc2Vjb25kIGRlbHRhIHZpYSBwaGFzZSBzdGVwIChOQ08pIG9yIFRJRSB3cml0ZSAqL1xcbitcXHRpZiAoemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKSB7XFxuK1xcdFxcdHJjID0gemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoemxkcGxsLCBkZWx0YSk7XFxuK1xcdFxcdGlmICghcmMpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyYyA9IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQsIGRlbHRhKTtcXG4rXFx0XFx0aWYgKCFyYylcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlIGZhaWxlZCwgZmFsbCBiYWNrIHRvIFRvRCBhZGp1c3QgKi9cXG4rXFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVxcdTAwM2VpZCxcXG4rXFx0XFx0XFx0XFx0ICAgICBuc190b190aW1lc3BlYzY0KGRlbHRhKSk7XFxuK1xcbitcXHQvKiBJbiB0aGUgdW5saWtlbHkgZXZlbnQgdGhhdCBib3RoIHBoYXNlIHN0ZXAvVElFIHdyaXRlIGFuZCBmYWxsYmFja1xcbitcXHQgKiBUb0QgYWRqdXN0IGZhaWwgYWZ0ZXIgc2Vjb25kcyB3ZXJlIGFscmVhZHkgY29tbWl0dGVkLCByZXR1cm5cXG4rXFx0ICogc3VjY2VzcyB0byBwcmV2ZW50IHRoZSBQVFAgc2Vydm8gZnJvbSByZXRyeWluZyB0aGUgZnVsbCBkZWx0YSBhbmRcXG4rXFx0ICogYXBwbHlpbmcgc2Vjb25kcyBhZ2Fpbi4gVGhlIHN1Yi1zZWNvbmQgcmVzaWR1YWwgd2lsbCBzZWxmLWNvcnJlY3RcXG4rXFx0ICogaW4gdGhlIG5leHQgc2Vydm8gY3ljbGUuXFxuK1xcdCAqL1xcbitcXHRpZiAocmMgXFx1MDAyNlxcdTAwMjYgc2VjX2FkanVzdGVkKSB7XFxuK1xcdFxcdGRldl93YXJuKHpsZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdCBcXFwiU3ViLXNlY29uZCBhZGp1c3RtZW50IGZhaWxlZCBhZnRlciBzZWNvbmRzIGFwcGxpZWRcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJjO1xcbit9XFxuK1xcbisvKipcXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lIC0gYWRqdXN0IFBUUCBjbG9jayBmcmVxdWVuY3lcXG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXFxuKyAqIEBzY2FsZWRfcHBtOiBmcmVxdWVuY3kgYWRqdXN0bWVudCBpbiBzY2FsZWQgcHBtIChwcG0gKiAyXjE2KVxcbisgKlxcbisgKiBPbmx5IHN1cHBvcnRlZCBmb3IgTkNPLiBXcml0ZXMgdGhlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgcmVnaXN0ZXIuXFxuKyAqXFxuKyAqIFJldHVybjpcXG4rICogKiAlMFxcdFxcdFxcdC0gc3VjY2VzcyBvciBAc2NhbGVkX3BwbSBpcyB6ZXJvIChuby1vcClcXG4rICogKiAlLUVPUE5PVFNVUFBcXHQtIE5DTyBwaW4gaXMgbm90IGNvbm5lY3RlZCBhbmQgQHNjYWxlZF9wcG0gaXMgbm9uLXplcm9cXG4rICogKiBuZWdhdGl2ZVxcdFxcdC0gb3RoZXIgZXJyb3JcXG4rICovXFxuK3N0YXRpYyBpbnRcXG4remwzMDczeF9kcGxsX3B0cF9hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgbG9uZyBzY2FsZWRfcHBtKVxcbit7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBwdHBfaW5mbyk7XFxuK1xcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XFxuK1xcdHM2NCBvZmZzZXQ7XFxuK1xcbitcXHQvKiBDb252ZXJ0IHNjYWxlZF9wcG0gdG8gZGZfb2Zmc2V0IGluIDJeLTQ4IHN0ZXBzOlxcbitcXHQgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDJeMzIpIC8gMTBeNlxcbitcXHQgKlxcbitcXHQgKiBTaW1wbGlmeSB0byBhdm9pZCBvdmVyZmxvdzpcXG4rXFx0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjI2KSAvIDVeNlxcbitcXHQgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDY3MTA4ODY0KSAvIDE1NjI1XFxuK1xcdCAqL1xcbitcXHRvZmZzZXQgPSAtZGl2X3M2NCgoczY0KXNjYWxlZF9wcG0gKiA2NzEwODg2NExMLCAxNTYyNSk7XFxuK1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRwbGwtXFx1MDAzZWRldiwgemxkcGxsLVxcdTAwM2VpZCk7XFxuK1xcdGlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKVxcbitcXHRcXHRyZXR1cm4gc2NhbGVkX3BwbSA/IC1FT1BOT1RTVVBQIDogMDtcXG4rXFx0aWYgKG9mZnNldCA9PSBjaGFuLVxcdTAwM2VkZl9vZmZzZXQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0dXJuIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHpsZHBsbC1cXHUwMDNlZGV2LCB6bGRwbGwtXFx1MDAzZWlkLCBvZmZzZXQpO1xcbit9XFxuK1xcbisvKipcXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSAtIGFkanVzdCBQVFAgY2xvY2sgcGhhc2VcXG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXFxuKyAqIEBkZWx0YTogcGhhc2UgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kc1xcbisgKlxcbisgKiBPbmx5IHN1cHBvcnRlZCBpbiBBVVRPIGFuZCBSRUZMT0NLIG1vZGVzLiBVc2VzIFRJRSB3cml0ZSBmb3JcXG4rICogbmFub3NlY29uZCByZXNvbHV0aW9uIHBoYXNlIGFkanVzdG1lbnQuXFxuKyAqXFxuKyAqIFJldHVybjpcXG4rICogKiAlMFxcdFxcdFxcdC0gc3VjY2VzcyBvciBAZGVsdGEgaXMgemVybyAobm8tb3ApXFxuKyAqICogJS1FT1BOT1RTVVBQXFx0LSBtb2RlIGRvZXMgbm90IHN1cHBvcnQgVElFIGFuZCBAZGVsdGEgaXMgbm9uLXplcm9cXG4rICogKiBuZWdhdGl2ZVxcdFxcdC0gb3RoZXIgZXJyb3JcXG4rICovXFxuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHMzMiBkZWx0YSlcXG4re1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgcHRwX2luZm8pO1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVxcdTAwM2VkZXY7XFxuK1xcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XFxuK1xcbitcXHRpZiAoIWRlbHRhKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdGNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkKTtcXG4rXFxuK1xcdGlmICghemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRyZXR1cm4gemwzMDczeF9jaGFuX3RpZV93cml0ZSh6bGRldiwgemxkcGxsLVxcdTAwM2VpZCwgZGVsdGEpO1xcbit9XFxuK1xcbitzdGF0aWMgczMyXFxuK3psMzA3M3hfZHBsbF9wdHBfZ2V0bWF4cGhhc2Uoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvIF9fYWx3YXlzX3VudXNlZClcXG4re1xcbitcXHQvKiBIVyBsaW1pdHMgVElFIHdyaXRlIHRvICstMSBzZWNvbmQuIFJldHVybiB0aGUgY29uc3RhbnQgSFdcXG4rXFx0ICogbGltaXQgYW5kIGxldCBhZGpwaGFzZSBoYW5kbGUgbW9kZS1zcGVjaWZpYyBjaGVja3MuXFxuK1xcdCAqL1xcbitcXHRyZXR1cm4gTlNFQ19QRVJfU0VDIC0gMTtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm8gPSB7XFxuK1xcdC5vd25lclxcdFxcdD0gVEhJU19NT0RVTEUsXFxuK1xcdC5tYXhfYWRqXFx0PSBaTDMwNzNYX0RQTExfUFRQX01BWF9BREosXFxuK1xcdC5nZXR0aW1leDY0XFx0PSB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQsXFxuK1xcdC5zZXR0aW1lNjRcXHQ9IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0LFxcbitcXHQuYWRqdGltZVxcdD0gemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lLFxcbitcXHQuYWRqZmluZVxcdD0gemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lLFxcbitcXHQuYWRqcGhhc2VcXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2UsXFxuK1xcdC5nZXRtYXhwaGFzZVxcdD0gemwzMDczeF9kcGxsX3B0cF9nZXRtYXhwaGFzZSxcXG4rfTtcXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBhIERQTEwgY2hhbm5lbFxcbisgKiBAemxkcGxsOiBEUExMIGNoYW5uZWwgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvclxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXFxuK3tcXG4rXFx0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cXHUwMDNlZGV2O1xcbitcXHRzdHJ1Y3QgcHRwX2Nsb2NrICpwdHBfY2xvY2s7XFxuK1xcbitcXHRzbnByaW50Zih6bGRwbGwtXFx1MDAzZXB0cF9pbmZvLm5hbWUsIHNpemVvZih6bGRwbGwtXFx1MDAzZXB0cF9pbmZvLm5hbWUpLFxcbitcXHRcXHQgXFxcIiVzLWRwbGwldVxcXCIsIGRldl9uYW1lKHpsZGV2LVxcdTAwM2VkZXYpLCB6bGRwbGwtXFx1MDAzZWlkKTtcXG4rXFxuK1xcdHB0cF9jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcihcXHUwMDI2emxkcGxsLVxcdTAwM2VwdHBfaW5mbywgemxkZXYtXFx1MDAzZWRldik7XFxuK1xcdGlmIChJU19FUlIocHRwX2Nsb2NrKSkge1xcbitcXHRcXHRkZXZfZXJyKHpsZGV2LVxcdTAwM2VkZXYsIFxcXCJGYWlsZWQgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBEUExMJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHpsZHBsbC1cXHUwMDNlaWQpO1xcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihwdHBfY2xvY2spO1xcbitcXHR9XFxuK1xcbitcXHR6bGRwbGwtXFx1MDAzZXB0cF9jbG9jayA9IHB0cF9jbG9jaztcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKipcXG4rICogemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyIC0gdW5yZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsXFxuKyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byB1bnJlZ2lzdGVyIFBUUCBjbG9jayBmb3JcXG4rICovXFxuK3N0YXRpYyB2b2lkIHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXFxuK3tcXG4rXFx0aWYgKCFJU19FUlJfT1JfTlVMTCh6bGRwbGwtXFx1MDAzZXB0cF9jbG9jaykpIHtcXG4rXFx0XFx0cHRwX2Nsb2NrX3VucmVnaXN0ZXIoemxkcGxsLVxcdTAwM2VwdHBfY2xvY2spO1xcbitcXHRcXHR6bGRwbGwtXFx1MDAzZXB0cF9jbG9jayA9IE5VTEw7XFxuK1xcdH1cXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTIzOTgsNiArMjczMCw0OCBAQCB6bDMwNzN4X2RwbGxfcmVmX3N5bmNfcGFpcnNfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9hbGxvYyAtIGFsbG9jYXRlIERQTEwgZGV2aWNlXFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBudW1iZXJcXG4rICpcXG4rICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLlxcbisgKlxcbisgKiBSZXR1cm46IHBvaW50ZXIgdG8gRFBMTCBkZXZpY2Ugb24gc3VjY2VzcywgZXJyb3IgcG9pbnRlciBvbiBlcnJvclxcbisgKi9cXG4rc3RydWN0IHpsMzA3M3hfZHBsbCAqXFxuK3psMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcXG4re1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7XFxuK1xcbitcXHR6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTtcXG4rXFx0aWYgKCF6bGRwbGwpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXG4rXFx0emxkcGxsLVxcdTAwM2VkZXYgPSB6bGRldjtcXG4rXFx0emxkcGxsLVxcdTAwM2VpZCA9IGNoO1xcbitcXHR6bGRwbGwtXFx1MDAzZXB0cF9pbmZvID0gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvO1xcbitcXHRtdXRleF9pbml0KFxcdTAwMjZ6bGRwbGwtXFx1MDAzZWxvY2spO1xcbitcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2emxkcGxsLVxcdTAwM2VwaW5zKTtcXG4rXFxuK1xcdHJldHVybiB6bGRwbGw7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2RwbGxfZnJlZSAtIGZyZWUgRFBMTCBkZXZpY2VcXG4rICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXFxuKyAqXFxuKyAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuXFxuKyAqL1xcbit2b2lkXFxuK3psMzA3M3hfZHBsbF9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcXG4re1xcbitcXHRXQVJOKHpsZHBsbC1cXHUwMDNlZHBsbF9kZXYsIFxcXCJEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXFxcXG5cXFwiKTtcXG4rXFxuK1xcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuK1xcdGtmcmVlKHpsZHBsbCk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIgLSByZWdpc3RlciBEUExMIGRldmljZSBhbmQgYWxsIGl0cyBwaW5zXFxuICAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZVxcbkBAIC0yNDI4LDYgKzI4MDIsMTMgQEAgemwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcXG4gXFx0XFx0cmV0dXJuIHJjO1xcbiBcXHR9XFxuIFxcbitcXHRyYyA9IHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIoemxkcGxsKTtcXG4rXFx0aWYgKHJjKSB7XFxuK1xcdFxcdHpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTtcXG4rXFx0XFx0emwzMDczeF9kcGxsX2RldmljZV91bnJlZ2lzdGVyKHpsZHBsbCk7XFxuK1xcdFxcdHJldHVybiByYztcXG4rXFx0fVxcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTI0NDEsNyArMjgyMiw3IEBAIHpsMzA3M3hfZHBsbF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXFxuIHZvaWRcXG4gemwzMDczeF9kcGxsX3VucmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxcbiB7XFxuLVxcdC8qIFVucmVnaXN0ZXIgYWxsIHBpbnMgYW5kIGRwbGwgKi9cXG4rXFx0emwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHpsZHBsbCk7XFxuIFxcdHpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTtcXG4gXFx0emwzMDczeF9kcGxsX2RldmljZV91bnJlZ2lzdGVyKHpsZHBsbCk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXFxuaW5kZXggZmFlYmM0MDJiYTFiNy4uOTkzMjIxZGM2MzI0OSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmhcXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmhcXG5AQCAtNSw2ICs1LDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kcGxsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9saXN0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwiY29yZS5oXFxcIlxcbiBcXG5AQCAtMjIsNiArMjMsOCBAQFxcbiAgKiBAdHlwZTogRFBMTCB0eXBlIChQUFMgb3IgRUVDKVxcbiAgKiBAbG9ja19zdGF0dXM6IGxhc3Qgc2F2ZWQgRFBMTCBsb2NrIHN0YXR1c1xcbiAgKiBAcGluczogbGlzdCBvZiBwaW5zXFxuKyAqIEBwdHBfaW5mbzogUFRQIGNsb2NrIGluZm9cXG4rICogQHB0cF9jbG9jazogcmVnaXN0ZXJlZCBQVFAgY2xvY2sgKG9yIE5VTEwpXFxuICAqL1xcbiBzdHJ1Y3QgemwzMDczeF9kcGxsIHtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZFxcdFxcdGxpc3Q7XFxuQEAgLTM2LDYgKzM5LDggQEAgc3RydWN0IHpsMzA3M3hfZHBsbCB7XFxuIFxcdGVudW0gZHBsbF90eXBlXFx0XFx0XFx0dHlwZTtcXG4gXFx0ZW51bSBkcGxsX2xvY2tfc3RhdHVzXFx0XFx0bG9ja19zdGF0dXM7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWRcXHRcXHRwaW5zO1xcbitcXHRzdHJ1Y3QgcHRwX2Nsb2NrX2luZm9cXHRcXHRwdHBfaW5mbztcXG4rXFx0c3RydWN0IHB0cF9jbG9ja1xcdFxcdCpwdHBfY2xvY2s7XFxuIH07XFxuIFxcbiBzdHJ1Y3QgemwzMDczeF9kcGxsICp6bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhcXG5pbmRleCBiNzBlYWQ3ZDQ0OTViLi5mM2E1ZTEyMTVhYTM2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaFxcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaFxcbkBAIC0xNzksNiArMTc5LDIwIEBAXFxuICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRFxcdFxcdFxcdEdFTk1BU0soMiwgMClcXG4gI2RlZmluZSBaTF9EUExMX0RGX1JFQURfQ01EX0FDQ19JXFx0XFx0NFxcbiBcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTFxcdFxcdFxcdFpMX1JFRyg1LCAweDMwLCAxKVxcbisjZGVmaW5lIFpMX0RQTExfVElFX0NUUkxfT1BcXHRcXHRcXHRHRU5NQVNLKDIsIDApXFxuKyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUF9XUlxcdFxcdFxcdDRcXG4rXFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0NUUkxfTUFTS1xcdFxcdFpMX1JFRyg1LCAweDMxLCAxKVxcbitcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfQ1RSTChfaWR4KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0WkxfUkVHX0lEWChfaWR4LCA1LCAweDM4LCAxLCBaTDMwNzNYX01BWF9DSEFOTkVMUywgMSlcXG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX1NFTVxcdFxcdFxcdEJJVCg0KVxcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EXFx0XFx0XFx0R0VOTUFTSygzLCAwKVxcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaXFx0MVxcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX0NVUlJFTlRcXHRcXHQ4XFxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFpcXHQ5XFxuK1xcbiAjZGVmaW5lIFpMX1JFR19EUExMX01FQVNfQ1RSTFxcdFxcdFxcdFpMX1JFRyg1LCAweDUwLCAxKVxcbiAjZGVmaW5lIFpMX0RQTExfTUVBU19DVFJMX0VOXFx0XFx0XFx0QklUKDApXFxuICNkZWZpbmUgWkxfRFBMTF9NRUFTX0NUUkxfQVZHX0ZBQ1RPUlxcdFxcdEdFTk1BU0soNywgNClcXG5AQCAtMTkzLDYgKzIwNyw5IEBAXFxuIFxcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbiAgKiBSZWdpc3RlciBQYWdlcyA2LTcsIERQTEwgRGF0YVxcbisgKlxcbisgKiBQZXItY2hhbm5lbCByZWdpc3RlcnMgd2l0aCBzdHJpZGUgMHgyMC4gQ2hhbm5lbHMgMC0zIHJlc2lkZSBvbiBwYWdlIDYsXFxuKyAqIGNoYW5uZWwgNCBvbiBwYWdlIDcuXFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbiBcXG4gI2RlZmluZSBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuQEAgLTIwMiw2ICsyMTksMjQgQEBcXG4gXFx0KChfaWR4KSBcXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfNClcXG4gI2RlZmluZSBaTF9EUExMX0RGX09GRlNFVF9VTktOT1dOXFx0UzY0X01JTlxcbiBcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0WkxfUkVHX0lEWChfaWR4LCA2LCAweDBDLCA2LCA0LCAweDIwKVxcbisjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBXzRcXHRcXHRcXHRaTF9SRUcoNywgMHgwQywgNilcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQShfaWR4KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0KChfaWR4KSBcXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RJRV9EQVRBXzQpXFxuK1xcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUNfMDMoX2lkeClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgxMiwgNiwgNCwgMHgyMClcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzRcXHRcXHRcXHRaTF9SRUcoNywgMHgxMiwgNilcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDKF9pZHgpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHQoKF9pZHgpIFxcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RPRF9TRUNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfU0VDXzQpXFxuK1xcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU18wMyhfaWR4KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0WkxfUkVHX0lEWChfaWR4LCA2LCAweDE4LCA0LCA0LCAweDIwKVxcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU180XFx0XFx0XFx0WkxfUkVHKDcsIDB4MTgsIDQpXFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TKF9pZHgpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHQoKF9pZHgpIFxcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RPRF9OU18wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RPRF9OU180KVxcbitcXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXFxuICAqIFJlZ2lzdGVyIFBhZ2UgOSwgU3ludGggYW5kIE91dHB1dFxcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuQEAgLTIyMSw2ICsyNTYsMjMgQEBcXG4gI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9FTlxcdFxcdFxcdEJJVCgwKVxcbiAjZGVmaW5lIFpMX09VVFBVVF9DVFJMX1NZTlRIX1NFTFxcdFxcdEdFTk1BU0soNiwgNClcXG4gXFxuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTS1xcdFxcdFpMX1JFRyg5LCAweDM2LCAyKVxcbitcXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTFxcdFxcdFpMX1JFRyg5LCAweDM4LCAxKVxcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfRFBMTFxcdFxcdEdFTk1BU0soNiwgNClcXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX1RPRF9TVEVQXFx0QklUKDMpXFxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUFxcdFxcdEdFTk1BU0soMSwgMClcXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX05PTkVcXHQwXFxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9SRVNFVFxcdDFcXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1JFQURcXHQyXFxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURVxcdDNcXG4rXFxuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUlxcdFxcdFpMX1JFRyg5LCAweDM5LCAxKVxcbitcXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTUFTS1xcdFxcdFpMX1JFRyg5LCAweDNhLCAyKVxcbitcXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfREFUQVxcdFxcdFpMX1JFRyg5LCAweDNjLCA0KVxcbitcXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcXG4gICogUmVnaXN0ZXIgUGFnZSAxMCwgUmVmIE1haWxib3hcXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDExOjUyOjQ5LjE2NzA5NTA1MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjk3NDAwNjI4MjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpMMzA3M1hfSTJDXCIsXG4gICAgXCJaTDMwNzNYX1NQSVwiLFxuICAgIFwiUFRQXzE1ODhfQ0xPQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXRcIixcbiAgICBcInpsMzA3M3hfY2hhbl90b2RfcmVhZFwiLFxuICAgIFwiemwzMDczeF9jaGFuX3RvZF93cml0ZVwiLFxuICAgIFwiemwzMDczeF9jaGFuX3RvZF9hZGp1c3RcIixcbiAgICBcInpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0XCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fdGllX3dyaXRlXCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgUFRQIGNsb2NrIHN1cHBvcnQgdG8gdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyICh6bDMwNzN4KS4gVGhlIGRyaXZlciBjYW4gYmUgaW5zdGFudGlhdGVkIHZpYSBJMkMgb3IgU1BJLCBhbmQgdGhlIFBUUCBjbG9jayBpbnRlcmZhY2UgaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdmlhIGAvZGV2L3B0cFhgLiBTeXprYWxsZXIgY2FuIGZ1enogdGhpcyBmdW5jdGlvbmFsaXR5IHVzaW5nIEkyQy9TUEkgZW11bGF0aW9uIGFuZCBQVFAgaW9jdGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1OTFkZWM4M2E4NWQ3MDc0NTUyNjBlOTE4ZTc0MTI1N2U0NWY5MjkxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAxMTo1Mjo0NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWcgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXG5pbmRleCA1YmJjYTE0MDA1ODEzLi5kYTE3MzFhY2UxNWYwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xuQEAgLTIsNyArMiw3IEBAXG4gXG4gY29uZmlnIFpMMzA3M1hcbiBcdHRyaXN0YXRlIFwiTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlc1wiIGlmIENPTVBJTEVfVEVTVFxuLVx0ZGVwZW5kcyBvbiBORVRcbitcdGRlcGVuZHMgb24gTkVUIFx1MDAyNlx1MDAyNiBQVFBfMTU4OF9DTE9DS1xuIFx0c2VsZWN0IERQTExcbiBcdHNlbGVjdCBORVRfREVWTElOS1xuIFx0c2VsZWN0IFJFR01BUFxuQEAgLTE2LDcgKzE2LDcgQEAgY29uZmlnIFpMMzA3M1hcbiBcbiBjb25maWcgWkwzMDczWF9JMkNcbiBcdHRyaXN0YXRlIFwiSTJDIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1wiXG4tXHRkZXBlbmRzIG9uIEkyQyBcdTAwMjZcdTAwMjYgTkVUXG4rXHRkZXBlbmRzIG9uIEkyQyBcdTAwMjZcdTAwMjYgTkVUIFx1MDAyNlx1MDAyNiBQVFBfMTU4OF9DTE9DS1xuIFx0c2VsZWN0IFJFR01BUF9JMkNcbiBcdHNlbGVjdCBaTDMwNzNYXG4gXHRoZWxwXG5AQCAtMjgsNyArMjgsNyBAQCBjb25maWcgWkwzMDczWF9JMkNcbiBcbiBjb25maWcgWkwzMDczWF9TUElcbiBcdHRyaXN0YXRlIFwiU1BJIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1wiXG4tXHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgU1BJXG4rXHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgU1BJIFx1MDAyNlx1MDAyNiBQVFBfMTU4OF9DTE9DS1xuIFx0c2VsZWN0IFJFR01BUF9TUElcbiBcdHNlbGVjdCBaTDMwNzNYXG4gXHRoZWxwXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXG5pbmRleCA0ZWMyY2Y1M2RhZDQ2Li5hZjZjYTQzYzMzNTkwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNcbkBAIC0zLDYgKzMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZfcHJpbnRrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiBcbkBAIC0xNjIsOCArMTYzLDggQEAgaW50IHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpXG4gICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3hfZGV2IHN0cnVjdHVyZVxuICAqIEBpbmRleDogRFBMTCBjaGFubmVsIGluZGV4IHRvIGZldGNoIHN0YXRlIGZvclxuICAqXG4tICogUmVhZHMgdGhlIG1vZGVfcmVmc2VsIHJlZ2lzdGVyIGFuZCByZWZlcmVuY2UgcHJpb3JpdHkgcmVnaXN0ZXJzIGZvclxuLSAqIHRoZSBnaXZlbiBEUExMIGNoYW5uZWwgYW5kIHN0b3JlcyB0aGUgcmF3IHZhbHVlcyBmb3IgbGF0ZXIgdXNlLlxuKyAqIFJlYWRzIHRoZSBtb2RlX3JlZnNlbCwgc3RhdHVzIGFuZCByZWZlcmVuY2UgcHJpb3JpdHkgcmVnaXN0ZXJzIGZvclxuKyAqIHRoZSBnaXZlbiBEUExMIGNoYW5uZWwgYW5kIHN0b3JlcyB0aGUgdmFsdWVzIGZvciBsYXRlciB1c2UuXG4gICpcbiAgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuICAqL1xuQEAgLTIzNCw2ICsyMzUsMzIyIEBAIGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKnpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldixcbiBcdHJldHVybiBcdTAwMjZ6bGRldi1cdTAwM2VjaGFuW2luZGV4XTtcbiB9XG4gXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0IC0gd2FpdCBmb3IgVG9EIHNlbWFwaG9yZSB0byBjbGVhclxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICpcbisgKiBQb2xscyB0aGUgVG9EIGNvbnRyb2wgcmVnaXN0ZXIgdW50aWwgdGhlIHNlbWFwaG9yZSBiaXQgaXMgY2xlYXJlZCxcbisgKiBpbmRpY2F0aW5nIHRoZSBkZXZpY2UgaGFzIGNvbXBsZXRlZCB0aGUgcHJldmlvdXMgVG9EIG9wZXJhdGlvbi5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRUJVU1kgaWYgc2VtYXBob3JlIG5vdCBjbGVhcmVkLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4raW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcbit7XG4rXHR1bnNpZ25lZCBpbnQgdGltZW91dDtcbitcdHU4IHRvZF9jdHJsO1xuK1x0aW50IHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSwgXHUwMDI2dG9kX2N0cmwpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRzd2l0Y2ggKEZJRUxEX0dFVChaTF9EUExMX1RPRF9DVFJMX0NNRCwgdG9kX2N0cmwpKSB7XG4rXHRjYXNlIDA6XG4rXHRcdC8qIE5vIG9wZXJhdGlvbiBwZW5kaW5nIChwb3dlci1vbi9yZXNldCBkZWZhdWx0KSAqL1xuK1x0XHRyZXR1cm4gMDtcbitcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFo6XG4rXHRcdHRpbWVvdXQgPSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTO1xuK1x0XHRicmVhaztcbitcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVDpcbitcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFo6XG4rXHRcdHRpbWVvdXQgPSBaTF9QT0xMX1RPRF9SRF9USU1FT1VUX1VTO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdC8qIEZXIG5ldmVyIHdyaXRlcyBjbWQgYml0czsgb25seSB0aGUgZHJpdmVyIHNldHMgdGhlbSAqL1xuK1x0XHRXQVJOX09OKDEpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksXG4rXHRcdFx0XHQgIFpMX0RQTExfVE9EX0NUUkxfU0VNLCB0aW1lb3V0KTtcbitcbitcdHJldHVybiByYyA9PSAtRVRJTUVET1VUID8gLUVCVVNZIDogcmM7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl90b2RfY3RybCAtIGlzc3VlIFRvRCBjb21tYW5kXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKiBAY21kOiBUb0QgY29tbWFuZCB0byBleGVjdXRlXG4rICpcbisgKiBXcml0ZXMgdGhlIHNlbWFwaG9yZSBhbmQgY29tbWFuZCB0byBkcGxsX3RvZF9jdHJsLiBUaGUgY2FsbGVyIG11c3RcbisgKiBlbnN1cmUgdGhlIGRldmljZSBpcyByZWFkeSAoc2VtYXBob3JlIGNsZWFyKSBiZWZvcmUgY2FsbGluZyBhbmRcbisgKiBtdXN0IHdhaXQgZm9yIGNvbXBsZXRpb24gaWYgbmVlZGVkLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitzdGF0aWMgaW50IHpsMzA3M3hfY2hhbl90b2RfY3RybChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgdTggY21kKVxuK3tcbitcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksXG4rXHRcdFx0XHRaTF9EUExMX1RPRF9DVFJMX1NFTSB8IGNtZCk7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl90b2RfcmVhZCAtIHJlYWQgVG9EIHJlZ2lzdGVycyBhZnRlciBpc3N1aW5nIGEgY29tbWFuZFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICogQG5leHRfaHo6IGlmIHRydWUsIHJlYWQgcHJlZGljdGVkIFRvRCBhdCBuZXh0IDEgSHo7IG90aGVyd2lzZSByZWFkIGN1cnJlbnRcbisgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIHRoZSByZXN1bHRcbisgKiBAc3RzOiBvcHRpb25hbCBzeXN0ZW0gdGltZXN0YW1wIHBhaXIgZm9yIGNyb3NzLXRpbWVzdGFtcGluZ1xuKyAqXG4rICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbitcdFx0XHQgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKVxuK3tcbitcdHUzMiBuc2VjO1xuK1x0dTY0IHNlYztcbitcdHU4IGNtZDtcbitcdGludCByYztcbitcbitcdGlmIChuZXh0X2h6KVxuK1x0XHRjbWQgPSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9ORVhUXzFIWjtcbitcdGVsc2VcbitcdFx0Y21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVDtcbitcbitcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRwdHBfcmVhZF9zeXN0ZW1fcHJldHMoc3RzKTtcbitcdHJjID0gemwzMDczeF9jaGFuX3RvZF9jdHJsKHpsZGV2LCBjaCwgY21kKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1x0cHRwX3JlYWRfc3lzdGVtX3Bvc3R0cyhzdHMpO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3JlYWRfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfU0VDKGNoKSwgXHUwMDI2c2VjKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0LyogSFcgbmFub3NlY29uZHMgYXJlIGFsd2F5cyBpbiBbMCwgTlNFQ19QRVJfU0VDKSByYW5nZSAqL1xuK1x0cmMgPSB6bDMwNzN4X3JlYWRfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCBcdTAwMjZuc2VjKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0dHMtXHUwMDNldHZfc2VjID0gc2VjO1xuK1x0dHMtXHUwMDNldHZfbnNlYyA9IG5zZWM7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3RvZF93cml0ZSAtIHdyaXRlIFRvRCByZWdpc3RlcnMgYW5kIHRyaWdnZXIgMSBIeiB1cGRhdGVcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqIEB0czogdGltZSB0byBzZXRcbisgKlxuKyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitpbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cylcbit7XG4rXHRpbnQgcmM7XG4rXG4rXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVG9EIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xuK1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIHRzLnR2X3NlYyk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19EUExMX1RPRF9OUyhjaCksIHRzLnR2X25zZWMpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9jdHJsKHpsZGV2LCBjaCxcbitcdFx0XHRcdCAgICAgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFopO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCAtIGF0b21pYyBUb0QgcmVhZC1tb2RpZnktd3JpdGUgd2l0aCByb2xsb3ZlciBndWFyZFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgdG8gYXBwbHlcbisgKlxuKyAqIFJlYWRzIHRoZSBuZXh0LUh6IFRvRCBhbmQgY3VycmVudCBUb0QsIHRoZW4gY2hlY2tzIHdoZXRoZXIgZW5vdWdoIHRpbWVcbisgKiByZW1haW5zIGJlZm9yZSB0aGUgbmV4dCAxIEh6IHJvbGxvdmVyIHRvIHNhZmVseSBjb21wbGV0ZSB0aGUgd3JpdGUuXG4rICogUmUtcmVhZHMgaWYgdGhlIDEgSHogdGljayBjcm9zc2VkIGJldHdlZW4gdGhlIHR3byByZWFkcyBvciBpZiBsZXNzXG4rICogdGhhbiAyMCBtcyByZW1haW5zIGJlZm9yZSB0aGUgbmV4dCByb2xsb3Zlci4gQXBwbGllcyBAZGVsdGEgYW5kIHdyaXRlc1xuKyAqIHRoZSByZXN1bHQgYmFjay5cbisgKlxuKyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbisjZGVmaW5lIFpMX1RPRF9NQVhfUkVUUklFU1x0MjBcbitpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKVxuK3tcbitcdHN0YXRpYyBjb25zdCBsb25nIHRocmVzaG9sZF9ucyA9IDIwICogTlNFQ19QRVJfTVNFQztcbitcdHN0cnVjdCB0aW1lc3BlYzY0IHRzX25leHQsIHRzX2N1ciwgZGlmZjtcbitcdGludCByYywgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFpMX1RPRF9NQVhfUkVUUklFUzsgaSsrKSB7XG4rXHRcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgdHJ1ZSwgXHUwMDI2dHNfbmV4dCwgTlVMTCk7XG4rXHRcdGlmIChyYylcbitcdFx0XHRyZXR1cm4gcmM7XG4rXG4rXHRcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgZmFsc2UsIFx1MDAyNnRzX2N1ciwgTlVMTCk7XG4rXHRcdGlmIChyYylcbitcdFx0XHRyZXR1cm4gcmM7XG4rXG4rXHRcdC8qIEVuc3VyZSB0aGUgMSBIeiB0aWNrIGRpZCBub3QgY3Jvc3MgYmV0d2VlbiB0aGUgdHdvIHJlYWRzXG4rXHRcdCAqIGFuZCB0aGF0IGVub3VnaCBtYXJnaW4gcmVtYWlucyB0byBjb21wbGV0ZSB0aGUgd3JpdGUuXG4rXHRcdCAqL1xuK1x0XHRkaWZmID0gdGltZXNwZWM2NF9zdWIodHNfbmV4dCwgdHNfY3VyKTtcbitcdFx0aWYgKGRpZmYudHZfc2VjIFx1MDAzZSAwIHx8XG4rXHRcdCAgICAoIWRpZmYudHZfc2VjIFx1MDAyNlx1MDAyNiBkaWZmLnR2X25zZWMgXHUwMDNlPSB0aHJlc2hvbGRfbnMpKVxuK1x0XHRcdGJyZWFrO1xuK1x0fVxuK1x0aWYgKGkgPT0gWkxfVE9EX01BWF9SRVRSSUVTKSB7XG4rXHRcdGRldl93YXJuKHpsZGV2LVx1MDAzZWRldixcbitcdFx0XHQgXCJEUExMJXUgVG9EIGFkanVzdCBmYWlsZWQgdG8gZ2V0IHN0YWJsZSBtYXJnaW5cXG5cIixcbitcdFx0XHQgY2gpO1xuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1x0fVxuK1xuK1x0LyogQXBwbHkgZGVsdGEgdG8gdGhlIG5leHQtSHogVG9EICovXG4rXHR0c19uZXh0ID0gdGltZXNwZWM2NF9hZGQodHNfbmV4dCwgZGVsdGEpO1xuK1x0aWYgKCF0aW1lc3BlYzY0X3ZhbGlkKFx1MDAyNnRzX25leHQpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZGV2LCBjaCwgdHNfbmV4dCk7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0IC0gd3JpdGUgZGVsdGEgZnJlcXVlbmN5IG9mZnNldCB0byBoYXJkd2FyZVxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICogQG9mZnNldDogZnJlcXVlbmN5IG9mZnNldCBpbiAyXi00OCBzdGVwc1xuKyAqXG4rICogQ29udGV4dDogQ2FsbGVyIG11c3QgaG9sZCB0aGUgcGVyLURQTEwgbG9jay5cbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldClcbit7XG4rXHRpbnQgcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9PRkZTRVQoY2gpLCBvZmZzZXQpO1xuK1x0aWYgKCFyYylcbitcdFx0emxkZXYtXHUwMDNlY2hhbltjaF0uZGZfb2Zmc2V0ID0gb2Zmc2V0O1xuK1xuK1x0cmV0dXJuIHJjO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlIC0gYWRqdXN0IERQTEwgcGhhc2UgdXNpbmcgVElFIHdyaXRlXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKiBAZGVsdGFfbnM6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMgKG11c3QgYmUgd2l0aGluICstMXMpXG4rICpcbisgKiBDb252ZXJ0cyBuYW5vc2Vjb25kcyB0byBUSUUgdW5pdHMgKDAuMDEgcHMpIGFuZCB3cml0ZXMgVElFIGRhdGFcbisgKiB0byB0aGUgc3BlY2lmaWVkIGNoYW5uZWwuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK2ludCB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgZGVsdGFfbnMpXG4re1xuK1x0czY0IHRpZV9kYXRhO1xuK1x0aW50IHJjO1xuK1xuK1x0aWYgKFdBUk5fT04oZGVsdGFfbnMgXHUwMDNjPSAtTlNFQ19QRVJfU0VDIHx8IGRlbHRhX25zIFx1MDAzZT0gTlNFQ19QRVJfU0VDKSlcbitcdFx0cmV0dXJuIC1FUkFOR0U7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkZXYtXHUwMDNldGllX2xvY2spO1xuK1xuK1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRJRSBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbitcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLFxuK1x0XHRcdFx0ICBaTF9EUExMX1RJRV9DVFJMX09QLFxuK1x0XHRcdFx0ICBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0LyogQ29udmVydCBucyB0byBUSUUgdW5pdHMgKDAuMDEgcHMgPSAxMF4tMTQgcykgKi9cbitcdHRpZV9kYXRhID0gZGVsdGFfbnMgKiAxMDAwMDBMTDtcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9EQVRBKGNoKSwgdGllX2RhdGEpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0ssIEJJVChjaCkpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsXG4rXHRcdFx0XHRaTF9EUExMX1RJRV9DVFJMX09QX1dSKTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAgLSBleGVjdXRlIG9uZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb25cbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqIEBvdXRfbWFzazogYml0bWFzayBvZiBvdXRwdXRzIHRvIHN0ZXBcbisgKiBAc3RlcF9jeWNsZXM6IHBoYXNlIHN0ZXAgaW4gc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzXG4rICogQHRvZF9zdGVwOiBhbHNvIHN0ZXAgdGhlIFRvRCBjb3VudGVyXG4rICpcbisgKiBBbGwgbWFza2VkIG91dHB1dHMgbXVzdCB1c2Ugc3ludGhlc2l6ZXJzIG9mIHRoZSBzYW1lIGZyZXF1ZW5jeSBzaW5jZVxuKyAqIHRoZSBzdGVwIHZhbHVlIGlzIGluIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcy5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4raW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuK1x0XHRcdCAgICB1MTYgb3V0X21hc2ssIHMzMiBzdGVwX2N5Y2xlcyxcbitcdFx0XHQgICAgYm9vbCB0b2Rfc3RlcClcbit7XG4rXHR1OCBjdHJsO1xuK1x0aW50IHJjO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZGV2LVx1MDAzZXBoYXNlX3N0ZXBfbG9jayk7XG4rXG4rXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgcGhhc2Ugc3RlcCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbitcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLFxuK1x0XHRcdFx0ICBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QLFxuK1x0XHRcdFx0ICBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VUyk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBLFxuK1x0XHRcdCAgICAgICBzdGVwX2N5Y2xlcyk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLLCBvdXRfbWFzayk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUiwgMSk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdGN0cmwgPSBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfRFBMTCwgY2gpIHxcbitcdCAgICAgICBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AsXG4rXHRcdFx0ICBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1dSSVRFKTtcbitcdGlmICh0b2Rfc3RlcClcbitcdFx0Y3RybCB8PSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX1RPRF9TVEVQO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLCBjdHJsKTtcbit9XG4rXG4gLyoqXG4gICogemwzMDczeF9jaGFuX3N0YXRlX3NldCAtIGNvbW1pdCBEUExMIGNoYW5uZWwgc3RhdGUgY2hhbmdlcyB0byBoYXJkd2FyZVxuICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhcbmluZGV4IGRjOWM2ZDk1YmRlZTcuLjk5YzNiNzA4OGY2NzggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaFxuQEAgLTUsMTAgKzUsMTIgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RkZGVmLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC90aW1lNjQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcInJlZ3MuaFwiXG4gXG4rc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wO1xuIHN0cnVjdCB6bDMwNzN4X2RldjtcbiBcbiAvKipcbkBAIC00Miw2ICs0NCwyMSBAQCBpbnQgemwzMDczeF9jaGFuX3N0YXRlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCxcbiBpbnQgemwzMDczeF9jaGFuX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7XG4gaW50IHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpO1xuIFxuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpO1xuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbitcdFx0XHQgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKTtcbitpbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cyk7XG4raW50IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuK1x0XHRcdCAgICBzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YSk7XG4raW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuK1x0XHRcdCAgICB1MTYgb3V0X21hc2ssIHMzMiBzdGVwX2N5Y2xlcywgYm9vbCB0b2Rfc3RlcCk7XG4rXG4raW50IHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgb2Zmc2V0KTtcbitcbitpbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKTtcbitcbiAvKipcbiAgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X2dldCAtIGdldCBjYWNoZWQgZGZfb2Zmc2V0IHZzIHRyYWNrZWQgcmVmZXJlbmNlXG4gICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuQEAgLTIwMCw2ICsyMTcsMjEgQEAgc3RhdGljIGlubGluZSBib29sIHpsMzA3M3hfY2hhbl9tb2RlX2lzX3JlZmxvY2soY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcbiBcdHJldHVybiB6bDMwNzN4X2NoYW5fbW9kZV9nZXQoY2hhbikgPT0gWkxfRFBMTF9NT0RFX1JFRlNFTF9NT0RFX1JFRkxPQ0s7XG4gfVxuIFxuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZSAtIGNoZWNrIGlmIGNoYW5uZWwgbW9kZSBzdXBwb3J0cyBUSUUgd3JpdGVcbisgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG4rICpcbisgKiBUSUUgd3JpdGUgaXMgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMgcmVnYXJkbGVzcyBvZiBsb2NrIHN0YXRlLlxuKyAqXG4rICogUmV0dXJuOiB0cnVlIGlmIFRJRSB3cml0ZSBpcyBzdXBwb3J0ZWQsIGZhbHNlIG90aGVyd2lzZVxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbFxuK3psMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxuK3tcbitcdHJldHVybiB6bDMwNzN4X2NoYW5fbW9kZV9pc19hdXRvKGNoYW4pIHx8XG4rXHRcdHpsMzA3M3hfY2hhbl9tb2RlX2lzX3JlZmxvY2soY2hhbik7XG4rfVxuK1xuIC8qKlxuICAqIHpsMzA3M3hfY2hhbl9pc19ob19yZWFkeSAtIGNoZWNrIGlmIGhvbGRvdmVyIGlzIHJlYWR5XG4gICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1xuaW5kZXggNWIyZDc3ZjJjMjI4OC4uMjMwZGYwOGUyN2NkMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1xuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jXG5AQCAtMzIyLDcgKzMyMiw3IEBAIGludCB6bDMwNzN4X3dyaXRlX3U0OChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLCB1NjQgdmFsKVxuIGludCB6bDMwNzN4X3BvbGxfemVyb191OChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLFxuIFx0XHRcdCB1OCBtYXNrLCB1bnNpZ25lZCBpbnQgdGltZW91dF91cylcbiB7XG4tI2RlZmluZSBaTF9QT0xMX1NMRUVQX1VTIDEwXG4rXHR1bnNpZ25lZCBpbnQgc2xlZXBfdXMgPSB0aW1lb3V0X3VzIC8gNTA7XG4gXHR1bnNpZ25lZCBpbnQgdmFsO1xuIFxuIFx0LyogQ2hlY2sgdGhlIHJlZ2lzdGVyIGlzIDhiaXQgKi9cbkBAIC0zMzYsNyArMzM2LDcgQEAgaW50IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsXG4gXHRyZWcgPSBaTF9SRUdfQUREUihyZWcpICsgWkxfUkFOR0VfT0ZGU0VUO1xuIFxuIFx0cmV0dXJuIHJlZ21hcF9yZWFkX3BvbGxfdGltZW91dCh6bGRldi1cdTAwM2VyZWdtYXAsIHJlZywgdmFsLCAhKHZhbCBcdTAwMjYgbWFzayksXG4tXHRcdFx0XHRcdFpMX1BPTExfU0xFRVBfVVMsIHRpbWVvdXRfdXMpO1xuK1x0XHRcdFx0XHRzbGVlcF91cywgdGltZW91dF91cyk7XG4gfVxuIFxuIGludCB6bDMwNzN4X21iX29wKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCBvcF9yZWcsIHU4IG9wX3ZhbCxcbkBAIC01MTEsNiArNTExLDExIEBAIHpsMzA3M3hfZGV2X3N0YXRlX2ZldGNoKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXG4gXHRpbnQgcmM7XG4gXHR1OCBpO1xuIFxuK1x0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1NURVBfVElNRV9NQVNLLFxuK1x0XHRcdCAgICAgIFx1MDAyNnpsZGV2LVx1MDAzZW91dF9zdGVwX3RpbWVfbWFzayk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFpMMzA3M1hfTlVNX1JFRlM7IGkrKykge1xuIFx0XHRyYyA9IHpsMzA3M3hfcmVmX3N0YXRlX2ZldGNoKHpsZGV2LCBpKTtcbiBcdFx0aWYgKHJjKSB7XG5AQCAtMTAzNCw2ICsxMDM5LDE0IEBAIGludCB6bDMwNzN4X2Rldl9wcm9iZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxuIFx0ICogYW5kL29yIHBvbGxzIGFyZSByZXF1aXJlZCB0byBiZSBkb25lIGF0b21pY2FsbHkuXG4gXHQgKi9cbiBcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVx1MDAzZWRldiwgXHUwMDI2emxkZXYtXHUwMDNlbXVsdGlvcF9sb2NrKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXHUwMDNlZGV2LCByYyxcbitcdFx0XHRcdCAgICAgXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcblwiKTtcbitcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVx1MDAzZWRldiwgXHUwMDI2emxkZXYtXHUwMDNlcGhhc2Vfc3RlcF9sb2NrKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXHUwMDNlZGV2LCByYyxcbitcdFx0XHRcdCAgICAgXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcblwiKTtcbitcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVx1MDAzZWRldiwgXHUwMDI2emxkZXYtXHUwMDNldGllX2xvY2spO1xuIFx0aWYgKHJjKVxuIFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIHJjLFxuIFx0XHRcdFx0ICAgICBcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxuXCIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaFxuaW5kZXggNzhkYzIwOGYzZWVhMi4uNjdjMTBlMjU5NTExOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oXG5AQCAtMjYsNiArMjYsMTAgQEAgc3RydWN0IHpsMzA3M3hfZHBsbDtcbiAjZGVmaW5lIFpMX1BPTExfSFdSRUdfVElNRU9VVF9VU1x0KDUwICogVVNFQ19QRVJfTVNFQylcbiAjZGVmaW5lIFpMX1BPTExfTUJfVElNRU9VVF9VU1x0XHQoMzAgKiBVU0VDX1BFUl9NU0VDKVxuICNkZWZpbmUgWkxfUE9MTF9QSEFTRV9FUlJfVElNRU9VVF9VU1x0KDUwICogVVNFQ19QRVJfTVNFQylcbisjZGVmaW5lIFpMX1BPTExfUEhBU0VfU1RFUF9USU1FT1VUX1VTXHQoMzAwMCAqIFVTRUNfUEVSX01TRUMpXG4rI2RlZmluZSBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTXHQoMTAwMCAqIFVTRUNfUEVSX01TRUMpXG4rI2RlZmluZSBaTF9QT0xMX1RPRF9SRF9USU1FT1VUX1VTXHQoMzAgKiBVU0VDX1BFUl9NU0VDKVxuKyNkZWZpbmUgWkxfUE9MTF9UT0RfV1JfVElNRU9VVF9VU1x0KDEwMDAgKiBVU0VDX1BFUl9NU0VDKVxuIFxuIGVudW0gemwzMDczeF9mbGFncyB7XG4gXHRaTDMwNzNYX0ZMQUdfUkVGX1BIQVNFX0NPTVBfMzJfQklULFxuQEAgLTU1LDYgKzU5LDggQEAgc3RydWN0IHpsMzA3M3hfY2hpcF9pbmZvIHtcbiAgKiBAcmVnbWFwOiByZWdtYXAgdG8gYWNjZXNzIGRldmljZSByZWdpc3RlcnNcbiAgKiBAaW5mbzogZGV0ZWN0ZWQgY2hpcCBpbmZvXG4gICogQG11bHRpb3BfbG9jazogdG8gc2VyaWFsaXplIG11bHRpcGxlIHJlZ2lzdGVyIG9wZXJhdGlvbnNcbisgKiBAdGllX2xvY2s6IHRvIHNlcmlhbGl6ZSBUSUUgd3JpdGUgb3BlcmF0aW9uc1xuKyAqIEBwaGFzZV9zdGVwX2xvY2s6IHRvIHNlcmlhbGl6ZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb25zXG4gICogQHJlZjogYXJyYXkgb2YgaW5wdXQgcmVmZXJlbmNlcycgaW52YXJpYW50c1xuICAqIEBvdXQ6IGFycmF5IG9mIG91dHMnIGludmFyaWFudHNcbiAgKiBAc3ludGg6IGFycmF5IG9mIHN5bnRocycgaW52YXJpYW50c1xuQEAgLTYzLDYgKzY5LDcgQEAgc3RydWN0IHpsMzA3M3hfY2hpcF9pbmZvIHtcbiAgKiBAa3dvcmtlcjogdGhyZWFkIGZvciBwZXJpb2RpYyB3b3JrXG4gICogQHdvcms6IHBlcmlvZGljIHdvcmtcbiAgKiBAY2xvY2tfaWQ6IGNsb2NrIGlkIG9mIHRoZSBkZXZpY2VcbisgKiBAb3V0X3N0ZXBfdGltZV9tYXNrOiBvdXRwdXQgc3RlcC10aW1lIG1hc2sgKGRldmljZS1nbG9iYWwpXG4gICogQHBoYXNlX2F2Z19mYWN0b3I6IHBoYXNlIG9mZnNldCBtZWFzdXJlbWVudCBhdmVyYWdpbmcgZmFjdG9yXG4gICogQGZyZXFfbW9uaXRvcjogaXMgZnJlcXVlbmN5IG1vbml0b3IgZW5hYmxlZFxuICAqL1xuQEAgLTcxLDYgKzc4LDggQEAgc3RydWN0IHpsMzA3M3hfZGV2IHtcbiBcdHN0cnVjdCByZWdtYXBcdFx0XHQqcmVnbWFwO1xuIFx0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hpcF9pbmZvXHQqaW5mbztcbiBcdHN0cnVjdCBtdXRleFx0XHRcdG11bHRpb3BfbG9jaztcbitcdHN0cnVjdCBtdXRleFx0XHRcdHRpZV9sb2NrO1xuK1x0c3RydWN0IG11dGV4XHRcdFx0cGhhc2Vfc3RlcF9sb2NrO1xuIFxuIFx0LyogSW52YXJpYW50cyAqL1xuIFx0c3RydWN0IHpsMzA3M3hfcmVmXHRyZWZbWkwzMDczWF9OVU1fUkVGU107XG5AQCAtODcsNiArOTYsNyBAQCBzdHJ1Y3QgemwzMDczeF9kZXYge1xuIFxuIFx0LyogUGVyLWNoaXAgcGFyYW1ldGVycyAqL1xuIFx0dTY0XHRcdFx0Y2xvY2tfaWQ7XG4rXHR1MTZcdFx0XHRvdXRfc3RlcF90aW1lX21hc2s7XG4gXHR1OFx0XHRcdHBoYXNlX2F2Z19mYWN0b3I7XG4gXHRib29sXHRcdFx0ZnJlcV9tb25pdG9yO1xuIH07XG5AQCAtMzA4LDYgKzMxOCwxOSBAQCB6bDMwNzN4X2Rldl9vdXRfaXNfZW5hYmxlZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleClcbiBcdHJldHVybiB6bDMwNzN4X3N5bnRoX2lzX2VuYWJsZWQoc3ludGgpIFx1MDAyNlx1MDAyNiB6bDMwNzN4X291dF9pc19lbmFibGVkKG91dCk7XG4gfVxuIFxuKy8qKlxuKyAqIHpsMzA3M3hfZGV2X291dF9pc19zdGVwcGVkIC0gY2hlY2sgaWYgb3V0cHV0IGlzIGluIHN0ZXAtdGltZSBtYXNrXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGluZGV4OiBvdXRwdXQgaW5kZXhcbisgKlxuKyAqIFJldHVybjogdHJ1ZSBpZiBvdXRwdXQgaXMgYWZmZWN0ZWQgYnkgc3RlcC10aW1lIG9wZXJhdGlvbnNcbisgKi9cbitzdGF0aWMgaW5saW5lIGJvb2xcbit6bDMwNzN4X2Rldl9vdXRfaXNfc3RlcHBlZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleClcbit7XG4rXHRyZXR1cm4gISEoemxkZXYtXHUwMDNlb3V0X3N0ZXBfdGltZV9tYXNrIFx1MDAyNiBCSVQoaW5kZXgpKTtcbit9XG4rXG4gLyoqXG4gICogemwzMDczeF9kZXZfb3V0X2RwbGxfZ2V0IC0gZ2V0IERQTEwgSUQgdGhlIG91dHB1dCBpcyBkcml2ZW4gYnlcbiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcbmluZGV4IDA0ODhhZTZhYzQ4NmMuLmE2ODZkZDUyYmZhYzkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuY1xuQEAgLTIsNiArMiw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2J1Zy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29udGFpbmVyX29mLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZfcHJpbnRrLmhcdTAwM2VcbkBAIC0xMyw2ICsxNCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3ByaW50Zi5oXHUwMDNlXG4gXG5AQCAtMjI3NSw0NSArMjI3NywzNzUgQEAgemwzMDczeF9kcGxsX2luaXRfZmluZV9waGFzZV9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcbiBcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfU1lOVEhfUEhBU0VfU0hJRlRfQ1RSTCwgMHgwMSk7XG4gfVxuIFxuKy8qIE1heGltdW0gZnJlcXVlbmN5IGFkanVzdG1lbnQ6ICstMSUgb2Ygbm9taW5hbCBpbiBwcGIgKi9cbisjZGVmaW5lIFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESlx0MTAwMDAwMDBcbitcbiAvKipcbi0gKiB6bDMwNzN4X2RwbGxfYWxsb2MgLSBhbGxvY2F0ZSBEUExMIGRldmljZVxuLSAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuLSAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlclxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCAtIHJlYWQgY3VycmVudCB0aW1lIGZyb20gVG9EIGNvdW50ZXJzXG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4rICogQHRzOiB0aW1lc3BlYyB0byBzdG9yZSBjdXJyZW50IHRpbWVcbisgKiBAc3RzOiBvcHRpb25hbCBzeXN0ZW0gdGltZXN0YW1wIHBhaXIgZm9yIGNyb3NzLXRpbWVzdGFtcGluZ1xuICAqXG4tICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cylcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRwbGwtXHUwMDNlZGV2LCB6bGRwbGwtXHUwMDNlaWQsIGZhbHNlLCB0cywgc3RzKTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQgLSBzZXQgVG9EIGNvdW50ZXJzIHRvIGdpdmVuIHRpbWVcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbisgKiBAdHM6IHRpbWVzcGVjIHdpdGggdGltZSB0byBzZXRcbiAgKlxuLSAqIFJldHVybjogcG9pbnRlciB0byBEUExMIGRldmljZSBvbiBzdWNjZXNzLCBlcnJvciBwb2ludGVyIG9uIGVycm9yXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiAgKi9cbi1zdHJ1Y3QgemwzMDczeF9kcGxsICpcbi16bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXG4rXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpXG4ge1xuLVx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsO1xuK1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXG4rXHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuIFxuLVx0emxkcGxsID0ga3phbGxvY19vYmooKnpsZHBsbCk7XG4tXHRpZiAoIXpsZHBsbClcbi1cdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuIFxuLVx0emxkcGxsLVx1MDAzZWRldiA9IHpsZGV2O1xuLVx0emxkcGxsLVx1MDAzZWlkID0gY2g7XG4tXHRtdXRleF9pbml0KFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbi1cdElOSVRfTElTVF9IRUFEKFx1MDAyNnpsZHBsbC1cdTAwM2VwaW5zKTtcbitcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCwgKnRzKTtcbit9XG4gXG4tXHRyZXR1cm4gemxkcGxsO1xuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwIC0gYWRqdXN0IHN1Yi1zZWNvbmQgdGltZSB2aWEgcGhhc2Ugc3RlcFxuKyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbFxuKyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzIChtdXN0IGJlIHdpdGhpbiAoLU5TRUNfUEVSX1NFQyxcbisgKiAgICAgICAgIE5TRUNfUEVSX1NFQykpXG4rICpcbisgKiBVc2VzIHRoZSBvdXRwdXQgcGhhc2Ugc3RlcCBtZWNoYW5pc20gd2l0aCB0b2Rfc3RlcD0xIHRvIGFkanVzdCBib3RoXG4rICogdGhlIG91dHB1dCBjbG9jayBwaGFzZSBhbmQgdGhlIFRvRCBjb3VudGVyIHNpbXVsdGFuZW91c2x5LiBUaGlzIGtlZXBzXG4rICogb3V0cHV0cyBhbmQgVG9EIGNvaGVyZW50LiBPbmx5IHZhbGlkIGZvciBOQ08uXG4rICpcbisgKiBPdXRwdXRzIGFyZSBncm91cGVkIGJ5IHN5bnRoZXNpemVyIHNpbmNlIHRoZSBwaGFzZSBzdGVwIHZhbHVlIGlzIGluXG4rICogc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzLiBUaGUgZmlyc3Qgc3ludGggZ3JvdXAgd2l0aCBlbmFibGVkIG91dHB1dHNcbisgKiB1c2VzIHRvZF9zdGVwIHRvIGFkanVzdCBib3RoIG91dHB1dHMgYW5kIHRoZSBUb0QgY291bnRlci4gUmVtYWluaW5nXG4rICogZ3JvdXBzIHN0ZXAgb3V0cHV0cyBvbmx5LiBJZiBubyBzeW50aCBoYXMgZW5hYmxlZCBvdXRwdXRzLCB0aGUgVG9EXG4rICogY291bnRlciBpcyBzdGVwcGVkIGFsb25lIHVzaW5nIGFuIGVtcHR5IG91dHB1dCBtYXNrICh0aGUgRlcgdXNlc1xuKyAqIHRoZSBmaXJzdCBlbmFibGVkIHN5bnRoJ3MgcGVyaW9kIGZvciB0aGUgY29udmVyc2lvbikuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVPUE5PVFNVUFAgaWYgbm8gc3ludGhzIGF2YWlsYWJsZSwgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLFxuK1x0XHRcdFx0XHQgICAgICAgczY0IGRlbHRhKVxuK3tcbitcdHUxNiBzeW50aF9tYXNrW1pMMzA3M1hfTlVNX1NZTlRIU10gPSB7fTtcbitcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuK1x0Y29uc3Qgc3RydWN0IHpsMzA3M3hfc3ludGggKnN5bnRoO1xuK1x0c3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbjtcbitcdHUzMiBmaXJzdF9zeW50aF9mcmVxID0gMDtcbitcdGJvb2wgdG9kX3N0ZXBwZWQgPSBmYWxzZTtcbitcdHMzMiBzdGVwX2N5Y2xlcztcbitcdHUzMiBzeW50aF9mcmVxO1xuK1x0aW50IHJjO1xuK1x0dTggaTtcbitcbitcdC8qIEJ1aWxkIHBlci1zeW50aCBvdXRwdXQgbWFza3MgZnJvbSByZWdpc3RlcmVkIG91dHB1dCBwaW5zICovXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBpbiwgXHUwMDI2emxkcGxsLVx1MDAzZXBpbnMsIGxpc3QpIHtcbitcdFx0dTggb3V0X2lkLCBzeW50aF9pZDtcbitcbitcdFx0aWYgKHpsMzA3M3hfZHBsbF9pc19pbnB1dF9waW4ocGluKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0b3V0X2lkID0gemwzMDczeF9vdXRwdXRfcGluX291dF9nZXQocGluLVx1MDAzZWlkKTtcbitcbitcdFx0aWYgKCF6bDMwNzN4X2Rldl9vdXRfaXNfc3RlcHBlZCh6bGRldiwgb3V0X2lkKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0c3ludGhfaWQgPSB6bDMwNzN4X2Rldl9vdXRfc3ludGhfZ2V0KHpsZGV2LCBvdXRfaWQpO1xuK1x0XHRpZiAoc3ludGhfaWQgXHUwMDNlPSBaTDMwNzNYX05VTV9TWU5USFMpIHtcbitcdFx0XHRkZXZfd2Fybih6bGRldi1cdTAwM2VkZXYsIFwiVW5leHBlY3RlZCBzeW50aCBpZCBmb3IgT1VUJXVcXG5cIixcbitcdFx0XHRcdCBvdXRfaWQpO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXHRcdHN5bnRoX21hc2tbc3ludGhfaWRdIHw9IEJJVChvdXRfaWQpO1xuK1x0fVxuK1xuK1x0LyogUHJvY2VzcyBlYWNoIHN5bnRoIGdyb3VwICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBaTDMwNzNYX05VTV9TWU5USFM7IGkrKykge1xuK1x0XHRzeW50aCA9IHpsMzA3M3hfc3ludGhfc3RhdGVfZ2V0KHpsZGV2LCBpKTtcbitcdFx0aWYgKCF6bDMwNzN4X3N5bnRoX2lzX2VuYWJsZWQoc3ludGgpIHx8XG4rXHRcdCAgICB6bDMwNzN4X3N5bnRoX2RwbGxfZ2V0KHN5bnRoKSAhPSB6bGRwbGwtXHUwMDNlaWQpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHN5bnRoX2ZyZXEgPSB6bDMwNzN4X3N5bnRoX2ZyZXFfZ2V0KHN5bnRoKTtcbitcbitcdFx0LyogUmVtZW1iZXIgZmlyc3QgZW5hYmxlZCBzeW50aCBmcmVxIGZvciBUb0Qtb25seSBmYWxsYmFjayAqL1xuK1x0XHRpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpXG4rXHRcdFx0Zmlyc3Rfc3ludGhfZnJlcSA9IHN5bnRoX2ZyZXE7XG4rXG4rXHRcdGlmICghc3ludGhfbWFza1tpXSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0LyogU2FmZSBmb3IgczMyOiBtYXggc3ludGggZnJlcSBpcyA3NTAgTUh6ICovXG4rXHRcdHN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIHN5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7XG4rXG4rXHRcdHJjID0gemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCxcbitcdFx0XHRcdFx0ICAgICBzeW50aF9tYXNrW2ldLCBzdGVwX2N5Y2xlcyxcbitcdFx0XHRcdFx0ICAgICAhdG9kX3N0ZXBwZWQpO1xuK1x0XHRpZiAocmMpIHtcbitcdFx0XHRpZiAodG9kX3N0ZXBwZWQpIHtcbitcdFx0XHRcdGRldl93YXJuKHpsZGV2LVx1MDAzZWRldixcbitcdFx0XHRcdFx0IFwiUGFydGlhbCBwaGFzZSBzdGVwIGZhaWx1cmVcXG5cIik7XG4rXHRcdFx0XHRyZXR1cm4gMDtcbitcdFx0XHR9XG4rXHRcdFx0cmV0dXJuIHJjO1xuK1x0XHR9XG4rXHRcdHRvZF9zdGVwcGVkID0gdHJ1ZTtcbitcdH1cbitcbitcdGlmICghZmlyc3Rfc3ludGhfZnJlcSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0LyogTm8gZW5hYmxlZCBvdXRwdXRzIGZvdW5kOyBzdGVwIFRvRCBjb3VudGVyIG9ubHkgdXNpbmcgdGhlXG4rXHQgKiBmaXJzdCBlbmFibGVkIHN5bnRoJ3MgcGVyaW9kIChlbXB0eSBvdXRwdXQgbWFzaykuXG4rXHQgKi9cbitcdGlmICghdG9kX3N0ZXBwZWQpIHtcbitcdFx0c3RlcF9jeWNsZXMgPSBkaXZfczY0KGRlbHRhICogZmlyc3Rfc3ludGhfZnJlcSwgTlNFQ19QRVJfU0VDKTtcbitcdFx0cmV0dXJuIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsIDAsXG4rXHRcdFx0XHRcdCAgICAgICBzdGVwX2N5Y2xlcywgdHJ1ZSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gLyoqXG4tICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlXG4tICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lIC0gYWRqdXN0IFBUUCBjbG9jayB0aW1lXG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4rICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHNcbiAgKlxuLSAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuXG4rICogRm9yIE5DTywgbGFyZ2UgZGVsdGFzIChcdTAwM2U9IDEgc2Vjb25kKSBhcmUgc3BsaXQgaW50byBhIFRvRFxuKyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciB0aGUgc2Vjb25kcyBwYXJ0IGFuZCBhbiBvdXRwdXQgcGhhc2Ugc3RlcCBmb3JcbisgKiB0aGUgc3ViLXNlY29uZCByZW1haW5kZXIuIFN1Yi1zZWNvbmQgZGVsdGFzIHVzZSBwaGFzZSBzdGVwIGRpcmVjdGx5LFxuKyAqIGZhbGxpbmcgYmFjayB0byBUb0QgcmVhZC1tb2RpZnktd3JpdGUgaWYgcGhhc2Ugc3RlcCBpcyB1bmF2YWlsYWJsZS5cbisgKiBJbiBBVVRPL1JFRkxPQ0sgbW9kZXMsIGxhcmdlIGRlbHRhcyBhcmUgc3BsaXQgaW50byBUb0RcbisgKiByZWFkLW1vZGlmeS13cml0ZSBmb3Igc2Vjb25kcyBhbmQgVElFIHdyaXRlIGZvciB0aGUgc3ViLXNlY29uZFxuKyAqIHJlbWFpbmRlci4gU3ViLXNlY29uZCBkZWx0YXMgdXNlIFRJRSB3cml0ZSBkaXJlY3RseS5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4gICovXG4tdm9pZFxuLXpsMzA3M3hfZHBsbF9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHM2NCBkZWx0YSlcbiB7XG4tXHRXQVJOKHpsZHBsbC1cdTAwM2VkcGxsX2RldiwgXCJEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXFxuXCIpO1xuK1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXG4rXHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuK1x0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4rXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xuK1x0Ym9vbCBzZWNfYWRqdXN0ZWQgPSBmYWxzZTtcbitcdHN0cnVjdCB0aW1lc3BlYzY0IHRzO1xuK1x0aW50IHJjO1xuIFxuLVx0bXV0ZXhfZGVzdHJveShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4tXHRrZnJlZSh6bGRwbGwpO1xuK1x0aWYgKCFkZWx0YSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuK1x0LyogTW9kZXMgd2l0aG91dCBwaGFzZSBzdGVwIG9yIFRJRSB1c2UgcGxhaW4gVG9EIGFkanVzdCAqL1xuK1x0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCk7XG4rXHRpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKVxuK1x0XHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCxcbitcdFx0XHRcdFx0ICAgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTtcbitcbitcdC8qIFNwbGl0IG9mZiBzZWNvbmRzIHZpYSBUb0QgcmVhZC1tb2RpZnktd3JpdGUgc28gdGhlIHN1Yi1zZWNvbmRcbitcdCAqIHJlbWFpbmRlciBjYW4gYmUgYXBwbGllZCB0aHJvdWdoIHRoZSBvdXRwdXQtY29oZXJlbnQgbWVjaGFuaXNtXG4rXHQgKiAocGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUpLlxuK1x0ICovXG4rXHRpZiAoZGVsdGEgXHUwMDNlPSBOU0VDX1BFUl9TRUMgfHwgZGVsdGEgXHUwMDNjPSAtTlNFQ19QRVJfU0VDKSB7XG4rXHRcdHMzMiByZW1haW5kZXI7XG4rXG4rXHRcdHRzLnR2X3NlYyA9IGRpdl9zNjRfcmVtKGRlbHRhLCBOU0VDX1BFUl9TRUMsIFx1MDAyNnJlbWFpbmRlcik7XG4rXHRcdHRzLnR2X25zZWMgPSAwO1xuK1x0XHRkZWx0YSA9IHJlbWFpbmRlcjtcbitcbitcdFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCB0cyk7XG4rXHRcdGlmIChyYylcbitcdFx0XHRyZXR1cm4gcmM7XG4rXG4rXHRcdC8qIE5vIHN1Yi1zZWNvbmQgcmVtYWluZGVyLCBkb25lICovXG4rXHRcdGlmICghZGVsdGEpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXG4rXHRcdC8qIFdhaXQgZm9yIHRoZSBUb0Qgd3JpdGUgdG8gYmUgYXBwbGllZCBhdCB0aGUgMSBIeiBlZGdlXG4rXHRcdCAqIGJlZm9yZSBpc3N1aW5nIHBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlLCBzbyB0aGUgcGVuZGluZ1xuK1x0XHQgKiBXUl9ORVhUXzFIWiBkb2VzIG5vdCBvdmVyd3JpdGUgdGhlIHN1Yi1zZWNvbmQgYWRqdXN0bWVudC5cbitcdFx0ICovXG4rXHRcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQpO1xuK1x0XHRpZiAocmMpXG4rXHRcdFx0cmV0dXJuIHJjO1xuK1xuK1x0XHRzZWNfYWRqdXN0ZWQgPSB0cnVlO1xuK1x0fVxuK1xuK1x0LyogQXBwbHkgc3ViLXNlY29uZCBkZWx0YSB2aWEgcGhhc2Ugc3RlcCAoTkNPKSBvciBUSUUgd3JpdGUgKi9cbitcdGlmICh6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikpIHtcbitcdFx0cmMgPSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCh6bGRwbGwsIGRlbHRhKTtcbitcdFx0aWYgKCFyYylcbitcdFx0XHRyZXR1cm4gMDtcbitcdH0gZWxzZSB7XG4rXHRcdHJjID0gemwzMDczeF9jaGFuX3RpZV93cml0ZSh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCBkZWx0YSk7XG4rXHRcdGlmICghcmMpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHQvKiBQaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSBmYWlsZWQsIGZhbGwgYmFjayB0byBUb0QgYWRqdXN0ICovXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsXG4rXHRcdFx0XHQgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTtcbitcbitcdC8qIEluIHRoZSB1bmxpa2VseSBldmVudCB0aGF0IGJvdGggcGhhc2Ugc3RlcC9USUUgd3JpdGUgYW5kIGZhbGxiYWNrXG4rXHQgKiBUb0QgYWRqdXN0IGZhaWwgYWZ0ZXIgc2Vjb25kcyB3ZXJlIGFscmVhZHkgY29tbWl0dGVkLCByZXR1cm5cbitcdCAqIHN1Y2Nlc3MgdG8gcHJldmVudCB0aGUgUFRQIHNlcnZvIGZyb20gcmV0cnlpbmcgdGhlIGZ1bGwgZGVsdGEgYW5kXG4rXHQgKiBhcHBseWluZyBzZWNvbmRzIGFnYWluLiBUaGUgc3ViLXNlY29uZCByZXNpZHVhbCB3aWxsIHNlbGYtY29ycmVjdFxuK1x0ICogaW4gdGhlIG5leHQgc2Vydm8gY3ljbGUuXG4rXHQgKi9cbitcdGlmIChyYyBcdTAwMjZcdTAwMjYgc2VjX2FkanVzdGVkKSB7XG4rXHRcdGRldl93YXJuKHpsZGV2LVx1MDAzZWRldixcbitcdFx0XHQgXCJTdWItc2Vjb25kIGFkanVzdG1lbnQgZmFpbGVkIGFmdGVyIHNlY29uZHMgYXBwbGllZFxcblwiKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmM7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSAtIGFkanVzdCBQVFAgY2xvY2sgZnJlcXVlbmN5XG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4rICogQHNjYWxlZF9wcG06IGZyZXF1ZW5jeSBhZGp1c3RtZW50IGluIHNjYWxlZCBwcG0gKHBwbSAqIDJeMTYpXG4rICpcbisgKiBPbmx5IHN1cHBvcnRlZCBmb3IgTkNPLiBXcml0ZXMgdGhlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgcmVnaXN0ZXIuXG4rICpcbisgKiBSZXR1cm46XG4rICogKiAlMFx0XHRcdC0gc3VjY2VzcyBvciBAc2NhbGVkX3BwbSBpcyB6ZXJvIChuby1vcClcbisgKiAqICUtRU9QTk9UU1VQUFx0LSBOQ08gcGluIGlzIG5vdCBjb25uZWN0ZWQgYW5kIEBzY2FsZWRfcHBtIGlzIG5vbi16ZXJvXG4rICogKiBuZWdhdGl2ZVx0XHQtIG90aGVyIGVycm9yXG4rICovXG4rc3RhdGljIGludFxuK3psMzA3M3hfZHBsbF9wdHBfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGxvbmcgc2NhbGVkX3BwbSlcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xuK1x0czY0IG9mZnNldDtcbitcbitcdC8qIENvbnZlcnQgc2NhbGVkX3BwbSB0byBkZl9vZmZzZXQgaW4gMl4tNDggc3RlcHM6XG4rXHQgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDJeMzIpIC8gMTBeNlxuK1x0ICpcbitcdCAqIFNpbXBsaWZ5IHRvIGF2b2lkIG92ZXJmbG93OlxuK1x0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjI2KSAvIDVeNlxuK1x0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiA2NzEwODg2NCkgLyAxNTYyNVxuK1x0ICovXG4rXHRvZmZzZXQgPSAtZGl2X3M2NCgoczY0KXNjYWxlZF9wcG0gKiA2NzEwODg2NExMLCAxNTYyNSk7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuK1x0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkcGxsLVx1MDAzZWRldiwgemxkcGxsLVx1MDAzZWlkKTtcbitcdGlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKVxuK1x0XHRyZXR1cm4gc2NhbGVkX3BwbSA/IC1FT1BOT1RTVVBQIDogMDtcbitcdGlmIChvZmZzZXQgPT0gY2hhbi1cdTAwM2VkZl9vZmZzZXQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCwgb2Zmc2V0KTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSAtIGFkanVzdCBQVFAgY2xvY2sgcGhhc2VcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbisgKiBAZGVsdGE6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHNcbisgKlxuKyAqIE9ubHkgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMuIFVzZXMgVElFIHdyaXRlIGZvclxuKyAqIG5hbm9zZWNvbmQgcmVzb2x1dGlvbiBwaGFzZSBhZGp1c3RtZW50LlxuKyAqXG4rICogUmV0dXJuOlxuKyAqICogJTBcdFx0XHQtIHN1Y2Nlc3Mgb3IgQGRlbHRhIGlzIHplcm8gKG5vLW9wKVxuKyAqICogJS1FT1BOT1RTVVBQXHQtIG1vZGUgZG9lcyBub3Qgc3VwcG9ydCBUSUUgYW5kIEBkZWx0YSBpcyBub24temVyb1xuKyAqICogbmVnYXRpdmVcdFx0LSBvdGhlciBlcnJvclxuKyAqL1xuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHMzMiBkZWx0YSlcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbitcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XG4rXG4rXHRpZiAoIWRlbHRhKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXG4rXHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLVx1MDAzZWlkKTtcbitcbitcdGlmICghemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRyZXR1cm4gemwzMDczeF9jaGFuX3RpZV93cml0ZSh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCBkZWx0YSk7XG4rfVxuK1xuK3N0YXRpYyBzMzJcbit6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyBfX2Fsd2F5c191bnVzZWQpXG4re1xuK1x0LyogSFcgbGltaXRzIFRJRSB3cml0ZSB0byArLTEgc2Vjb25kLiBSZXR1cm4gdGhlIGNvbnN0YW50IEhXXG4rXHQgKiBsaW1pdCBhbmQgbGV0IGFkanBoYXNlIGhhbmRsZSBtb2RlLXNwZWNpZmljIGNoZWNrcy5cbitcdCAqL1xuK1x0cmV0dXJuIE5TRUNfUEVSX1NFQyAtIDE7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvID0ge1xuK1x0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4rXHQubWF4X2Fkalx0PSBaTDMwNzNYX0RQTExfUFRQX01BWF9BREosXG4rXHQuZ2V0dGltZXg2NFx0PSB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQsXG4rXHQuc2V0dGltZTY0XHQ9IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0LFxuK1x0LmFkanRpbWVcdD0gemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lLFxuK1x0LmFkamZpbmVcdD0gemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lLFxuK1x0LmFkanBoYXNlXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2UsXG4rXHQuZ2V0bWF4cGhhc2VcdD0gemwzMDczeF9kcGxsX3B0cF9nZXRtYXhwaGFzZSxcbit9O1xuK1xuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIgLSByZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsXG4rICogQHpsZHBsbDogRFBMTCBjaGFubmVsIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3JcbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbitcdHN0cnVjdCBwdHBfY2xvY2sgKnB0cF9jbG9jaztcbitcbitcdHNucHJpbnRmKHpsZHBsbC1cdTAwM2VwdHBfaW5mby5uYW1lLCBzaXplb2YoemxkcGxsLVx1MDAzZXB0cF9pbmZvLm5hbWUpLFxuK1x0XHQgXCIlcy1kcGxsJXVcIiwgZGV2X25hbWUoemxkZXYtXHUwMDNlZGV2KSwgemxkcGxsLVx1MDAzZWlkKTtcbitcbitcdHB0cF9jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcihcdTAwMjZ6bGRwbGwtXHUwMDNlcHRwX2luZm8sIHpsZGV2LVx1MDAzZWRldik7XG4rXHRpZiAoSVNfRVJSKHB0cF9jbG9jaykpIHtcbitcdFx0ZGV2X2Vycih6bGRldi1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgRFBMTCV1XFxuXCIsXG4rXHRcdFx0emxkcGxsLVx1MDAzZWlkKTtcbitcdFx0cmV0dXJuIFBUUl9FUlIocHRwX2Nsb2NrKTtcbitcdH1cbitcbitcdHpsZHBsbC1cdTAwM2VwdHBfY2xvY2sgPSBwdHBfY2xvY2s7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyIC0gdW5yZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsXG4rICogQHpsZHBsbDogRFBMTCBjaGFubmVsIHRvIHVucmVnaXN0ZXIgUFRQIGNsb2NrIGZvclxuKyAqL1xuK3N0YXRpYyB2b2lkIHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4re1xuK1x0aWYgKCFJU19FUlJfT1JfTlVMTCh6bGRwbGwtXHUwMDNlcHRwX2Nsb2NrKSkge1xuK1x0XHRwdHBfY2xvY2tfdW5yZWdpc3Rlcih6bGRwbGwtXHUwMDNlcHRwX2Nsb2NrKTtcbitcdFx0emxkcGxsLVx1MDAzZXB0cF9jbG9jayA9IE5VTEw7XG4rXHR9XG4gfVxuIFxuIC8qKlxuQEAgLTIzOTgsNiArMjczMCw0OCBAQCB6bDMwNzN4X2RwbGxfcmVmX3N5bmNfcGFpcnNfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9hbGxvYyAtIGFsbG9jYXRlIERQTEwgZGV2aWNlXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyXG4rICpcbisgKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuXG4rICpcbisgKiBSZXR1cm46IHBvaW50ZXIgdG8gRFBMTCBkZXZpY2Ugb24gc3VjY2VzcywgZXJyb3IgcG9pbnRlciBvbiBlcnJvclxuKyAqL1xuK3N0cnVjdCB6bDMwNzN4X2RwbGwgKlxuK3psMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7XG4rXG4rXHR6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTtcbitcdGlmICghemxkcGxsKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcbitcdHpsZHBsbC1cdTAwM2VkZXYgPSB6bGRldjtcbitcdHpsZHBsbC1cdTAwM2VpZCA9IGNoO1xuK1x0emxkcGxsLVx1MDAzZXB0cF9pbmZvID0gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvO1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXHRJTklUX0xJU1RfSEVBRChcdTAwMjZ6bGRwbGwtXHUwMDNlcGlucyk7XG4rXG4rXHRyZXR1cm4gemxkcGxsO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfZnJlZSAtIGZyZWUgRFBMTCBkZXZpY2VcbisgKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmVcbisgKlxuKyAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuXG4rICovXG4rdm9pZFxuK3psMzA3M3hfZHBsbF9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbit7XG4rXHRXQVJOKHpsZHBsbC1cdTAwM2VkcGxsX2RldiwgXCJEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXFxuXCIpO1xuK1xuK1x0bXV0ZXhfZGVzdHJveShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXHRrZnJlZSh6bGRwbGwpO1xuK31cbitcbiAvKipcbiAgKiB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIgLSByZWdpc3RlciBEUExMIGRldmljZSBhbmQgYWxsIGl0cyBwaW5zXG4gICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXG5AQCAtMjQyOCw2ICsyODAyLDEzIEBAIHpsMzA3M3hfZHBsbF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4gXHRcdHJldHVybiByYztcbiBcdH1cbiBcbitcdHJjID0gemwzMDczeF9kcGxsX3B0cF9yZWdpc3Rlcih6bGRwbGwpO1xuK1x0aWYgKHJjKSB7XG4rXHRcdHpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTtcbitcdFx0emwzMDczeF9kcGxsX2RldmljZV91bnJlZ2lzdGVyKHpsZHBsbCk7XG4rXHRcdHJldHVybiByYztcbitcdH1cbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0yNDQxLDcgKzI4MjIsNyBAQCB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIHZvaWRcbiB6bDMwNzN4X2RwbGxfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4ge1xuLVx0LyogVW5yZWdpc3RlciBhbGwgcGlucyBhbmQgZHBsbCAqL1xuK1x0emwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHpsZHBsbCk7XG4gXHR6bDMwNzN4X2RwbGxfcGluc191bnJlZ2lzdGVyKHpsZHBsbCk7XG4gXHR6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXG5pbmRleCBmYWViYzQwMmJhMWI3Li45OTMyMjFkYzYzMjQ5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmhcbkBAIC01LDYgKzUsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RwbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiY29yZS5oXCJcbiBcbkBAIC0yMiw2ICsyMyw4IEBAXG4gICogQHR5cGU6IERQTEwgdHlwZSAoUFBTIG9yIEVFQylcbiAgKiBAbG9ja19zdGF0dXM6IGxhc3Qgc2F2ZWQgRFBMTCBsb2NrIHN0YXR1c1xuICAqIEBwaW5zOiBsaXN0IG9mIHBpbnNcbisgKiBAcHRwX2luZm86IFBUUCBjbG9jayBpbmZvXG4rICogQHB0cF9jbG9jazogcmVnaXN0ZXJlZCBQVFAgY2xvY2sgKG9yIE5VTEwpXG4gICovXG4gc3RydWN0IHpsMzA3M3hfZHBsbCB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRcdGxpc3Q7XG5AQCAtMzYsNiArMzksOCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsIHtcbiBcdGVudW0gZHBsbF90eXBlXHRcdFx0dHlwZTtcbiBcdGVudW0gZHBsbF9sb2NrX3N0YXR1c1x0XHRsb2NrX3N0YXR1cztcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdFx0cGlucztcbitcdHN0cnVjdCBwdHBfY2xvY2tfaW5mb1x0XHRwdHBfaW5mbztcbitcdHN0cnVjdCBwdHBfY2xvY2tcdFx0KnB0cF9jbG9jaztcbiB9O1xuIFxuIHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXG5pbmRleCBiNzBlYWQ3ZDQ0OTViLi5mM2E1ZTEyMTVhYTM2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhcbkBAIC0xNzksNiArMTc5LDIwIEBAXG4gI2RlZmluZSBaTF9EUExMX0RGX1JFQURfQ01EXHRcdFx0R0VOTUFTSygyLCAwKVxuICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRF9BQ0NfSVx0XHQ0XG4gXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTFx0XHRcdFpMX1JFRyg1LCAweDMwLCAxKVxuKyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUFx0XHRcdEdFTk1BU0soMiwgMClcbisjZGVmaW5lIFpMX0RQTExfVElFX0NUUkxfT1BfV1JcdFx0XHQ0XG4rXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTF9NQVNLXHRcdFpMX1JFRyg1LCAweDMxLCAxKVxuK1xuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX0NUUkwoX2lkeClcdFx0XHRcdFx0XFxcbitcdFpMX1JFR19JRFgoX2lkeCwgNSwgMHgzOCwgMSwgWkwzMDczWF9NQVhfQ0hBTk5FTFMsIDEpXG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX1NFTVx0XHRcdEJJVCg0KVxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURcdFx0XHRHRU5NQVNLKDMsIDApXG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWlx0MVxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVFx0XHQ4XG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9ORVhUXzFIWlx0OVxuK1xuICNkZWZpbmUgWkxfUkVHX0RQTExfTUVBU19DVFJMXHRcdFx0WkxfUkVHKDUsIDB4NTAsIDEpXG4gI2RlZmluZSBaTF9EUExMX01FQVNfQ1RSTF9FTlx0XHRcdEJJVCgwKVxuICNkZWZpbmUgWkxfRFBMTF9NRUFTX0NUUkxfQVZHX0ZBQ1RPUlx0XHRHRU5NQVNLKDcsIDQpXG5AQCAtMTkzLDYgKzIwNyw5IEBAXG4gXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgKiBSZWdpc3RlciBQYWdlcyA2LTcsIERQTEwgRGF0YVxuKyAqXG4rICogUGVyLWNoYW5uZWwgcmVnaXN0ZXJzIHdpdGggc3RyaWRlIDB4MjAuIENoYW5uZWxzIDAtMyByZXNpZGUgb24gcGFnZSA2LFxuKyAqIGNoYW5uZWwgNCBvbiBwYWdlIDcuXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gXG4gI2RlZmluZSBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeClcdFx0XHRcdFx0XFxcbkBAIC0yMDIsNiArMjE5LDI0IEBAXG4gXHQoKF9pZHgpIFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfREZfT0ZGU0VUXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfREZfT0ZGU0VUXzQpXG4gI2RlZmluZSBaTF9EUExMX0RGX09GRlNFVF9VTktOT1dOXHRTNjRfTUlOXG4gXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KVx0XHRcdFx0XHRcXFxuK1x0WkxfUkVHX0lEWChfaWR4LCA2LCAweDBDLCA2LCA0LCAweDIwKVxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEFfNFx0XHRcdFpMX1JFRyg3LCAweDBDLCA2KVxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEEoX2lkeClcdFx0XHRcdFx0XFxcbitcdCgoX2lkeCkgXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RJRV9EQVRBXzQpXG4rXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG4rXHRaTF9SRUdfSURYKF9pZHgsIDYsIDB4MTIsIDYsIDQsIDB4MjApXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzRcdFx0XHRaTF9SRUcoNywgMHgxMiwgNilcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUMoX2lkeClcdFx0XHRcdFx0XFxcbitcdCgoX2lkeCkgXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVE9EX1NFQ180KVxuK1xuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG4rXHRaTF9SRUdfSURYKF9pZHgsIDYsIDB4MTgsIDQsIDQsIDB4MjApXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlNfNFx0XHRcdFpMX1JFRyg3LCAweDE4LCA0KVxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TKF9pZHgpXHRcdFx0XHRcdFxcXG4rXHQoKF9pZHgpIFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfVE9EX05TXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVE9EX05TXzQpXG4rXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICogUmVnaXN0ZXIgUGFnZSA5LCBTeW50aCBhbmQgT3V0cHV0XG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuQEAgLTIyMSw2ICsyNTYsMjMgQEBcbiAjZGVmaW5lIFpMX09VVFBVVF9DVFJMX0VOXHRcdFx0QklUKDApXG4gI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9TWU5USF9TRUxcdFx0R0VOTUFTSyg2LCA0KVxuIFxuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTS1x0XHRaTF9SRUcoOSwgMHgzNiwgMilcbitcbisjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMXHRcdFpMX1JFRyg5LCAweDM4LCAxKVxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9EUExMXHRcdEdFTk1BU0soNiwgNClcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVBcdEJJVCgzKVxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUFx0XHRHRU5NQVNLKDEsIDApXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX05PTkVcdDBcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfUkVTRVRcdDFcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfUkVBRFx0MlxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURVx0M1xuK1xuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUlx0XHRaTF9SRUcoOSwgMHgzOSwgMSlcbitcbisjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLXHRcdFpMX1JFRyg5LCAweDNhLCAyKVxuK1xuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0RBVEFcdFx0WkxfUkVHKDksIDB4M2MsIDQpXG4rXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgKiBSZWdpc3RlciBQYWdlIDEwLCBSZWYgTWFpbGJveFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTE6NTI6NDkuMTY3MDk2MzcxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjEwNDAwMTYxODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhY2hpbmcgdGhlIFBUUCBDbG9jayBTdXBwb3J0IGluIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIERyaXZlcioqXG5cbk9rYXksIHNvIHdlIGhhdmUgdGhpcyBwYXRjaCBhZGRpbmcgUFRQIGNsb2NrIHN1cHBvcnQgdG8gdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyIChgZHJpdmVycy9kcGxsL3psMzA3M3gvYCkuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBjYW4gd2UgYWN0dWFsbHkgKnJlYWNoKiB0aGlzIGNvZGUgYW5kIHdoYXQncyBpbnZvbHZlZCBpbiBnZXR0aW5nIGl0IHJ1bm5pbmc/XG5cbkZpcnN0LCB0aGUgcGF0Y2ggbW9kaWZpZXMgYEtjb25maWdgIHRvIGRlcGVuZCBvbiBgUFRQXzE1ODhfQ0xPQ0tgLCB3aGljaCBtYWtlcyBzZW5zZS4gSXQncyBhZGRpbmcgZnVuY3Rpb25zIHRvIGBjaGFuLmNgIGZvciBUaW1lIG9mIERheSAoVG9EKSByZWFkL3dyaXRlL2FkanVzdCwgVElFIHdyaXRlLCBhbmQgcGhhc2Ugc3RlcHBpbmcsIGFuZCBpdCByZWdpc3RlcnMgYSBQVFAgY2xvY2sgaW4gYGRwbGwuY2AgdXNpbmcgYHB0cF9jbG9ja19yZWdpc3RlcmAuIFRoYXQncyBhIHByZXR0eSBzaWduaWZpY2FudCBhZGRpdGlvbiDigJMgaXQncyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3b3J0aCBjb25zaWRlcmluZyBmb3IgZnV6emluZy5cblxuVGhlIGRyaXZlciBpcyBmb3IgTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlcywgYW5kIGl0IHVzZXMgSTJDL1NQSS4gIENhbiB3ZSBnZXQgdG8gdGhpcyBpbiBRRU1VLCBvciBhbnkgb3RoZXIgdmlydHVhbCBlbnZpcm9ubWVudD8gIEkyQy9TUEkgZHJpdmVycyBjYW4gdXN1YWxseSBiZSBpbnN0YW50aWF0ZWQgdmlhIGRldmljZSB0cmVlLCBzeXNmcywgb3IgZXZlbiBhbiBlbXVsYXRvci4gIEV2ZW4gd2l0aG91dCBhbiBlbXVsYXRvciwgd2UgY2FuIHByb2JlIGl0IHZpYSBzeXNmcy4gSSBjYW4sIGZvciBleGFtcGxlLCBpbnN0YW50aWF0ZSB0aGUgSTJDIGRldmljZSB2aWEgYGVjaG8gemwzMDczeCAweDEwIFx1MDAzZSAvc3lzL2J1cy9pMmMvZGV2aWNlcy9pMmMtMC9uZXdfZGV2aWNlYC4gV2FpdCBhIHNlY29uZCEgU3l6a2FsbGVyISBTeXprYWxsZXIgY2FuIGZ1enogSTJDIGFuZCBTUEkgZGV2aWNlcyB1c2luZyBgc3l6X2kyY2AgYW5kIGBzeXpfc3BpYCBvciBieSBpbnN0YW50aWF0aW5nIHRoZW0hICBUaGF0J3MgcGVyZmVjdC4gIFNvLCB0aGUgYWRkZWQgUFRQIGNsb2NrIGludGVyZmFjZSBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSB2aWEgYC9kZXYvcHRwWGAuIFN5emthbGxlciBjYW4gZWFzaWx5IGludGVyYWN0IHdpdGggdGhhdC4gIFRoZSBkcml2ZXIgaXRzZWxmIGxldmVyYWdlcyByZWdtYXAgb3ZlciBJMkMvU1BJLlxuXG5MZXQncyBkaXZlIGludG8gdGhlIHNwZWNpZmljcyBvZiB0aGlzIFBUUCBjbG9jayBpbnRlcmZhY2UuIFRoZSBjb3JlIGZ1bmN0aW9ucyBJIG5lZWQgdG8gZm9jdXMgb24gYXJlOlxuXG4qICAgYHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NGBcbiogICBgemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjRgXG4qICAgYHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZWBcbiogICBgemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lYFxuKiAgIGB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlYFxuKiAgIGB6bDMwNzN4X2NoYW5fdG9kX3JlYWRgXG4qICAgYHpsMzA3M3hfY2hhbl90b2Rfd3JpdGVgXG4qICAgYHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0YFxuKiAgIGB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldGBcbiogICBgemwzMDczeF9jaGFuX3RpZV93cml0ZWBcbiogICBgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXBgXG5cblRoZXNlIGZ1bmN0aW9ucyBhcmUgaG9va2VkIGludG8gYHB0cF9jbG9ja19pbmZvYCwgd2hpY2ggaXMgYSBzdGFuZGFyZCBhcHByb2FjaC4gIFRoZSBgcHRwX2Nsb2NrX2luZm9gIHN0cnVjdCBpdHNlbGYgbG9va3Mgbm9ybWFsLCBzdGFuZGFyZCBQVFAgY2xvY2sgb3BzLlxuXG5XZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSd2ZSBnb3QgYWxsIHRoZSBuZWNlc3NhcnkgY29uZmlncyBlbmFibGVkLiBJdCBsb29rcyBsaWtlIHdlIG5lZWQgYFpMMzA3M1hfSTJDYCwgYFpMMzA3M1hfU1BJYCwgYFBUUF8xNTg4X0NMT0NLYCwgYERQTExgLCBgSTJDYCwgYFNQSWAsIGFuZCBgTkVUYC4gIEEgcXVpY2sgbG9vayBhdCBgZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ2AgY29uZmlybXMgdGhlc2UgZGVwZW5kZW5jaWVzLiBgWkwzMDczWGAgaXMgc2VsZWN0ZWQgYnkgYm90aCBgWkwzMDczWF9JMkNgIGFuZCBgWkwzMDczWF9TUElgLCBzbyBlbmFibGluZyBlaXRoZXIgb2YgdGhlbSB3aWxsIGVuYWJsZSB0aGUgd2hvbGUgdGhpbmcuXG5cbkdpdmVuIHRoYXQgU3l6a2FsbGVyIGNhbiBlbXVsYXRlIEkyQyBhbmQgU1BJIGRldmljZXMsIHdlIGhhdmUgYSBjbGVhciBwYXRoIHRvIHJlYWNoIHRoZSBjb2RlLiBUaGUgY3JpdGljYWwgZnVuY3Rpb25zIG5vdyBhcmUgdGhlIFBUUCBjbG9jayBmdW5jdGlvbnMsIGFzIHdlbGwgYXMgdGhlIGNoYW5uZWwgZnVuY3Rpb25zIHRoYXQgYWZmZWN0IFRvRCwgcGhhc2UgYWRqdXN0bWVudHMsIGFuZCBUSUUgd3JpdGVzLiBJJ20gZ29pbmcgdG8gcnVuIGEgcXVpY2sgZ3JlcCB0byBtYWtlIHN1cmUgdGhvc2UgZnVuY3Rpb25zIGFyZSBkZWZpbml0ZWx5IHRoZXJlIGFuZCBkZWZpbmVkLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBiZWZvcmUgZ29pbmcgYW55IGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTEyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYwNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDExOjUzOjEwLjIwNzExNDY0NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTU0NjU0NTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9MjMxMD1zdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0yMzIxLS8qKlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoyMzIyOiAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwIC0gYWRqdXN0IHN1Yi1zZWNvbmQgdGltZSB2aWEgcGhhc2Ugc3RlcFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0yMzIzLSAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTIzMzktICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjIzNDA6c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTIzNDEtXFx0XFx0XFx0XFx0XFx0ICAgICAgIHM2NCBkZWx0YSlcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0yNDIzLS8qKlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoyNDI0OiAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSAtIGFkanVzdCBQVFAgY2xvY2sgdGltZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0yNDI1LSAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTI0MzctICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjI0Mzg6c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBzNjQgZGVsdGEpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTI0Mzkte1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTI0OTEtXFx0aWYgKHpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSkge1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoyNDkyOlxcdFxcdHJjID0gemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoemxkcGxsLCBkZWx0YSk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTI0OTMtXFx0XFx0aWYgKCFyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz0yNjAyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvID0ge1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTI2MDYtXFx0LnNldHRpbWU2NFxcdD0gemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjI2MDc6XFx0LmFkanRpbWVcXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjYwOC1cXHQuYWRqZmluZVxcdD0gemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMTo1MzoxMS43NjE3NzMwNzVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDI4OTgxNDU1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgdGhlIFpMMzA3M1ggQ2hhbm5lbCBUaW1lLW9mLURheSBBZGp1c3RtZW50IEZ1bmN0aW9uKipcblxuUmlnaHQsIHRoZSBidWlsZGluZyBibG9ja3MgYXJlIGluIHBsYWNlLiBUaGUgY29yZSBmdW5jdGlvbmFsaXRpZXMgSSBuZWVkIGFyZSBhdmFpbGFibGUuIE5vdywgbGV0J3MgZHJpbGwgZG93biBpbnRvIHRoZSBkZXRhaWxzLiBJIG5lZWQgdG8gZXhhbWluZSB0aGUgYHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0YCBmdW5jdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgdGltZS1vZi1kYXkgYWRqdXN0bWVudHMgZm9yIGVhY2ggY2hhbm5lbCBhcmUgaGFuZGxlZCwgd2hpY2ggaXMgY3JpdGljYWwuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBhbGdvcml0aG0sIHRoZSBkYXRhIHN0cnVjdHVyZXMgaXQgbWFuaXB1bGF0ZXMsIGFuZCB0aGUgcG90ZW50aWFsIGVycm9yIGNvbmRpdGlvbnMuIEkgbmVlZCB0byBjb25zaWRlciB0aGluZ3MgbGlrZSBob3cgaXQgaGFuZGxlcyBsZWFwIHNlY29uZHMsIHRpbWUgem9uZSBvZmZzZXRzLCBhbmQgYW55IGNsb2NrIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMgdGhhdCBtaWdodCBpbXBhY3QgdGhlIGZpbmFsIFRPRCBjYWxjdWxhdGlvbi4gVGhpcyBpcyB0aGUgaGVhcnQgb2YgdGhlIHRpbWluZyBzb2x1dGlvbi4gTGV0J3MgZGlnIGluIGFuZCBtYWtlIHN1cmUgaXQgaXMgcm9idXN0IGFuZCBwcmVjaXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTUzNCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDExOjUzOjIyLjA1MTU5MDIxOFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzE2MTg4MTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpsMzA3M3hfY2hhbl90b2RfYWRqdXN0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYz0zNjM9aW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzg1LS8qKlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozODY6ICogemwzMDczeF9jaGFuX3RvZF9hZGp1c3QgLSBhdG9taWMgVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIHdpdGggcm9sbG92ZXIgZ3VhcmRcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzg3LSAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQwMC0jZGVmaW5lIFpMX1RPRF9NQVhfUkVUUklFU1xcdDIwXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQwMTppbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQwMi1cXHRcXHRcXHQgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg9NTE9aW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTUyLVxcdFxcdFxcdCAgIHN0cnVjdCB0aW1lc3BlYzY0IHRzKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NTM6aW50IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC01NC1cXHRcXHRcXHQgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTI0Mzg9c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBzNjQgZGVsdGEpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjQ1Ni1cXHQgICAgIXpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjaGFuKSlcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6MjQ1NzpcXHRcXHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTI0NTgtXFx0XFx0XFx0XFx0XFx0ICAgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0yNDcwLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoyNDcxOlxcdFxcdHJjID0gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQsIHRzKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjQ3Mi1cXHRcXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjUwMS1cXHQvKiBQaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSBmYWlsZWQsIGZhbGwgYmFjayB0byBUb0QgYWRqdXN0ICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjI1MDI6XFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVxcdTAwM2VpZCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjUwMy1cXHRcXHRcXHRcXHQgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTE6NTM6MjMuNzY3NzgyOTM4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQzODE2NjY3OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIERyaXZlciBQYXRjaCBmb3IgUFRQIENsb2NrIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgUFRQIGNsb2NrIHN1cHBvcnQgaW50byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIsIGludGVyZXN0aW5nLiBUaGUgZHJpdmVyIGl0c2VsZiBpcyBmYWlybHkgc3RhbmRhcmQ7IGl0IGNhbiBiZSBob29rZWQgdXAgdmlhIGVpdGhlciBJMkMgb3IgU1BJLCBnb29kIHRvIGtub3cuIFRoZSBrZXkgdGhpbmcgaXMgdGhhdCB0aGlzIFBUUCBjbG9jayBmdW5jdGlvbmFsaXR5IGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCB3aGljaCBtZWFucyB3ZSBjYW4gbGlrZWx5IHBva2UgYXQgaXQgZGlyZWN0bHkgdGhyb3VnaCBgL2Rldi9wdHBYYCBkZXZpY2VzIGFuZCB0aGUgYXNzb2NpYXRlZCBpb2N0bHMuIFRoYXQgb3BlbnMgdXAgYSB3aG9sZSBhdmVudWUgZm9yIGZ1enppbmcgd2l0aCBzeXprYWxsZXIsIG9mIGNvdXJzZS5cblxuSSBuZWVkIHRvIHplcm8gaW4gb24gc3BlY2lmaWMgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIGRyaXZlci4gTGV0J3Mgc2VlLi4uIHRoZSBtb3N0IGNyaXRpY2FsIG9uZXMgc2VlbSB0byBiZTogYHpsMzA3M3hfY2hhbl90b2RfcmVhZGAgYW5kIGB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlYCBmb3IgVGltZSBvZiBEYXkgcmVhZHMgYW5kIHdyaXRlczsgYHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0YCwgd2hpY2ggaXMgcHJvYmFibHkgZm9yIGNvcnJlY3Rpb25zLiAgVGhlbiB0aGVyZSdzIGB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldGAsIGB6bDMwNzN4X2NoYW5fdGllX3dyaXRlYCwgYW5kIGB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcGAg4oCTIHRob3NlIHNvdW5kIGxpa2UgdGhleSBkZWFsIHdpdGggZmluZXItZ3JhaW5lZCBhZGp1c3RtZW50cy5cblxuQW5kLCBvZiBjb3Vyc2UsIHRoZSBEUExMLXNwZWNpZmljIFBUUCBmdW5jdGlvbnMgYXJlIGNydWNpYWw6IGB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjRgLCBgemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjRgLCBgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXBgLCBgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lYCwgYHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZWAsIGFuZCBgemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZWAuIFRoZXNlIGFyZSBhbGwgcHJpbWUgY2FuZGlkYXRlcyBmb3IgY2xvc2VyIGluc3BlY3Rpb24gYW5kIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgbmVlZGVkIHRvIGVuYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkuIEkgc2VlIGBaTDMwNzNYX0kyQ2AsIGBaTDMwNzNYX1NQSWAsIGBQVFBfMTU4OF9DTE9DS2AsIGFuZCBgRFBMTGAuIFdhaXQsIGhvbGQgb24uIEl0IGxvb2tzIGxpa2UgYERQTExgIGlzIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgaWYgYFpMMzA3M1hgIGlzIHNlbGVjdGVkLiBBbmQgYFBUUF8xNTg4X0NMT0NLYCBpcyBhIGRlcGVuZGVuY3kuIE9rYXksIHNvIHRvIGdldCB0aGlzIGFsbCB3b3JraW5nLCBpdCBsb29rcyBsaWtlIGFsbCB0aGF0IEkgbmVlZCBhcmU6XG5cbmBaTDMwNzNYX0kyQ2Agb3IgYFpMMzA3M1hfU1BJYCwgYW5kIGBQVFBfMTU4OF9DTE9DS2AuIExldCBtZSBqdXN0IGRvdWJsZSBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIGluIGBkcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIEdvdHRhIGJlIHRob3JvdWdoIHdpdGggdGhpcyBzdHVmZi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI2NzYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTE6NTM6MzguMTQ5NDUyMTQ2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Njc1MDgwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFpMMzA3M1hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZy0yLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWc6Mzpjb25maWcgWkwzMDczWFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctNC1cXHR0cmlzdGF0ZSBcXFwiTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlc1xcXCIgaWYgQ09NUElMRV9URVNUXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTE2LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWc6MTc6Y29uZmlnIFpMMzA3M1hfSTJDXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZy0xOC1cXHR0cmlzdGF0ZSBcXFwiSTJDIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1xcXCJcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctMjgtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZzoyOTpjb25maWcgWkwzMDczWF9TUElcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTMwLVxcdHRyaXN0YXRlIFxcXCJTUEkgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMTo1MzozOS43MTY5NjY5NDZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjczNjI2NDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiBjaGVja2luZyB0aGUgYGRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdgIGRlcGVuZGVuY2llczpcblxuKipBbmFseXppbmcgdGhlIEtjb25maWcgRGVwZW5kZW5jaWVzIGZvciB6bDMwNzN4IERyaXZlcioqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZm9yIHRoZSB6bDMwNzN4IGRyaXZlci4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGUgYGRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdgIGZpbGUuIEknbSBhc3N1bWluZywgYXMgYW4gZXhwZXJ0IGluIHRoaXMsIHRoYXQgdGhpcyBLY29uZmlnIGZpbGUgY29udGFpbnMgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGZvciBlbmFibGluZyBhbmQgZGlzYWJsaW5nIHRoZSB6bDMwNzN4IGRyaXZlciB3aXRoaW4gdGhlIGtlcm5lbCdzIGJ1aWxkIHN5c3RlbS4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgd2hpY2ggb3RoZXIga2VybmVsIGZlYXR1cmVzIG9yIGhhcmR3YXJlIGNvbXBvbmVudHMgbXVzdCBiZSBlbmFibGVkIG9yIGNvbmZpZ3VyZWQgYmVmb3JlIHRoaXMgcGFydGljdWxhciBkcml2ZXIgY2FuIGJlIHNlbGVjdGVkLiBUaGlzIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIHN5c3RlbSBjb25maWd1cmF0aW9uIGFuZCB0byBlbnN1cmUgSSBkb24ndCBpbnRyb2R1Y2UgYnVpbGQgZXJyb3JzIG9yIHJ1bnRpbWUgY29uZmxpY3RzLiBJJ2xsIG5lZWQgdG8gaWRlbnRpZnk6IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyAoZS5nLiwgXCJpZlwiIHN0YXRlbWVudHMpLCBkZWZhdWx0IHZhbHVlcywgc2VsZWN0IHN0YXRlbWVudHMsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgdGhhdCByZWxhdGUgdG8gdGhlIHByb3BlciBidWlsZGluZyBhbmQgdXNlIG9mIHRoZSB6bDMwNzN4IGRyaXZlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQwMjMsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMTo1Mzo0NC4zOTA1OTYwMloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRcXG4gICAzOlxcdGNvbmZpZyBaTDMwNzNYXFxuICAgNDpcXHRcXHR0cmlzdGF0ZSBcXFwiTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlc1xcXCIgaWYgQ09NUElMRV9URVNUXFxuICAgNTpcXHRcXHRkZXBlbmRzIG9uIE5FVCBcXHUwMDI2XFx1MDAyNiBQVFBfMTU4OF9DTE9DS1xcbiAgIDY6XFx0XFx0c2VsZWN0IERQTExcXG4gICA3OlxcdFxcdHNlbGVjdCBORVRfREVWTElOS1xcbiAgIDg6XFx0XFx0c2VsZWN0IFJFR01BUFxcbiAgIDk6XFx0XFx0aGVscFxcbiAgMTA6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBNaWNyb2NoaXAgQXp1cml0ZSBmYW1pbHkgRFBMTC9QVFAvU3luY0VcXG4gIDExOlxcdFxcdCAgZGV2aWNlcyB0aGF0IHN1cHBvcnQgdXAgdG8gNSBpbmRlcGVuZGVudCBEUExMIGNoYW5uZWxzLFxcbiAgMTI6XFx0XFx0ICAxMCBpbnB1dCBwaW5zIGFuZCB1cCB0byAyMCBvdXRwdXQgcGlucy5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlXFxuICAxNTpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIHpsMzA3M3guXFxuICAxNjpcXHRcXG4gIDE3OlxcdGNvbmZpZyBaTDMwNzNYX0kyQ1xcbiAgMTg6XFx0XFx0dHJpc3RhdGUgXFxcIkkyQyBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcXFwiXFxuICAxOTpcXHRcXHRkZXBlbmRzIG9uIEkyQyBcXHUwMDI2XFx1MDAyNiBORVQgXFx1MDAyNlxcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tcXG4gIDIwOlxcdFxcdHNlbGVjdCBSRUdNQVBfSTJDXFxuICAyMTpcXHRcXHRzZWxlY3QgWkwzMDczWFxcbiAgMjI6XFx0XFx0aGVscFxcbiAgMjM6XFx0XFx0ICBUaGlzIGlzIEkyQyBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFXFxuICAyNDpcXHRcXHQgIGRldmljZXMuXFxuICAyNTpcXHRcXG4gIDI2OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXFxuICAyNzpcXHRcXHQgIGJlIGNhbGxlZCB6bDMwNzN4X2kyYy5cXG4gIDI4OlxcdFxcbiAgMjk6XFx0Y29uZmlnIFpMMzA3M1hfU1BJXFxuICAzMDpcXHRcXHR0cmlzdGF0ZSBcXFwiU1BJIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1xcXCJcXG4gIDMxOlxcdFxcdGRlcGVuZHMgb24gTkVUIFxcdTAwMjZcXHUwMDI2IFNQSSBcXHUwMDI2XFx1MDAyNiBQVFBfMTU4OF9DTE9DS1xcbiAgMzI6XFx0XFx0c2VsZWN0IFJFR01BUF9TUElcXG4gIDMzOlxcdFxcdHNlbGVjdCBaTDMwNzNYXFxuICAzNDpcXHRcXHRoZWxwXFxuICAzNTpcXHRcXHQgIFRoaXMgaXMgU1BJIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0VcXG4gIDM2OlxcdFxcdCAgZGV2aWNlcy5cXG4gIDM3OlxcdFxcbiAgMzg6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcXG4gIDM5OlxcdFxcdCAgYmUgY2FsbGVkIHpsMzA3M3hfc3BpLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMTo1Mzo0NC4zOTA2NjI2NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NzgyNzE2MzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZvY3VzOiBaTDMwNzNYIENsb2NrIENvbnRyb2wqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZW5hYmxlIHRoZSBgWkwzMDczWF9JMkNgIGFuZCBgWkwzMDczWF9TUElgIGludGVyZmFjZXMuIFRoZSBgUFRQXzE1ODhfQ0xPQ0tgIGZlYXR1cmUgaXMgZGVmaW5pdGVseSBuZWNlc3NhcnkgdG9vLiBBbmQgc2luY2Ugd2UncmUgZGVhbGluZyB3aXRoIGNsb2NrIG1hbmFnZW1lbnQsIEknbGwgZ28gd2l0aCB0aGUgYERQTExgIHNlbGVjdGlvbi5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGtleSBmdW5jdGlvbnMgSSBzaG91bGQgY29uY2VudHJhdGUgb24gZm9yIHRoaXMgaW1wbGVtZW50YXRpb24uIEknbSB0aGlua2luZzpcblxuKiAgIGB6bDMwNzN4X2NoYW5fdG9kX3JlYWRgXG4qICAgYHpsMzA3M3hfY2hhbl90b2Rfd3JpdGVgXG4qICAgYHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0YFxuKiAgIGB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldGBcbiogICBgemwzMDczeF9jaGFuX3RpZV93cml0ZWBcbiogICBgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXBgXG5cbkhvbGQgb24gYSBzZWNvbmQuLi5JIHNlZSB0aGVzZSBzdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gRFBMTCBhbmQgUFRQOlxuXG4qICAgYHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwYFxuKiAgIGB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVgXG4qICAgYHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZWBcbiogICBgemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZWBcbiogICBgemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0YFxuKiAgIGB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NGBcblxuUmlnaHQsIEknZCBiZXR0ZXIgZG91YmxlLWNoZWNrIHRoYXQgdGhleSBhcmUgYWN0dWFsbHkgc3RhdGljIC0gSSBuZWVkIHRvIGtub3cgd2h5IHRoZXkgYXJlIHdyaXR0ZW4gdGhhdCB3YXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0OTM0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTE6NTM6NTIuMTczMzgyMTI4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM3ODU5NjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz0yMzEwPXN0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTIzMzktICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjIzNDA6c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTIzNDEtXFx0XFx0XFx0XFx0XFx0ICAgICAgIHM2NCBkZWx0YSlcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0yNDM3LSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoyNDM4OnN0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczY0IGRlbHRhKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0yNDM5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTE6NTM6NTMuNzExMjQ2MDhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTg0MTY2NTkzMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gRHluYW1pYyBDaGFubmVsIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBkZWFsaW5nIHdpdGggYGNoYW4uY2AsIGFuZCBJJ3ZlIHF1aWNrbHkgY29uZmlybWVkIHRoYXQgdGhlIG1ham9yaXR5IG9mIGl0cyBmdW5jdGlvbnMgYXJlLCBhcyBleHBlY3RlZCwgc3RhdGljLiBUaGF0J3MgZ29vZDsgaXQgbmFycm93cyBkb3duIG15IGZvY3VzLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkeW5hbWljcywgdGhlIHBhcnRzIHRoYXQgKmRvKiBjaGFuZ2UsIG9yIHRoYXQgYXJlIGRlc2lnbmVkIHRvIGJlIG1vZGlmaWVkLlxuXG5UaGVyZWZvcmUsIEknbSBnb2luZyB0byBjb25jZW50cmF0ZSBvbiB0aGVzZSBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYGNoYW4uY2A6IGB6bDMwNzN4X2NoYW5fdG9kX3JlYWRgLCBgemwzMDczeF9jaGFuX3RvZF93cml0ZWAsIGB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdGAsIGB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldGAsIGB6bDMwNzN4X2NoYW5fdGllX3dyaXRlYCwgYW5kIGB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcGAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIGtleSBhcmVhcyBmb3IgbWUgdG8gaW52ZXN0aWdhdGUsIGdpdmVuIHRoZSBjb250ZXh0LlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSB2ZXJpZnkgd2hldGhlciB0aGVzZSBmdW5jdGlvbnMgYXJlIHByb3Blcmx5IGV4cG9ydGVkIGFuZCB2aXNpYmxlIGZvciB0aGUgZXh0ZXJuYWwgaW50ZXJmYWNlLCBvciBpZiB0aGVyZSdzIGFueSBzdWJ0bGV0eSBpbiB0aGVpciBkZWZpbml0aW9uIHRoYXQgSSBuZWVkIHRvIGFjY291bnQgZm9yLiBObyBwb2ludCBpbiB3YXN0aW5nIHRpbWUgaWYgdGhleSdyZSBub3QgZXZlbiBhY2Nlc3NpYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTk3OCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMTo1NDoxMi4xMjc5MDc3NzZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODI1MTUxNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM9MjMyPWNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKnpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldixcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNDctICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI0ODppbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNDkte1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jPTI5Mz1zdGF0aWMgaW50IHpsMzA3M3hfY2hhbl90b2RfY3RybChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgdTggY21kKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMwOS0gKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzEwOmludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMxMS1cXHRcXHRcXHQgIGJvb2wgbmV4dF9oeiwgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oPTQ1PWludCB6bDMwNzN4X2NoYW5fbmNvX21vZGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNDYtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjQ3OmludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDo0ODppbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC00OS1cXHRcXHRcXHQgIGJvb2wgbmV4dF9oeiwgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMTo1NDoxMy43MTA0Mjc4ODZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI3ODMzMzk2MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEF6dXJpdGUgRFBMTCBEcml2ZXIgSW50ZWdyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgZm9jdXMgc3ltYm9scyDigJMgdGhlIGtleSBmdW5jdGlvbnMgd2UncmUgaW50ZXJlc3RlZCBpbi4gSSd2ZSBnb3Q6XG5cbiogICBgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0YFxuKiAgIGB6bDMwNzN4X2NoYW5fdG9kX3JlYWRgXG4qICAgYHpsMzA3M3hfY2hhbl90b2Rfd3JpdGVgXG4qICAgYHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0YFxuKiAgIGB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldGBcbiogICBgemwzMDczeF9jaGFuX3RpZV93cml0ZWBcbiogICBgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXBgXG5cbkkgcXVpY2tseSBjb25maXJtZWQgdGhhdCBgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0YCBpcyBub24tc3RhdGljIGFzIHJlcXVpcmVkLiBJIGFsc28gY29uZmlybWVkIHRoZSBrZXkgY29uZmlncy4gVGhlIGNvZGUgbG9va3MgY29ycmVjdCwgc28gdGhlIGZvY3VzIHN5bWJvbHMgYXJlIGNvcnJlY3QuXG5cbk5vdywgdGhlIGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHdlJ3JlIGNvdmVyaW5nIGFsbCBiYXNlcy4gV2UgaGF2ZTpcblxuKiAgIGBaTDMwNzNYX0kyQ2BcbiogICBgWkwzMDczWF9TUElgXG4qICAgYFBUUF8xNTg4X0NMT0NLYFxuXG5JIGNoZWNrZWQgYFBUUF8xNTg4X0NMT0NLYCwgYW5kIGl0J3MgYSB0cmlzdGF0ZSwgc28gdGhhdCdzIGdvb2QuIEl0IHdpbGwgZW5hYmxlIHRoZSBjb3JyZWN0IGNvZGUgcGF0aCBhcyBpbnRlbmRlZC5cblxuSSBhbHNvIGNvbnNpZGVyZWQgYERQTExgLiBJdCBzZWVtcyBgRFBMTGAgaXMgc2VsZWN0ZWQgYnkgYFpMMzA3M1hgLCBzbyBpdCBzaG91bGQgYmUgYXV0b21hdGljYWxseSBlbmFibGVkLCBidXQgaW5jbHVkaW5nIGl0IGRvZXNuJ3QgaHVydC4gQW5kLCByZWFsbHksIHRoZSBgc2VsZWN0YCBkaXJlY3RpdmUgaW4gdGhlIGNvbmZpZyBoYW5kbGVzIGl0LCBzbyB3ZSBkb24ndCBuZWVkIHRvIHNwZWNpZnkgaXQuXG5cbkkgZGlkIGEgcXVpY2sgY2hlY2sgZm9yIG90aGVyIGRlcGVuZGVuY2llcywgYW5kIHdlJ3ZlIGdvdCBgSTJDYCwgYFNQSWAsIGFuZCBgTkVUYC4gYE5FVGAgaXMgdXN1YWxseSBlbmFibGVkLCBhbmQgYEkyQ2AgYW5kIGBTUElgIGFyZSByZXF1aXJlZCBmb3IgdGhpcyBkcml2ZXIuXG5cblNvLCB0aGUgY29uZmlnIGxpc3QgaXMgc29saWQ6XG5cbiogICBgWkwzMDczWF9JMkNgXG4qICAgYFpMMzA3M1hfU1BJYFxuKiAgIGBQVFBfMTU4OF9DTE9DS2BcblxuSSB2ZXJpZmllZCBubyBvdGhlciBmdW5jdGlvbnMgYXJlIHJlbGV2YW50IGJlc2lkZXMgdGhlIGZvY3VzIHN5bWJvbHMuIGB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyYCBhbmQgYHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlcmAgYXJlIHN0YXRpYywgc28gdGhleSdyZSBub3QgcGFydCBvZiB0aGUgZnV6emluZyBzdXJmYWNlLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgd2Ugd2FudC5cblxuSW4gZXNzZW5jZSwgdGhpcyBwYXRjaCBpcyBhZGRpbmcgUFRQIGNsb2NrIGZ1bmN0aW9uYWxpdHkgdG8gdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyLiBJdCdzIGFjY2Vzc2libGUgdmlhIEkyQy9TUEkgYW5kIGV4cG9zZWQgdG8gdXNlcnNwYWNlIHZpYSB0aGUgUFRQIGNsb2NrIHN1YnN5c3RlbSAoYC9kZXYvcHRwWGApLiBTeXprYWxsZXIgd2lsbCBiZSBhYmxlIHRvIGZ1enogdGhpcyB0aHJvdWdoIEkyQy9TUEkgZW11bGF0aW9uLiBUaGUgZm9jdXMgc3ltYm9scyBhcmUgY29ycmVjdCwgYW5kIGFsbCBkZXBlbmRlbmNpZXMgYXJlIGFwcHJvcHJpYXRlbHkgY292ZXJlZC4gSSB0aGluayB0aGlzIGlzIGdvb2QgdG8gZ28uIFRpbWUgdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY5NjMsIk91dHB1dFRva2VucyI6MjUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDExOjU0OjI2LjQ5Mzc3MTM3NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczOTQ5OTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaTDMwNzNYX0kyQ1wiLFxuICAgIFwiWkwzMDczWF9TUElcIixcbiAgICBcIlBUUF8xNTg4X0NMT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0XCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fdG9kX3JlYWRcIixcbiAgICBcInpsMzA3M3hfY2hhbl90b2Rfd3JpdGVcIixcbiAgICBcInpsMzA3M3hfY2hhbl90b2RfYWRqdXN0XCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldFwiLFxuICAgIFwiemwzMDczeF9jaGFuX3RpZV93cml0ZVwiLFxuICAgIFwiemwzMDczeF9jaGFuX3BoYXNlX3N0ZXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciAoemwzMDczeCkuIFRoZSBkcml2ZXIgY2FuIGJlIGluc3RhbnRpYXRlZCB2aWEgSTJDIG9yIFNQSSwgYW5kIHRoZSBQVFAgY2xvY2sgaW50ZXJmYWNlIGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlIHZpYSBgL2Rldi9wdHBYYC4gU3l6a2FsbGVyIGNhbiBmdXp6IHRoaXMgZnVuY3Rpb25hbGl0eSB1c2luZyBJMkMvU1BJIGVtdWxhdGlvbiBhbmQgUFRQIGlvY3Rscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaTDMwNzNYX0kyQ1wiLFxuICAgIFwiWkwzMDczWF9TUElcIixcbiAgICBcIlBUUF8xNTg4X0NMT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0XCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fdG9kX3JlYWRcIixcbiAgICBcInpsMzA3M3hfY2hhbl90b2Rfd3JpdGVcIixcbiAgICBcInpsMzA3M3hfY2hhbl90b2RfYWRqdXN0XCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldFwiLFxuICAgIFwiemwzMDczeF9jaGFuX3RpZV93cml0ZVwiLFxuICAgIFwiemwzMDczeF9jaGFuX3BoYXNlX3N0ZXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciAoemwzMDczeCkuIFRoZSBkcml2ZXIgY2FuIGJlIGluc3RhbnRpYXRlZCB2aWEgSTJDIG9yIFNQSSwgYW5kIHRoZSBQVFAgY2xvY2sgaW50ZXJmYWNlIGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlIHZpYSBgL2Rldi9wdHBYYC4gU3l6a2FsbGVyIGNhbiBmdXp6IHRoaXMgZnVuY3Rpb25hbGl0eSB1c2luZyBJMkMvU1BJIGVtdWxhdGlvbiBhbmQgUFRQIGlvY3Rscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTE6NTQ6MjYuNTY3NzI3NjRaIiwiU2VxIjoxNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1Mjc1MDAwMzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTE6NTQ6MjYuNTY4MTgzMTVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjUyNzQ1NDA3NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgUFRQIGNsb2NrIHN1cHBvcnQgZm9yIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlci4gSXQgYWRkcyBmdW5jdGlvbnMgdG8gcmVhZC93cml0ZSBUaW1lIG9mIERheSAoVG9EKSByZWdpc3RlcnMsIGFkanVzdCBmcmVxdWVuY3ksIGFuZCBhZGp1c3QgcGhhc2UsIGFzIHdlbGwgYXMgcmVnaXN0ZXJpbmcgYSBQVFAgY2xvY2sgZGV2aWNlLiBBbGwgbG9jYWwgdmFyaWFibGVzLCBzdWNoIGFzIGBzdHJ1Y3QgdGltZXNwZWM2NGAgYW5kIGBzeW50aF9tYXNrYCwgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBgcHRwX2Nsb2NrX2luZm9gIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCBmcm9tIGEgc3RhdGljIGNvbnN0IHRlbXBsYXRlLCBlbnN1cmluZyBhbGwgZmllbGRzIChpbmNsdWRpbmcgcGFkZGluZyBhbmQgdGhlIGBuYW1lYCBidWZmZXIpIGFyZSB6ZXJvLWluaXRpYWxpemVkIGJlZm9yZSBgc25wcmludGZgIGlzIGNhbGxlZC4gVGhlcmUgYXJlIG5vIGtlcm5lbC10by11c2VyIGluZm8tbGVha3Mgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2VzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcy4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1OTFkZWM4M2E4NWQ3MDc0NTUyNjBlOTE4ZTc0MTI1N2U0NWY5MjkxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAxMTo1Mjo0NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWcgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXG5pbmRleCA1YmJjYTE0MDA1ODEzLi5kYTE3MzFhY2UxNWYwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xuQEAgLTIsNyArMiw3IEBAXG4gXG4gY29uZmlnIFpMMzA3M1hcbiBcdHRyaXN0YXRlIFwiTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlc1wiIGlmIENPTVBJTEVfVEVTVFxuLVx0ZGVwZW5kcyBvbiBORVRcbitcdGRlcGVuZHMgb24gTkVUIFx1MDAyNlx1MDAyNiBQVFBfMTU4OF9DTE9DS1xuIFx0c2VsZWN0IERQTExcbiBcdHNlbGVjdCBORVRfREVWTElOS1xuIFx0c2VsZWN0IFJFR01BUFxuQEAgLTE2LDcgKzE2LDcgQEAgY29uZmlnIFpMMzA3M1hcbiBcbiBjb25maWcgWkwzMDczWF9JMkNcbiBcdHRyaXN0YXRlIFwiSTJDIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1wiXG4tXHRkZXBlbmRzIG9uIEkyQyBcdTAwMjZcdTAwMjYgTkVUXG4rXHRkZXBlbmRzIG9uIEkyQyBcdTAwMjZcdTAwMjYgTkVUIFx1MDAyNlx1MDAyNiBQVFBfMTU4OF9DTE9DS1xuIFx0c2VsZWN0IFJFR01BUF9JMkNcbiBcdHNlbGVjdCBaTDMwNzNYXG4gXHRoZWxwXG5AQCAtMjgsNyArMjgsNyBAQCBjb25maWcgWkwzMDczWF9JMkNcbiBcbiBjb25maWcgWkwzMDczWF9TUElcbiBcdHRyaXN0YXRlIFwiU1BJIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1wiXG4tXHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgU1BJXG4rXHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgU1BJIFx1MDAyNlx1MDAyNiBQVFBfMTU4OF9DTE9DS1xuIFx0c2VsZWN0IFJFR01BUF9TUElcbiBcdHNlbGVjdCBaTDMwNzNYXG4gXHRoZWxwXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXG5pbmRleCA0ZWMyY2Y1M2RhZDQ2Li5hZjZjYTQzYzMzNTkwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNcbkBAIC0zLDYgKzMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZfcHJpbnRrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiBcbkBAIC0xNjIsOCArMTYzLDggQEAgaW50IHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpXG4gICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3hfZGV2IHN0cnVjdHVyZVxuICAqIEBpbmRleDogRFBMTCBjaGFubmVsIGluZGV4IHRvIGZldGNoIHN0YXRlIGZvclxuICAqXG4tICogUmVhZHMgdGhlIG1vZGVfcmVmc2VsIHJlZ2lzdGVyIGFuZCByZWZlcmVuY2UgcHJpb3JpdHkgcmVnaXN0ZXJzIGZvclxuLSAqIHRoZSBnaXZlbiBEUExMIGNoYW5uZWwgYW5kIHN0b3JlcyB0aGUgcmF3IHZhbHVlcyBmb3IgbGF0ZXIgdXNlLlxuKyAqIFJlYWRzIHRoZSBtb2RlX3JlZnNlbCwgc3RhdHVzIGFuZCByZWZlcmVuY2UgcHJpb3JpdHkgcmVnaXN0ZXJzIGZvclxuKyAqIHRoZSBnaXZlbiBEUExMIGNoYW5uZWwgYW5kIHN0b3JlcyB0aGUgdmFsdWVzIGZvciBsYXRlciB1c2UuXG4gICpcbiAgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuICAqL1xuQEAgLTIzNCw2ICsyMzUsMzIyIEBAIGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKnpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldixcbiBcdHJldHVybiBcdTAwMjZ6bGRldi1cdTAwM2VjaGFuW2luZGV4XTtcbiB9XG4gXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0IC0gd2FpdCBmb3IgVG9EIHNlbWFwaG9yZSB0byBjbGVhclxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICpcbisgKiBQb2xscyB0aGUgVG9EIGNvbnRyb2wgcmVnaXN0ZXIgdW50aWwgdGhlIHNlbWFwaG9yZSBiaXQgaXMgY2xlYXJlZCxcbisgKiBpbmRpY2F0aW5nIHRoZSBkZXZpY2UgaGFzIGNvbXBsZXRlZCB0aGUgcHJldmlvdXMgVG9EIG9wZXJhdGlvbi5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRUJVU1kgaWYgc2VtYXBob3JlIG5vdCBjbGVhcmVkLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4raW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcbit7XG4rXHR1bnNpZ25lZCBpbnQgdGltZW91dDtcbitcdHU4IHRvZF9jdHJsO1xuK1x0aW50IHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSwgXHUwMDI2dG9kX2N0cmwpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRzd2l0Y2ggKEZJRUxEX0dFVChaTF9EUExMX1RPRF9DVFJMX0NNRCwgdG9kX2N0cmwpKSB7XG4rXHRjYXNlIDA6XG4rXHRcdC8qIE5vIG9wZXJhdGlvbiBwZW5kaW5nIChwb3dlci1vbi9yZXNldCBkZWZhdWx0KSAqL1xuK1x0XHRyZXR1cm4gMDtcbitcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFo6XG4rXHRcdHRpbWVvdXQgPSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTO1xuK1x0XHRicmVhaztcbitcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVDpcbitcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFo6XG4rXHRcdHRpbWVvdXQgPSBaTF9QT0xMX1RPRF9SRF9USU1FT1VUX1VTO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdC8qIEZXIG5ldmVyIHdyaXRlcyBjbWQgYml0czsgb25seSB0aGUgZHJpdmVyIHNldHMgdGhlbSAqL1xuK1x0XHRXQVJOX09OKDEpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksXG4rXHRcdFx0XHQgIFpMX0RQTExfVE9EX0NUUkxfU0VNLCB0aW1lb3V0KTtcbitcbitcdHJldHVybiByYyA9PSAtRVRJTUVET1VUID8gLUVCVVNZIDogcmM7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl90b2RfY3RybCAtIGlzc3VlIFRvRCBjb21tYW5kXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKiBAY21kOiBUb0QgY29tbWFuZCB0byBleGVjdXRlXG4rICpcbisgKiBXcml0ZXMgdGhlIHNlbWFwaG9yZSBhbmQgY29tbWFuZCB0byBkcGxsX3RvZF9jdHJsLiBUaGUgY2FsbGVyIG11c3RcbisgKiBlbnN1cmUgdGhlIGRldmljZSBpcyByZWFkeSAoc2VtYXBob3JlIGNsZWFyKSBiZWZvcmUgY2FsbGluZyBhbmRcbisgKiBtdXN0IHdhaXQgZm9yIGNvbXBsZXRpb24gaWYgbmVlZGVkLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitzdGF0aWMgaW50IHpsMzA3M3hfY2hhbl90b2RfY3RybChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgdTggY21kKVxuK3tcbitcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksXG4rXHRcdFx0XHRaTF9EUExMX1RPRF9DVFJMX1NFTSB8IGNtZCk7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl90b2RfcmVhZCAtIHJlYWQgVG9EIHJlZ2lzdGVycyBhZnRlciBpc3N1aW5nIGEgY29tbWFuZFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICogQG5leHRfaHo6IGlmIHRydWUsIHJlYWQgcHJlZGljdGVkIFRvRCBhdCBuZXh0IDEgSHo7IG90aGVyd2lzZSByZWFkIGN1cnJlbnRcbisgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIHRoZSByZXN1bHRcbisgKiBAc3RzOiBvcHRpb25hbCBzeXN0ZW0gdGltZXN0YW1wIHBhaXIgZm9yIGNyb3NzLXRpbWVzdGFtcGluZ1xuKyAqXG4rICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbitcdFx0XHQgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKVxuK3tcbitcdHUzMiBuc2VjO1xuK1x0dTY0IHNlYztcbitcdHU4IGNtZDtcbitcdGludCByYztcbitcbitcdGlmIChuZXh0X2h6KVxuK1x0XHRjbWQgPSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9ORVhUXzFIWjtcbitcdGVsc2VcbitcdFx0Y21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVDtcbitcbitcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRwdHBfcmVhZF9zeXN0ZW1fcHJldHMoc3RzKTtcbitcdHJjID0gemwzMDczeF9jaGFuX3RvZF9jdHJsKHpsZGV2LCBjaCwgY21kKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1x0cHRwX3JlYWRfc3lzdGVtX3Bvc3R0cyhzdHMpO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3JlYWRfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfU0VDKGNoKSwgXHUwMDI2c2VjKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0LyogSFcgbmFub3NlY29uZHMgYXJlIGFsd2F5cyBpbiBbMCwgTlNFQ19QRVJfU0VDKSByYW5nZSAqL1xuK1x0cmMgPSB6bDMwNzN4X3JlYWRfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCBcdTAwMjZuc2VjKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0dHMtXHUwMDNldHZfc2VjID0gc2VjO1xuK1x0dHMtXHUwMDNldHZfbnNlYyA9IG5zZWM7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3RvZF93cml0ZSAtIHdyaXRlIFRvRCByZWdpc3RlcnMgYW5kIHRyaWdnZXIgMSBIeiB1cGRhdGVcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqIEB0czogdGltZSB0byBzZXRcbisgKlxuKyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitpbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cylcbit7XG4rXHRpbnQgcmM7XG4rXG4rXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVG9EIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xuK1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIHRzLnR2X3NlYyk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19EUExMX1RPRF9OUyhjaCksIHRzLnR2X25zZWMpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9jdHJsKHpsZGV2LCBjaCxcbitcdFx0XHRcdCAgICAgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFopO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCAtIGF0b21pYyBUb0QgcmVhZC1tb2RpZnktd3JpdGUgd2l0aCByb2xsb3ZlciBndWFyZFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgdG8gYXBwbHlcbisgKlxuKyAqIFJlYWRzIHRoZSBuZXh0LUh6IFRvRCBhbmQgY3VycmVudCBUb0QsIHRoZW4gY2hlY2tzIHdoZXRoZXIgZW5vdWdoIHRpbWVcbisgKiByZW1haW5zIGJlZm9yZSB0aGUgbmV4dCAxIEh6IHJvbGxvdmVyIHRvIHNhZmVseSBjb21wbGV0ZSB0aGUgd3JpdGUuXG4rICogUmUtcmVhZHMgaWYgdGhlIDEgSHogdGljayBjcm9zc2VkIGJldHdlZW4gdGhlIHR3byByZWFkcyBvciBpZiBsZXNzXG4rICogdGhhbiAyMCBtcyByZW1haW5zIGJlZm9yZSB0aGUgbmV4dCByb2xsb3Zlci4gQXBwbGllcyBAZGVsdGEgYW5kIHdyaXRlc1xuKyAqIHRoZSByZXN1bHQgYmFjay5cbisgKlxuKyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbisjZGVmaW5lIFpMX1RPRF9NQVhfUkVUUklFU1x0MjBcbitpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKVxuK3tcbitcdHN0YXRpYyBjb25zdCBsb25nIHRocmVzaG9sZF9ucyA9IDIwICogTlNFQ19QRVJfTVNFQztcbitcdHN0cnVjdCB0aW1lc3BlYzY0IHRzX25leHQsIHRzX2N1ciwgZGlmZjtcbitcdGludCByYywgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFpMX1RPRF9NQVhfUkVUUklFUzsgaSsrKSB7XG4rXHRcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgdHJ1ZSwgXHUwMDI2dHNfbmV4dCwgTlVMTCk7XG4rXHRcdGlmIChyYylcbitcdFx0XHRyZXR1cm4gcmM7XG4rXG4rXHRcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgZmFsc2UsIFx1MDAyNnRzX2N1ciwgTlVMTCk7XG4rXHRcdGlmIChyYylcbitcdFx0XHRyZXR1cm4gcmM7XG4rXG4rXHRcdC8qIEVuc3VyZSB0aGUgMSBIeiB0aWNrIGRpZCBub3QgY3Jvc3MgYmV0d2VlbiB0aGUgdHdvIHJlYWRzXG4rXHRcdCAqIGFuZCB0aGF0IGVub3VnaCBtYXJnaW4gcmVtYWlucyB0byBjb21wbGV0ZSB0aGUgd3JpdGUuXG4rXHRcdCAqL1xuK1x0XHRkaWZmID0gdGltZXNwZWM2NF9zdWIodHNfbmV4dCwgdHNfY3VyKTtcbitcdFx0aWYgKGRpZmYudHZfc2VjIFx1MDAzZSAwIHx8XG4rXHRcdCAgICAoIWRpZmYudHZfc2VjIFx1MDAyNlx1MDAyNiBkaWZmLnR2X25zZWMgXHUwMDNlPSB0aHJlc2hvbGRfbnMpKVxuK1x0XHRcdGJyZWFrO1xuK1x0fVxuK1x0aWYgKGkgPT0gWkxfVE9EX01BWF9SRVRSSUVTKSB7XG4rXHRcdGRldl93YXJuKHpsZGV2LVx1MDAzZWRldixcbitcdFx0XHQgXCJEUExMJXUgVG9EIGFkanVzdCBmYWlsZWQgdG8gZ2V0IHN0YWJsZSBtYXJnaW5cXG5cIixcbitcdFx0XHQgY2gpO1xuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1x0fVxuK1xuK1x0LyogQXBwbHkgZGVsdGEgdG8gdGhlIG5leHQtSHogVG9EICovXG4rXHR0c19uZXh0ID0gdGltZXNwZWM2NF9hZGQodHNfbmV4dCwgZGVsdGEpO1xuK1x0aWYgKCF0aW1lc3BlYzY0X3ZhbGlkKFx1MDAyNnRzX25leHQpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZGV2LCBjaCwgdHNfbmV4dCk7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0IC0gd3JpdGUgZGVsdGEgZnJlcXVlbmN5IG9mZnNldCB0byBoYXJkd2FyZVxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICogQG9mZnNldDogZnJlcXVlbmN5IG9mZnNldCBpbiAyXi00OCBzdGVwc1xuKyAqXG4rICogQ29udGV4dDogQ2FsbGVyIG11c3QgaG9sZCB0aGUgcGVyLURQTEwgbG9jay5cbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldClcbit7XG4rXHRpbnQgcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9PRkZTRVQoY2gpLCBvZmZzZXQpO1xuK1x0aWYgKCFyYylcbitcdFx0emxkZXYtXHUwMDNlY2hhbltjaF0uZGZfb2Zmc2V0ID0gb2Zmc2V0O1xuK1xuK1x0cmV0dXJuIHJjO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlIC0gYWRqdXN0IERQTEwgcGhhc2UgdXNpbmcgVElFIHdyaXRlXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKiBAZGVsdGFfbnM6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMgKG11c3QgYmUgd2l0aGluICstMXMpXG4rICpcbisgKiBDb252ZXJ0cyBuYW5vc2Vjb25kcyB0byBUSUUgdW5pdHMgKDAuMDEgcHMpIGFuZCB3cml0ZXMgVElFIGRhdGFcbisgKiB0byB0aGUgc3BlY2lmaWVkIGNoYW5uZWwuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK2ludCB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgZGVsdGFfbnMpXG4re1xuK1x0czY0IHRpZV9kYXRhO1xuK1x0aW50IHJjO1xuK1xuK1x0aWYgKFdBUk5fT04oZGVsdGFfbnMgXHUwMDNjPSAtTlNFQ19QRVJfU0VDIHx8IGRlbHRhX25zIFx1MDAzZT0gTlNFQ19QRVJfU0VDKSlcbitcdFx0cmV0dXJuIC1FUkFOR0U7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkZXYtXHUwMDNldGllX2xvY2spO1xuK1xuK1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRJRSBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbitcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLFxuK1x0XHRcdFx0ICBaTF9EUExMX1RJRV9DVFJMX09QLFxuK1x0XHRcdFx0ICBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0LyogQ29udmVydCBucyB0byBUSUUgdW5pdHMgKDAuMDEgcHMgPSAxMF4tMTQgcykgKi9cbitcdHRpZV9kYXRhID0gZGVsdGFfbnMgKiAxMDAwMDBMTDtcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9EQVRBKGNoKSwgdGllX2RhdGEpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0ssIEJJVChjaCkpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsXG4rXHRcdFx0XHRaTF9EUExMX1RJRV9DVFJMX09QX1dSKTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAgLSBleGVjdXRlIG9uZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb25cbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqIEBvdXRfbWFzazogYml0bWFzayBvZiBvdXRwdXRzIHRvIHN0ZXBcbisgKiBAc3RlcF9jeWNsZXM6IHBoYXNlIHN0ZXAgaW4gc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzXG4rICogQHRvZF9zdGVwOiBhbHNvIHN0ZXAgdGhlIFRvRCBjb3VudGVyXG4rICpcbisgKiBBbGwgbWFza2VkIG91dHB1dHMgbXVzdCB1c2Ugc3ludGhlc2l6ZXJzIG9mIHRoZSBzYW1lIGZyZXF1ZW5jeSBzaW5jZVxuKyAqIHRoZSBzdGVwIHZhbHVlIGlzIGluIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcy5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4raW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuK1x0XHRcdCAgICB1MTYgb3V0X21hc2ssIHMzMiBzdGVwX2N5Y2xlcyxcbitcdFx0XHQgICAgYm9vbCB0b2Rfc3RlcClcbit7XG4rXHR1OCBjdHJsO1xuK1x0aW50IHJjO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZGV2LVx1MDAzZXBoYXNlX3N0ZXBfbG9jayk7XG4rXG4rXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgcGhhc2Ugc3RlcCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbitcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLFxuK1x0XHRcdFx0ICBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QLFxuK1x0XHRcdFx0ICBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VUyk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBLFxuK1x0XHRcdCAgICAgICBzdGVwX2N5Y2xlcyk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLLCBvdXRfbWFzayk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUiwgMSk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdGN0cmwgPSBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfRFBMTCwgY2gpIHxcbitcdCAgICAgICBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AsXG4rXHRcdFx0ICBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1dSSVRFKTtcbitcdGlmICh0b2Rfc3RlcClcbitcdFx0Y3RybCB8PSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX1RPRF9TVEVQO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLCBjdHJsKTtcbit9XG4rXG4gLyoqXG4gICogemwzMDczeF9jaGFuX3N0YXRlX3NldCAtIGNvbW1pdCBEUExMIGNoYW5uZWwgc3RhdGUgY2hhbmdlcyB0byBoYXJkd2FyZVxuICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhcbmluZGV4IGRjOWM2ZDk1YmRlZTcuLjk5YzNiNzA4OGY2NzggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaFxuQEAgLTUsMTAgKzUsMTIgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RkZGVmLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC90aW1lNjQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcInJlZ3MuaFwiXG4gXG4rc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wO1xuIHN0cnVjdCB6bDMwNzN4X2RldjtcbiBcbiAvKipcbkBAIC00Miw2ICs0NCwyMSBAQCBpbnQgemwzMDczeF9jaGFuX3N0YXRlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCxcbiBpbnQgemwzMDczeF9jaGFuX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7XG4gaW50IHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpO1xuIFxuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpO1xuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbitcdFx0XHQgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKTtcbitpbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cyk7XG4raW50IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuK1x0XHRcdCAgICBzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YSk7XG4raW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuK1x0XHRcdCAgICB1MTYgb3V0X21hc2ssIHMzMiBzdGVwX2N5Y2xlcywgYm9vbCB0b2Rfc3RlcCk7XG4rXG4raW50IHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgb2Zmc2V0KTtcbitcbitpbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKTtcbitcbiAvKipcbiAgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X2dldCAtIGdldCBjYWNoZWQgZGZfb2Zmc2V0IHZzIHRyYWNrZWQgcmVmZXJlbmNlXG4gICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuQEAgLTIwMCw2ICsyMTcsMjEgQEAgc3RhdGljIGlubGluZSBib29sIHpsMzA3M3hfY2hhbl9tb2RlX2lzX3JlZmxvY2soY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcbiBcdHJldHVybiB6bDMwNzN4X2NoYW5fbW9kZV9nZXQoY2hhbikgPT0gWkxfRFBMTF9NT0RFX1JFRlNFTF9NT0RFX1JFRkxPQ0s7XG4gfVxuIFxuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZSAtIGNoZWNrIGlmIGNoYW5uZWwgbW9kZSBzdXBwb3J0cyBUSUUgd3JpdGVcbisgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG4rICpcbisgKiBUSUUgd3JpdGUgaXMgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMgcmVnYXJkbGVzcyBvZiBsb2NrIHN0YXRlLlxuKyAqXG4rICogUmV0dXJuOiB0cnVlIGlmIFRJRSB3cml0ZSBpcyBzdXBwb3J0ZWQsIGZhbHNlIG90aGVyd2lzZVxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbFxuK3psMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxuK3tcbitcdHJldHVybiB6bDMwNzN4X2NoYW5fbW9kZV9pc19hdXRvKGNoYW4pIHx8XG4rXHRcdHpsMzA3M3hfY2hhbl9tb2RlX2lzX3JlZmxvY2soY2hhbik7XG4rfVxuK1xuIC8qKlxuICAqIHpsMzA3M3hfY2hhbl9pc19ob19yZWFkeSAtIGNoZWNrIGlmIGhvbGRvdmVyIGlzIHJlYWR5XG4gICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1xuaW5kZXggNWIyZDc3ZjJjMjI4OC4uMjMwZGYwOGUyN2NkMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1xuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jXG5AQCAtMzIyLDcgKzMyMiw3IEBAIGludCB6bDMwNzN4X3dyaXRlX3U0OChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLCB1NjQgdmFsKVxuIGludCB6bDMwNzN4X3BvbGxfemVyb191OChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLFxuIFx0XHRcdCB1OCBtYXNrLCB1bnNpZ25lZCBpbnQgdGltZW91dF91cylcbiB7XG4tI2RlZmluZSBaTF9QT0xMX1NMRUVQX1VTIDEwXG4rXHR1bnNpZ25lZCBpbnQgc2xlZXBfdXMgPSB0aW1lb3V0X3VzIC8gNTA7XG4gXHR1bnNpZ25lZCBpbnQgdmFsO1xuIFxuIFx0LyogQ2hlY2sgdGhlIHJlZ2lzdGVyIGlzIDhiaXQgKi9cbkBAIC0zMzYsNyArMzM2LDcgQEAgaW50IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsXG4gXHRyZWcgPSBaTF9SRUdfQUREUihyZWcpICsgWkxfUkFOR0VfT0ZGU0VUO1xuIFxuIFx0cmV0dXJuIHJlZ21hcF9yZWFkX3BvbGxfdGltZW91dCh6bGRldi1cdTAwM2VyZWdtYXAsIHJlZywgdmFsLCAhKHZhbCBcdTAwMjYgbWFzayksXG4tXHRcdFx0XHRcdFpMX1BPTExfU0xFRVBfVVMsIHRpbWVvdXRfdXMpO1xuK1x0XHRcdFx0XHRzbGVlcF91cywgdGltZW91dF91cyk7XG4gfVxuIFxuIGludCB6bDMwNzN4X21iX29wKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCBvcF9yZWcsIHU4IG9wX3ZhbCxcbkBAIC01MTEsNiArNTExLDExIEBAIHpsMzA3M3hfZGV2X3N0YXRlX2ZldGNoKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXG4gXHRpbnQgcmM7XG4gXHR1OCBpO1xuIFxuK1x0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1NURVBfVElNRV9NQVNLLFxuK1x0XHRcdCAgICAgIFx1MDAyNnpsZGV2LVx1MDAzZW91dF9zdGVwX3RpbWVfbWFzayk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFpMMzA3M1hfTlVNX1JFRlM7IGkrKykge1xuIFx0XHRyYyA9IHpsMzA3M3hfcmVmX3N0YXRlX2ZldGNoKHpsZGV2LCBpKTtcbiBcdFx0aWYgKHJjKSB7XG5AQCAtMTAzNCw2ICsxMDM5LDE0IEBAIGludCB6bDMwNzN4X2Rldl9wcm9iZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxuIFx0ICogYW5kL29yIHBvbGxzIGFyZSByZXF1aXJlZCB0byBiZSBkb25lIGF0b21pY2FsbHkuXG4gXHQgKi9cbiBcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVx1MDAzZWRldiwgXHUwMDI2emxkZXYtXHUwMDNlbXVsdGlvcF9sb2NrKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXHUwMDNlZGV2LCByYyxcbitcdFx0XHRcdCAgICAgXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcblwiKTtcbitcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVx1MDAzZWRldiwgXHUwMDI2emxkZXYtXHUwMDNlcGhhc2Vfc3RlcF9sb2NrKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXHUwMDNlZGV2LCByYyxcbitcdFx0XHRcdCAgICAgXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcblwiKTtcbitcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVx1MDAzZWRldiwgXHUwMDI2emxkZXYtXHUwMDNldGllX2xvY2spO1xuIFx0aWYgKHJjKVxuIFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIHJjLFxuIFx0XHRcdFx0ICAgICBcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxuXCIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaFxuaW5kZXggNzhkYzIwOGYzZWVhMi4uNjdjMTBlMjU5NTExOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oXG5AQCAtMjYsNiArMjYsMTAgQEAgc3RydWN0IHpsMzA3M3hfZHBsbDtcbiAjZGVmaW5lIFpMX1BPTExfSFdSRUdfVElNRU9VVF9VU1x0KDUwICogVVNFQ19QRVJfTVNFQylcbiAjZGVmaW5lIFpMX1BPTExfTUJfVElNRU9VVF9VU1x0XHQoMzAgKiBVU0VDX1BFUl9NU0VDKVxuICNkZWZpbmUgWkxfUE9MTF9QSEFTRV9FUlJfVElNRU9VVF9VU1x0KDUwICogVVNFQ19QRVJfTVNFQylcbisjZGVmaW5lIFpMX1BPTExfUEhBU0VfU1RFUF9USU1FT1VUX1VTXHQoMzAwMCAqIFVTRUNfUEVSX01TRUMpXG4rI2RlZmluZSBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTXHQoMTAwMCAqIFVTRUNfUEVSX01TRUMpXG4rI2RlZmluZSBaTF9QT0xMX1RPRF9SRF9USU1FT1VUX1VTXHQoMzAgKiBVU0VDX1BFUl9NU0VDKVxuKyNkZWZpbmUgWkxfUE9MTF9UT0RfV1JfVElNRU9VVF9VU1x0KDEwMDAgKiBVU0VDX1BFUl9NU0VDKVxuIFxuIGVudW0gemwzMDczeF9mbGFncyB7XG4gXHRaTDMwNzNYX0ZMQUdfUkVGX1BIQVNFX0NPTVBfMzJfQklULFxuQEAgLTU1LDYgKzU5LDggQEAgc3RydWN0IHpsMzA3M3hfY2hpcF9pbmZvIHtcbiAgKiBAcmVnbWFwOiByZWdtYXAgdG8gYWNjZXNzIGRldmljZSByZWdpc3RlcnNcbiAgKiBAaW5mbzogZGV0ZWN0ZWQgY2hpcCBpbmZvXG4gICogQG11bHRpb3BfbG9jazogdG8gc2VyaWFsaXplIG11bHRpcGxlIHJlZ2lzdGVyIG9wZXJhdGlvbnNcbisgKiBAdGllX2xvY2s6IHRvIHNlcmlhbGl6ZSBUSUUgd3JpdGUgb3BlcmF0aW9uc1xuKyAqIEBwaGFzZV9zdGVwX2xvY2s6IHRvIHNlcmlhbGl6ZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb25zXG4gICogQHJlZjogYXJyYXkgb2YgaW5wdXQgcmVmZXJlbmNlcycgaW52YXJpYW50c1xuICAqIEBvdXQ6IGFycmF5IG9mIG91dHMnIGludmFyaWFudHNcbiAgKiBAc3ludGg6IGFycmF5IG9mIHN5bnRocycgaW52YXJpYW50c1xuQEAgLTYzLDYgKzY5LDcgQEAgc3RydWN0IHpsMzA3M3hfY2hpcF9pbmZvIHtcbiAgKiBAa3dvcmtlcjogdGhyZWFkIGZvciBwZXJpb2RpYyB3b3JrXG4gICogQHdvcms6IHBlcmlvZGljIHdvcmtcbiAgKiBAY2xvY2tfaWQ6IGNsb2NrIGlkIG9mIHRoZSBkZXZpY2VcbisgKiBAb3V0X3N0ZXBfdGltZV9tYXNrOiBvdXRwdXQgc3RlcC10aW1lIG1hc2sgKGRldmljZS1nbG9iYWwpXG4gICogQHBoYXNlX2F2Z19mYWN0b3I6IHBoYXNlIG9mZnNldCBtZWFzdXJlbWVudCBhdmVyYWdpbmcgZmFjdG9yXG4gICogQGZyZXFfbW9uaXRvcjogaXMgZnJlcXVlbmN5IG1vbml0b3IgZW5hYmxlZFxuICAqL1xuQEAgLTcxLDYgKzc4LDggQEAgc3RydWN0IHpsMzA3M3hfZGV2IHtcbiBcdHN0cnVjdCByZWdtYXBcdFx0XHQqcmVnbWFwO1xuIFx0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hpcF9pbmZvXHQqaW5mbztcbiBcdHN0cnVjdCBtdXRleFx0XHRcdG11bHRpb3BfbG9jaztcbitcdHN0cnVjdCBtdXRleFx0XHRcdHRpZV9sb2NrO1xuK1x0c3RydWN0IG11dGV4XHRcdFx0cGhhc2Vfc3RlcF9sb2NrO1xuIFxuIFx0LyogSW52YXJpYW50cyAqL1xuIFx0c3RydWN0IHpsMzA3M3hfcmVmXHRyZWZbWkwzMDczWF9OVU1fUkVGU107XG5AQCAtODcsNiArOTYsNyBAQCBzdHJ1Y3QgemwzMDczeF9kZXYge1xuIFxuIFx0LyogUGVyLWNoaXAgcGFyYW1ldGVycyAqL1xuIFx0dTY0XHRcdFx0Y2xvY2tfaWQ7XG4rXHR1MTZcdFx0XHRvdXRfc3RlcF90aW1lX21hc2s7XG4gXHR1OFx0XHRcdHBoYXNlX2F2Z19mYWN0b3I7XG4gXHRib29sXHRcdFx0ZnJlcV9tb25pdG9yO1xuIH07XG5AQCAtMzA4LDYgKzMxOCwxOSBAQCB6bDMwNzN4X2Rldl9vdXRfaXNfZW5hYmxlZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleClcbiBcdHJldHVybiB6bDMwNzN4X3N5bnRoX2lzX2VuYWJsZWQoc3ludGgpIFx1MDAyNlx1MDAyNiB6bDMwNzN4X291dF9pc19lbmFibGVkKG91dCk7XG4gfVxuIFxuKy8qKlxuKyAqIHpsMzA3M3hfZGV2X291dF9pc19zdGVwcGVkIC0gY2hlY2sgaWYgb3V0cHV0IGlzIGluIHN0ZXAtdGltZSBtYXNrXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGluZGV4OiBvdXRwdXQgaW5kZXhcbisgKlxuKyAqIFJldHVybjogdHJ1ZSBpZiBvdXRwdXQgaXMgYWZmZWN0ZWQgYnkgc3RlcC10aW1lIG9wZXJhdGlvbnNcbisgKi9cbitzdGF0aWMgaW5saW5lIGJvb2xcbit6bDMwNzN4X2Rldl9vdXRfaXNfc3RlcHBlZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleClcbit7XG4rXHRyZXR1cm4gISEoemxkZXYtXHUwMDNlb3V0X3N0ZXBfdGltZV9tYXNrIFx1MDAyNiBCSVQoaW5kZXgpKTtcbit9XG4rXG4gLyoqXG4gICogemwzMDczeF9kZXZfb3V0X2RwbGxfZ2V0IC0gZ2V0IERQTEwgSUQgdGhlIG91dHB1dCBpcyBkcml2ZW4gYnlcbiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcbmluZGV4IDA0ODhhZTZhYzQ4NmMuLmE2ODZkZDUyYmZhYzkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuY1xuQEAgLTIsNiArMiw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2J1Zy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29udGFpbmVyX29mLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZfcHJpbnRrLmhcdTAwM2VcbkBAIC0xMyw2ICsxNCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3ByaW50Zi5oXHUwMDNlXG4gXG5AQCAtMjI3NSw0NSArMjI3NywzNzUgQEAgemwzMDczeF9kcGxsX2luaXRfZmluZV9waGFzZV9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcbiBcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfU1lOVEhfUEhBU0VfU0hJRlRfQ1RSTCwgMHgwMSk7XG4gfVxuIFxuKy8qIE1heGltdW0gZnJlcXVlbmN5IGFkanVzdG1lbnQ6ICstMSUgb2Ygbm9taW5hbCBpbiBwcGIgKi9cbisjZGVmaW5lIFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESlx0MTAwMDAwMDBcbitcbiAvKipcbi0gKiB6bDMwNzN4X2RwbGxfYWxsb2MgLSBhbGxvY2F0ZSBEUExMIGRldmljZVxuLSAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuLSAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlclxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCAtIHJlYWQgY3VycmVudCB0aW1lIGZyb20gVG9EIGNvdW50ZXJzXG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4rICogQHRzOiB0aW1lc3BlYyB0byBzdG9yZSBjdXJyZW50IHRpbWVcbisgKiBAc3RzOiBvcHRpb25hbCBzeXN0ZW0gdGltZXN0YW1wIHBhaXIgZm9yIGNyb3NzLXRpbWVzdGFtcGluZ1xuICAqXG4tICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cylcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRwbGwtXHUwMDNlZGV2LCB6bGRwbGwtXHUwMDNlaWQsIGZhbHNlLCB0cywgc3RzKTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQgLSBzZXQgVG9EIGNvdW50ZXJzIHRvIGdpdmVuIHRpbWVcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbisgKiBAdHM6IHRpbWVzcGVjIHdpdGggdGltZSB0byBzZXRcbiAgKlxuLSAqIFJldHVybjogcG9pbnRlciB0byBEUExMIGRldmljZSBvbiBzdWNjZXNzLCBlcnJvciBwb2ludGVyIG9uIGVycm9yXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiAgKi9cbi1zdHJ1Y3QgemwzMDczeF9kcGxsICpcbi16bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXG4rXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpXG4ge1xuLVx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsO1xuK1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXG4rXHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuIFxuLVx0emxkcGxsID0ga3phbGxvY19vYmooKnpsZHBsbCk7XG4tXHRpZiAoIXpsZHBsbClcbi1cdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuIFxuLVx0emxkcGxsLVx1MDAzZWRldiA9IHpsZGV2O1xuLVx0emxkcGxsLVx1MDAzZWlkID0gY2g7XG4tXHRtdXRleF9pbml0KFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbi1cdElOSVRfTElTVF9IRUFEKFx1MDAyNnpsZHBsbC1cdTAwM2VwaW5zKTtcbitcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCwgKnRzKTtcbit9XG4gXG4tXHRyZXR1cm4gemxkcGxsO1xuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwIC0gYWRqdXN0IHN1Yi1zZWNvbmQgdGltZSB2aWEgcGhhc2Ugc3RlcFxuKyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbFxuKyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzIChtdXN0IGJlIHdpdGhpbiAoLU5TRUNfUEVSX1NFQyxcbisgKiAgICAgICAgIE5TRUNfUEVSX1NFQykpXG4rICpcbisgKiBVc2VzIHRoZSBvdXRwdXQgcGhhc2Ugc3RlcCBtZWNoYW5pc20gd2l0aCB0b2Rfc3RlcD0xIHRvIGFkanVzdCBib3RoXG4rICogdGhlIG91dHB1dCBjbG9jayBwaGFzZSBhbmQgdGhlIFRvRCBjb3VudGVyIHNpbXVsdGFuZW91c2x5LiBUaGlzIGtlZXBzXG4rICogb3V0cHV0cyBhbmQgVG9EIGNvaGVyZW50LiBPbmx5IHZhbGlkIGZvciBOQ08uXG4rICpcbisgKiBPdXRwdXRzIGFyZSBncm91cGVkIGJ5IHN5bnRoZXNpemVyIHNpbmNlIHRoZSBwaGFzZSBzdGVwIHZhbHVlIGlzIGluXG4rICogc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzLiBUaGUgZmlyc3Qgc3ludGggZ3JvdXAgd2l0aCBlbmFibGVkIG91dHB1dHNcbisgKiB1c2VzIHRvZF9zdGVwIHRvIGFkanVzdCBib3RoIG91dHB1dHMgYW5kIHRoZSBUb0QgY291bnRlci4gUmVtYWluaW5nXG4rICogZ3JvdXBzIHN0ZXAgb3V0cHV0cyBvbmx5LiBJZiBubyBzeW50aCBoYXMgZW5hYmxlZCBvdXRwdXRzLCB0aGUgVG9EXG4rICogY291bnRlciBpcyBzdGVwcGVkIGFsb25lIHVzaW5nIGFuIGVtcHR5IG91dHB1dCBtYXNrICh0aGUgRlcgdXNlc1xuKyAqIHRoZSBmaXJzdCBlbmFibGVkIHN5bnRoJ3MgcGVyaW9kIGZvciB0aGUgY29udmVyc2lvbikuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVPUE5PVFNVUFAgaWYgbm8gc3ludGhzIGF2YWlsYWJsZSwgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLFxuK1x0XHRcdFx0XHQgICAgICAgczY0IGRlbHRhKVxuK3tcbitcdHUxNiBzeW50aF9tYXNrW1pMMzA3M1hfTlVNX1NZTlRIU10gPSB7fTtcbitcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuK1x0Y29uc3Qgc3RydWN0IHpsMzA3M3hfc3ludGggKnN5bnRoO1xuK1x0c3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbjtcbitcdHUzMiBmaXJzdF9zeW50aF9mcmVxID0gMDtcbitcdGJvb2wgdG9kX3N0ZXBwZWQgPSBmYWxzZTtcbitcdHMzMiBzdGVwX2N5Y2xlcztcbitcdHUzMiBzeW50aF9mcmVxO1xuK1x0aW50IHJjO1xuK1x0dTggaTtcbitcbitcdC8qIEJ1aWxkIHBlci1zeW50aCBvdXRwdXQgbWFza3MgZnJvbSByZWdpc3RlcmVkIG91dHB1dCBwaW5zICovXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBpbiwgXHUwMDI2emxkcGxsLVx1MDAzZXBpbnMsIGxpc3QpIHtcbitcdFx0dTggb3V0X2lkLCBzeW50aF9pZDtcbitcbitcdFx0aWYgKHpsMzA3M3hfZHBsbF9pc19pbnB1dF9waW4ocGluKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0b3V0X2lkID0gemwzMDczeF9vdXRwdXRfcGluX291dF9nZXQocGluLVx1MDAzZWlkKTtcbitcbitcdFx0aWYgKCF6bDMwNzN4X2Rldl9vdXRfaXNfc3RlcHBlZCh6bGRldiwgb3V0X2lkKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0c3ludGhfaWQgPSB6bDMwNzN4X2Rldl9vdXRfc3ludGhfZ2V0KHpsZGV2LCBvdXRfaWQpO1xuK1x0XHRpZiAoc3ludGhfaWQgXHUwMDNlPSBaTDMwNzNYX05VTV9TWU5USFMpIHtcbitcdFx0XHRkZXZfd2Fybih6bGRldi1cdTAwM2VkZXYsIFwiVW5leHBlY3RlZCBzeW50aCBpZCBmb3IgT1VUJXVcXG5cIixcbitcdFx0XHRcdCBvdXRfaWQpO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXHRcdHN5bnRoX21hc2tbc3ludGhfaWRdIHw9IEJJVChvdXRfaWQpO1xuK1x0fVxuK1xuK1x0LyogUHJvY2VzcyBlYWNoIHN5bnRoIGdyb3VwICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBaTDMwNzNYX05VTV9TWU5USFM7IGkrKykge1xuK1x0XHRzeW50aCA9IHpsMzA3M3hfc3ludGhfc3RhdGVfZ2V0KHpsZGV2LCBpKTtcbitcdFx0aWYgKCF6bDMwNzN4X3N5bnRoX2lzX2VuYWJsZWQoc3ludGgpIHx8XG4rXHRcdCAgICB6bDMwNzN4X3N5bnRoX2RwbGxfZ2V0KHN5bnRoKSAhPSB6bGRwbGwtXHUwMDNlaWQpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHN5bnRoX2ZyZXEgPSB6bDMwNzN4X3N5bnRoX2ZyZXFfZ2V0KHN5bnRoKTtcbitcbitcdFx0LyogUmVtZW1iZXIgZmlyc3QgZW5hYmxlZCBzeW50aCBmcmVxIGZvciBUb0Qtb25seSBmYWxsYmFjayAqL1xuK1x0XHRpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpXG4rXHRcdFx0Zmlyc3Rfc3ludGhfZnJlcSA9IHN5bnRoX2ZyZXE7XG4rXG4rXHRcdGlmICghc3ludGhfbWFza1tpXSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0LyogU2FmZSBmb3IgczMyOiBtYXggc3ludGggZnJlcSBpcyA3NTAgTUh6ICovXG4rXHRcdHN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIHN5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7XG4rXG4rXHRcdHJjID0gemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCxcbitcdFx0XHRcdFx0ICAgICBzeW50aF9tYXNrW2ldLCBzdGVwX2N5Y2xlcyxcbitcdFx0XHRcdFx0ICAgICAhdG9kX3N0ZXBwZWQpO1xuK1x0XHRpZiAocmMpIHtcbitcdFx0XHRpZiAodG9kX3N0ZXBwZWQpIHtcbitcdFx0XHRcdGRldl93YXJuKHpsZGV2LVx1MDAzZWRldixcbitcdFx0XHRcdFx0IFwiUGFydGlhbCBwaGFzZSBzdGVwIGZhaWx1cmVcXG5cIik7XG4rXHRcdFx0XHRyZXR1cm4gMDtcbitcdFx0XHR9XG4rXHRcdFx0cmV0dXJuIHJjO1xuK1x0XHR9XG4rXHRcdHRvZF9zdGVwcGVkID0gdHJ1ZTtcbitcdH1cbitcbitcdGlmICghZmlyc3Rfc3ludGhfZnJlcSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0LyogTm8gZW5hYmxlZCBvdXRwdXRzIGZvdW5kOyBzdGVwIFRvRCBjb3VudGVyIG9ubHkgdXNpbmcgdGhlXG4rXHQgKiBmaXJzdCBlbmFibGVkIHN5bnRoJ3MgcGVyaW9kIChlbXB0eSBvdXRwdXQgbWFzaykuXG4rXHQgKi9cbitcdGlmICghdG9kX3N0ZXBwZWQpIHtcbitcdFx0c3RlcF9jeWNsZXMgPSBkaXZfczY0KGRlbHRhICogZmlyc3Rfc3ludGhfZnJlcSwgTlNFQ19QRVJfU0VDKTtcbitcdFx0cmV0dXJuIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsIDAsXG4rXHRcdFx0XHRcdCAgICAgICBzdGVwX2N5Y2xlcywgdHJ1ZSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gLyoqXG4tICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlXG4tICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lIC0gYWRqdXN0IFBUUCBjbG9jayB0aW1lXG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4rICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHNcbiAgKlxuLSAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuXG4rICogRm9yIE5DTywgbGFyZ2UgZGVsdGFzIChcdTAwM2U9IDEgc2Vjb25kKSBhcmUgc3BsaXQgaW50byBhIFRvRFxuKyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciB0aGUgc2Vjb25kcyBwYXJ0IGFuZCBhbiBvdXRwdXQgcGhhc2Ugc3RlcCBmb3JcbisgKiB0aGUgc3ViLXNlY29uZCByZW1haW5kZXIuIFN1Yi1zZWNvbmQgZGVsdGFzIHVzZSBwaGFzZSBzdGVwIGRpcmVjdGx5LFxuKyAqIGZhbGxpbmcgYmFjayB0byBUb0QgcmVhZC1tb2RpZnktd3JpdGUgaWYgcGhhc2Ugc3RlcCBpcyB1bmF2YWlsYWJsZS5cbisgKiBJbiBBVVRPL1JFRkxPQ0sgbW9kZXMsIGxhcmdlIGRlbHRhcyBhcmUgc3BsaXQgaW50byBUb0RcbisgKiByZWFkLW1vZGlmeS13cml0ZSBmb3Igc2Vjb25kcyBhbmQgVElFIHdyaXRlIGZvciB0aGUgc3ViLXNlY29uZFxuKyAqIHJlbWFpbmRlci4gU3ViLXNlY29uZCBkZWx0YXMgdXNlIFRJRSB3cml0ZSBkaXJlY3RseS5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4gICovXG4tdm9pZFxuLXpsMzA3M3hfZHBsbF9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHM2NCBkZWx0YSlcbiB7XG4tXHRXQVJOKHpsZHBsbC1cdTAwM2VkcGxsX2RldiwgXCJEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXFxuXCIpO1xuK1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXG4rXHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuK1x0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4rXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xuK1x0Ym9vbCBzZWNfYWRqdXN0ZWQgPSBmYWxzZTtcbitcdHN0cnVjdCB0aW1lc3BlYzY0IHRzO1xuK1x0aW50IHJjO1xuIFxuLVx0bXV0ZXhfZGVzdHJveShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4tXHRrZnJlZSh6bGRwbGwpO1xuK1x0aWYgKCFkZWx0YSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuK1x0LyogTW9kZXMgd2l0aG91dCBwaGFzZSBzdGVwIG9yIFRJRSB1c2UgcGxhaW4gVG9EIGFkanVzdCAqL1xuK1x0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCk7XG4rXHRpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKVxuK1x0XHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCxcbitcdFx0XHRcdFx0ICAgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTtcbitcbitcdC8qIFNwbGl0IG9mZiBzZWNvbmRzIHZpYSBUb0QgcmVhZC1tb2RpZnktd3JpdGUgc28gdGhlIHN1Yi1zZWNvbmRcbitcdCAqIHJlbWFpbmRlciBjYW4gYmUgYXBwbGllZCB0aHJvdWdoIHRoZSBvdXRwdXQtY29oZXJlbnQgbWVjaGFuaXNtXG4rXHQgKiAocGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUpLlxuK1x0ICovXG4rXHRpZiAoZGVsdGEgXHUwMDNlPSBOU0VDX1BFUl9TRUMgfHwgZGVsdGEgXHUwMDNjPSAtTlNFQ19QRVJfU0VDKSB7XG4rXHRcdHMzMiByZW1haW5kZXI7XG4rXG4rXHRcdHRzLnR2X3NlYyA9IGRpdl9zNjRfcmVtKGRlbHRhLCBOU0VDX1BFUl9TRUMsIFx1MDAyNnJlbWFpbmRlcik7XG4rXHRcdHRzLnR2X25zZWMgPSAwO1xuK1x0XHRkZWx0YSA9IHJlbWFpbmRlcjtcbitcbitcdFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCB0cyk7XG4rXHRcdGlmIChyYylcbitcdFx0XHRyZXR1cm4gcmM7XG4rXG4rXHRcdC8qIE5vIHN1Yi1zZWNvbmQgcmVtYWluZGVyLCBkb25lICovXG4rXHRcdGlmICghZGVsdGEpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXG4rXHRcdC8qIFdhaXQgZm9yIHRoZSBUb0Qgd3JpdGUgdG8gYmUgYXBwbGllZCBhdCB0aGUgMSBIeiBlZGdlXG4rXHRcdCAqIGJlZm9yZSBpc3N1aW5nIHBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlLCBzbyB0aGUgcGVuZGluZ1xuK1x0XHQgKiBXUl9ORVhUXzFIWiBkb2VzIG5vdCBvdmVyd3JpdGUgdGhlIHN1Yi1zZWNvbmQgYWRqdXN0bWVudC5cbitcdFx0ICovXG4rXHRcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQpO1xuK1x0XHRpZiAocmMpXG4rXHRcdFx0cmV0dXJuIHJjO1xuK1xuK1x0XHRzZWNfYWRqdXN0ZWQgPSB0cnVlO1xuK1x0fVxuK1xuK1x0LyogQXBwbHkgc3ViLXNlY29uZCBkZWx0YSB2aWEgcGhhc2Ugc3RlcCAoTkNPKSBvciBUSUUgd3JpdGUgKi9cbitcdGlmICh6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikpIHtcbitcdFx0cmMgPSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCh6bGRwbGwsIGRlbHRhKTtcbitcdFx0aWYgKCFyYylcbitcdFx0XHRyZXR1cm4gMDtcbitcdH0gZWxzZSB7XG4rXHRcdHJjID0gemwzMDczeF9jaGFuX3RpZV93cml0ZSh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCBkZWx0YSk7XG4rXHRcdGlmICghcmMpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHQvKiBQaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSBmYWlsZWQsIGZhbGwgYmFjayB0byBUb0QgYWRqdXN0ICovXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsXG4rXHRcdFx0XHQgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTtcbitcbitcdC8qIEluIHRoZSB1bmxpa2VseSBldmVudCB0aGF0IGJvdGggcGhhc2Ugc3RlcC9USUUgd3JpdGUgYW5kIGZhbGxiYWNrXG4rXHQgKiBUb0QgYWRqdXN0IGZhaWwgYWZ0ZXIgc2Vjb25kcyB3ZXJlIGFscmVhZHkgY29tbWl0dGVkLCByZXR1cm5cbitcdCAqIHN1Y2Nlc3MgdG8gcHJldmVudCB0aGUgUFRQIHNlcnZvIGZyb20gcmV0cnlpbmcgdGhlIGZ1bGwgZGVsdGEgYW5kXG4rXHQgKiBhcHBseWluZyBzZWNvbmRzIGFnYWluLiBUaGUgc3ViLXNlY29uZCByZXNpZHVhbCB3aWxsIHNlbGYtY29ycmVjdFxuK1x0ICogaW4gdGhlIG5leHQgc2Vydm8gY3ljbGUuXG4rXHQgKi9cbitcdGlmIChyYyBcdTAwMjZcdTAwMjYgc2VjX2FkanVzdGVkKSB7XG4rXHRcdGRldl93YXJuKHpsZGV2LVx1MDAzZWRldixcbitcdFx0XHQgXCJTdWItc2Vjb25kIGFkanVzdG1lbnQgZmFpbGVkIGFmdGVyIHNlY29uZHMgYXBwbGllZFxcblwiKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmM7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSAtIGFkanVzdCBQVFAgY2xvY2sgZnJlcXVlbmN5XG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4rICogQHNjYWxlZF9wcG06IGZyZXF1ZW5jeSBhZGp1c3RtZW50IGluIHNjYWxlZCBwcG0gKHBwbSAqIDJeMTYpXG4rICpcbisgKiBPbmx5IHN1cHBvcnRlZCBmb3IgTkNPLiBXcml0ZXMgdGhlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgcmVnaXN0ZXIuXG4rICpcbisgKiBSZXR1cm46XG4rICogKiAlMFx0XHRcdC0gc3VjY2VzcyBvciBAc2NhbGVkX3BwbSBpcyB6ZXJvIChuby1vcClcbisgKiAqICUtRU9QTk9UU1VQUFx0LSBOQ08gcGluIGlzIG5vdCBjb25uZWN0ZWQgYW5kIEBzY2FsZWRfcHBtIGlzIG5vbi16ZXJvXG4rICogKiBuZWdhdGl2ZVx0XHQtIG90aGVyIGVycm9yXG4rICovXG4rc3RhdGljIGludFxuK3psMzA3M3hfZHBsbF9wdHBfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGxvbmcgc2NhbGVkX3BwbSlcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xuK1x0czY0IG9mZnNldDtcbitcbitcdC8qIENvbnZlcnQgc2NhbGVkX3BwbSB0byBkZl9vZmZzZXQgaW4gMl4tNDggc3RlcHM6XG4rXHQgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDJeMzIpIC8gMTBeNlxuK1x0ICpcbitcdCAqIFNpbXBsaWZ5IHRvIGF2b2lkIG92ZXJmbG93OlxuK1x0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjI2KSAvIDVeNlxuK1x0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiA2NzEwODg2NCkgLyAxNTYyNVxuK1x0ICovXG4rXHRvZmZzZXQgPSAtZGl2X3M2NCgoczY0KXNjYWxlZF9wcG0gKiA2NzEwODg2NExMLCAxNTYyNSk7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuK1x0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkcGxsLVx1MDAzZWRldiwgemxkcGxsLVx1MDAzZWlkKTtcbitcdGlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKVxuK1x0XHRyZXR1cm4gc2NhbGVkX3BwbSA/IC1FT1BOT1RTVVBQIDogMDtcbitcdGlmIChvZmZzZXQgPT0gY2hhbi1cdTAwM2VkZl9vZmZzZXQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCwgb2Zmc2V0KTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSAtIGFkanVzdCBQVFAgY2xvY2sgcGhhc2VcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbisgKiBAZGVsdGE6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHNcbisgKlxuKyAqIE9ubHkgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMuIFVzZXMgVElFIHdyaXRlIGZvclxuKyAqIG5hbm9zZWNvbmQgcmVzb2x1dGlvbiBwaGFzZSBhZGp1c3RtZW50LlxuKyAqXG4rICogUmV0dXJuOlxuKyAqICogJTBcdFx0XHQtIHN1Y2Nlc3Mgb3IgQGRlbHRhIGlzIHplcm8gKG5vLW9wKVxuKyAqICogJS1FT1BOT1RTVVBQXHQtIG1vZGUgZG9lcyBub3Qgc3VwcG9ydCBUSUUgYW5kIEBkZWx0YSBpcyBub24temVyb1xuKyAqICogbmVnYXRpdmVcdFx0LSBvdGhlciBlcnJvclxuKyAqL1xuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHMzMiBkZWx0YSlcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbitcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XG4rXG4rXHRpZiAoIWRlbHRhKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXG4rXHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLVx1MDAzZWlkKTtcbitcbitcdGlmICghemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRyZXR1cm4gemwzMDczeF9jaGFuX3RpZV93cml0ZSh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCBkZWx0YSk7XG4rfVxuK1xuK3N0YXRpYyBzMzJcbit6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyBfX2Fsd2F5c191bnVzZWQpXG4re1xuK1x0LyogSFcgbGltaXRzIFRJRSB3cml0ZSB0byArLTEgc2Vjb25kLiBSZXR1cm4gdGhlIGNvbnN0YW50IEhXXG4rXHQgKiBsaW1pdCBhbmQgbGV0IGFkanBoYXNlIGhhbmRsZSBtb2RlLXNwZWNpZmljIGNoZWNrcy5cbitcdCAqL1xuK1x0cmV0dXJuIE5TRUNfUEVSX1NFQyAtIDE7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvID0ge1xuK1x0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4rXHQubWF4X2Fkalx0PSBaTDMwNzNYX0RQTExfUFRQX01BWF9BREosXG4rXHQuZ2V0dGltZXg2NFx0PSB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQsXG4rXHQuc2V0dGltZTY0XHQ9IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0LFxuK1x0LmFkanRpbWVcdD0gemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lLFxuK1x0LmFkamZpbmVcdD0gemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lLFxuK1x0LmFkanBoYXNlXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2UsXG4rXHQuZ2V0bWF4cGhhc2VcdD0gemwzMDczeF9kcGxsX3B0cF9nZXRtYXhwaGFzZSxcbit9O1xuK1xuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIgLSByZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsXG4rICogQHpsZHBsbDogRFBMTCBjaGFubmVsIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3JcbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbitcdHN0cnVjdCBwdHBfY2xvY2sgKnB0cF9jbG9jaztcbitcbitcdHNucHJpbnRmKHpsZHBsbC1cdTAwM2VwdHBfaW5mby5uYW1lLCBzaXplb2YoemxkcGxsLVx1MDAzZXB0cF9pbmZvLm5hbWUpLFxuK1x0XHQgXCIlcy1kcGxsJXVcIiwgZGV2X25hbWUoemxkZXYtXHUwMDNlZGV2KSwgemxkcGxsLVx1MDAzZWlkKTtcbitcbitcdHB0cF9jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcihcdTAwMjZ6bGRwbGwtXHUwMDNlcHRwX2luZm8sIHpsZGV2LVx1MDAzZWRldik7XG4rXHRpZiAoSVNfRVJSKHB0cF9jbG9jaykpIHtcbitcdFx0ZGV2X2Vycih6bGRldi1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgRFBMTCV1XFxuXCIsXG4rXHRcdFx0emxkcGxsLVx1MDAzZWlkKTtcbitcdFx0cmV0dXJuIFBUUl9FUlIocHRwX2Nsb2NrKTtcbitcdH1cbitcbitcdHpsZHBsbC1cdTAwM2VwdHBfY2xvY2sgPSBwdHBfY2xvY2s7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyIC0gdW5yZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsXG4rICogQHpsZHBsbDogRFBMTCBjaGFubmVsIHRvIHVucmVnaXN0ZXIgUFRQIGNsb2NrIGZvclxuKyAqL1xuK3N0YXRpYyB2b2lkIHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4re1xuK1x0aWYgKCFJU19FUlJfT1JfTlVMTCh6bGRwbGwtXHUwMDNlcHRwX2Nsb2NrKSkge1xuK1x0XHRwdHBfY2xvY2tfdW5yZWdpc3Rlcih6bGRwbGwtXHUwMDNlcHRwX2Nsb2NrKTtcbitcdFx0emxkcGxsLVx1MDAzZXB0cF9jbG9jayA9IE5VTEw7XG4rXHR9XG4gfVxuIFxuIC8qKlxuQEAgLTIzOTgsNiArMjczMCw0OCBAQCB6bDMwNzN4X2RwbGxfcmVmX3N5bmNfcGFpcnNfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9hbGxvYyAtIGFsbG9jYXRlIERQTEwgZGV2aWNlXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyXG4rICpcbisgKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuXG4rICpcbisgKiBSZXR1cm46IHBvaW50ZXIgdG8gRFBMTCBkZXZpY2Ugb24gc3VjY2VzcywgZXJyb3IgcG9pbnRlciBvbiBlcnJvclxuKyAqL1xuK3N0cnVjdCB6bDMwNzN4X2RwbGwgKlxuK3psMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7XG4rXG4rXHR6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTtcbitcdGlmICghemxkcGxsKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcbitcdHpsZHBsbC1cdTAwM2VkZXYgPSB6bGRldjtcbitcdHpsZHBsbC1cdTAwM2VpZCA9IGNoO1xuK1x0emxkcGxsLVx1MDAzZXB0cF9pbmZvID0gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvO1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXHRJTklUX0xJU1RfSEVBRChcdTAwMjZ6bGRwbGwtXHUwMDNlcGlucyk7XG4rXG4rXHRyZXR1cm4gemxkcGxsO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfZnJlZSAtIGZyZWUgRFBMTCBkZXZpY2VcbisgKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmVcbisgKlxuKyAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuXG4rICovXG4rdm9pZFxuK3psMzA3M3hfZHBsbF9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbit7XG4rXHRXQVJOKHpsZHBsbC1cdTAwM2VkcGxsX2RldiwgXCJEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXFxuXCIpO1xuK1xuK1x0bXV0ZXhfZGVzdHJveShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXHRrZnJlZSh6bGRwbGwpO1xuK31cbitcbiAvKipcbiAgKiB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIgLSByZWdpc3RlciBEUExMIGRldmljZSBhbmQgYWxsIGl0cyBwaW5zXG4gICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXG5AQCAtMjQyOCw2ICsyODAyLDEzIEBAIHpsMzA3M3hfZHBsbF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4gXHRcdHJldHVybiByYztcbiBcdH1cbiBcbitcdHJjID0gemwzMDczeF9kcGxsX3B0cF9yZWdpc3Rlcih6bGRwbGwpO1xuK1x0aWYgKHJjKSB7XG4rXHRcdHpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTtcbitcdFx0emwzMDczeF9kcGxsX2RldmljZV91bnJlZ2lzdGVyKHpsZHBsbCk7XG4rXHRcdHJldHVybiByYztcbitcdH1cbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0yNDQxLDcgKzI4MjIsNyBAQCB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIHZvaWRcbiB6bDMwNzN4X2RwbGxfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4ge1xuLVx0LyogVW5yZWdpc3RlciBhbGwgcGlucyBhbmQgZHBsbCAqL1xuK1x0emwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHpsZHBsbCk7XG4gXHR6bDMwNzN4X2RwbGxfcGluc191bnJlZ2lzdGVyKHpsZHBsbCk7XG4gXHR6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXG5pbmRleCBmYWViYzQwMmJhMWI3Li45OTMyMjFkYzYzMjQ5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmhcbkBAIC01LDYgKzUsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RwbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiY29yZS5oXCJcbiBcbkBAIC0yMiw2ICsyMyw4IEBAXG4gICogQHR5cGU6IERQTEwgdHlwZSAoUFBTIG9yIEVFQylcbiAgKiBAbG9ja19zdGF0dXM6IGxhc3Qgc2F2ZWQgRFBMTCBsb2NrIHN0YXR1c1xuICAqIEBwaW5zOiBsaXN0IG9mIHBpbnNcbisgKiBAcHRwX2luZm86IFBUUCBjbG9jayBpbmZvXG4rICogQHB0cF9jbG9jazogcmVnaXN0ZXJlZCBQVFAgY2xvY2sgKG9yIE5VTEwpXG4gICovXG4gc3RydWN0IHpsMzA3M3hfZHBsbCB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRcdGxpc3Q7XG5AQCAtMzYsNiArMzksOCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsIHtcbiBcdGVudW0gZHBsbF90eXBlXHRcdFx0dHlwZTtcbiBcdGVudW0gZHBsbF9sb2NrX3N0YXR1c1x0XHRsb2NrX3N0YXR1cztcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdFx0cGlucztcbitcdHN0cnVjdCBwdHBfY2xvY2tfaW5mb1x0XHRwdHBfaW5mbztcbitcdHN0cnVjdCBwdHBfY2xvY2tcdFx0KnB0cF9jbG9jaztcbiB9O1xuIFxuIHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXG5pbmRleCBiNzBlYWQ3ZDQ0OTViLi5mM2E1ZTEyMTVhYTM2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhcbkBAIC0xNzksNiArMTc5LDIwIEBAXG4gI2RlZmluZSBaTF9EUExMX0RGX1JFQURfQ01EXHRcdFx0R0VOTUFTSygyLCAwKVxuICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRF9BQ0NfSVx0XHQ0XG4gXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTFx0XHRcdFpMX1JFRyg1LCAweDMwLCAxKVxuKyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUFx0XHRcdEdFTk1BU0soMiwgMClcbisjZGVmaW5lIFpMX0RQTExfVElFX0NUUkxfT1BfV1JcdFx0XHQ0XG4rXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTF9NQVNLXHRcdFpMX1JFRyg1LCAweDMxLCAxKVxuK1xuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX0NUUkwoX2lkeClcdFx0XHRcdFx0XFxcbitcdFpMX1JFR19JRFgoX2lkeCwgNSwgMHgzOCwgMSwgWkwzMDczWF9NQVhfQ0hBTk5FTFMsIDEpXG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX1NFTVx0XHRcdEJJVCg0KVxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURcdFx0XHRHRU5NQVNLKDMsIDApXG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWlx0MVxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVFx0XHQ4XG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9ORVhUXzFIWlx0OVxuK1xuICNkZWZpbmUgWkxfUkVHX0RQTExfTUVBU19DVFJMXHRcdFx0WkxfUkVHKDUsIDB4NTAsIDEpXG4gI2RlZmluZSBaTF9EUExMX01FQVNfQ1RSTF9FTlx0XHRcdEJJVCgwKVxuICNkZWZpbmUgWkxfRFBMTF9NRUFTX0NUUkxfQVZHX0ZBQ1RPUlx0XHRHRU5NQVNLKDcsIDQpXG5AQCAtMTkzLDYgKzIwNyw5IEBAXG4gXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgKiBSZWdpc3RlciBQYWdlcyA2LTcsIERQTEwgRGF0YVxuKyAqXG4rICogUGVyLWNoYW5uZWwgcmVnaXN0ZXJzIHdpdGggc3RyaWRlIDB4MjAuIENoYW5uZWxzIDAtMyByZXNpZGUgb24gcGFnZSA2LFxuKyAqIGNoYW5uZWwgNCBvbiBwYWdlIDcuXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gXG4gI2RlZmluZSBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeClcdFx0XHRcdFx0XFxcbkBAIC0yMDIsNiArMjE5LDI0IEBAXG4gXHQoKF9pZHgpIFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfREZfT0ZGU0VUXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfREZfT0ZGU0VUXzQpXG4gI2RlZmluZSBaTF9EUExMX0RGX09GRlNFVF9VTktOT1dOXHRTNjRfTUlOXG4gXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KVx0XHRcdFx0XHRcXFxuK1x0WkxfUkVHX0lEWChfaWR4LCA2LCAweDBDLCA2LCA0LCAweDIwKVxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEFfNFx0XHRcdFpMX1JFRyg3LCAweDBDLCA2KVxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEEoX2lkeClcdFx0XHRcdFx0XFxcbitcdCgoX2lkeCkgXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RJRV9EQVRBXzQpXG4rXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG4rXHRaTF9SRUdfSURYKF9pZHgsIDYsIDB4MTIsIDYsIDQsIDB4MjApXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzRcdFx0XHRaTF9SRUcoNywgMHgxMiwgNilcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUMoX2lkeClcdFx0XHRcdFx0XFxcbitcdCgoX2lkeCkgXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVE9EX1NFQ180KVxuK1xuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG4rXHRaTF9SRUdfSURYKF9pZHgsIDYsIDB4MTgsIDQsIDQsIDB4MjApXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlNfNFx0XHRcdFpMX1JFRyg3LCAweDE4LCA0KVxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TKF9pZHgpXHRcdFx0XHRcdFxcXG4rXHQoKF9pZHgpIFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfVE9EX05TXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVE9EX05TXzQpXG4rXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICogUmVnaXN0ZXIgUGFnZSA5LCBTeW50aCBhbmQgT3V0cHV0XG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuQEAgLTIyMSw2ICsyNTYsMjMgQEBcbiAjZGVmaW5lIFpMX09VVFBVVF9DVFJMX0VOXHRcdFx0QklUKDApXG4gI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9TWU5USF9TRUxcdFx0R0VOTUFTSyg2LCA0KVxuIFxuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTS1x0XHRaTF9SRUcoOSwgMHgzNiwgMilcbitcbisjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMXHRcdFpMX1JFRyg5LCAweDM4LCAxKVxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9EUExMXHRcdEdFTk1BU0soNiwgNClcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVBcdEJJVCgzKVxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUFx0XHRHRU5NQVNLKDEsIDApXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX05PTkVcdDBcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfUkVTRVRcdDFcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfUkVBRFx0MlxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURVx0M1xuK1xuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUlx0XHRaTF9SRUcoOSwgMHgzOSwgMSlcbitcbisjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLXHRcdFpMX1JFRyg5LCAweDNhLCAyKVxuK1xuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0RBVEFcdFx0WkxfUkVHKDksIDB4M2MsIDQpXG4rXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgKiBSZWdpc3RlciBQYWdlIDEwLCBSZWYgTWFpbGJveFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTE6NTQ6MjYuNTY4MTgzOTVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjUyNzQ1MTkzMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogUFRQIENsb2NrIFN1cHBvcnQgZm9yIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0J3MgYWRkaW5nIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBgZHJpdmVycy9kcGxsL3psMzA3M3gvYCBjb2RlLiBJdCBsb29rcyBsaWtlIGl0J3MgaW1wbGVtZW50aW5nIGZ1bmN0aW9ucyB0byByZWFkLCB3cml0ZSwgYW5kIGFkanVzdCB0aGUgVGltZSBvZiBEYXkgKFRvRCkgcmVnaXN0ZXJzLCBhZGp1c3QgdGhlIGZyZXF1ZW5jeSBhbmQgcGhhc2UsIGFuZCByZWdpc3RlcmluZyBhIFBUUCBjbG9jayBkZXZpY2UgZm9yIGVhY2ggRFBMTCBjaGFubmVsLiBNeSBpbW1lZGlhdGUgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gTGV0J3Mgc2VlIGlmIHRoaXMgY29kZSBpbnRyb2R1Y2VzIGFueSByaXNrcyBoZXJlLlxuXG5GaXJzdCwgSSBzZWUgdGhlIGBwdHBfY2xvY2tfaW5mb2Agc3RydWN0IGlzIGRlZmluZWQgYW5kIGluaXRpYWxpemVkIHN0YXRpY2FsbHkuIFRoYXQncyBnb29kLiBJbiBgemwzMDczeF9kcGxsX2FsbG9jYCwgaXQgaXMgY29waWVkIHRvIGB6bGRwbGwtXHUwMDNlcHRwX2luZm9gLiBDcnVjaWFsbHksIGB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm9gIGlzIGBzdGF0aWMgY29uc3RgLCBzbyBhbnkgdW5pbml0aWFsaXplZCBmaWVsZHMgZ2V0IHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIGNvbXBpbGVyLiBUaGUgYG5hbWVgIGZpZWxkIG9mIHRoaXMgc3RydWN0IGlzIHBvcHVsYXRlZCB1c2luZyBgc25wcmludGZgIGluIGB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyYC4gVGhpcyBtZWFucyB0aGUgYmVnaW5uaW5nIG9mIGBuYW1lYCBpcyBvdmVyd3JpdHRlbiwgYnV0IHRoZSByZXN0IG9mIGBuYW1lYCB0aGF0J3Mgbm90IG92ZXJ3cml0dGVuIGlzIHplcm8uIFNvLCB0aGlzIGxvb2tzIHNhZmUuXG5cblRoZSBgemwzMDczeF9jaGFuX3RvZF9yZWFkYCBmdW5jdGlvbiBsb29rcyBzdHJhaWdodGZvcndhcmQuIEl0IHJlYWRzIGhhcmR3YXJlIHJlZ2lzdGVycyB0byBwb3B1bGF0ZSB0aGUgYHRzLVx1MDAzZXR2X3NlY2AgYW5kIGB0cy1cdTAwM2V0dl9uc2VjYCBmaWVsZHMgb2YgYSBgc3RydWN0IHRpbWVzcGVjNjRgLiBCb3RoIHZhbHVlcyBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHJldHVybmluZy5cblxuVGhlIGB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcGAgdXNlcyBgdTE2IHN5bnRoX21hc2tbWkwzMDczWF9OVU1fU1lOVEhTXSA9IHt9O2Agd2hpY2ggaXMgemVybyBpbml0aWFsaXplZC5cblxuTmV4dCwgSSdtIGNoZWNraW5nIGlmIHRoZXJlJ3MgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHBhc3NlZCB0byB1c2VyIHNwYWNlLiBUaGUgYHB0cF9jbG9ja19pbmZvYCBzdHJ1Y3QgKmlzKiBwYXNzZWQgdG8gYHB0cF9jbG9ja19yZWdpc3RlcmAuIEkgY29uc2lkZXJlZCBgbmFtZWAsIGJ1dCBhcyBJIHNhaWQsIHRoZSBzdGF0aWMgYHB0cF9jbG9ja19pbmZvYCBzdHJ1Y3QgaXMgemVybyBpbml0aWFsaXplZCwgYW5kIHRoZSBgc25wcmludGZgIGVuc3VyZXMgYXQgbGVhc3QgdGhlIGJlZ2lubmluZyBvZiB0aGUgYG5hbWVgIGlzIHZhbGlkIGFuZCBudWxsIHRlcm1pbmF0ZWQuIFRoZSByZXN0IHJlbWFpbnMgemVybyBhbmQgaXMgaGFybWxlc3MuXG5cbkxvb2tpbmcgYXQgYHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0YCwgYHRzX25leHRgIGFuZCBgdHNfY3VyYCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgd2l0aGluIHRoZSBmdW5jdGlvbiBieSBgemwzMDczeF9jaGFuX3RvZF9yZWFkYC5cblxuRm9yIGB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVgLCBgdHNgIGlzIGFsc28gZnVsbHkgaW5pdGlhbGl6ZWQgd2l0aCBgdHZfc2VjYCBhbmQgYHR2X25zZWNgLiBObyBpc3N1ZXMgdGhlcmUuXG5cblRoaXMgcGF0Y2ggcHJpbWFyaWx5IGRlYWxzIHdpdGggUFRQIGNsb2NrIHJlZ2lzdHJhdGlvbiBhbmQgbG93LWxldmVsIGhhcmR3YXJlIGludGVyYWN0aW9ucy4gSXQncyBoYW5kbGluZyByZWFkcyBhbmQgd3JpdGVzIHRvIGhhcmR3YXJlIHJlZ2lzdGVycyBhbmQgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgUFRQIHN1YnN5c3RlbS4gSSdtIG5vdCBzZWVpbmcgYW55IGNvbXBsZXggc3RydWN0dXJlcyBvciBkYXRhIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBUaGVyZSBhbHNvIGRvZXNuJ3Qgc2VlbSB0byBiZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBiZWluZyB1c2VkIGluIGNvbnRyb2wgZmxvdy4gR2l2ZW4gdGhpcywgSSBkb24ndCBiZWxpZXZlIEtNU0FOIGlzIG5lY2Vzc2FyeSBoZXJlLiBLQVNBTiBpcyBhbHJlYWR5IHN1ZmZpY2llbnQgZm9yIG1lbW9yeSBzYWZldHkgY29uY2VybnMgbGlrZSBvdXQtb2YtYm91bmRzIGFjY2VzcyBhbmQgdXNlLWFmdGVyLWZyZWUsIGlmIHByZXNlbnQuXG5cbk9uZSBsYXN0IHRoaW5nLCB0aGUgYHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHNgIHBhcmFtZXRlci4gSW4gYHpsMzA3M3hfY2hhbl90b2RfcmVhZGAsIHRoaXMgaXMgcGFzc2VkIHRvIGBwdHBfcmVhZF9zeXN0ZW1fcHJldHNgIGFuZCBgcHRwX3JlYWRfc3lzdGVtX3Bvc3R0c2AuIFRoaXMgdmFyaWFibGUgaXMgc3VwcGxpZWQgYnkgdGhlIFBUUCBjb3JlIGl0c2VsZiwgYW5kIHRob3NlIGZ1bmN0aW9ucyBhcmUgc3RhbmRhcmQgYW5kIHdpbGwgb25seSB3cml0ZSB0byBzdHMgaWYgc3RzIGlzIG5vdCBOVUxMLiBUaGUgUFRQIGNvcmUgaGFuZGxlcyBpdHMgaW5pdGlhbGl6YXRpb24uIFNvIG5vIHByb2JsZW0uXG5cblRoZXJlZm9yZSwgbXkgYXNzZXNzbWVudCBpcyB0aGF0IEtNU0FOIGlzIG5vdCBuZWVkZWQgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgxMDksIk91dHB1dFRva2VucyI6MjA4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU4NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDExOjU0OjUxLjg0MjcwNjMyN1oiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBQVFAgY2xvY2sgc3VwcG9ydCBmb3IgdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyLiBJdCBhZGRzIGZ1bmN0aW9ucyB0byByZWFkL3dyaXRlIFRpbWUgb2YgRGF5IChUb0QpIHJlZ2lzdGVycywgYWRqdXN0IGZyZXF1ZW5jeSwgYW5kIGFkanVzdCBwaGFzZSwgYXMgd2VsbCBhcyByZWdpc3RlcmluZyBhIFBUUCBjbG9jayBkZXZpY2UuIEFsbCBsb2NhbCB2YXJpYWJsZXMsIHN1Y2ggYXMgYHN0cnVjdCB0aW1lc3BlYzY0YCBhbmQgYHN5bnRoX21hc2tgLCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIGBwdHBfY2xvY2tfaW5mb2Agc3RydWN0dXJlIGlzIGluaXRpYWxpemVkIGZyb20gYSBzdGF0aWMgY29uc3QgdGVtcGxhdGUsIGVuc3VyaW5nIGFsbCBmaWVsZHMgKGluY2x1ZGluZyBwYWRkaW5nIGFuZCB0aGUgYG5hbWVgIGJ1ZmZlcikgYXJlIHplcm8taW5pdGlhbGl6ZWQgYmVmb3JlIGBzbnByaW50ZmAgaXMgY2FsbGVkLiBUaGVyZSBhcmUgbm8ga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZXMgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgUFRQIGNsb2NrIHN1cHBvcnQgZm9yIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlci4gSXQgYWRkcyBmdW5jdGlvbnMgdG8gcmVhZC93cml0ZSBUaW1lIG9mIERheSAoVG9EKSByZWdpc3RlcnMsIGFkanVzdCBmcmVxdWVuY3ksIGFuZCBhZGp1c3QgcGhhc2UsIGFzIHdlbGwgYXMgcmVnaXN0ZXJpbmcgYSBQVFAgY2xvY2sgZGV2aWNlLiBBbGwgbG9jYWwgdmFyaWFibGVzLCBzdWNoIGFzIGBzdHJ1Y3QgdGltZXNwZWM2NGAgYW5kIGBzeW50aF9tYXNrYCwgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBgcHRwX2Nsb2NrX2luZm9gIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCBmcm9tIGEgc3RhdGljIGNvbnN0IHRlbXBsYXRlLCBlbnN1cmluZyBhbGwgZmllbGRzIChpbmNsdWRpbmcgcGFkZGluZyBhbmQgdGhlIGBuYW1lYCBidWZmZXIpIGFyZSB6ZXJvLWluaXRpYWxpemVkIGJlZm9yZSBgc25wcmludGZgIGlzIGNhbGxlZC4gVGhlcmUgYXJlIG5vIGtlcm5lbC10by11c2VyIGluZm8tbGVha3Mgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2VzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcy4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowxvgbj[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-07 11:51:35 +0000 UTC FinishedAt: 2026-08-07 11:55:01 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "4fa4977a0d900f936bcae5cd2c510be5554e8dd6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZL3073X_I2C", "ZL3073X_SPI", "PTP_1588_CLOCK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "4fa4977a0d900f936bcae5cd2c510be5554e8dd6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZL3073X_I2C", "ZL3073X_SPI", "PTP_1588_CLOCK" ], "series_id": "d89a7ab3-00aa-4bed-8dfb-a0d42b357707" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "zl3073x_chan_tod_ready_wait", "zl3073x_chan_tod_read", "zl3073x_chan_tod_write", "zl3073x_chan_tod_adjust", "zl3073x_chan_df_offset_set", "zl3073x_chan_tie_write", "zl3073x_chan_phase_step" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA3IDExOjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pMMzA3M1hfSTJDJiMzNDssCiAgICAmIzM0O1pMMzA3M1hfU1BJJiMzNDssCiAgICAmIzM0O1BUUF8xNTg4X0NMT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7emwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0JiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl90b2RfcmVhZCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fdG9kX3dyaXRlJiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl90b2RfYWRqdXN0JiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0JiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl90aWVfd3JpdGUmIzM0OywKICAgICYjMzQ7emwzMDczeF9jaGFuX3BoYXNlX3N0ZXAmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIFBUUCBjbG9jayBzdXBwb3J0IGZvciB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIuIEl0IGFkZHMgZnVuY3Rpb25zIHRvIHJlYWQvd3JpdGUgVGltZSBvZiBEYXkgKFRvRCkgcmVnaXN0ZXJzLCBhZGp1c3QgZnJlcXVlbmN5LCBhbmQgYWRqdXN0IHBoYXNlLCBhcyB3ZWxsIGFzIHJlZ2lzdGVyaW5nIGEgUFRQIGNsb2NrIGRldmljZS4gQWxsIGxvY2FsIHZhcmlhYmxlcywgc3VjaCBhcyBgc3RydWN0IHRpbWVzcGVjNjRgIGFuZCBgc3ludGhfbWFza2AsIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgYHB0cF9jbG9ja19pbmZvYCBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQgZnJvbSBhIHN0YXRpYyBjb25zdCB0ZW1wbGF0ZSwgZW5zdXJpbmcgYWxsIGZpZWxkcyAoaW5jbHVkaW5nIHBhZGRpbmcgYW5kIHRoZSBgbmFtZWAgYnVmZmVyKSBhcmUgemVyby1pbml0aWFsaXplZCBiZWZvcmUgYHNucHJpbnRmYCBpcyBjYWxsZWQuIFRoZXJlIGFyZSBubyBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgUFRQIGNsb2NrIHN1cHBvcnQgdG8gdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyICh6bDMwNzN4KS4gVGhlIGRyaXZlciBjYW4gYmUgaW5zdGFudGlhdGVkIHZpYSBJMkMgb3IgU1BJLCBhbmQgdGhlIFBUUCBjbG9jayBpbnRlcmZhY2UgaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdmlhIGAvZGV2L3B0cFhgLiBTeXprYWxsZXIgY2FuIGZ1enogdGhpcyBmdW5jdGlvbmFsaXR5IHVzaW5nIEkyQy9TUEkgZW11bGF0aW9uIGFuZCBQVFAgaW9jdGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDExOjUyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNTkxZGVjODNhODVkNzA3NDU1MjYwZTkxOGU3NDEyNTdlNDVmOTI5MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMTE6NTI6NDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdcbmluZGV4IDViYmNhMTQwMDU4MTMuLmRhMTczMWFjZTE1ZjAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXG5AQCAtMiw3ICYjNDM7Miw3IEBAXG4gXG4gY29uZmlnIFpMMzA3M1hcbiBcdHRyaXN0YXRlIFwmIzM0O01pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXNcJiMzNDsgaWYgQ09NUElMRV9URVNUXG4tXHRkZXBlbmRzIG9uIE5FVFxuJiM0MztcdGRlcGVuZHMgb24gTkVUIFx1MDAyNlx1MDAyNiBQVFBfMTU4OF9DTE9DS1xuIFx0c2VsZWN0IERQTExcbiBcdHNlbGVjdCBORVRfREVWTElOS1xuIFx0c2VsZWN0IFJFR01BUFxuQEAgLTE2LDcgJiM0MzsxNiw3IEBAIGNvbmZpZyBaTDMwNzNYXG4gXG4gY29uZmlnIFpMMzA3M1hfSTJDXG4gXHR0cmlzdGF0ZSBcJiMzNDtJMkMgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzXCYjMzQ7XG4tXHRkZXBlbmRzIG9uIEkyQyBcdTAwMjZcdTAwMjYgTkVUXG4mIzQzO1x0ZGVwZW5kcyBvbiBJMkMgXHUwMDI2XHUwMDI2IE5FVCBcdTAwMjZcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tcbiBcdHNlbGVjdCBSRUdNQVBfSTJDXG4gXHRzZWxlY3QgWkwzMDczWFxuIFx0aGVscFxuQEAgLTI4LDcgJiM0MzsyOCw3IEBAIGNvbmZpZyBaTDMwNzNYX0kyQ1xuIFxuIGNvbmZpZyBaTDMwNzNYX1NQSVxuIFx0dHJpc3RhdGUgXCYjMzQ7U1BJIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1wmIzM0O1xuLVx0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IFNQSVxuJiM0MztcdGRlcGVuZHMgb24gTkVUIFx1MDAyNlx1MDAyNiBTUEkgXHUwMDI2XHUwMDI2IFBUUF8xNTg4X0NMT0NLXG4gXHRzZWxlY3QgUkVHTUFQX1NQSVxuIFx0c2VsZWN0IFpMMzA3M1hcbiBcdGhlbHBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNcbmluZGV4IDRlYzJjZjUzZGFkNDYuLmFmNmNhNDNjMzM1OTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uY1xuQEAgLTMsNiAmIzQzOzMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZfcHJpbnRrLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gXG5AQCAtMTYyLDggJiM0MzsxNjMsOCBAQCBpbnQgemwzMDczeF9jaGFuX25jb19tb2RlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleClcbiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXG4gICogQGluZGV4OiBEUExMIGNoYW5uZWwgaW5kZXggdG8gZmV0Y2ggc3RhdGUgZm9yXG4gICpcbi0gKiBSZWFkcyB0aGUgbW9kZV9yZWZzZWwgcmVnaXN0ZXIgYW5kIHJlZmVyZW5jZSBwcmlvcml0eSByZWdpc3RlcnMgZm9yXG4tICogdGhlIGdpdmVuIERQTEwgY2hhbm5lbCBhbmQgc3RvcmVzIHRoZSByYXcgdmFsdWVzIGZvciBsYXRlciB1c2UuXG4mIzQzOyAqIFJlYWRzIHRoZSBtb2RlX3JlZnNlbCwgc3RhdHVzIGFuZCByZWZlcmVuY2UgcHJpb3JpdHkgcmVnaXN0ZXJzIGZvclxuJiM0MzsgKiB0aGUgZ2l2ZW4gRFBMTCBjaGFubmVsIGFuZCBzdG9yZXMgdGhlIHZhbHVlcyBmb3IgbGF0ZXIgdXNlLlxuICAqXG4gICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiAgKi9cbkBAIC0yMzQsNiAmIzQzOzIzNSwzMjIgQEAgY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqemwzMDczeF9jaGFuX3N0YXRlX2dldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LFxuIFx0cmV0dXJuIFx1MDAyNnpsZGV2LVx1MDAzZWNoYW5baW5kZXhdO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCAtIHdhaXQgZm9yIFRvRCBzZW1hcGhvcmUgdG8gY2xlYXJcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqXG4mIzQzOyAqIFBvbGxzIHRoZSBUb0QgY29udHJvbCByZWdpc3RlciB1bnRpbCB0aGUgc2VtYXBob3JlIGJpdCBpcyBjbGVhcmVkLFxuJiM0MzsgKiBpbmRpY2F0aW5nIHRoZSBkZXZpY2UgaGFzIGNvbXBsZXRlZCB0aGUgcHJldmlvdXMgVG9EIG9wZXJhdGlvbi5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FQlVTWSBpZiBzZW1hcGhvcmUgbm90IGNsZWFyZWQsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgdGltZW91dDtcbiYjNDM7XHR1OCB0b2RfY3RybDtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdHJjID0gemwzMDczeF9yZWFkX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksIFx1MDAyNnRvZF9jdHJsKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoRklFTERfR0VUKFpMX0RQTExfVE9EX0NUUkxfQ01ELCB0b2RfY3RybCkpIHtcbiYjNDM7XHRjYXNlIDA6XG4mIzQzO1x0XHQvKiBObyBvcGVyYXRpb24gcGVuZGluZyAocG93ZXItb24vcmVzZXQgZGVmYXVsdCkgKi9cbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFo6XG4mIzQzO1x0XHR0aW1lb3V0ID0gWkxfUE9MTF9UT0RfV1JfVElNRU9VVF9VUztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVDpcbiYjNDM7XHRjYXNlIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaOlxuJiM0MztcdFx0dGltZW91dCA9IFpMX1BPTExfVE9EX1JEX1RJTUVPVVRfVVM7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0LyogRlcgbmV2ZXIgd3JpdGVzIGNtZCBiaXRzOyBvbmx5IHRoZSBkcml2ZXIgc2V0cyB0aGVtICovXG4mIzQzO1x0XHRXQVJOX09OKDEpO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLFxuJiM0MztcdFx0XHRcdCAgWkxfRFBMTF9UT0RfQ1RSTF9TRU0sIHRpbWVvdXQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmMgPT0gLUVUSU1FRE9VVCA/IC1FQlVTWSA6IHJjO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9jdHJsIC0gaXNzdWUgVG9EIGNvbW1hbmRcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEBjbWQ6IFRvRCBjb21tYW5kIHRvIGV4ZWN1dGVcbiYjNDM7ICpcbiYjNDM7ICogV3JpdGVzIHRoZSBzZW1hcGhvcmUgYW5kIGNvbW1hbmQgdG8gZHBsbF90b2RfY3RybC4gVGhlIGNhbGxlciBtdXN0XG4mIzQzOyAqIGVuc3VyZSB0aGUgZGV2aWNlIGlzIHJlYWR5IChzZW1hcGhvcmUgY2xlYXIpIGJlZm9yZSBjYWxsaW5nIGFuZFxuJiM0MzsgKiBtdXN0IHdhaXQgZm9yIGNvbXBsZXRpb24gaWYgbmVlZGVkLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHU4IGNtZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksXG4mIzQzO1x0XHRcdFx0WkxfRFBMTF9UT0RfQ1RSTF9TRU0gfCBjbWQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9yZWFkIC0gcmVhZCBUb0QgcmVnaXN0ZXJzIGFmdGVyIGlzc3VpbmcgYSBjb21tYW5kXG4mIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuJiM0MzsgKiBAbmV4dF9oejogaWYgdHJ1ZSwgcmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIejsgb3RoZXJ3aXNlIHJlYWQgY3VycmVudFxuJiM0MzsgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIHRoZSByZXN1bHRcbiYjNDM7ICogQHN0czogb3B0aW9uYWwgc3lzdGVtIHRpbWVzdGFtcCBwYWlyIGZvciBjcm9zcy10aW1lc3RhbXBpbmdcbiYjNDM7ICpcbiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4mIzQzO1x0XHRcdCAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXG4mIzQzO1x0XHRcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpXG4mIzQzO3tcbiYjNDM7XHR1MzIgbnNlYztcbiYjNDM7XHR1NjQgc2VjO1xuJiM0MztcdHU4IGNtZDtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdGlmIChuZXh0X2h6KVxuJiM0MztcdFx0Y21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFo7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0Y21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVDtcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbiYjNDM7XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cHRwX3JlYWRfc3lzdGVtX3ByZXRzKHN0cyk7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLCBjbWQpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1x0cHRwX3JlYWRfc3lzdGVtX3Bvc3R0cyhzdHMpO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfcmVhZF91NDgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9TRUMoY2gpLCBcdTAwMjZzZWMpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0LyogSFcgbmFub3NlY29uZHMgYXJlIGFsd2F5cyBpbiBbMCwgTlNFQ19QRVJfU0VDKSByYW5nZSAqL1xuJiM0MztcdHJjID0gemwzMDczeF9yZWFkX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgXHUwMDI2bnNlYyk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHR0cy1cdTAwM2V0dl9zZWMgPSBzZWM7XG4mIzQzO1x0dHMtXHUwMDNldHZfbnNlYyA9IG5zZWM7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF93cml0ZSAtIHdyaXRlIFRvRCByZWdpc3RlcnMgYW5kIHRyaWdnZXIgMSBIeiB1cGRhdGVcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEB0czogdGltZSB0byBzZXRcbiYjNDM7ICpcbiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuJiM0MztcdFx0XHQgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cylcbiYjNDM7e1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbiYjNDM7XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIHRzLnR2X3NlYyk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCB0cy50dl9uc2VjKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLFxuJiM0MztcdFx0XHRcdCAgICAgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFopO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9hZGp1c3QgLSBhdG9taWMgVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIHdpdGggcm9sbG92ZXIgZ3VhcmRcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IHRvIGFwcGx5XG4mIzQzOyAqXG4mIzQzOyAqIFJlYWRzIHRoZSBuZXh0LUh6IFRvRCBhbmQgY3VycmVudCBUb0QsIHRoZW4gY2hlY2tzIHdoZXRoZXIgZW5vdWdoIHRpbWVcbiYjNDM7ICogcmVtYWlucyBiZWZvcmUgdGhlIG5leHQgMSBIeiByb2xsb3ZlciB0byBzYWZlbHkgY29tcGxldGUgdGhlIHdyaXRlLlxuJiM0MzsgKiBSZS1yZWFkcyBpZiB0aGUgMSBIeiB0aWNrIGNyb3NzZWQgYmV0d2VlbiB0aGUgdHdvIHJlYWRzIG9yIGlmIGxlc3NcbiYjNDM7ICogdGhhbiAyMCBtcyByZW1haW5zIGJlZm9yZSB0aGUgbmV4dCByb2xsb3Zlci4gQXBwbGllcyBAZGVsdGEgYW5kIHdyaXRlc1xuJiM0MzsgKiB0aGUgcmVzdWx0IGJhY2suXG4mIzQzOyAqXG4mIzQzOyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFpMX1RPRF9NQVhfUkVUUklFU1x0MjBcbiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuJiM0MztcdFx0XHQgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpXG4mIzQzO3tcbiYjNDM7XHRzdGF0aWMgY29uc3QgbG9uZyB0aHJlc2hvbGRfbnMgPSAyMCAqIE5TRUNfUEVSX01TRUM7XG4mIzQzO1x0c3RydWN0IHRpbWVzcGVjNjQgdHNfbmV4dCwgdHNfY3VyLCBkaWZmO1xuJiM0MztcdGludCByYywgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgWkxfVE9EX01BWF9SRVRSSUVTOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCB0cnVlLCBcdTAwMjZ0c19uZXh0LCBOVUxMKTtcbiYjNDM7XHRcdGlmIChyYylcbiYjNDM7XHRcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgZmFsc2UsIFx1MDAyNnRzX2N1ciwgTlVMTCk7XG4mIzQzO1x0XHRpZiAocmMpXG4mIzQzO1x0XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0XHQvKiBFbnN1cmUgdGhlIDEgSHogdGljayBkaWQgbm90IGNyb3NzIGJldHdlZW4gdGhlIHR3byByZWFkc1xuJiM0MztcdFx0ICogYW5kIHRoYXQgZW5vdWdoIG1hcmdpbiByZW1haW5zIHRvIGNvbXBsZXRlIHRoZSB3cml0ZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0ZGlmZiA9IHRpbWVzcGVjNjRfc3ViKHRzX25leHQsIHRzX2N1cik7XG4mIzQzO1x0XHRpZiAoZGlmZi50dl9zZWMgXHUwMDNlIDAgfHxcbiYjNDM7XHRcdCAgICAoIWRpZmYudHZfc2VjIFx1MDAyNlx1MDAyNiBkaWZmLnR2X25zZWMgXHUwMDNlPSB0aHJlc2hvbGRfbnMpKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKGkgPT0gWkxfVE9EX01BWF9SRVRSSUVTKSB7XG4mIzQzO1x0XHRkZXZfd2Fybih6bGRldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdCBcJiMzNDtEUExMJXUgVG9EIGFkanVzdCBmYWlsZWQgdG8gZ2V0IHN0YWJsZSBtYXJnaW5cXG5cJiMzNDssXG4mIzQzO1x0XHRcdCBjaCk7XG4mIzQzO1x0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogQXBwbHkgZGVsdGEgdG8gdGhlIG5leHQtSHogVG9EICovXG4mIzQzO1x0dHNfbmV4dCA9IHRpbWVzcGVjNjRfYWRkKHRzX25leHQsIGRlbHRhKTtcbiYjNDM7XHRpZiAoIXRpbWVzcGVjNjRfdmFsaWQoXHUwMDI2dHNfbmV4dCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkZXYsIGNoLCB0c19uZXh0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0IC0gd3JpdGUgZGVsdGEgZnJlcXVlbmN5IG9mZnNldCB0byBoYXJkd2FyZVxuJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbiYjNDM7ICogQG9mZnNldDogZnJlcXVlbmN5IG9mZnNldCBpbiAyXi00OCBzdGVwc1xuJiM0MzsgKlxuJiM0MzsgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBob2xkIHRoZSBwZXItRFBMTCBsb2NrLlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7aW50IHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgb2Zmc2V0KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJjO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9PRkZTRVQoY2gpLCBvZmZzZXQpO1xuJiM0MztcdGlmICghcmMpXG4mIzQzO1x0XHR6bGRldi1cdTAwM2VjaGFuW2NoXS5kZl9vZmZzZXQgPSBvZmZzZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiByYztcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfY2hhbl90aWVfd3JpdGUgLSBhZGp1c3QgRFBMTCBwaGFzZSB1c2luZyBUSUUgd3JpdGVcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEBkZWx0YV9uczogcGhhc2UgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcyAobXVzdCBiZSB3aXRoaW4gJiM0MzstMXMpXG4mIzQzOyAqXG4mIzQzOyAqIENvbnZlcnRzIG5hbm9zZWNvbmRzIHRvIFRJRSB1bml0cyAoMC4wMSBwcykgYW5kIHdyaXRlcyBUSUUgZGF0YVxuJiM0MzsgKiB0byB0aGUgc3BlY2lmaWVkIGNoYW5uZWwuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MztpbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKVxuJiM0Mzt7XG4mIzQzO1x0czY0IHRpZV9kYXRhO1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0aWYgKFdBUk5fT04oZGVsdGFfbnMgXHUwMDNjPSAtTlNFQ19QRVJfU0VDIHx8IGRlbHRhX25zIFx1MDAzZT0gTlNFQ19QRVJfU0VDKSlcbiYjNDM7XHRcdHJldHVybiAtRVJBTkdFO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2emxkZXYtXHUwMDNldGllX2xvY2spO1xuJiM0MztcbiYjNDM7XHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVElFIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xuJiM0MztcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLFxuJiM0MztcdFx0XHRcdCAgWkxfRFBMTF9USUVfQ1RSTF9PUCxcbiYjNDM7XHRcdFx0XHQgIFpMX1BPTExfVElFX1dSX1RJTUVPVVRfVVMpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0LyogQ29udmVydCBucyB0byBUSUUgdW5pdHMgKDAuMDEgcHMgPSAxMF4tMTQgcykgKi9cbiYjNDM7XHR0aWVfZGF0YSA9IGRlbHRhX25zICogMTAwMDAwTEw7XG4mIzQzO1xuJiM0MztcdHJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9EQVRBKGNoKSwgdGllX2RhdGEpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTF9NQVNLLCBCSVQoY2gpKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTCxcbiYjNDM7XHRcdFx0XHRaTF9EUExMX1RJRV9DVFJMX09QX1dSKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwIC0gZXhlY3V0ZSBvbmUgb3V0cHV0IHBoYXNlIHN0ZXAgb3BlcmF0aW9uXG4mIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuJiM0MzsgKiBAb3V0X21hc2s6IGJpdG1hc2sgb2Ygb3V0cHV0cyB0byBzdGVwXG4mIzQzOyAqIEBzdGVwX2N5Y2xlczogcGhhc2Ugc3RlcCBpbiBzeW50aGVzaXplciBjbG9jayBjeWNsZXNcbiYjNDM7ICogQHRvZF9zdGVwOiBhbHNvIHN0ZXAgdGhlIFRvRCBjb3VudGVyXG4mIzQzOyAqXG4mIzQzOyAqIEFsbCBtYXNrZWQgb3V0cHV0cyBtdXN0IHVzZSBzeW50aGVzaXplcnMgb2YgdGhlIHNhbWUgZnJlcXVlbmN5IHNpbmNlXG4mIzQzOyAqIHRoZSBzdGVwIHZhbHVlIGlzIGluIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcy5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbiYjNDM7XHRcdFx0ICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLFxuJiM0MztcdFx0XHQgICAgYm9vbCB0b2Rfc3RlcClcbiYjNDM7e1xuJiM0MztcdHU4IGN0cmw7XG4mIzQzO1x0aW50IHJjO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2emxkZXYtXHUwMDNlcGhhc2Vfc3RlcF9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIHBoYXNlIHN0ZXAgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXG4mIzQzO1x0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwsXG4mIzQzO1x0XHRcdFx0ICBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QLFxuJiM0MztcdFx0XHRcdCAgWkxfUE9MTF9QSEFTRV9TVEVQX1RJTUVPVVRfVVMpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0RBVEEsXG4mIzQzO1x0XHRcdCAgICAgICBzdGVwX2N5Y2xlcyk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTE2KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTUFTSywgb3V0X21hc2spO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTlVNQkVSLCAxKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdGN0cmwgPSBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfRFBMTCwgY2gpIHxcbiYjNDM7XHQgICAgICAgRklFTERfUFJFUChaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QLFxuJiM0MztcdFx0XHQgIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfV1JJVEUpO1xuJiM0MztcdGlmICh0b2Rfc3RlcClcbiYjNDM7XHRcdGN0cmwgfD0gWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9UT0RfU1RFUDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLCBjdHJsKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0IC0gY29tbWl0IERQTEwgY2hhbm5lbCBzdGF0ZSBjaGFuZ2VzIHRvIGhhcmR3YXJlXG4gICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3hfZGV2IHN0cnVjdHVyZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaFxuaW5kZXggZGM5YzZkOTViZGVlNy4uOTljM2I3MDg4ZjY3OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXG5AQCAtNSwxMCAmIzQzOzUsMTIgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RkZGVmLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdGltZTY0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7cmVncy5oXCYjMzQ7XG4gXG4mIzQzO3N0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcDtcbiBzdHJ1Y3QgemwzMDczeF9kZXY7XG4gXG4gLyoqXG5AQCAtNDIsNiAmIzQzOzQ0LDIxIEBAIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4LFxuIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfdXBkYXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTtcbiBpbnQgemwzMDczeF9jaGFuX25jb19tb2RlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7XG4gXG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpO1xuJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuJiM0MztcdFx0XHQgIGJvb2wgbmV4dF9oeiwgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxuJiM0MztcdFx0XHQgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKTtcbiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCB0aW1lc3BlYzY0IHRzKTtcbiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuJiM0MztcdFx0XHQgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpO1xuJiM0MztpbnQgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4mIzQzO1x0XHRcdCAgICB1MTYgb3V0X21hc2ssIHMzMiBzdGVwX2N5Y2xlcywgYm9vbCB0b2Rfc3RlcCk7XG4mIzQzO1xuJiM0MztpbnQgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBvZmZzZXQpO1xuJiM0MztcbiYjNDM7aW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucyk7XG4mIzQzO1xuIC8qKlxuICAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfZ2V0IC0gZ2V0IGNhY2hlZCBkZl9vZmZzZXQgdnMgdHJhY2tlZCByZWZlcmVuY2VcbiAgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG5AQCAtMjAwLDYgJiM0MzsyMTcsMjEgQEAgc3RhdGljIGlubGluZSBib29sIHpsMzA3M3hfY2hhbl9tb2RlX2lzX3JlZmxvY2soY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcbiBcdHJldHVybiB6bDMwNzN4X2NoYW5fbW9kZV9nZXQoY2hhbikgPT0gWkxfRFBMTF9NT0RFX1JFRlNFTF9NT0RFX1JFRkxPQ0s7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllIC0gY2hlY2sgaWYgY2hhbm5lbCBtb2RlIHN1cHBvcnRzIFRJRSB3cml0ZVxuJiM0MzsgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG4mIzQzOyAqXG4mIzQzOyAqIFRJRSB3cml0ZSBpcyBzdXBwb3J0ZWQgaW4gQVVUTyBhbmQgUkVGTE9DSyBtb2RlcyByZWdhcmRsZXNzIG9mIGxvY2sgc3RhdGUuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogdHJ1ZSBpZiBUSUUgd3JpdGUgaXMgc3VwcG9ydGVkLCBmYWxzZSBvdGhlcndpc2VcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbFxuJiM0Mzt6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcbiYjNDM7e1xuJiM0MztcdHJldHVybiB6bDMwNzN4X2NoYW5fbW9kZV9pc19hdXRvKGNoYW4pIHx8XG4mIzQzO1x0XHR6bDMwNzN4X2NoYW5fbW9kZV9pc19yZWZsb2NrKGNoYW4pO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIHpsMzA3M3hfY2hhbl9pc19ob19yZWFkeSAtIGNoZWNrIGlmIGhvbGRvdmVyIGlzIHJlYWR5XG4gICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1xuaW5kZXggNWIyZDc3ZjJjMjI4OC4uMjMwZGYwOGUyN2NkMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jXG5AQCAtMzIyLDcgJiM0MzszMjIsNyBAQCBpbnQgemwzMDczeF93cml0ZV91NDgoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IHJlZywgdTY0IHZhbClcbiBpbnQgemwzMDczeF9wb2xsX3plcm9fdTgoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IHJlZyxcbiBcdFx0XHQgdTggbWFzaywgdW5zaWduZWQgaW50IHRpbWVvdXRfdXMpXG4ge1xuLSNkZWZpbmUgWkxfUE9MTF9TTEVFUF9VUyAxMFxuJiM0MztcdHVuc2lnbmVkIGludCBzbGVlcF91cyA9IHRpbWVvdXRfdXMgLyA1MDtcbiBcdHVuc2lnbmVkIGludCB2YWw7XG4gXG4gXHQvKiBDaGVjayB0aGUgcmVnaXN0ZXIgaXMgOGJpdCAqL1xuQEAgLTMzNiw3ICYjNDM7MzM2LDcgQEAgaW50IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsXG4gXHRyZWcgPSBaTF9SRUdfQUREUihyZWcpICYjNDM7IFpMX1JBTkdFX09GRlNFVDtcbiBcbiBcdHJldHVybiByZWdtYXBfcmVhZF9wb2xsX3RpbWVvdXQoemxkZXYtXHUwMDNlcmVnbWFwLCByZWcsIHZhbCwgISh2YWwgXHUwMDI2IG1hc2spLFxuLVx0XHRcdFx0XHRaTF9QT0xMX1NMRUVQX1VTLCB0aW1lb3V0X3VzKTtcbiYjNDM7XHRcdFx0XHRcdHNsZWVwX3VzLCB0aW1lb3V0X3VzKTtcbiB9XG4gXG4gaW50IHpsMzA3M3hfbWJfb3Aoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IG9wX3JlZywgdTggb3BfdmFsLFxuQEAgLTUxMSw2ICYjNDM7NTExLDExIEBAIHpsMzA3M3hfZGV2X3N0YXRlX2ZldGNoKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXG4gXHRpbnQgcmM7XG4gXHR1OCBpO1xuIFxuJiM0MztcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTSyxcbiYjNDM7XHRcdFx0ICAgICAgXHUwMDI2emxkZXYtXHUwMDNlb3V0X3N0ZXBfdGltZV9tYXNrKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgWkwzMDczWF9OVU1fUkVGUzsgaSYjNDM7JiM0MzspIHtcbiBcdFx0cmMgPSB6bDMwNzN4X3JlZl9zdGF0ZV9mZXRjaCh6bGRldiwgaSk7XG4gXHRcdGlmIChyYykge1xuQEAgLTEwMzQsNiAmIzQzOzEwMzksMTQgQEAgaW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXG4gXHQgKiBhbmQvb3IgcG9sbHMgYXJlIHJlcXVpcmVkIHRvIGJlIGRvbmUgYXRvbWljYWxseS5cbiBcdCAqL1xuIFx0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2VtdWx0aW9wX2xvY2spO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgcmMsXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcblwmIzM0Oyk7XG4mIzQzO1x0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2VwaGFzZV9zdGVwX2xvY2spO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgcmMsXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcblwmIzM0Oyk7XG4mIzQzO1x0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2V0aWVfbG9jayk7XG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgcmMsXG4gXHRcdFx0XHQgICAgIFwmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxuXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcbmluZGV4IDc4ZGMyMDhmM2VlYTIuLjY3YzEwZTI1OTUxMTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaFxuQEAgLTI2LDYgJiM0MzsyNiwxMCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsO1xuICNkZWZpbmUgWkxfUE9MTF9IV1JFR19USU1FT1VUX1VTXHQoNTAgKiBVU0VDX1BFUl9NU0VDKVxuICNkZWZpbmUgWkxfUE9MTF9NQl9USU1FT1VUX1VTXHRcdCgzMCAqIFVTRUNfUEVSX01TRUMpXG4gI2RlZmluZSBaTF9QT0xMX1BIQVNFX0VSUl9USU1FT1VUX1VTXHQoNTAgKiBVU0VDX1BFUl9NU0VDKVxuJiM0MzsjZGVmaW5lIFpMX1BPTExfUEhBU0VfU1RFUF9USU1FT1VUX1VTXHQoMzAwMCAqIFVTRUNfUEVSX01TRUMpXG4mIzQzOyNkZWZpbmUgWkxfUE9MTF9USUVfV1JfVElNRU9VVF9VU1x0KDEwMDAgKiBVU0VDX1BFUl9NU0VDKVxuJiM0MzsjZGVmaW5lIFpMX1BPTExfVE9EX1JEX1RJTUVPVVRfVVNcdCgzMCAqIFVTRUNfUEVSX01TRUMpXG4mIzQzOyNkZWZpbmUgWkxfUE9MTF9UT0RfV1JfVElNRU9VVF9VU1x0KDEwMDAgKiBVU0VDX1BFUl9NU0VDKVxuIFxuIGVudW0gemwzMDczeF9mbGFncyB7XG4gXHRaTDMwNzNYX0ZMQUdfUkVGX1BIQVNFX0NPTVBfMzJfQklULFxuQEAgLTU1LDYgJiM0Mzs1OSw4IEBAIHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mbyB7XG4gICogQHJlZ21hcDogcmVnbWFwIHRvIGFjY2VzcyBkZXZpY2UgcmVnaXN0ZXJzXG4gICogQGluZm86IGRldGVjdGVkIGNoaXAgaW5mb1xuICAqIEBtdWx0aW9wX2xvY2s6IHRvIHNlcmlhbGl6ZSBtdWx0aXBsZSByZWdpc3RlciBvcGVyYXRpb25zXG4mIzQzOyAqIEB0aWVfbG9jazogdG8gc2VyaWFsaXplIFRJRSB3cml0ZSBvcGVyYXRpb25zXG4mIzQzOyAqIEBwaGFzZV9zdGVwX2xvY2s6IHRvIHNlcmlhbGl6ZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb25zXG4gICogQHJlZjogYXJyYXkgb2YgaW5wdXQgcmVmZXJlbmNlcyYjMzk7IGludmFyaWFudHNcbiAgKiBAb3V0OiBhcnJheSBvZiBvdXRzJiMzOTsgaW52YXJpYW50c1xuICAqIEBzeW50aDogYXJyYXkgb2Ygc3ludGhzJiMzOTsgaW52YXJpYW50c1xuQEAgLTYzLDYgJiM0Mzs2OSw3IEBAIHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mbyB7XG4gICogQGt3b3JrZXI6IHRocmVhZCBmb3IgcGVyaW9kaWMgd29ya1xuICAqIEB3b3JrOiBwZXJpb2RpYyB3b3JrXG4gICogQGNsb2NrX2lkOiBjbG9jayBpZCBvZiB0aGUgZGV2aWNlXG4mIzQzOyAqIEBvdXRfc3RlcF90aW1lX21hc2s6IG91dHB1dCBzdGVwLXRpbWUgbWFzayAoZGV2aWNlLWdsb2JhbClcbiAgKiBAcGhhc2VfYXZnX2ZhY3RvcjogcGhhc2Ugb2Zmc2V0IG1lYXN1cmVtZW50IGF2ZXJhZ2luZyBmYWN0b3JcbiAgKiBAZnJlcV9tb25pdG9yOiBpcyBmcmVxdWVuY3kgbW9uaXRvciBlbmFibGVkXG4gICovXG5AQCAtNzEsNiAmIzQzOzc4LDggQEAgc3RydWN0IHpsMzA3M3hfZGV2IHtcbiBcdHN0cnVjdCByZWdtYXBcdFx0XHQqcmVnbWFwO1xuIFx0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hpcF9pbmZvXHQqaW5mbztcbiBcdHN0cnVjdCBtdXRleFx0XHRcdG11bHRpb3BfbG9jaztcbiYjNDM7XHRzdHJ1Y3QgbXV0ZXhcdFx0XHR0aWVfbG9jaztcbiYjNDM7XHRzdHJ1Y3QgbXV0ZXhcdFx0XHRwaGFzZV9zdGVwX2xvY2s7XG4gXG4gXHQvKiBJbnZhcmlhbnRzICovXG4gXHRzdHJ1Y3QgemwzMDczeF9yZWZcdHJlZltaTDMwNzNYX05VTV9SRUZTXTtcbkBAIC04Nyw2ICYjNDM7OTYsNyBAQCBzdHJ1Y3QgemwzMDczeF9kZXYge1xuIFxuIFx0LyogUGVyLWNoaXAgcGFyYW1ldGVycyAqL1xuIFx0dTY0XHRcdFx0Y2xvY2tfaWQ7XG4mIzQzO1x0dTE2XHRcdFx0b3V0X3N0ZXBfdGltZV9tYXNrO1xuIFx0dThcdFx0XHRwaGFzZV9hdmdfZmFjdG9yO1xuIFx0Ym9vbFx0XHRcdGZyZXFfbW9uaXRvcjtcbiB9O1xuQEAgLTMwOCw2ICYjNDM7MzE4LDE5IEBAIHpsMzA3M3hfZGV2X291dF9pc19lbmFibGVkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxuIFx0cmV0dXJuIHpsMzA3M3hfc3ludGhfaXNfZW5hYmxlZChzeW50aCkgXHUwMDI2XHUwMDI2IHpsMzA3M3hfb3V0X2lzX2VuYWJsZWQob3V0KTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2Rldl9vdXRfaXNfc3RlcHBlZCAtIGNoZWNrIGlmIG91dHB1dCBpcyBpbiBzdGVwLXRpbWUgbWFza1xuJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbiYjNDM7ICogQGluZGV4OiBvdXRwdXQgaW5kZXhcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIG91dHB1dCBpcyBhZmZlY3RlZCBieSBzdGVwLXRpbWUgb3BlcmF0aW9uc1xuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBib29sXG4mIzQzO3psMzA3M3hfZGV2X291dF9pc19zdGVwcGVkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuICEhKHpsZGV2LVx1MDAzZW91dF9zdGVwX3RpbWVfbWFzayBcdTAwMjYgQklUKGluZGV4KSk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogemwzMDczeF9kZXZfb3V0X2RwbGxfZ2V0IC0gZ2V0IERQTEwgSUQgdGhlIG91dHB1dCBpcyBkcml2ZW4gYnlcbiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcbmluZGV4IDA0ODhhZTZhYzQ4NmMuLmE2ODZkZDUyYmZhYzkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuY1xuQEAgLTIsNiAmIzQzOzIsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnVnLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jb250YWluZXJfb2YuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Rldl9wcmludGsuaFx1MDAzZVxuQEAgLTEzLDYgJiM0MzsxNCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwcmludGYuaFx1MDAzZVxuIFxuQEAgLTIyNzUsNDUgJiM0MzsyMjc3LDM3NSBAQCB6bDMwNzN4X2RwbGxfaW5pdF9maW5lX3BoYXNlX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxuIFx0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19TWU5USF9QSEFTRV9TSElGVF9DVFJMLCAweDAxKTtcbiB9XG4gXG4mIzQzOy8qIE1heGltdW0gZnJlcXVlbmN5IGFkanVzdG1lbnQ6ICYjNDM7LTElIG9mIG5vbWluYWwgaW4gcHBiICovXG4mIzQzOyNkZWZpbmUgWkwzMDczWF9EUExMX1BUUF9NQVhfQURKXHQxMDAwMDAwMFxuJiM0MztcbiAvKipcbi0gKiB6bDMwNzN4X2RwbGxfYWxsb2MgLSBhbGxvY2F0ZSBEUExMIGRldmljZVxuLSAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuLSAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlclxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQgLSByZWFkIGN1cnJlbnQgdGltZSBmcm9tIFRvRCBjb3VudGVyc1xuJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbiYjNDM7ICogQHRzOiB0aW1lc3BlYyB0byBzdG9yZSBjdXJyZW50IHRpbWVcbiYjNDM7ICogQHN0czogb3B0aW9uYWwgc3lzdGVtIHRpbWVzdGFtcCBwYWlyIGZvciBjcm9zcy10aW1lc3RhbXBpbmdcbiAgKlxuLSAqIEFsbG9jYXRlcyBEUExMIGRldmljZSBzdHJ1Y3R1cmUgZm9yIGdpdmVuIERQTEwgY2hhbm5lbC5cbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxuJiM0MztcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkcGxsLVx1MDAzZWRldiwgemxkcGxsLVx1MDAzZWlkLCBmYWxzZSwgdHMsIHN0cyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCAtIHNldCBUb0QgY291bnRlcnMgdG8gZ2l2ZW4gdGltZVxuJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbiYjNDM7ICogQHRzOiB0aW1lc3BlYyB3aXRoIHRpbWUgdG8gc2V0XG4gICpcbi0gKiBSZXR1cm46IHBvaW50ZXIgdG8gRFBMTCBkZXZpY2Ugb24gc3VjY2VzcywgZXJyb3IgcG9pbnRlciBvbiBlcnJvclxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuICAqL1xuLXN0cnVjdCB6bDMwNzN4X2RwbGwgKlxuLXpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcbiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXG4mIzQzO1x0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxuIHtcbi1cdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbDtcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuIFxuLVx0emxkcGxsID0ga3phbGxvY19vYmooKnpsZHBsbCk7XG4tXHRpZiAoIXpsZHBsbClcbi1cdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbiBcbi1cdHpsZHBsbC1cdTAwM2VkZXYgPSB6bGRldjtcbi1cdHpsZHBsbC1cdTAwM2VpZCA9IGNoO1xuLVx0bXV0ZXhfaW5pdChcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4tXHRJTklUX0xJU1RfSEVBRChcdTAwMjZ6bGRwbGwtXHUwMDNlcGlucyk7XG4mIzQzO1x0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkcGxsLVx1MDAzZWRldiwgemxkcGxsLVx1MDAzZWlkLCAqdHMpO1xuJiM0Mzt9XG4gXG4tXHRyZXR1cm4gemxkcGxsO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAgLSBhZGp1c3Qgc3ViLXNlY29uZCB0aW1lIHZpYSBwaGFzZSBzdGVwXG4mIzQzOyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbFxuJiM0MzsgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcyAobXVzdCBiZSB3aXRoaW4gKC1OU0VDX1BFUl9TRUMsXG4mIzQzOyAqICAgICAgICAgTlNFQ19QRVJfU0VDKSlcbiYjNDM7ICpcbiYjNDM7ICogVXNlcyB0aGUgb3V0cHV0IHBoYXNlIHN0ZXAgbWVjaGFuaXNtIHdpdGggdG9kX3N0ZXA9MSB0byBhZGp1c3QgYm90aFxuJiM0MzsgKiB0aGUgb3V0cHV0IGNsb2NrIHBoYXNlIGFuZCB0aGUgVG9EIGNvdW50ZXIgc2ltdWx0YW5lb3VzbHkuIFRoaXMga2VlcHNcbiYjNDM7ICogb3V0cHV0cyBhbmQgVG9EIGNvaGVyZW50LiBPbmx5IHZhbGlkIGZvciBOQ08uXG4mIzQzOyAqXG4mIzQzOyAqIE91dHB1dHMgYXJlIGdyb3VwZWQgYnkgc3ludGhlc2l6ZXIgc2luY2UgdGhlIHBoYXNlIHN0ZXAgdmFsdWUgaXMgaW5cbiYjNDM7ICogc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzLiBUaGUgZmlyc3Qgc3ludGggZ3JvdXAgd2l0aCBlbmFibGVkIG91dHB1dHNcbiYjNDM7ICogdXNlcyB0b2Rfc3RlcCB0byBhZGp1c3QgYm90aCBvdXRwdXRzIGFuZCB0aGUgVG9EIGNvdW50ZXIuIFJlbWFpbmluZ1xuJiM0MzsgKiBncm91cHMgc3RlcCBvdXRwdXRzIG9ubHkuIElmIG5vIHN5bnRoIGhhcyBlbmFibGVkIG91dHB1dHMsIHRoZSBUb0RcbiYjNDM7ICogY291bnRlciBpcyBzdGVwcGVkIGFsb25lIHVzaW5nIGFuIGVtcHR5IG91dHB1dCBtYXNrICh0aGUgRlcgdXNlc1xuJiM0MzsgKiB0aGUgZmlyc3QgZW5hYmxlZCBzeW50aCYjMzk7cyBwZXJpb2QgZm9yIHRoZSBjb252ZXJzaW9uKS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIG5vIHN5bnRocyBhdmFpbGFibGUsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHM2NCBkZWx0YSlcbiYjNDM7e1xuJiM0MztcdHUxNiBzeW50aF9tYXNrW1pMMzA3M1hfTlVNX1NZTlRIU10gPSB7fTtcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgemwzMDczeF9zeW50aCAqc3ludGg7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbjtcbiYjNDM7XHR1MzIgZmlyc3Rfc3ludGhfZnJlcSA9IDA7XG4mIzQzO1x0Ym9vbCB0b2Rfc3RlcHBlZCA9IGZhbHNlO1xuJiM0MztcdHMzMiBzdGVwX2N5Y2xlcztcbiYjNDM7XHR1MzIgc3ludGhfZnJlcTtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1x0dTggaTtcbiYjNDM7XG4mIzQzO1x0LyogQnVpbGQgcGVyLXN5bnRoIG91dHB1dCBtYXNrcyBmcm9tIHJlZ2lzdGVyZWQgb3V0cHV0IHBpbnMgKi9cbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBpbiwgXHUwMDI2emxkcGxsLVx1MDAzZXBpbnMsIGxpc3QpIHtcbiYjNDM7XHRcdHU4IG91dF9pZCwgc3ludGhfaWQ7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHpsMzA3M3hfZHBsbF9pc19pbnB1dF9waW4ocGluKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0b3V0X2lkID0gemwzMDczeF9vdXRwdXRfcGluX291dF9nZXQocGluLVx1MDAzZWlkKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXpsMzA3M3hfZGV2X291dF9pc19zdGVwcGVkKHpsZGV2LCBvdXRfaWQpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRzeW50aF9pZCA9IHpsMzA3M3hfZGV2X291dF9zeW50aF9nZXQoemxkZXYsIG91dF9pZCk7XG4mIzQzO1x0XHRpZiAoc3ludGhfaWQgXHUwMDNlPSBaTDMwNzNYX05VTV9TWU5USFMpIHtcbiYjNDM7XHRcdFx0ZGV2X3dhcm4oemxkZXYtXHUwMDNlZGV2LCBcJiMzNDtVbmV4cGVjdGVkIHN5bnRoIGlkIGZvciBPVVQldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgb3V0X2lkKTtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRzeW50aF9tYXNrW3N5bnRoX2lkXSB8PSBCSVQob3V0X2lkKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFByb2Nlc3MgZWFjaCBzeW50aCBncm91cCAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFpMMzA3M1hfTlVNX1NZTlRIUzsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN5bnRoID0gemwzMDczeF9zeW50aF9zdGF0ZV9nZXQoemxkZXYsIGkpO1xuJiM0MztcdFx0aWYgKCF6bDMwNzN4X3N5bnRoX2lzX2VuYWJsZWQoc3ludGgpIHx8XG4mIzQzO1x0XHQgICAgemwzMDczeF9zeW50aF9kcGxsX2dldChzeW50aCkgIT0gemxkcGxsLVx1MDAzZWlkKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRzeW50aF9mcmVxID0gemwzMDczeF9zeW50aF9mcmVxX2dldChzeW50aCk7XG4mIzQzO1xuJiM0MztcdFx0LyogUmVtZW1iZXIgZmlyc3QgZW5hYmxlZCBzeW50aCBmcmVxIGZvciBUb0Qtb25seSBmYWxsYmFjayAqL1xuJiM0MztcdFx0aWYgKCFmaXJzdF9zeW50aF9mcmVxKVxuJiM0MztcdFx0XHRmaXJzdF9zeW50aF9mcmVxID0gc3ludGhfZnJlcTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXN5bnRoX21hc2tbaV0pXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdC8qIFNhZmUgZm9yIHMzMjogbWF4IHN5bnRoIGZyZXEgaXMgNzUwIE1IeiAqL1xuJiM0MztcdFx0c3RlcF9jeWNsZXMgPSBkaXZfczY0KGRlbHRhICogc3ludGhfZnJlcSwgTlNFQ19QRVJfU0VDKTtcbiYjNDM7XG4mIzQzO1x0XHRyYyA9IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHN5bnRoX21hc2tbaV0sIHN0ZXBfY3ljbGVzLFxuJiM0MztcdFx0XHRcdFx0ICAgICAhdG9kX3N0ZXBwZWQpO1xuJiM0MztcdFx0aWYgKHJjKSB7XG4mIzQzO1x0XHRcdGlmICh0b2Rfc3RlcHBlZCkge1xuJiM0MztcdFx0XHRcdGRldl93YXJuKHpsZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcdCBcJiMzNDtQYXJ0aWFsIHBoYXNlIHN0ZXAgZmFpbHVyZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0cmV0dXJuIHJjO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0dG9kX3N0ZXBwZWQgPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFmaXJzdF9zeW50aF9mcmVxKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHQvKiBObyBlbmFibGVkIG91dHB1dHMgZm91bmQ7IHN0ZXAgVG9EIGNvdW50ZXIgb25seSB1c2luZyB0aGVcbiYjNDM7XHQgKiBmaXJzdCBlbmFibGVkIHN5bnRoJiMzOTtzIHBlcmlvZCAoZW1wdHkgb3V0cHV0IG1hc2spLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghdG9kX3N0ZXBwZWQpIHtcbiYjNDM7XHRcdHN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIGZpcnN0X3N5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7XG4mIzQzO1x0XHRyZXR1cm4gemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCwgMCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBzdGVwX2N5Y2xlcywgdHJ1ZSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gLyoqXG4tICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlXG4tICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXG4mIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSAtIGFkanVzdCBQVFAgY2xvY2sgdGltZVxuJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbiYjNDM7ICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHNcbiAgKlxuLSAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuXG4mIzQzOyAqIEZvciBOQ08sIGxhcmdlIGRlbHRhcyAoXHUwMDNlPSAxIHNlY29uZCkgYXJlIHNwbGl0IGludG8gYSBUb0RcbiYjNDM7ICogcmVhZC1tb2RpZnktd3JpdGUgZm9yIHRoZSBzZWNvbmRzIHBhcnQgYW5kIGFuIG91dHB1dCBwaGFzZSBzdGVwIGZvclxuJiM0MzsgKiB0aGUgc3ViLXNlY29uZCByZW1haW5kZXIuIFN1Yi1zZWNvbmQgZGVsdGFzIHVzZSBwaGFzZSBzdGVwIGRpcmVjdGx5LFxuJiM0MzsgKiBmYWxsaW5nIGJhY2sgdG8gVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIGlmIHBoYXNlIHN0ZXAgaXMgdW5hdmFpbGFibGUuXG4mIzQzOyAqIEluIEFVVE8vUkVGTE9DSyBtb2RlcywgbGFyZ2UgZGVsdGFzIGFyZSBzcGxpdCBpbnRvIFRvRFxuJiM0MzsgKiByZWFkLW1vZGlmeS13cml0ZSBmb3Igc2Vjb25kcyBhbmQgVElFIHdyaXRlIGZvciB0aGUgc3ViLXNlY29uZFxuJiM0MzsgKiByZW1haW5kZXIuIFN1Yi1zZWNvbmQgZGVsdGFzIHVzZSBUSUUgd3JpdGUgZGlyZWN0bHkuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4gICovXG4tdm9pZFxuLXpsMzA3M3hfZHBsbF9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBzNjQgZGVsdGEpXG4ge1xuLVx0V0FSTih6bGRwbGwtXHUwMDNlZHBsbF9kZXYsIFwmIzM0O0RQTEwgZGV2aWNlIGlzIHN0aWxsIHJlZ2lzdGVyZWRcXG5cJiMzNDspO1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxuJiM0MztcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjtcbiYjNDM7XHRib29sIHNlY19hZGp1c3RlZCA9IGZhbHNlO1xuJiM0MztcdHN0cnVjdCB0aW1lc3BlYzY0IHRzO1xuJiM0MztcdGludCByYztcbiBcbi1cdG11dGV4X2Rlc3Ryb3koXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuLVx0a2ZyZWUoemxkcGxsKTtcbiYjNDM7XHRpZiAoIWRlbHRhKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdC8qIE1vZGVzIHdpdGhvdXQgcGhhc2Ugc3RlcCBvciBUSUUgdXNlIHBsYWluIFRvRCBhZGp1c3QgKi9cbiYjNDM7XHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLVx1MDAzZWlkKTtcbiYjNDM7XHRpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIXpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjaGFuKSlcbiYjNDM7XHRcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTtcbiYjNDM7XG4mIzQzO1x0LyogU3BsaXQgb2ZmIHNlY29uZHMgdmlhIFRvRCByZWFkLW1vZGlmeS13cml0ZSBzbyB0aGUgc3ViLXNlY29uZFxuJiM0MztcdCAqIHJlbWFpbmRlciBjYW4gYmUgYXBwbGllZCB0aHJvdWdoIHRoZSBvdXRwdXQtY29oZXJlbnQgbWVjaGFuaXNtXG4mIzQzO1x0ICogKHBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoZGVsdGEgXHUwMDNlPSBOU0VDX1BFUl9TRUMgfHwgZGVsdGEgXHUwMDNjPSAtTlNFQ19QRVJfU0VDKSB7XG4mIzQzO1x0XHRzMzIgcmVtYWluZGVyO1xuJiM0MztcbiYjNDM7XHRcdHRzLnR2X3NlYyA9IGRpdl9zNjRfcmVtKGRlbHRhLCBOU0VDX1BFUl9TRUMsIFx1MDAyNnJlbWFpbmRlcik7XG4mIzQzO1x0XHR0cy50dl9uc2VjID0gMDtcbiYjNDM7XHRcdGRlbHRhID0gcmVtYWluZGVyO1xuJiM0MztcbiYjNDM7XHRcdHJjID0gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCwgdHMpO1xuJiM0MztcdFx0aWYgKHJjKVxuJiM0MztcdFx0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdFx0LyogTm8gc3ViLXNlY29uZCByZW1haW5kZXIsIGRvbmUgKi9cbiYjNDM7XHRcdGlmICghZGVsdGEpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRcdC8qIFdhaXQgZm9yIHRoZSBUb0Qgd3JpdGUgdG8gYmUgYXBwbGllZCBhdCB0aGUgMSBIeiBlZGdlXG4mIzQzO1x0XHQgKiBiZWZvcmUgaXNzdWluZyBwaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSwgc28gdGhlIHBlbmRpbmdcbiYjNDM7XHRcdCAqIFdSX05FWFRfMUhaIGRvZXMgbm90IG92ZXJ3cml0ZSB0aGUgc3ViLXNlY29uZCBhZGp1c3RtZW50LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgemxkcGxsLVx1MDAzZWlkKTtcbiYjNDM7XHRcdGlmIChyYylcbiYjNDM7XHRcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRcdHNlY19hZGp1c3RlZCA9IHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBBcHBseSBzdWItc2Vjb25kIGRlbHRhIHZpYSBwaGFzZSBzdGVwIChOQ08pIG9yIFRJRSB3cml0ZSAqL1xuJiM0MztcdGlmICh6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikpIHtcbiYjNDM7XHRcdHJjID0gemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoemxkcGxsLCBkZWx0YSk7XG4mIzQzO1x0XHRpZiAoIXJjKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cmMgPSB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsIGRlbHRhKTtcbiYjNDM7XHRcdGlmICghcmMpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogUGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUgZmFpbGVkLCBmYWxsIGJhY2sgdG8gVG9EIGFkanVzdCAqL1xuJiM0MztcdHJjID0gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCxcbiYjNDM7XHRcdFx0XHQgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTtcbiYjNDM7XG4mIzQzO1x0LyogSW4gdGhlIHVubGlrZWx5IGV2ZW50IHRoYXQgYm90aCBwaGFzZSBzdGVwL1RJRSB3cml0ZSBhbmQgZmFsbGJhY2tcbiYjNDM7XHQgKiBUb0QgYWRqdXN0IGZhaWwgYWZ0ZXIgc2Vjb25kcyB3ZXJlIGFscmVhZHkgY29tbWl0dGVkLCByZXR1cm5cbiYjNDM7XHQgKiBzdWNjZXNzIHRvIHByZXZlbnQgdGhlIFBUUCBzZXJ2byBmcm9tIHJldHJ5aW5nIHRoZSBmdWxsIGRlbHRhIGFuZFxuJiM0MztcdCAqIGFwcGx5aW5nIHNlY29uZHMgYWdhaW4uIFRoZSBzdWItc2Vjb25kIHJlc2lkdWFsIHdpbGwgc2VsZi1jb3JyZWN0XG4mIzQzO1x0ICogaW4gdGhlIG5leHQgc2Vydm8gY3ljbGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHJjIFx1MDAyNlx1MDAyNiBzZWNfYWRqdXN0ZWQpIHtcbiYjNDM7XHRcdGRldl93YXJuKHpsZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0IFwmIzM0O1N1Yi1zZWNvbmQgYWRqdXN0bWVudCBmYWlsZWQgYWZ0ZXIgc2Vjb25kcyBhcHBsaWVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJjO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lIC0gYWRqdXN0IFBUUCBjbG9jayBmcmVxdWVuY3lcbiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4mIzQzOyAqIEBzY2FsZWRfcHBtOiBmcmVxdWVuY3kgYWRqdXN0bWVudCBpbiBzY2FsZWQgcHBtIChwcG0gKiAyXjE2KVxuJiM0MzsgKlxuJiM0MzsgKiBPbmx5IHN1cHBvcnRlZCBmb3IgTkNPLiBXcml0ZXMgdGhlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgcmVnaXN0ZXIuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjpcbiYjNDM7ICogKiAlMFx0XHRcdC0gc3VjY2VzcyBvciBAc2NhbGVkX3BwbSBpcyB6ZXJvIChuby1vcClcbiYjNDM7ICogKiAlLUVPUE5PVFNVUFBcdC0gTkNPIHBpbiBpcyBub3QgY29ubmVjdGVkIGFuZCBAc2NhbGVkX3BwbSBpcyBub24temVyb1xuJiM0MzsgKiAqIG5lZ2F0aXZlXHRcdC0gb3RoZXIgZXJyb3JcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7emwzMDczeF9kcGxsX3B0cF9hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgbG9uZyBzY2FsZWRfcHBtKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIHB0cF9pbmZvKTtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xuJiM0MztcdHM2NCBvZmZzZXQ7XG4mIzQzO1xuJiM0MztcdC8qIENvbnZlcnQgc2NhbGVkX3BwbSB0byBkZl9vZmZzZXQgaW4gMl4tNDggc3RlcHM6XG4mIzQzO1x0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjMyKSAvIDEwXjZcbiYjNDM7XHQgKlxuJiM0MztcdCAqIFNpbXBsaWZ5IHRvIGF2b2lkIG92ZXJmbG93OlxuJiM0MztcdCAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogMl4yNikgLyA1XjZcbiYjNDM7XHQgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDY3MTA4ODY0KSAvIDE1NjI1XG4mIzQzO1x0ICovXG4mIzQzO1x0b2Zmc2V0ID0gLWRpdl9zNjQoKHM2NClzY2FsZWRfcHBtICogNjcxMDg4NjRMTCwgMTU2MjUpO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRwbGwtXHUwMDNlZGV2LCB6bGRwbGwtXHUwMDNlaWQpO1xuJiM0MztcdGlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKVxuJiM0MztcdFx0cmV0dXJuIHNjYWxlZF9wcG0gPyAtRU9QTk9UU1VQUCA6IDA7XG4mIzQzO1x0aWYgKG9mZnNldCA9PSBjaGFuLVx1MDAzZWRmX29mZnNldClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoemxkcGxsLVx1MDAzZWRldiwgemxkcGxsLVx1MDAzZWlkLCBvZmZzZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSAtIGFkanVzdCBQVFAgY2xvY2sgcGhhc2VcbiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4mIzQzOyAqIEBkZWx0YTogcGhhc2UgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kc1xuJiM0MzsgKlxuJiM0MzsgKiBPbmx5IHN1cHBvcnRlZCBpbiBBVVRPIGFuZCBSRUZMT0NLIG1vZGVzLiBVc2VzIFRJRSB3cml0ZSBmb3JcbiYjNDM7ICogbmFub3NlY29uZCByZXNvbHV0aW9uIHBoYXNlIGFkanVzdG1lbnQuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjpcbiYjNDM7ICogKiAlMFx0XHRcdC0gc3VjY2VzcyBvciBAZGVsdGEgaXMgemVybyAobm8tb3ApXG4mIzQzOyAqICogJS1FT1BOT1RTVVBQXHQtIG1vZGUgZG9lcyBub3Qgc3VwcG9ydCBUSUUgYW5kIEBkZWx0YSBpcyBub24temVyb1xuJiM0MzsgKiAqIG5lZ2F0aXZlXHRcdC0gb3RoZXIgZXJyb3JcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHMzMiBkZWx0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxuJiM0MztcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFkZWx0YSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLVx1MDAzZWlkKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY2hhbikpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdHJldHVybiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsIGRlbHRhKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHMzMlxuJiM0Mzt6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyBfX2Fsd2F5c191bnVzZWQpXG4mIzQzO3tcbiYjNDM7XHQvKiBIVyBsaW1pdHMgVElFIHdyaXRlIHRvICYjNDM7LTEgc2Vjb25kLiBSZXR1cm4gdGhlIGNvbnN0YW50IEhXXG4mIzQzO1x0ICogbGltaXQgYW5kIGxldCBhZGpwaGFzZSBoYW5kbGUgbW9kZS1zcGVjaWZpYyBjaGVja3MuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0dXJuIE5TRUNfUEVSX1NFQyAtIDE7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvID0ge1xuJiM0MztcdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuJiM0MztcdC5tYXhfYWRqXHQ9IFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESixcbiYjNDM7XHQuZ2V0dGltZXg2NFx0PSB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQsXG4mIzQzO1x0LnNldHRpbWU2NFx0PSB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCxcbiYjNDM7XHQuYWRqdGltZVx0PSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUsXG4mIzQzO1x0LmFkamZpbmVcdD0gemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lLFxuJiM0MztcdC5hZGpwaGFzZVx0PSB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlLFxuJiM0MztcdC5nZXRtYXhwaGFzZVx0PSB6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIgLSByZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsXG4mIzQzOyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byByZWdpc3RlciBQVFAgY2xvY2sgZm9yXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4mIzQzO1x0c3RydWN0IHB0cF9jbG9jayAqcHRwX2Nsb2NrO1xuJiM0MztcbiYjNDM7XHRzbnByaW50Zih6bGRwbGwtXHUwMDNlcHRwX2luZm8ubmFtZSwgc2l6ZW9mKHpsZHBsbC1cdTAwM2VwdHBfaW5mby5uYW1lKSxcbiYjNDM7XHRcdCBcJiMzNDslcy1kcGxsJXVcJiMzNDssIGRldl9uYW1lKHpsZGV2LVx1MDAzZWRldiksIHpsZHBsbC1cdTAwM2VpZCk7XG4mIzQzO1xuJiM0MztcdHB0cF9jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcihcdTAwMjZ6bGRwbGwtXHUwMDNlcHRwX2luZm8sIHpsZGV2LVx1MDAzZWRldik7XG4mIzQzO1x0aWYgKElTX0VSUihwdHBfY2xvY2spKSB7XG4mIzQzO1x0XHRkZXZfZXJyKHpsZGV2LVx1MDAzZWRldiwgXCYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgRFBMTCV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR6bGRwbGwtXHUwMDNlaWQpO1xuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIocHRwX2Nsb2NrKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHpsZHBsbC1cdTAwM2VwdHBfY2xvY2sgPSBwdHBfY2xvY2s7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyIC0gdW5yZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsXG4mIzQzOyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byB1bnJlZ2lzdGVyIFBUUCBjbG9jayBmb3JcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIUlTX0VSUl9PUl9OVUxMKHpsZHBsbC1cdTAwM2VwdHBfY2xvY2spKSB7XG4mIzQzO1x0XHRwdHBfY2xvY2tfdW5yZWdpc3Rlcih6bGRwbGwtXHUwMDNlcHRwX2Nsb2NrKTtcbiYjNDM7XHRcdHpsZHBsbC1cdTAwM2VwdHBfY2xvY2sgPSBOVUxMO1xuJiM0MztcdH1cbiB9XG4gXG4gLyoqXG5AQCAtMjM5OCw2ICYjNDM7MjczMCw0OCBAQCB6bDMwNzN4X2RwbGxfcmVmX3N5bmNfcGFpcnNfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kcGxsX2FsbG9jIC0gYWxsb2NhdGUgRFBMTCBkZXZpY2VcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlclxuJiM0MzsgKlxuJiM0MzsgKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogcG9pbnRlciB0byBEUExMIGRldmljZSBvbiBzdWNjZXNzLCBlcnJvciBwb2ludGVyIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgemwzMDczeF9kcGxsICpcbiYjNDM7emwzMDczeF9kcGxsX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsO1xuJiM0MztcbiYjNDM7XHR6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTtcbiYjNDM7XHRpZiAoIXpsZHBsbClcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuJiM0MztcbiYjNDM7XHR6bGRwbGwtXHUwMDNlZGV2ID0gemxkZXY7XG4mIzQzO1x0emxkcGxsLVx1MDAzZWlkID0gY2g7XG4mIzQzO1x0emxkcGxsLVx1MDAzZXB0cF9pbmZvID0gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvO1xuJiM0MztcdG11dGV4X2luaXQoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcdElOSVRfTElTVF9IRUFEKFx1MDAyNnpsZHBsbC1cdTAwM2VwaW5zKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHpsZHBsbDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfZHBsbF9mcmVlIC0gZnJlZSBEUExMIGRldmljZVxuJiM0MzsgKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmVcbiYjNDM7ICpcbiYjNDM7ICogRGVhbGxvY2F0ZXMgZ2l2ZW4gRFBMTCBkZXZpY2UgcHJldmlvdXNseSBhbGxvY2F0ZWQgYnkgQHpsMzA3M3hfZHBsbF9hbGxvYy5cbiYjNDM7ICovXG4mIzQzO3ZvaWRcbiYjNDM7emwzMDczeF9kcGxsX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuJiM0Mzt7XG4mIzQzO1x0V0FSTih6bGRwbGwtXHUwMDNlZHBsbF9kZXYsIFwmIzM0O0RQTEwgZGV2aWNlIGlzIHN0aWxsIHJlZ2lzdGVyZWRcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRtdXRleF9kZXN0cm95KFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRrZnJlZSh6bGRwbGwpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIHpsMzA3M3hfZHBsbF9yZWdpc3RlciAtIHJlZ2lzdGVyIERQTEwgZGV2aWNlIGFuZCBhbGwgaXRzIHBpbnNcbiAgKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmVcbkBAIC0yNDI4LDYgJiM0MzsyODAyLDEzIEBAIHpsMzA3M3hfZHBsbF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4gXHRcdHJldHVybiByYztcbiBcdH1cbiBcbiYjNDM7XHRyYyA9IHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIoemxkcGxsKTtcbiYjNDM7XHRpZiAocmMpIHtcbiYjNDM7XHRcdHpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTtcbiYjNDM7XHRcdHpsMzA3M3hfZHBsbF9kZXZpY2VfdW5yZWdpc3Rlcih6bGRwbGwpO1xuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMjQ0MSw3ICYjNDM7MjgyMiw3IEBAIHpsMzA3M3hfZHBsbF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4gdm9pZFxuIHpsMzA3M3hfZHBsbF91bnJlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiB7XG4tXHQvKiBVbnJlZ2lzdGVyIGFsbCBwaW5zIGFuZCBkcGxsICovXG4mIzQzO1x0emwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHpsZHBsbCk7XG4gXHR6bDMwNzN4X2RwbGxfcGluc191bnJlZ2lzdGVyKHpsZHBsbCk7XG4gXHR6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXG5pbmRleCBmYWViYzQwMmJhMWI3Li45OTMyMjFkYzYzMjQ5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmhcbkBAIC01LDYgJiM0Mzs1LDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kcGxsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7Y29yZS5oXCYjMzQ7XG4gXG5AQCAtMjIsNiAmIzQzOzIzLDggQEBcbiAgKiBAdHlwZTogRFBMTCB0eXBlIChQUFMgb3IgRUVDKVxuICAqIEBsb2NrX3N0YXR1czogbGFzdCBzYXZlZCBEUExMIGxvY2sgc3RhdHVzXG4gICogQHBpbnM6IGxpc3Qgb2YgcGluc1xuJiM0MzsgKiBAcHRwX2luZm86IFBUUCBjbG9jayBpbmZvXG4mIzQzOyAqIEBwdHBfY2xvY2s6IHJlZ2lzdGVyZWQgUFRQIGNsb2NrIChvciBOVUxMKVxuICAqL1xuIHN0cnVjdCB6bDMwNzN4X2RwbGwge1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0XHRsaXN0O1xuQEAgLTM2LDYgJiM0MzszOSw4IEBAIHN0cnVjdCB6bDMwNzN4X2RwbGwge1xuIFx0ZW51bSBkcGxsX3R5cGVcdFx0XHR0eXBlO1xuIFx0ZW51bSBkcGxsX2xvY2tfc3RhdHVzXHRcdGxvY2tfc3RhdHVzO1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0XHRwaW5zO1xuJiM0MztcdHN0cnVjdCBwdHBfY2xvY2tfaW5mb1x0XHRwdHBfaW5mbztcbiYjNDM7XHRzdHJ1Y3QgcHRwX2Nsb2NrXHRcdCpwdHBfY2xvY2s7XG4gfTtcbiBcbiBzdHJ1Y3QgemwzMDczeF9kcGxsICp6bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaFxuaW5kZXggYjcwZWFkN2Q0NDk1Yi4uZjNhNWUxMjE1YWEzNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXG5AQCAtMTc5LDYgJiM0MzsxNzksMjAgQEBcbiAjZGVmaW5lIFpMX0RQTExfREZfUkVBRF9DTURcdFx0XHRHRU5NQVNLKDIsIDApXG4gI2RlZmluZSBaTF9EUExMX0RGX1JFQURfQ01EX0FDQ19JXHRcdDRcbiBcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTFx0XHRcdFpMX1JFRyg1LCAweDMwLCAxKVxuJiM0MzsjZGVmaW5lIFpMX0RQTExfVElFX0NUUkxfT1BcdFx0XHRHRU5NQVNLKDIsIDApXG4mIzQzOyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUF9XUlx0XHRcdDRcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0NUUkxfTUFTS1x0XHRaTF9SRUcoNSwgMHgzMSwgMSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX0NUUkwoX2lkeClcdFx0XHRcdFx0XFxcbiYjNDM7XHRaTF9SRUdfSURYKF9pZHgsIDUsIDB4MzgsIDEsIFpMMzA3M1hfTUFYX0NIQU5ORUxTLCAxKVxuJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfU0VNXHRcdFx0QklUKDQpXG4mIzQzOyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURcdFx0XHRHRU5NQVNLKDMsIDApXG4mIzQzOyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFpcdDFcbiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UXHRcdDhcbiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9ORVhUXzFIWlx0OVxuJiM0MztcbiAjZGVmaW5lIFpMX1JFR19EUExMX01FQVNfQ1RSTFx0XHRcdFpMX1JFRyg1LCAweDUwLCAxKVxuICNkZWZpbmUgWkxfRFBMTF9NRUFTX0NUUkxfRU5cdFx0XHRCSVQoMClcbiAjZGVmaW5lIFpMX0RQTExfTUVBU19DVFJMX0FWR19GQUNUT1JcdFx0R0VOTUFTSyg3LCA0KVxuQEAgLTE5Myw2ICYjNDM7MjA3LDkgQEBcbiBcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAqIFJlZ2lzdGVyIFBhZ2VzIDYtNywgRFBMTCBEYXRhXG4mIzQzOyAqXG4mIzQzOyAqIFBlci1jaGFubmVsIHJlZ2lzdGVycyB3aXRoIHN0cmlkZSAweDIwLiBDaGFubmVscyAwLTMgcmVzaWRlIG9uIHBhZ2UgNixcbiYjNDM7ICogY2hhbm5lbCA0IG9uIHBhZ2UgNy5cbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiBcbiAjZGVmaW5lIFpMX1JFR19EUExMX0RGX09GRlNFVF8wMyhfaWR4KVx0XHRcdFx0XHRcXFxuQEAgLTIwMiw2ICYjNDM7MjE5LDI0IEBAXG4gXHQoKF9pZHgpIFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfREZfT0ZGU0VUXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfREZfT0ZGU0VUXzQpXG4gI2RlZmluZSBaTF9EUExMX0RGX09GRlNFVF9VTktOT1dOXHRTNjRfTUlOXG4gXG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEFfMDMoX2lkeClcdFx0XHRcdFx0XFxcbiYjNDM7XHRaTF9SRUdfSURYKF9pZHgsIDYsIDB4MEMsIDYsIDQsIDB4MjApXG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEFfNFx0XHRcdFpMX1JFRyg3LCAweDBDLCA2KVxuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBKF9pZHgpXHRcdFx0XHRcdFxcXG4mIzQzO1x0KChfaWR4KSBcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RJRV9EQVRBXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVElFX0RBVEFfNClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQ18wMyhfaWR4KVx0XHRcdFx0XHRcXFxuJiM0MztcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgxMiwgNiwgNCwgMHgyMClcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzRcdFx0XHRaTF9SRUcoNywgMHgxMiwgNilcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDKF9pZHgpXHRcdFx0XHRcdFxcXG4mIzQzO1x0KChfaWR4KSBcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RPRF9TRUNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfU0VDXzQpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU18wMyhfaWR4KVx0XHRcdFx0XHRcXFxuJiM0MztcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgxOCwgNCwgNCwgMHgyMClcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlNfNFx0XHRcdFpMX1JFRyg3LCAweDE4LCA0KVxuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OUyhfaWR4KVx0XHRcdFx0XHRcXFxuJiM0MztcdCgoX2lkeCkgXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9UT0RfTlNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfTlNfNClcbiYjNDM7XG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICogUmVnaXN0ZXIgUGFnZSA5LCBTeW50aCBhbmQgT3V0cHV0XG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuQEAgLTIyMSw2ICYjNDM7MjU2LDIzIEBAXG4gI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9FTlx0XHRcdEJJVCgwKVxuICNkZWZpbmUgWkxfT1VUUFVUX0NUUkxfU1lOVEhfU0VMXHRcdEdFTk1BU0soNiwgNClcbiBcbiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1NURVBfVElNRV9NQVNLXHRcdFpMX1JFRyg5LCAweDM2LCAyKVxuJiM0MztcbiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTFx0XHRaTF9SRUcoOSwgMHgzOCwgMSlcbiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX0RQTExcdFx0R0VOTUFTSyg2LCA0KVxuJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVBcdEJJVCgzKVxuJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BcdFx0R0VOTUFTSygxLCAwKVxuJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfTk9ORVx0MFxuJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfUkVTRVRcdDFcbiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1JFQURcdDJcbiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1dSSVRFXHQzXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9OVU1CRVJcdFx0WkxfUkVHKDksIDB4MzksIDEpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLXHRcdFpMX1JFRyg5LCAweDNhLCAyKVxuJiM0MztcbiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfREFUQVx0XHRaTF9SRUcoOSwgMHgzYywgNClcbiYjNDM7XG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgKiBSZWdpc3RlciBQYWdlIDEwLCBSZWYgTWFpbGJveFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDExOjUyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaTDMwNzNYX0kyQyYjMzQ7LAogICAgJiMzNDtaTDMwNzNYX1NQSSYjMzQ7LAogICAgJiMzNDtQVFBfMTU4OF9DTE9DSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3psMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fdG9kX3JlYWQmIzM0OywKICAgICYjMzQ7emwzMDczeF9jaGFuX3RvZF93cml0ZSYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fdGllX3dyaXRlJiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl9waGFzZV9zdGVwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgUFRQIGNsb2NrIHN1cHBvcnQgdG8gdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyICh6bDMwNzN4KS4gVGhlIGRyaXZlciBjYW4gYmUgaW5zdGFudGlhdGVkIHZpYSBJMkMgb3IgU1BJLCBhbmQgdGhlIFBUUCBjbG9jayBpbnRlcmZhY2UgaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdmlhIGAvZGV2L3B0cFhgLiBTeXprYWxsZXIgY2FuIGZ1enogdGhpcyBmdW5jdGlvbmFsaXR5IHVzaW5nIEkyQy9TUEkgZW11bGF0aW9uIGFuZCBQVFAgaW9jdGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTkxZGVjODNhODVkNzA3NDU1MjYwZTkxOGU3NDEyNTdlNDVmOTI5MQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDcgMTE6NTI6NDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZwppbmRleCA1YmJjYTE0MDA1ODEzLi5kYTE3MzFhY2UxNWYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWcKQEAgLTIsNyAmIzQzOzIsNyBAQAogCiBjb25maWcgWkwzMDczWAogCXRyaXN0YXRlICYjMzQ7TWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlcyYjMzQ7IGlmIENPTVBJTEVfVEVTVAotCWRlcGVuZHMgb24gTkVUCiYjNDM7CWRlcGVuZHMgb24gTkVUICZhbXA7JmFtcDsgUFRQXzE1ODhfQ0xPQ0sKIAlzZWxlY3QgRFBMTAogCXNlbGVjdCBORVRfREVWTElOSwogCXNlbGVjdCBSRUdNQVAKQEAgLTE2LDcgJiM0MzsxNiw3IEBAIGNvbmZpZyBaTDMwNzNYCiAKIGNvbmZpZyBaTDMwNzNYX0kyQwogCXRyaXN0YXRlICYjMzQ7STJDIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlcyYjMzQ7Ci0JZGVwZW5kcyBvbiBJMkMgJmFtcDsmYW1wOyBORVQKJiM0MzsJZGVwZW5kcyBvbiBJMkMgJmFtcDsmYW1wOyBORVQgJmFtcDsmYW1wOyBQVFBfMTU4OF9DTE9DSwogCXNlbGVjdCBSRUdNQVBfSTJDCiAJc2VsZWN0IFpMMzA3M1gKIAloZWxwCkBAIC0yOCw3ICYjNDM7MjgsNyBAQCBjb25maWcgWkwzMDczWF9JMkMKIAogY29uZmlnIFpMMzA3M1hfU1BJCiAJdHJpc3RhdGUgJiMzNDtTUEkgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzJiMzNDsKLQlkZXBlbmRzIG9uIE5FVCAmYW1wOyZhbXA7IFNQSQomIzQzOwlkZXBlbmRzIG9uIE5FVCAmYW1wOyZhbXA7IFNQSSAmYW1wOyZhbXA7IFBUUF8xNTg4X0NMT0NLCiAJc2VsZWN0IFJFR01BUF9TUEkKIAlzZWxlY3QgWkwzMDczWAogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYwppbmRleCA0ZWMyY2Y1M2RhZDQ2Li5hZjZjYTQzYzMzNTkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jCkBAIC0zLDYgJiM0MzszLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9jbGVhbnVwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGVsYXkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZXZfcHJpbnRrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zdHJpbmcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwogCkBAIC0xNjIsOCAmIzQzOzE2Myw4IEBAIGludCB6bDMwNzN4X2NoYW5fbmNvX21vZGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KQogICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3hfZGV2IHN0cnVjdHVyZQogICogQGluZGV4OiBEUExMIGNoYW5uZWwgaW5kZXggdG8gZmV0Y2ggc3RhdGUgZm9yCiAgKgotICogUmVhZHMgdGhlIG1vZGVfcmVmc2VsIHJlZ2lzdGVyIGFuZCByZWZlcmVuY2UgcHJpb3JpdHkgcmVnaXN0ZXJzIGZvcgotICogdGhlIGdpdmVuIERQTEwgY2hhbm5lbCBhbmQgc3RvcmVzIHRoZSByYXcgdmFsdWVzIGZvciBsYXRlciB1c2UuCiYjNDM7ICogUmVhZHMgdGhlIG1vZGVfcmVmc2VsLCBzdGF0dXMgYW5kIHJlZmVyZW5jZSBwcmlvcml0eSByZWdpc3RlcnMgZm9yCiYjNDM7ICogdGhlIGdpdmVuIERQTEwgY2hhbm5lbCBhbmQgc3RvcmVzIHRoZSB2YWx1ZXMgZm9yIGxhdGVyIHVzZS4KICAqCiAgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKICAqLwpAQCAtMjM0LDYgJiM0MzsyMzUsMzIyIEBAIGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKnpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwKIAlyZXR1cm4gJmFtcDt6bGRldi0mZ3Q7Y2hhbltpbmRleF07CiB9CiAKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQgLSB3YWl0IGZvciBUb0Qgc2VtYXBob3JlIHRvIGNsZWFyCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKgomIzQzOyAqIFBvbGxzIHRoZSBUb0QgY29udHJvbCByZWdpc3RlciB1bnRpbCB0aGUgc2VtYXBob3JlIGJpdCBpcyBjbGVhcmVkLAomIzQzOyAqIGluZGljYXRpbmcgdGhlIGRldmljZSBoYXMgY29tcGxldGVkIHRoZSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FQlVTWSBpZiBzZW1hcGhvcmUgbm90IGNsZWFyZWQsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCB0aW1lb3V0OwomIzQzOwl1OCB0b2RfY3RybDsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfcmVhZF91OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLCAmYW1wO3RvZF9jdHJsKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlzd2l0Y2ggKEZJRUxEX0dFVChaTF9EUExMX1RPRF9DVFJMX0NNRCwgdG9kX2N0cmwpKSB7CiYjNDM7CWNhc2UgMDoKJiM0MzsJCS8qIE5vIG9wZXJhdGlvbiBwZW5kaW5nIChwb3dlci1vbi9yZXNldCBkZWZhdWx0KSAqLwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CWNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFo6CiYjNDM7CQl0aW1lb3V0ID0gWkxfUE9MTF9UT0RfV1JfVElNRU9VVF9VUzsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX0NVUlJFTlQ6CiYjNDM7CWNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFo6CiYjNDM7CQl0aW1lb3V0ID0gWkxfUE9MTF9UT0RfUkRfVElNRU9VVF9VUzsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJLyogRlcgbmV2ZXIgd3JpdGVzIGNtZCBiaXRzOyBvbmx5IHRoZSBkcml2ZXIgc2V0cyB0aGVtICovCiYjNDM7CQlXQVJOX09OKDEpOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSwKJiM0MzsJCQkJICBaTF9EUExMX1RPRF9DVFJMX1NFTSwgdGltZW91dCk7CiYjNDM7CiYjNDM7CXJldHVybiByYyA9PSAtRVRJTUVET1VUID8gLUVCVVNZIDogcmM7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl90b2RfY3RybCAtIGlzc3VlIFRvRCBjb21tYW5kCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAY21kOiBUb0QgY29tbWFuZCB0byBleGVjdXRlCiYjNDM7ICoKJiM0MzsgKiBXcml0ZXMgdGhlIHNlbWFwaG9yZSBhbmQgY29tbWFuZCB0byBkcGxsX3RvZF9jdHJsLiBUaGUgY2FsbGVyIG11c3QKJiM0MzsgKiBlbnN1cmUgdGhlIGRldmljZSBpcyByZWFkeSAoc2VtYXBob3JlIGNsZWFyKSBiZWZvcmUgY2FsbGluZyBhbmQKJiM0MzsgKiBtdXN0IHdhaXQgZm9yIGNvbXBsZXRpb24gaWYgbmVlZGVkLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHU4IGNtZCkKJiM0Mzt7CiYjNDM7CXJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksCiYjNDM7CQkJCVpMX0RQTExfVE9EX0NUUkxfU0VNIHwgY21kKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9yZWFkIC0gcmVhZCBUb0QgcmVnaXN0ZXJzIGFmdGVyIGlzc3VpbmcgYSBjb21tYW5kCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAbmV4dF9oejogaWYgdHJ1ZSwgcmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIejsgb3RoZXJ3aXNlIHJlYWQgY3VycmVudAomIzQzOyAqIEB0czogdGltZXNwZWMgdG8gc3RvcmUgdGhlIHJlc3VsdAomIzQzOyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nCiYjNDM7ICoKJiM0MzsgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cywKJiM0MzsJCQkgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKQomIzQzO3sKJiM0MzsJdTMyIG5zZWM7CiYjNDM7CXU2NCBzZWM7CiYjNDM7CXU4IGNtZDsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlpZiAobmV4dF9oeikKJiM0MzsJCWNtZCA9IFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaOwomIzQzOwllbHNlCiYjNDM7CQljbWQgPSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UOwomIzQzOwomIzQzOwkvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVG9EIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqLwomIzQzOwlyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXB0cF9yZWFkX3N5c3RlbV9wcmV0cyhzdHMpOwomIzQzOwlyYyA9IHpsMzA3M3hfY2hhbl90b2RfY3RybCh6bGRldiwgY2gsIGNtZCk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwlwdHBfcmVhZF9zeXN0ZW1fcG9zdHRzKHN0cyk7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF9yZWFkX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksICZhbXA7c2VjKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwkvKiBIVyBuYW5vc2Vjb25kcyBhcmUgYWx3YXlzIGluIFswLCBOU0VDX1BFUl9TRUMpIHJhbmdlICovCiYjNDM7CXJjID0gemwzMDczeF9yZWFkX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgJmFtcDtuc2VjKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwl0cy0mZ3Q7dHZfc2VjID0gc2VjOwomIzQzOwl0cy0mZ3Q7dHZfbnNlYyA9IG5zZWM7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlIC0gd3JpdGUgVG9EIHJlZ2lzdGVycyBhbmQgdHJpZ2dlciAxIEh6IHVwZGF0ZQomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQHRzOiB0aW1lIHRvIHNldAomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS4KJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cykKJiM0Mzt7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi8KJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfU0VDKGNoKSwgdHMudHZfc2VjKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCB0cy50dl9uc2VjKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9jdHJsKHpsZGV2LCBjaCwKJiM0MzsJCQkJICAgICBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWik7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0IC0gYXRvbWljIFRvRCByZWFkLW1vZGlmeS13cml0ZSB3aXRoIHJvbGxvdmVyIGd1YXJkCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCB0byBhcHBseQomIzQzOyAqCiYjNDM7ICogUmVhZHMgdGhlIG5leHQtSHogVG9EIGFuZCBjdXJyZW50IFRvRCwgdGhlbiBjaGVja3Mgd2hldGhlciBlbm91Z2ggdGltZQomIzQzOyAqIHJlbWFpbnMgYmVmb3JlIHRoZSBuZXh0IDEgSHogcm9sbG92ZXIgdG8gc2FmZWx5IGNvbXBsZXRlIHRoZSB3cml0ZS4KJiM0MzsgKiBSZS1yZWFkcyBpZiB0aGUgMSBIeiB0aWNrIGNyb3NzZWQgYmV0d2VlbiB0aGUgdHdvIHJlYWRzIG9yIGlmIGxlc3MKJiM0MzsgKiB0aGFuIDIwIG1zIHJlbWFpbnMgYmVmb3JlIHRoZSBuZXh0IHJvbGxvdmVyLiBBcHBsaWVzIEBkZWx0YSBhbmQgd3JpdGVzCiYjNDM7ICogdGhlIHJlc3VsdCBiYWNrLgomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS4KJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFpMX1RPRF9NQVhfUkVUUklFUwkyMAomIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpCiYjNDM7ewomIzQzOwlzdGF0aWMgY29uc3QgbG9uZyB0aHJlc2hvbGRfbnMgPSAyMCAqIE5TRUNfUEVSX01TRUM7CiYjNDM7CXN0cnVjdCB0aW1lc3BlYzY0IHRzX25leHQsIHRzX2N1ciwgZGlmZjsKJiM0MzsJaW50IHJjLCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgWkxfVE9EX01BWF9SRVRSSUVTOyBpJiM0MzsmIzQzOykgewomIzQzOwkJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCB0cnVlLCAmYW1wO3RzX25leHQsIE5VTEwpOwomIzQzOwkJaWYgKHJjKQomIzQzOwkJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJCXJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgZmFsc2UsICZhbXA7dHNfY3VyLCBOVUxMKTsKJiM0MzsJCWlmIChyYykKJiM0MzsJCQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CQkvKiBFbnN1cmUgdGhlIDEgSHogdGljayBkaWQgbm90IGNyb3NzIGJldHdlZW4gdGhlIHR3byByZWFkcwomIzQzOwkJICogYW5kIHRoYXQgZW5vdWdoIG1hcmdpbiByZW1haW5zIHRvIGNvbXBsZXRlIHRoZSB3cml0ZS4KJiM0MzsJCSAqLwomIzQzOwkJZGlmZiA9IHRpbWVzcGVjNjRfc3ViKHRzX25leHQsIHRzX2N1cik7CiYjNDM7CQlpZiAoZGlmZi50dl9zZWMgJmd0OyAwIHx8CiYjNDM7CQkgICAgKCFkaWZmLnR2X3NlYyAmYW1wOyZhbXA7IGRpZmYudHZfbnNlYyAmZ3Q7PSB0aHJlc2hvbGRfbnMpKQomIzQzOwkJCWJyZWFrOwomIzQzOwl9CiYjNDM7CWlmIChpID09IFpMX1RPRF9NQVhfUkVUUklFUykgewomIzQzOwkJZGV2X3dhcm4oemxkZXYtJmd0O2RldiwKJiM0MzsJCQkgJiMzNDtEUExMJXUgVG9EIGFkanVzdCBmYWlsZWQgdG8gZ2V0IHN0YWJsZSBtYXJnaW5cbiYjMzQ7LAomIzQzOwkJCSBjaCk7CiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEFwcGx5IGRlbHRhIHRvIHRoZSBuZXh0LUh6IFRvRCAqLwomIzQzOwl0c19uZXh0ID0gdGltZXNwZWM2NF9hZGQodHNfbmV4dCwgZGVsdGEpOwomIzQzOwlpZiAoIXRpbWVzcGVjNjRfdmFsaWQoJmFtcDt0c19uZXh0KSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXR1cm4gemwzMDczeF9jaGFuX3RvZF93cml0ZSh6bGRldiwgY2gsIHRzX25leHQpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCAtIHdyaXRlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgdG8gaGFyZHdhcmUKJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleAomIzQzOyAqIEBvZmZzZXQ6IGZyZXF1ZW5jeSBvZmZzZXQgaW4gMl4tNDggc3RlcHMKJiM0MzsgKgomIzQzOyAqIENvbnRleHQ6IENhbGxlciBtdXN0IGhvbGQgdGhlIHBlci1EUExMIGxvY2suCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7aW50IHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgb2Zmc2V0KQomIzQzO3sKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9PRkZTRVQoY2gpLCBvZmZzZXQpOwomIzQzOwlpZiAoIXJjKQomIzQzOwkJemxkZXYtJmd0O2NoYW5bY2hdLmRmX29mZnNldCA9IG9mZnNldDsKJiM0MzsKJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlIC0gYWRqdXN0IERQTEwgcGhhc2UgdXNpbmcgVElFIHdyaXRlCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAZGVsdGFfbnM6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMgKG11c3QgYmUgd2l0aGluICYjNDM7LTFzKQomIzQzOyAqCiYjNDM7ICogQ29udmVydHMgbmFub3NlY29uZHMgdG8gVElFIHVuaXRzICgwLjAxIHBzKSBhbmQgd3JpdGVzIFRJRSBkYXRhCiYjNDM7ICogdG8gdGhlIHNwZWNpZmllZCBjaGFubmVsLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7aW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucykKJiM0Mzt7CiYjNDM7CXM2NCB0aWVfZGF0YTsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlpZiAoV0FSTl9PTihkZWx0YV9ucyAmbHQ7PSAtTlNFQ19QRVJfU0VDIHx8IGRlbHRhX25zICZndDs9IE5TRUNfUEVSX1NFQykpCiYjNDM7CQlyZXR1cm4gLUVSQU5HRTsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7emxkZXYtJmd0O3RpZV9sb2NrKTsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRJRSBvcGVyYXRpb24gdG8gY29tcGxldGUgKi8KJiM0MzsJcmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsCiYjNDM7CQkJCSAgWkxfRFBMTF9USUVfQ1RSTF9PUCwKJiM0MzsJCQkJICBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwkvKiBDb252ZXJ0IG5zIHRvIFRJRSB1bml0cyAoMC4wMSBwcyA9IDEwXi0xNCBzKSAqLwomIzQzOwl0aWVfZGF0YSA9IGRlbHRhX25zICogMTAwMDAwTEw7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9EQVRBKGNoKSwgdGllX2RhdGEpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkxfTUFTSywgQklUKGNoKSk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLAomIzQzOwkJCQlaTF9EUExMX1RJRV9DVFJMX09QX1dSKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAgLSBleGVjdXRlIG9uZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb24KJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleAomIzQzOyAqIEBvdXRfbWFzazogYml0bWFzayBvZiBvdXRwdXRzIHRvIHN0ZXAKJiM0MzsgKiBAc3RlcF9jeWNsZXM6IHBoYXNlIHN0ZXAgaW4gc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzCiYjNDM7ICogQHRvZF9zdGVwOiBhbHNvIHN0ZXAgdGhlIFRvRCBjb3VudGVyCiYjNDM7ICoKJiM0MzsgKiBBbGwgbWFza2VkIG91dHB1dHMgbXVzdCB1c2Ugc3ludGhlc2l6ZXJzIG9mIHRoZSBzYW1lIGZyZXF1ZW5jeSBzaW5jZQomIzQzOyAqIHRoZSBzdGVwIHZhbHVlIGlzIGluIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcy4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO2ludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsCiYjNDM7CQkJICAgIGJvb2wgdG9kX3N0ZXApCiYjNDM7ewomIzQzOwl1OCBjdHJsOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3psZGV2LSZndDtwaGFzZV9zdGVwX2xvY2spOwomIzQzOwomIzQzOwkvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgcGhhc2Ugc3RlcCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi8KJiM0MzsJcmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwsCiYjNDM7CQkJCSAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCwKJiM0MzsJCQkJICBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VUyk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0RBVEEsCiYjNDM7CQkJICAgICAgIHN0ZXBfY3ljbGVzKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTE2KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTUFTSywgb3V0X21hc2spOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUiwgMSk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJY3RybCA9IEZJRUxEX1BSRVAoWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9EUExMLCBjaCkgfAomIzQzOwkgICAgICAgRklFTERfUFJFUChaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QLAomIzQzOwkJCSAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURSk7CiYjNDM7CWlmICh0b2Rfc3RlcCkKJiM0MzsJCWN0cmwgfD0gWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9UT0RfU1RFUDsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLCBjdHJsKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQgLSBjb21taXQgRFBMTCBjaGFubmVsIHN0YXRlIGNoYW5nZXMgdG8gaGFyZHdhcmUKICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaAppbmRleCBkYzljNmQ5NWJkZWU3Li45OWMzYjcwODhmNjc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oCkBAIC01LDEwICYjNDM7NSwxMiBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvYml0ZmllbGQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zdGRkZWYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdGltZTY0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtyZWdzLmgmIzM0OwogCiYjNDM7c3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wOwogc3RydWN0IHpsMzA3M3hfZGV2OwogCiAvKioKQEAgLTQyLDYgJiM0Mzs0NCwyMSBAQCBpbnQgemwzMDczeF9jaGFuX3N0YXRlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCwKIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfdXBkYXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTsKIGludCB6bDMwNzN4X2NoYW5fbmNvX21vZGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTsKIAomIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpOwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cywKJiM0MzsJCQkgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKTsKJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cyk7CiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLAomIzQzOwkJCSAgICBzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YSk7CiYjNDM7aW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLAomIzQzOwkJCSAgICB1MTYgb3V0X21hc2ssIHMzMiBzdGVwX2N5Y2xlcywgYm9vbCB0b2Rfc3RlcCk7CiYjNDM7CiYjNDM7aW50IHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgb2Zmc2V0KTsKJiM0MzsKJiM0MztpbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKTsKJiM0MzsKIC8qKgogICogemwzMDczeF9jaGFuX2RmX29mZnNldF9nZXQgLSBnZXQgY2FjaGVkIGRmX29mZnNldCB2cyB0cmFja2VkIHJlZmVyZW5jZQogICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZQpAQCAtMjAwLDYgJiM0MzsyMTcsMjEgQEAgc3RhdGljIGlubGluZSBib29sIHpsMzA3M3hfY2hhbl9tb2RlX2lzX3JlZmxvY2soY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbikKIAlyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfZ2V0KGNoYW4pID09IFpMX0RQTExfTU9ERV9SRUZTRUxfTU9ERV9SRUZMT0NLOwogfQogCiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllIC0gY2hlY2sgaWYgY2hhbm5lbCBtb2RlIHN1cHBvcnRzIFRJRSB3cml0ZQomIzQzOyAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGUKJiM0MzsgKgomIzQzOyAqIFRJRSB3cml0ZSBpcyBzdXBwb3J0ZWQgaW4gQVVUTyBhbmQgUkVGTE9DSyBtb2RlcyByZWdhcmRsZXNzIG9mIGxvY2sgc3RhdGUuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgVElFIHdyaXRlIGlzIHN1cHBvcnRlZCwgZmFsc2Ugb3RoZXJ3aXNlCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBib29sCiYjNDM7emwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pCiYjNDM7ewomIzQzOwlyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfaXNfYXV0byhjaGFuKSB8fAomIzQzOwkJemwzMDczeF9jaGFuX21vZGVfaXNfcmVmbG9jayhjaGFuKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHpsMzA3M3hfY2hhbl9pc19ob19yZWFkeSAtIGNoZWNrIGlmIGhvbGRvdmVyIGlzIHJlYWR5CiAgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMKaW5kZXggNWIyZDc3ZjJjMjI4OC4uMjMwZGYwOGUyN2NkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYwpAQCAtMzIyLDcgJiM0MzszMjIsNyBAQCBpbnQgemwzMDczeF93cml0ZV91NDgoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IHJlZywgdTY0IHZhbCkKIGludCB6bDMwNzN4X3BvbGxfemVyb191OChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLAogCQkJIHU4IG1hc2ssIHVuc2lnbmVkIGludCB0aW1lb3V0X3VzKQogewotI2RlZmluZSBaTF9QT0xMX1NMRUVQX1VTIDEwCiYjNDM7CXVuc2lnbmVkIGludCBzbGVlcF91cyA9IHRpbWVvdXRfdXMgLyA1MDsKIAl1bnNpZ25lZCBpbnQgdmFsOwogCiAJLyogQ2hlY2sgdGhlIHJlZ2lzdGVyIGlzIDhiaXQgKi8KQEAgLTMzNiw3ICYjNDM7MzM2LDcgQEAgaW50IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsCiAJcmVnID0gWkxfUkVHX0FERFIocmVnKSAmIzQzOyBaTF9SQU5HRV9PRkZTRVQ7CiAKIAlyZXR1cm4gcmVnbWFwX3JlYWRfcG9sbF90aW1lb3V0KHpsZGV2LSZndDtyZWdtYXAsIHJlZywgdmFsLCAhKHZhbCAmYW1wOyBtYXNrKSwKLQkJCQkJWkxfUE9MTF9TTEVFUF9VUywgdGltZW91dF91cyk7CiYjNDM7CQkJCQlzbGVlcF91cywgdGltZW91dF91cyk7CiB9CiAKIGludCB6bDMwNzN4X21iX29wKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCBvcF9yZWcsIHU4IG9wX3ZhbCwKQEAgLTUxMSw2ICYjNDM7NTExLDExIEBAIHpsMzA3M3hfZGV2X3N0YXRlX2ZldGNoKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpCiAJaW50IHJjOwogCXU4IGk7CiAKJiM0MzsJcmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1NURVBfVElNRV9NQVNLLAomIzQzOwkJCSAgICAgICZhbXA7emxkZXYtJmd0O291dF9zdGVwX3RpbWVfbWFzayk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKIAlmb3IgKGkgPSAwOyBpICZsdDsgWkwzMDczWF9OVU1fUkVGUzsgaSYjNDM7JiM0MzspIHsKIAkJcmMgPSB6bDMwNzN4X3JlZl9zdGF0ZV9mZXRjaCh6bGRldiwgaSk7CiAJCWlmIChyYykgewpAQCAtMTAzNCw2ICYjNDM7MTAzOSwxNCBAQCBpbnQgemwzMDczeF9kZXZfcHJvYmUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldikKIAkgKiBhbmQvb3IgcG9sbHMgYXJlIHJlcXVpcmVkIHRvIGJlIGRvbmUgYXRvbWljYWxseS4KIAkgKi8KIAlyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi0mZ3Q7ZGV2LCAmYW1wO3psZGV2LSZndDttdWx0aW9wX2xvY2spOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi0mZ3Q7ZGV2LCByYywKJiM0MzsJCQkJICAgICAmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XG4mIzM0Oyk7CiYjNDM7CXJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LSZndDtkZXYsICZhbXA7emxkZXYtJmd0O3BoYXNlX3N0ZXBfbG9jayk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LSZndDtkZXYsIHJjLAomIzQzOwkJCQkgICAgICYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcbiYjMzQ7KTsKJiM0MzsJcmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtJmd0O2RldiwgJmFtcDt6bGRldi0mZ3Q7dGllX2xvY2spOwogCWlmIChyYykKIAkJcmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtJmd0O2RldiwgcmMsCiAJCQkJICAgICAmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XG4mIzM0Oyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmgKaW5kZXggNzhkYzIwOGYzZWVhMi4uNjdjMTBlMjU5NTExOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaApAQCAtMjYsNiAmIzQzOzI2LDEwIEBAIHN0cnVjdCB6bDMwNzN4X2RwbGw7CiAjZGVmaW5lIFpMX1BPTExfSFdSRUdfVElNRU9VVF9VUwkoNTAgKiBVU0VDX1BFUl9NU0VDKQogI2RlZmluZSBaTF9QT0xMX01CX1RJTUVPVVRfVVMJCSgzMCAqIFVTRUNfUEVSX01TRUMpCiAjZGVmaW5lIFpMX1BPTExfUEhBU0VfRVJSX1RJTUVPVVRfVVMJKDUwICogVVNFQ19QRVJfTVNFQykKJiM0MzsjZGVmaW5lIFpMX1BPTExfUEhBU0VfU1RFUF9USU1FT1VUX1VTCSgzMDAwICogVVNFQ19QRVJfTVNFQykKJiM0MzsjZGVmaW5lIFpMX1BPTExfVElFX1dSX1RJTUVPVVRfVVMJKDEwMDAgKiBVU0VDX1BFUl9NU0VDKQomIzQzOyNkZWZpbmUgWkxfUE9MTF9UT0RfUkRfVElNRU9VVF9VUwkoMzAgKiBVU0VDX1BFUl9NU0VDKQomIzQzOyNkZWZpbmUgWkxfUE9MTF9UT0RfV1JfVElNRU9VVF9VUwkoMTAwMCAqIFVTRUNfUEVSX01TRUMpCiAKIGVudW0gemwzMDczeF9mbGFncyB7CiAJWkwzMDczWF9GTEFHX1JFRl9QSEFTRV9DT01QXzMyX0JJVCwKQEAgLTU1LDYgJiM0Mzs1OSw4IEBAIHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mbyB7CiAgKiBAcmVnbWFwOiByZWdtYXAgdG8gYWNjZXNzIGRldmljZSByZWdpc3RlcnMKICAqIEBpbmZvOiBkZXRlY3RlZCBjaGlwIGluZm8KICAqIEBtdWx0aW9wX2xvY2s6IHRvIHNlcmlhbGl6ZSBtdWx0aXBsZSByZWdpc3RlciBvcGVyYXRpb25zCiYjNDM7ICogQHRpZV9sb2NrOiB0byBzZXJpYWxpemUgVElFIHdyaXRlIG9wZXJhdGlvbnMKJiM0MzsgKiBAcGhhc2Vfc3RlcF9sb2NrOiB0byBzZXJpYWxpemUgb3V0cHV0IHBoYXNlIHN0ZXAgb3BlcmF0aW9ucwogICogQHJlZjogYXJyYXkgb2YgaW5wdXQgcmVmZXJlbmNlcyYjMzk7IGludmFyaWFudHMKICAqIEBvdXQ6IGFycmF5IG9mIG91dHMmIzM5OyBpbnZhcmlhbnRzCiAgKiBAc3ludGg6IGFycmF5IG9mIHN5bnRocyYjMzk7IGludmFyaWFudHMKQEAgLTYzLDYgJiM0Mzs2OSw3IEBAIHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mbyB7CiAgKiBAa3dvcmtlcjogdGhyZWFkIGZvciBwZXJpb2RpYyB3b3JrCiAgKiBAd29yazogcGVyaW9kaWMgd29yawogICogQGNsb2NrX2lkOiBjbG9jayBpZCBvZiB0aGUgZGV2aWNlCiYjNDM7ICogQG91dF9zdGVwX3RpbWVfbWFzazogb3V0cHV0IHN0ZXAtdGltZSBtYXNrIChkZXZpY2UtZ2xvYmFsKQogICogQHBoYXNlX2F2Z19mYWN0b3I6IHBoYXNlIG9mZnNldCBtZWFzdXJlbWVudCBhdmVyYWdpbmcgZmFjdG9yCiAgKiBAZnJlcV9tb25pdG9yOiBpcyBmcmVxdWVuY3kgbW9uaXRvciBlbmFibGVkCiAgKi8KQEAgLTcxLDYgJiM0Mzs3OCw4IEBAIHN0cnVjdCB6bDMwNzN4X2RldiB7CiAJc3RydWN0IHJlZ21hcAkJCSpyZWdtYXA7CiAJY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hpcF9pbmZvCSppbmZvOwogCXN0cnVjdCBtdXRleAkJCW11bHRpb3BfbG9jazsKJiM0MzsJc3RydWN0IG11dGV4CQkJdGllX2xvY2s7CiYjNDM7CXN0cnVjdCBtdXRleAkJCXBoYXNlX3N0ZXBfbG9jazsKIAogCS8qIEludmFyaWFudHMgKi8KIAlzdHJ1Y3QgemwzMDczeF9yZWYJcmVmW1pMMzA3M1hfTlVNX1JFRlNdOwpAQCAtODcsNiAmIzQzOzk2LDcgQEAgc3RydWN0IHpsMzA3M3hfZGV2IHsKIAogCS8qIFBlci1jaGlwIHBhcmFtZXRlcnMgKi8KIAl1NjQJCQljbG9ja19pZDsKJiM0MzsJdTE2CQkJb3V0X3N0ZXBfdGltZV9tYXNrOwogCXU4CQkJcGhhc2VfYXZnX2ZhY3RvcjsKIAlib29sCQkJZnJlcV9tb25pdG9yOwogfTsKQEAgLTMwOCw2ICYjNDM7MzE4LDE5IEBAIHpsMzA3M3hfZGV2X291dF9pc19lbmFibGVkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KQogCXJldHVybiB6bDMwNzN4X3N5bnRoX2lzX2VuYWJsZWQoc3ludGgpICZhbXA7JmFtcDsgemwzMDczeF9vdXRfaXNfZW5hYmxlZChvdXQpOwogfQogCiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kZXZfb3V0X2lzX3N0ZXBwZWQgLSBjaGVjayBpZiBvdXRwdXQgaXMgaW4gc3RlcC10aW1lIG1hc2sKJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKJiM0MzsgKiBAaW5kZXg6IG91dHB1dCBpbmRleAomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIG91dHB1dCBpcyBhZmZlY3RlZCBieSBzdGVwLXRpbWUgb3BlcmF0aW9ucwomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbAomIzQzO3psMzA3M3hfZGV2X291dF9pc19zdGVwcGVkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KQomIzQzO3sKJiM0MzsJcmV0dXJuICEhKHpsZGV2LSZndDtvdXRfc3RlcF90aW1lX21hc2sgJmFtcDsgQklUKGluZGV4KSk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB6bDMwNzN4X2Rldl9vdXRfZHBsbF9nZXQgLSBnZXQgRFBMTCBJRCB0aGUgb3V0cHV0IGlzIGRyaXZlbiBieQogICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMKaW5kZXggMDQ4OGFlNmFjNDg2Yy4uYTY4NmRkNTJiZmFjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYwpAQCAtMiw2ICYjNDM7Miw3IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9iaXRzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYml0ZmllbGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY2xlYW51cC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2J1Zy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2NvbnRhaW5lcl9vZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2Rldl9wcmludGsuaCZndDsKQEAgLTEzLDYgJiM0MzsxNCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvbmV0bGluay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BsYXRmb3JtX2RldmljZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3Byb3BlcnR5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3ByaW50Zi5oJmd0OwogCkBAIC0yMjc1LDQ1ICYjNDM7MjI3NywzNzUgQEAgemwzMDczeF9kcGxsX2luaXRfZmluZV9waGFzZV9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldikKIAlyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX1NZTlRIX1BIQVNFX1NISUZUX0NUUkwsIDB4MDEpOwogfQogCiYjNDM7LyogTWF4aW11bSBmcmVxdWVuY3kgYWRqdXN0bWVudDogJiM0MzstMSUgb2Ygbm9taW5hbCBpbiBwcGIgKi8KJiM0MzsjZGVmaW5lIFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESgkxMDAwMDAwMAomIzQzOwogLyoqCi0gKiB6bDMwNzN4X2RwbGxfYWxsb2MgLSBhbGxvY2F0ZSBEUExMIGRldmljZQotICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCi0gKiBAY2g6IERQTEwgY2hhbm5lbCBudW1iZXIKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQgLSByZWFkIGN1cnJlbnQgdGltZSBmcm9tIFRvRCBjb3VudGVycwomIzQzOyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mbwomIzQzOyAqIEB0czogdGltZXNwZWMgdG8gc3RvcmUgY3VycmVudCB0aW1lCiYjNDM7ICogQHN0czogb3B0aW9uYWwgc3lzdGVtIHRpbWVzdGFtcCBwYWlyIGZvciBjcm9zcy10aW1lc3RhbXBpbmcKICAqCi0gKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLAomIzQzOwkJCQkgICAgICAgc3RydWN0IHRpbWVzcGVjNjQgKnRzLAomIzQzOwkJCQkgICAgICAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCwKJiM0MzsJCQkJCQkgICBwdHBfaW5mbyk7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkcGxsLSZndDtkZXYsIHpsZHBsbC0mZ3Q7aWQsIGZhbHNlLCB0cywgc3RzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQgLSBzZXQgVG9EIGNvdW50ZXJzIHRvIGdpdmVuIHRpbWUKJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm8KJiM0MzsgKiBAdHM6IHRpbWVzcGVjIHdpdGggdGltZSB0byBzZXQKICAqCi0gKiBSZXR1cm46IHBvaW50ZXIgdG8gRFBMTCBkZXZpY2Ugb24gc3VjY2VzcywgZXJyb3IgcG9pbnRlciBvbiBlcnJvcgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgogICovCi1zdHJ1Y3QgemwzMDczeF9kcGxsICoKLXpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCkKJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywKJiM0MzsJCQkJICAgICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjNjQgKnRzKQogewotCXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbDsKJiM0MzsJc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsCiYjNDM7CQkJCQkJICAgcHRwX2luZm8pOwogCi0JemxkcGxsID0ga3phbGxvY19vYmooKnpsZHBsbCk7Ci0JaWYgKCF6bGRwbGwpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwogCi0JemxkcGxsLSZndDtkZXYgPSB6bGRldjsKLQl6bGRwbGwtJmd0O2lkID0gY2g7Ci0JbXV0ZXhfaW5pdCgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJmFtcDt6bGRwbGwtJmd0O3BpbnMpOwomIzQzOwlyZXR1cm4gemwzMDczeF9jaGFuX3RvZF93cml0ZSh6bGRwbGwtJmd0O2RldiwgemxkcGxsLSZndDtpZCwgKnRzKTsKJiM0Mzt9CiAKLQlyZXR1cm4gemxkcGxsOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwIC0gYWRqdXN0IHN1Yi1zZWNvbmQgdGltZSB2aWEgcGhhc2Ugc3RlcAomIzQzOyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbAomIzQzOyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzIChtdXN0IGJlIHdpdGhpbiAoLU5TRUNfUEVSX1NFQywKJiM0MzsgKiAgICAgICAgIE5TRUNfUEVSX1NFQykpCiYjNDM7ICoKJiM0MzsgKiBVc2VzIHRoZSBvdXRwdXQgcGhhc2Ugc3RlcCBtZWNoYW5pc20gd2l0aCB0b2Rfc3RlcD0xIHRvIGFkanVzdCBib3RoCiYjNDM7ICogdGhlIG91dHB1dCBjbG9jayBwaGFzZSBhbmQgdGhlIFRvRCBjb3VudGVyIHNpbXVsdGFuZW91c2x5LiBUaGlzIGtlZXBzCiYjNDM7ICogb3V0cHV0cyBhbmQgVG9EIGNvaGVyZW50LiBPbmx5IHZhbGlkIGZvciBOQ08uCiYjNDM7ICoKJiM0MzsgKiBPdXRwdXRzIGFyZSBncm91cGVkIGJ5IHN5bnRoZXNpemVyIHNpbmNlIHRoZSBwaGFzZSBzdGVwIHZhbHVlIGlzIGluCiYjNDM7ICogc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzLiBUaGUgZmlyc3Qgc3ludGggZ3JvdXAgd2l0aCBlbmFibGVkIG91dHB1dHMKJiM0MzsgKiB1c2VzIHRvZF9zdGVwIHRvIGFkanVzdCBib3RoIG91dHB1dHMgYW5kIHRoZSBUb0QgY291bnRlci4gUmVtYWluaW5nCiYjNDM7ICogZ3JvdXBzIHN0ZXAgb3V0cHV0cyBvbmx5LiBJZiBubyBzeW50aCBoYXMgZW5hYmxlZCBvdXRwdXRzLCB0aGUgVG9ECiYjNDM7ICogY291bnRlciBpcyBzdGVwcGVkIGFsb25lIHVzaW5nIGFuIGVtcHR5IG91dHB1dCBtYXNrICh0aGUgRlcgdXNlcwomIzQzOyAqIHRoZSBmaXJzdCBlbmFibGVkIHN5bnRoJiMzOTtzIHBlcmlvZCBmb3IgdGhlIGNvbnZlcnNpb24pLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIG5vIHN5bnRocyBhdmFpbGFibGUsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwsCiYjNDM7CQkJCQkgICAgICAgczY0IGRlbHRhKQomIzQzO3sKJiM0MzsJdTE2IHN5bnRoX21hc2tbWkwzMDczWF9OVU1fU1lOVEhTXSA9IHt9OwomIzQzOwlzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLSZndDtkZXY7CiYjNDM7CWNvbnN0IHN0cnVjdCB6bDMwNzN4X3N5bnRoICpzeW50aDsKJiM0MzsJc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbjsKJiM0MzsJdTMyIGZpcnN0X3N5bnRoX2ZyZXEgPSAwOwomIzQzOwlib29sIHRvZF9zdGVwcGVkID0gZmFsc2U7CiYjNDM7CXMzMiBzdGVwX2N5Y2xlczsKJiM0MzsJdTMyIHN5bnRoX2ZyZXE7CiYjNDM7CWludCByYzsKJiM0MzsJdTggaTsKJiM0MzsKJiM0MzsJLyogQnVpbGQgcGVyLXN5bnRoIG91dHB1dCBtYXNrcyBmcm9tIHJlZ2lzdGVyZWQgb3V0cHV0IHBpbnMgKi8KJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeShwaW4sICZhbXA7emxkcGxsLSZndDtwaW5zLCBsaXN0KSB7CiYjNDM7CQl1OCBvdXRfaWQsIHN5bnRoX2lkOwomIzQzOwomIzQzOwkJaWYgKHpsMzA3M3hfZHBsbF9pc19pbnB1dF9waW4ocGluKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCW91dF9pZCA9IHpsMzA3M3hfb3V0cHV0X3Bpbl9vdXRfZ2V0KHBpbi0mZ3Q7aWQpOwomIzQzOwomIzQzOwkJaWYgKCF6bDMwNzN4X2Rldl9vdXRfaXNfc3RlcHBlZCh6bGRldiwgb3V0X2lkKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCXN5bnRoX2lkID0gemwzMDczeF9kZXZfb3V0X3N5bnRoX2dldCh6bGRldiwgb3V0X2lkKTsKJiM0MzsJCWlmIChzeW50aF9pZCAmZ3Q7PSBaTDMwNzNYX05VTV9TWU5USFMpIHsKJiM0MzsJCQlkZXZfd2Fybih6bGRldi0mZ3Q7ZGV2LCAmIzM0O1VuZXhwZWN0ZWQgc3ludGggaWQgZm9yIE9VVCV1XG4mIzM0OywKJiM0MzsJCQkJIG91dF9pZCk7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CQlzeW50aF9tYXNrW3N5bnRoX2lkXSB8PSBCSVQob3V0X2lkKTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBQcm9jZXNzIGVhY2ggc3ludGggZ3JvdXAgKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IFpMMzA3M1hfTlVNX1NZTlRIUzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN5bnRoID0gemwzMDczeF9zeW50aF9zdGF0ZV9nZXQoemxkZXYsIGkpOwomIzQzOwkJaWYgKCF6bDMwNzN4X3N5bnRoX2lzX2VuYWJsZWQoc3ludGgpIHx8CiYjNDM7CQkgICAgemwzMDczeF9zeW50aF9kcGxsX2dldChzeW50aCkgIT0gemxkcGxsLSZndDtpZCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCXN5bnRoX2ZyZXEgPSB6bDMwNzN4X3N5bnRoX2ZyZXFfZ2V0KHN5bnRoKTsKJiM0MzsKJiM0MzsJCS8qIFJlbWVtYmVyIGZpcnN0IGVuYWJsZWQgc3ludGggZnJlcSBmb3IgVG9ELW9ubHkgZmFsbGJhY2sgKi8KJiM0MzsJCWlmICghZmlyc3Rfc3ludGhfZnJlcSkKJiM0MzsJCQlmaXJzdF9zeW50aF9mcmVxID0gc3ludGhfZnJlcTsKJiM0MzsKJiM0MzsJCWlmICghc3ludGhfbWFza1tpXSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCS8qIFNhZmUgZm9yIHMzMjogbWF4IHN5bnRoIGZyZXEgaXMgNzUwIE1IeiAqLwomIzQzOwkJc3RlcF9jeWNsZXMgPSBkaXZfczY0KGRlbHRhICogc3ludGhfZnJlcSwgTlNFQ19QRVJfU0VDKTsKJiM0MzsKJiM0MzsJCXJjID0gemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoemxkZXYsIHpsZHBsbC0mZ3Q7aWQsCiYjNDM7CQkJCQkgICAgIHN5bnRoX21hc2tbaV0sIHN0ZXBfY3ljbGVzLAomIzQzOwkJCQkJICAgICAhdG9kX3N0ZXBwZWQpOwomIzQzOwkJaWYgKHJjKSB7CiYjNDM7CQkJaWYgKHRvZF9zdGVwcGVkKSB7CiYjNDM7CQkJCWRldl93YXJuKHpsZGV2LSZndDtkZXYsCiYjNDM7CQkJCQkgJiMzNDtQYXJ0aWFsIHBoYXNlIHN0ZXAgZmFpbHVyZVxuJiMzNDspOwomIzQzOwkJCQlyZXR1cm4gMDsKJiM0MzsJCQl9CiYjNDM7CQkJcmV0dXJuIHJjOwomIzQzOwkJfQomIzQzOwkJdG9kX3N0ZXBwZWQgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghZmlyc3Rfc3ludGhfZnJlcSkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJLyogTm8gZW5hYmxlZCBvdXRwdXRzIGZvdW5kOyBzdGVwIFRvRCBjb3VudGVyIG9ubHkgdXNpbmcgdGhlCiYjNDM7CSAqIGZpcnN0IGVuYWJsZWQgc3ludGgmIzM5O3MgcGVyaW9kIChlbXB0eSBvdXRwdXQgbWFzaykuCiYjNDM7CSAqLwomIzQzOwlpZiAoIXRvZF9zdGVwcGVkKSB7CiYjNDM7CQlzdGVwX2N5Y2xlcyA9IGRpdl9zNjQoZGVsdGEgKiBmaXJzdF9zeW50aF9mcmVxLCBOU0VDX1BFUl9TRUMpOwomIzQzOwkJcmV0dXJuIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtJmd0O2lkLCAwLAomIzQzOwkJCQkJICAgICAgIHN0ZXBfY3ljbGVzLCB0cnVlKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogLyoqCi0gKiB6bDMwNzN4X2RwbGxfZnJlZSAtIGZyZWUgRFBMTCBkZXZpY2UKLSAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZQomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSAtIGFkanVzdCBQVFAgY2xvY2sgdGltZQomIzQzOyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mbwomIzQzOyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzCiAgKgotICogRGVhbGxvY2F0ZXMgZ2l2ZW4gRFBMTCBkZXZpY2UgcHJldmlvdXNseSBhbGxvY2F0ZWQgYnkgQHpsMzA3M3hfZHBsbF9hbGxvYy4KJiM0MzsgKiBGb3IgTkNPLCBsYXJnZSBkZWx0YXMgKCZndDs9IDEgc2Vjb25kKSBhcmUgc3BsaXQgaW50byBhIFRvRAomIzQzOyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciB0aGUgc2Vjb25kcyBwYXJ0IGFuZCBhbiBvdXRwdXQgcGhhc2Ugc3RlcCBmb3IKJiM0MzsgKiB0aGUgc3ViLXNlY29uZCByZW1haW5kZXIuIFN1Yi1zZWNvbmQgZGVsdGFzIHVzZSBwaGFzZSBzdGVwIGRpcmVjdGx5LAomIzQzOyAqIGZhbGxpbmcgYmFjayB0byBUb0QgcmVhZC1tb2RpZnktd3JpdGUgaWYgcGhhc2Ugc3RlcCBpcyB1bmF2YWlsYWJsZS4KJiM0MzsgKiBJbiBBVVRPL1JFRkxPQ0sgbW9kZXMsIGxhcmdlIGRlbHRhcyBhcmUgc3BsaXQgaW50byBUb0QKJiM0MzsgKiByZWFkLW1vZGlmeS13cml0ZSBmb3Igc2Vjb25kcyBhbmQgVElFIHdyaXRlIGZvciB0aGUgc3ViLXNlY29uZAomIzQzOyAqIHJlbWFpbmRlci4gU3ViLXNlY29uZCBkZWx0YXMgdXNlIFRJRSB3cml0ZSBkaXJlY3RseS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgogICovCi12b2lkCi16bDMwNzN4X2RwbGxfZnJlZShzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBzNjQgZGVsdGEpCiB7Ci0JV0FSTih6bGRwbGwtJmd0O2RwbGxfZGV2LCAmIzM0O0RQTEwgZGV2aWNlIGlzIHN0aWxsIHJlZ2lzdGVyZWRcbiYjMzQ7KTsKJiM0MzsJc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsCiYjNDM7CQkJCQkJICAgcHRwX2luZm8pOwomIzQzOwlzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLSZndDtkZXY7CiYjNDM7CWNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47CiYjNDM7CWJvb2wgc2VjX2FkanVzdGVkID0gZmFsc2U7CiYjNDM7CXN0cnVjdCB0aW1lc3BlYzY0IHRzOwomIzQzOwlpbnQgcmM7CiAKLQltdXRleF9kZXN0cm95KCZhbXA7emxkcGxsLSZndDtsb2NrKTsKLQlrZnJlZSh6bGRwbGwpOwomIzQzOwlpZiAoIWRlbHRhKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CS8qIE1vZGVzIHdpdGhvdXQgcGhhc2Ugc3RlcCBvciBUSUUgdXNlIHBsYWluIFRvRCBhZGp1c3QgKi8KJiM0MzsJY2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC0mZ3Q7aWQpOwomIzQzOwlpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKQomIzQzOwkJcmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtJmd0O2lkLAomIzQzOwkJCQkJICAgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTsKJiM0MzsKJiM0MzsJLyogU3BsaXQgb2ZmIHNlY29uZHMgdmlhIFRvRCByZWFkLW1vZGlmeS13cml0ZSBzbyB0aGUgc3ViLXNlY29uZAomIzQzOwkgKiByZW1haW5kZXIgY2FuIGJlIGFwcGxpZWQgdGhyb3VnaCB0aGUgb3V0cHV0LWNvaGVyZW50IG1lY2hhbmlzbQomIzQzOwkgKiAocGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUpLgomIzQzOwkgKi8KJiM0MzsJaWYgKGRlbHRhICZndDs9IE5TRUNfUEVSX1NFQyB8fCBkZWx0YSAmbHQ7PSAtTlNFQ19QRVJfU0VDKSB7CiYjNDM7CQlzMzIgcmVtYWluZGVyOwomIzQzOwomIzQzOwkJdHMudHZfc2VjID0gZGl2X3M2NF9yZW0oZGVsdGEsIE5TRUNfUEVSX1NFQywgJmFtcDtyZW1haW5kZXIpOwomIzQzOwkJdHMudHZfbnNlYyA9IDA7CiYjNDM7CQlkZWx0YSA9IHJlbWFpbmRlcjsKJiM0MzsKJiM0MzsJCXJjID0gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC0mZ3Q7aWQsIHRzKTsKJiM0MzsJCWlmIChyYykKJiM0MzsJCQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CQkvKiBObyBzdWItc2Vjb25kIHJlbWFpbmRlciwgZG9uZSAqLwomIzQzOwkJaWYgKCFkZWx0YSkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJCS8qIFdhaXQgZm9yIHRoZSBUb0Qgd3JpdGUgdG8gYmUgYXBwbGllZCBhdCB0aGUgMSBIeiBlZGdlCiYjNDM7CQkgKiBiZWZvcmUgaXNzdWluZyBwaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSwgc28gdGhlIHBlbmRpbmcKJiM0MzsJCSAqIFdSX05FWFRfMUhaIGRvZXMgbm90IG92ZXJ3cml0ZSB0aGUgc3ViLXNlY29uZCBhZGp1c3RtZW50LgomIzQzOwkJICovCiYjNDM7CQlyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgemxkcGxsLSZndDtpZCk7CiYjNDM7CQlpZiAocmMpCiYjNDM7CQkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwkJc2VjX2FkanVzdGVkID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBBcHBseSBzdWItc2Vjb25kIGRlbHRhIHZpYSBwaGFzZSBzdGVwIChOQ08pIG9yIFRJRSB3cml0ZSAqLwomIzQzOwlpZiAoemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKSB7CiYjNDM7CQlyYyA9IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwKHpsZHBsbCwgZGVsdGEpOwomIzQzOwkJaWYgKCFyYykKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJjID0gemwzMDczeF9jaGFuX3RpZV93cml0ZSh6bGRldiwgemxkcGxsLSZndDtpZCwgZGVsdGEpOwomIzQzOwkJaWYgKCFyYykKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBQaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSBmYWlsZWQsIGZhbGwgYmFjayB0byBUb0QgYWRqdXN0ICovCiYjNDM7CXJjID0gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC0mZ3Q7aWQsCiYjNDM7CQkJCSAgICAgbnNfdG9fdGltZXNwZWM2NChkZWx0YSkpOwomIzQzOwomIzQzOwkvKiBJbiB0aGUgdW5saWtlbHkgZXZlbnQgdGhhdCBib3RoIHBoYXNlIHN0ZXAvVElFIHdyaXRlIGFuZCBmYWxsYmFjawomIzQzOwkgKiBUb0QgYWRqdXN0IGZhaWwgYWZ0ZXIgc2Vjb25kcyB3ZXJlIGFscmVhZHkgY29tbWl0dGVkLCByZXR1cm4KJiM0MzsJICogc3VjY2VzcyB0byBwcmV2ZW50IHRoZSBQVFAgc2Vydm8gZnJvbSByZXRyeWluZyB0aGUgZnVsbCBkZWx0YSBhbmQKJiM0MzsJICogYXBwbHlpbmcgc2Vjb25kcyBhZ2Fpbi4gVGhlIHN1Yi1zZWNvbmQgcmVzaWR1YWwgd2lsbCBzZWxmLWNvcnJlY3QKJiM0MzsJICogaW4gdGhlIG5leHQgc2Vydm8gY3ljbGUuCiYjNDM7CSAqLwomIzQzOwlpZiAocmMgJmFtcDsmYW1wOyBzZWNfYWRqdXN0ZWQpIHsKJiM0MzsJCWRldl93YXJuKHpsZGV2LSZndDtkZXYsCiYjNDM7CQkJICYjMzQ7U3ViLXNlY29uZCBhZGp1c3RtZW50IGZhaWxlZCBhZnRlciBzZWNvbmRzIGFwcGxpZWRcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiByYzsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lIC0gYWRqdXN0IFBUUCBjbG9jayBmcmVxdWVuY3kKJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm8KJiM0MzsgKiBAc2NhbGVkX3BwbTogZnJlcXVlbmN5IGFkanVzdG1lbnQgaW4gc2NhbGVkIHBwbSAocHBtICogMl4xNikKJiM0MzsgKgomIzQzOyAqIE9ubHkgc3VwcG9ydGVkIGZvciBOQ08uIFdyaXRlcyB0aGUgZGVsdGEgZnJlcXVlbmN5IG9mZnNldCByZWdpc3Rlci4KJiM0MzsgKgomIzQzOyAqIFJldHVybjoKJiM0MzsgKiAqICUwCQkJLSBzdWNjZXNzIG9yIEBzY2FsZWRfcHBtIGlzIHplcm8gKG5vLW9wKQomIzQzOyAqICogJS1FT1BOT1RTVVBQCS0gTkNPIHBpbiBpcyBub3QgY29ubmVjdGVkIGFuZCBAc2NhbGVkX3BwbSBpcyBub24temVybwomIzQzOyAqICogbmVnYXRpdmUJCS0gb3RoZXIgZXJyb3IKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50CiYjNDM7emwzMDczeF9kcGxsX3B0cF9hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgbG9uZyBzY2FsZWRfcHBtKQomIzQzO3sKJiM0MzsJc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsCiYjNDM7CQkJCQkJICAgcHRwX2luZm8pOwomIzQzOwljb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuOwomIzQzOwlzNjQgb2Zmc2V0OwomIzQzOwomIzQzOwkvKiBDb252ZXJ0IHNjYWxlZF9wcG0gdG8gZGZfb2Zmc2V0IGluIDJeLTQ4IHN0ZXBzOgomIzQzOwkgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDJeMzIpIC8gMTBeNgomIzQzOwkgKgomIzQzOwkgKiBTaW1wbGlmeSB0byBhdm9pZCBvdmVyZmxvdzoKJiM0MzsJICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjI2KSAvIDVeNgomIzQzOwkgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDY3MTA4ODY0KSAvIDE1NjI1CiYjNDM7CSAqLwomIzQzOwlvZmZzZXQgPSAtZGl2X3M2NCgoczY0KXNjYWxlZF9wcG0gKiA2NzEwODg2NExMLCAxNTYyNSk7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CWNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZHBsbC0mZ3Q7ZGV2LCB6bGRwbGwtJmd0O2lkKTsKJiM0MzsJaWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikpCiYjNDM7CQlyZXR1cm4gc2NhbGVkX3BwbSA/IC1FT1BOT1RTVVBQIDogMDsKJiM0MzsJaWYgKG9mZnNldCA9PSBjaGFuLSZndDtkZl9vZmZzZXQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHpsZHBsbC0mZ3Q7ZGV2LCB6bGRwbGwtJmd0O2lkLCBvZmZzZXQpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlIC0gYWRqdXN0IFBUUCBjbG9jayBwaGFzZQomIzQzOyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mbwomIzQzOyAqIEBkZWx0YTogcGhhc2UgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcwomIzQzOyAqCiYjNDM7ICogT25seSBzdXBwb3J0ZWQgaW4gQVVUTyBhbmQgUkVGTE9DSyBtb2Rlcy4gVXNlcyBUSUUgd3JpdGUgZm9yCiYjNDM7ICogbmFub3NlY29uZCByZXNvbHV0aW9uIHBoYXNlIGFkanVzdG1lbnQuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46CiYjNDM7ICogKiAlMAkJCS0gc3VjY2VzcyBvciBAZGVsdGEgaXMgemVybyAobm8tb3ApCiYjNDM7ICogKiAlLUVPUE5PVFNVUFAJLSBtb2RlIGRvZXMgbm90IHN1cHBvcnQgVElFIGFuZCBAZGVsdGEgaXMgbm9uLXplcm8KJiM0MzsgKiAqIG5lZ2F0aXZlCQktIG90aGVyIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczMyIGRlbHRhKQomIzQzO3sKJiM0MzsJc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsCiYjNDM7CQkJCQkJICAgcHRwX2luZm8pOwomIzQzOwlzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLSZndDtkZXY7CiYjNDM7CWNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47CiYjNDM7CiYjNDM7CWlmICghZGVsdGEpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7emxkcGxsLSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJY2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC0mZ3Q7aWQpOwomIzQzOwomIzQzOwlpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjaGFuKSkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoemxkZXYsIHpsZHBsbC0mZ3Q7aWQsIGRlbHRhKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHMzMgomIzQzO3psMzA3M3hfZHBsbF9wdHBfZ2V0bWF4cGhhc2Uoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvIF9fYWx3YXlzX3VudXNlZCkKJiM0Mzt7CiYjNDM7CS8qIEhXIGxpbWl0cyBUSUUgd3JpdGUgdG8gJiM0MzstMSBzZWNvbmQuIFJldHVybiB0aGUgY29uc3RhbnQgSFcKJiM0MzsJICogbGltaXQgYW5kIGxldCBhZGpwaGFzZSBoYW5kbGUgbW9kZS1zcGVjaWZpYyBjaGVja3MuCiYjNDM7CSAqLwomIzQzOwlyZXR1cm4gTlNFQ19QRVJfU0VDIC0gMTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm8gPSB7CiYjNDM7CS5vd25lcgkJPSBUSElTX01PRFVMRSwKJiM0MzsJLm1heF9hZGoJPSBaTDMwNzNYX0RQTExfUFRQX01BWF9BREosCiYjNDM7CS5nZXR0aW1leDY0CT0gemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0LAomIzQzOwkuc2V0dGltZTY0CT0gemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQsCiYjNDM7CS5hZGp0aW1lCT0gemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lLAomIzQzOwkuYWRqZmluZQk9IHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSwKJiM0MzsJLmFkanBoYXNlCT0gemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSwKJiM0MzsJLmdldG1heHBoYXNlCT0gemwzMDczeF9kcGxsX3B0cF9nZXRtYXhwaGFzZSwKJiM0Mzt9OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIgLSByZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsCiYjNDM7ICogQHpsZHBsbDogRFBMTCBjaGFubmVsIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IKJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLSZndDtkZXY7CiYjNDM7CXN0cnVjdCBwdHBfY2xvY2sgKnB0cF9jbG9jazsKJiM0MzsKJiM0MzsJc25wcmludGYoemxkcGxsLSZndDtwdHBfaW5mby5uYW1lLCBzaXplb2YoemxkcGxsLSZndDtwdHBfaW5mby5uYW1lKSwKJiM0MzsJCSAmIzM0OyVzLWRwbGwldSYjMzQ7LCBkZXZfbmFtZSh6bGRldi0mZ3Q7ZGV2KSwgemxkcGxsLSZndDtpZCk7CiYjNDM7CiYjNDM7CXB0cF9jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcigmYW1wO3psZHBsbC0mZ3Q7cHRwX2luZm8sIHpsZGV2LSZndDtkZXYpOwomIzQzOwlpZiAoSVNfRVJSKHB0cF9jbG9jaykpIHsKJiM0MzsJCWRldl9lcnIoemxkZXYtJmd0O2RldiwgJiMzNDtGYWlsZWQgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBEUExMJXVcbiYjMzQ7LAomIzQzOwkJCXpsZHBsbC0mZ3Q7aWQpOwomIzQzOwkJcmV0dXJuIFBUUl9FUlIocHRwX2Nsb2NrKTsKJiM0MzsJfQomIzQzOwomIzQzOwl6bGRwbGwtJmd0O3B0cF9jbG9jayA9IHB0cF9jbG9jazsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlciAtIHVucmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBhIERQTEwgY2hhbm5lbAomIzQzOyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byB1bnJlZ2lzdGVyIFBUUCBjbG9jayBmb3IKJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCB6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQomIzQzO3sKJiM0MzsJaWYgKCFJU19FUlJfT1JfTlVMTCh6bGRwbGwtJmd0O3B0cF9jbG9jaykpIHsKJiM0MzsJCXB0cF9jbG9ja191bnJlZ2lzdGVyKHpsZHBsbC0mZ3Q7cHRwX2Nsb2NrKTsKJiM0MzsJCXpsZHBsbC0mZ3Q7cHRwX2Nsb2NrID0gTlVMTDsKJiM0MzsJfQogfQogCiAvKioKQEAgLTIzOTgsNiAmIzQzOzI3MzAsNDggQEAgemwzMDczeF9kcGxsX3JlZl9zeW5jX3BhaXJzX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9hbGxvYyAtIGFsbG9jYXRlIERQTEwgZGV2aWNlCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyCiYjNDM7ICoKJiM0MzsgKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHBvaW50ZXIgdG8gRFBMTCBkZXZpY2Ugb24gc3VjY2VzcywgZXJyb3IgcG9pbnRlciBvbiBlcnJvcgomIzQzOyAqLwomIzQzO3N0cnVjdCB6bDMwNzN4X2RwbGwgKgomIzQzO3psMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbDsKJiM0MzsKJiM0MzsJemxkcGxsID0ga3phbGxvY19vYmooKnpsZHBsbCk7CiYjNDM7CWlmICghemxkcGxsKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiYjNDM7CiYjNDM7CXpsZHBsbC0mZ3Q7ZGV2ID0gemxkZXY7CiYjNDM7CXpsZHBsbC0mZ3Q7aWQgPSBjaDsKJiM0MzsJemxkcGxsLSZndDtwdHBfaW5mbyA9IHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mbzsKJiM0MzsJbXV0ZXhfaW5pdCgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiYjNDM7CUlOSVRfTElTVF9IRUFEKCZhbXA7emxkcGxsLSZndDtwaW5zKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsZHBsbDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlCiYjNDM7ICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlCiYjNDM7ICoKJiM0MzsgKiBEZWFsbG9jYXRlcyBnaXZlbiBEUExMIGRldmljZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBieSBAemwzMDczeF9kcGxsX2FsbG9jLgomIzQzOyAqLwomIzQzO3ZvaWQKJiM0Mzt6bDMwNzN4X2RwbGxfZnJlZShzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpCiYjNDM7ewomIzQzOwlXQVJOKHpsZHBsbC0mZ3Q7ZHBsbF9kZXYsICYjMzQ7RFBMTCBkZXZpY2UgaXMgc3RpbGwgcmVnaXN0ZXJlZFxuJiMzNDspOwomIzQzOwomIzQzOwltdXRleF9kZXN0cm95KCZhbXA7emxkcGxsLSZndDtsb2NrKTsKJiM0MzsJa2ZyZWUoemxkcGxsKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHpsMzA3M3hfZHBsbF9yZWdpc3RlciAtIHJlZ2lzdGVyIERQTEwgZGV2aWNlIGFuZCBhbGwgaXRzIHBpbnMKICAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZQpAQCAtMjQyOCw2ICYjNDM7MjgwMiwxMyBAQCB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQogCQlyZXR1cm4gcmM7CiAJfQogCiYjNDM7CXJjID0gemwzMDczeF9kcGxsX3B0cF9yZWdpc3Rlcih6bGRwbGwpOwomIzQzOwlpZiAocmMpIHsKJiM0MzsJCXpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTsKJiM0MzsJCXpsMzA3M3hfZHBsbF9kZXZpY2VfdW5yZWdpc3Rlcih6bGRwbGwpOwomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI0NDEsNyAmIzQzOzI4MjIsNyBAQCB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQogdm9pZAogemwzMDczeF9kcGxsX3VucmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQogewotCS8qIFVucmVnaXN0ZXIgYWxsIHBpbnMgYW5kIGRwbGwgKi8KJiM0MzsJemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHpsZHBsbCk7CiAJemwzMDczeF9kcGxsX3BpbnNfdW5yZWdpc3Rlcih6bGRwbGwpOwogCXpsMzA3M3hfZHBsbF9kZXZpY2VfdW5yZWdpc3Rlcih6bGRwbGwpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oCmluZGV4IGZhZWJjNDAyYmExYjcuLjk5MzIyMWRjNjMyNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmgKQEAgLTUsNiAmIzQzOzUsNyBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvZHBsbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2xpc3QuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2NvcmUuaCYjMzQ7CiAKQEAgLTIyLDYgJiM0MzsyMyw4IEBACiAgKiBAdHlwZTogRFBMTCB0eXBlIChQUFMgb3IgRUVDKQogICogQGxvY2tfc3RhdHVzOiBsYXN0IHNhdmVkIERQTEwgbG9jayBzdGF0dXMKICAqIEBwaW5zOiBsaXN0IG9mIHBpbnMKJiM0MzsgKiBAcHRwX2luZm86IFBUUCBjbG9jayBpbmZvCiYjNDM7ICogQHB0cF9jbG9jazogcmVnaXN0ZXJlZCBQVFAgY2xvY2sgKG9yIE5VTEwpCiAgKi8KIHN0cnVjdCB6bDMwNzN4X2RwbGwgewogCXN0cnVjdCBsaXN0X2hlYWQJCWxpc3Q7CkBAIC0zNiw2ICYjNDM7MzksOCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsIHsKIAllbnVtIGRwbGxfdHlwZQkJCXR5cGU7CiAJZW51bSBkcGxsX2xvY2tfc3RhdHVzCQlsb2NrX3N0YXR1czsKIAlzdHJ1Y3QgbGlzdF9oZWFkCQlwaW5zOwomIzQzOwlzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8JCXB0cF9pbmZvOwomIzQzOwlzdHJ1Y3QgcHRwX2Nsb2NrCQkqcHRwX2Nsb2NrOwogfTsKIAogc3RydWN0IHpsMzA3M3hfZHBsbCAqemwzMDczeF9kcGxsX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaAppbmRleCBiNzBlYWQ3ZDQ0OTViLi5mM2E1ZTEyMTVhYTM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oCkBAIC0xNzksNiAmIzQzOzE3OSwyMCBAQAogI2RlZmluZSBaTF9EUExMX0RGX1JFQURfQ01ECQkJR0VOTUFTSygyLCAwKQogI2RlZmluZSBaTF9EUExMX0RGX1JFQURfQ01EX0FDQ19JCQk0CiAKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9DVFJMCQkJWkxfUkVHKDUsIDB4MzAsIDEpCiYjNDM7I2RlZmluZSBaTF9EUExMX1RJRV9DVFJMX09QCQkJR0VOTUFTSygyLCAwKQomIzQzOyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUF9XUgkJCTQKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0sJCVpMX1JFRyg1LCAweDMxLCAxKQomIzQzOwomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX0NUUkwoX2lkeCkJCQkJCVwKJiM0MzsJWkxfUkVHX0lEWChfaWR4LCA1LCAweDM4LCAxLCBaTDMwNzNYX01BWF9DSEFOTkVMUywgMSkKJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfU0VNCQkJQklUKDQpCiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRAkJCUdFTk1BU0soMywgMCkKJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaCTEKJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX0NVUlJFTlQJCTgKJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaCTkKJiM0MzsKICNkZWZpbmUgWkxfUkVHX0RQTExfTUVBU19DVFJMCQkJWkxfUkVHKDUsIDB4NTAsIDEpCiAjZGVmaW5lIFpMX0RQTExfTUVBU19DVFJMX0VOCQkJQklUKDApCiAjZGVmaW5lIFpMX0RQTExfTUVBU19DVFJMX0FWR19GQUNUT1IJCUdFTk1BU0soNywgNCkKQEAgLTE5Myw2ICYjNDM7MjA3LDkgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFJlZ2lzdGVyIFBhZ2VzIDYtNywgRFBMTCBEYXRhCiYjNDM7ICoKJiM0MzsgKiBQZXItY2hhbm5lbCByZWdpc3RlcnMgd2l0aCBzdHJpZGUgMHgyMC4gQ2hhbm5lbHMgMC0zIHJlc2lkZSBvbiBwYWdlIDYsCiYjNDM7ICogY2hhbm5lbCA0IG9uIHBhZ2UgNy4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjZGVmaW5lIFpMX1JFR19EUExMX0RGX09GRlNFVF8wMyhfaWR4KQkJCQkJXApAQCAtMjAyLDYgJiM0MzsyMTksMjQgQEAKIAkoKF9pZHgpICZsdDsgNCA/IFpMX1JFR19EUExMX0RGX09GRlNFVF8wMyhfaWR4KSA6IFpMX1JFR19EUExMX0RGX09GRlNFVF80KQogI2RlZmluZSBaTF9EUExMX0RGX09GRlNFVF9VTktOT1dOCVM2NF9NSU4KIAomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEFfMDMoX2lkeCkJCQkJCVwKJiM0MzsJWkxfUkVHX0lEWChfaWR4LCA2LCAweDBDLCA2LCA0LCAweDIwKQomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEFfNAkJCVpMX1JFRyg3LCAweDBDLCA2KQomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEEoX2lkeCkJCQkJCVwKJiM0MzsJKChfaWR4KSAmbHQ7IDQgPyBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RJRV9EQVRBXzQpCiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpCQkJCQlcCiYjNDM7CVpMX1JFR19JRFgoX2lkeCwgNiwgMHgxMiwgNiwgNCwgMHgyMCkKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUNfNAkJCVpMX1JFRyg3LCAweDEyLCA2KQomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQyhfaWR4KQkJCQkJXAomIzQzOwkoKF9pZHgpICZsdDsgNCA/IFpMX1JFR19EUExMX1RPRF9TRUNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfU0VDXzQpCiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlNfMDMoX2lkeCkJCQkJCVwKJiM0MzsJWkxfUkVHX0lEWChfaWR4LCA2LCAweDE4LCA0LCA0LCAweDIwKQomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TXzQJCQlaTF9SRUcoNywgMHgxOCwgNCkKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OUyhfaWR4KQkJCQkJXAomIzQzOwkoKF9pZHgpICZsdDsgNCA/IFpMX1JFR19EUExMX1RPRF9OU18wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RPRF9OU180KQomIzQzOwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBSZWdpc3RlciBQYWdlIDksIFN5bnRoIGFuZCBPdXRwdXQKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTIyMSw2ICYjNDM7MjU2LDIzIEBACiAjZGVmaW5lIFpMX09VVFBVVF9DVFJMX0VOCQkJQklUKDApCiAjZGVmaW5lIFpMX09VVFBVVF9DVFJMX1NZTlRIX1NFTAkJR0VOTUFTSyg2LCA0KQogCiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1NURVBfVElNRV9NQVNLCQlaTF9SRUcoOSwgMHgzNiwgMikKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMCQlaTF9SRUcoOSwgMHgzOCwgMSkKJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfRFBMTAkJR0VOTUFTSyg2LCA0KQomIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9UT0RfU1RFUAlCSVQoMykKJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AJCUdFTk1BU0soMSwgMCkKJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfTk9ORQkwCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1JFU0VUCTEKJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfUkVBRAkyCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1dSSVRFCTMKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9OVU1CRVIJCVpMX1JFRyg5LCAweDM5LCAxKQomIzQzOwomIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX01BU0sJCVpMX1JFRyg5LCAweDNhLCAyKQomIzQzOwomIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0RBVEEJCVpMX1JFRyg5LCAweDNjLCA0KQomIzQzOwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFJlZ2lzdGVyIFBhZ2UgMTAsIFJlZiBNYWlsYm94CiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxMTIKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNjA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWNoaW5nIHRoZSBQVFAgQ2xvY2sgU3VwcG9ydCBpbiB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBEcml2ZXIqKgoKT2theSwgc28gd2UgaGF2ZSB0aGlzIHBhdGNoIGFkZGluZyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIgKGBkcml2ZXJzL2RwbGwvemwzMDczeC9gKS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiB3ZSBhY3R1YWxseSAqcmVhY2gqIHRoaXMgY29kZSBhbmQgd2hhdCYjMzk7cyBpbnZvbHZlZCBpbiBnZXR0aW5nIGl0IHJ1bm5pbmc/CgpGaXJzdCwgdGhlIHBhdGNoIG1vZGlmaWVzIGBLY29uZmlnYCB0byBkZXBlbmQgb24gYFBUUF8xNTg4X0NMT0NLYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEl0JiMzOTtzIGFkZGluZyBmdW5jdGlvbnMgdG8gYGNoYW4uY2AgZm9yIFRpbWUgb2YgRGF5IChUb0QpIHJlYWQvd3JpdGUvYWRqdXN0LCBUSUUgd3JpdGUsIGFuZCBwaGFzZSBzdGVwcGluZywgYW5kIGl0IHJlZ2lzdGVycyBhIFBUUCBjbG9jayBpbiBgZHBsbC5jYCB1c2luZyBgcHRwX2Nsb2NrX3JlZ2lzdGVyYC4gVGhhdCYjMzk7cyBhIHByZXR0eSBzaWduaWZpY2FudCBhZGRpdGlvbiDigJMgaXQmIzM5O3MgZGVmaW5pdGVseSBzb21ldGhpbmcgd29ydGggY29uc2lkZXJpbmcgZm9yIGZ1enppbmcuCgpUaGUgZHJpdmVyIGlzIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRSBkZXZpY2VzLCBhbmQgaXQgdXNlcyBJMkMvU1BJLiAgQ2FuIHdlIGdldCB0byB0aGlzIGluIFFFTVUsIG9yIGFueSBvdGhlciB2aXJ0dWFsIGVudmlyb25tZW50PyAgSTJDL1NQSSBkcml2ZXJzIGNhbiB1c3VhbGx5IGJlIGluc3RhbnRpYXRlZCB2aWEgZGV2aWNlIHRyZWUsIHN5c2ZzLCBvciBldmVuIGFuIGVtdWxhdG9yLiAgRXZlbiB3aXRob3V0IGFuIGVtdWxhdG9yLCB3ZSBjYW4gcHJvYmUgaXQgdmlhIHN5c2ZzLiBJIGNhbiwgZm9yIGV4YW1wbGUsIGluc3RhbnRpYXRlIHRoZSBJMkMgZGV2aWNlIHZpYSBgZWNobyB6bDMwNzN4IDB4MTAgJmd0OyAvc3lzL2J1cy9pMmMvZGV2aWNlcy9pMmMtMC9uZXdfZGV2aWNlYC4gV2FpdCBhIHNlY29uZCEgU3l6a2FsbGVyISBTeXprYWxsZXIgY2FuIGZ1enogSTJDIGFuZCBTUEkgZGV2aWNlcyB1c2luZyBgc3l6X2kyY2AgYW5kIGBzeXpfc3BpYCBvciBieSBpbnN0YW50aWF0aW5nIHRoZW0hICBUaGF0JiMzOTtzIHBlcmZlY3QuICBTbywgdGhlIGFkZGVkIFBUUCBjbG9jayBpbnRlcmZhY2UgaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdmlhIGAvZGV2L3B0cFhgLiBTeXprYWxsZXIgY2FuIGVhc2lseSBpbnRlcmFjdCB3aXRoIHRoYXQuICBUaGUgZHJpdmVyIGl0c2VsZiBsZXZlcmFnZXMgcmVnbWFwIG92ZXIgSTJDL1NQSS4KCkxldCYjMzk7cyBkaXZlIGludG8gdGhlIHNwZWNpZmljcyBvZiB0aGlzIFBUUCBjbG9jayBpbnRlcmZhY2UuIFRoZSBjb3JlIGZ1bmN0aW9ucyBJIG5lZWQgdG8gZm9jdXMgb24gYXJlOgoKKiAgIGB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjRgCiogICBgemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjRgCiogICBgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lYAoqICAgYHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZWAKKiAgIGB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlYAoqICAgYHpsMzA3M3hfY2hhbl90b2RfcmVhZGAKKiAgIGB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlYAoqICAgYHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0YAoqICAgYHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0YAoqICAgYHpsMzA3M3hfY2hhbl90aWVfd3JpdGVgCiogICBgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXBgCgpUaGVzZSBmdW5jdGlvbnMgYXJlIGhvb2tlZCBpbnRvIGBwdHBfY2xvY2tfaW5mb2AsIHdoaWNoIGlzIGEgc3RhbmRhcmQgYXBwcm9hY2guICBUaGUgYHB0cF9jbG9ja19pbmZvYCBzdHJ1Y3QgaXRzZWxmIGxvb2tzIG5vcm1hbCwgc3RhbmRhcmQgUFRQIGNsb2NrIG9wcy4KCldlIG5lZWQgdG8gbWFrZSBzdXJlIHdlJiMzOTt2ZSBnb3QgYWxsIHRoZSBuZWNlc3NhcnkgY29uZmlncyBlbmFibGVkLiBJdCBsb29rcyBsaWtlIHdlIG5lZWQgYFpMMzA3M1hfSTJDYCwgYFpMMzA3M1hfU1BJYCwgYFBUUF8xNTg4X0NMT0NLYCwgYERQTExgLCBgSTJDYCwgYFNQSWAsIGFuZCBgTkVUYC4gIEEgcXVpY2sgbG9vayBhdCBgZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ2AgY29uZmlybXMgdGhlc2UgZGVwZW5kZW5jaWVzLiBgWkwzMDczWGAgaXMgc2VsZWN0ZWQgYnkgYm90aCBgWkwzMDczWF9JMkNgIGFuZCBgWkwzMDczWF9TUElgLCBzbyBlbmFibGluZyBlaXRoZXIgb2YgdGhlbSB3aWxsIGVuYWJsZSB0aGUgd2hvbGUgdGhpbmcuCgpHaXZlbiB0aGF0IFN5emthbGxlciBjYW4gZW11bGF0ZSBJMkMgYW5kIFNQSSBkZXZpY2VzLCB3ZSBoYXZlIGEgY2xlYXIgcGF0aCB0byByZWFjaCB0aGUgY29kZS4gVGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyBub3cgYXJlIHRoZSBQVFAgY2xvY2sgZnVuY3Rpb25zLCBhcyB3ZWxsIGFzIHRoZSBjaGFubmVsIGZ1bmN0aW9ucyB0aGF0IGFmZmVjdCBUb0QsIHBoYXNlIGFkanVzdG1lbnRzLCBhbmQgVElFIHdyaXRlcy4gSSYjMzk7bSBnb2luZyB0byBydW4gYSBxdWljayBncmVwIHRvIG1ha2Ugc3VyZSB0aG9zZSBmdW5jdGlvbnMgYXJlIGRlZmluaXRlbHkgdGhlcmUgYW5kIGRlZmluZWQsIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIGJlZm9yZSBnb2luZyBhbnkgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTIzMTA9c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTIzMjEtLyoqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6MjMyMjogKiB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCAtIGFkanVzdCBzdWItc2Vjb25kIHRpbWUgdmlhIHBoYXNlIHN0ZXBcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0yMzIzLSAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0yMzM5LSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjIzNDA6c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjM0MS1cdFx0XHRcdFx0ICAgICAgIHM2NCBkZWx0YSlcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjQyMy0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoyNDI0OiAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSAtIGFkanVzdCBQVFAgY2xvY2sgdGltZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTI0MjUtICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTI0MzctICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6MjQzODpzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHM2NCBkZWx0YSlcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0yNDM5LXtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjQ5MS1cdGlmICh6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikpIHtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoyNDkyOlx0XHRyYyA9IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwKHpsZHBsbCwgZGVsdGEpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTI0OTMtXHRcdGlmICghcmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTI2MDI9c3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm8gPSB7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTI2MDYtXHQuc2V0dGltZTY0XHQ9IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0LFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjI2MDc6XHQuYWRqdGltZVx0PSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjYwOC1cdC5hZGpmaW5lXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTUzNAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyB0aGUgWkwzMDczWCBDaGFubmVsIFRpbWUtb2YtRGF5IEFkanVzdG1lbnQgRnVuY3Rpb24qKgoKUmlnaHQsIHRoZSBidWlsZGluZyBibG9ja3MgYXJlIGluIHBsYWNlLiBUaGUgY29yZSBmdW5jdGlvbmFsaXRpZXMgSSBuZWVkIGFyZSBhdmFpbGFibGUuIE5vdywgbGV0JiMzOTtzIGRyaWxsIGRvd24gaW50byB0aGUgZGV0YWlscy4gSSBuZWVkIHRvIGV4YW1pbmUgdGhlIGB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdGAgZnVuY3Rpb24uIFRoaXMgaXMgd2hlcmUgdGhlIHRpbWUtb2YtZGF5IGFkanVzdG1lbnRzIGZvciBlYWNoIGNoYW5uZWwgYXJlIGhhbmRsZWQsIHdoaWNoIGlzIGNyaXRpY2FsLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGFsZ29yaXRobSwgdGhlIGRhdGEgc3RydWN0dXJlcyBpdCBtYW5pcHVsYXRlcywgYW5kIHRoZSBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucy4gSSBuZWVkIHRvIGNvbnNpZGVyIHRoaW5ncyBsaWtlIGhvdyBpdCBoYW5kbGVzIGxlYXAgc2Vjb25kcywgdGltZSB6b25lIG9mZnNldHMsIGFuZCBhbnkgY2xvY2sgc3luY2hyb25pemF0aW9uIGlzc3VlcyB0aGF0IG1pZ2h0IGltcGFjdCB0aGUgZmluYWwgVE9EIGNhbGN1bGF0aW9uLiBUaGlzIGlzIHRoZSBoZWFydCBvZiB0aGUgdGltaW5nIHNvbHV0aW9uLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBtYWtlIHN1cmUgaXQgaXMgcm9idXN0IGFuZCBwcmVjaXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDExOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3psMzA3M3hfY2hhbl90b2RfYWRqdXN0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYz0zNjM9aW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM4NS0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozODY6ICogemwzMDczeF9jaGFuX3RvZF9hZGp1c3QgLSBhdG9taWMgVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIHdpdGggcm9sbG92ZXIgZ3VhcmRcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zODctICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQwMC0jZGVmaW5lIFpMX1RPRF9NQVhfUkVUUklFU1x0MjBcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0MDE6aW50IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQwMi1cdFx0XHQgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oPTUxPWludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTUyLVx0XHRcdCAgIHN0cnVjdCB0aW1lc3BlYzY0IHRzKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDo1MzppbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNTQtXHRcdFx0ICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKTtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9MjQzOD1zdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHM2NCBkZWx0YSlcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjQ1Ni1cdCAgICAhemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjI0NTc6XHRcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTI0NTgtXHRcdFx0XHRcdCAgICAgICBuc190b190aW1lc3BlYzY0KGRlbHRhKSk7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTI0NzAtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6MjQ3MTpcdFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCB0cyk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjQ3Mi1cdFx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0yNTAxLVx0LyogUGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUgZmFpbGVkLCBmYWxsIGJhY2sgdG8gVG9EIGFkanVzdCAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjI1MDI6XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjUwMy1cdFx0XHRcdCAgICAgbnNfdG9fdGltZXNwZWM2NChkZWx0YSkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDExOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNjc2CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBEcml2ZXIgUGF0Y2ggZm9yIFBUUCBDbG9jayBGdW5jdGlvbmFsaXR5KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBQVFAgY2xvY2sgc3VwcG9ydCBpbnRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciwgaW50ZXJlc3RpbmcuIFRoZSBkcml2ZXIgaXRzZWxmIGlzIGZhaXJseSBzdGFuZGFyZDsgaXQgY2FuIGJlIGhvb2tlZCB1cCB2aWEgZWl0aGVyIEkyQyBvciBTUEksIGdvb2QgdG8ga25vdy4gVGhlIGtleSB0aGluZyBpcyB0aGF0IHRoaXMgUFRQIGNsb2NrIGZ1bmN0aW9uYWxpdHkgaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIHdoaWNoIG1lYW5zIHdlIGNhbiBsaWtlbHkgcG9rZSBhdCBpdCBkaXJlY3RseSB0aHJvdWdoIGAvZGV2L3B0cFhgIGRldmljZXMgYW5kIHRoZSBhc3NvY2lhdGVkIGlvY3Rscy4gVGhhdCBvcGVucyB1cCBhIHdob2xlIGF2ZW51ZSBmb3IgZnV6emluZyB3aXRoIHN5emthbGxlciwgb2YgY291cnNlLgoKSSBuZWVkIHRvIHplcm8gaW4gb24gc3BlY2lmaWMgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIGRyaXZlci4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgbW9zdCBjcml0aWNhbCBvbmVzIHNlZW0gdG8gYmU6IGB6bDMwNzN4X2NoYW5fdG9kX3JlYWRgIGFuZCBgemwzMDczeF9jaGFuX3RvZF93cml0ZWAgZm9yIFRpbWUgb2YgRGF5IHJlYWRzIGFuZCB3cml0ZXM7IGB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdGAsIHdoaWNoIGlzIHByb2JhYmx5IGZvciBjb3JyZWN0aW9ucy4gIFRoZW4gdGhlcmUmIzM5O3MgYHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0YCwgYHpsMzA3M3hfY2hhbl90aWVfd3JpdGVgLCBhbmQgYHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwYCDigJMgdGhvc2Ugc291bmQgbGlrZSB0aGV5IGRlYWwgd2l0aCBmaW5lci1ncmFpbmVkIGFkanVzdG1lbnRzLgoKQW5kLCBvZiBjb3Vyc2UsIHRoZSBEUExMLXNwZWNpZmljIFBUUCBmdW5jdGlvbnMgYXJlIGNydWNpYWw6IGB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjRgLCBgemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjRgLCBgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXBgLCBgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lYCwgYHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZWAsIGFuZCBgemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZWAuIFRoZXNlIGFyZSBhbGwgcHJpbWUgY2FuZGlkYXRlcyBmb3IgY2xvc2VyIGluc3BlY3Rpb24gYW5kIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBuZWVkZWQgdG8gZW5hYmxlIHRoaXMgZnVuY3Rpb25hbGl0eS4gSSBzZWUgYFpMMzA3M1hfSTJDYCwgYFpMMzA3M1hfU1BJYCwgYFBUUF8xNTg4X0NMT0NLYCwgYW5kIGBEUExMYC4gV2FpdCwgaG9sZCBvbi4gSXQgbG9va3MgbGlrZSBgRFBMTGAgaXMgYXV0b21hdGljYWxseSBzZWxlY3RlZCBpZiBgWkwzMDczWGAgaXMgc2VsZWN0ZWQuIEFuZCBgUFRQXzE1ODhfQ0xPQ0tgIGlzIGEgZGVwZW5kZW5jeS4gT2theSwgc28gdG8gZ2V0IHRoaXMgYWxsIHdvcmtpbmcsIGl0IGxvb2tzIGxpa2UgYWxsIHRoYXQgSSBuZWVkIGFyZToKCmBaTDMwNzNYX0kyQ2Agb3IgYFpMMzA3M1hfU1BJYCwgYW5kIGBQVFBfMTU4OF9DTE9DS2AuIExldCBtZSBqdXN0IGRvdWJsZSBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIGluIGBkcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIEdvdHRhIGJlIHRob3JvdWdoIHdpdGggdGhpcyBzdHVmZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWkwzMDczWCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTItXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnOjM6Y29uZmlnIFpMMzA3M1hcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctNC1cdHRyaXN0YXRlIFwmIzM0O01pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXNcJiMzNDsgaWYgQ09NUElMRV9URVNUXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZy0xNi1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWc6MTc6Y29uZmlnIFpMMzA3M1hfSTJDXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTE4LVx0dHJpc3RhdGUgXCYjMzQ7STJDIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1wmIzM0O1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctMjgtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnOjI5OmNvbmZpZyBaTDMwNzNYX1NQSVxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZy0zMC1cdHRyaXN0YXRlIFwmIzM0O1NQSSBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDAyMwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIGNoZWNraW5nIHRoZSBgZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ2AgZGVwZW5kZW5jaWVzOgoKKipBbmFseXppbmcgdGhlIEtjb25maWcgRGVwZW5kZW5jaWVzIGZvciB6bDMwNzN4IERyaXZlcioqCgpSaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciB0aGUgemwzMDczeCBkcml2ZXIuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IHRoZSBgZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSBhc3N1bWluZywgYXMgYW4gZXhwZXJ0IGluIHRoaXMsIHRoYXQgdGhpcyBLY29uZmlnIGZpbGUgY29udGFpbnMgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGZvciBlbmFibGluZyBhbmQgZGlzYWJsaW5nIHRoZSB6bDMwNzN4IGRyaXZlciB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBidWlsZCBzeXN0ZW0uIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIHdoaWNoIG90aGVyIGtlcm5lbCBmZWF0dXJlcyBvciBoYXJkd2FyZSBjb21wb25lbnRzIG11c3QgYmUgZW5hYmxlZCBvciBjb25maWd1cmVkIGJlZm9yZSB0aGlzIHBhcnRpY3VsYXIgZHJpdmVyIGNhbiBiZSBzZWxlY3RlZC4gVGhpcyBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBzeXN0ZW0gY29uZmlndXJhdGlvbiBhbmQgdG8gZW5zdXJlIEkgZG9uJiMzOTt0IGludHJvZHVjZSBidWlsZCBlcnJvcnMgb3IgcnVudGltZSBjb25mbGljdHMuIEkmIzM5O2xsIG5lZWQgdG8gaWRlbnRpZnk6IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyAoZS5nLiwgJiMzNDtpZiYjMzQ7IHN0YXRlbWVudHMpLCBkZWZhdWx0IHZhbHVlcywgc2VsZWN0IHN0YXRlbWVudHMsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgdGhhdCByZWxhdGUgdG8gdGhlIHByb3BlciBidWlsZGluZyBhbmQgdXNlIG9mIHRoZSB6bDMwNzN4IGRyaXZlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0XG4gICAzOlx0Y29uZmlnIFpMMzA3M1hcbiAgIDQ6XHRcdHRyaXN0YXRlIFwmIzM0O01pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXNcJiMzNDsgaWYgQ09NUElMRV9URVNUXG4gICA1Olx0XHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tcbiAgIDY6XHRcdHNlbGVjdCBEUExMXG4gICA3Olx0XHRzZWxlY3QgTkVUX0RFVkxJTktcbiAgIDg6XHRcdHNlbGVjdCBSRUdNQVBcbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTWljcm9jaGlwIEF6dXJpdGUgZmFtaWx5IERQTEwvUFRQL1N5bmNFXG4gIDExOlx0XHQgIGRldmljZXMgdGhhdCBzdXBwb3J0IHVwIHRvIDUgaW5kZXBlbmRlbnQgRFBMTCBjaGFubmVscyxcbiAgMTI6XHRcdCAgMTAgaW5wdXQgcGlucyBhbmQgdXAgdG8gMjAgb3V0cHV0IHBpbnMuXG4gIDEzOlx0XG4gIDE0Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGVcbiAgMTU6XHRcdCAgd2lsbCBiZSBjYWxsZWQgemwzMDczeC5cbiAgMTY6XHRcbiAgMTc6XHRjb25maWcgWkwzMDczWF9JMkNcbiAgMTg6XHRcdHRyaXN0YXRlIFwmIzM0O0kyQyBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcJiMzNDtcbiAgMTk6XHRcdGRlcGVuZHMgb24gSTJDIFx1MDAyNlx1MDAyNiBORVQgXHUwMDI2XHUwMDI2IFBUUF8xNTg4X0NMT0NLXG4gIDIwOlx0XHRzZWxlY3QgUkVHTUFQX0kyQ1xuICAyMTpcdFx0c2VsZWN0IFpMMzA3M1hcbiAgMjI6XHRcdGhlbHBcbiAgMjM6XHRcdCAgVGhpcyBpcyBJMkMgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRVxuICAyNDpcdFx0ICBkZXZpY2VzLlxuICAyNTpcdFxuICAyNjpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcbiAgMjc6XHRcdCAgYmUgY2FsbGVkIHpsMzA3M3hfaTJjLlxuICAyODpcdFxuICAyOTpcdGNvbmZpZyBaTDMwNzNYX1NQSVxuICAzMDpcdFx0dHJpc3RhdGUgXCYjMzQ7U1BJIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1wmIzM0O1xuICAzMTpcdFx0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IFNQSSBcdTAwMjZcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tcbiAgMzI6XHRcdHNlbGVjdCBSRUdNQVBfU1BJXG4gIDMzOlx0XHRzZWxlY3QgWkwzMDczWFxuICAzNDpcdFx0aGVscFxuICAzNTpcdFx0ICBUaGlzIGlzIFNQSSBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFXG4gIDM2Olx0XHQgIGRldmljZXMuXG4gIDM3Olx0XG4gIDM4Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxuICAzOTpcdFx0ICBiZSBjYWxsZWQgemwzMDczeF9zcGkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDExOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0OTM0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZvY3VzOiBaTDMwNzNYIENsb2NrIENvbnRyb2wqKgoKT2theSwgc28gSSBuZWVkIHRvIGVuYWJsZSB0aGUgYFpMMzA3M1hfSTJDYCBhbmQgYFpMMzA3M1hfU1BJYCBpbnRlcmZhY2VzLiBUaGUgYFBUUF8xNTg4X0NMT0NLYCBmZWF0dXJlIGlzIGRlZmluaXRlbHkgbmVjZXNzYXJ5IHRvby4gQW5kIHNpbmNlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggY2xvY2sgbWFuYWdlbWVudCwgSSYjMzk7bGwgZ28gd2l0aCB0aGUgYERQTExgIHNlbGVjdGlvbi4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUga2V5IGZ1bmN0aW9ucyBJIHNob3VsZCBjb25jZW50cmF0ZSBvbiBmb3IgdGhpcyBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bSB0aGlua2luZzoKCiogICBgemwzMDczeF9jaGFuX3RvZF9yZWFkYAoqICAgYHpsMzA3M3hfY2hhbl90b2Rfd3JpdGVgCiogICBgemwzMDczeF9jaGFuX3RvZF9hZGp1c3RgCiogICBgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXRgCiogICBgemwzMDczeF9jaGFuX3RpZV93cml0ZWAKKiAgIGB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcGAKCkhvbGQgb24gYSBzZWNvbmQuLi5JIHNlZSB0aGVzZSBzdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gRFBMTCBhbmQgUFRQOgoKKiAgIGB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcGAKKiAgIGB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVgCiogICBgemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lYAoqICAgYHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2VgCiogICBgemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0YAoqICAgYHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0YAoKUmlnaHQsIEkmIzM5O2QgYmV0dGVyIGRvdWJsZS1jaGVjayB0aGF0IHRoZXkgYXJlIGFjdHVhbGx5IHN0YXRpYyAtIEkgbmVlZCB0byBrbm93IHdoeSB0aGV5IGFyZSB3cml0dGVuIHRoYXQgd2F5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9MjMxMD1zdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjMzOS0gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoyMzQwOnN0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTIzNDEtXHRcdFx0XHRcdCAgICAgICBzNjQgZGVsdGEpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTI0MzctICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6MjQzODpzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHM2NCBkZWx0YSlcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0yNDM5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTE6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU5NzgKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gRHluYW1pYyBDaGFubmVsIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGRlYWxpbmcgd2l0aCBgY2hhbi5jYCwgYW5kIEkmIzM5O3ZlIHF1aWNrbHkgY29uZmlybWVkIHRoYXQgdGhlIG1ham9yaXR5IG9mIGl0cyBmdW5jdGlvbnMgYXJlLCBhcyBleHBlY3RlZCwgc3RhdGljLiBUaGF0JiMzOTtzIGdvb2Q7IGl0IG5hcnJvd3MgZG93biBteSBmb2N1cy4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZHluYW1pY3MsIHRoZSBwYXJ0cyB0aGF0ICpkbyogY2hhbmdlLCBvciB0aGF0IGFyZSBkZXNpZ25lZCB0byBiZSBtb2RpZmllZC4KClRoZXJlZm9yZSwgSSYjMzk7bSBnb2luZyB0byBjb25jZW50cmF0ZSBvbiB0aGVzZSBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYGNoYW4uY2A6IGB6bDMwNzN4X2NoYW5fdG9kX3JlYWRgLCBgemwzMDczeF9jaGFuX3RvZF93cml0ZWAsIGB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdGAsIGB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldGAsIGB6bDMwNzN4X2NoYW5fdGllX3dyaXRlYCwgYW5kIGB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcGAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIGtleSBhcmVhcyBmb3IgbWUgdG8gaW52ZXN0aWdhdGUsIGdpdmVuIHRoZSBjb250ZXh0LgoKTXkgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgdmVyaWZ5IHdoZXRoZXIgdGhlc2UgZnVuY3Rpb25zIGFyZSBwcm9wZXJseSBleHBvcnRlZCBhbmQgdmlzaWJsZSBmb3IgdGhlIGV4dGVybmFsIGludGVyZmFjZSwgb3IgaWYgdGhlcmUmIzM5O3MgYW55IHN1YnRsZXR5IGluIHRoZWlyIGRlZmluaXRpb24gdGhhdCBJIG5lZWQgdG8gYWNjb3VudCBmb3IuIE5vIHBvaW50IGluIHdhc3RpbmcgdGltZSBpZiB0aGV5JiMzOTtyZSBub3QgZXZlbiBhY2Nlc3NpYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYz0yMzI9Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqemwzMDczeF9jaGFuX3N0YXRlX2dldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNDctICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjQ4OmludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjQ5LXtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM9MjkzPXN0YXRpYyBpbnQgemwzMDczeF9jaGFuX3RvZF9jdHJsKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCB1OCBjbWQpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMwOS0gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozMTA6aW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMTEtXHRcdFx0ICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg9NDU9aW50IHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTQ2LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjQ3OmludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjQ4OmludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNDktXHRcdFx0ICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTE6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY5NjMKCQkJCQkJCW91dHB1dDogMjUxCgkJCQkJCQl0aG91Z2h0czogNzY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBBenVyaXRlIERQTEwgRHJpdmVyIEludGVncmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgZm9jdXMgc3ltYm9scyDigJMgdGhlIGtleSBmdW5jdGlvbnMgd2UmIzM5O3JlIGludGVyZXN0ZWQgaW4uIEkmIzM5O3ZlIGdvdDoKCiogICBgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0YAoqICAgYHpsMzA3M3hfY2hhbl90b2RfcmVhZGAKKiAgIGB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlYAoqICAgYHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0YAoqICAgYHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0YAoqICAgYHpsMzA3M3hfY2hhbl90aWVfd3JpdGVgCiogICBgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXBgCgpJIHF1aWNrbHkgY29uZmlybWVkIHRoYXQgYHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdGAgaXMgbm9uLXN0YXRpYyBhcyByZXF1aXJlZC4gSSBhbHNvIGNvbmZpcm1lZCB0aGUga2V5IGNvbmZpZ3MuIFRoZSBjb2RlIGxvb2tzIGNvcnJlY3QsIHNvIHRoZSBmb2N1cyBzeW1ib2xzIGFyZSBjb3JyZWN0LgoKTm93LCB0aGUgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UmIzM5O3JlIGNvdmVyaW5nIGFsbCBiYXNlcy4gV2UgaGF2ZToKCiogICBgWkwzMDczWF9JMkNgCiogICBgWkwzMDczWF9TUElgCiogICBgUFRQXzE1ODhfQ0xPQ0tgCgpJIGNoZWNrZWQgYFBUUF8xNTg4X0NMT0NLYCwgYW5kIGl0JiMzOTtzIGEgdHJpc3RhdGUsIHNvIHRoYXQmIzM5O3MgZ29vZC4gSXQgd2lsbCBlbmFibGUgdGhlIGNvcnJlY3QgY29kZSBwYXRoIGFzIGludGVuZGVkLgoKSSBhbHNvIGNvbnNpZGVyZWQgYERQTExgLiBJdCBzZWVtcyBgRFBMTGAgaXMgc2VsZWN0ZWQgYnkgYFpMMzA3M1hgLCBzbyBpdCBzaG91bGQgYmUgYXV0b21hdGljYWxseSBlbmFibGVkLCBidXQgaW5jbHVkaW5nIGl0IGRvZXNuJiMzOTt0IGh1cnQuIEFuZCwgcmVhbGx5LCB0aGUgYHNlbGVjdGAgZGlyZWN0aXZlIGluIHRoZSBjb25maWcgaGFuZGxlcyBpdCwgc28gd2UgZG9uJiMzOTt0IG5lZWQgdG8gc3BlY2lmeSBpdC4KCkkgZGlkIGEgcXVpY2sgY2hlY2sgZm9yIG90aGVyIGRlcGVuZGVuY2llcywgYW5kIHdlJiMzOTt2ZSBnb3QgYEkyQ2AsIGBTUElgLCBhbmQgYE5FVGAuIGBORVRgIGlzIHVzdWFsbHkgZW5hYmxlZCwgYW5kIGBJMkNgIGFuZCBgU1BJYCBhcmUgcmVxdWlyZWQgZm9yIHRoaXMgZHJpdmVyLgoKU28sIHRoZSBjb25maWcgbGlzdCBpcyBzb2xpZDoKCiogICBgWkwzMDczWF9JMkNgCiogICBgWkwzMDczWF9TUElgCiogICBgUFRQXzE1ODhfQ0xPQ0tgCgpJIHZlcmlmaWVkIG5vIG90aGVyIGZ1bmN0aW9ucyBhcmUgcmVsZXZhbnQgYmVzaWRlcyB0aGUgZm9jdXMgc3ltYm9scy4gYHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXJgIGFuZCBgemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyYCBhcmUgc3RhdGljLCBzbyB0aGV5JiMzOTtyZSBub3QgcGFydCBvZiB0aGUgZnV6emluZyBzdXJmYWNlLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgd2Ugd2FudC4KCkluIGVzc2VuY2UsIHRoaXMgcGF0Y2ggaXMgYWRkaW5nIFBUUCBjbG9jayBmdW5jdGlvbmFsaXR5IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlci4gSXQmIzM5O3MgYWNjZXNzaWJsZSB2aWEgSTJDL1NQSSBhbmQgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdmlhIHRoZSBQVFAgY2xvY2sgc3Vic3lzdGVtIChgL2Rldi9wdHBYYCkuIFN5emthbGxlciB3aWxsIGJlIGFibGUgdG8gZnV6eiB0aGlzIHRocm91Z2ggSTJDL1NQSSBlbXVsYXRpb24uIFRoZSBmb2N1cyBzeW1ib2xzIGFyZSBjb3JyZWN0LCBhbmQgYWxsIGRlcGVuZGVuY2llcyBhcmUgYXBwcm9wcmlhdGVseSBjb3ZlcmVkLiBJIHRoaW5rIHRoaXMgaXMgZ29vZCB0byBnby4gVGltZSB0byBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WkwzMDczWF9JMkMmIzM0OywKICAgICYjMzQ7WkwzMDczWF9TUEkmIzM0OywKICAgICYjMzQ7UFRQXzE1ODhfQ0xPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQmIzM0OywKICAgICYjMzQ7emwzMDczeF9jaGFuX3RvZF9yZWFkJiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl90b2Rfd3JpdGUmIzM0OywKICAgICYjMzQ7emwzMDczeF9jaGFuX3RvZF9hZGp1c3QmIzM0OywKICAgICYjMzQ7emwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQmIzM0OywKICAgICYjMzQ7emwzMDczeF9jaGFuX3RpZV93cml0ZSYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciAoemwzMDczeCkuIFRoZSBkcml2ZXIgY2FuIGJlIGluc3RhbnRpYXRlZCB2aWEgSTJDIG9yIFNQSSwgYW5kIHRoZSBQVFAgY2xvY2sgaW50ZXJmYWNlIGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlIHZpYSBgL2Rldi9wdHBYYC4gU3l6a2FsbGVyIGNhbiBmdXp6IHRoaXMgZnVuY3Rpb25hbGl0eSB1c2luZyBJMkMvU1BJIGVtdWxhdGlvbiBhbmQgUFRQIGlvY3Rscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WkwzMDczWF9JMkMmIzM0OywKICAgICYjMzQ7WkwzMDczWF9TUEkmIzM0OywKICAgICYjMzQ7UFRQXzE1ODhfQ0xPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQmIzM0OywKICAgICYjMzQ7emwzMDczeF9jaGFuX3RvZF9yZWFkJiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl90b2Rfd3JpdGUmIzM0OywKICAgICYjMzQ7emwzMDczeF9jaGFuX3RvZF9hZGp1c3QmIzM0OywKICAgICYjMzQ7emwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQmIzM0OywKICAgICYjMzQ7emwzMDczeF9jaGFuX3RpZV93cml0ZSYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciAoemwzMDczeCkuIFRoZSBkcml2ZXIgY2FuIGJlIGluc3RhbnRpYXRlZCB2aWEgSTJDIG9yIFNQSSwgYW5kIHRoZSBQVFAgY2xvY2sgaW50ZXJmYWNlIGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlIHZpYSBgL2Rldi9wdHBYYC4gU3l6a2FsbGVyIGNhbiBmdXp6IHRoaXMgZnVuY3Rpb25hbGl0eSB1c2luZyBJMkMvU1BJIGVtdWxhdGlvbiBhbmQgUFRQIGlvY3Rscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTE6NTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMTo1NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIFBUUCBjbG9jayBzdXBwb3J0IGZvciB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIuIEl0IGFkZHMgZnVuY3Rpb25zIHRvIHJlYWQvd3JpdGUgVGltZSBvZiBEYXkgKFRvRCkgcmVnaXN0ZXJzLCBhZGp1c3QgZnJlcXVlbmN5LCBhbmQgYWRqdXN0IHBoYXNlLCBhcyB3ZWxsIGFzIHJlZ2lzdGVyaW5nIGEgUFRQIGNsb2NrIGRldmljZS4gQWxsIGxvY2FsIHZhcmlhYmxlcywgc3VjaCBhcyBgc3RydWN0IHRpbWVzcGVjNjRgIGFuZCBgc3ludGhfbWFza2AsIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgYHB0cF9jbG9ja19pbmZvYCBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQgZnJvbSBhIHN0YXRpYyBjb25zdCB0ZW1wbGF0ZSwgZW5zdXJpbmcgYWxsIGZpZWxkcyAoaW5jbHVkaW5nIHBhZGRpbmcgYW5kIHRoZSBgbmFtZWAgYnVmZmVyKSBhcmUgemVyby1pbml0aWFsaXplZCBiZWZvcmUgYHNucHJpbnRmYCBpcyBjYWxsZWQuIFRoZXJlIGFyZSBubyBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDU5MWRlYzgzYTg1ZDcwNzQ1NTI2MGU5MThlNzQxMjU3ZTQ1ZjkyOTEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyA3IDExOjUyOjQ2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWcKaW5kZXggNWJiY2ExNDAwNTgxMy4uZGExNzMxYWNlMTVmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnCkBAIC0yLDcgJiM0MzsyLDcgQEAKIAogY29uZmlnIFpMMzA3M1gKIAl0cmlzdGF0ZSAmIzM0O01pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXMmIzM0OyBpZiBDT01QSUxFX1RFU1QKLQlkZXBlbmRzIG9uIE5FVAomIzQzOwlkZXBlbmRzIG9uIE5FVCAmYW1wOyZhbXA7IFBUUF8xNTg4X0NMT0NLCiAJc2VsZWN0IERQTEwKIAlzZWxlY3QgTkVUX0RFVkxJTksKIAlzZWxlY3QgUkVHTUFQCkBAIC0xNiw3ICYjNDM7MTYsNyBAQCBjb25maWcgWkwzMDczWAogCiBjb25maWcgWkwzMDczWF9JMkMKIAl0cmlzdGF0ZSAmIzM0O0kyQyBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXMmIzM0OwotCWRlcGVuZHMgb24gSTJDICZhbXA7JmFtcDsgTkVUCiYjNDM7CWRlcGVuZHMgb24gSTJDICZhbXA7JmFtcDsgTkVUICZhbXA7JmFtcDsgUFRQXzE1ODhfQ0xPQ0sKIAlzZWxlY3QgUkVHTUFQX0kyQwogCXNlbGVjdCBaTDMwNzNYCiAJaGVscApAQCAtMjgsNyAmIzQzOzI4LDcgQEAgY29uZmlnIFpMMzA3M1hfSTJDCiAKIGNvbmZpZyBaTDMwNzNYX1NQSQogCXRyaXN0YXRlICYjMzQ7U1BJIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlcyYjMzQ7Ci0JZGVwZW5kcyBvbiBORVQgJmFtcDsmYW1wOyBTUEkKJiM0MzsJZGVwZW5kcyBvbiBORVQgJmFtcDsmYW1wOyBTUEkgJmFtcDsmYW1wOyBQVFBfMTU4OF9DTE9DSwogCXNlbGVjdCBSRUdNQVBfU1BJCiAJc2VsZWN0IFpMMzA3M1gKIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMKaW5kZXggNGVjMmNmNTNkYWQ0Ni4uYWY2Y2E0M2MzMzU5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYwpAQCAtMyw2ICYjNDM7Myw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvY2xlYW51cC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2RlbGF5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGV2X3ByaW50ay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wdHBfY2xvY2tfa2VybmVsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3RyaW5nLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKIApAQCAtMTYyLDggJiM0MzsxNjMsOCBAQCBpbnQgemwzMDczeF9jaGFuX25jb19tb2RlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCkKICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmUKICAqIEBpbmRleDogRFBMTCBjaGFubmVsIGluZGV4IHRvIGZldGNoIHN0YXRlIGZvcgogICoKLSAqIFJlYWRzIHRoZSBtb2RlX3JlZnNlbCByZWdpc3RlciBhbmQgcmVmZXJlbmNlIHByaW9yaXR5IHJlZ2lzdGVycyBmb3IKLSAqIHRoZSBnaXZlbiBEUExMIGNoYW5uZWwgYW5kIHN0b3JlcyB0aGUgcmF3IHZhbHVlcyBmb3IgbGF0ZXIgdXNlLgomIzQzOyAqIFJlYWRzIHRoZSBtb2RlX3JlZnNlbCwgc3RhdHVzIGFuZCByZWZlcmVuY2UgcHJpb3JpdHkgcmVnaXN0ZXJzIGZvcgomIzQzOyAqIHRoZSBnaXZlbiBEUExMIGNoYW5uZWwgYW5kIHN0b3JlcyB0aGUgdmFsdWVzIGZvciBsYXRlciB1c2UuCiAgKgogICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiAgKi8KQEAgLTIzNCw2ICYjNDM7MjM1LDMyMiBAQCBjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICp6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsCiAJcmV0dXJuICZhbXA7emxkZXYtJmd0O2NoYW5baW5kZXhdOwogfQogCiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0IC0gd2FpdCBmb3IgVG9EIHNlbWFwaG9yZSB0byBjbGVhcgomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICoKJiM0MzsgKiBQb2xscyB0aGUgVG9EIGNvbnRyb2wgcmVnaXN0ZXIgdW50aWwgdGhlIHNlbWFwaG9yZSBiaXQgaXMgY2xlYXJlZCwKJiM0MzsgKiBpbmRpY2F0aW5nIHRoZSBkZXZpY2UgaGFzIGNvbXBsZXRlZCB0aGUgcHJldmlvdXMgVG9EIG9wZXJhdGlvbi4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRUJVU1kgaWYgc2VtYXBob3JlIG5vdCBjbGVhcmVkLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBpbnQgdGltZW91dDsKJiM0MzsJdTggdG9kX2N0cmw7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSwgJmFtcDt0b2RfY3RybCk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJc3dpdGNoIChGSUVMRF9HRVQoWkxfRFBMTF9UT0RfQ1RSTF9DTUQsIHRvZF9jdHJsKSkgewomIzQzOwljYXNlIDA6CiYjNDM7CQkvKiBObyBvcGVyYXRpb24gcGVuZGluZyAocG93ZXItb24vcmVzZXQgZGVmYXVsdCkgKi8KJiM0MzsJCXJldHVybiAwOwomIzQzOwljYXNlIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaOgomIzQzOwkJdGltZW91dCA9IFpMX1BPTExfVE9EX1dSX1RJTUVPVVRfVVM7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UOgomIzQzOwljYXNlIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaOgomIzQzOwkJdGltZW91dCA9IFpMX1BPTExfVE9EX1JEX1RJTUVPVVRfVVM7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCS8qIEZXIG5ldmVyIHdyaXRlcyBjbWQgYml0czsgb25seSB0aGUgZHJpdmVyIHNldHMgdGhlbSAqLwomIzQzOwkJV0FSTl9PTigxKTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksCiYjNDM7CQkJCSAgWkxfRFBMTF9UT0RfQ1RSTF9TRU0sIHRpbWVvdXQpOwomIzQzOwomIzQzOwlyZXR1cm4gcmMgPT0gLUVUSU1FRE9VVCA/IC1FQlVTWSA6IHJjOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwgLSBpc3N1ZSBUb0QgY29tbWFuZAomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQGNtZDogVG9EIGNvbW1hbmQgdG8gZXhlY3V0ZQomIzQzOyAqCiYjNDM7ICogV3JpdGVzIHRoZSBzZW1hcGhvcmUgYW5kIGNvbW1hbmQgdG8gZHBsbF90b2RfY3RybC4gVGhlIGNhbGxlciBtdXN0CiYjNDM7ICogZW5zdXJlIHRoZSBkZXZpY2UgaXMgcmVhZHkgKHNlbWFwaG9yZSBjbGVhcikgYmVmb3JlIGNhbGxpbmcgYW5kCiYjNDM7ICogbXVzdCB3YWl0IGZvciBjb21wbGV0aW9uIGlmIG5lZWRlZC4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9jaGFuX3RvZF9jdHJsKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCB1OCBjbWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLAomIzQzOwkJCQlaTF9EUExMX1RPRF9DVFJMX1NFTSB8IGNtZCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl90b2RfcmVhZCAtIHJlYWQgVG9EIHJlZ2lzdGVycyBhZnRlciBpc3N1aW5nIGEgY29tbWFuZAomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQG5leHRfaHo6IGlmIHRydWUsIHJlYWQgcHJlZGljdGVkIFRvRCBhdCBuZXh0IDEgSHo7IG90aGVyd2lzZSByZWFkIGN1cnJlbnQKJiM0MzsgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIHRoZSByZXN1bHQKJiM0MzsgKiBAc3RzOiBvcHRpb25hbCBzeXN0ZW0gdGltZXN0YW1wIHBhaXIgZm9yIGNyb3NzLXRpbWVzdGFtcGluZwomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS4KJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLAomIzQzOwkJCSAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsCiYjNDM7CQkJICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cykKJiM0Mzt7CiYjNDM7CXUzMiBuc2VjOwomIzQzOwl1NjQgc2VjOwomIzQzOwl1OCBjbWQ7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJaWYgKG5leHRfaHopCiYjNDM7CQljbWQgPSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9ORVhUXzFIWjsKJiM0MzsJZWxzZQomIzQzOwkJY21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVDsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi8KJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlwdHBfcmVhZF9zeXN0ZW1fcHJldHMoc3RzKTsKJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLCBjbWQpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsJcHRwX3JlYWRfc3lzdGVtX3Bvc3R0cyhzdHMpOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfcmVhZF91NDgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9TRUMoY2gpLCAmYW1wO3NlYyk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJLyogSFcgbmFub3NlY29uZHMgYXJlIGFsd2F5cyBpbiBbMCwgTlNFQ19QRVJfU0VDKSByYW5nZSAqLwomIzQzOwlyYyA9IHpsMzA3M3hfcmVhZF91MzIoemxkZXYsIFpMX1JFR19EUExMX1RPRF9OUyhjaCksICZhbXA7bnNlYyk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJdHMtJmd0O3R2X3NlYyA9IHNlYzsKJiM0MzsJdHMtJmd0O3R2X25zZWMgPSBuc2VjOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF93cml0ZSAtIHdyaXRlIFRvRCByZWdpc3RlcnMgYW5kIHRyaWdnZXIgMSBIeiB1cGRhdGUKJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleAomIzQzOyAqIEB0czogdGltZSB0byBzZXQKJiM0MzsgKgomIzQzOyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICAgc3RydWN0IHRpbWVzcGVjNjQgdHMpCiYjNDM7ewomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CS8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCiYjNDM7CXJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIHRzLnR2X3NlYyk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgdHMudHZfbnNlYyk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfY3RybCh6bGRldiwgY2gsCiYjNDM7CQkJCSAgICAgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFopOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCAtIGF0b21pYyBUb0QgcmVhZC1tb2RpZnktd3JpdGUgd2l0aCByb2xsb3ZlciBndWFyZAomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgdG8gYXBwbHkKJiM0MzsgKgomIzQzOyAqIFJlYWRzIHRoZSBuZXh0LUh6IFRvRCBhbmQgY3VycmVudCBUb0QsIHRoZW4gY2hlY2tzIHdoZXRoZXIgZW5vdWdoIHRpbWUKJiM0MzsgKiByZW1haW5zIGJlZm9yZSB0aGUgbmV4dCAxIEh6IHJvbGxvdmVyIHRvIHNhZmVseSBjb21wbGV0ZSB0aGUgd3JpdGUuCiYjNDM7ICogUmUtcmVhZHMgaWYgdGhlIDEgSHogdGljayBjcm9zc2VkIGJldHdlZW4gdGhlIHR3byByZWFkcyBvciBpZiBsZXNzCiYjNDM7ICogdGhhbiAyMCBtcyByZW1haW5zIGJlZm9yZSB0aGUgbmV4dCByb2xsb3Zlci4gQXBwbGllcyBAZGVsdGEgYW5kIHdyaXRlcwomIzQzOyAqIHRoZSByZXN1bHQgYmFjay4KJiM0MzsgKgomIzQzOyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7I2RlZmluZSBaTF9UT0RfTUFYX1JFVFJJRVMJMjAKJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKQomIzQzO3sKJiM0MzsJc3RhdGljIGNvbnN0IGxvbmcgdGhyZXNob2xkX25zID0gMjAgKiBOU0VDX1BFUl9NU0VDOwomIzQzOwlzdHJ1Y3QgdGltZXNwZWM2NCB0c19uZXh0LCB0c19jdXIsIGRpZmY7CiYjNDM7CWludCByYywgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IFpMX1RPRF9NQVhfUkVUUklFUzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgdHJ1ZSwgJmFtcDt0c19uZXh0LCBOVUxMKTsKJiM0MzsJCWlmIChyYykKJiM0MzsJCQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CQlyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRldiwgY2gsIGZhbHNlLCAmYW1wO3RzX2N1ciwgTlVMTCk7CiYjNDM7CQlpZiAocmMpCiYjNDM7CQkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwkJLyogRW5zdXJlIHRoZSAxIEh6IHRpY2sgZGlkIG5vdCBjcm9zcyBiZXR3ZWVuIHRoZSB0d28gcmVhZHMKJiM0MzsJCSAqIGFuZCB0aGF0IGVub3VnaCBtYXJnaW4gcmVtYWlucyB0byBjb21wbGV0ZSB0aGUgd3JpdGUuCiYjNDM7CQkgKi8KJiM0MzsJCWRpZmYgPSB0aW1lc3BlYzY0X3N1Yih0c19uZXh0LCB0c19jdXIpOwomIzQzOwkJaWYgKGRpZmYudHZfc2VjICZndDsgMCB8fAomIzQzOwkJICAgICghZGlmZi50dl9zZWMgJmFtcDsmYW1wOyBkaWZmLnR2X25zZWMgJmd0Oz0gdGhyZXNob2xkX25zKSkKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzOwlpZiAoaSA9PSBaTF9UT0RfTUFYX1JFVFJJRVMpIHsKJiM0MzsJCWRldl93YXJuKHpsZGV2LSZndDtkZXYsCiYjNDM7CQkJICYjMzQ7RFBMTCV1IFRvRCBhZGp1c3QgZmFpbGVkIHRvIGdldCBzdGFibGUgbWFyZ2luXG4mIzM0OywKJiM0MzsJCQkgY2gpOwomIzQzOwkJcmV0dXJuIC1FQlVTWTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBBcHBseSBkZWx0YSB0byB0aGUgbmV4dC1IeiBUb0QgKi8KJiM0MzsJdHNfbmV4dCA9IHRpbWVzcGVjNjRfYWRkKHRzX25leHQsIGRlbHRhKTsKJiM0MzsJaWYgKCF0aW1lc3BlYzY0X3ZhbGlkKCZhbXA7dHNfbmV4dCkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkZXYsIGNoLCB0c19uZXh0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQgLSB3cml0ZSBkZWx0YSBmcmVxdWVuY3kgb2Zmc2V0IHRvIGhhcmR3YXJlCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAb2Zmc2V0OiBmcmVxdWVuY3kgb2Zmc2V0IGluIDJeLTQ4IHN0ZXBzCiYjNDM7ICoKJiM0MzsgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBob2xkIHRoZSBwZXItRFBMTCBsb2NrLgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldCkKJiM0Mzt7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfREZfT0ZGU0VUKGNoKSwgb2Zmc2V0KTsKJiM0MzsJaWYgKCFyYykKJiM0MzsJCXpsZGV2LSZndDtjaGFuW2NoXS5kZl9vZmZzZXQgPSBvZmZzZXQ7CiYjNDM7CiYjNDM7CXJldHVybiByYzsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX3RpZV93cml0ZSAtIGFkanVzdCBEUExMIHBoYXNlIHVzaW5nIFRJRSB3cml0ZQomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQGRlbHRhX25zOiBwaGFzZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzIChtdXN0IGJlIHdpdGhpbiAmIzQzOy0xcykKJiM0MzsgKgomIzQzOyAqIENvbnZlcnRzIG5hbm9zZWNvbmRzIHRvIFRJRSB1bml0cyAoMC4wMSBwcykgYW5kIHdyaXRlcyBUSUUgZGF0YQomIzQzOyAqIHRvIHRoZSBzcGVjaWZpZWQgY2hhbm5lbC4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgZGVsdGFfbnMpCiYjNDM7ewomIzQzOwlzNjQgdGllX2RhdGE7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJaWYgKFdBUk5fT04oZGVsdGFfbnMgJmx0Oz0gLU5TRUNfUEVSX1NFQyB8fCBkZWx0YV9ucyAmZ3Q7PSBOU0VDX1BFUl9TRUMpKQomIzQzOwkJcmV0dXJuIC1FUkFOR0U7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3psZGV2LSZndDt0aWVfbG9jayk7CiYjNDM7CiYjNDM7CS8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUSUUgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCiYjNDM7CXJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLAomIzQzOwkJCQkgIFpMX0RQTExfVElFX0NUUkxfT1AsCiYjNDM7CQkJCSAgWkxfUE9MTF9USUVfV1JfVElNRU9VVF9VUyk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJLyogQ29udmVydCBucyB0byBUSUUgdW5pdHMgKDAuMDEgcHMgPSAxMF4tMTQgcykgKi8KJiM0MzsJdGllX2RhdGEgPSBkZWx0YV9ucyAqIDEwMDAwMExMOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfREFUQShjaCksIHRpZV9kYXRhKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0ssIEJJVChjaCkpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTCwKJiM0MzsJCQkJWkxfRFBMTF9USUVfQ1RSTF9PUF9XUik7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwIC0gZXhlY3V0ZSBvbmUgb3V0cHV0IHBoYXNlIHN0ZXAgb3BlcmF0aW9uCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAb3V0X21hc2s6IGJpdG1hc2sgb2Ygb3V0cHV0cyB0byBzdGVwCiYjNDM7ICogQHN0ZXBfY3ljbGVzOiBwaGFzZSBzdGVwIGluIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcwomIzQzOyAqIEB0b2Rfc3RlcDogYWxzbyBzdGVwIHRoZSBUb0QgY291bnRlcgomIzQzOyAqCiYjNDM7ICogQWxsIG1hc2tlZCBvdXRwdXRzIG11c3QgdXNlIHN5bnRoZXNpemVycyBvZiB0aGUgc2FtZSBmcmVxdWVuY3kgc2luY2UKJiM0MzsgKiB0aGUgc3RlcCB2YWx1ZSBpcyBpbiBzeW50aGVzaXplciBjbG9jayBjeWNsZXMuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLAomIzQzOwkJCSAgICBib29sIHRvZF9zdGVwKQomIzQzO3sKJiM0MzsJdTggY3RybDsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRldi0mZ3Q7cGhhc2Vfc3RlcF9sb2NrKTsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgYW55IHByZXZpb3VzIHBoYXNlIHN0ZXAgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCiYjNDM7CXJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLAomIzQzOwkJCQkgIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AsCiYjNDM7CQkJCSAgWkxfUE9MTF9QSEFTRV9TVEVQX1RJTUVPVVRfVVMpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBLAomIzQzOwkJCSAgICAgICBzdGVwX2N5Y2xlcyk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3dyaXRlX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX01BU0ssIG91dF9tYXNrKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9OVU1CRVIsIDEpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CWN0cmwgPSBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfRFBMTCwgY2gpIHwKJiM0MzsJICAgICAgIEZJRUxEX1BSRVAoWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCwKJiM0MzsJCQkgIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfV1JJVEUpOwomIzQzOwlpZiAodG9kX3N0ZXApCiYjNDM7CQljdHJsIHw9IFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVA7CiYjNDM7CiYjNDM7CXJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTCwgY3RybCk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0IC0gY29tbWl0IERQTEwgY2hhbm5lbCBzdGF0ZSBjaGFuZ2VzIHRvIGhhcmR3YXJlCiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgKaW5kZXggZGM5YzZkOTViZGVlNy4uOTljM2I3MDg4ZjY3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaApAQCAtNSwxMCAmIzQzOzUsMTIgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3RkZGVmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3RpbWU2NC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7cmVncy5oJiMzNDsKIAomIzQzO3N0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcDsKIHN0cnVjdCB6bDMwNzN4X2RldjsKIAogLyoqCkBAIC00Miw2ICYjNDM7NDQsMjEgQEAgaW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgsCiBpbnQgemwzMDczeF9jaGFuX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7CiBpbnQgemwzMDczeF9jaGFuX25jb19tb2RlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7CiAKJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKTsKJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLAomIzQzOwkJCSAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsCiYjNDM7CQkJICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cyk7CiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICAgc3RydWN0IHRpbWVzcGVjNjQgdHMpOwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpOwomIzQzO2ludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsIGJvb2wgdG9kX3N0ZXApOwomIzQzOwomIzQzO2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldCk7CiYjNDM7CiYjNDM7aW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucyk7CiYjNDM7CiAvKioKICAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfZ2V0IC0gZ2V0IGNhY2hlZCBkZl9vZmZzZXQgdnMgdHJhY2tlZCByZWZlcmVuY2UKICAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGUKQEAgLTIwMCw2ICYjNDM7MjE3LDIxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6bDMwNzN4X2NoYW5fbW9kZV9pc19yZWZsb2NrKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pCiAJcmV0dXJuIHpsMzA3M3hfY2hhbl9tb2RlX2dldChjaGFuKSA9PSBaTF9EUExMX01PREVfUkVGU0VMX01PREVfUkVGTE9DSzsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZSAtIGNoZWNrIGlmIGNoYW5uZWwgbW9kZSBzdXBwb3J0cyBUSUUgd3JpdGUKJiM0MzsgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlCiYjNDM7ICoKJiM0MzsgKiBUSUUgd3JpdGUgaXMgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMgcmVnYXJkbGVzcyBvZiBsb2NrIHN0YXRlLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIFRJRSB3cml0ZSBpcyBzdXBwb3J0ZWQsIGZhbHNlIG90aGVyd2lzZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbAomIzQzO3psMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKQomIzQzO3sKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl9tb2RlX2lzX2F1dG8oY2hhbikgfHwKJiM0MzsJCXpsMzA3M3hfY2hhbl9tb2RlX2lzX3JlZmxvY2soY2hhbik7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB6bDMwNzN4X2NoYW5faXNfaG9fcmVhZHkgLSBjaGVjayBpZiBob2xkb3ZlciBpcyByZWFkeQogICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jCmluZGV4IDViMmQ3N2YyYzIyODguLjIzMGRmMDhlMjdjZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMKQEAgLTMyMiw3ICYjNDM7MzIyLDcgQEAgaW50IHpsMzA3M3hfd3JpdGVfdTQ4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsIHU2NCB2YWwpCiBpbnQgemwzMDczeF9wb2xsX3plcm9fdTgoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IHJlZywKIAkJCSB1OCBtYXNrLCB1bnNpZ25lZCBpbnQgdGltZW91dF91cykKIHsKLSNkZWZpbmUgWkxfUE9MTF9TTEVFUF9VUyAxMAomIzQzOwl1bnNpZ25lZCBpbnQgc2xlZXBfdXMgPSB0aW1lb3V0X3VzIC8gNTA7CiAJdW5zaWduZWQgaW50IHZhbDsKIAogCS8qIENoZWNrIHRoZSByZWdpc3RlciBpcyA4Yml0ICovCkBAIC0zMzYsNyAmIzQzOzMzNiw3IEBAIGludCB6bDMwNzN4X3BvbGxfemVyb191OChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLAogCXJlZyA9IFpMX1JFR19BRERSKHJlZykgJiM0MzsgWkxfUkFOR0VfT0ZGU0VUOwogCiAJcmV0dXJuIHJlZ21hcF9yZWFkX3BvbGxfdGltZW91dCh6bGRldi0mZ3Q7cmVnbWFwLCByZWcsIHZhbCwgISh2YWwgJmFtcDsgbWFzayksCi0JCQkJCVpMX1BPTExfU0xFRVBfVVMsIHRpbWVvdXRfdXMpOwomIzQzOwkJCQkJc2xlZXBfdXMsIHRpbWVvdXRfdXMpOwogfQogCiBpbnQgemwzMDczeF9tYl9vcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgb3BfcmVnLCB1OCBvcF92YWwsCkBAIC01MTEsNiAmIzQzOzUxMSwxMSBAQCB6bDMwNzN4X2Rldl9zdGF0ZV9mZXRjaChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KQogCWludCByYzsKIAl1OCBpOwogCiYjNDM7CXJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTSywKJiM0MzsJCQkgICAgICAmYW1wO3psZGV2LSZndDtvdXRfc3RlcF90aW1lX21hc2spOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiAJZm9yIChpID0gMDsgaSAmbHQ7IFpMMzA3M1hfTlVNX1JFRlM7IGkmIzQzOyYjNDM7KSB7CiAJCXJjID0gemwzMDczeF9yZWZfc3RhdGVfZmV0Y2goemxkZXYsIGkpOwogCQlpZiAocmMpIHsKQEAgLTEwMzQsNiAmIzQzOzEwMzksMTQgQEAgaW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpCiAJICogYW5kL29yIHBvbGxzIGFyZSByZXF1aXJlZCB0byBiZSBkb25lIGF0b21pY2FsbHkuCiAJICovCiAJcmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtJmd0O2RldiwgJmFtcDt6bGRldi0mZ3Q7bXVsdGlvcF9sb2NrKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtJmd0O2RldiwgcmMsCiYjNDM7CQkJCSAgICAgJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxuJiMzNDspOwomIzQzOwlyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi0mZ3Q7ZGV2LCAmYW1wO3psZGV2LSZndDtwaGFzZV9zdGVwX2xvY2spOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi0mZ3Q7ZGV2LCByYywKJiM0MzsJCQkJICAgICAmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XG4mIzM0Oyk7CiYjNDM7CXJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LSZndDtkZXYsICZhbXA7emxkZXYtJmd0O3RpZV9sb2NrKTsKIAlpZiAocmMpCiAJCXJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LSZndDtkZXYsIHJjLAogCQkJCSAgICAgJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxuJiMzNDspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oCmluZGV4IDc4ZGMyMDhmM2VlYTIuLjY3YzEwZTI1OTUxMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmgKQEAgLTI2LDYgJiM0MzsyNiwxMCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsOwogI2RlZmluZSBaTF9QT0xMX0hXUkVHX1RJTUVPVVRfVVMJKDUwICogVVNFQ19QRVJfTVNFQykKICNkZWZpbmUgWkxfUE9MTF9NQl9USU1FT1VUX1VTCQkoMzAgKiBVU0VDX1BFUl9NU0VDKQogI2RlZmluZSBaTF9QT0xMX1BIQVNFX0VSUl9USU1FT1VUX1VTCSg1MCAqIFVTRUNfUEVSX01TRUMpCiYjNDM7I2RlZmluZSBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VUwkoMzAwMCAqIFVTRUNfUEVSX01TRUMpCiYjNDM7I2RlZmluZSBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTCSgxMDAwICogVVNFQ19QRVJfTVNFQykKJiM0MzsjZGVmaW5lIFpMX1BPTExfVE9EX1JEX1RJTUVPVVRfVVMJKDMwICogVVNFQ19QRVJfTVNFQykKJiM0MzsjZGVmaW5lIFpMX1BPTExfVE9EX1dSX1RJTUVPVVRfVVMJKDEwMDAgKiBVU0VDX1BFUl9NU0VDKQogCiBlbnVtIHpsMzA3M3hfZmxhZ3MgewogCVpMMzA3M1hfRkxBR19SRUZfUEhBU0VfQ09NUF8zMl9CSVQsCkBAIC01NSw2ICYjNDM7NTksOCBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8gewogICogQHJlZ21hcDogcmVnbWFwIHRvIGFjY2VzcyBkZXZpY2UgcmVnaXN0ZXJzCiAgKiBAaW5mbzogZGV0ZWN0ZWQgY2hpcCBpbmZvCiAgKiBAbXVsdGlvcF9sb2NrOiB0byBzZXJpYWxpemUgbXVsdGlwbGUgcmVnaXN0ZXIgb3BlcmF0aW9ucwomIzQzOyAqIEB0aWVfbG9jazogdG8gc2VyaWFsaXplIFRJRSB3cml0ZSBvcGVyYXRpb25zCiYjNDM7ICogQHBoYXNlX3N0ZXBfbG9jazogdG8gc2VyaWFsaXplIG91dHB1dCBwaGFzZSBzdGVwIG9wZXJhdGlvbnMKICAqIEByZWY6IGFycmF5IG9mIGlucHV0IHJlZmVyZW5jZXMmIzM5OyBpbnZhcmlhbnRzCiAgKiBAb3V0OiBhcnJheSBvZiBvdXRzJiMzOTsgaW52YXJpYW50cwogICogQHN5bnRoOiBhcnJheSBvZiBzeW50aHMmIzM5OyBpbnZhcmlhbnRzCkBAIC02Myw2ICYjNDM7NjksNyBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8gewogICogQGt3b3JrZXI6IHRocmVhZCBmb3IgcGVyaW9kaWMgd29yawogICogQHdvcms6IHBlcmlvZGljIHdvcmsKICAqIEBjbG9ja19pZDogY2xvY2sgaWQgb2YgdGhlIGRldmljZQomIzQzOyAqIEBvdXRfc3RlcF90aW1lX21hc2s6IG91dHB1dCBzdGVwLXRpbWUgbWFzayAoZGV2aWNlLWdsb2JhbCkKICAqIEBwaGFzZV9hdmdfZmFjdG9yOiBwaGFzZSBvZmZzZXQgbWVhc3VyZW1lbnQgYXZlcmFnaW5nIGZhY3RvcgogICogQGZyZXFfbW9uaXRvcjogaXMgZnJlcXVlbmN5IG1vbml0b3IgZW5hYmxlZAogICovCkBAIC03MSw2ICYjNDM7NzgsOCBAQCBzdHJ1Y3QgemwzMDczeF9kZXYgewogCXN0cnVjdCByZWdtYXAJCQkqcmVnbWFwOwogCWNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mbwkqaW5mbzsKIAlzdHJ1Y3QgbXV0ZXgJCQltdWx0aW9wX2xvY2s7CiYjNDM7CXN0cnVjdCBtdXRleAkJCXRpZV9sb2NrOwomIzQzOwlzdHJ1Y3QgbXV0ZXgJCQlwaGFzZV9zdGVwX2xvY2s7CiAKIAkvKiBJbnZhcmlhbnRzICovCiAJc3RydWN0IHpsMzA3M3hfcmVmCXJlZltaTDMwNzNYX05VTV9SRUZTXTsKQEAgLTg3LDYgJiM0Mzs5Niw3IEBAIHN0cnVjdCB6bDMwNzN4X2RldiB7CiAKIAkvKiBQZXItY2hpcCBwYXJhbWV0ZXJzICovCiAJdTY0CQkJY2xvY2tfaWQ7CiYjNDM7CXUxNgkJCW91dF9zdGVwX3RpbWVfbWFzazsKIAl1OAkJCXBoYXNlX2F2Z19mYWN0b3I7CiAJYm9vbAkJCWZyZXFfbW9uaXRvcjsKIH07CkBAIC0zMDgsNiAmIzQzOzMxOCwxOSBAQCB6bDMwNzN4X2Rldl9vdXRfaXNfZW5hYmxlZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCkKIAlyZXR1cm4gemwzMDczeF9zeW50aF9pc19lbmFibGVkKHN5bnRoKSAmYW1wOyZhbXA7IHpsMzA3M3hfb3V0X2lzX2VuYWJsZWQob3V0KTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZGV2X291dF9pc19zdGVwcGVkIC0gY2hlY2sgaWYgb3V0cHV0IGlzIGluIHN0ZXAtdGltZSBtYXNrCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGluZGV4OiBvdXRwdXQgaW5kZXgKJiM0MzsgKgomIzQzOyAqIFJldHVybjogdHJ1ZSBpZiBvdXRwdXQgaXMgYWZmZWN0ZWQgYnkgc3RlcC10aW1lIG9wZXJhdGlvbnMKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wKJiM0Mzt6bDMwNzN4X2Rldl9vdXRfaXNfc3RlcHBlZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCkKJiM0Mzt7CiYjNDM7CXJldHVybiAhISh6bGRldi0mZ3Q7b3V0X3N0ZXBfdGltZV9tYXNrICZhbXA7IEJJVChpbmRleCkpOwomIzQzO30KJiM0MzsKIC8qKgogICogemwzMDczeF9kZXZfb3V0X2RwbGxfZ2V0IC0gZ2V0IERQTEwgSUQgdGhlIG91dHB1dCBpcyBkcml2ZW4gYnkKICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jCmluZGV4IDA0ODhhZTZhYzQ4NmMuLmE2ODZkZDUyYmZhYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMKQEAgLTIsNiAmIzQzOzIsNyBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvYml0cy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NsZWFudXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9idWcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jb250YWluZXJfb2YuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZXZfcHJpbnRrLmgmZ3Q7CkBAIC0xMyw2ICYjNDM7MTQsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L25ldGxpbmsuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wcm9wZXJ0eS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wdHBfY2xvY2tfa2VybmVsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NwcmludGYuaCZndDsKIApAQCAtMjI3NSw0NSAmIzQzOzIyNzcsMzc1IEBAIHpsMzA3M3hfZHBsbF9pbml0X2ZpbmVfcGhhc2VfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpCiAJcmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19TWU5USF9QSEFTRV9TSElGVF9DVFJMLCAweDAxKTsKIH0KIAomIzQzOy8qIE1heGltdW0gZnJlcXVlbmN5IGFkanVzdG1lbnQ6ICYjNDM7LTElIG9mIG5vbWluYWwgaW4gcHBiICovCiYjNDM7I2RlZmluZSBaTDMwNzNYX0RQTExfUFRQX01BWF9BREoJMTAwMDAwMDAKJiM0MzsKIC8qKgotICogemwzMDczeF9kcGxsX2FsbG9jIC0gYWxsb2NhdGUgRFBMTCBkZXZpY2UKLSAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQotICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0IC0gcmVhZCBjdXJyZW50IHRpbWUgZnJvbSBUb0QgY291bnRlcnMKJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm8KJiM0MzsgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIGN1cnJlbnQgdGltZQomIzQzOyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nCiAgKgotICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywKJiM0MzsJCQkJICAgICAgIHN0cnVjdCB0aW1lc3BlYzY0ICp0cywKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKQomIzQzO3sKJiM0MzsJc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsCiYjNDM7CQkJCQkJICAgcHRwX2luZm8pOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZHBsbC0mZ3Q7ZGV2LCB6bGRwbGwtJmd0O2lkLCBmYWxzZSwgdHMsIHN0cyk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0IC0gc2V0IFRvRCBjb3VudGVycyB0byBnaXZlbiB0aW1lCiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvCiYjNDM7ICogQHRzOiB0aW1lc3BlYyB3aXRoIHRpbWUgdG8gc2V0CiAgKgotICogUmV0dXJuOiBwb2ludGVyIHRvIERQTEwgZGV2aWNlIG9uIHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgb24gZXJyb3IKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKICAqLwotc3RydWN0IHpsMzA3M3hfZHBsbCAqCi16bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sCiYjNDM7CQkJCSAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cykKIHsKLQlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLAomIzQzOwkJCQkJCSAgIHB0cF9pbmZvKTsKIAotCXpsZHBsbCA9IGt6YWxsb2Nfb2JqKCp6bGRwbGwpOwotCWlmICghemxkcGxsKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7emxkcGxsLSZndDtsb2NrKTsKIAotCXpsZHBsbC0mZ3Q7ZGV2ID0gemxkZXY7Ci0JemxkcGxsLSZndDtpZCA9IGNoOwotCW11dGV4X2luaXQoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwotCUlOSVRfTElTVF9IRUFEKCZhbXA7emxkcGxsLSZndDtwaW5zKTsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkcGxsLSZndDtkZXYsIHpsZHBsbC0mZ3Q7aWQsICp0cyk7CiYjNDM7fQogCi0JcmV0dXJuIHpsZHBsbDsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCAtIGFkanVzdCBzdWItc2Vjb25kIHRpbWUgdmlhIHBoYXNlIHN0ZXAKJiM0MzsgKiBAemxkcGxsOiBEUExMIGNoYW5uZWwKJiM0MzsgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcyAobXVzdCBiZSB3aXRoaW4gKC1OU0VDX1BFUl9TRUMsCiYjNDM7ICogICAgICAgICBOU0VDX1BFUl9TRUMpKQomIzQzOyAqCiYjNDM7ICogVXNlcyB0aGUgb3V0cHV0IHBoYXNlIHN0ZXAgbWVjaGFuaXNtIHdpdGggdG9kX3N0ZXA9MSB0byBhZGp1c3QgYm90aAomIzQzOyAqIHRoZSBvdXRwdXQgY2xvY2sgcGhhc2UgYW5kIHRoZSBUb0QgY291bnRlciBzaW11bHRhbmVvdXNseS4gVGhpcyBrZWVwcwomIzQzOyAqIG91dHB1dHMgYW5kIFRvRCBjb2hlcmVudC4gT25seSB2YWxpZCBmb3IgTkNPLgomIzQzOyAqCiYjNDM7ICogT3V0cHV0cyBhcmUgZ3JvdXBlZCBieSBzeW50aGVzaXplciBzaW5jZSB0aGUgcGhhc2Ugc3RlcCB2YWx1ZSBpcyBpbgomIzQzOyAqIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcy4gVGhlIGZpcnN0IHN5bnRoIGdyb3VwIHdpdGggZW5hYmxlZCBvdXRwdXRzCiYjNDM7ICogdXNlcyB0b2Rfc3RlcCB0byBhZGp1c3QgYm90aCBvdXRwdXRzIGFuZCB0aGUgVG9EIGNvdW50ZXIuIFJlbWFpbmluZwomIzQzOyAqIGdyb3VwcyBzdGVwIG91dHB1dHMgb25seS4gSWYgbm8gc3ludGggaGFzIGVuYWJsZWQgb3V0cHV0cywgdGhlIFRvRAomIzQzOyAqIGNvdW50ZXIgaXMgc3RlcHBlZCBhbG9uZSB1c2luZyBhbiBlbXB0eSBvdXRwdXQgbWFzayAodGhlIEZXIHVzZXMKJiM0MzsgKiB0aGUgZmlyc3QgZW5hYmxlZCBzeW50aCYjMzk7cyBwZXJpb2QgZm9yIHRoZSBjb252ZXJzaW9uKS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRU9QTk9UU1VQUCBpZiBubyBzeW50aHMgYXZhaWxhYmxlLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLAomIzQzOwkJCQkJICAgICAgIHM2NCBkZWx0YSkKJiM0Mzt7CiYjNDM7CXUxNiBzeW50aF9tYXNrW1pMMzA3M1hfTlVNX1NZTlRIU10gPSB7fTsKJiM0MzsJc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC0mZ3Q7ZGV2OwomIzQzOwljb25zdCBzdHJ1Y3QgemwzMDczeF9zeW50aCAqc3ludGg7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW47CiYjNDM7CXUzMiBmaXJzdF9zeW50aF9mcmVxID0gMDsKJiM0MzsJYm9vbCB0b2Rfc3RlcHBlZCA9IGZhbHNlOwomIzQzOwlzMzIgc3RlcF9jeWNsZXM7CiYjNDM7CXUzMiBzeW50aF9mcmVxOwomIzQzOwlpbnQgcmM7CiYjNDM7CXU4IGk7CiYjNDM7CiYjNDM7CS8qIEJ1aWxkIHBlci1zeW50aCBvdXRwdXQgbWFza3MgZnJvbSByZWdpc3RlcmVkIG91dHB1dCBwaW5zICovCiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkocGluLCAmYW1wO3psZHBsbC0mZ3Q7cGlucywgbGlzdCkgewomIzQzOwkJdTggb3V0X2lkLCBzeW50aF9pZDsKJiM0MzsKJiM0MzsJCWlmICh6bDMwNzN4X2RwbGxfaXNfaW5wdXRfcGluKHBpbikpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlvdXRfaWQgPSB6bDMwNzN4X291dHB1dF9waW5fb3V0X2dldChwaW4tJmd0O2lkKTsKJiM0MzsKJiM0MzsJCWlmICghemwzMDczeF9kZXZfb3V0X2lzX3N0ZXBwZWQoemxkZXYsIG91dF9pZCkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlzeW50aF9pZCA9IHpsMzA3M3hfZGV2X291dF9zeW50aF9nZXQoemxkZXYsIG91dF9pZCk7CiYjNDM7CQlpZiAoc3ludGhfaWQgJmd0Oz0gWkwzMDczWF9OVU1fU1lOVEhTKSB7CiYjNDM7CQkJZGV2X3dhcm4oemxkZXYtJmd0O2RldiwgJiMzNDtVbmV4cGVjdGVkIHN5bnRoIGlkIGZvciBPVVQldVxuJiMzNDssCiYjNDM7CQkJCSBvdXRfaWQpOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwkJc3ludGhfbWFza1tzeW50aF9pZF0gfD0gQklUKG91dF9pZCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogUHJvY2VzcyBlYWNoIHN5bnRoIGdyb3VwICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBaTDMwNzNYX05VTV9TWU5USFM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzeW50aCA9IHpsMzA3M3hfc3ludGhfc3RhdGVfZ2V0KHpsZGV2LCBpKTsKJiM0MzsJCWlmICghemwzMDczeF9zeW50aF9pc19lbmFibGVkKHN5bnRoKSB8fAomIzQzOwkJICAgIHpsMzA3M3hfc3ludGhfZHBsbF9nZXQoc3ludGgpICE9IHpsZHBsbC0mZ3Q7aWQpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlzeW50aF9mcmVxID0gemwzMDczeF9zeW50aF9mcmVxX2dldChzeW50aCk7CiYjNDM7CiYjNDM7CQkvKiBSZW1lbWJlciBmaXJzdCBlbmFibGVkIHN5bnRoIGZyZXEgZm9yIFRvRC1vbmx5IGZhbGxiYWNrICovCiYjNDM7CQlpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpCiYjNDM7CQkJZmlyc3Rfc3ludGhfZnJlcSA9IHN5bnRoX2ZyZXE7CiYjNDM7CiYjNDM7CQlpZiAoIXN5bnRoX21hc2tbaV0pCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkvKiBTYWZlIGZvciBzMzI6IG1heCBzeW50aCBmcmVxIGlzIDc1MCBNSHogKi8KJiM0MzsJCXN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIHN5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7CiYjNDM7CiYjNDM7CQlyYyA9IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtJmd0O2lkLAomIzQzOwkJCQkJICAgICBzeW50aF9tYXNrW2ldLCBzdGVwX2N5Y2xlcywKJiM0MzsJCQkJCSAgICAgIXRvZF9zdGVwcGVkKTsKJiM0MzsJCWlmIChyYykgewomIzQzOwkJCWlmICh0b2Rfc3RlcHBlZCkgewomIzQzOwkJCQlkZXZfd2Fybih6bGRldi0mZ3Q7ZGV2LAomIzQzOwkJCQkJICYjMzQ7UGFydGlhbCBwaGFzZSBzdGVwIGZhaWx1cmVcbiYjMzQ7KTsKJiM0MzsJCQkJcmV0dXJuIDA7CiYjNDM7CQkJfQomIzQzOwkJCXJldHVybiByYzsKJiM0MzsJCX0KJiM0MzsJCXRvZF9zdGVwcGVkID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CS8qIE5vIGVuYWJsZWQgb3V0cHV0cyBmb3VuZDsgc3RlcCBUb0QgY291bnRlciBvbmx5IHVzaW5nIHRoZQomIzQzOwkgKiBmaXJzdCBlbmFibGVkIHN5bnRoJiMzOTtzIHBlcmlvZCAoZW1wdHkgb3V0cHV0IG1hc2spLgomIzQzOwkgKi8KJiM0MzsJaWYgKCF0b2Rfc3RlcHBlZCkgewomIzQzOwkJc3RlcF9jeWNsZXMgPSBkaXZfczY0KGRlbHRhICogZmlyc3Rfc3ludGhfZnJlcSwgTlNFQ19QRVJfU0VDKTsKJiM0MzsJCXJldHVybiB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCh6bGRldiwgemxkcGxsLSZndDtpZCwgMCwKJiM0MzsJCQkJCSAgICAgICBzdGVwX2N5Y2xlcywgdHJ1ZSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIC8qKgotICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlCi0gKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmUKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUgLSBhZGp1c3QgUFRQIGNsb2NrIHRpbWUKJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm8KJiM0MzsgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcwogICoKLSAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuCiYjNDM7ICogRm9yIE5DTywgbGFyZ2UgZGVsdGFzICgmZ3Q7PSAxIHNlY29uZCkgYXJlIHNwbGl0IGludG8gYSBUb0QKJiM0MzsgKiByZWFkLW1vZGlmeS13cml0ZSBmb3IgdGhlIHNlY29uZHMgcGFydCBhbmQgYW4gb3V0cHV0IHBoYXNlIHN0ZXAgZm9yCiYjNDM7ICogdGhlIHN1Yi1zZWNvbmQgcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgcGhhc2Ugc3RlcCBkaXJlY3RseSwKJiM0MzsgKiBmYWxsaW5nIGJhY2sgdG8gVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIGlmIHBoYXNlIHN0ZXAgaXMgdW5hdmFpbGFibGUuCiYjNDM7ICogSW4gQVVUTy9SRUZMT0NLIG1vZGVzLCBsYXJnZSBkZWx0YXMgYXJlIHNwbGl0IGludG8gVG9ECiYjNDM7ICogcmVhZC1tb2RpZnktd3JpdGUgZm9yIHNlY29uZHMgYW5kIFRJRSB3cml0ZSBmb3IgdGhlIHN1Yi1zZWNvbmQKJiM0MzsgKiByZW1haW5kZXIuIFN1Yi1zZWNvbmQgZGVsdGFzIHVzZSBUSUUgd3JpdGUgZGlyZWN0bHkuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKICAqLwotdm9pZAotemwzMDczeF9kcGxsX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczY0IGRlbHRhKQogewotCVdBUk4oemxkcGxsLSZndDtkcGxsX2RldiwgJiMzNDtEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXG4mIzM0Oyk7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLAomIzQzOwkJCQkJCSAgIHB0cF9pbmZvKTsKJiM0MzsJc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC0mZ3Q7ZGV2OwomIzQzOwljb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuOwomIzQzOwlib29sIHNlY19hZGp1c3RlZCA9IGZhbHNlOwomIzQzOwlzdHJ1Y3QgdGltZXNwZWM2NCB0czsKJiM0MzsJaW50IHJjOwogCi0JbXV0ZXhfZGVzdHJveSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7Ci0Ja2ZyZWUoemxkcGxsKTsKJiM0MzsJaWYgKCFkZWx0YSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwomIzQzOwkvKiBNb2RlcyB3aXRob3V0IHBoYXNlIHN0ZXAgb3IgVElFIHVzZSBwbGFpbiBUb0QgYWRqdXN0ICovCiYjNDM7CWNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZGV2LCB6bGRwbGwtJmd0O2lkKTsKJiM0MzsJaWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikgJmFtcDsmYW1wOwomIzQzOwkgICAgIXpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjaGFuKSkKJiM0MzsJCXJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLSZndDtpZCwKJiM0MzsJCQkJCSAgICAgICBuc190b190aW1lc3BlYzY0KGRlbHRhKSk7CiYjNDM7CiYjNDM7CS8qIFNwbGl0IG9mZiBzZWNvbmRzIHZpYSBUb0QgcmVhZC1tb2RpZnktd3JpdGUgc28gdGhlIHN1Yi1zZWNvbmQKJiM0MzsJICogcmVtYWluZGVyIGNhbiBiZSBhcHBsaWVkIHRocm91Z2ggdGhlIG91dHB1dC1jb2hlcmVudCBtZWNoYW5pc20KJiM0MzsJICogKHBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlKS4KJiM0MzsJICovCiYjNDM7CWlmIChkZWx0YSAmZ3Q7PSBOU0VDX1BFUl9TRUMgfHwgZGVsdGEgJmx0Oz0gLU5TRUNfUEVSX1NFQykgewomIzQzOwkJczMyIHJlbWFpbmRlcjsKJiM0MzsKJiM0MzsJCXRzLnR2X3NlYyA9IGRpdl9zNjRfcmVtKGRlbHRhLCBOU0VDX1BFUl9TRUMsICZhbXA7cmVtYWluZGVyKTsKJiM0MzsJCXRzLnR2X25zZWMgPSAwOwomIzQzOwkJZGVsdGEgPSByZW1haW5kZXI7CiYjNDM7CiYjNDM7CQlyYyA9IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtJmd0O2lkLCB0cyk7CiYjNDM7CQlpZiAocmMpCiYjNDM7CQkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwkJLyogTm8gc3ViLXNlY29uZCByZW1haW5kZXIsIGRvbmUgKi8KJiM0MzsJCWlmICghZGVsdGEpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CQkvKiBXYWl0IGZvciB0aGUgVG9EIHdyaXRlIHRvIGJlIGFwcGxpZWQgYXQgdGhlIDEgSHogZWRnZQomIzQzOwkJICogYmVmb3JlIGlzc3VpbmcgcGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUsIHNvIHRoZSBwZW5kaW5nCiYjNDM7CQkgKiBXUl9ORVhUXzFIWiBkb2VzIG5vdCBvdmVyd3JpdGUgdGhlIHN1Yi1zZWNvbmQgYWRqdXN0bWVudC4KJiM0MzsJCSAqLwomIzQzOwkJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIHpsZHBsbC0mZ3Q7aWQpOwomIzQzOwkJaWYgKHJjKQomIzQzOwkJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJCXNlY19hZGp1c3RlZCA9IHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQXBwbHkgc3ViLXNlY29uZCBkZWx0YSB2aWEgcGhhc2Ugc3RlcCAoTkNPKSBvciBUSUUgd3JpdGUgKi8KJiM0MzsJaWYgKHpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSkgewomIzQzOwkJcmMgPSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCh6bGRwbGwsIGRlbHRhKTsKJiM0MzsJCWlmICghcmMpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyYyA9IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoemxkZXYsIHpsZHBsbC0mZ3Q7aWQsIGRlbHRhKTsKJiM0MzsJCWlmICghcmMpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogUGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUgZmFpbGVkLCBmYWxsIGJhY2sgdG8gVG9EIGFkanVzdCAqLwomIzQzOwlyYyA9IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtJmd0O2lkLAomIzQzOwkJCQkgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTsKJiM0MzsKJiM0MzsJLyogSW4gdGhlIHVubGlrZWx5IGV2ZW50IHRoYXQgYm90aCBwaGFzZSBzdGVwL1RJRSB3cml0ZSBhbmQgZmFsbGJhY2sKJiM0MzsJICogVG9EIGFkanVzdCBmYWlsIGFmdGVyIHNlY29uZHMgd2VyZSBhbHJlYWR5IGNvbW1pdHRlZCwgcmV0dXJuCiYjNDM7CSAqIHN1Y2Nlc3MgdG8gcHJldmVudCB0aGUgUFRQIHNlcnZvIGZyb20gcmV0cnlpbmcgdGhlIGZ1bGwgZGVsdGEgYW5kCiYjNDM7CSAqIGFwcGx5aW5nIHNlY29uZHMgYWdhaW4uIFRoZSBzdWItc2Vjb25kIHJlc2lkdWFsIHdpbGwgc2VsZi1jb3JyZWN0CiYjNDM7CSAqIGluIHRoZSBuZXh0IHNlcnZvIGN5Y2xlLgomIzQzOwkgKi8KJiM0MzsJaWYgKHJjICZhbXA7JmFtcDsgc2VjX2FkanVzdGVkKSB7CiYjNDM7CQlkZXZfd2Fybih6bGRldi0mZ3Q7ZGV2LAomIzQzOwkJCSAmIzM0O1N1Yi1zZWNvbmQgYWRqdXN0bWVudCBmYWlsZWQgYWZ0ZXIgc2Vjb25kcyBhcHBsaWVkXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcmM7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSAtIGFkanVzdCBQVFAgY2xvY2sgZnJlcXVlbmN5CiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvCiYjNDM7ICogQHNjYWxlZF9wcG06IGZyZXF1ZW5jeSBhZGp1c3RtZW50IGluIHNjYWxlZCBwcG0gKHBwbSAqIDJeMTYpCiYjNDM7ICoKJiM0MzsgKiBPbmx5IHN1cHBvcnRlZCBmb3IgTkNPLiBXcml0ZXMgdGhlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgcmVnaXN0ZXIuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46CiYjNDM7ICogKiAlMAkJCS0gc3VjY2VzcyBvciBAc2NhbGVkX3BwbSBpcyB6ZXJvIChuby1vcCkKJiM0MzsgKiAqICUtRU9QTk9UU1VQUAktIE5DTyBwaW4gaXMgbm90IGNvbm5lY3RlZCBhbmQgQHNjYWxlZF9wcG0gaXMgbm9uLXplcm8KJiM0MzsgKiAqIG5lZ2F0aXZlCQktIG90aGVyIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludAomIzQzO3psMzA3M3hfZHBsbF9wdHBfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGxvbmcgc2NhbGVkX3BwbSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLAomIzQzOwkJCQkJCSAgIHB0cF9pbmZvKTsKJiM0MzsJY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjsKJiM0MzsJczY0IG9mZnNldDsKJiM0MzsKJiM0MzsJLyogQ29udmVydCBzY2FsZWRfcHBtIHRvIGRmX29mZnNldCBpbiAyXi00OCBzdGVwczoKJiM0MzsJICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjMyKSAvIDEwXjYKJiM0MzsJICoKJiM0MzsJICogU2ltcGxpZnkgdG8gYXZvaWQgb3ZlcmZsb3c6CiYjNDM7CSAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogMl4yNikgLyA1XjYKJiM0MzsJICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiA2NzEwODg2NCkgLyAxNTYyNQomIzQzOwkgKi8KJiM0MzsJb2Zmc2V0ID0gLWRpdl9zNjQoKHM2NClzY2FsZWRfcHBtICogNjcxMDg4NjRMTCwgMTU2MjUpOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwomIzQzOwljaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRwbGwtJmd0O2RldiwgemxkcGxsLSZndDtpZCk7CiYjNDM7CWlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKQomIzQzOwkJcmV0dXJuIHNjYWxlZF9wcG0gPyAtRU9QTk9UU1VQUCA6IDA7CiYjNDM7CWlmIChvZmZzZXQgPT0gY2hhbi0mZ3Q7ZGZfb2Zmc2V0KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCh6bGRwbGwtJmd0O2RldiwgemxkcGxsLSZndDtpZCwgb2Zmc2V0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSAtIGFkanVzdCBQVFAgY2xvY2sgcGhhc2UKJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm8KJiM0MzsgKiBAZGVsdGE6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMKJiM0MzsgKgomIzQzOyAqIE9ubHkgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMuIFVzZXMgVElFIHdyaXRlIGZvcgomIzQzOyAqIG5hbm9zZWNvbmQgcmVzb2x1dGlvbiBwaGFzZSBhZGp1c3RtZW50LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOgomIzQzOyAqICogJTAJCQktIHN1Y2Nlc3Mgb3IgQGRlbHRhIGlzIHplcm8gKG5vLW9wKQomIzQzOyAqICogJS1FT1BOT1RTVVBQCS0gbW9kZSBkb2VzIG5vdCBzdXBwb3J0IFRJRSBhbmQgQGRlbHRhIGlzIG5vbi16ZXJvCiYjNDM7ICogKiBuZWdhdGl2ZQkJLSBvdGhlciBlcnJvcgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHMzMiBkZWx0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLAomIzQzOwkJCQkJCSAgIHB0cF9pbmZvKTsKJiM0MzsJc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC0mZ3Q7ZGV2OwomIzQzOwljb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuOwomIzQzOwomIzQzOwlpZiAoIWRlbHRhKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CWNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZGV2LCB6bGRwbGwtJmd0O2lkKTsKJiM0MzsKJiM0MzsJaWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY2hhbikpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJldHVybiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHpsZGV2LCB6bGRwbGwtJmd0O2lkLCBkZWx0YSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzMzIKJiM0Mzt6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyBfX2Fsd2F5c191bnVzZWQpCiYjNDM7ewomIzQzOwkvKiBIVyBsaW1pdHMgVElFIHdyaXRlIHRvICYjNDM7LTEgc2Vjb25kLiBSZXR1cm4gdGhlIGNvbnN0YW50IEhXCiYjNDM7CSAqIGxpbWl0IGFuZCBsZXQgYWRqcGhhc2UgaGFuZGxlIG1vZGUtc3BlY2lmaWMgY2hlY2tzLgomIzQzOwkgKi8KJiM0MzsJcmV0dXJuIE5TRUNfUEVSX1NFQyAtIDE7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvID0gewomIzQzOwkub3duZXIJCT0gVEhJU19NT0RVTEUsCiYjNDM7CS5tYXhfYWRqCT0gWkwzMDczWF9EUExMX1BUUF9NQVhfQURKLAomIzQzOwkuZ2V0dGltZXg2NAk9IHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCwKJiM0MzsJLnNldHRpbWU2NAk9IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0LAomIzQzOwkuYWRqdGltZQk9IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSwKJiM0MzsJLmFkamZpbmUJPSB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUsCiYjNDM7CS5hZGpwaGFzZQk9IHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2UsCiYjNDM7CS5nZXRtYXhwaGFzZQk9IHpsMzA3M3hfZHBsbF9wdHBfZ2V0bWF4cGhhc2UsCiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBhIERQTEwgY2hhbm5lbAomIzQzOyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byByZWdpc3RlciBQVFAgY2xvY2sgZm9yCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQomIzQzO3sKJiM0MzsJc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC0mZ3Q7ZGV2OwomIzQzOwlzdHJ1Y3QgcHRwX2Nsb2NrICpwdHBfY2xvY2s7CiYjNDM7CiYjNDM7CXNucHJpbnRmKHpsZHBsbC0mZ3Q7cHRwX2luZm8ubmFtZSwgc2l6ZW9mKHpsZHBsbC0mZ3Q7cHRwX2luZm8ubmFtZSksCiYjNDM7CQkgJiMzNDslcy1kcGxsJXUmIzM0OywgZGV2X25hbWUoemxkZXYtJmd0O2RldiksIHpsZHBsbC0mZ3Q7aWQpOwomIzQzOwomIzQzOwlwdHBfY2xvY2sgPSBwdHBfY2xvY2tfcmVnaXN0ZXIoJmFtcDt6bGRwbGwtJmd0O3B0cF9pbmZvLCB6bGRldi0mZ3Q7ZGV2KTsKJiM0MzsJaWYgKElTX0VSUihwdHBfY2xvY2spKSB7CiYjNDM7CQlkZXZfZXJyKHpsZGV2LSZndDtkZXYsICYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgRFBMTCV1XG4mIzM0OywKJiM0MzsJCQl6bGRwbGwtJmd0O2lkKTsKJiM0MzsJCXJldHVybiBQVFJfRVJSKHB0cF9jbG9jayk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJemxkcGxsLSZndDtwdHBfY2xvY2sgPSBwdHBfY2xvY2s7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIgLSB1bnJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgYSBEUExMIGNoYW5uZWwKJiM0MzsgKiBAemxkcGxsOiBEUExMIGNoYW5uZWwgdG8gdW5yZWdpc3RlciBQVFAgY2xvY2sgZm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKJiM0Mzt7CiYjNDM7CWlmICghSVNfRVJSX09SX05VTEwoemxkcGxsLSZndDtwdHBfY2xvY2spKSB7CiYjNDM7CQlwdHBfY2xvY2tfdW5yZWdpc3Rlcih6bGRwbGwtJmd0O3B0cF9jbG9jayk7CiYjNDM7CQl6bGRwbGwtJmd0O3B0cF9jbG9jayA9IE5VTEw7CiYjNDM7CX0KIH0KIAogLyoqCkBAIC0yMzk4LDYgJiM0MzsyNzMwLDQ4IEBAIHpsMzA3M3hfZHBsbF9yZWZfc3luY19wYWlyc19yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfYWxsb2MgLSBhbGxvY2F0ZSBEUExMIGRldmljZQomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlcgomIzQzOyAqCiYjNDM7ICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBwb2ludGVyIHRvIERQTEwgZGV2aWNlIG9uIHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgemwzMDczeF9kcGxsICoKJiM0Mzt6bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7CiYjNDM7CiYjNDM7CXpsZHBsbCA9IGt6YWxsb2Nfb2JqKCp6bGRwbGwpOwomIzQzOwlpZiAoIXpsZHBsbCkKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwomIzQzOwomIzQzOwl6bGRwbGwtJmd0O2RldiA9IHpsZGV2OwomIzQzOwl6bGRwbGwtJmd0O2lkID0gY2g7CiYjNDM7CXpsZHBsbC0mZ3Q7cHRwX2luZm8gPSB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm87CiYjNDM7CW11dGV4X2luaXQoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwlJTklUX0xJU1RfSEVBRCgmYW1wO3psZHBsbC0mZ3Q7cGlucyk7CiYjNDM7CiYjNDM7CXJldHVybiB6bGRwbGw7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9mcmVlIC0gZnJlZSBEUExMIGRldmljZQomIzQzOyAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZQomIzQzOyAqCiYjNDM7ICogRGVhbGxvY2F0ZXMgZ2l2ZW4gRFBMTCBkZXZpY2UgcHJldmlvdXNseSBhbGxvY2F0ZWQgYnkgQHpsMzA3M3hfZHBsbF9hbGxvYy4KJiM0MzsgKi8KJiM0Mzt2b2lkCiYjNDM7emwzMDczeF9kcGxsX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQomIzQzO3sKJiM0MzsJV0FSTih6bGRwbGwtJmd0O2RwbGxfZGV2LCAmIzM0O0RQTEwgZGV2aWNlIGlzIHN0aWxsIHJlZ2lzdGVyZWRcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJbXV0ZXhfZGVzdHJveSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiYjNDM7CWtmcmVlKHpsZHBsbCk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIgLSByZWdpc3RlciBEUExMIGRldmljZSBhbmQgYWxsIGl0cyBwaW5zCiAgKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmUKQEAgLTI0MjgsNiAmIzQzOzI4MDIsMTMgQEAgemwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKIAkJcmV0dXJuIHJjOwogCX0KIAomIzQzOwlyYyA9IHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIoemxkcGxsKTsKJiM0MzsJaWYgKHJjKSB7CiYjNDM7CQl6bDMwNzN4X2RwbGxfcGluc191bnJlZ2lzdGVyKHpsZHBsbCk7CiYjNDM7CQl6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTsKJiM0MzsJCXJldHVybiByYzsKJiM0MzsJfQomIzQzOwogCXJldHVybiAwOwogfQogCkBAIC0yNDQxLDcgJiM0MzsyODIyLDcgQEAgemwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKIHZvaWQKIHpsMzA3M3hfZHBsbF91bnJlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKIHsKLQkvKiBVbnJlZ2lzdGVyIGFsbCBwaW5zIGFuZCBkcGxsICovCiYjNDM7CXpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3Rlcih6bGRwbGwpOwogCXpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTsKIAl6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaAppbmRleCBmYWViYzQwMmJhMWI3Li45OTMyMjFkYzYzMjQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oCkBAIC01LDYgJiM0Mzs1LDcgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2RwbGwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9saXN0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtjb3JlLmgmIzM0OwogCkBAIC0yMiw2ICYjNDM7MjMsOCBAQAogICogQHR5cGU6IERQTEwgdHlwZSAoUFBTIG9yIEVFQykKICAqIEBsb2NrX3N0YXR1czogbGFzdCBzYXZlZCBEUExMIGxvY2sgc3RhdHVzCiAgKiBAcGluczogbGlzdCBvZiBwaW5zCiYjNDM7ICogQHB0cF9pbmZvOiBQVFAgY2xvY2sgaW5mbwomIzQzOyAqIEBwdHBfY2xvY2s6IHJlZ2lzdGVyZWQgUFRQIGNsb2NrIChvciBOVUxMKQogICovCiBzdHJ1Y3QgemwzMDczeF9kcGxsIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCQlsaXN0OwpAQCAtMzYsNiAmIzQzOzM5LDggQEAgc3RydWN0IHpsMzA3M3hfZHBsbCB7CiAJZW51bSBkcGxsX3R5cGUJCQl0eXBlOwogCWVudW0gZHBsbF9sb2NrX3N0YXR1cwkJbG9ja19zdGF0dXM7CiAJc3RydWN0IGxpc3RfaGVhZAkJcGluczsKJiM0MzsJc3RydWN0IHB0cF9jbG9ja19pbmZvCQlwdHBfaW5mbzsKJiM0MzsJc3RydWN0IHB0cF9jbG9jawkJKnB0cF9jbG9jazsKIH07CiAKIHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgKaW5kZXggYjcwZWFkN2Q0NDk1Yi4uZjNhNWUxMjE1YWEzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaApAQCAtMTc5LDYgJiM0MzsxNzksMjAgQEAKICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRAkJCUdFTk1BU0soMiwgMCkKICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRF9BQ0NfSQkJNAogCiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTAkJCVpMX1JFRyg1LCAweDMwLCAxKQomIzQzOyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUAkJCUdFTk1BU0soMiwgMCkKJiM0MzsjZGVmaW5lIFpMX0RQTExfVElFX0NUUkxfT1BfV1IJCQk0CiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTF9NQVNLCQlaTF9SRUcoNSwgMHgzMSwgMSkKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9DVFJMKF9pZHgpCQkJCQlcCiYjNDM7CVpMX1JFR19JRFgoX2lkeCwgNSwgMHgzOCwgMSwgWkwzMDczWF9NQVhfQ0hBTk5FTFMsIDEpCiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX1NFTQkJCUJJVCg0KQomIzQzOyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTUQJCQlHRU5NQVNLKDMsIDApCiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWgkxCiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UCQk4CiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9ORVhUXzFIWgk5CiYjNDM7CiAjZGVmaW5lIFpMX1JFR19EUExMX01FQVNfQ1RSTAkJCVpMX1JFRyg1LCAweDUwLCAxKQogI2RlZmluZSBaTF9EUExMX01FQVNfQ1RSTF9FTgkJCUJJVCgwKQogI2RlZmluZSBaTF9EUExMX01FQVNfQ1RSTF9BVkdfRkFDVE9SCQlHRU5NQVNLKDcsIDQpCkBAIC0xOTMsNiAmIzQzOzIwNyw5IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBSZWdpc3RlciBQYWdlcyA2LTcsIERQTEwgRGF0YQomIzQzOyAqCiYjNDM7ICogUGVyLWNoYW5uZWwgcmVnaXN0ZXJzIHdpdGggc3RyaWRlIDB4MjAuIENoYW5uZWxzIDAtMyByZXNpZGUgb24gcGFnZSA2LAomIzQzOyAqIGNoYW5uZWwgNCBvbiBwYWdlIDcuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2RlZmluZSBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeCkJCQkJCVwKQEAgLTIwMiw2ICYjNDM7MjE5LDI0IEBACiAJKChfaWR4KSAmbHQ7IDQgPyBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfNCkKICNkZWZpbmUgWkxfRFBMTF9ERl9PRkZTRVRfVU5LTk9XTglTNjRfTUlOCiAKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBXzAzKF9pZHgpCQkJCQlcCiYjNDM7CVpMX1JFR19JRFgoX2lkeCwgNiwgMHgwQywgNiwgNCwgMHgyMCkKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBXzQJCQlaTF9SRUcoNywgMHgwQywgNikKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBKF9pZHgpCQkJCQlcCiYjNDM7CSgoX2lkeCkgJmx0OyA0ID8gWkxfUkVHX0RQTExfVElFX0RBVEFfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9USUVfREFUQV80KQomIzQzOwomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQ18wMyhfaWR4KQkJCQkJXAomIzQzOwlaTF9SRUdfSURYKF9pZHgsIDYsIDB4MTIsIDYsIDQsIDB4MjApCiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzQJCQlaTF9SRUcoNywgMHgxMiwgNikKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUMoX2lkeCkJCQkJCVwKJiM0MzsJKChfaWR4KSAmbHQ7IDQgPyBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVE9EX1NFQ180KQomIzQzOwomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TXzAzKF9pZHgpCQkJCQlcCiYjNDM7CVpMX1JFR19JRFgoX2lkeCwgNiwgMHgxOCwgNCwgNCwgMHgyMCkKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU180CQkJWkxfUkVHKDcsIDB4MTgsIDQpCiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlMoX2lkeCkJCQkJCVwKJiM0MzsJKChfaWR4KSAmbHQ7IDQgPyBaTF9SRUdfRFBMTF9UT0RfTlNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfTlNfNCkKJiM0MzsKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogUmVnaXN0ZXIgUGFnZSA5LCBTeW50aCBhbmQgT3V0cHV0CiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0yMjEsNiAmIzQzOzI1NiwyMyBAQAogI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9FTgkJCUJJVCgwKQogI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9TWU5USF9TRUwJCUdFTk1BU0soNiwgNCkKIAomIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTSwkJWkxfUkVHKDksIDB4MzYsIDIpCiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTAkJWkxfUkVHKDksIDB4MzgsIDEpCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX0RQTEwJCUdFTk1BU0soNiwgNCkKJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVAJQklUKDMpCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QCQlHRU5NQVNLKDEsIDApCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX05PTkUJMAomIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9SRVNFVAkxCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1JFQUQJMgomIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURQkzCiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTlVNQkVSCQlaTF9SRUcoOSwgMHgzOSwgMSkKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLCQlaTF9SRUcoOSwgMHgzYSwgMikKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBCQlaTF9SRUcoOSwgMHgzYywgNCkKJiM0MzsKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBSZWdpc3RlciBQYWdlIDEwLCBSZWYgTWFpbGJveAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODEwOQoJCQkJCQkJb3V0cHV0OiAyMDgKCQkJCQkJCXRob3VnaHRzOiAxNTg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IFBUUCBDbG9jayBTdXBwb3J0IGZvciBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0JiMzOTtzIGFkZGluZyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIsIHNwZWNpZmljYWxseSB0aGUgYGRyaXZlcnMvZHBsbC96bDMwNzN4L2AgY29kZS4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBpbXBsZW1lbnRpbmcgZnVuY3Rpb25zIHRvIHJlYWQsIHdyaXRlLCBhbmQgYWRqdXN0IHRoZSBUaW1lIG9mIERheSAoVG9EKSByZWdpc3RlcnMsIGFkanVzdCB0aGUgZnJlcXVlbmN5IGFuZCBwaGFzZSwgYW5kIHJlZ2lzdGVyaW5nIGEgUFRQIGNsb2NrIGRldmljZSBmb3IgZWFjaCBEUExMIGNoYW5uZWwuIE15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgY29kZSBpbnRyb2R1Y2VzIGFueSByaXNrcyBoZXJlLgoKRmlyc3QsIEkgc2VlIHRoZSBgcHRwX2Nsb2NrX2luZm9gIHN0cnVjdCBpcyBkZWZpbmVkIGFuZCBpbml0aWFsaXplZCBzdGF0aWNhbGx5LiBUaGF0JiMzOTtzIGdvb2QuIEluIGB6bDMwNzN4X2RwbGxfYWxsb2NgLCBpdCBpcyBjb3BpZWQgdG8gYHpsZHBsbC0mZ3Q7cHRwX2luZm9gLiBDcnVjaWFsbHksIGB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm9gIGlzIGBzdGF0aWMgY29uc3RgLCBzbyBhbnkgdW5pbml0aWFsaXplZCBmaWVsZHMgZ2V0IHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIGNvbXBpbGVyLiBUaGUgYG5hbWVgIGZpZWxkIG9mIHRoaXMgc3RydWN0IGlzIHBvcHVsYXRlZCB1c2luZyBgc25wcmludGZgIGluIGB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyYC4gVGhpcyBtZWFucyB0aGUgYmVnaW5uaW5nIG9mIGBuYW1lYCBpcyBvdmVyd3JpdHRlbiwgYnV0IHRoZSByZXN0IG9mIGBuYW1lYCB0aGF0JiMzOTtzIG5vdCBvdmVyd3JpdHRlbiBpcyB6ZXJvLiBTbywgdGhpcyBsb29rcyBzYWZlLgoKVGhlIGB6bDMwNzN4X2NoYW5fdG9kX3JlYWRgIGZ1bmN0aW9uIGxvb2tzIHN0cmFpZ2h0Zm9yd2FyZC4gSXQgcmVhZHMgaGFyZHdhcmUgcmVnaXN0ZXJzIHRvIHBvcHVsYXRlIHRoZSBgdHMtJmd0O3R2X3NlY2AgYW5kIGB0cy0mZ3Q7dHZfbnNlY2AgZmllbGRzIG9mIGEgYHN0cnVjdCB0aW1lc3BlYzY0YC4gQm90aCB2YWx1ZXMgYXJlIGluaXRpYWxpemVkIGJlZm9yZSByZXR1cm5pbmcuCgpUaGUgYHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwYCB1c2VzIGB1MTYgc3ludGhfbWFza1taTDMwNzNYX05VTV9TWU5USFNdID0ge307YCB3aGljaCBpcyB6ZXJvIGluaXRpYWxpemVkLgoKTmV4dCwgSSYjMzk7bSBjaGVja2luZyBpZiB0aGVyZSYjMzk7cyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcGFzc2VkIHRvIHVzZXIgc3BhY2UuIFRoZSBgcHRwX2Nsb2NrX2luZm9gIHN0cnVjdCAqaXMqIHBhc3NlZCB0byBgcHRwX2Nsb2NrX3JlZ2lzdGVyYC4gSSBjb25zaWRlcmVkIGBuYW1lYCwgYnV0IGFzIEkgc2FpZCwgdGhlIHN0YXRpYyBgcHRwX2Nsb2NrX2luZm9gIHN0cnVjdCBpcyB6ZXJvIGluaXRpYWxpemVkLCBhbmQgdGhlIGBzbnByaW50ZmAgZW5zdXJlcyBhdCBsZWFzdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBgbmFtZWAgaXMgdmFsaWQgYW5kIG51bGwgdGVybWluYXRlZC4gVGhlIHJlc3QgcmVtYWlucyB6ZXJvIGFuZCBpcyBoYXJtbGVzcy4KCkxvb2tpbmcgYXQgYHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0YCwgYHRzX25leHRgIGFuZCBgdHNfY3VyYCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgd2l0aGluIHRoZSBmdW5jdGlvbiBieSBgemwzMDczeF9jaGFuX3RvZF9yZWFkYC4KCkZvciBgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lYCwgYHRzYCBpcyBhbHNvIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggYHR2X3NlY2AgYW5kIGB0dl9uc2VjYC4gTm8gaXNzdWVzIHRoZXJlLgoKVGhpcyBwYXRjaCBwcmltYXJpbHkgZGVhbHMgd2l0aCBQVFAgY2xvY2sgcmVnaXN0cmF0aW9uIGFuZCBsb3ctbGV2ZWwgaGFyZHdhcmUgaW50ZXJhY3Rpb25zLiBJdCYjMzk7cyBoYW5kbGluZyByZWFkcyBhbmQgd3JpdGVzIHRvIGhhcmR3YXJlIHJlZ2lzdGVycyBhbmQgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgUFRQIHN1YnN5c3RlbS4gSSYjMzk7bSBub3Qgc2VlaW5nIGFueSBjb21wbGV4IHN0cnVjdHVyZXMgb3IgZGF0YSBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2Ugd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy4gVGhlcmUgYWxzbyBkb2VzbiYjMzk7dCBzZWVtIHRvIGJlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGJlaW5nIHVzZWQgaW4gY29udHJvbCBmbG93LiBHaXZlbiB0aGlzLCBJIGRvbiYjMzk7dCBiZWxpZXZlIEtNU0FOIGlzIG5lY2Vzc2FyeSBoZXJlLiBLQVNBTiBpcyBhbHJlYWR5IHN1ZmZpY2llbnQgZm9yIG1lbW9yeSBzYWZldHkgY29uY2VybnMgbGlrZSBvdXQtb2YtYm91bmRzIGFjY2VzcyBhbmQgdXNlLWFmdGVyLWZyZWUsIGlmIHByZXNlbnQuCgpPbmUgbGFzdCB0aGluZywgdGhlIGBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzYCBwYXJhbWV0ZXIuIEluIGB6bDMwNzN4X2NoYW5fdG9kX3JlYWRgLCB0aGlzIGlzIHBhc3NlZCB0byBgcHRwX3JlYWRfc3lzdGVtX3ByZXRzYCBhbmQgYHB0cF9yZWFkX3N5c3RlbV9wb3N0dHNgLiBUaGlzIHZhcmlhYmxlIGlzIHN1cHBsaWVkIGJ5IHRoZSBQVFAgY29yZSBpdHNlbGYsIGFuZCB0aG9zZSBmdW5jdGlvbnMgYXJlIHN0YW5kYXJkIGFuZCB3aWxsIG9ubHkgd3JpdGUgdG8gc3RzIGlmIHN0cyBpcyBub3QgTlVMTC4gVGhlIFBUUCBjb3JlIGhhbmRsZXMgaXRzIGluaXRpYWxpemF0aW9uLiBTbyBubyBwcm9ibGVtLgoKVGhlcmVmb3JlLCBteSBhc3Nlc3NtZW50IGlzIHRoYXQgS01TQU4gaXMgbm90IG5lZWRlZCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIFBUUCBjbG9jayBzdXBwb3J0IGZvciB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIuIEl0IGFkZHMgZnVuY3Rpb25zIHRvIHJlYWQvd3JpdGUgVGltZSBvZiBEYXkgKFRvRCkgcmVnaXN0ZXJzLCBhZGp1c3QgZnJlcXVlbmN5LCBhbmQgYWRqdXN0IHBoYXNlLCBhcyB3ZWxsIGFzIHJlZ2lzdGVyaW5nIGEgUFRQIGNsb2NrIGRldmljZS4gQWxsIGxvY2FsIHZhcmlhYmxlcywgc3VjaCBhcyBgc3RydWN0IHRpbWVzcGVjNjRgIGFuZCBgc3ludGhfbWFza2AsIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgYHB0cF9jbG9ja19pbmZvYCBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQgZnJvbSBhIHN0YXRpYyBjb25zdCB0ZW1wbGF0ZSwgZW5zdXJpbmcgYWxsIGZpZWxkcyAoaW5jbHVkaW5nIHBhZGRpbmcgYW5kIHRoZSBgbmFtZWAgYnVmZmVyKSBhcmUgemVyby1pbml0aWFsaXplZCBiZWZvcmUgYHNucHJpbnRmYCBpcyBjYWxsZWQuIFRoZXJlIGFyZSBubyBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIFBUUCBjbG9jayBzdXBwb3J0IGZvciB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIuIEl0IGFkZHMgZnVuY3Rpb25zIHRvIHJlYWQvd3JpdGUgVGltZSBvZiBEYXkgKFRvRCkgcmVnaXN0ZXJzLCBhZGp1c3QgZnJlcXVlbmN5LCBhbmQgYWRqdXN0IHBoYXNlLCBhcyB3ZWxsIGFzIHJlZ2lzdGVyaW5nIGEgUFRQIGNsb2NrIGRldmljZS4gQWxsIGxvY2FsIHZhcmlhYmxlcywgc3VjaCBhcyBgc3RydWN0IHRpbWVzcGVjNjRgIGFuZCBgc3ludGhfbWFza2AsIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgYHB0cF9jbG9ja19pbmZvYCBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQgZnJvbSBhIHN0YXRpYyBjb25zdCB0ZW1wbGF0ZSwgZW5zdXJpbmcgYWxsIGZpZWxkcyAoaW5jbHVkaW5nIHBhZGRpbmcgYW5kIHRoZSBgbmFtZWAgYnVmZmVyKSBhcmUgemVyby1pbml0aWFsaXplZCBiZWZvcmUgYHNucHJpbnRmYCBpcyBjYWxsZWQuIFRoZXJlIGFyZSBubyBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDExOjUyOjQ3Ljg2MjMwNDQzMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzk4MDQzNzgzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaTDMwNzNYX0kyQ1wiLFxuICAgIFwiWkwzMDczWF9TUElcIixcbiAgICBcIlBUUF8xNTg4X0NMT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0XCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fdG9kX3JlYWRcIixcbiAgICBcInpsMzA3M3hfY2hhbl90b2Rfd3JpdGVcIixcbiAgICBcInpsMzA3M3hfY2hhbl90b2RfYWRqdXN0XCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldFwiLFxuICAgIFwiemwzMDczeF9jaGFuX3RpZV93cml0ZVwiLFxuICAgIFwiemwzMDczeF9jaGFuX3BoYXNlX3N0ZXBcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgUFRQIGNsb2NrIHN1cHBvcnQgZm9yIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlci4gSXQgYWRkcyBmdW5jdGlvbnMgdG8gcmVhZC93cml0ZSBUaW1lIG9mIERheSAoVG9EKSByZWdpc3RlcnMsIGFkanVzdCBmcmVxdWVuY3ksIGFuZCBhZGp1c3QgcGhhc2UsIGFzIHdlbGwgYXMgcmVnaXN0ZXJpbmcgYSBQVFAgY2xvY2sgZGV2aWNlLiBBbGwgbG9jYWwgdmFyaWFibGVzLCBzdWNoIGFzIGBzdHJ1Y3QgdGltZXNwZWM2NGAgYW5kIGBzeW50aF9tYXNrYCwgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBgcHRwX2Nsb2NrX2luZm9gIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCBmcm9tIGEgc3RhdGljIGNvbnN0IHRlbXBsYXRlLCBlbnN1cmluZyBhbGwgZmllbGRzIChpbmNsdWRpbmcgcGFkZGluZyBhbmQgdGhlIGBuYW1lYCBidWZmZXIpIGFyZSB6ZXJvLWluaXRpYWxpemVkIGJlZm9yZSBgc25wcmludGZgIGlzIGNhbGxlZC4gVGhlcmUgYXJlIG5vIGtlcm5lbC10by11c2VyIGluZm8tbGVha3Mgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2VzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcy4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciAoemwzMDczeCkuIFRoZSBkcml2ZXIgY2FuIGJlIGluc3RhbnRpYXRlZCB2aWEgSTJDIG9yIFNQSSwgYW5kIHRoZSBQVFAgY2xvY2sgaW50ZXJmYWNlIGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlIHZpYSBgL2Rldi9wdHBYYC4gU3l6a2FsbGVyIGNhbiBmdXp6IHRoaXMgZnVuY3Rpb25hbGl0eSB1c2luZyBJMkMvU1BJIGVtdWxhdGlvbiBhbmQgUFRQIGlvY3Rscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTE6NTI6NDcuODYyMzA4NDgyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzA0MTEwMTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNTkxZGVjODNhODVkNzA3NDU1MjYwZTkxOGU3NDEyNTdlNDVmOTI5MVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyA3IDExOjUyOjQ2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWcgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXFxuaW5kZXggNWJiY2ExNDAwNTgxMy4uZGExNzMxYWNlMTVmMCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xcbkBAIC0yLDcgKzIsNyBAQFxcbiBcXG4gY29uZmlnIFpMMzA3M1hcXG4gXFx0dHJpc3RhdGUgXFxcIk1pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXNcXFwiIGlmIENPTVBJTEVfVEVTVFxcbi1cXHRkZXBlbmRzIG9uIE5FVFxcbitcXHRkZXBlbmRzIG9uIE5FVCBcXHUwMDI2XFx1MDAyNiBQVFBfMTU4OF9DTE9DS1xcbiBcXHRzZWxlY3QgRFBMTFxcbiBcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG4gXFx0c2VsZWN0IFJFR01BUFxcbkBAIC0xNiw3ICsxNiw3IEBAIGNvbmZpZyBaTDMwNzNYXFxuIFxcbiBjb25maWcgWkwzMDczWF9JMkNcXG4gXFx0dHJpc3RhdGUgXFxcIkkyQyBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcXFwiXFxuLVxcdGRlcGVuZHMgb24gSTJDIFxcdTAwMjZcXHUwMDI2IE5FVFxcbitcXHRkZXBlbmRzIG9uIEkyQyBcXHUwMDI2XFx1MDAyNiBORVQgXFx1MDAyNlxcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tcXG4gXFx0c2VsZWN0IFJFR01BUF9JMkNcXG4gXFx0c2VsZWN0IFpMMzA3M1hcXG4gXFx0aGVscFxcbkBAIC0yOCw3ICsyOCw3IEBAIGNvbmZpZyBaTDMwNzNYX0kyQ1xcbiBcXG4gY29uZmlnIFpMMzA3M1hfU1BJXFxuIFxcdHRyaXN0YXRlIFxcXCJTUEkgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzXFxcIlxcbi1cXHRkZXBlbmRzIG9uIE5FVCBcXHUwMDI2XFx1MDAyNiBTUElcXG4rXFx0ZGVwZW5kcyBvbiBORVQgXFx1MDAyNlxcdTAwMjYgU1BJIFxcdTAwMjZcXHUwMDI2IFBUUF8xNTg4X0NMT0NLXFxuIFxcdHNlbGVjdCBSRUdNQVBfU1BJXFxuIFxcdHNlbGVjdCBaTDMwNzNYXFxuIFxcdGhlbHBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXFxuaW5kZXggNGVjMmNmNTNkYWQ0Ni4uYWY2Y2E0M2MzMzU5MCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNcXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNcXG5AQCAtMyw2ICszLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NsZWFudXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlbGF5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZXZfcHJpbnRrLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdHJpbmcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuIFxcbkBAIC0xNjIsOCArMTYzLDggQEAgaW50IHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpXFxuICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmVcXG4gICogQGluZGV4OiBEUExMIGNoYW5uZWwgaW5kZXggdG8gZmV0Y2ggc3RhdGUgZm9yXFxuICAqXFxuLSAqIFJlYWRzIHRoZSBtb2RlX3JlZnNlbCByZWdpc3RlciBhbmQgcmVmZXJlbmNlIHByaW9yaXR5IHJlZ2lzdGVycyBmb3JcXG4tICogdGhlIGdpdmVuIERQTEwgY2hhbm5lbCBhbmQgc3RvcmVzIHRoZSByYXcgdmFsdWVzIGZvciBsYXRlciB1c2UuXFxuKyAqIFJlYWRzIHRoZSBtb2RlX3JlZnNlbCwgc3RhdHVzIGFuZCByZWZlcmVuY2UgcHJpb3JpdHkgcmVnaXN0ZXJzIGZvclxcbisgKiB0aGUgZ2l2ZW4gRFBMTCBjaGFubmVsIGFuZCBzdG9yZXMgdGhlIHZhbHVlcyBmb3IgbGF0ZXIgdXNlLlxcbiAgKlxcbiAgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4gICovXFxuQEAgLTIzNCw2ICsyMzUsMzIyIEBAIGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKnpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldixcXG4gXFx0cmV0dXJuIFxcdTAwMjZ6bGRldi1cXHUwMDNlY2hhbltpbmRleF07XFxuIH1cXG4gXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQgLSB3YWl0IGZvciBUb0Qgc2VtYXBob3JlIHRvIGNsZWFyXFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxcbisgKlxcbisgKiBQb2xscyB0aGUgVG9EIGNvbnRyb2wgcmVnaXN0ZXIgdW50aWwgdGhlIHNlbWFwaG9yZSBiaXQgaXMgY2xlYXJlZCxcXG4rICogaW5kaWNhdGluZyB0aGUgZGV2aWNlIGhhcyBjb21wbGV0ZWQgdGhlIHByZXZpb3VzIFRvRCBvcGVyYXRpb24uXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRUJVU1kgaWYgc2VtYXBob3JlIG5vdCBjbGVhcmVkLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4raW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgdGltZW91dDtcXG4rXFx0dTggdG9kX2N0cmw7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdHJjID0gemwzMDczeF9yZWFkX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksIFxcdTAwMjZ0b2RfY3RybCk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0c3dpdGNoIChGSUVMRF9HRVQoWkxfRFBMTF9UT0RfQ1RSTF9DTUQsIHRvZF9jdHJsKSkge1xcbitcXHRjYXNlIDA6XFxuK1xcdFxcdC8qIE5vIG9wZXJhdGlvbiBwZW5kaW5nIChwb3dlci1vbi9yZXNldCBkZWZhdWx0KSAqL1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0Y2FzZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWjpcXG4rXFx0XFx0dGltZW91dCA9IFpMX1BPTExfVE9EX1dSX1RJTUVPVVRfVVM7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX0NVUlJFTlQ6XFxuK1xcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFo6XFxuK1xcdFxcdHRpbWVvdXQgPSBaTF9QT0xMX1RPRF9SRF9USU1FT1VUX1VTO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0LyogRlcgbmV2ZXIgd3JpdGVzIGNtZCBiaXRzOyBvbmx5IHRoZSBkcml2ZXIgc2V0cyB0aGVtICovXFxuK1xcdFxcdFdBUk5fT04oMSk7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLFxcbitcXHRcXHRcXHRcXHQgIFpMX0RQTExfVE9EX0NUUkxfU0VNLCB0aW1lb3V0KTtcXG4rXFxuK1xcdHJldHVybiByYyA9PSAtRVRJTUVET1VUID8gLUVCVVNZIDogcmM7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwgLSBpc3N1ZSBUb0QgY29tbWFuZFxcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4rICogQGNtZDogVG9EIGNvbW1hbmQgdG8gZXhlY3V0ZVxcbisgKlxcbisgKiBXcml0ZXMgdGhlIHNlbWFwaG9yZSBhbmQgY29tbWFuZCB0byBkcGxsX3RvZF9jdHJsLiBUaGUgY2FsbGVyIG11c3RcXG4rICogZW5zdXJlIHRoZSBkZXZpY2UgaXMgcmVhZHkgKHNlbWFwaG9yZSBjbGVhcikgYmVmb3JlIGNhbGxpbmcgYW5kXFxuKyAqIG11c3Qgd2FpdCBmb3IgY29tcGxldGlvbiBpZiBuZWVkZWQuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4rc3RhdGljIGludCB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHU4IGNtZClcXG4re1xcbitcXHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLFxcbitcXHRcXHRcXHRcXHRaTF9EUExMX1RPRF9DVFJMX1NFTSB8IGNtZCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5fdG9kX3JlYWQgLSByZWFkIFRvRCByZWdpc3RlcnMgYWZ0ZXIgaXNzdWluZyBhIGNvbW1hbmRcXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuKyAqIEBuZXh0X2h6OiBpZiB0cnVlLCByZWFkIHByZWRpY3RlZCBUb0QgYXQgbmV4dCAxIEh6OyBvdGhlcndpc2UgcmVhZCBjdXJyZW50XFxuKyAqIEB0czogdGltZXNwZWMgdG8gc3RvcmUgdGhlIHJlc3VsdFxcbisgKiBAc3RzOiBvcHRpb25hbCBzeXN0ZW0gdGltZXN0YW1wIHBhaXIgZm9yIGNyb3NzLXRpbWVzdGFtcGluZ1xcbisgKlxcbisgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuK1xcdFxcdFxcdCAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXFxuK1xcdFxcdFxcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpXFxuK3tcXG4rXFx0dTMyIG5zZWM7XFxuK1xcdHU2NCBzZWM7XFxuK1xcdHU4IGNtZDtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0aWYgKG5leHRfaHopXFxuK1xcdFxcdGNtZCA9IFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaO1xcbitcXHRlbHNlXFxuK1xcdFxcdGNtZCA9IFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX0NVUlJFTlQ7XFxuK1xcbitcXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVG9EIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xcbitcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHB0cF9yZWFkX3N5c3RlbV9wcmV0cyhzdHMpO1xcbitcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfY3RybCh6bGRldiwgY2gsIGNtZCk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcdHB0cF9yZWFkX3N5c3RlbV9wb3N0dHMoc3RzKTtcXG4rXFxuK1xcdHJjID0gemwzMDczeF9yZWFkX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIFxcdTAwMjZzZWMpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdC8qIEhXIG5hbm9zZWNvbmRzIGFyZSBhbHdheXMgaW4gWzAsIE5TRUNfUEVSX1NFQykgcmFuZ2UgKi9cXG4rXFx0cmMgPSB6bDMwNzN4X3JlYWRfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCBcXHUwMDI2bnNlYyk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0dHMtXFx1MDAzZXR2X3NlYyA9IHNlYztcXG4rXFx0dHMtXFx1MDAzZXR2X25zZWMgPSBuc2VjO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlIC0gd3JpdGUgVG9EIHJlZ2lzdGVycyBhbmQgdHJpZ2dlciAxIEh6IHVwZGF0ZVxcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4rICogQHRzOiB0aW1lIHRvIHNldFxcbisgKlxcbisgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbitcXHRcXHRcXHQgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cylcXG4re1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVG9EIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xcbitcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9TRUMoY2gpLCB0cy50dl9zZWMpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19EUExMX1RPRF9OUyhjaCksIHRzLnR2X25zZWMpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLFxcbitcXHRcXHRcXHRcXHQgICAgIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0IC0gYXRvbWljIFRvRCByZWFkLW1vZGlmeS13cml0ZSB3aXRoIHJvbGxvdmVyIGd1YXJkXFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxcbisgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCB0byBhcHBseVxcbisgKlxcbisgKiBSZWFkcyB0aGUgbmV4dC1IeiBUb0QgYW5kIGN1cnJlbnQgVG9ELCB0aGVuIGNoZWNrcyB3aGV0aGVyIGVub3VnaCB0aW1lXFxuKyAqIHJlbWFpbnMgYmVmb3JlIHRoZSBuZXh0IDEgSHogcm9sbG92ZXIgdG8gc2FmZWx5IGNvbXBsZXRlIHRoZSB3cml0ZS5cXG4rICogUmUtcmVhZHMgaWYgdGhlIDEgSHogdGljayBjcm9zc2VkIGJldHdlZW4gdGhlIHR3byByZWFkcyBvciBpZiBsZXNzXFxuKyAqIHRoYW4gMjAgbXMgcmVtYWlucyBiZWZvcmUgdGhlIG5leHQgcm9sbG92ZXIuIEFwcGxpZXMgQGRlbHRhIGFuZCB3cml0ZXNcXG4rICogdGhlIHJlc3VsdCBiYWNrLlxcbisgKlxcbisgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuKyNkZWZpbmUgWkxfVE9EX01BWF9SRVRSSUVTXFx0MjBcXG4raW50IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbitcXHRcXHRcXHQgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpXFxuK3tcXG4rXFx0c3RhdGljIGNvbnN0IGxvbmcgdGhyZXNob2xkX25zID0gMjAgKiBOU0VDX1BFUl9NU0VDO1xcbitcXHRzdHJ1Y3QgdGltZXNwZWM2NCB0c19uZXh0LCB0c19jdXIsIGRpZmY7XFxuK1xcdGludCByYywgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBaTF9UT0RfTUFYX1JFVFJJRVM7IGkrKykge1xcbitcXHRcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRldiwgY2gsIHRydWUsIFxcdTAwMjZ0c19uZXh0LCBOVUxMKTtcXG4rXFx0XFx0aWYgKHJjKVxcbitcXHRcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRldiwgY2gsIGZhbHNlLCBcXHUwMDI2dHNfY3VyLCBOVUxMKTtcXG4rXFx0XFx0aWYgKHJjKVxcbitcXHRcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRcXHQvKiBFbnN1cmUgdGhlIDEgSHogdGljayBkaWQgbm90IGNyb3NzIGJldHdlZW4gdGhlIHR3byByZWFkc1xcbitcXHRcXHQgKiBhbmQgdGhhdCBlbm91Z2ggbWFyZ2luIHJlbWFpbnMgdG8gY29tcGxldGUgdGhlIHdyaXRlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0ZGlmZiA9IHRpbWVzcGVjNjRfc3ViKHRzX25leHQsIHRzX2N1cik7XFxuK1xcdFxcdGlmIChkaWZmLnR2X3NlYyBcXHUwMDNlIDAgfHxcXG4rXFx0XFx0ICAgICghZGlmZi50dl9zZWMgXFx1MDAyNlxcdTAwMjYgZGlmZi50dl9uc2VjIFxcdTAwM2U9IHRocmVzaG9sZF9ucykpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcdGlmIChpID09IFpMX1RPRF9NQVhfUkVUUklFUykge1xcbitcXHRcXHRkZXZfd2Fybih6bGRldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHQgXFxcIkRQTEwldSBUb0QgYWRqdXN0IGZhaWxlZCB0byBnZXQgc3RhYmxlIG1hcmdpblxcXFxuXFxcIixcXG4rXFx0XFx0XFx0IGNoKTtcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFx0fVxcbitcXG4rXFx0LyogQXBwbHkgZGVsdGEgdG8gdGhlIG5leHQtSHogVG9EICovXFxuK1xcdHRzX25leHQgPSB0aW1lc3BlYzY0X2FkZCh0c19uZXh0LCBkZWx0YSk7XFxuK1xcdGlmICghdGltZXNwZWM2NF92YWxpZChcXHUwMDI2dHNfbmV4dCkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkZXYsIGNoLCB0c19uZXh0KTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0IC0gd3JpdGUgZGVsdGEgZnJlcXVlbmN5IG9mZnNldCB0byBoYXJkd2FyZVxcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4rICogQG9mZnNldDogZnJlcXVlbmN5IG9mZnNldCBpbiAyXi00OCBzdGVwc1xcbisgKlxcbisgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBob2xkIHRoZSBwZXItRFBMTCBsb2NrLlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldClcXG4re1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9PRkZTRVQoY2gpLCBvZmZzZXQpO1xcbitcXHRpZiAoIXJjKVxcbitcXHRcXHR6bGRldi1cXHUwMDNlY2hhbltjaF0uZGZfb2Zmc2V0ID0gb2Zmc2V0O1xcbitcXG4rXFx0cmV0dXJuIHJjO1xcbit9XFxuK1xcbisvKipcXG4rICogemwzMDczeF9jaGFuX3RpZV93cml0ZSAtIGFkanVzdCBEUExMIHBoYXNlIHVzaW5nIFRJRSB3cml0ZVxcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4rICogQGRlbHRhX25zOiBwaGFzZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzIChtdXN0IGJlIHdpdGhpbiArLTFzKVxcbisgKlxcbisgKiBDb252ZXJ0cyBuYW5vc2Vjb25kcyB0byBUSUUgdW5pdHMgKDAuMDEgcHMpIGFuZCB3cml0ZXMgVElFIGRhdGFcXG4rICogdG8gdGhlIHNwZWNpZmllZCBjaGFubmVsLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK2ludCB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgZGVsdGFfbnMpXFxuK3tcXG4rXFx0czY0IHRpZV9kYXRhO1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRpZiAoV0FSTl9PTihkZWx0YV9ucyBcXHUwMDNjPSAtTlNFQ19QRVJfU0VDIHx8IGRlbHRhX25zIFxcdTAwM2U9IE5TRUNfUEVSX1NFQykpXFxuK1xcdFxcdHJldHVybiAtRVJBTkdFO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZ6bGRldi1cXHUwMDNldGllX2xvY2spO1xcbitcXG4rXFx0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRJRSBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cXG4rXFx0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsXFxuK1xcdFxcdFxcdFxcdCAgWkxfRFBMTF9USUVfQ1RSTF9PUCxcXG4rXFx0XFx0XFx0XFx0ICBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHQvKiBDb252ZXJ0IG5zIHRvIFRJRSB1bml0cyAoMC4wMSBwcyA9IDEwXi0xNCBzKSAqL1xcbitcXHR0aWVfZGF0YSA9IGRlbHRhX25zICogMTAwMDAwTEw7XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfREFUQShjaCksIHRpZV9kYXRhKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0ssIEJJVChjaCkpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTCxcXG4rXFx0XFx0XFx0XFx0WkxfRFBMTF9USUVfQ1RSTF9PUF9XUik7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCAtIGV4ZWN1dGUgb25lIG91dHB1dCBwaGFzZSBzdGVwIG9wZXJhdGlvblxcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4rICogQG91dF9tYXNrOiBiaXRtYXNrIG9mIG91dHB1dHMgdG8gc3RlcFxcbisgKiBAc3RlcF9jeWNsZXM6IHBoYXNlIHN0ZXAgaW4gc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzXFxuKyAqIEB0b2Rfc3RlcDogYWxzbyBzdGVwIHRoZSBUb0QgY291bnRlclxcbisgKlxcbisgKiBBbGwgbWFza2VkIG91dHB1dHMgbXVzdCB1c2Ugc3ludGhlc2l6ZXJzIG9mIHRoZSBzYW1lIGZyZXF1ZW5jeSBzaW5jZVxcbisgKiB0aGUgc3RlcCB2YWx1ZSBpcyBpbiBzeW50aGVzaXplciBjbG9jayBjeWNsZXMuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4raW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbitcXHRcXHRcXHQgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsXFxuK1xcdFxcdFxcdCAgICBib29sIHRvZF9zdGVwKVxcbit7XFxuK1xcdHU4IGN0cmw7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2emxkZXYtXFx1MDAzZXBoYXNlX3N0ZXBfbG9jayk7XFxuK1xcbitcXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgcGhhc2Ugc3RlcCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cXG4rXFx0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwsXFxuK1xcdFxcdFxcdFxcdCAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCxcXG4rXFx0XFx0XFx0XFx0ICBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VUyk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0RBVEEsXFxuK1xcdFxcdFxcdCAgICAgICBzdGVwX2N5Y2xlcyk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3dyaXRlX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX01BU0ssIG91dF9tYXNrKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9OVU1CRVIsIDEpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdGN0cmwgPSBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfRFBMTCwgY2gpIHxcXG4rXFx0ICAgICAgIEZJRUxEX1BSRVAoWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCxcXG4rXFx0XFx0XFx0ICBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1dSSVRFKTtcXG4rXFx0aWYgKHRvZF9zdGVwKVxcbitcXHRcXHRjdHJsIHw9IFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVA7XFxuK1xcbitcXHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwsIGN0cmwpO1xcbit9XFxuK1xcbiAvKipcXG4gICogemwzMDczeF9jaGFuX3N0YXRlX3NldCAtIGNvbW1pdCBEUExMIGNoYW5uZWwgc3RhdGUgY2hhbmdlcyB0byBoYXJkd2FyZVxcbiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaFxcbmluZGV4IGRjOWM2ZDk1YmRlZTcuLjk5YzNiNzA4OGY2NzggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXFxuQEAgLTUsMTAgKzUsMTIgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RkZGVmLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC90aW1lNjQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwicmVncy5oXFxcIlxcbiBcXG4rc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wO1xcbiBzdHJ1Y3QgemwzMDczeF9kZXY7XFxuIFxcbiAvKipcXG5AQCAtNDIsNiArNDQsMjEgQEAgaW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgsXFxuIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfdXBkYXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTtcXG4gaW50IHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpO1xcbiBcXG4raW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCk7XFxuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuK1xcdFxcdFxcdCAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXFxuK1xcdFxcdFxcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpO1xcbitpbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG4rXFx0XFx0XFx0ICAgc3RydWN0IHRpbWVzcGVjNjQgdHMpO1xcbitpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YSk7XFxuK2ludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG4rXFx0XFx0XFx0ICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLCBib29sIHRvZF9zdGVwKTtcXG4rXFxuK2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldCk7XFxuK1xcbitpbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKTtcXG4rXFxuIC8qKlxcbiAgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X2dldCAtIGdldCBjYWNoZWQgZGZfb2Zmc2V0IHZzIHRyYWNrZWQgcmVmZXJlbmNlXFxuICAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcXG5AQCAtMjAwLDYgKzIxNywyMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgemwzMDczeF9jaGFuX21vZGVfaXNfcmVmbG9jayhjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxcbiBcXHRyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfZ2V0KGNoYW4pID09IFpMX0RQTExfTU9ERV9SRUZTRUxfTU9ERV9SRUZMT0NLO1xcbiB9XFxuIFxcbisvKipcXG4rICogemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllIC0gY2hlY2sgaWYgY2hhbm5lbCBtb2RlIHN1cHBvcnRzIFRJRSB3cml0ZVxcbisgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXFxuKyAqXFxuKyAqIFRJRSB3cml0ZSBpcyBzdXBwb3J0ZWQgaW4gQVVUTyBhbmQgUkVGTE9DSyBtb2RlcyByZWdhcmRsZXNzIG9mIGxvY2sgc3RhdGUuXFxuKyAqXFxuKyAqIFJldHVybjogdHJ1ZSBpZiBUSUUgd3JpdGUgaXMgc3VwcG9ydGVkLCBmYWxzZSBvdGhlcndpc2VcXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgYm9vbFxcbit6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcXG4re1xcbitcXHRyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfaXNfYXV0byhjaGFuKSB8fFxcbitcXHRcXHR6bDMwNzN4X2NoYW5fbW9kZV9pc19yZWZsb2NrKGNoYW4pO1xcbit9XFxuK1xcbiAvKipcXG4gICogemwzMDczeF9jaGFuX2lzX2hvX3JlYWR5IC0gY2hlY2sgaWYgaG9sZG92ZXIgaXMgcmVhZHlcXG4gICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcXG5pbmRleCA1YjJkNzdmMmMyMjg4Li4yMzBkZjA4ZTI3Y2QxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1xcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1xcbkBAIC0zMjIsNyArMzIyLDcgQEAgaW50IHpsMzA3M3hfd3JpdGVfdTQ4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsIHU2NCB2YWwpXFxuIGludCB6bDMwNzN4X3BvbGxfemVyb191OChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLFxcbiBcXHRcXHRcXHQgdTggbWFzaywgdW5zaWduZWQgaW50IHRpbWVvdXRfdXMpXFxuIHtcXG4tI2RlZmluZSBaTF9QT0xMX1NMRUVQX1VTIDEwXFxuK1xcdHVuc2lnbmVkIGludCBzbGVlcF91cyA9IHRpbWVvdXRfdXMgLyA1MDtcXG4gXFx0dW5zaWduZWQgaW50IHZhbDtcXG4gXFxuIFxcdC8qIENoZWNrIHRoZSByZWdpc3RlciBpcyA4Yml0ICovXFxuQEAgLTMzNiw3ICszMzYsNyBAQCBpbnQgemwzMDczeF9wb2xsX3plcm9fdTgoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IHJlZyxcXG4gXFx0cmVnID0gWkxfUkVHX0FERFIocmVnKSArIFpMX1JBTkdFX09GRlNFVDtcXG4gXFxuIFxcdHJldHVybiByZWdtYXBfcmVhZF9wb2xsX3RpbWVvdXQoemxkZXYtXFx1MDAzZXJlZ21hcCwgcmVnLCB2YWwsICEodmFsIFxcdTAwMjYgbWFzayksXFxuLVxcdFxcdFxcdFxcdFxcdFpMX1BPTExfU0xFRVBfVVMsIHRpbWVvdXRfdXMpO1xcbitcXHRcXHRcXHRcXHRcXHRzbGVlcF91cywgdGltZW91dF91cyk7XFxuIH1cXG4gXFxuIGludCB6bDMwNzN4X21iX29wKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCBvcF9yZWcsIHU4IG9wX3ZhbCxcXG5AQCAtNTExLDYgKzUxMSwxMSBAQCB6bDMwNzN4X2Rldl9zdGF0ZV9mZXRjaChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxcbiBcXHRpbnQgcmM7XFxuIFxcdHU4IGk7XFxuIFxcbitcXHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfU1RFUF9USU1FX01BU0ssXFxuK1xcdFxcdFxcdCAgICAgIFxcdTAwMjZ6bGRldi1cXHUwMDNlb3V0X3N0ZXBfdGltZV9tYXNrKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgWkwzMDczWF9OVU1fUkVGUzsgaSsrKSB7XFxuIFxcdFxcdHJjID0gemwzMDczeF9yZWZfc3RhdGVfZmV0Y2goemxkZXYsIGkpO1xcbiBcXHRcXHRpZiAocmMpIHtcXG5AQCAtMTAzNCw2ICsxMDM5LDE0IEBAIGludCB6bDMwNzN4X2Rldl9wcm9iZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxcbiBcXHQgKiBhbmQvb3IgcG9sbHMgYXJlIHJlcXVpcmVkIHRvIGJlIGRvbmUgYXRvbWljYWxseS5cXG4gXFx0ICovXFxuIFxcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVxcdTAwM2VkZXYsIFxcdTAwMjZ6bGRldi1cXHUwMDNlbXVsdGlvcF9sb2NrKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cXHUwMDNlZGV2LCByYyxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiRmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXFxcblxcXCIpO1xcbitcXHRyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi1cXHUwMDNlZGV2LCBcXHUwMDI2emxkZXYtXFx1MDAzZXBoYXNlX3N0ZXBfbG9jayk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXFx1MDAzZWRldiwgcmMsXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxcXG5cXFwiKTtcXG4rXFx0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXFx1MDAzZWRldiwgXFx1MDAyNnpsZGV2LVxcdTAwM2V0aWVfbG9jayk7XFxuIFxcdGlmIChyYylcXG4gXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXFx1MDAzZWRldiwgcmMsXFxuIFxcdFxcdFxcdFxcdCAgICAgXFxcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxcXG5cXFwiKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oXFxuaW5kZXggNzhkYzIwOGYzZWVhMi4uNjdjMTBlMjU5NTExOCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcXG5AQCAtMjYsNiArMjYsMTAgQEAgc3RydWN0IHpsMzA3M3hfZHBsbDtcXG4gI2RlZmluZSBaTF9QT0xMX0hXUkVHX1RJTUVPVVRfVVNcXHQoNTAgKiBVU0VDX1BFUl9NU0VDKVxcbiAjZGVmaW5lIFpMX1BPTExfTUJfVElNRU9VVF9VU1xcdFxcdCgzMCAqIFVTRUNfUEVSX01TRUMpXFxuICNkZWZpbmUgWkxfUE9MTF9QSEFTRV9FUlJfVElNRU9VVF9VU1xcdCg1MCAqIFVTRUNfUEVSX01TRUMpXFxuKyNkZWZpbmUgWkxfUE9MTF9QSEFTRV9TVEVQX1RJTUVPVVRfVVNcXHQoMzAwMCAqIFVTRUNfUEVSX01TRUMpXFxuKyNkZWZpbmUgWkxfUE9MTF9USUVfV1JfVElNRU9VVF9VU1xcdCgxMDAwICogVVNFQ19QRVJfTVNFQylcXG4rI2RlZmluZSBaTF9QT0xMX1RPRF9SRF9USU1FT1VUX1VTXFx0KDMwICogVVNFQ19QRVJfTVNFQylcXG4rI2RlZmluZSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTXFx0KDEwMDAgKiBVU0VDX1BFUl9NU0VDKVxcbiBcXG4gZW51bSB6bDMwNzN4X2ZsYWdzIHtcXG4gXFx0WkwzMDczWF9GTEFHX1JFRl9QSEFTRV9DT01QXzMyX0JJVCxcXG5AQCAtNTUsNiArNTksOCBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8ge1xcbiAgKiBAcmVnbWFwOiByZWdtYXAgdG8gYWNjZXNzIGRldmljZSByZWdpc3RlcnNcXG4gICogQGluZm86IGRldGVjdGVkIGNoaXAgaW5mb1xcbiAgKiBAbXVsdGlvcF9sb2NrOiB0byBzZXJpYWxpemUgbXVsdGlwbGUgcmVnaXN0ZXIgb3BlcmF0aW9uc1xcbisgKiBAdGllX2xvY2s6IHRvIHNlcmlhbGl6ZSBUSUUgd3JpdGUgb3BlcmF0aW9uc1xcbisgKiBAcGhhc2Vfc3RlcF9sb2NrOiB0byBzZXJpYWxpemUgb3V0cHV0IHBoYXNlIHN0ZXAgb3BlcmF0aW9uc1xcbiAgKiBAcmVmOiBhcnJheSBvZiBpbnB1dCByZWZlcmVuY2VzJyBpbnZhcmlhbnRzXFxuICAqIEBvdXQ6IGFycmF5IG9mIG91dHMnIGludmFyaWFudHNcXG4gICogQHN5bnRoOiBhcnJheSBvZiBzeW50aHMnIGludmFyaWFudHNcXG5AQCAtNjMsNiArNjksNyBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8ge1xcbiAgKiBAa3dvcmtlcjogdGhyZWFkIGZvciBwZXJpb2RpYyB3b3JrXFxuICAqIEB3b3JrOiBwZXJpb2RpYyB3b3JrXFxuICAqIEBjbG9ja19pZDogY2xvY2sgaWQgb2YgdGhlIGRldmljZVxcbisgKiBAb3V0X3N0ZXBfdGltZV9tYXNrOiBvdXRwdXQgc3RlcC10aW1lIG1hc2sgKGRldmljZS1nbG9iYWwpXFxuICAqIEBwaGFzZV9hdmdfZmFjdG9yOiBwaGFzZSBvZmZzZXQgbWVhc3VyZW1lbnQgYXZlcmFnaW5nIGZhY3RvclxcbiAgKiBAZnJlcV9tb25pdG9yOiBpcyBmcmVxdWVuY3kgbW9uaXRvciBlbmFibGVkXFxuICAqL1xcbkBAIC03MSw2ICs3OCw4IEBAIHN0cnVjdCB6bDMwNzN4X2RldiB7XFxuIFxcdHN0cnVjdCByZWdtYXBcXHRcXHRcXHQqcmVnbWFwO1xcbiBcXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm9cXHQqaW5mbztcXG4gXFx0c3RydWN0IG11dGV4XFx0XFx0XFx0bXVsdGlvcF9sb2NrO1xcbitcXHRzdHJ1Y3QgbXV0ZXhcXHRcXHRcXHR0aWVfbG9jaztcXG4rXFx0c3RydWN0IG11dGV4XFx0XFx0XFx0cGhhc2Vfc3RlcF9sb2NrO1xcbiBcXG4gXFx0LyogSW52YXJpYW50cyAqL1xcbiBcXHRzdHJ1Y3QgemwzMDczeF9yZWZcXHRyZWZbWkwzMDczWF9OVU1fUkVGU107XFxuQEAgLTg3LDYgKzk2LDcgQEAgc3RydWN0IHpsMzA3M3hfZGV2IHtcXG4gXFxuIFxcdC8qIFBlci1jaGlwIHBhcmFtZXRlcnMgKi9cXG4gXFx0dTY0XFx0XFx0XFx0Y2xvY2tfaWQ7XFxuK1xcdHUxNlxcdFxcdFxcdG91dF9zdGVwX3RpbWVfbWFzaztcXG4gXFx0dThcXHRcXHRcXHRwaGFzZV9hdmdfZmFjdG9yO1xcbiBcXHRib29sXFx0XFx0XFx0ZnJlcV9tb25pdG9yO1xcbiB9O1xcbkBAIC0zMDgsNiArMzE4LDE5IEBAIHpsMzA3M3hfZGV2X291dF9pc19lbmFibGVkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxcbiBcXHRyZXR1cm4gemwzMDczeF9zeW50aF9pc19lbmFibGVkKHN5bnRoKSBcXHUwMDI2XFx1MDAyNiB6bDMwNzN4X291dF9pc19lbmFibGVkKG91dCk7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiB6bDMwNzN4X2Rldl9vdXRfaXNfc3RlcHBlZCAtIGNoZWNrIGlmIG91dHB1dCBpcyBpbiBzdGVwLXRpbWUgbWFza1xcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGluZGV4OiBvdXRwdXQgaW5kZXhcXG4rICpcXG4rICogUmV0dXJuOiB0cnVlIGlmIG91dHB1dCBpcyBhZmZlY3RlZCBieSBzdGVwLXRpbWUgb3BlcmF0aW9uc1xcbisgKi9cXG4rc3RhdGljIGlubGluZSBib29sXFxuK3psMzA3M3hfZGV2X291dF9pc19zdGVwcGVkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxcbit7XFxuK1xcdHJldHVybiAhISh6bGRldi1cXHUwMDNlb3V0X3N0ZXBfdGltZV9tYXNrIFxcdTAwMjYgQklUKGluZGV4KSk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiB6bDMwNzN4X2Rldl9vdXRfZHBsbF9nZXQgLSBnZXQgRFBMTCBJRCB0aGUgb3V0cHV0IGlzIGRyaXZlbiBieVxcbiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jXFxuaW5kZXggMDQ4OGFlNmFjNDg2Yy4uYTY4NmRkNTJiZmFjOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcXG5AQCAtMiw2ICsyLDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY2xlYW51cC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYnVnLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb250YWluZXJfb2YuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Rldl9wcmludGsuaFxcdTAwM2VcXG5AQCAtMTMsNiArMTQsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0bGluay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3ByaW50Zi5oXFx1MDAzZVxcbiBcXG5AQCAtMjI3NSw0NSArMjI3NywzNzUgQEAgemwzMDczeF9kcGxsX2luaXRfZmluZV9waGFzZV9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcXG4gXFx0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19TWU5USF9QSEFTRV9TSElGVF9DVFJMLCAweDAxKTtcXG4gfVxcbiBcXG4rLyogTWF4aW11bSBmcmVxdWVuY3kgYWRqdXN0bWVudDogKy0xJSBvZiBub21pbmFsIGluIHBwYiAqL1xcbisjZGVmaW5lIFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESlxcdDEwMDAwMDAwXFxuK1xcbiAvKipcXG4tICogemwzMDczeF9kcGxsX2FsbG9jIC0gYWxsb2NhdGUgRFBMTCBkZXZpY2VcXG4tICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuLSAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlclxcbisgKiB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQgLSByZWFkIGN1cnJlbnQgdGltZSBmcm9tIFRvRCBjb3VudGVyc1xcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cXG4rICogQHRzOiB0aW1lc3BlYyB0byBzdG9yZSBjdXJyZW50IHRpbWVcXG4rICogQHN0czogb3B0aW9uYWwgc3lzdGVtIHRpbWVzdGFtcCBwYWlyIGZvciBjcm9zcy10aW1lc3RhbXBpbmdcXG4gICpcXG4tICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKVxcbit7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBwdHBfaW5mbyk7XFxuK1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZHBsbC1cXHUwMDNlZGV2LCB6bGRwbGwtXFx1MDAzZWlkLCBmYWxzZSwgdHMsIHN0cyk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCAtIHNldCBUb0QgY291bnRlcnMgdG8gZ2l2ZW4gdGltZVxcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cXG4rICogQHRzOiB0aW1lc3BlYyB3aXRoIHRpbWUgdG8gc2V0XFxuICAqXFxuLSAqIFJldHVybjogcG9pbnRlciB0byBEUExMIGRldmljZSBvbiBzdWNjZXNzLCBlcnJvciBwb2ludGVyIG9uIGVycm9yXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbiAgKi9cXG4tc3RydWN0IHpsMzA3M3hfZHBsbCAqXFxuLXpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXFxuK1xcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcXG4ge1xcbi1cXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBwdHBfaW5mbyk7XFxuIFxcbi1cXHR6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTtcXG4tXFx0aWYgKCF6bGRwbGwpXFxuLVxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuIFxcbi1cXHR6bGRwbGwtXFx1MDAzZWRldiA9IHpsZGV2O1xcbi1cXHR6bGRwbGwtXFx1MDAzZWlkID0gY2g7XFxuLVxcdG11dGV4X2luaXQoXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuLVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZ6bGRwbGwtXFx1MDAzZXBpbnMpO1xcbitcXHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF93cml0ZSh6bGRwbGwtXFx1MDAzZWRldiwgemxkcGxsLVxcdTAwM2VpZCwgKnRzKTtcXG4rfVxcbiBcXG4tXFx0cmV0dXJuIHpsZHBsbDtcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwIC0gYWRqdXN0IHN1Yi1zZWNvbmQgdGltZSB2aWEgcGhhc2Ugc3RlcFxcbisgKiBAemxkcGxsOiBEUExMIGNoYW5uZWxcXG4rICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMgKG11c3QgYmUgd2l0aGluICgtTlNFQ19QRVJfU0VDLFxcbisgKiAgICAgICAgIE5TRUNfUEVSX1NFQykpXFxuKyAqXFxuKyAqIFVzZXMgdGhlIG91dHB1dCBwaGFzZSBzdGVwIG1lY2hhbmlzbSB3aXRoIHRvZF9zdGVwPTEgdG8gYWRqdXN0IGJvdGhcXG4rICogdGhlIG91dHB1dCBjbG9jayBwaGFzZSBhbmQgdGhlIFRvRCBjb3VudGVyIHNpbXVsdGFuZW91c2x5LiBUaGlzIGtlZXBzXFxuKyAqIG91dHB1dHMgYW5kIFRvRCBjb2hlcmVudC4gT25seSB2YWxpZCBmb3IgTkNPLlxcbisgKlxcbisgKiBPdXRwdXRzIGFyZSBncm91cGVkIGJ5IHN5bnRoZXNpemVyIHNpbmNlIHRoZSBwaGFzZSBzdGVwIHZhbHVlIGlzIGluXFxuKyAqIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcy4gVGhlIGZpcnN0IHN5bnRoIGdyb3VwIHdpdGggZW5hYmxlZCBvdXRwdXRzXFxuKyAqIHVzZXMgdG9kX3N0ZXAgdG8gYWRqdXN0IGJvdGggb3V0cHV0cyBhbmQgdGhlIFRvRCBjb3VudGVyLiBSZW1haW5pbmdcXG4rICogZ3JvdXBzIHN0ZXAgb3V0cHV0cyBvbmx5LiBJZiBubyBzeW50aCBoYXMgZW5hYmxlZCBvdXRwdXRzLCB0aGUgVG9EXFxuKyAqIGNvdW50ZXIgaXMgc3RlcHBlZCBhbG9uZSB1c2luZyBhbiBlbXB0eSBvdXRwdXQgbWFzayAodGhlIEZXIHVzZXNcXG4rICogdGhlIGZpcnN0IGVuYWJsZWQgc3ludGgncyBwZXJpb2QgZm9yIHRoZSBjb252ZXJzaW9uKS5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIG5vIHN5bnRocyBhdmFpbGFibGUsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHM2NCBkZWx0YSlcXG4re1xcbitcXHR1MTYgc3ludGhfbWFza1taTDMwNzNYX05VTV9TWU5USFNdID0ge307XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXFx1MDAzZWRldjtcXG4rXFx0Y29uc3Qgc3RydWN0IHpsMzA3M3hfc3ludGggKnN5bnRoO1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluO1xcbitcXHR1MzIgZmlyc3Rfc3ludGhfZnJlcSA9IDA7XFxuK1xcdGJvb2wgdG9kX3N0ZXBwZWQgPSBmYWxzZTtcXG4rXFx0czMyIHN0ZXBfY3ljbGVzO1xcbitcXHR1MzIgc3ludGhfZnJlcTtcXG4rXFx0aW50IHJjO1xcbitcXHR1OCBpO1xcbitcXG4rXFx0LyogQnVpbGQgcGVyLXN5bnRoIG91dHB1dCBtYXNrcyBmcm9tIHJlZ2lzdGVyZWQgb3V0cHV0IHBpbnMgKi9cXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwaW4sIFxcdTAwMjZ6bGRwbGwtXFx1MDAzZXBpbnMsIGxpc3QpIHtcXG4rXFx0XFx0dTggb3V0X2lkLCBzeW50aF9pZDtcXG4rXFxuK1xcdFxcdGlmICh6bDMwNzN4X2RwbGxfaXNfaW5wdXRfcGluKHBpbikpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0b3V0X2lkID0gemwzMDczeF9vdXRwdXRfcGluX291dF9nZXQocGluLVxcdTAwM2VpZCk7XFxuK1xcbitcXHRcXHRpZiAoIXpsMzA3M3hfZGV2X291dF9pc19zdGVwcGVkKHpsZGV2LCBvdXRfaWQpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHN5bnRoX2lkID0gemwzMDczeF9kZXZfb3V0X3N5bnRoX2dldCh6bGRldiwgb3V0X2lkKTtcXG4rXFx0XFx0aWYgKHN5bnRoX2lkIFxcdTAwM2U9IFpMMzA3M1hfTlVNX1NZTlRIUykge1xcbitcXHRcXHRcXHRkZXZfd2Fybih6bGRldi1cXHUwMDNlZGV2LCBcXFwiVW5leHBlY3RlZCBzeW50aCBpZCBmb3IgT1VUJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCBvdXRfaWQpO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXHRcXHRzeW50aF9tYXNrW3N5bnRoX2lkXSB8PSBCSVQob3V0X2lkKTtcXG4rXFx0fVxcbitcXG4rXFx0LyogUHJvY2VzcyBlYWNoIHN5bnRoIGdyb3VwICovXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBaTDMwNzNYX05VTV9TWU5USFM7IGkrKykge1xcbitcXHRcXHRzeW50aCA9IHpsMzA3M3hfc3ludGhfc3RhdGVfZ2V0KHpsZGV2LCBpKTtcXG4rXFx0XFx0aWYgKCF6bDMwNzN4X3N5bnRoX2lzX2VuYWJsZWQoc3ludGgpIHx8XFxuK1xcdFxcdCAgICB6bDMwNzN4X3N5bnRoX2RwbGxfZ2V0KHN5bnRoKSAhPSB6bGRwbGwtXFx1MDAzZWlkKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHN5bnRoX2ZyZXEgPSB6bDMwNzN4X3N5bnRoX2ZyZXFfZ2V0KHN5bnRoKTtcXG4rXFxuK1xcdFxcdC8qIFJlbWVtYmVyIGZpcnN0IGVuYWJsZWQgc3ludGggZnJlcSBmb3IgVG9ELW9ubHkgZmFsbGJhY2sgKi9cXG4rXFx0XFx0aWYgKCFmaXJzdF9zeW50aF9mcmVxKVxcbitcXHRcXHRcXHRmaXJzdF9zeW50aF9mcmVxID0gc3ludGhfZnJlcTtcXG4rXFxuK1xcdFxcdGlmICghc3ludGhfbWFza1tpXSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHQvKiBTYWZlIGZvciBzMzI6IG1heCBzeW50aCBmcmVxIGlzIDc1MCBNSHogKi9cXG4rXFx0XFx0c3RlcF9jeWNsZXMgPSBkaXZfczY0KGRlbHRhICogc3ludGhfZnJlcSwgTlNFQ19QRVJfU0VDKTtcXG4rXFxuK1xcdFxcdHJjID0gemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc3ludGhfbWFza1tpXSwgc3RlcF9jeWNsZXMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIXRvZF9zdGVwcGVkKTtcXG4rXFx0XFx0aWYgKHJjKSB7XFxuK1xcdFxcdFxcdGlmICh0b2Rfc3RlcHBlZCkge1xcbitcXHRcXHRcXHRcXHRkZXZfd2Fybih6bGRldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgXFxcIlBhcnRpYWwgcGhhc2Ugc3RlcCBmYWlsdXJlXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0cmV0dXJuIHJjO1xcbitcXHRcXHR9XFxuK1xcdFxcdHRvZF9zdGVwcGVkID0gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFmaXJzdF9zeW50aF9mcmVxKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHQvKiBObyBlbmFibGVkIG91dHB1dHMgZm91bmQ7IHN0ZXAgVG9EIGNvdW50ZXIgb25seSB1c2luZyB0aGVcXG4rXFx0ICogZmlyc3QgZW5hYmxlZCBzeW50aCdzIHBlcmlvZCAoZW1wdHkgb3V0cHV0IG1hc2spLlxcbitcXHQgKi9cXG4rXFx0aWYgKCF0b2Rfc3RlcHBlZCkge1xcbitcXHRcXHRzdGVwX2N5Y2xlcyA9IGRpdl9zNjQoZGVsdGEgKiBmaXJzdF9zeW50aF9mcmVxLCBOU0VDX1BFUl9TRUMpO1xcbitcXHRcXHRyZXR1cm4gemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQsIDAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBzdGVwX2N5Y2xlcywgdHJ1ZSk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiAvKipcXG4tICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlXFxuLSAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZVxcbisgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUgLSBhZGp1c3QgUFRQIGNsb2NrIHRpbWVcXG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXFxuKyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzXFxuICAqXFxuLSAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuXFxuKyAqIEZvciBOQ08sIGxhcmdlIGRlbHRhcyAoXFx1MDAzZT0gMSBzZWNvbmQpIGFyZSBzcGxpdCBpbnRvIGEgVG9EXFxuKyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciB0aGUgc2Vjb25kcyBwYXJ0IGFuZCBhbiBvdXRwdXQgcGhhc2Ugc3RlcCBmb3JcXG4rICogdGhlIHN1Yi1zZWNvbmQgcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgcGhhc2Ugc3RlcCBkaXJlY3RseSxcXG4rICogZmFsbGluZyBiYWNrIHRvIFRvRCByZWFkLW1vZGlmeS13cml0ZSBpZiBwaGFzZSBzdGVwIGlzIHVuYXZhaWxhYmxlLlxcbisgKiBJbiBBVVRPL1JFRkxPQ0sgbW9kZXMsIGxhcmdlIGRlbHRhcyBhcmUgc3BsaXQgaW50byBUb0RcXG4rICogcmVhZC1tb2RpZnktd3JpdGUgZm9yIHNlY29uZHMgYW5kIFRJRSB3cml0ZSBmb3IgdGhlIHN1Yi1zZWNvbmRcXG4rICogcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgVElFIHdyaXRlIGRpcmVjdGx5LlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4gICovXFxuLXZvaWRcXG4temwzMDczeF9kcGxsX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxcbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHM2NCBkZWx0YSlcXG4ge1xcbi1cXHRXQVJOKHpsZHBsbC1cXHUwMDNlZHBsbF9kZXYsIFxcXCJEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXFxcXG5cXFwiKTtcXG4rXFx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIHB0cF9pbmZvKTtcXG4rXFx0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cXHUwMDNlZGV2O1xcbitcXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xcbitcXHRib29sIHNlY19hZGp1c3RlZCA9IGZhbHNlO1xcbitcXHRzdHJ1Y3QgdGltZXNwZWM2NCB0cztcXG4rXFx0aW50IHJjO1xcbiBcXG4tXFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4tXFx0a2ZyZWUoemxkcGxsKTtcXG4rXFx0aWYgKCFkZWx0YSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHQvKiBNb2RlcyB3aXRob3V0IHBoYXNlIHN0ZXAgb3IgVElFIHVzZSBwbGFpbiBUb0QgYWRqdXN0ICovXFxuK1xcdGNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkKTtcXG4rXFx0aWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICF6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY2hhbikpXFxuK1xcdFxcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVxcdTAwM2VpZCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTtcXG4rXFxuK1xcdC8qIFNwbGl0IG9mZiBzZWNvbmRzIHZpYSBUb0QgcmVhZC1tb2RpZnktd3JpdGUgc28gdGhlIHN1Yi1zZWNvbmRcXG4rXFx0ICogcmVtYWluZGVyIGNhbiBiZSBhcHBsaWVkIHRocm91Z2ggdGhlIG91dHB1dC1jb2hlcmVudCBtZWNoYW5pc21cXG4rXFx0ICogKHBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlKS5cXG4rXFx0ICovXFxuK1xcdGlmIChkZWx0YSBcXHUwMDNlPSBOU0VDX1BFUl9TRUMgfHwgZGVsdGEgXFx1MDAzYz0gLU5TRUNfUEVSX1NFQykge1xcbitcXHRcXHRzMzIgcmVtYWluZGVyO1xcbitcXG4rXFx0XFx0dHMudHZfc2VjID0gZGl2X3M2NF9yZW0oZGVsdGEsIE5TRUNfUEVSX1NFQywgXFx1MDAyNnJlbWFpbmRlcik7XFxuK1xcdFxcdHRzLnR2X25zZWMgPSAwO1xcbitcXHRcXHRkZWx0YSA9IHJlbWFpbmRlcjtcXG4rXFxuK1xcdFxcdHJjID0gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQsIHRzKTtcXG4rXFx0XFx0aWYgKHJjKVxcbitcXHRcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRcXHQvKiBObyBzdWItc2Vjb25kIHJlbWFpbmRlciwgZG9uZSAqL1xcbitcXHRcXHRpZiAoIWRlbHRhKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdFxcdC8qIFdhaXQgZm9yIHRoZSBUb0Qgd3JpdGUgdG8gYmUgYXBwbGllZCBhdCB0aGUgMSBIeiBlZGdlXFxuK1xcdFxcdCAqIGJlZm9yZSBpc3N1aW5nIHBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlLCBzbyB0aGUgcGVuZGluZ1xcbitcXHRcXHQgKiBXUl9ORVhUXzFIWiBkb2VzIG5vdCBvdmVyd3JpdGUgdGhlIHN1Yi1zZWNvbmQgYWRqdXN0bWVudC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkKTtcXG4rXFx0XFx0aWYgKHJjKVxcbitcXHRcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRcXHRzZWNfYWRqdXN0ZWQgPSB0cnVlO1xcbitcXHR9XFxuK1xcbitcXHQvKiBBcHBseSBzdWItc2Vjb25kIGRlbHRhIHZpYSBwaGFzZSBzdGVwIChOQ08pIG9yIFRJRSB3cml0ZSAqL1xcbitcXHRpZiAoemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKSB7XFxuK1xcdFxcdHJjID0gemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoemxkcGxsLCBkZWx0YSk7XFxuK1xcdFxcdGlmICghcmMpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyYyA9IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQsIGRlbHRhKTtcXG4rXFx0XFx0aWYgKCFyYylcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlIGZhaWxlZCwgZmFsbCBiYWNrIHRvIFRvRCBhZGp1c3QgKi9cXG4rXFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVxcdTAwM2VpZCxcXG4rXFx0XFx0XFx0XFx0ICAgICBuc190b190aW1lc3BlYzY0KGRlbHRhKSk7XFxuK1xcbitcXHQvKiBJbiB0aGUgdW5saWtlbHkgZXZlbnQgdGhhdCBib3RoIHBoYXNlIHN0ZXAvVElFIHdyaXRlIGFuZCBmYWxsYmFja1xcbitcXHQgKiBUb0QgYWRqdXN0IGZhaWwgYWZ0ZXIgc2Vjb25kcyB3ZXJlIGFscmVhZHkgY29tbWl0dGVkLCByZXR1cm5cXG4rXFx0ICogc3VjY2VzcyB0byBwcmV2ZW50IHRoZSBQVFAgc2Vydm8gZnJvbSByZXRyeWluZyB0aGUgZnVsbCBkZWx0YSBhbmRcXG4rXFx0ICogYXBwbHlpbmcgc2Vjb25kcyBhZ2Fpbi4gVGhlIHN1Yi1zZWNvbmQgcmVzaWR1YWwgd2lsbCBzZWxmLWNvcnJlY3RcXG4rXFx0ICogaW4gdGhlIG5leHQgc2Vydm8gY3ljbGUuXFxuK1xcdCAqL1xcbitcXHRpZiAocmMgXFx1MDAyNlxcdTAwMjYgc2VjX2FkanVzdGVkKSB7XFxuK1xcdFxcdGRldl93YXJuKHpsZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdCBcXFwiU3ViLXNlY29uZCBhZGp1c3RtZW50IGZhaWxlZCBhZnRlciBzZWNvbmRzIGFwcGxpZWRcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJjO1xcbit9XFxuK1xcbisvKipcXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lIC0gYWRqdXN0IFBUUCBjbG9jayBmcmVxdWVuY3lcXG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXFxuKyAqIEBzY2FsZWRfcHBtOiBmcmVxdWVuY3kgYWRqdXN0bWVudCBpbiBzY2FsZWQgcHBtIChwcG0gKiAyXjE2KVxcbisgKlxcbisgKiBPbmx5IHN1cHBvcnRlZCBmb3IgTkNPLiBXcml0ZXMgdGhlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgcmVnaXN0ZXIuXFxuKyAqXFxuKyAqIFJldHVybjpcXG4rICogKiAlMFxcdFxcdFxcdC0gc3VjY2VzcyBvciBAc2NhbGVkX3BwbSBpcyB6ZXJvIChuby1vcClcXG4rICogKiAlLUVPUE5PVFNVUFBcXHQtIE5DTyBwaW4gaXMgbm90IGNvbm5lY3RlZCBhbmQgQHNjYWxlZF9wcG0gaXMgbm9uLXplcm9cXG4rICogKiBuZWdhdGl2ZVxcdFxcdC0gb3RoZXIgZXJyb3JcXG4rICovXFxuK3N0YXRpYyBpbnRcXG4remwzMDczeF9kcGxsX3B0cF9hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgbG9uZyBzY2FsZWRfcHBtKVxcbit7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBwdHBfaW5mbyk7XFxuK1xcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XFxuK1xcdHM2NCBvZmZzZXQ7XFxuK1xcbitcXHQvKiBDb252ZXJ0IHNjYWxlZF9wcG0gdG8gZGZfb2Zmc2V0IGluIDJeLTQ4IHN0ZXBzOlxcbitcXHQgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDJeMzIpIC8gMTBeNlxcbitcXHQgKlxcbitcXHQgKiBTaW1wbGlmeSB0byBhdm9pZCBvdmVyZmxvdzpcXG4rXFx0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjI2KSAvIDVeNlxcbitcXHQgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDY3MTA4ODY0KSAvIDE1NjI1XFxuK1xcdCAqL1xcbitcXHRvZmZzZXQgPSAtZGl2X3M2NCgoczY0KXNjYWxlZF9wcG0gKiA2NzEwODg2NExMLCAxNTYyNSk7XFxuK1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRwbGwtXFx1MDAzZWRldiwgemxkcGxsLVxcdTAwM2VpZCk7XFxuK1xcdGlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKVxcbitcXHRcXHRyZXR1cm4gc2NhbGVkX3BwbSA/IC1FT1BOT1RTVVBQIDogMDtcXG4rXFx0aWYgKG9mZnNldCA9PSBjaGFuLVxcdTAwM2VkZl9vZmZzZXQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0dXJuIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHpsZHBsbC1cXHUwMDNlZGV2LCB6bGRwbGwtXFx1MDAzZWlkLCBvZmZzZXQpO1xcbit9XFxuK1xcbisvKipcXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSAtIGFkanVzdCBQVFAgY2xvY2sgcGhhc2VcXG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXFxuKyAqIEBkZWx0YTogcGhhc2UgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kc1xcbisgKlxcbisgKiBPbmx5IHN1cHBvcnRlZCBpbiBBVVRPIGFuZCBSRUZMT0NLIG1vZGVzLiBVc2VzIFRJRSB3cml0ZSBmb3JcXG4rICogbmFub3NlY29uZCByZXNvbHV0aW9uIHBoYXNlIGFkanVzdG1lbnQuXFxuKyAqXFxuKyAqIFJldHVybjpcXG4rICogKiAlMFxcdFxcdFxcdC0gc3VjY2VzcyBvciBAZGVsdGEgaXMgemVybyAobm8tb3ApXFxuKyAqICogJS1FT1BOT1RTVVBQXFx0LSBtb2RlIGRvZXMgbm90IHN1cHBvcnQgVElFIGFuZCBAZGVsdGEgaXMgbm9uLXplcm9cXG4rICogKiBuZWdhdGl2ZVxcdFxcdC0gb3RoZXIgZXJyb3JcXG4rICovXFxuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHMzMiBkZWx0YSlcXG4re1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgcHRwX2luZm8pO1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVxcdTAwM2VkZXY7XFxuK1xcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XFxuK1xcbitcXHRpZiAoIWRlbHRhKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdGNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkKTtcXG4rXFxuK1xcdGlmICghemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRyZXR1cm4gemwzMDczeF9jaGFuX3RpZV93cml0ZSh6bGRldiwgemxkcGxsLVxcdTAwM2VpZCwgZGVsdGEpO1xcbit9XFxuK1xcbitzdGF0aWMgczMyXFxuK3psMzA3M3hfZHBsbF9wdHBfZ2V0bWF4cGhhc2Uoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvIF9fYWx3YXlzX3VudXNlZClcXG4re1xcbitcXHQvKiBIVyBsaW1pdHMgVElFIHdyaXRlIHRvICstMSBzZWNvbmQuIFJldHVybiB0aGUgY29uc3RhbnQgSFdcXG4rXFx0ICogbGltaXQgYW5kIGxldCBhZGpwaGFzZSBoYW5kbGUgbW9kZS1zcGVjaWZpYyBjaGVja3MuXFxuK1xcdCAqL1xcbitcXHRyZXR1cm4gTlNFQ19QRVJfU0VDIC0gMTtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm8gPSB7XFxuK1xcdC5vd25lclxcdFxcdD0gVEhJU19NT0RVTEUsXFxuK1xcdC5tYXhfYWRqXFx0PSBaTDMwNzNYX0RQTExfUFRQX01BWF9BREosXFxuK1xcdC5nZXR0aW1leDY0XFx0PSB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQsXFxuK1xcdC5zZXR0aW1lNjRcXHQ9IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0LFxcbitcXHQuYWRqdGltZVxcdD0gemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lLFxcbitcXHQuYWRqZmluZVxcdD0gemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lLFxcbitcXHQuYWRqcGhhc2VcXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2UsXFxuK1xcdC5nZXRtYXhwaGFzZVxcdD0gemwzMDczeF9kcGxsX3B0cF9nZXRtYXhwaGFzZSxcXG4rfTtcXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBhIERQTEwgY2hhbm5lbFxcbisgKiBAemxkcGxsOiBEUExMIGNoYW5uZWwgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvclxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXFxuK3tcXG4rXFx0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cXHUwMDNlZGV2O1xcbitcXHRzdHJ1Y3QgcHRwX2Nsb2NrICpwdHBfY2xvY2s7XFxuK1xcbitcXHRzbnByaW50Zih6bGRwbGwtXFx1MDAzZXB0cF9pbmZvLm5hbWUsIHNpemVvZih6bGRwbGwtXFx1MDAzZXB0cF9pbmZvLm5hbWUpLFxcbitcXHRcXHQgXFxcIiVzLWRwbGwldVxcXCIsIGRldl9uYW1lKHpsZGV2LVxcdTAwM2VkZXYpLCB6bGRwbGwtXFx1MDAzZWlkKTtcXG4rXFxuK1xcdHB0cF9jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcihcXHUwMDI2emxkcGxsLVxcdTAwM2VwdHBfaW5mbywgemxkZXYtXFx1MDAzZWRldik7XFxuK1xcdGlmIChJU19FUlIocHRwX2Nsb2NrKSkge1xcbitcXHRcXHRkZXZfZXJyKHpsZGV2LVxcdTAwM2VkZXYsIFxcXCJGYWlsZWQgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBEUExMJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHpsZHBsbC1cXHUwMDNlaWQpO1xcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihwdHBfY2xvY2spO1xcbitcXHR9XFxuK1xcbitcXHR6bGRwbGwtXFx1MDAzZXB0cF9jbG9jayA9IHB0cF9jbG9jaztcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKipcXG4rICogemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyIC0gdW5yZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsXFxuKyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byB1bnJlZ2lzdGVyIFBUUCBjbG9jayBmb3JcXG4rICovXFxuK3N0YXRpYyB2b2lkIHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXFxuK3tcXG4rXFx0aWYgKCFJU19FUlJfT1JfTlVMTCh6bGRwbGwtXFx1MDAzZXB0cF9jbG9jaykpIHtcXG4rXFx0XFx0cHRwX2Nsb2NrX3VucmVnaXN0ZXIoemxkcGxsLVxcdTAwM2VwdHBfY2xvY2spO1xcbitcXHRcXHR6bGRwbGwtXFx1MDAzZXB0cF9jbG9jayA9IE5VTEw7XFxuK1xcdH1cXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTIzOTgsNiArMjczMCw0OCBAQCB6bDMwNzN4X2RwbGxfcmVmX3N5bmNfcGFpcnNfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9hbGxvYyAtIGFsbG9jYXRlIERQTEwgZGV2aWNlXFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBudW1iZXJcXG4rICpcXG4rICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLlxcbisgKlxcbisgKiBSZXR1cm46IHBvaW50ZXIgdG8gRFBMTCBkZXZpY2Ugb24gc3VjY2VzcywgZXJyb3IgcG9pbnRlciBvbiBlcnJvclxcbisgKi9cXG4rc3RydWN0IHpsMzA3M3hfZHBsbCAqXFxuK3psMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcXG4re1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7XFxuK1xcbitcXHR6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTtcXG4rXFx0aWYgKCF6bGRwbGwpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXG4rXFx0emxkcGxsLVxcdTAwM2VkZXYgPSB6bGRldjtcXG4rXFx0emxkcGxsLVxcdTAwM2VpZCA9IGNoO1xcbitcXHR6bGRwbGwtXFx1MDAzZXB0cF9pbmZvID0gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvO1xcbitcXHRtdXRleF9pbml0KFxcdTAwMjZ6bGRwbGwtXFx1MDAzZWxvY2spO1xcbitcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2emxkcGxsLVxcdTAwM2VwaW5zKTtcXG4rXFxuK1xcdHJldHVybiB6bGRwbGw7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2RwbGxfZnJlZSAtIGZyZWUgRFBMTCBkZXZpY2VcXG4rICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXFxuKyAqXFxuKyAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuXFxuKyAqL1xcbit2b2lkXFxuK3psMzA3M3hfZHBsbF9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcXG4re1xcbitcXHRXQVJOKHpsZHBsbC1cXHUwMDNlZHBsbF9kZXYsIFxcXCJEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXFxcXG5cXFwiKTtcXG4rXFxuK1xcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuK1xcdGtmcmVlKHpsZHBsbCk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIgLSByZWdpc3RlciBEUExMIGRldmljZSBhbmQgYWxsIGl0cyBwaW5zXFxuICAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZVxcbkBAIC0yNDI4LDYgKzI4MDIsMTMgQEAgemwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcXG4gXFx0XFx0cmV0dXJuIHJjO1xcbiBcXHR9XFxuIFxcbitcXHRyYyA9IHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIoemxkcGxsKTtcXG4rXFx0aWYgKHJjKSB7XFxuK1xcdFxcdHpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTtcXG4rXFx0XFx0emwzMDczeF9kcGxsX2RldmljZV91bnJlZ2lzdGVyKHpsZHBsbCk7XFxuK1xcdFxcdHJldHVybiByYztcXG4rXFx0fVxcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTI0NDEsNyArMjgyMiw3IEBAIHpsMzA3M3hfZHBsbF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXFxuIHZvaWRcXG4gemwzMDczeF9kcGxsX3VucmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxcbiB7XFxuLVxcdC8qIFVucmVnaXN0ZXIgYWxsIHBpbnMgYW5kIGRwbGwgKi9cXG4rXFx0emwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHpsZHBsbCk7XFxuIFxcdHpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTtcXG4gXFx0emwzMDczeF9kcGxsX2RldmljZV91bnJlZ2lzdGVyKHpsZHBsbCk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXFxuaW5kZXggZmFlYmM0MDJiYTFiNy4uOTkzMjIxZGM2MzI0OSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmhcXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmhcXG5AQCAtNSw2ICs1LDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kcGxsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9saXN0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwiY29yZS5oXFxcIlxcbiBcXG5AQCAtMjIsNiArMjMsOCBAQFxcbiAgKiBAdHlwZTogRFBMTCB0eXBlIChQUFMgb3IgRUVDKVxcbiAgKiBAbG9ja19zdGF0dXM6IGxhc3Qgc2F2ZWQgRFBMTCBsb2NrIHN0YXR1c1xcbiAgKiBAcGluczogbGlzdCBvZiBwaW5zXFxuKyAqIEBwdHBfaW5mbzogUFRQIGNsb2NrIGluZm9cXG4rICogQHB0cF9jbG9jazogcmVnaXN0ZXJlZCBQVFAgY2xvY2sgKG9yIE5VTEwpXFxuICAqL1xcbiBzdHJ1Y3QgemwzMDczeF9kcGxsIHtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZFxcdFxcdGxpc3Q7XFxuQEAgLTM2LDYgKzM5LDggQEAgc3RydWN0IHpsMzA3M3hfZHBsbCB7XFxuIFxcdGVudW0gZHBsbF90eXBlXFx0XFx0XFx0dHlwZTtcXG4gXFx0ZW51bSBkcGxsX2xvY2tfc3RhdHVzXFx0XFx0bG9ja19zdGF0dXM7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWRcXHRcXHRwaW5zO1xcbitcXHRzdHJ1Y3QgcHRwX2Nsb2NrX2luZm9cXHRcXHRwdHBfaW5mbztcXG4rXFx0c3RydWN0IHB0cF9jbG9ja1xcdFxcdCpwdHBfY2xvY2s7XFxuIH07XFxuIFxcbiBzdHJ1Y3QgemwzMDczeF9kcGxsICp6bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhcXG5pbmRleCBiNzBlYWQ3ZDQ0OTViLi5mM2E1ZTEyMTVhYTM2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaFxcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaFxcbkBAIC0xNzksNiArMTc5LDIwIEBAXFxuICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRFxcdFxcdFxcdEdFTk1BU0soMiwgMClcXG4gI2RlZmluZSBaTF9EUExMX0RGX1JFQURfQ01EX0FDQ19JXFx0XFx0NFxcbiBcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTFxcdFxcdFxcdFpMX1JFRyg1LCAweDMwLCAxKVxcbisjZGVmaW5lIFpMX0RQTExfVElFX0NUUkxfT1BcXHRcXHRcXHRHRU5NQVNLKDIsIDApXFxuKyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUF9XUlxcdFxcdFxcdDRcXG4rXFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0NUUkxfTUFTS1xcdFxcdFpMX1JFRyg1LCAweDMxLCAxKVxcbitcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfQ1RSTChfaWR4KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0WkxfUkVHX0lEWChfaWR4LCA1LCAweDM4LCAxLCBaTDMwNzNYX01BWF9DSEFOTkVMUywgMSlcXG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX1NFTVxcdFxcdFxcdEJJVCg0KVxcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EXFx0XFx0XFx0R0VOTUFTSygzLCAwKVxcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaXFx0MVxcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX0NVUlJFTlRcXHRcXHQ4XFxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFpcXHQ5XFxuK1xcbiAjZGVmaW5lIFpMX1JFR19EUExMX01FQVNfQ1RSTFxcdFxcdFxcdFpMX1JFRyg1LCAweDUwLCAxKVxcbiAjZGVmaW5lIFpMX0RQTExfTUVBU19DVFJMX0VOXFx0XFx0XFx0QklUKDApXFxuICNkZWZpbmUgWkxfRFBMTF9NRUFTX0NUUkxfQVZHX0ZBQ1RPUlxcdFxcdEdFTk1BU0soNywgNClcXG5AQCAtMTkzLDYgKzIwNyw5IEBAXFxuIFxcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbiAgKiBSZWdpc3RlciBQYWdlcyA2LTcsIERQTEwgRGF0YVxcbisgKlxcbisgKiBQZXItY2hhbm5lbCByZWdpc3RlcnMgd2l0aCBzdHJpZGUgMHgyMC4gQ2hhbm5lbHMgMC0zIHJlc2lkZSBvbiBwYWdlIDYsXFxuKyAqIGNoYW5uZWwgNCBvbiBwYWdlIDcuXFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbiBcXG4gI2RlZmluZSBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuQEAgLTIwMiw2ICsyMTksMjQgQEBcXG4gXFx0KChfaWR4KSBcXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfNClcXG4gI2RlZmluZSBaTF9EUExMX0RGX09GRlNFVF9VTktOT1dOXFx0UzY0X01JTlxcbiBcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0WkxfUkVHX0lEWChfaWR4LCA2LCAweDBDLCA2LCA0LCAweDIwKVxcbisjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBXzRcXHRcXHRcXHRaTF9SRUcoNywgMHgwQywgNilcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQShfaWR4KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0KChfaWR4KSBcXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RJRV9EQVRBXzQpXFxuK1xcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUNfMDMoX2lkeClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgxMiwgNiwgNCwgMHgyMClcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzRcXHRcXHRcXHRaTF9SRUcoNywgMHgxMiwgNilcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDKF9pZHgpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHQoKF9pZHgpIFxcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RPRF9TRUNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfU0VDXzQpXFxuK1xcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU18wMyhfaWR4KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0WkxfUkVHX0lEWChfaWR4LCA2LCAweDE4LCA0LCA0LCAweDIwKVxcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU180XFx0XFx0XFx0WkxfUkVHKDcsIDB4MTgsIDQpXFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TKF9pZHgpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHQoKF9pZHgpIFxcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RPRF9OU18wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RPRF9OU180KVxcbitcXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXFxuICAqIFJlZ2lzdGVyIFBhZ2UgOSwgU3ludGggYW5kIE91dHB1dFxcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuQEAgLTIyMSw2ICsyNTYsMjMgQEBcXG4gI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9FTlxcdFxcdFxcdEJJVCgwKVxcbiAjZGVmaW5lIFpMX09VVFBVVF9DVFJMX1NZTlRIX1NFTFxcdFxcdEdFTk1BU0soNiwgNClcXG4gXFxuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTS1xcdFxcdFpMX1JFRyg5LCAweDM2LCAyKVxcbitcXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTFxcdFxcdFpMX1JFRyg5LCAweDM4LCAxKVxcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfRFBMTFxcdFxcdEdFTk1BU0soNiwgNClcXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX1RPRF9TVEVQXFx0QklUKDMpXFxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUFxcdFxcdEdFTk1BU0soMSwgMClcXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX05PTkVcXHQwXFxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9SRVNFVFxcdDFcXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1JFQURcXHQyXFxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURVxcdDNcXG4rXFxuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUlxcdFxcdFpMX1JFRyg5LCAweDM5LCAxKVxcbitcXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTUFTS1xcdFxcdFpMX1JFRyg5LCAweDNhLCAyKVxcbitcXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfREFUQVxcdFxcdFpMX1JFRyg5LCAweDNjLCA0KVxcbitcXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcXG4gICogUmVnaXN0ZXIgUGFnZSAxMCwgUmVmIE1haWxib3hcXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDExOjUyOjQ5LjE2NzA5NTA1MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjk3NDAwNjI4MjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpMMzA3M1hfSTJDXCIsXG4gICAgXCJaTDMwNzNYX1NQSVwiLFxuICAgIFwiUFRQXzE1ODhfQ0xPQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXRcIixcbiAgICBcInpsMzA3M3hfY2hhbl90b2RfcmVhZFwiLFxuICAgIFwiemwzMDczeF9jaGFuX3RvZF93cml0ZVwiLFxuICAgIFwiemwzMDczeF9jaGFuX3RvZF9hZGp1c3RcIixcbiAgICBcInpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0XCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fdGllX3dyaXRlXCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgUFRQIGNsb2NrIHN1cHBvcnQgdG8gdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyICh6bDMwNzN4KS4gVGhlIGRyaXZlciBjYW4gYmUgaW5zdGFudGlhdGVkIHZpYSBJMkMgb3IgU1BJLCBhbmQgdGhlIFBUUCBjbG9jayBpbnRlcmZhY2UgaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdmlhIGAvZGV2L3B0cFhgLiBTeXprYWxsZXIgY2FuIGZ1enogdGhpcyBmdW5jdGlvbmFsaXR5IHVzaW5nIEkyQy9TUEkgZW11bGF0aW9uIGFuZCBQVFAgaW9jdGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1OTFkZWM4M2E4NWQ3MDc0NTUyNjBlOTE4ZTc0MTI1N2U0NWY5MjkxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAxMTo1Mjo0NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWcgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXG5pbmRleCA1YmJjYTE0MDA1ODEzLi5kYTE3MzFhY2UxNWYwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xuQEAgLTIsNyArMiw3IEBAXG4gXG4gY29uZmlnIFpMMzA3M1hcbiBcdHRyaXN0YXRlIFwiTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlc1wiIGlmIENPTVBJTEVfVEVTVFxuLVx0ZGVwZW5kcyBvbiBORVRcbitcdGRlcGVuZHMgb24gTkVUIFx1MDAyNlx1MDAyNiBQVFBfMTU4OF9DTE9DS1xuIFx0c2VsZWN0IERQTExcbiBcdHNlbGVjdCBORVRfREVWTElOS1xuIFx0c2VsZWN0IFJFR01BUFxuQEAgLTE2LDcgKzE2LDcgQEAgY29uZmlnIFpMMzA3M1hcbiBcbiBjb25maWcgWkwzMDczWF9JMkNcbiBcdHRyaXN0YXRlIFwiSTJDIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1wiXG4tXHRkZXBlbmRzIG9uIEkyQyBcdTAwMjZcdTAwMjYgTkVUXG4rXHRkZXBlbmRzIG9uIEkyQyBcdTAwMjZcdTAwMjYgTkVUIFx1MDAyNlx1MDAyNiBQVFBfMTU4OF9DTE9DS1xuIFx0c2VsZWN0IFJFR01BUF9JMkNcbiBcdHNlbGVjdCBaTDMwNzNYXG4gXHRoZWxwXG5AQCAtMjgsNyArMjgsNyBAQCBjb25maWcgWkwzMDczWF9JMkNcbiBcbiBjb25maWcgWkwzMDczWF9TUElcbiBcdHRyaXN0YXRlIFwiU1BJIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1wiXG4tXHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgU1BJXG4rXHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgU1BJIFx1MDAyNlx1MDAyNiBQVFBfMTU4OF9DTE9DS1xuIFx0c2VsZWN0IFJFR01BUF9TUElcbiBcdHNlbGVjdCBaTDMwNzNYXG4gXHRoZWxwXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXG5pbmRleCA0ZWMyY2Y1M2RhZDQ2Li5hZjZjYTQzYzMzNTkwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNcbkBAIC0zLDYgKzMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZfcHJpbnRrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiBcbkBAIC0xNjIsOCArMTYzLDggQEAgaW50IHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpXG4gICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3hfZGV2IHN0cnVjdHVyZVxuICAqIEBpbmRleDogRFBMTCBjaGFubmVsIGluZGV4IHRvIGZldGNoIHN0YXRlIGZvclxuICAqXG4tICogUmVhZHMgdGhlIG1vZGVfcmVmc2VsIHJlZ2lzdGVyIGFuZCByZWZlcmVuY2UgcHJpb3JpdHkgcmVnaXN0ZXJzIGZvclxuLSAqIHRoZSBnaXZlbiBEUExMIGNoYW5uZWwgYW5kIHN0b3JlcyB0aGUgcmF3IHZhbHVlcyBmb3IgbGF0ZXIgdXNlLlxuKyAqIFJlYWRzIHRoZSBtb2RlX3JlZnNlbCwgc3RhdHVzIGFuZCByZWZlcmVuY2UgcHJpb3JpdHkgcmVnaXN0ZXJzIGZvclxuKyAqIHRoZSBnaXZlbiBEUExMIGNoYW5uZWwgYW5kIHN0b3JlcyB0aGUgdmFsdWVzIGZvciBsYXRlciB1c2UuXG4gICpcbiAgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuICAqL1xuQEAgLTIzNCw2ICsyMzUsMzIyIEBAIGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKnpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldixcbiBcdHJldHVybiBcdTAwMjZ6bGRldi1cdTAwM2VjaGFuW2luZGV4XTtcbiB9XG4gXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0IC0gd2FpdCBmb3IgVG9EIHNlbWFwaG9yZSB0byBjbGVhclxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICpcbisgKiBQb2xscyB0aGUgVG9EIGNvbnRyb2wgcmVnaXN0ZXIgdW50aWwgdGhlIHNlbWFwaG9yZSBiaXQgaXMgY2xlYXJlZCxcbisgKiBpbmRpY2F0aW5nIHRoZSBkZXZpY2UgaGFzIGNvbXBsZXRlZCB0aGUgcHJldmlvdXMgVG9EIG9wZXJhdGlvbi5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRUJVU1kgaWYgc2VtYXBob3JlIG5vdCBjbGVhcmVkLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4raW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcbit7XG4rXHR1bnNpZ25lZCBpbnQgdGltZW91dDtcbitcdHU4IHRvZF9jdHJsO1xuK1x0aW50IHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSwgXHUwMDI2dG9kX2N0cmwpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRzd2l0Y2ggKEZJRUxEX0dFVChaTF9EUExMX1RPRF9DVFJMX0NNRCwgdG9kX2N0cmwpKSB7XG4rXHRjYXNlIDA6XG4rXHRcdC8qIE5vIG9wZXJhdGlvbiBwZW5kaW5nIChwb3dlci1vbi9yZXNldCBkZWZhdWx0KSAqL1xuK1x0XHRyZXR1cm4gMDtcbitcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFo6XG4rXHRcdHRpbWVvdXQgPSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTO1xuK1x0XHRicmVhaztcbitcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVDpcbitcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFo6XG4rXHRcdHRpbWVvdXQgPSBaTF9QT0xMX1RPRF9SRF9USU1FT1VUX1VTO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdC8qIEZXIG5ldmVyIHdyaXRlcyBjbWQgYml0czsgb25seSB0aGUgZHJpdmVyIHNldHMgdGhlbSAqL1xuK1x0XHRXQVJOX09OKDEpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksXG4rXHRcdFx0XHQgIFpMX0RQTExfVE9EX0NUUkxfU0VNLCB0aW1lb3V0KTtcbitcbitcdHJldHVybiByYyA9PSAtRVRJTUVET1VUID8gLUVCVVNZIDogcmM7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl90b2RfY3RybCAtIGlzc3VlIFRvRCBjb21tYW5kXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKiBAY21kOiBUb0QgY29tbWFuZCB0byBleGVjdXRlXG4rICpcbisgKiBXcml0ZXMgdGhlIHNlbWFwaG9yZSBhbmQgY29tbWFuZCB0byBkcGxsX3RvZF9jdHJsLiBUaGUgY2FsbGVyIG11c3RcbisgKiBlbnN1cmUgdGhlIGRldmljZSBpcyByZWFkeSAoc2VtYXBob3JlIGNsZWFyKSBiZWZvcmUgY2FsbGluZyBhbmRcbisgKiBtdXN0IHdhaXQgZm9yIGNvbXBsZXRpb24gaWYgbmVlZGVkLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitzdGF0aWMgaW50IHpsMzA3M3hfY2hhbl90b2RfY3RybChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgdTggY21kKVxuK3tcbitcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksXG4rXHRcdFx0XHRaTF9EUExMX1RPRF9DVFJMX1NFTSB8IGNtZCk7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl90b2RfcmVhZCAtIHJlYWQgVG9EIHJlZ2lzdGVycyBhZnRlciBpc3N1aW5nIGEgY29tbWFuZFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICogQG5leHRfaHo6IGlmIHRydWUsIHJlYWQgcHJlZGljdGVkIFRvRCBhdCBuZXh0IDEgSHo7IG90aGVyd2lzZSByZWFkIGN1cnJlbnRcbisgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIHRoZSByZXN1bHRcbisgKiBAc3RzOiBvcHRpb25hbCBzeXN0ZW0gdGltZXN0YW1wIHBhaXIgZm9yIGNyb3NzLXRpbWVzdGFtcGluZ1xuKyAqXG4rICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbitcdFx0XHQgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKVxuK3tcbitcdHUzMiBuc2VjO1xuK1x0dTY0IHNlYztcbitcdHU4IGNtZDtcbitcdGludCByYztcbitcbitcdGlmIChuZXh0X2h6KVxuK1x0XHRjbWQgPSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9ORVhUXzFIWjtcbitcdGVsc2VcbitcdFx0Y21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVDtcbitcbitcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRwdHBfcmVhZF9zeXN0ZW1fcHJldHMoc3RzKTtcbitcdHJjID0gemwzMDczeF9jaGFuX3RvZF9jdHJsKHpsZGV2LCBjaCwgY21kKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1x0cHRwX3JlYWRfc3lzdGVtX3Bvc3R0cyhzdHMpO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3JlYWRfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfU0VDKGNoKSwgXHUwMDI2c2VjKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0LyogSFcgbmFub3NlY29uZHMgYXJlIGFsd2F5cyBpbiBbMCwgTlNFQ19QRVJfU0VDKSByYW5nZSAqL1xuK1x0cmMgPSB6bDMwNzN4X3JlYWRfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCBcdTAwMjZuc2VjKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0dHMtXHUwMDNldHZfc2VjID0gc2VjO1xuK1x0dHMtXHUwMDNldHZfbnNlYyA9IG5zZWM7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3RvZF93cml0ZSAtIHdyaXRlIFRvRCByZWdpc3RlcnMgYW5kIHRyaWdnZXIgMSBIeiB1cGRhdGVcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqIEB0czogdGltZSB0byBzZXRcbisgKlxuKyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitpbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cylcbit7XG4rXHRpbnQgcmM7XG4rXG4rXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVG9EIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xuK1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIHRzLnR2X3NlYyk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19EUExMX1RPRF9OUyhjaCksIHRzLnR2X25zZWMpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9jdHJsKHpsZGV2LCBjaCxcbitcdFx0XHRcdCAgICAgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFopO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCAtIGF0b21pYyBUb0QgcmVhZC1tb2RpZnktd3JpdGUgd2l0aCByb2xsb3ZlciBndWFyZFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgdG8gYXBwbHlcbisgKlxuKyAqIFJlYWRzIHRoZSBuZXh0LUh6IFRvRCBhbmQgY3VycmVudCBUb0QsIHRoZW4gY2hlY2tzIHdoZXRoZXIgZW5vdWdoIHRpbWVcbisgKiByZW1haW5zIGJlZm9yZSB0aGUgbmV4dCAxIEh6IHJvbGxvdmVyIHRvIHNhZmVseSBjb21wbGV0ZSB0aGUgd3JpdGUuXG4rICogUmUtcmVhZHMgaWYgdGhlIDEgSHogdGljayBjcm9zc2VkIGJldHdlZW4gdGhlIHR3byByZWFkcyBvciBpZiBsZXNzXG4rICogdGhhbiAyMCBtcyByZW1haW5zIGJlZm9yZSB0aGUgbmV4dCByb2xsb3Zlci4gQXBwbGllcyBAZGVsdGEgYW5kIHdyaXRlc1xuKyAqIHRoZSByZXN1bHQgYmFjay5cbisgKlxuKyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbisjZGVmaW5lIFpMX1RPRF9NQVhfUkVUUklFU1x0MjBcbitpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKVxuK3tcbitcdHN0YXRpYyBjb25zdCBsb25nIHRocmVzaG9sZF9ucyA9IDIwICogTlNFQ19QRVJfTVNFQztcbitcdHN0cnVjdCB0aW1lc3BlYzY0IHRzX25leHQsIHRzX2N1ciwgZGlmZjtcbitcdGludCByYywgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFpMX1RPRF9NQVhfUkVUUklFUzsgaSsrKSB7XG4rXHRcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgdHJ1ZSwgXHUwMDI2dHNfbmV4dCwgTlVMTCk7XG4rXHRcdGlmIChyYylcbitcdFx0XHRyZXR1cm4gcmM7XG4rXG4rXHRcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgZmFsc2UsIFx1MDAyNnRzX2N1ciwgTlVMTCk7XG4rXHRcdGlmIChyYylcbitcdFx0XHRyZXR1cm4gcmM7XG4rXG4rXHRcdC8qIEVuc3VyZSB0aGUgMSBIeiB0aWNrIGRpZCBub3QgY3Jvc3MgYmV0d2VlbiB0aGUgdHdvIHJlYWRzXG4rXHRcdCAqIGFuZCB0aGF0IGVub3VnaCBtYXJnaW4gcmVtYWlucyB0byBjb21wbGV0ZSB0aGUgd3JpdGUuXG4rXHRcdCAqL1xuK1x0XHRkaWZmID0gdGltZXNwZWM2NF9zdWIodHNfbmV4dCwgdHNfY3VyKTtcbitcdFx0aWYgKGRpZmYudHZfc2VjIFx1MDAzZSAwIHx8XG4rXHRcdCAgICAoIWRpZmYudHZfc2VjIFx1MDAyNlx1MDAyNiBkaWZmLnR2X25zZWMgXHUwMDNlPSB0aHJlc2hvbGRfbnMpKVxuK1x0XHRcdGJyZWFrO1xuK1x0fVxuK1x0aWYgKGkgPT0gWkxfVE9EX01BWF9SRVRSSUVTKSB7XG4rXHRcdGRldl93YXJuKHpsZGV2LVx1MDAzZWRldixcbitcdFx0XHQgXCJEUExMJXUgVG9EIGFkanVzdCBmYWlsZWQgdG8gZ2V0IHN0YWJsZSBtYXJnaW5cXG5cIixcbitcdFx0XHQgY2gpO1xuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1x0fVxuK1xuK1x0LyogQXBwbHkgZGVsdGEgdG8gdGhlIG5leHQtSHogVG9EICovXG4rXHR0c19uZXh0ID0gdGltZXNwZWM2NF9hZGQodHNfbmV4dCwgZGVsdGEpO1xuK1x0aWYgKCF0aW1lc3BlYzY0X3ZhbGlkKFx1MDAyNnRzX25leHQpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZGV2LCBjaCwgdHNfbmV4dCk7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0IC0gd3JpdGUgZGVsdGEgZnJlcXVlbmN5IG9mZnNldCB0byBoYXJkd2FyZVxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICogQG9mZnNldDogZnJlcXVlbmN5IG9mZnNldCBpbiAyXi00OCBzdGVwc1xuKyAqXG4rICogQ29udGV4dDogQ2FsbGVyIG11c3QgaG9sZCB0aGUgcGVyLURQTEwgbG9jay5cbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldClcbit7XG4rXHRpbnQgcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9PRkZTRVQoY2gpLCBvZmZzZXQpO1xuK1x0aWYgKCFyYylcbitcdFx0emxkZXYtXHUwMDNlY2hhbltjaF0uZGZfb2Zmc2V0ID0gb2Zmc2V0O1xuK1xuK1x0cmV0dXJuIHJjO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlIC0gYWRqdXN0IERQTEwgcGhhc2UgdXNpbmcgVElFIHdyaXRlXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKiBAZGVsdGFfbnM6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMgKG11c3QgYmUgd2l0aGluICstMXMpXG4rICpcbisgKiBDb252ZXJ0cyBuYW5vc2Vjb25kcyB0byBUSUUgdW5pdHMgKDAuMDEgcHMpIGFuZCB3cml0ZXMgVElFIGRhdGFcbisgKiB0byB0aGUgc3BlY2lmaWVkIGNoYW5uZWwuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK2ludCB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgZGVsdGFfbnMpXG4re1xuK1x0czY0IHRpZV9kYXRhO1xuK1x0aW50IHJjO1xuK1xuK1x0aWYgKFdBUk5fT04oZGVsdGFfbnMgXHUwMDNjPSAtTlNFQ19QRVJfU0VDIHx8IGRlbHRhX25zIFx1MDAzZT0gTlNFQ19QRVJfU0VDKSlcbitcdFx0cmV0dXJuIC1FUkFOR0U7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkZXYtXHUwMDNldGllX2xvY2spO1xuK1xuK1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRJRSBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbitcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLFxuK1x0XHRcdFx0ICBaTF9EUExMX1RJRV9DVFJMX09QLFxuK1x0XHRcdFx0ICBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0LyogQ29udmVydCBucyB0byBUSUUgdW5pdHMgKDAuMDEgcHMgPSAxMF4tMTQgcykgKi9cbitcdHRpZV9kYXRhID0gZGVsdGFfbnMgKiAxMDAwMDBMTDtcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9EQVRBKGNoKSwgdGllX2RhdGEpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0ssIEJJVChjaCkpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsXG4rXHRcdFx0XHRaTF9EUExMX1RJRV9DVFJMX09QX1dSKTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAgLSBleGVjdXRlIG9uZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb25cbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqIEBvdXRfbWFzazogYml0bWFzayBvZiBvdXRwdXRzIHRvIHN0ZXBcbisgKiBAc3RlcF9jeWNsZXM6IHBoYXNlIHN0ZXAgaW4gc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzXG4rICogQHRvZF9zdGVwOiBhbHNvIHN0ZXAgdGhlIFRvRCBjb3VudGVyXG4rICpcbisgKiBBbGwgbWFza2VkIG91dHB1dHMgbXVzdCB1c2Ugc3ludGhlc2l6ZXJzIG9mIHRoZSBzYW1lIGZyZXF1ZW5jeSBzaW5jZVxuKyAqIHRoZSBzdGVwIHZhbHVlIGlzIGluIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcy5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4raW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuK1x0XHRcdCAgICB1MTYgb3V0X21hc2ssIHMzMiBzdGVwX2N5Y2xlcyxcbitcdFx0XHQgICAgYm9vbCB0b2Rfc3RlcClcbit7XG4rXHR1OCBjdHJsO1xuK1x0aW50IHJjO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZGV2LVx1MDAzZXBoYXNlX3N0ZXBfbG9jayk7XG4rXG4rXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgcGhhc2Ugc3RlcCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbitcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLFxuK1x0XHRcdFx0ICBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QLFxuK1x0XHRcdFx0ICBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VUyk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBLFxuK1x0XHRcdCAgICAgICBzdGVwX2N5Y2xlcyk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLLCBvdXRfbWFzayk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUiwgMSk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdGN0cmwgPSBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfRFBMTCwgY2gpIHxcbitcdCAgICAgICBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AsXG4rXHRcdFx0ICBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1dSSVRFKTtcbitcdGlmICh0b2Rfc3RlcClcbitcdFx0Y3RybCB8PSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX1RPRF9TVEVQO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLCBjdHJsKTtcbit9XG4rXG4gLyoqXG4gICogemwzMDczeF9jaGFuX3N0YXRlX3NldCAtIGNvbW1pdCBEUExMIGNoYW5uZWwgc3RhdGUgY2hhbmdlcyB0byBoYXJkd2FyZVxuICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhcbmluZGV4IGRjOWM2ZDk1YmRlZTcuLjk5YzNiNzA4OGY2NzggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaFxuQEAgLTUsMTAgKzUsMTIgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RkZGVmLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC90aW1lNjQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcInJlZ3MuaFwiXG4gXG4rc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wO1xuIHN0cnVjdCB6bDMwNzN4X2RldjtcbiBcbiAvKipcbkBAIC00Miw2ICs0NCwyMSBAQCBpbnQgemwzMDczeF9jaGFuX3N0YXRlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCxcbiBpbnQgemwzMDczeF9jaGFuX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7XG4gaW50IHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpO1xuIFxuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpO1xuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbitcdFx0XHQgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKTtcbitpbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cyk7XG4raW50IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuK1x0XHRcdCAgICBzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YSk7XG4raW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuK1x0XHRcdCAgICB1MTYgb3V0X21hc2ssIHMzMiBzdGVwX2N5Y2xlcywgYm9vbCB0b2Rfc3RlcCk7XG4rXG4raW50IHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgb2Zmc2V0KTtcbitcbitpbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKTtcbitcbiAvKipcbiAgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X2dldCAtIGdldCBjYWNoZWQgZGZfb2Zmc2V0IHZzIHRyYWNrZWQgcmVmZXJlbmNlXG4gICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuQEAgLTIwMCw2ICsyMTcsMjEgQEAgc3RhdGljIGlubGluZSBib29sIHpsMzA3M3hfY2hhbl9tb2RlX2lzX3JlZmxvY2soY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcbiBcdHJldHVybiB6bDMwNzN4X2NoYW5fbW9kZV9nZXQoY2hhbikgPT0gWkxfRFBMTF9NT0RFX1JFRlNFTF9NT0RFX1JFRkxPQ0s7XG4gfVxuIFxuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZSAtIGNoZWNrIGlmIGNoYW5uZWwgbW9kZSBzdXBwb3J0cyBUSUUgd3JpdGVcbisgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG4rICpcbisgKiBUSUUgd3JpdGUgaXMgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMgcmVnYXJkbGVzcyBvZiBsb2NrIHN0YXRlLlxuKyAqXG4rICogUmV0dXJuOiB0cnVlIGlmIFRJRSB3cml0ZSBpcyBzdXBwb3J0ZWQsIGZhbHNlIG90aGVyd2lzZVxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbFxuK3psMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxuK3tcbitcdHJldHVybiB6bDMwNzN4X2NoYW5fbW9kZV9pc19hdXRvKGNoYW4pIHx8XG4rXHRcdHpsMzA3M3hfY2hhbl9tb2RlX2lzX3JlZmxvY2soY2hhbik7XG4rfVxuK1xuIC8qKlxuICAqIHpsMzA3M3hfY2hhbl9pc19ob19yZWFkeSAtIGNoZWNrIGlmIGhvbGRvdmVyIGlzIHJlYWR5XG4gICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1xuaW5kZXggNWIyZDc3ZjJjMjI4OC4uMjMwZGYwOGUyN2NkMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1xuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jXG5AQCAtMzIyLDcgKzMyMiw3IEBAIGludCB6bDMwNzN4X3dyaXRlX3U0OChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLCB1NjQgdmFsKVxuIGludCB6bDMwNzN4X3BvbGxfemVyb191OChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLFxuIFx0XHRcdCB1OCBtYXNrLCB1bnNpZ25lZCBpbnQgdGltZW91dF91cylcbiB7XG4tI2RlZmluZSBaTF9QT0xMX1NMRUVQX1VTIDEwXG4rXHR1bnNpZ25lZCBpbnQgc2xlZXBfdXMgPSB0aW1lb3V0X3VzIC8gNTA7XG4gXHR1bnNpZ25lZCBpbnQgdmFsO1xuIFxuIFx0LyogQ2hlY2sgdGhlIHJlZ2lzdGVyIGlzIDhiaXQgKi9cbkBAIC0zMzYsNyArMzM2LDcgQEAgaW50IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsXG4gXHRyZWcgPSBaTF9SRUdfQUREUihyZWcpICsgWkxfUkFOR0VfT0ZGU0VUO1xuIFxuIFx0cmV0dXJuIHJlZ21hcF9yZWFkX3BvbGxfdGltZW91dCh6bGRldi1cdTAwM2VyZWdtYXAsIHJlZywgdmFsLCAhKHZhbCBcdTAwMjYgbWFzayksXG4tXHRcdFx0XHRcdFpMX1BPTExfU0xFRVBfVVMsIHRpbWVvdXRfdXMpO1xuK1x0XHRcdFx0XHRzbGVlcF91cywgdGltZW91dF91cyk7XG4gfVxuIFxuIGludCB6bDMwNzN4X21iX29wKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCBvcF9yZWcsIHU4IG9wX3ZhbCxcbkBAIC01MTEsNiArNTExLDExIEBAIHpsMzA3M3hfZGV2X3N0YXRlX2ZldGNoKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXG4gXHRpbnQgcmM7XG4gXHR1OCBpO1xuIFxuK1x0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1NURVBfVElNRV9NQVNLLFxuK1x0XHRcdCAgICAgIFx1MDAyNnpsZGV2LVx1MDAzZW91dF9zdGVwX3RpbWVfbWFzayk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFpMMzA3M1hfTlVNX1JFRlM7IGkrKykge1xuIFx0XHRyYyA9IHpsMzA3M3hfcmVmX3N0YXRlX2ZldGNoKHpsZGV2LCBpKTtcbiBcdFx0aWYgKHJjKSB7XG5AQCAtMTAzNCw2ICsxMDM5LDE0IEBAIGludCB6bDMwNzN4X2Rldl9wcm9iZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxuIFx0ICogYW5kL29yIHBvbGxzIGFyZSByZXF1aXJlZCB0byBiZSBkb25lIGF0b21pY2FsbHkuXG4gXHQgKi9cbiBcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVx1MDAzZWRldiwgXHUwMDI2emxkZXYtXHUwMDNlbXVsdGlvcF9sb2NrKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXHUwMDNlZGV2LCByYyxcbitcdFx0XHRcdCAgICAgXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcblwiKTtcbitcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVx1MDAzZWRldiwgXHUwMDI2emxkZXYtXHUwMDNlcGhhc2Vfc3RlcF9sb2NrKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXHUwMDNlZGV2LCByYyxcbitcdFx0XHRcdCAgICAgXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcblwiKTtcbitcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVx1MDAzZWRldiwgXHUwMDI2emxkZXYtXHUwMDNldGllX2xvY2spO1xuIFx0aWYgKHJjKVxuIFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIHJjLFxuIFx0XHRcdFx0ICAgICBcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxuXCIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaFxuaW5kZXggNzhkYzIwOGYzZWVhMi4uNjdjMTBlMjU5NTExOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oXG5AQCAtMjYsNiArMjYsMTAgQEAgc3RydWN0IHpsMzA3M3hfZHBsbDtcbiAjZGVmaW5lIFpMX1BPTExfSFdSRUdfVElNRU9VVF9VU1x0KDUwICogVVNFQ19QRVJfTVNFQylcbiAjZGVmaW5lIFpMX1BPTExfTUJfVElNRU9VVF9VU1x0XHQoMzAgKiBVU0VDX1BFUl9NU0VDKVxuICNkZWZpbmUgWkxfUE9MTF9QSEFTRV9FUlJfVElNRU9VVF9VU1x0KDUwICogVVNFQ19QRVJfTVNFQylcbisjZGVmaW5lIFpMX1BPTExfUEhBU0VfU1RFUF9USU1FT1VUX1VTXHQoMzAwMCAqIFVTRUNfUEVSX01TRUMpXG4rI2RlZmluZSBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTXHQoMTAwMCAqIFVTRUNfUEVSX01TRUMpXG4rI2RlZmluZSBaTF9QT0xMX1RPRF9SRF9USU1FT1VUX1VTXHQoMzAgKiBVU0VDX1BFUl9NU0VDKVxuKyNkZWZpbmUgWkxfUE9MTF9UT0RfV1JfVElNRU9VVF9VU1x0KDEwMDAgKiBVU0VDX1BFUl9NU0VDKVxuIFxuIGVudW0gemwzMDczeF9mbGFncyB7XG4gXHRaTDMwNzNYX0ZMQUdfUkVGX1BIQVNFX0NPTVBfMzJfQklULFxuQEAgLTU1LDYgKzU5LDggQEAgc3RydWN0IHpsMzA3M3hfY2hpcF9pbmZvIHtcbiAgKiBAcmVnbWFwOiByZWdtYXAgdG8gYWNjZXNzIGRldmljZSByZWdpc3RlcnNcbiAgKiBAaW5mbzogZGV0ZWN0ZWQgY2hpcCBpbmZvXG4gICogQG11bHRpb3BfbG9jazogdG8gc2VyaWFsaXplIG11bHRpcGxlIHJlZ2lzdGVyIG9wZXJhdGlvbnNcbisgKiBAdGllX2xvY2s6IHRvIHNlcmlhbGl6ZSBUSUUgd3JpdGUgb3BlcmF0aW9uc1xuKyAqIEBwaGFzZV9zdGVwX2xvY2s6IHRvIHNlcmlhbGl6ZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb25zXG4gICogQHJlZjogYXJyYXkgb2YgaW5wdXQgcmVmZXJlbmNlcycgaW52YXJpYW50c1xuICAqIEBvdXQ6IGFycmF5IG9mIG91dHMnIGludmFyaWFudHNcbiAgKiBAc3ludGg6IGFycmF5IG9mIHN5bnRocycgaW52YXJpYW50c1xuQEAgLTYzLDYgKzY5LDcgQEAgc3RydWN0IHpsMzA3M3hfY2hpcF9pbmZvIHtcbiAgKiBAa3dvcmtlcjogdGhyZWFkIGZvciBwZXJpb2RpYyB3b3JrXG4gICogQHdvcms6IHBlcmlvZGljIHdvcmtcbiAgKiBAY2xvY2tfaWQ6IGNsb2NrIGlkIG9mIHRoZSBkZXZpY2VcbisgKiBAb3V0X3N0ZXBfdGltZV9tYXNrOiBvdXRwdXQgc3RlcC10aW1lIG1hc2sgKGRldmljZS1nbG9iYWwpXG4gICogQHBoYXNlX2F2Z19mYWN0b3I6IHBoYXNlIG9mZnNldCBtZWFzdXJlbWVudCBhdmVyYWdpbmcgZmFjdG9yXG4gICogQGZyZXFfbW9uaXRvcjogaXMgZnJlcXVlbmN5IG1vbml0b3IgZW5hYmxlZFxuICAqL1xuQEAgLTcxLDYgKzc4LDggQEAgc3RydWN0IHpsMzA3M3hfZGV2IHtcbiBcdHN0cnVjdCByZWdtYXBcdFx0XHQqcmVnbWFwO1xuIFx0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hpcF9pbmZvXHQqaW5mbztcbiBcdHN0cnVjdCBtdXRleFx0XHRcdG11bHRpb3BfbG9jaztcbitcdHN0cnVjdCBtdXRleFx0XHRcdHRpZV9sb2NrO1xuK1x0c3RydWN0IG11dGV4XHRcdFx0cGhhc2Vfc3RlcF9sb2NrO1xuIFxuIFx0LyogSW52YXJpYW50cyAqL1xuIFx0c3RydWN0IHpsMzA3M3hfcmVmXHRyZWZbWkwzMDczWF9OVU1fUkVGU107XG5AQCAtODcsNiArOTYsNyBAQCBzdHJ1Y3QgemwzMDczeF9kZXYge1xuIFxuIFx0LyogUGVyLWNoaXAgcGFyYW1ldGVycyAqL1xuIFx0dTY0XHRcdFx0Y2xvY2tfaWQ7XG4rXHR1MTZcdFx0XHRvdXRfc3RlcF90aW1lX21hc2s7XG4gXHR1OFx0XHRcdHBoYXNlX2F2Z19mYWN0b3I7XG4gXHRib29sXHRcdFx0ZnJlcV9tb25pdG9yO1xuIH07XG5AQCAtMzA4LDYgKzMxOCwxOSBAQCB6bDMwNzN4X2Rldl9vdXRfaXNfZW5hYmxlZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleClcbiBcdHJldHVybiB6bDMwNzN4X3N5bnRoX2lzX2VuYWJsZWQoc3ludGgpIFx1MDAyNlx1MDAyNiB6bDMwNzN4X291dF9pc19lbmFibGVkKG91dCk7XG4gfVxuIFxuKy8qKlxuKyAqIHpsMzA3M3hfZGV2X291dF9pc19zdGVwcGVkIC0gY2hlY2sgaWYgb3V0cHV0IGlzIGluIHN0ZXAtdGltZSBtYXNrXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGluZGV4OiBvdXRwdXQgaW5kZXhcbisgKlxuKyAqIFJldHVybjogdHJ1ZSBpZiBvdXRwdXQgaXMgYWZmZWN0ZWQgYnkgc3RlcC10aW1lIG9wZXJhdGlvbnNcbisgKi9cbitzdGF0aWMgaW5saW5lIGJvb2xcbit6bDMwNzN4X2Rldl9vdXRfaXNfc3RlcHBlZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleClcbit7XG4rXHRyZXR1cm4gISEoemxkZXYtXHUwMDNlb3V0X3N0ZXBfdGltZV9tYXNrIFx1MDAyNiBCSVQoaW5kZXgpKTtcbit9XG4rXG4gLyoqXG4gICogemwzMDczeF9kZXZfb3V0X2RwbGxfZ2V0IC0gZ2V0IERQTEwgSUQgdGhlIG91dHB1dCBpcyBkcml2ZW4gYnlcbiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcbmluZGV4IDA0ODhhZTZhYzQ4NmMuLmE2ODZkZDUyYmZhYzkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuY1xuQEAgLTIsNiArMiw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2J1Zy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29udGFpbmVyX29mLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZfcHJpbnRrLmhcdTAwM2VcbkBAIC0xMyw2ICsxNCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3ByaW50Zi5oXHUwMDNlXG4gXG5AQCAtMjI3NSw0NSArMjI3NywzNzUgQEAgemwzMDczeF9kcGxsX2luaXRfZmluZV9waGFzZV9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcbiBcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfU1lOVEhfUEhBU0VfU0hJRlRfQ1RSTCwgMHgwMSk7XG4gfVxuIFxuKy8qIE1heGltdW0gZnJlcXVlbmN5IGFkanVzdG1lbnQ6ICstMSUgb2Ygbm9taW5hbCBpbiBwcGIgKi9cbisjZGVmaW5lIFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESlx0MTAwMDAwMDBcbitcbiAvKipcbi0gKiB6bDMwNzN4X2RwbGxfYWxsb2MgLSBhbGxvY2F0ZSBEUExMIGRldmljZVxuLSAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuLSAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlclxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCAtIHJlYWQgY3VycmVudCB0aW1lIGZyb20gVG9EIGNvdW50ZXJzXG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4rICogQHRzOiB0aW1lc3BlYyB0byBzdG9yZSBjdXJyZW50IHRpbWVcbisgKiBAc3RzOiBvcHRpb25hbCBzeXN0ZW0gdGltZXN0YW1wIHBhaXIgZm9yIGNyb3NzLXRpbWVzdGFtcGluZ1xuICAqXG4tICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cylcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRwbGwtXHUwMDNlZGV2LCB6bGRwbGwtXHUwMDNlaWQsIGZhbHNlLCB0cywgc3RzKTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQgLSBzZXQgVG9EIGNvdW50ZXJzIHRvIGdpdmVuIHRpbWVcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbisgKiBAdHM6IHRpbWVzcGVjIHdpdGggdGltZSB0byBzZXRcbiAgKlxuLSAqIFJldHVybjogcG9pbnRlciB0byBEUExMIGRldmljZSBvbiBzdWNjZXNzLCBlcnJvciBwb2ludGVyIG9uIGVycm9yXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiAgKi9cbi1zdHJ1Y3QgemwzMDczeF9kcGxsICpcbi16bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXG4rXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpXG4ge1xuLVx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsO1xuK1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXG4rXHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuIFxuLVx0emxkcGxsID0ga3phbGxvY19vYmooKnpsZHBsbCk7XG4tXHRpZiAoIXpsZHBsbClcbi1cdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuIFxuLVx0emxkcGxsLVx1MDAzZWRldiA9IHpsZGV2O1xuLVx0emxkcGxsLVx1MDAzZWlkID0gY2g7XG4tXHRtdXRleF9pbml0KFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbi1cdElOSVRfTElTVF9IRUFEKFx1MDAyNnpsZHBsbC1cdTAwM2VwaW5zKTtcbitcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCwgKnRzKTtcbit9XG4gXG4tXHRyZXR1cm4gemxkcGxsO1xuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwIC0gYWRqdXN0IHN1Yi1zZWNvbmQgdGltZSB2aWEgcGhhc2Ugc3RlcFxuKyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbFxuKyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzIChtdXN0IGJlIHdpdGhpbiAoLU5TRUNfUEVSX1NFQyxcbisgKiAgICAgICAgIE5TRUNfUEVSX1NFQykpXG4rICpcbisgKiBVc2VzIHRoZSBvdXRwdXQgcGhhc2Ugc3RlcCBtZWNoYW5pc20gd2l0aCB0b2Rfc3RlcD0xIHRvIGFkanVzdCBib3RoXG4rICogdGhlIG91dHB1dCBjbG9jayBwaGFzZSBhbmQgdGhlIFRvRCBjb3VudGVyIHNpbXVsdGFuZW91c2x5LiBUaGlzIGtlZXBzXG4rICogb3V0cHV0cyBhbmQgVG9EIGNvaGVyZW50LiBPbmx5IHZhbGlkIGZvciBOQ08uXG4rICpcbisgKiBPdXRwdXRzIGFyZSBncm91cGVkIGJ5IHN5bnRoZXNpemVyIHNpbmNlIHRoZSBwaGFzZSBzdGVwIHZhbHVlIGlzIGluXG4rICogc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzLiBUaGUgZmlyc3Qgc3ludGggZ3JvdXAgd2l0aCBlbmFibGVkIG91dHB1dHNcbisgKiB1c2VzIHRvZF9zdGVwIHRvIGFkanVzdCBib3RoIG91dHB1dHMgYW5kIHRoZSBUb0QgY291bnRlci4gUmVtYWluaW5nXG4rICogZ3JvdXBzIHN0ZXAgb3V0cHV0cyBvbmx5LiBJZiBubyBzeW50aCBoYXMgZW5hYmxlZCBvdXRwdXRzLCB0aGUgVG9EXG4rICogY291bnRlciBpcyBzdGVwcGVkIGFsb25lIHVzaW5nIGFuIGVtcHR5IG91dHB1dCBtYXNrICh0aGUgRlcgdXNlc1xuKyAqIHRoZSBmaXJzdCBlbmFibGVkIHN5bnRoJ3MgcGVyaW9kIGZvciB0aGUgY29udmVyc2lvbikuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVPUE5PVFNVUFAgaWYgbm8gc3ludGhzIGF2YWlsYWJsZSwgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLFxuK1x0XHRcdFx0XHQgICAgICAgczY0IGRlbHRhKVxuK3tcbitcdHUxNiBzeW50aF9tYXNrW1pMMzA3M1hfTlVNX1NZTlRIU10gPSB7fTtcbitcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuK1x0Y29uc3Qgc3RydWN0IHpsMzA3M3hfc3ludGggKnN5bnRoO1xuK1x0c3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbjtcbitcdHUzMiBmaXJzdF9zeW50aF9mcmVxID0gMDtcbitcdGJvb2wgdG9kX3N0ZXBwZWQgPSBmYWxzZTtcbitcdHMzMiBzdGVwX2N5Y2xlcztcbitcdHUzMiBzeW50aF9mcmVxO1xuK1x0aW50IHJjO1xuK1x0dTggaTtcbitcbitcdC8qIEJ1aWxkIHBlci1zeW50aCBvdXRwdXQgbWFza3MgZnJvbSByZWdpc3RlcmVkIG91dHB1dCBwaW5zICovXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBpbiwgXHUwMDI2emxkcGxsLVx1MDAzZXBpbnMsIGxpc3QpIHtcbitcdFx0dTggb3V0X2lkLCBzeW50aF9pZDtcbitcbitcdFx0aWYgKHpsMzA3M3hfZHBsbF9pc19pbnB1dF9waW4ocGluKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0b3V0X2lkID0gemwzMDczeF9vdXRwdXRfcGluX291dF9nZXQocGluLVx1MDAzZWlkKTtcbitcbitcdFx0aWYgKCF6bDMwNzN4X2Rldl9vdXRfaXNfc3RlcHBlZCh6bGRldiwgb3V0X2lkKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0c3ludGhfaWQgPSB6bDMwNzN4X2Rldl9vdXRfc3ludGhfZ2V0KHpsZGV2LCBvdXRfaWQpO1xuK1x0XHRpZiAoc3ludGhfaWQgXHUwMDNlPSBaTDMwNzNYX05VTV9TWU5USFMpIHtcbitcdFx0XHRkZXZfd2Fybih6bGRldi1cdTAwM2VkZXYsIFwiVW5leHBlY3RlZCBzeW50aCBpZCBmb3IgT1VUJXVcXG5cIixcbitcdFx0XHRcdCBvdXRfaWQpO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXHRcdHN5bnRoX21hc2tbc3ludGhfaWRdIHw9IEJJVChvdXRfaWQpO1xuK1x0fVxuK1xuK1x0LyogUHJvY2VzcyBlYWNoIHN5bnRoIGdyb3VwICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBaTDMwNzNYX05VTV9TWU5USFM7IGkrKykge1xuK1x0XHRzeW50aCA9IHpsMzA3M3hfc3ludGhfc3RhdGVfZ2V0KHpsZGV2LCBpKTtcbitcdFx0aWYgKCF6bDMwNzN4X3N5bnRoX2lzX2VuYWJsZWQoc3ludGgpIHx8XG4rXHRcdCAgICB6bDMwNzN4X3N5bnRoX2RwbGxfZ2V0KHN5bnRoKSAhPSB6bGRwbGwtXHUwMDNlaWQpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHN5bnRoX2ZyZXEgPSB6bDMwNzN4X3N5bnRoX2ZyZXFfZ2V0KHN5bnRoKTtcbitcbitcdFx0LyogUmVtZW1iZXIgZmlyc3QgZW5hYmxlZCBzeW50aCBmcmVxIGZvciBUb0Qtb25seSBmYWxsYmFjayAqL1xuK1x0XHRpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpXG4rXHRcdFx0Zmlyc3Rfc3ludGhfZnJlcSA9IHN5bnRoX2ZyZXE7XG4rXG4rXHRcdGlmICghc3ludGhfbWFza1tpXSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0LyogU2FmZSBmb3IgczMyOiBtYXggc3ludGggZnJlcSBpcyA3NTAgTUh6ICovXG4rXHRcdHN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIHN5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7XG4rXG4rXHRcdHJjID0gemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCxcbitcdFx0XHRcdFx0ICAgICBzeW50aF9tYXNrW2ldLCBzdGVwX2N5Y2xlcyxcbitcdFx0XHRcdFx0ICAgICAhdG9kX3N0ZXBwZWQpO1xuK1x0XHRpZiAocmMpIHtcbitcdFx0XHRpZiAodG9kX3N0ZXBwZWQpIHtcbitcdFx0XHRcdGRldl93YXJuKHpsZGV2LVx1MDAzZWRldixcbitcdFx0XHRcdFx0IFwiUGFydGlhbCBwaGFzZSBzdGVwIGZhaWx1cmVcXG5cIik7XG4rXHRcdFx0XHRyZXR1cm4gMDtcbitcdFx0XHR9XG4rXHRcdFx0cmV0dXJuIHJjO1xuK1x0XHR9XG4rXHRcdHRvZF9zdGVwcGVkID0gdHJ1ZTtcbitcdH1cbitcbitcdGlmICghZmlyc3Rfc3ludGhfZnJlcSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0LyogTm8gZW5hYmxlZCBvdXRwdXRzIGZvdW5kOyBzdGVwIFRvRCBjb3VudGVyIG9ubHkgdXNpbmcgdGhlXG4rXHQgKiBmaXJzdCBlbmFibGVkIHN5bnRoJ3MgcGVyaW9kIChlbXB0eSBvdXRwdXQgbWFzaykuXG4rXHQgKi9cbitcdGlmICghdG9kX3N0ZXBwZWQpIHtcbitcdFx0c3RlcF9jeWNsZXMgPSBkaXZfczY0KGRlbHRhICogZmlyc3Rfc3ludGhfZnJlcSwgTlNFQ19QRVJfU0VDKTtcbitcdFx0cmV0dXJuIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsIDAsXG4rXHRcdFx0XHRcdCAgICAgICBzdGVwX2N5Y2xlcywgdHJ1ZSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gLyoqXG4tICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlXG4tICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lIC0gYWRqdXN0IFBUUCBjbG9jayB0aW1lXG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4rICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHNcbiAgKlxuLSAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuXG4rICogRm9yIE5DTywgbGFyZ2UgZGVsdGFzIChcdTAwM2U9IDEgc2Vjb25kKSBhcmUgc3BsaXQgaW50byBhIFRvRFxuKyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciB0aGUgc2Vjb25kcyBwYXJ0IGFuZCBhbiBvdXRwdXQgcGhhc2Ugc3RlcCBmb3JcbisgKiB0aGUgc3ViLXNlY29uZCByZW1haW5kZXIuIFN1Yi1zZWNvbmQgZGVsdGFzIHVzZSBwaGFzZSBzdGVwIGRpcmVjdGx5LFxuKyAqIGZhbGxpbmcgYmFjayB0byBUb0QgcmVhZC1tb2RpZnktd3JpdGUgaWYgcGhhc2Ugc3RlcCBpcyB1bmF2YWlsYWJsZS5cbisgKiBJbiBBVVRPL1JFRkxPQ0sgbW9kZXMsIGxhcmdlIGRlbHRhcyBhcmUgc3BsaXQgaW50byBUb0RcbisgKiByZWFkLW1vZGlmeS13cml0ZSBmb3Igc2Vjb25kcyBhbmQgVElFIHdyaXRlIGZvciB0aGUgc3ViLXNlY29uZFxuKyAqIHJlbWFpbmRlci4gU3ViLXNlY29uZCBkZWx0YXMgdXNlIFRJRSB3cml0ZSBkaXJlY3RseS5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4gICovXG4tdm9pZFxuLXpsMzA3M3hfZHBsbF9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHM2NCBkZWx0YSlcbiB7XG4tXHRXQVJOKHpsZHBsbC1cdTAwM2VkcGxsX2RldiwgXCJEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXFxuXCIpO1xuK1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXG4rXHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuK1x0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4rXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xuK1x0Ym9vbCBzZWNfYWRqdXN0ZWQgPSBmYWxzZTtcbitcdHN0cnVjdCB0aW1lc3BlYzY0IHRzO1xuK1x0aW50IHJjO1xuIFxuLVx0bXV0ZXhfZGVzdHJveShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4tXHRrZnJlZSh6bGRwbGwpO1xuK1x0aWYgKCFkZWx0YSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuK1x0LyogTW9kZXMgd2l0aG91dCBwaGFzZSBzdGVwIG9yIFRJRSB1c2UgcGxhaW4gVG9EIGFkanVzdCAqL1xuK1x0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCk7XG4rXHRpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKVxuK1x0XHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCxcbitcdFx0XHRcdFx0ICAgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTtcbitcbitcdC8qIFNwbGl0IG9mZiBzZWNvbmRzIHZpYSBUb0QgcmVhZC1tb2RpZnktd3JpdGUgc28gdGhlIHN1Yi1zZWNvbmRcbitcdCAqIHJlbWFpbmRlciBjYW4gYmUgYXBwbGllZCB0aHJvdWdoIHRoZSBvdXRwdXQtY29oZXJlbnQgbWVjaGFuaXNtXG4rXHQgKiAocGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUpLlxuK1x0ICovXG4rXHRpZiAoZGVsdGEgXHUwMDNlPSBOU0VDX1BFUl9TRUMgfHwgZGVsdGEgXHUwMDNjPSAtTlNFQ19QRVJfU0VDKSB7XG4rXHRcdHMzMiByZW1haW5kZXI7XG4rXG4rXHRcdHRzLnR2X3NlYyA9IGRpdl9zNjRfcmVtKGRlbHRhLCBOU0VDX1BFUl9TRUMsIFx1MDAyNnJlbWFpbmRlcik7XG4rXHRcdHRzLnR2X25zZWMgPSAwO1xuK1x0XHRkZWx0YSA9IHJlbWFpbmRlcjtcbitcbitcdFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCB0cyk7XG4rXHRcdGlmIChyYylcbitcdFx0XHRyZXR1cm4gcmM7XG4rXG4rXHRcdC8qIE5vIHN1Yi1zZWNvbmQgcmVtYWluZGVyLCBkb25lICovXG4rXHRcdGlmICghZGVsdGEpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXG4rXHRcdC8qIFdhaXQgZm9yIHRoZSBUb0Qgd3JpdGUgdG8gYmUgYXBwbGllZCBhdCB0aGUgMSBIeiBlZGdlXG4rXHRcdCAqIGJlZm9yZSBpc3N1aW5nIHBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlLCBzbyB0aGUgcGVuZGluZ1xuK1x0XHQgKiBXUl9ORVhUXzFIWiBkb2VzIG5vdCBvdmVyd3JpdGUgdGhlIHN1Yi1zZWNvbmQgYWRqdXN0bWVudC5cbitcdFx0ICovXG4rXHRcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQpO1xuK1x0XHRpZiAocmMpXG4rXHRcdFx0cmV0dXJuIHJjO1xuK1xuK1x0XHRzZWNfYWRqdXN0ZWQgPSB0cnVlO1xuK1x0fVxuK1xuK1x0LyogQXBwbHkgc3ViLXNlY29uZCBkZWx0YSB2aWEgcGhhc2Ugc3RlcCAoTkNPKSBvciBUSUUgd3JpdGUgKi9cbitcdGlmICh6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikpIHtcbitcdFx0cmMgPSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCh6bGRwbGwsIGRlbHRhKTtcbitcdFx0aWYgKCFyYylcbitcdFx0XHRyZXR1cm4gMDtcbitcdH0gZWxzZSB7XG4rXHRcdHJjID0gemwzMDczeF9jaGFuX3RpZV93cml0ZSh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCBkZWx0YSk7XG4rXHRcdGlmICghcmMpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHQvKiBQaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSBmYWlsZWQsIGZhbGwgYmFjayB0byBUb0QgYWRqdXN0ICovXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsXG4rXHRcdFx0XHQgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTtcbitcbitcdC8qIEluIHRoZSB1bmxpa2VseSBldmVudCB0aGF0IGJvdGggcGhhc2Ugc3RlcC9USUUgd3JpdGUgYW5kIGZhbGxiYWNrXG4rXHQgKiBUb0QgYWRqdXN0IGZhaWwgYWZ0ZXIgc2Vjb25kcyB3ZXJlIGFscmVhZHkgY29tbWl0dGVkLCByZXR1cm5cbitcdCAqIHN1Y2Nlc3MgdG8gcHJldmVudCB0aGUgUFRQIHNlcnZvIGZyb20gcmV0cnlpbmcgdGhlIGZ1bGwgZGVsdGEgYW5kXG4rXHQgKiBhcHBseWluZyBzZWNvbmRzIGFnYWluLiBUaGUgc3ViLXNlY29uZCByZXNpZHVhbCB3aWxsIHNlbGYtY29ycmVjdFxuK1x0ICogaW4gdGhlIG5leHQgc2Vydm8gY3ljbGUuXG4rXHQgKi9cbitcdGlmIChyYyBcdTAwMjZcdTAwMjYgc2VjX2FkanVzdGVkKSB7XG4rXHRcdGRldl93YXJuKHpsZGV2LVx1MDAzZWRldixcbitcdFx0XHQgXCJTdWItc2Vjb25kIGFkanVzdG1lbnQgZmFpbGVkIGFmdGVyIHNlY29uZHMgYXBwbGllZFxcblwiKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmM7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSAtIGFkanVzdCBQVFAgY2xvY2sgZnJlcXVlbmN5XG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4rICogQHNjYWxlZF9wcG06IGZyZXF1ZW5jeSBhZGp1c3RtZW50IGluIHNjYWxlZCBwcG0gKHBwbSAqIDJeMTYpXG4rICpcbisgKiBPbmx5IHN1cHBvcnRlZCBmb3IgTkNPLiBXcml0ZXMgdGhlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgcmVnaXN0ZXIuXG4rICpcbisgKiBSZXR1cm46XG4rICogKiAlMFx0XHRcdC0gc3VjY2VzcyBvciBAc2NhbGVkX3BwbSBpcyB6ZXJvIChuby1vcClcbisgKiAqICUtRU9QTk9UU1VQUFx0LSBOQ08gcGluIGlzIG5vdCBjb25uZWN0ZWQgYW5kIEBzY2FsZWRfcHBtIGlzIG5vbi16ZXJvXG4rICogKiBuZWdhdGl2ZVx0XHQtIG90aGVyIGVycm9yXG4rICovXG4rc3RhdGljIGludFxuK3psMzA3M3hfZHBsbF9wdHBfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGxvbmcgc2NhbGVkX3BwbSlcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xuK1x0czY0IG9mZnNldDtcbitcbitcdC8qIENvbnZlcnQgc2NhbGVkX3BwbSB0byBkZl9vZmZzZXQgaW4gMl4tNDggc3RlcHM6XG4rXHQgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDJeMzIpIC8gMTBeNlxuK1x0ICpcbitcdCAqIFNpbXBsaWZ5IHRvIGF2b2lkIG92ZXJmbG93OlxuK1x0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjI2KSAvIDVeNlxuK1x0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiA2NzEwODg2NCkgLyAxNTYyNVxuK1x0ICovXG4rXHRvZmZzZXQgPSAtZGl2X3M2NCgoczY0KXNjYWxlZF9wcG0gKiA2NzEwODg2NExMLCAxNTYyNSk7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuK1x0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkcGxsLVx1MDAzZWRldiwgemxkcGxsLVx1MDAzZWlkKTtcbitcdGlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKVxuK1x0XHRyZXR1cm4gc2NhbGVkX3BwbSA/IC1FT1BOT1RTVVBQIDogMDtcbitcdGlmIChvZmZzZXQgPT0gY2hhbi1cdTAwM2VkZl9vZmZzZXQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCwgb2Zmc2V0KTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSAtIGFkanVzdCBQVFAgY2xvY2sgcGhhc2VcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbisgKiBAZGVsdGE6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHNcbisgKlxuKyAqIE9ubHkgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMuIFVzZXMgVElFIHdyaXRlIGZvclxuKyAqIG5hbm9zZWNvbmQgcmVzb2x1dGlvbiBwaGFzZSBhZGp1c3RtZW50LlxuKyAqXG4rICogUmV0dXJuOlxuKyAqICogJTBcdFx0XHQtIHN1Y2Nlc3Mgb3IgQGRlbHRhIGlzIHplcm8gKG5vLW9wKVxuKyAqICogJS1FT1BOT1RTVVBQXHQtIG1vZGUgZG9lcyBub3Qgc3VwcG9ydCBUSUUgYW5kIEBkZWx0YSBpcyBub24temVyb1xuKyAqICogbmVnYXRpdmVcdFx0LSBvdGhlciBlcnJvclxuKyAqL1xuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHMzMiBkZWx0YSlcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbitcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XG4rXG4rXHRpZiAoIWRlbHRhKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXG4rXHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLVx1MDAzZWlkKTtcbitcbitcdGlmICghemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRyZXR1cm4gemwzMDczeF9jaGFuX3RpZV93cml0ZSh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCBkZWx0YSk7XG4rfVxuK1xuK3N0YXRpYyBzMzJcbit6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyBfX2Fsd2F5c191bnVzZWQpXG4re1xuK1x0LyogSFcgbGltaXRzIFRJRSB3cml0ZSB0byArLTEgc2Vjb25kLiBSZXR1cm4gdGhlIGNvbnN0YW50IEhXXG4rXHQgKiBsaW1pdCBhbmQgbGV0IGFkanBoYXNlIGhhbmRsZSBtb2RlLXNwZWNpZmljIGNoZWNrcy5cbitcdCAqL1xuK1x0cmV0dXJuIE5TRUNfUEVSX1NFQyAtIDE7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvID0ge1xuK1x0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4rXHQubWF4X2Fkalx0PSBaTDMwNzNYX0RQTExfUFRQX01BWF9BREosXG4rXHQuZ2V0dGltZXg2NFx0PSB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQsXG4rXHQuc2V0dGltZTY0XHQ9IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0LFxuK1x0LmFkanRpbWVcdD0gemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lLFxuK1x0LmFkamZpbmVcdD0gemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lLFxuK1x0LmFkanBoYXNlXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2UsXG4rXHQuZ2V0bWF4cGhhc2VcdD0gemwzMDczeF9kcGxsX3B0cF9nZXRtYXhwaGFzZSxcbit9O1xuK1xuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIgLSByZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsXG4rICogQHpsZHBsbDogRFBMTCBjaGFubmVsIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3JcbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbitcdHN0cnVjdCBwdHBfY2xvY2sgKnB0cF9jbG9jaztcbitcbitcdHNucHJpbnRmKHpsZHBsbC1cdTAwM2VwdHBfaW5mby5uYW1lLCBzaXplb2YoemxkcGxsLVx1MDAzZXB0cF9pbmZvLm5hbWUpLFxuK1x0XHQgXCIlcy1kcGxsJXVcIiwgZGV2X25hbWUoemxkZXYtXHUwMDNlZGV2KSwgemxkcGxsLVx1MDAzZWlkKTtcbitcbitcdHB0cF9jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcihcdTAwMjZ6bGRwbGwtXHUwMDNlcHRwX2luZm8sIHpsZGV2LVx1MDAzZWRldik7XG4rXHRpZiAoSVNfRVJSKHB0cF9jbG9jaykpIHtcbitcdFx0ZGV2X2Vycih6bGRldi1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgRFBMTCV1XFxuXCIsXG4rXHRcdFx0emxkcGxsLVx1MDAzZWlkKTtcbitcdFx0cmV0dXJuIFBUUl9FUlIocHRwX2Nsb2NrKTtcbitcdH1cbitcbitcdHpsZHBsbC1cdTAwM2VwdHBfY2xvY2sgPSBwdHBfY2xvY2s7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyIC0gdW5yZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsXG4rICogQHpsZHBsbDogRFBMTCBjaGFubmVsIHRvIHVucmVnaXN0ZXIgUFRQIGNsb2NrIGZvclxuKyAqL1xuK3N0YXRpYyB2b2lkIHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4re1xuK1x0aWYgKCFJU19FUlJfT1JfTlVMTCh6bGRwbGwtXHUwMDNlcHRwX2Nsb2NrKSkge1xuK1x0XHRwdHBfY2xvY2tfdW5yZWdpc3Rlcih6bGRwbGwtXHUwMDNlcHRwX2Nsb2NrKTtcbitcdFx0emxkcGxsLVx1MDAzZXB0cF9jbG9jayA9IE5VTEw7XG4rXHR9XG4gfVxuIFxuIC8qKlxuQEAgLTIzOTgsNiArMjczMCw0OCBAQCB6bDMwNzN4X2RwbGxfcmVmX3N5bmNfcGFpcnNfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9hbGxvYyAtIGFsbG9jYXRlIERQTEwgZGV2aWNlXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyXG4rICpcbisgKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuXG4rICpcbisgKiBSZXR1cm46IHBvaW50ZXIgdG8gRFBMTCBkZXZpY2Ugb24gc3VjY2VzcywgZXJyb3IgcG9pbnRlciBvbiBlcnJvclxuKyAqL1xuK3N0cnVjdCB6bDMwNzN4X2RwbGwgKlxuK3psMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7XG4rXG4rXHR6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTtcbitcdGlmICghemxkcGxsKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcbitcdHpsZHBsbC1cdTAwM2VkZXYgPSB6bGRldjtcbitcdHpsZHBsbC1cdTAwM2VpZCA9IGNoO1xuK1x0emxkcGxsLVx1MDAzZXB0cF9pbmZvID0gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvO1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXHRJTklUX0xJU1RfSEVBRChcdTAwMjZ6bGRwbGwtXHUwMDNlcGlucyk7XG4rXG4rXHRyZXR1cm4gemxkcGxsO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfZnJlZSAtIGZyZWUgRFBMTCBkZXZpY2VcbisgKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmVcbisgKlxuKyAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuXG4rICovXG4rdm9pZFxuK3psMzA3M3hfZHBsbF9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbit7XG4rXHRXQVJOKHpsZHBsbC1cdTAwM2VkcGxsX2RldiwgXCJEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXFxuXCIpO1xuK1xuK1x0bXV0ZXhfZGVzdHJveShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXHRrZnJlZSh6bGRwbGwpO1xuK31cbitcbiAvKipcbiAgKiB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIgLSByZWdpc3RlciBEUExMIGRldmljZSBhbmQgYWxsIGl0cyBwaW5zXG4gICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXG5AQCAtMjQyOCw2ICsyODAyLDEzIEBAIHpsMzA3M3hfZHBsbF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4gXHRcdHJldHVybiByYztcbiBcdH1cbiBcbitcdHJjID0gemwzMDczeF9kcGxsX3B0cF9yZWdpc3Rlcih6bGRwbGwpO1xuK1x0aWYgKHJjKSB7XG4rXHRcdHpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTtcbitcdFx0emwzMDczeF9kcGxsX2RldmljZV91bnJlZ2lzdGVyKHpsZHBsbCk7XG4rXHRcdHJldHVybiByYztcbitcdH1cbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0yNDQxLDcgKzI4MjIsNyBAQCB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIHZvaWRcbiB6bDMwNzN4X2RwbGxfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4ge1xuLVx0LyogVW5yZWdpc3RlciBhbGwgcGlucyBhbmQgZHBsbCAqL1xuK1x0emwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHpsZHBsbCk7XG4gXHR6bDMwNzN4X2RwbGxfcGluc191bnJlZ2lzdGVyKHpsZHBsbCk7XG4gXHR6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXG5pbmRleCBmYWViYzQwMmJhMWI3Li45OTMyMjFkYzYzMjQ5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmhcbkBAIC01LDYgKzUsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RwbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiY29yZS5oXCJcbiBcbkBAIC0yMiw2ICsyMyw4IEBAXG4gICogQHR5cGU6IERQTEwgdHlwZSAoUFBTIG9yIEVFQylcbiAgKiBAbG9ja19zdGF0dXM6IGxhc3Qgc2F2ZWQgRFBMTCBsb2NrIHN0YXR1c1xuICAqIEBwaW5zOiBsaXN0IG9mIHBpbnNcbisgKiBAcHRwX2luZm86IFBUUCBjbG9jayBpbmZvXG4rICogQHB0cF9jbG9jazogcmVnaXN0ZXJlZCBQVFAgY2xvY2sgKG9yIE5VTEwpXG4gICovXG4gc3RydWN0IHpsMzA3M3hfZHBsbCB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRcdGxpc3Q7XG5AQCAtMzYsNiArMzksOCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsIHtcbiBcdGVudW0gZHBsbF90eXBlXHRcdFx0dHlwZTtcbiBcdGVudW0gZHBsbF9sb2NrX3N0YXR1c1x0XHRsb2NrX3N0YXR1cztcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdFx0cGlucztcbitcdHN0cnVjdCBwdHBfY2xvY2tfaW5mb1x0XHRwdHBfaW5mbztcbitcdHN0cnVjdCBwdHBfY2xvY2tcdFx0KnB0cF9jbG9jaztcbiB9O1xuIFxuIHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXG5pbmRleCBiNzBlYWQ3ZDQ0OTViLi5mM2E1ZTEyMTVhYTM2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhcbkBAIC0xNzksNiArMTc5LDIwIEBAXG4gI2RlZmluZSBaTF9EUExMX0RGX1JFQURfQ01EXHRcdFx0R0VOTUFTSygyLCAwKVxuICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRF9BQ0NfSVx0XHQ0XG4gXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTFx0XHRcdFpMX1JFRyg1LCAweDMwLCAxKVxuKyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUFx0XHRcdEdFTk1BU0soMiwgMClcbisjZGVmaW5lIFpMX0RQTExfVElFX0NUUkxfT1BfV1JcdFx0XHQ0XG4rXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTF9NQVNLXHRcdFpMX1JFRyg1LCAweDMxLCAxKVxuK1xuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX0NUUkwoX2lkeClcdFx0XHRcdFx0XFxcbitcdFpMX1JFR19JRFgoX2lkeCwgNSwgMHgzOCwgMSwgWkwzMDczWF9NQVhfQ0hBTk5FTFMsIDEpXG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX1NFTVx0XHRcdEJJVCg0KVxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURcdFx0XHRHRU5NQVNLKDMsIDApXG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWlx0MVxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVFx0XHQ4XG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9ORVhUXzFIWlx0OVxuK1xuICNkZWZpbmUgWkxfUkVHX0RQTExfTUVBU19DVFJMXHRcdFx0WkxfUkVHKDUsIDB4NTAsIDEpXG4gI2RlZmluZSBaTF9EUExMX01FQVNfQ1RSTF9FTlx0XHRcdEJJVCgwKVxuICNkZWZpbmUgWkxfRFBMTF9NRUFTX0NUUkxfQVZHX0ZBQ1RPUlx0XHRHRU5NQVNLKDcsIDQpXG5AQCAtMTkzLDYgKzIwNyw5IEBAXG4gXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgKiBSZWdpc3RlciBQYWdlcyA2LTcsIERQTEwgRGF0YVxuKyAqXG4rICogUGVyLWNoYW5uZWwgcmVnaXN0ZXJzIHdpdGggc3RyaWRlIDB4MjAuIENoYW5uZWxzIDAtMyByZXNpZGUgb24gcGFnZSA2LFxuKyAqIGNoYW5uZWwgNCBvbiBwYWdlIDcuXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gXG4gI2RlZmluZSBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeClcdFx0XHRcdFx0XFxcbkBAIC0yMDIsNiArMjE5LDI0IEBAXG4gXHQoKF9pZHgpIFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfREZfT0ZGU0VUXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfREZfT0ZGU0VUXzQpXG4gI2RlZmluZSBaTF9EUExMX0RGX09GRlNFVF9VTktOT1dOXHRTNjRfTUlOXG4gXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KVx0XHRcdFx0XHRcXFxuK1x0WkxfUkVHX0lEWChfaWR4LCA2LCAweDBDLCA2LCA0LCAweDIwKVxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEFfNFx0XHRcdFpMX1JFRyg3LCAweDBDLCA2KVxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEEoX2lkeClcdFx0XHRcdFx0XFxcbitcdCgoX2lkeCkgXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RJRV9EQVRBXzQpXG4rXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG4rXHRaTF9SRUdfSURYKF9pZHgsIDYsIDB4MTIsIDYsIDQsIDB4MjApXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzRcdFx0XHRaTF9SRUcoNywgMHgxMiwgNilcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUMoX2lkeClcdFx0XHRcdFx0XFxcbitcdCgoX2lkeCkgXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVE9EX1NFQ180KVxuK1xuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG4rXHRaTF9SRUdfSURYKF9pZHgsIDYsIDB4MTgsIDQsIDQsIDB4MjApXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlNfNFx0XHRcdFpMX1JFRyg3LCAweDE4LCA0KVxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TKF9pZHgpXHRcdFx0XHRcdFxcXG4rXHQoKF9pZHgpIFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfVE9EX05TXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVE9EX05TXzQpXG4rXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICogUmVnaXN0ZXIgUGFnZSA5LCBTeW50aCBhbmQgT3V0cHV0XG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuQEAgLTIyMSw2ICsyNTYsMjMgQEBcbiAjZGVmaW5lIFpMX09VVFBVVF9DVFJMX0VOXHRcdFx0QklUKDApXG4gI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9TWU5USF9TRUxcdFx0R0VOTUFTSyg2LCA0KVxuIFxuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTS1x0XHRaTF9SRUcoOSwgMHgzNiwgMilcbitcbisjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMXHRcdFpMX1JFRyg5LCAweDM4LCAxKVxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9EUExMXHRcdEdFTk1BU0soNiwgNClcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVBcdEJJVCgzKVxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUFx0XHRHRU5NQVNLKDEsIDApXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX05PTkVcdDBcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfUkVTRVRcdDFcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfUkVBRFx0MlxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURVx0M1xuK1xuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUlx0XHRaTF9SRUcoOSwgMHgzOSwgMSlcbitcbisjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLXHRcdFpMX1JFRyg5LCAweDNhLCAyKVxuK1xuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0RBVEFcdFx0WkxfUkVHKDksIDB4M2MsIDQpXG4rXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgKiBSZWdpc3RlciBQYWdlIDEwLCBSZWYgTWFpbGJveFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTE6NTI6NDkuMTY3MDk2MzcxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjEwNDAwMTYxODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhY2hpbmcgdGhlIFBUUCBDbG9jayBTdXBwb3J0IGluIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIERyaXZlcioqXG5cbk9rYXksIHNvIHdlIGhhdmUgdGhpcyBwYXRjaCBhZGRpbmcgUFRQIGNsb2NrIHN1cHBvcnQgdG8gdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyIChgZHJpdmVycy9kcGxsL3psMzA3M3gvYCkuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBjYW4gd2UgYWN0dWFsbHkgKnJlYWNoKiB0aGlzIGNvZGUgYW5kIHdoYXQncyBpbnZvbHZlZCBpbiBnZXR0aW5nIGl0IHJ1bm5pbmc/XG5cbkZpcnN0LCB0aGUgcGF0Y2ggbW9kaWZpZXMgYEtjb25maWdgIHRvIGRlcGVuZCBvbiBgUFRQXzE1ODhfQ0xPQ0tgLCB3aGljaCBtYWtlcyBzZW5zZS4gSXQncyBhZGRpbmcgZnVuY3Rpb25zIHRvIGBjaGFuLmNgIGZvciBUaW1lIG9mIERheSAoVG9EKSByZWFkL3dyaXRlL2FkanVzdCwgVElFIHdyaXRlLCBhbmQgcGhhc2Ugc3RlcHBpbmcsIGFuZCBpdCByZWdpc3RlcnMgYSBQVFAgY2xvY2sgaW4gYGRwbGwuY2AgdXNpbmcgYHB0cF9jbG9ja19yZWdpc3RlcmAuIFRoYXQncyBhIHByZXR0eSBzaWduaWZpY2FudCBhZGRpdGlvbiDigJMgaXQncyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3b3J0aCBjb25zaWRlcmluZyBmb3IgZnV6emluZy5cblxuVGhlIGRyaXZlciBpcyBmb3IgTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlcywgYW5kIGl0IHVzZXMgSTJDL1NQSS4gIENhbiB3ZSBnZXQgdG8gdGhpcyBpbiBRRU1VLCBvciBhbnkgb3RoZXIgdmlydHVhbCBlbnZpcm9ubWVudD8gIEkyQy9TUEkgZHJpdmVycyBjYW4gdXN1YWxseSBiZSBpbnN0YW50aWF0ZWQgdmlhIGRldmljZSB0cmVlLCBzeXNmcywgb3IgZXZlbiBhbiBlbXVsYXRvci4gIEV2ZW4gd2l0aG91dCBhbiBlbXVsYXRvciwgd2UgY2FuIHByb2JlIGl0IHZpYSBzeXNmcy4gSSBjYW4sIGZvciBleGFtcGxlLCBpbnN0YW50aWF0ZSB0aGUgSTJDIGRldmljZSB2aWEgYGVjaG8gemwzMDczeCAweDEwIFx1MDAzZSAvc3lzL2J1cy9pMmMvZGV2aWNlcy9pMmMtMC9uZXdfZGV2aWNlYC4gV2FpdCBhIHNlY29uZCEgU3l6a2FsbGVyISBTeXprYWxsZXIgY2FuIGZ1enogSTJDIGFuZCBTUEkgZGV2aWNlcyB1c2luZyBgc3l6X2kyY2AgYW5kIGBzeXpfc3BpYCBvciBieSBpbnN0YW50aWF0aW5nIHRoZW0hICBUaGF0J3MgcGVyZmVjdC4gIFNvLCB0aGUgYWRkZWQgUFRQIGNsb2NrIGludGVyZmFjZSBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSB2aWEgYC9kZXYvcHRwWGAuIFN5emthbGxlciBjYW4gZWFzaWx5IGludGVyYWN0IHdpdGggdGhhdC4gIFRoZSBkcml2ZXIgaXRzZWxmIGxldmVyYWdlcyByZWdtYXAgb3ZlciBJMkMvU1BJLlxuXG5MZXQncyBkaXZlIGludG8gdGhlIHNwZWNpZmljcyBvZiB0aGlzIFBUUCBjbG9jayBpbnRlcmZhY2UuIFRoZSBjb3JlIGZ1bmN0aW9ucyBJIG5lZWQgdG8gZm9jdXMgb24gYXJlOlxuXG4qICAgYHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NGBcbiogICBgemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjRgXG4qICAgYHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZWBcbiogICBgemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lYFxuKiAgIGB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlYFxuKiAgIGB6bDMwNzN4X2NoYW5fdG9kX3JlYWRgXG4qICAgYHpsMzA3M3hfY2hhbl90b2Rfd3JpdGVgXG4qICAgYHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0YFxuKiAgIGB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldGBcbiogICBgemwzMDczeF9jaGFuX3RpZV93cml0ZWBcbiogICBgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXBgXG5cblRoZXNlIGZ1bmN0aW9ucyBhcmUgaG9va2VkIGludG8gYHB0cF9jbG9ja19pbmZvYCwgd2hpY2ggaXMgYSBzdGFuZGFyZCBhcHByb2FjaC4gIFRoZSBgcHRwX2Nsb2NrX2luZm9gIHN0cnVjdCBpdHNlbGYgbG9va3Mgbm9ybWFsLCBzdGFuZGFyZCBQVFAgY2xvY2sgb3BzLlxuXG5XZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSd2ZSBnb3QgYWxsIHRoZSBuZWNlc3NhcnkgY29uZmlncyBlbmFibGVkLiBJdCBsb29rcyBsaWtlIHdlIG5lZWQgYFpMMzA3M1hfSTJDYCwgYFpMMzA3M1hfU1BJYCwgYFBUUF8xNTg4X0NMT0NLYCwgYERQTExgLCBgSTJDYCwgYFNQSWAsIGFuZCBgTkVUYC4gIEEgcXVpY2sgbG9vayBhdCBgZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ2AgY29uZmlybXMgdGhlc2UgZGVwZW5kZW5jaWVzLiBgWkwzMDczWGAgaXMgc2VsZWN0ZWQgYnkgYm90aCBgWkwzMDczWF9JMkNgIGFuZCBgWkwzMDczWF9TUElgLCBzbyBlbmFibGluZyBlaXRoZXIgb2YgdGhlbSB3aWxsIGVuYWJsZSB0aGUgd2hvbGUgdGhpbmcuXG5cbkdpdmVuIHRoYXQgU3l6a2FsbGVyIGNhbiBlbXVsYXRlIEkyQyBhbmQgU1BJIGRldmljZXMsIHdlIGhhdmUgYSBjbGVhciBwYXRoIHRvIHJlYWNoIHRoZSBjb2RlLiBUaGUgY3JpdGljYWwgZnVuY3Rpb25zIG5vdyBhcmUgdGhlIFBUUCBjbG9jayBmdW5jdGlvbnMsIGFzIHdlbGwgYXMgdGhlIGNoYW5uZWwgZnVuY3Rpb25zIHRoYXQgYWZmZWN0IFRvRCwgcGhhc2UgYWRqdXN0bWVudHMsIGFuZCBUSUUgd3JpdGVzLiBJJ20gZ29pbmcgdG8gcnVuIGEgcXVpY2sgZ3JlcCB0byBtYWtlIHN1cmUgdGhvc2UgZnVuY3Rpb25zIGFyZSBkZWZpbml0ZWx5IHRoZXJlIGFuZCBkZWZpbmVkLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBiZWZvcmUgZ29pbmcgYW55IGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTEyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYwNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDExOjUzOjEwLjIwNzExNDY0NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTU0NjU0NTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9MjMxMD1zdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0yMzIxLS8qKlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoyMzIyOiAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwIC0gYWRqdXN0IHN1Yi1zZWNvbmQgdGltZSB2aWEgcGhhc2Ugc3RlcFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0yMzIzLSAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTIzMzktICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjIzNDA6c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTIzNDEtXFx0XFx0XFx0XFx0XFx0ICAgICAgIHM2NCBkZWx0YSlcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0yNDIzLS8qKlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoyNDI0OiAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSAtIGFkanVzdCBQVFAgY2xvY2sgdGltZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0yNDI1LSAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTI0MzctICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjI0Mzg6c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBzNjQgZGVsdGEpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTI0Mzkte1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTI0OTEtXFx0aWYgKHpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSkge1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoyNDkyOlxcdFxcdHJjID0gemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoemxkcGxsLCBkZWx0YSk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTI0OTMtXFx0XFx0aWYgKCFyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz0yNjAyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvID0ge1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTI2MDYtXFx0LnNldHRpbWU2NFxcdD0gemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjI2MDc6XFx0LmFkanRpbWVcXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjYwOC1cXHQuYWRqZmluZVxcdD0gemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMTo1MzoxMS43NjE3NzMwNzVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDI4OTgxNDU1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgdGhlIFpMMzA3M1ggQ2hhbm5lbCBUaW1lLW9mLURheSBBZGp1c3RtZW50IEZ1bmN0aW9uKipcblxuUmlnaHQsIHRoZSBidWlsZGluZyBibG9ja3MgYXJlIGluIHBsYWNlLiBUaGUgY29yZSBmdW5jdGlvbmFsaXRpZXMgSSBuZWVkIGFyZSBhdmFpbGFibGUuIE5vdywgbGV0J3MgZHJpbGwgZG93biBpbnRvIHRoZSBkZXRhaWxzLiBJIG5lZWQgdG8gZXhhbWluZSB0aGUgYHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0YCBmdW5jdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgdGltZS1vZi1kYXkgYWRqdXN0bWVudHMgZm9yIGVhY2ggY2hhbm5lbCBhcmUgaGFuZGxlZCwgd2hpY2ggaXMgY3JpdGljYWwuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBhbGdvcml0aG0sIHRoZSBkYXRhIHN0cnVjdHVyZXMgaXQgbWFuaXB1bGF0ZXMsIGFuZCB0aGUgcG90ZW50aWFsIGVycm9yIGNvbmRpdGlvbnMuIEkgbmVlZCB0byBjb25zaWRlciB0aGluZ3MgbGlrZSBob3cgaXQgaGFuZGxlcyBsZWFwIHNlY29uZHMsIHRpbWUgem9uZSBvZmZzZXRzLCBhbmQgYW55IGNsb2NrIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMgdGhhdCBtaWdodCBpbXBhY3QgdGhlIGZpbmFsIFRPRCBjYWxjdWxhdGlvbi4gVGhpcyBpcyB0aGUgaGVhcnQgb2YgdGhlIHRpbWluZyBzb2x1dGlvbi4gTGV0J3MgZGlnIGluIGFuZCBtYWtlIHN1cmUgaXQgaXMgcm9idXN0IGFuZCBwcmVjaXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTUzNCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDExOjUzOjIyLjA1MTU5MDIxOFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzE2MTg4MTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpsMzA3M3hfY2hhbl90b2RfYWRqdXN0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYz0zNjM9aW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzg1LS8qKlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozODY6ICogemwzMDczeF9jaGFuX3RvZF9hZGp1c3QgLSBhdG9taWMgVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIHdpdGggcm9sbG92ZXIgZ3VhcmRcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzg3LSAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQwMC0jZGVmaW5lIFpMX1RPRF9NQVhfUkVUUklFU1xcdDIwXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQwMTppbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQwMi1cXHRcXHRcXHQgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg9NTE9aW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTUyLVxcdFxcdFxcdCAgIHN0cnVjdCB0aW1lc3BlYzY0IHRzKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NTM6aW50IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC01NC1cXHRcXHRcXHQgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTI0Mzg9c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBzNjQgZGVsdGEpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjQ1Ni1cXHQgICAgIXpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjaGFuKSlcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6MjQ1NzpcXHRcXHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTI0NTgtXFx0XFx0XFx0XFx0XFx0ICAgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0yNDcwLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoyNDcxOlxcdFxcdHJjID0gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQsIHRzKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjQ3Mi1cXHRcXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjUwMS1cXHQvKiBQaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSBmYWlsZWQsIGZhbGwgYmFjayB0byBUb0QgYWRqdXN0ICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjI1MDI6XFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVxcdTAwM2VpZCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjUwMy1cXHRcXHRcXHRcXHQgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTE6NTM6MjMuNzY3NzgyOTM4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQzODE2NjY3OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIERyaXZlciBQYXRjaCBmb3IgUFRQIENsb2NrIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgUFRQIGNsb2NrIHN1cHBvcnQgaW50byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIsIGludGVyZXN0aW5nLiBUaGUgZHJpdmVyIGl0c2VsZiBpcyBmYWlybHkgc3RhbmRhcmQ7IGl0IGNhbiBiZSBob29rZWQgdXAgdmlhIGVpdGhlciBJMkMgb3IgU1BJLCBnb29kIHRvIGtub3cuIFRoZSBrZXkgdGhpbmcgaXMgdGhhdCB0aGlzIFBUUCBjbG9jayBmdW5jdGlvbmFsaXR5IGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCB3aGljaCBtZWFucyB3ZSBjYW4gbGlrZWx5IHBva2UgYXQgaXQgZGlyZWN0bHkgdGhyb3VnaCBgL2Rldi9wdHBYYCBkZXZpY2VzIGFuZCB0aGUgYXNzb2NpYXRlZCBpb2N0bHMuIFRoYXQgb3BlbnMgdXAgYSB3aG9sZSBhdmVudWUgZm9yIGZ1enppbmcgd2l0aCBzeXprYWxsZXIsIG9mIGNvdXJzZS5cblxuSSBuZWVkIHRvIHplcm8gaW4gb24gc3BlY2lmaWMgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIGRyaXZlci4gTGV0J3Mgc2VlLi4uIHRoZSBtb3N0IGNyaXRpY2FsIG9uZXMgc2VlbSB0byBiZTogYHpsMzA3M3hfY2hhbl90b2RfcmVhZGAgYW5kIGB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlYCBmb3IgVGltZSBvZiBEYXkgcmVhZHMgYW5kIHdyaXRlczsgYHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0YCwgd2hpY2ggaXMgcHJvYmFibHkgZm9yIGNvcnJlY3Rpb25zLiAgVGhlbiB0aGVyZSdzIGB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldGAsIGB6bDMwNzN4X2NoYW5fdGllX3dyaXRlYCwgYW5kIGB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcGAg4oCTIHRob3NlIHNvdW5kIGxpa2UgdGhleSBkZWFsIHdpdGggZmluZXItZ3JhaW5lZCBhZGp1c3RtZW50cy5cblxuQW5kLCBvZiBjb3Vyc2UsIHRoZSBEUExMLXNwZWNpZmljIFBUUCBmdW5jdGlvbnMgYXJlIGNydWNpYWw6IGB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjRgLCBgemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjRgLCBgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXBgLCBgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lYCwgYHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZWAsIGFuZCBgemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZWAuIFRoZXNlIGFyZSBhbGwgcHJpbWUgY2FuZGlkYXRlcyBmb3IgY2xvc2VyIGluc3BlY3Rpb24gYW5kIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgbmVlZGVkIHRvIGVuYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkuIEkgc2VlIGBaTDMwNzNYX0kyQ2AsIGBaTDMwNzNYX1NQSWAsIGBQVFBfMTU4OF9DTE9DS2AsIGFuZCBgRFBMTGAuIFdhaXQsIGhvbGQgb24uIEl0IGxvb2tzIGxpa2UgYERQTExgIGlzIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgaWYgYFpMMzA3M1hgIGlzIHNlbGVjdGVkLiBBbmQgYFBUUF8xNTg4X0NMT0NLYCBpcyBhIGRlcGVuZGVuY3kuIE9rYXksIHNvIHRvIGdldCB0aGlzIGFsbCB3b3JraW5nLCBpdCBsb29rcyBsaWtlIGFsbCB0aGF0IEkgbmVlZCBhcmU6XG5cbmBaTDMwNzNYX0kyQ2Agb3IgYFpMMzA3M1hfU1BJYCwgYW5kIGBQVFBfMTU4OF9DTE9DS2AuIExldCBtZSBqdXN0IGRvdWJsZSBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIGluIGBkcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIEdvdHRhIGJlIHRob3JvdWdoIHdpdGggdGhpcyBzdHVmZi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI2NzYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTE6NTM6MzguMTQ5NDUyMTQ2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Njc1MDgwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFpMMzA3M1hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZy0yLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWc6Mzpjb25maWcgWkwzMDczWFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctNC1cXHR0cmlzdGF0ZSBcXFwiTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlc1xcXCIgaWYgQ09NUElMRV9URVNUXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTE2LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWc6MTc6Y29uZmlnIFpMMzA3M1hfSTJDXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZy0xOC1cXHR0cmlzdGF0ZSBcXFwiSTJDIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1xcXCJcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctMjgtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZzoyOTpjb25maWcgWkwzMDczWF9TUElcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTMwLVxcdHRyaXN0YXRlIFxcXCJTUEkgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMTo1MzozOS43MTY5NjY5NDZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjczNjI2NDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiBjaGVja2luZyB0aGUgYGRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdgIGRlcGVuZGVuY2llczpcblxuKipBbmFseXppbmcgdGhlIEtjb25maWcgRGVwZW5kZW5jaWVzIGZvciB6bDMwNzN4IERyaXZlcioqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZm9yIHRoZSB6bDMwNzN4IGRyaXZlci4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGUgYGRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdgIGZpbGUuIEknbSBhc3N1bWluZywgYXMgYW4gZXhwZXJ0IGluIHRoaXMsIHRoYXQgdGhpcyBLY29uZmlnIGZpbGUgY29udGFpbnMgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGZvciBlbmFibGluZyBhbmQgZGlzYWJsaW5nIHRoZSB6bDMwNzN4IGRyaXZlciB3aXRoaW4gdGhlIGtlcm5lbCdzIGJ1aWxkIHN5c3RlbS4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgd2hpY2ggb3RoZXIga2VybmVsIGZlYXR1cmVzIG9yIGhhcmR3YXJlIGNvbXBvbmVudHMgbXVzdCBiZSBlbmFibGVkIG9yIGNvbmZpZ3VyZWQgYmVmb3JlIHRoaXMgcGFydGljdWxhciBkcml2ZXIgY2FuIGJlIHNlbGVjdGVkLiBUaGlzIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIHN5c3RlbSBjb25maWd1cmF0aW9uIGFuZCB0byBlbnN1cmUgSSBkb24ndCBpbnRyb2R1Y2UgYnVpbGQgZXJyb3JzIG9yIHJ1bnRpbWUgY29uZmxpY3RzLiBJJ2xsIG5lZWQgdG8gaWRlbnRpZnk6IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyAoZS5nLiwgXCJpZlwiIHN0YXRlbWVudHMpLCBkZWZhdWx0IHZhbHVlcywgc2VsZWN0IHN0YXRlbWVudHMsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgdGhhdCByZWxhdGUgdG8gdGhlIHByb3BlciBidWlsZGluZyBhbmQgdXNlIG9mIHRoZSB6bDMwNzN4IGRyaXZlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQwMjMsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMTo1Mzo0NC4zOTA1OTYwMloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRcXG4gICAzOlxcdGNvbmZpZyBaTDMwNzNYXFxuICAgNDpcXHRcXHR0cmlzdGF0ZSBcXFwiTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlc1xcXCIgaWYgQ09NUElMRV9URVNUXFxuICAgNTpcXHRcXHRkZXBlbmRzIG9uIE5FVCBcXHUwMDI2XFx1MDAyNiBQVFBfMTU4OF9DTE9DS1xcbiAgIDY6XFx0XFx0c2VsZWN0IERQTExcXG4gICA3OlxcdFxcdHNlbGVjdCBORVRfREVWTElOS1xcbiAgIDg6XFx0XFx0c2VsZWN0IFJFR01BUFxcbiAgIDk6XFx0XFx0aGVscFxcbiAgMTA6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBNaWNyb2NoaXAgQXp1cml0ZSBmYW1pbHkgRFBMTC9QVFAvU3luY0VcXG4gIDExOlxcdFxcdCAgZGV2aWNlcyB0aGF0IHN1cHBvcnQgdXAgdG8gNSBpbmRlcGVuZGVudCBEUExMIGNoYW5uZWxzLFxcbiAgMTI6XFx0XFx0ICAxMCBpbnB1dCBwaW5zIGFuZCB1cCB0byAyMCBvdXRwdXQgcGlucy5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlXFxuICAxNTpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIHpsMzA3M3guXFxuICAxNjpcXHRcXG4gIDE3OlxcdGNvbmZpZyBaTDMwNzNYX0kyQ1xcbiAgMTg6XFx0XFx0dHJpc3RhdGUgXFxcIkkyQyBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcXFwiXFxuICAxOTpcXHRcXHRkZXBlbmRzIG9uIEkyQyBcXHUwMDI2XFx1MDAyNiBORVQgXFx1MDAyNlxcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tcXG4gIDIwOlxcdFxcdHNlbGVjdCBSRUdNQVBfSTJDXFxuICAyMTpcXHRcXHRzZWxlY3QgWkwzMDczWFxcbiAgMjI6XFx0XFx0aGVscFxcbiAgMjM6XFx0XFx0ICBUaGlzIGlzIEkyQyBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFXFxuICAyNDpcXHRcXHQgIGRldmljZXMuXFxuICAyNTpcXHRcXG4gIDI2OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXFxuICAyNzpcXHRcXHQgIGJlIGNhbGxlZCB6bDMwNzN4X2kyYy5cXG4gIDI4OlxcdFxcbiAgMjk6XFx0Y29uZmlnIFpMMzA3M1hfU1BJXFxuICAzMDpcXHRcXHR0cmlzdGF0ZSBcXFwiU1BJIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1xcXCJcXG4gIDMxOlxcdFxcdGRlcGVuZHMgb24gTkVUIFxcdTAwMjZcXHUwMDI2IFNQSSBcXHUwMDI2XFx1MDAyNiBQVFBfMTU4OF9DTE9DS1xcbiAgMzI6XFx0XFx0c2VsZWN0IFJFR01BUF9TUElcXG4gIDMzOlxcdFxcdHNlbGVjdCBaTDMwNzNYXFxuICAzNDpcXHRcXHRoZWxwXFxuICAzNTpcXHRcXHQgIFRoaXMgaXMgU1BJIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0VcXG4gIDM2OlxcdFxcdCAgZGV2aWNlcy5cXG4gIDM3OlxcdFxcbiAgMzg6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcXG4gIDM5OlxcdFxcdCAgYmUgY2FsbGVkIHpsMzA3M3hfc3BpLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMTo1Mzo0NC4zOTA2NjI2NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NzgyNzE2MzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZvY3VzOiBaTDMwNzNYIENsb2NrIENvbnRyb2wqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZW5hYmxlIHRoZSBgWkwzMDczWF9JMkNgIGFuZCBgWkwzMDczWF9TUElgIGludGVyZmFjZXMuIFRoZSBgUFRQXzE1ODhfQ0xPQ0tgIGZlYXR1cmUgaXMgZGVmaW5pdGVseSBuZWNlc3NhcnkgdG9vLiBBbmQgc2luY2Ugd2UncmUgZGVhbGluZyB3aXRoIGNsb2NrIG1hbmFnZW1lbnQsIEknbGwgZ28gd2l0aCB0aGUgYERQTExgIHNlbGVjdGlvbi5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGtleSBmdW5jdGlvbnMgSSBzaG91bGQgY29uY2VudHJhdGUgb24gZm9yIHRoaXMgaW1wbGVtZW50YXRpb24uIEknbSB0aGlua2luZzpcblxuKiAgIGB6bDMwNzN4X2NoYW5fdG9kX3JlYWRgXG4qICAgYHpsMzA3M3hfY2hhbl90b2Rfd3JpdGVgXG4qICAgYHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0YFxuKiAgIGB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldGBcbiogICBgemwzMDczeF9jaGFuX3RpZV93cml0ZWBcbiogICBgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXBgXG5cbkhvbGQgb24gYSBzZWNvbmQuLi5JIHNlZSB0aGVzZSBzdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gRFBMTCBhbmQgUFRQOlxuXG4qICAgYHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwYFxuKiAgIGB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVgXG4qICAgYHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZWBcbiogICBgemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZWBcbiogICBgemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0YFxuKiAgIGB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NGBcblxuUmlnaHQsIEknZCBiZXR0ZXIgZG91YmxlLWNoZWNrIHRoYXQgdGhleSBhcmUgYWN0dWFsbHkgc3RhdGljIC0gSSBuZWVkIHRvIGtub3cgd2h5IHRoZXkgYXJlIHdyaXR0ZW4gdGhhdCB3YXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0OTM0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTE6NTM6NTIuMTczMzgyMTI4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM3ODU5NjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz0yMzEwPXN0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTIzMzktICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjIzNDA6c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTIzNDEtXFx0XFx0XFx0XFx0XFx0ICAgICAgIHM2NCBkZWx0YSlcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0yNDM3LSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoyNDM4OnN0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczY0IGRlbHRhKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0yNDM5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTE6NTM6NTMuNzExMjQ2MDhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTg0MTY2NTkzMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gRHluYW1pYyBDaGFubmVsIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBkZWFsaW5nIHdpdGggYGNoYW4uY2AsIGFuZCBJJ3ZlIHF1aWNrbHkgY29uZmlybWVkIHRoYXQgdGhlIG1ham9yaXR5IG9mIGl0cyBmdW5jdGlvbnMgYXJlLCBhcyBleHBlY3RlZCwgc3RhdGljLiBUaGF0J3MgZ29vZDsgaXQgbmFycm93cyBkb3duIG15IGZvY3VzLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkeW5hbWljcywgdGhlIHBhcnRzIHRoYXQgKmRvKiBjaGFuZ2UsIG9yIHRoYXQgYXJlIGRlc2lnbmVkIHRvIGJlIG1vZGlmaWVkLlxuXG5UaGVyZWZvcmUsIEknbSBnb2luZyB0byBjb25jZW50cmF0ZSBvbiB0aGVzZSBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYGNoYW4uY2A6IGB6bDMwNzN4X2NoYW5fdG9kX3JlYWRgLCBgemwzMDczeF9jaGFuX3RvZF93cml0ZWAsIGB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdGAsIGB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldGAsIGB6bDMwNzN4X2NoYW5fdGllX3dyaXRlYCwgYW5kIGB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcGAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIGtleSBhcmVhcyBmb3IgbWUgdG8gaW52ZXN0aWdhdGUsIGdpdmVuIHRoZSBjb250ZXh0LlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSB2ZXJpZnkgd2hldGhlciB0aGVzZSBmdW5jdGlvbnMgYXJlIHByb3Blcmx5IGV4cG9ydGVkIGFuZCB2aXNpYmxlIGZvciB0aGUgZXh0ZXJuYWwgaW50ZXJmYWNlLCBvciBpZiB0aGVyZSdzIGFueSBzdWJ0bGV0eSBpbiB0aGVpciBkZWZpbml0aW9uIHRoYXQgSSBuZWVkIHRvIGFjY291bnQgZm9yLiBObyBwb2ludCBpbiB3YXN0aW5nIHRpbWUgaWYgdGhleSdyZSBub3QgZXZlbiBhY2Nlc3NpYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTk3OCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMTo1NDoxMi4xMjc5MDc3NzZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODI1MTUxNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM9MjMyPWNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKnpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldixcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNDctICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI0ODppbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNDkte1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jPTI5Mz1zdGF0aWMgaW50IHpsMzA3M3hfY2hhbl90b2RfY3RybChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgdTggY21kKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMwOS0gKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzEwOmludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMxMS1cXHRcXHRcXHQgIGJvb2wgbmV4dF9oeiwgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oPTQ1PWludCB6bDMwNzN4X2NoYW5fbmNvX21vZGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNDYtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjQ3OmludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDo0ODppbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC00OS1cXHRcXHRcXHQgIGJvb2wgbmV4dF9oeiwgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMTo1NDoxMy43MTA0Mjc4ODZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI3ODMzMzk2MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEF6dXJpdGUgRFBMTCBEcml2ZXIgSW50ZWdyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgZm9jdXMgc3ltYm9scyDigJMgdGhlIGtleSBmdW5jdGlvbnMgd2UncmUgaW50ZXJlc3RlZCBpbi4gSSd2ZSBnb3Q6XG5cbiogICBgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0YFxuKiAgIGB6bDMwNzN4X2NoYW5fdG9kX3JlYWRgXG4qICAgYHpsMzA3M3hfY2hhbl90b2Rfd3JpdGVgXG4qICAgYHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0YFxuKiAgIGB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldGBcbiogICBgemwzMDczeF9jaGFuX3RpZV93cml0ZWBcbiogICBgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXBgXG5cbkkgcXVpY2tseSBjb25maXJtZWQgdGhhdCBgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0YCBpcyBub24tc3RhdGljIGFzIHJlcXVpcmVkLiBJIGFsc28gY29uZmlybWVkIHRoZSBrZXkgY29uZmlncy4gVGhlIGNvZGUgbG9va3MgY29ycmVjdCwgc28gdGhlIGZvY3VzIHN5bWJvbHMgYXJlIGNvcnJlY3QuXG5cbk5vdywgdGhlIGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHdlJ3JlIGNvdmVyaW5nIGFsbCBiYXNlcy4gV2UgaGF2ZTpcblxuKiAgIGBaTDMwNzNYX0kyQ2BcbiogICBgWkwzMDczWF9TUElgXG4qICAgYFBUUF8xNTg4X0NMT0NLYFxuXG5JIGNoZWNrZWQgYFBUUF8xNTg4X0NMT0NLYCwgYW5kIGl0J3MgYSB0cmlzdGF0ZSwgc28gdGhhdCdzIGdvb2QuIEl0IHdpbGwgZW5hYmxlIHRoZSBjb3JyZWN0IGNvZGUgcGF0aCBhcyBpbnRlbmRlZC5cblxuSSBhbHNvIGNvbnNpZGVyZWQgYERQTExgLiBJdCBzZWVtcyBgRFBMTGAgaXMgc2VsZWN0ZWQgYnkgYFpMMzA3M1hgLCBzbyBpdCBzaG91bGQgYmUgYXV0b21hdGljYWxseSBlbmFibGVkLCBidXQgaW5jbHVkaW5nIGl0IGRvZXNuJ3QgaHVydC4gQW5kLCByZWFsbHksIHRoZSBgc2VsZWN0YCBkaXJlY3RpdmUgaW4gdGhlIGNvbmZpZyBoYW5kbGVzIGl0LCBzbyB3ZSBkb24ndCBuZWVkIHRvIHNwZWNpZnkgaXQuXG5cbkkgZGlkIGEgcXVpY2sgY2hlY2sgZm9yIG90aGVyIGRlcGVuZGVuY2llcywgYW5kIHdlJ3ZlIGdvdCBgSTJDYCwgYFNQSWAsIGFuZCBgTkVUYC4gYE5FVGAgaXMgdXN1YWxseSBlbmFibGVkLCBhbmQgYEkyQ2AgYW5kIGBTUElgIGFyZSByZXF1aXJlZCBmb3IgdGhpcyBkcml2ZXIuXG5cblNvLCB0aGUgY29uZmlnIGxpc3QgaXMgc29saWQ6XG5cbiogICBgWkwzMDczWF9JMkNgXG4qICAgYFpMMzA3M1hfU1BJYFxuKiAgIGBQVFBfMTU4OF9DTE9DS2BcblxuSSB2ZXJpZmllZCBubyBvdGhlciBmdW5jdGlvbnMgYXJlIHJlbGV2YW50IGJlc2lkZXMgdGhlIGZvY3VzIHN5bWJvbHMuIGB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyYCBhbmQgYHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlcmAgYXJlIHN0YXRpYywgc28gdGhleSdyZSBub3QgcGFydCBvZiB0aGUgZnV6emluZyBzdXJmYWNlLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgd2Ugd2FudC5cblxuSW4gZXNzZW5jZSwgdGhpcyBwYXRjaCBpcyBhZGRpbmcgUFRQIGNsb2NrIGZ1bmN0aW9uYWxpdHkgdG8gdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyLiBJdCdzIGFjY2Vzc2libGUgdmlhIEkyQy9TUEkgYW5kIGV4cG9zZWQgdG8gdXNlcnNwYWNlIHZpYSB0aGUgUFRQIGNsb2NrIHN1YnN5c3RlbSAoYC9kZXYvcHRwWGApLiBTeXprYWxsZXIgd2lsbCBiZSBhYmxlIHRvIGZ1enogdGhpcyB0aHJvdWdoIEkyQy9TUEkgZW11bGF0aW9uLiBUaGUgZm9jdXMgc3ltYm9scyBhcmUgY29ycmVjdCwgYW5kIGFsbCBkZXBlbmRlbmNpZXMgYXJlIGFwcHJvcHJpYXRlbHkgY292ZXJlZC4gSSB0aGluayB0aGlzIGlzIGdvb2QgdG8gZ28uIFRpbWUgdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY5NjMsIk91dHB1dFRva2VucyI6MjUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDExOjU0OjI2LjQ5Mzc3MTM3NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczOTQ5OTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaTDMwNzNYX0kyQ1wiLFxuICAgIFwiWkwzMDczWF9TUElcIixcbiAgICBcIlBUUF8xNTg4X0NMT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0XCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fdG9kX3JlYWRcIixcbiAgICBcInpsMzA3M3hfY2hhbl90b2Rfd3JpdGVcIixcbiAgICBcInpsMzA3M3hfY2hhbl90b2RfYWRqdXN0XCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldFwiLFxuICAgIFwiemwzMDczeF9jaGFuX3RpZV93cml0ZVwiLFxuICAgIFwiemwzMDczeF9jaGFuX3BoYXNlX3N0ZXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciAoemwzMDczeCkuIFRoZSBkcml2ZXIgY2FuIGJlIGluc3RhbnRpYXRlZCB2aWEgSTJDIG9yIFNQSSwgYW5kIHRoZSBQVFAgY2xvY2sgaW50ZXJmYWNlIGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlIHZpYSBgL2Rldi9wdHBYYC4gU3l6a2FsbGVyIGNhbiBmdXp6IHRoaXMgZnVuY3Rpb25hbGl0eSB1c2luZyBJMkMvU1BJIGVtdWxhdGlvbiBhbmQgUFRQIGlvY3Rscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaTDMwNzNYX0kyQ1wiLFxuICAgIFwiWkwzMDczWF9TUElcIixcbiAgICBcIlBUUF8xNTg4X0NMT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0XCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fdG9kX3JlYWRcIixcbiAgICBcInpsMzA3M3hfY2hhbl90b2Rfd3JpdGVcIixcbiAgICBcInpsMzA3M3hfY2hhbl90b2RfYWRqdXN0XCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldFwiLFxuICAgIFwiemwzMDczeF9jaGFuX3RpZV93cml0ZVwiLFxuICAgIFwiemwzMDczeF9jaGFuX3BoYXNlX3N0ZXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciAoemwzMDczeCkuIFRoZSBkcml2ZXIgY2FuIGJlIGluc3RhbnRpYXRlZCB2aWEgSTJDIG9yIFNQSSwgYW5kIHRoZSBQVFAgY2xvY2sgaW50ZXJmYWNlIGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlIHZpYSBgL2Rldi9wdHBYYC4gU3l6a2FsbGVyIGNhbiBmdXp6IHRoaXMgZnVuY3Rpb25hbGl0eSB1c2luZyBJMkMvU1BJIGVtdWxhdGlvbiBhbmQgUFRQIGlvY3Rscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTE6NTQ6MjYuNTY3NzI3NjRaIiwiU2VxIjoxNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1Mjc1MDAwMzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTE6NTQ6MjYuNTY4MTgzMTVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjUyNzQ1NDA3NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgUFRQIGNsb2NrIHN1cHBvcnQgZm9yIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlci4gSXQgYWRkcyBmdW5jdGlvbnMgdG8gcmVhZC93cml0ZSBUaW1lIG9mIERheSAoVG9EKSByZWdpc3RlcnMsIGFkanVzdCBmcmVxdWVuY3ksIGFuZCBhZGp1c3QgcGhhc2UsIGFzIHdlbGwgYXMgcmVnaXN0ZXJpbmcgYSBQVFAgY2xvY2sgZGV2aWNlLiBBbGwgbG9jYWwgdmFyaWFibGVzLCBzdWNoIGFzIGBzdHJ1Y3QgdGltZXNwZWM2NGAgYW5kIGBzeW50aF9tYXNrYCwgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBgcHRwX2Nsb2NrX2luZm9gIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCBmcm9tIGEgc3RhdGljIGNvbnN0IHRlbXBsYXRlLCBlbnN1cmluZyBhbGwgZmllbGRzIChpbmNsdWRpbmcgcGFkZGluZyBhbmQgdGhlIGBuYW1lYCBidWZmZXIpIGFyZSB6ZXJvLWluaXRpYWxpemVkIGJlZm9yZSBgc25wcmludGZgIGlzIGNhbGxlZC4gVGhlcmUgYXJlIG5vIGtlcm5lbC10by11c2VyIGluZm8tbGVha3Mgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2VzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcy4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1OTFkZWM4M2E4NWQ3MDc0NTUyNjBlOTE4ZTc0MTI1N2U0NWY5MjkxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAxMTo1Mjo0NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWcgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXG5pbmRleCA1YmJjYTE0MDA1ODEzLi5kYTE3MzFhY2UxNWYwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xuQEAgLTIsNyArMiw3IEBAXG4gXG4gY29uZmlnIFpMMzA3M1hcbiBcdHRyaXN0YXRlIFwiTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlc1wiIGlmIENPTVBJTEVfVEVTVFxuLVx0ZGVwZW5kcyBvbiBORVRcbitcdGRlcGVuZHMgb24gTkVUIFx1MDAyNlx1MDAyNiBQVFBfMTU4OF9DTE9DS1xuIFx0c2VsZWN0IERQTExcbiBcdHNlbGVjdCBORVRfREVWTElOS1xuIFx0c2VsZWN0IFJFR01BUFxuQEAgLTE2LDcgKzE2LDcgQEAgY29uZmlnIFpMMzA3M1hcbiBcbiBjb25maWcgWkwzMDczWF9JMkNcbiBcdHRyaXN0YXRlIFwiSTJDIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1wiXG4tXHRkZXBlbmRzIG9uIEkyQyBcdTAwMjZcdTAwMjYgTkVUXG4rXHRkZXBlbmRzIG9uIEkyQyBcdTAwMjZcdTAwMjYgTkVUIFx1MDAyNlx1MDAyNiBQVFBfMTU4OF9DTE9DS1xuIFx0c2VsZWN0IFJFR01BUF9JMkNcbiBcdHNlbGVjdCBaTDMwNzNYXG4gXHRoZWxwXG5AQCAtMjgsNyArMjgsNyBAQCBjb25maWcgWkwzMDczWF9JMkNcbiBcbiBjb25maWcgWkwzMDczWF9TUElcbiBcdHRyaXN0YXRlIFwiU1BJIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1wiXG4tXHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgU1BJXG4rXHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgU1BJIFx1MDAyNlx1MDAyNiBQVFBfMTU4OF9DTE9DS1xuIFx0c2VsZWN0IFJFR01BUF9TUElcbiBcdHNlbGVjdCBaTDMwNzNYXG4gXHRoZWxwXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXG5pbmRleCA0ZWMyY2Y1M2RhZDQ2Li5hZjZjYTQzYzMzNTkwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNcbkBAIC0zLDYgKzMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZfcHJpbnRrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiBcbkBAIC0xNjIsOCArMTYzLDggQEAgaW50IHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpXG4gICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3hfZGV2IHN0cnVjdHVyZVxuICAqIEBpbmRleDogRFBMTCBjaGFubmVsIGluZGV4IHRvIGZldGNoIHN0YXRlIGZvclxuICAqXG4tICogUmVhZHMgdGhlIG1vZGVfcmVmc2VsIHJlZ2lzdGVyIGFuZCByZWZlcmVuY2UgcHJpb3JpdHkgcmVnaXN0ZXJzIGZvclxuLSAqIHRoZSBnaXZlbiBEUExMIGNoYW5uZWwgYW5kIHN0b3JlcyB0aGUgcmF3IHZhbHVlcyBmb3IgbGF0ZXIgdXNlLlxuKyAqIFJlYWRzIHRoZSBtb2RlX3JlZnNlbCwgc3RhdHVzIGFuZCByZWZlcmVuY2UgcHJpb3JpdHkgcmVnaXN0ZXJzIGZvclxuKyAqIHRoZSBnaXZlbiBEUExMIGNoYW5uZWwgYW5kIHN0b3JlcyB0aGUgdmFsdWVzIGZvciBsYXRlciB1c2UuXG4gICpcbiAgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuICAqL1xuQEAgLTIzNCw2ICsyMzUsMzIyIEBAIGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKnpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldixcbiBcdHJldHVybiBcdTAwMjZ6bGRldi1cdTAwM2VjaGFuW2luZGV4XTtcbiB9XG4gXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0IC0gd2FpdCBmb3IgVG9EIHNlbWFwaG9yZSB0byBjbGVhclxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICpcbisgKiBQb2xscyB0aGUgVG9EIGNvbnRyb2wgcmVnaXN0ZXIgdW50aWwgdGhlIHNlbWFwaG9yZSBiaXQgaXMgY2xlYXJlZCxcbisgKiBpbmRpY2F0aW5nIHRoZSBkZXZpY2UgaGFzIGNvbXBsZXRlZCB0aGUgcHJldmlvdXMgVG9EIG9wZXJhdGlvbi5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRUJVU1kgaWYgc2VtYXBob3JlIG5vdCBjbGVhcmVkLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4raW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcbit7XG4rXHR1bnNpZ25lZCBpbnQgdGltZW91dDtcbitcdHU4IHRvZF9jdHJsO1xuK1x0aW50IHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSwgXHUwMDI2dG9kX2N0cmwpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRzd2l0Y2ggKEZJRUxEX0dFVChaTF9EUExMX1RPRF9DVFJMX0NNRCwgdG9kX2N0cmwpKSB7XG4rXHRjYXNlIDA6XG4rXHRcdC8qIE5vIG9wZXJhdGlvbiBwZW5kaW5nIChwb3dlci1vbi9yZXNldCBkZWZhdWx0KSAqL1xuK1x0XHRyZXR1cm4gMDtcbitcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFo6XG4rXHRcdHRpbWVvdXQgPSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTO1xuK1x0XHRicmVhaztcbitcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVDpcbitcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFo6XG4rXHRcdHRpbWVvdXQgPSBaTF9QT0xMX1RPRF9SRF9USU1FT1VUX1VTO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdC8qIEZXIG5ldmVyIHdyaXRlcyBjbWQgYml0czsgb25seSB0aGUgZHJpdmVyIHNldHMgdGhlbSAqL1xuK1x0XHRXQVJOX09OKDEpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksXG4rXHRcdFx0XHQgIFpMX0RQTExfVE9EX0NUUkxfU0VNLCB0aW1lb3V0KTtcbitcbitcdHJldHVybiByYyA9PSAtRVRJTUVET1VUID8gLUVCVVNZIDogcmM7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl90b2RfY3RybCAtIGlzc3VlIFRvRCBjb21tYW5kXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKiBAY21kOiBUb0QgY29tbWFuZCB0byBleGVjdXRlXG4rICpcbisgKiBXcml0ZXMgdGhlIHNlbWFwaG9yZSBhbmQgY29tbWFuZCB0byBkcGxsX3RvZF9jdHJsLiBUaGUgY2FsbGVyIG11c3RcbisgKiBlbnN1cmUgdGhlIGRldmljZSBpcyByZWFkeSAoc2VtYXBob3JlIGNsZWFyKSBiZWZvcmUgY2FsbGluZyBhbmRcbisgKiBtdXN0IHdhaXQgZm9yIGNvbXBsZXRpb24gaWYgbmVlZGVkLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitzdGF0aWMgaW50IHpsMzA3M3hfY2hhbl90b2RfY3RybChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgdTggY21kKVxuK3tcbitcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksXG4rXHRcdFx0XHRaTF9EUExMX1RPRF9DVFJMX1NFTSB8IGNtZCk7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl90b2RfcmVhZCAtIHJlYWQgVG9EIHJlZ2lzdGVycyBhZnRlciBpc3N1aW5nIGEgY29tbWFuZFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICogQG5leHRfaHo6IGlmIHRydWUsIHJlYWQgcHJlZGljdGVkIFRvRCBhdCBuZXh0IDEgSHo7IG90aGVyd2lzZSByZWFkIGN1cnJlbnRcbisgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIHRoZSByZXN1bHRcbisgKiBAc3RzOiBvcHRpb25hbCBzeXN0ZW0gdGltZXN0YW1wIHBhaXIgZm9yIGNyb3NzLXRpbWVzdGFtcGluZ1xuKyAqXG4rICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbitcdFx0XHQgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKVxuK3tcbitcdHUzMiBuc2VjO1xuK1x0dTY0IHNlYztcbitcdHU4IGNtZDtcbitcdGludCByYztcbitcbitcdGlmIChuZXh0X2h6KVxuK1x0XHRjbWQgPSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9ORVhUXzFIWjtcbitcdGVsc2VcbitcdFx0Y21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVDtcbitcbitcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRwdHBfcmVhZF9zeXN0ZW1fcHJldHMoc3RzKTtcbitcdHJjID0gemwzMDczeF9jaGFuX3RvZF9jdHJsKHpsZGV2LCBjaCwgY21kKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1x0cHRwX3JlYWRfc3lzdGVtX3Bvc3R0cyhzdHMpO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3JlYWRfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfU0VDKGNoKSwgXHUwMDI2c2VjKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0LyogSFcgbmFub3NlY29uZHMgYXJlIGFsd2F5cyBpbiBbMCwgTlNFQ19QRVJfU0VDKSByYW5nZSAqL1xuK1x0cmMgPSB6bDMwNzN4X3JlYWRfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCBcdTAwMjZuc2VjKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0dHMtXHUwMDNldHZfc2VjID0gc2VjO1xuK1x0dHMtXHUwMDNldHZfbnNlYyA9IG5zZWM7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3RvZF93cml0ZSAtIHdyaXRlIFRvRCByZWdpc3RlcnMgYW5kIHRyaWdnZXIgMSBIeiB1cGRhdGVcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqIEB0czogdGltZSB0byBzZXRcbisgKlxuKyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitpbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cylcbit7XG4rXHRpbnQgcmM7XG4rXG4rXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVG9EIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xuK1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIHRzLnR2X3NlYyk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19EUExMX1RPRF9OUyhjaCksIHRzLnR2X25zZWMpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9jdHJsKHpsZGV2LCBjaCxcbitcdFx0XHRcdCAgICAgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFopO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCAtIGF0b21pYyBUb0QgcmVhZC1tb2RpZnktd3JpdGUgd2l0aCByb2xsb3ZlciBndWFyZFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgdG8gYXBwbHlcbisgKlxuKyAqIFJlYWRzIHRoZSBuZXh0LUh6IFRvRCBhbmQgY3VycmVudCBUb0QsIHRoZW4gY2hlY2tzIHdoZXRoZXIgZW5vdWdoIHRpbWVcbisgKiByZW1haW5zIGJlZm9yZSB0aGUgbmV4dCAxIEh6IHJvbGxvdmVyIHRvIHNhZmVseSBjb21wbGV0ZSB0aGUgd3JpdGUuXG4rICogUmUtcmVhZHMgaWYgdGhlIDEgSHogdGljayBjcm9zc2VkIGJldHdlZW4gdGhlIHR3byByZWFkcyBvciBpZiBsZXNzXG4rICogdGhhbiAyMCBtcyByZW1haW5zIGJlZm9yZSB0aGUgbmV4dCByb2xsb3Zlci4gQXBwbGllcyBAZGVsdGEgYW5kIHdyaXRlc1xuKyAqIHRoZSByZXN1bHQgYmFjay5cbisgKlxuKyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbisjZGVmaW5lIFpMX1RPRF9NQVhfUkVUUklFU1x0MjBcbitpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKVxuK3tcbitcdHN0YXRpYyBjb25zdCBsb25nIHRocmVzaG9sZF9ucyA9IDIwICogTlNFQ19QRVJfTVNFQztcbitcdHN0cnVjdCB0aW1lc3BlYzY0IHRzX25leHQsIHRzX2N1ciwgZGlmZjtcbitcdGludCByYywgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFpMX1RPRF9NQVhfUkVUUklFUzsgaSsrKSB7XG4rXHRcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgdHJ1ZSwgXHUwMDI2dHNfbmV4dCwgTlVMTCk7XG4rXHRcdGlmIChyYylcbitcdFx0XHRyZXR1cm4gcmM7XG4rXG4rXHRcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgZmFsc2UsIFx1MDAyNnRzX2N1ciwgTlVMTCk7XG4rXHRcdGlmIChyYylcbitcdFx0XHRyZXR1cm4gcmM7XG4rXG4rXHRcdC8qIEVuc3VyZSB0aGUgMSBIeiB0aWNrIGRpZCBub3QgY3Jvc3MgYmV0d2VlbiB0aGUgdHdvIHJlYWRzXG4rXHRcdCAqIGFuZCB0aGF0IGVub3VnaCBtYXJnaW4gcmVtYWlucyB0byBjb21wbGV0ZSB0aGUgd3JpdGUuXG4rXHRcdCAqL1xuK1x0XHRkaWZmID0gdGltZXNwZWM2NF9zdWIodHNfbmV4dCwgdHNfY3VyKTtcbitcdFx0aWYgKGRpZmYudHZfc2VjIFx1MDAzZSAwIHx8XG4rXHRcdCAgICAoIWRpZmYudHZfc2VjIFx1MDAyNlx1MDAyNiBkaWZmLnR2X25zZWMgXHUwMDNlPSB0aHJlc2hvbGRfbnMpKVxuK1x0XHRcdGJyZWFrO1xuK1x0fVxuK1x0aWYgKGkgPT0gWkxfVE9EX01BWF9SRVRSSUVTKSB7XG4rXHRcdGRldl93YXJuKHpsZGV2LVx1MDAzZWRldixcbitcdFx0XHQgXCJEUExMJXUgVG9EIGFkanVzdCBmYWlsZWQgdG8gZ2V0IHN0YWJsZSBtYXJnaW5cXG5cIixcbitcdFx0XHQgY2gpO1xuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1x0fVxuK1xuK1x0LyogQXBwbHkgZGVsdGEgdG8gdGhlIG5leHQtSHogVG9EICovXG4rXHR0c19uZXh0ID0gdGltZXNwZWM2NF9hZGQodHNfbmV4dCwgZGVsdGEpO1xuK1x0aWYgKCF0aW1lc3BlYzY0X3ZhbGlkKFx1MDAyNnRzX25leHQpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZGV2LCBjaCwgdHNfbmV4dCk7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0IC0gd3JpdGUgZGVsdGEgZnJlcXVlbmN5IG9mZnNldCB0byBoYXJkd2FyZVxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICogQG9mZnNldDogZnJlcXVlbmN5IG9mZnNldCBpbiAyXi00OCBzdGVwc1xuKyAqXG4rICogQ29udGV4dDogQ2FsbGVyIG11c3QgaG9sZCB0aGUgcGVyLURQTEwgbG9jay5cbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldClcbit7XG4rXHRpbnQgcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9PRkZTRVQoY2gpLCBvZmZzZXQpO1xuK1x0aWYgKCFyYylcbitcdFx0emxkZXYtXHUwMDNlY2hhbltjaF0uZGZfb2Zmc2V0ID0gb2Zmc2V0O1xuK1xuK1x0cmV0dXJuIHJjO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlIC0gYWRqdXN0IERQTEwgcGhhc2UgdXNpbmcgVElFIHdyaXRlXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKiBAZGVsdGFfbnM6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMgKG11c3QgYmUgd2l0aGluICstMXMpXG4rICpcbisgKiBDb252ZXJ0cyBuYW5vc2Vjb25kcyB0byBUSUUgdW5pdHMgKDAuMDEgcHMpIGFuZCB3cml0ZXMgVElFIGRhdGFcbisgKiB0byB0aGUgc3BlY2lmaWVkIGNoYW5uZWwuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK2ludCB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgZGVsdGFfbnMpXG4re1xuK1x0czY0IHRpZV9kYXRhO1xuK1x0aW50IHJjO1xuK1xuK1x0aWYgKFdBUk5fT04oZGVsdGFfbnMgXHUwMDNjPSAtTlNFQ19QRVJfU0VDIHx8IGRlbHRhX25zIFx1MDAzZT0gTlNFQ19QRVJfU0VDKSlcbitcdFx0cmV0dXJuIC1FUkFOR0U7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkZXYtXHUwMDNldGllX2xvY2spO1xuK1xuK1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRJRSBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbitcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLFxuK1x0XHRcdFx0ICBaTF9EUExMX1RJRV9DVFJMX09QLFxuK1x0XHRcdFx0ICBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0LyogQ29udmVydCBucyB0byBUSUUgdW5pdHMgKDAuMDEgcHMgPSAxMF4tMTQgcykgKi9cbitcdHRpZV9kYXRhID0gZGVsdGFfbnMgKiAxMDAwMDBMTDtcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9EQVRBKGNoKSwgdGllX2RhdGEpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0ssIEJJVChjaCkpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsXG4rXHRcdFx0XHRaTF9EUExMX1RJRV9DVFJMX09QX1dSKTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAgLSBleGVjdXRlIG9uZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb25cbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqIEBvdXRfbWFzazogYml0bWFzayBvZiBvdXRwdXRzIHRvIHN0ZXBcbisgKiBAc3RlcF9jeWNsZXM6IHBoYXNlIHN0ZXAgaW4gc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzXG4rICogQHRvZF9zdGVwOiBhbHNvIHN0ZXAgdGhlIFRvRCBjb3VudGVyXG4rICpcbisgKiBBbGwgbWFza2VkIG91dHB1dHMgbXVzdCB1c2Ugc3ludGhlc2l6ZXJzIG9mIHRoZSBzYW1lIGZyZXF1ZW5jeSBzaW5jZVxuKyAqIHRoZSBzdGVwIHZhbHVlIGlzIGluIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcy5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4raW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuK1x0XHRcdCAgICB1MTYgb3V0X21hc2ssIHMzMiBzdGVwX2N5Y2xlcyxcbitcdFx0XHQgICAgYm9vbCB0b2Rfc3RlcClcbit7XG4rXHR1OCBjdHJsO1xuK1x0aW50IHJjO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZGV2LVx1MDAzZXBoYXNlX3N0ZXBfbG9jayk7XG4rXG4rXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgcGhhc2Ugc3RlcCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbitcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLFxuK1x0XHRcdFx0ICBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QLFxuK1x0XHRcdFx0ICBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VUyk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBLFxuK1x0XHRcdCAgICAgICBzdGVwX2N5Y2xlcyk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLLCBvdXRfbWFzayk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUiwgMSk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdGN0cmwgPSBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfRFBMTCwgY2gpIHxcbitcdCAgICAgICBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AsXG4rXHRcdFx0ICBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1dSSVRFKTtcbitcdGlmICh0b2Rfc3RlcClcbitcdFx0Y3RybCB8PSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX1RPRF9TVEVQO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLCBjdHJsKTtcbit9XG4rXG4gLyoqXG4gICogemwzMDczeF9jaGFuX3N0YXRlX3NldCAtIGNvbW1pdCBEUExMIGNoYW5uZWwgc3RhdGUgY2hhbmdlcyB0byBoYXJkd2FyZVxuICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhcbmluZGV4IGRjOWM2ZDk1YmRlZTcuLjk5YzNiNzA4OGY2NzggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaFxuQEAgLTUsMTAgKzUsMTIgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RkZGVmLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC90aW1lNjQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcInJlZ3MuaFwiXG4gXG4rc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wO1xuIHN0cnVjdCB6bDMwNzN4X2RldjtcbiBcbiAvKipcbkBAIC00Miw2ICs0NCwyMSBAQCBpbnQgemwzMDczeF9jaGFuX3N0YXRlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCxcbiBpbnQgemwzMDczeF9jaGFuX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7XG4gaW50IHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpO1xuIFxuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpO1xuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbitcdFx0XHQgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKTtcbitpbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cyk7XG4raW50IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuK1x0XHRcdCAgICBzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YSk7XG4raW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuK1x0XHRcdCAgICB1MTYgb3V0X21hc2ssIHMzMiBzdGVwX2N5Y2xlcywgYm9vbCB0b2Rfc3RlcCk7XG4rXG4raW50IHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgb2Zmc2V0KTtcbitcbitpbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKTtcbitcbiAvKipcbiAgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X2dldCAtIGdldCBjYWNoZWQgZGZfb2Zmc2V0IHZzIHRyYWNrZWQgcmVmZXJlbmNlXG4gICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuQEAgLTIwMCw2ICsyMTcsMjEgQEAgc3RhdGljIGlubGluZSBib29sIHpsMzA3M3hfY2hhbl9tb2RlX2lzX3JlZmxvY2soY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcbiBcdHJldHVybiB6bDMwNzN4X2NoYW5fbW9kZV9nZXQoY2hhbikgPT0gWkxfRFBMTF9NT0RFX1JFRlNFTF9NT0RFX1JFRkxPQ0s7XG4gfVxuIFxuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZSAtIGNoZWNrIGlmIGNoYW5uZWwgbW9kZSBzdXBwb3J0cyBUSUUgd3JpdGVcbisgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG4rICpcbisgKiBUSUUgd3JpdGUgaXMgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMgcmVnYXJkbGVzcyBvZiBsb2NrIHN0YXRlLlxuKyAqXG4rICogUmV0dXJuOiB0cnVlIGlmIFRJRSB3cml0ZSBpcyBzdXBwb3J0ZWQsIGZhbHNlIG90aGVyd2lzZVxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbFxuK3psMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxuK3tcbitcdHJldHVybiB6bDMwNzN4X2NoYW5fbW9kZV9pc19hdXRvKGNoYW4pIHx8XG4rXHRcdHpsMzA3M3hfY2hhbl9tb2RlX2lzX3JlZmxvY2soY2hhbik7XG4rfVxuK1xuIC8qKlxuICAqIHpsMzA3M3hfY2hhbl9pc19ob19yZWFkeSAtIGNoZWNrIGlmIGhvbGRvdmVyIGlzIHJlYWR5XG4gICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1xuaW5kZXggNWIyZDc3ZjJjMjI4OC4uMjMwZGYwOGUyN2NkMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1xuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jXG5AQCAtMzIyLDcgKzMyMiw3IEBAIGludCB6bDMwNzN4X3dyaXRlX3U0OChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLCB1NjQgdmFsKVxuIGludCB6bDMwNzN4X3BvbGxfemVyb191OChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLFxuIFx0XHRcdCB1OCBtYXNrLCB1bnNpZ25lZCBpbnQgdGltZW91dF91cylcbiB7XG4tI2RlZmluZSBaTF9QT0xMX1NMRUVQX1VTIDEwXG4rXHR1bnNpZ25lZCBpbnQgc2xlZXBfdXMgPSB0aW1lb3V0X3VzIC8gNTA7XG4gXHR1bnNpZ25lZCBpbnQgdmFsO1xuIFxuIFx0LyogQ2hlY2sgdGhlIHJlZ2lzdGVyIGlzIDhiaXQgKi9cbkBAIC0zMzYsNyArMzM2LDcgQEAgaW50IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsXG4gXHRyZWcgPSBaTF9SRUdfQUREUihyZWcpICsgWkxfUkFOR0VfT0ZGU0VUO1xuIFxuIFx0cmV0dXJuIHJlZ21hcF9yZWFkX3BvbGxfdGltZW91dCh6bGRldi1cdTAwM2VyZWdtYXAsIHJlZywgdmFsLCAhKHZhbCBcdTAwMjYgbWFzayksXG4tXHRcdFx0XHRcdFpMX1BPTExfU0xFRVBfVVMsIHRpbWVvdXRfdXMpO1xuK1x0XHRcdFx0XHRzbGVlcF91cywgdGltZW91dF91cyk7XG4gfVxuIFxuIGludCB6bDMwNzN4X21iX29wKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCBvcF9yZWcsIHU4IG9wX3ZhbCxcbkBAIC01MTEsNiArNTExLDExIEBAIHpsMzA3M3hfZGV2X3N0YXRlX2ZldGNoKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXG4gXHRpbnQgcmM7XG4gXHR1OCBpO1xuIFxuK1x0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1NURVBfVElNRV9NQVNLLFxuK1x0XHRcdCAgICAgIFx1MDAyNnpsZGV2LVx1MDAzZW91dF9zdGVwX3RpbWVfbWFzayk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFpMMzA3M1hfTlVNX1JFRlM7IGkrKykge1xuIFx0XHRyYyA9IHpsMzA3M3hfcmVmX3N0YXRlX2ZldGNoKHpsZGV2LCBpKTtcbiBcdFx0aWYgKHJjKSB7XG5AQCAtMTAzNCw2ICsxMDM5LDE0IEBAIGludCB6bDMwNzN4X2Rldl9wcm9iZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxuIFx0ICogYW5kL29yIHBvbGxzIGFyZSByZXF1aXJlZCB0byBiZSBkb25lIGF0b21pY2FsbHkuXG4gXHQgKi9cbiBcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVx1MDAzZWRldiwgXHUwMDI2emxkZXYtXHUwMDNlbXVsdGlvcF9sb2NrKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXHUwMDNlZGV2LCByYyxcbitcdFx0XHRcdCAgICAgXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcblwiKTtcbitcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVx1MDAzZWRldiwgXHUwMDI2emxkZXYtXHUwMDNlcGhhc2Vfc3RlcF9sb2NrKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXHUwMDNlZGV2LCByYyxcbitcdFx0XHRcdCAgICAgXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcblwiKTtcbitcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVx1MDAzZWRldiwgXHUwMDI2emxkZXYtXHUwMDNldGllX2xvY2spO1xuIFx0aWYgKHJjKVxuIFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIHJjLFxuIFx0XHRcdFx0ICAgICBcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxuXCIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaFxuaW5kZXggNzhkYzIwOGYzZWVhMi4uNjdjMTBlMjU5NTExOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oXG5AQCAtMjYsNiArMjYsMTAgQEAgc3RydWN0IHpsMzA3M3hfZHBsbDtcbiAjZGVmaW5lIFpMX1BPTExfSFdSRUdfVElNRU9VVF9VU1x0KDUwICogVVNFQ19QRVJfTVNFQylcbiAjZGVmaW5lIFpMX1BPTExfTUJfVElNRU9VVF9VU1x0XHQoMzAgKiBVU0VDX1BFUl9NU0VDKVxuICNkZWZpbmUgWkxfUE9MTF9QSEFTRV9FUlJfVElNRU9VVF9VU1x0KDUwICogVVNFQ19QRVJfTVNFQylcbisjZGVmaW5lIFpMX1BPTExfUEhBU0VfU1RFUF9USU1FT1VUX1VTXHQoMzAwMCAqIFVTRUNfUEVSX01TRUMpXG4rI2RlZmluZSBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTXHQoMTAwMCAqIFVTRUNfUEVSX01TRUMpXG4rI2RlZmluZSBaTF9QT0xMX1RPRF9SRF9USU1FT1VUX1VTXHQoMzAgKiBVU0VDX1BFUl9NU0VDKVxuKyNkZWZpbmUgWkxfUE9MTF9UT0RfV1JfVElNRU9VVF9VU1x0KDEwMDAgKiBVU0VDX1BFUl9NU0VDKVxuIFxuIGVudW0gemwzMDczeF9mbGFncyB7XG4gXHRaTDMwNzNYX0ZMQUdfUkVGX1BIQVNFX0NPTVBfMzJfQklULFxuQEAgLTU1LDYgKzU5LDggQEAgc3RydWN0IHpsMzA3M3hfY2hpcF9pbmZvIHtcbiAgKiBAcmVnbWFwOiByZWdtYXAgdG8gYWNjZXNzIGRldmljZSByZWdpc3RlcnNcbiAgKiBAaW5mbzogZGV0ZWN0ZWQgY2hpcCBpbmZvXG4gICogQG11bHRpb3BfbG9jazogdG8gc2VyaWFsaXplIG11bHRpcGxlIHJlZ2lzdGVyIG9wZXJhdGlvbnNcbisgKiBAdGllX2xvY2s6IHRvIHNlcmlhbGl6ZSBUSUUgd3JpdGUgb3BlcmF0aW9uc1xuKyAqIEBwaGFzZV9zdGVwX2xvY2s6IHRvIHNlcmlhbGl6ZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb25zXG4gICogQHJlZjogYXJyYXkgb2YgaW5wdXQgcmVmZXJlbmNlcycgaW52YXJpYW50c1xuICAqIEBvdXQ6IGFycmF5IG9mIG91dHMnIGludmFyaWFudHNcbiAgKiBAc3ludGg6IGFycmF5IG9mIHN5bnRocycgaW52YXJpYW50c1xuQEAgLTYzLDYgKzY5LDcgQEAgc3RydWN0IHpsMzA3M3hfY2hpcF9pbmZvIHtcbiAgKiBAa3dvcmtlcjogdGhyZWFkIGZvciBwZXJpb2RpYyB3b3JrXG4gICogQHdvcms6IHBlcmlvZGljIHdvcmtcbiAgKiBAY2xvY2tfaWQ6IGNsb2NrIGlkIG9mIHRoZSBkZXZpY2VcbisgKiBAb3V0X3N0ZXBfdGltZV9tYXNrOiBvdXRwdXQgc3RlcC10aW1lIG1hc2sgKGRldmljZS1nbG9iYWwpXG4gICogQHBoYXNlX2F2Z19mYWN0b3I6IHBoYXNlIG9mZnNldCBtZWFzdXJlbWVudCBhdmVyYWdpbmcgZmFjdG9yXG4gICogQGZyZXFfbW9uaXRvcjogaXMgZnJlcXVlbmN5IG1vbml0b3IgZW5hYmxlZFxuICAqL1xuQEAgLTcxLDYgKzc4LDggQEAgc3RydWN0IHpsMzA3M3hfZGV2IHtcbiBcdHN0cnVjdCByZWdtYXBcdFx0XHQqcmVnbWFwO1xuIFx0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hpcF9pbmZvXHQqaW5mbztcbiBcdHN0cnVjdCBtdXRleFx0XHRcdG11bHRpb3BfbG9jaztcbitcdHN0cnVjdCBtdXRleFx0XHRcdHRpZV9sb2NrO1xuK1x0c3RydWN0IG11dGV4XHRcdFx0cGhhc2Vfc3RlcF9sb2NrO1xuIFxuIFx0LyogSW52YXJpYW50cyAqL1xuIFx0c3RydWN0IHpsMzA3M3hfcmVmXHRyZWZbWkwzMDczWF9OVU1fUkVGU107XG5AQCAtODcsNiArOTYsNyBAQCBzdHJ1Y3QgemwzMDczeF9kZXYge1xuIFxuIFx0LyogUGVyLWNoaXAgcGFyYW1ldGVycyAqL1xuIFx0dTY0XHRcdFx0Y2xvY2tfaWQ7XG4rXHR1MTZcdFx0XHRvdXRfc3RlcF90aW1lX21hc2s7XG4gXHR1OFx0XHRcdHBoYXNlX2F2Z19mYWN0b3I7XG4gXHRib29sXHRcdFx0ZnJlcV9tb25pdG9yO1xuIH07XG5AQCAtMzA4LDYgKzMxOCwxOSBAQCB6bDMwNzN4X2Rldl9vdXRfaXNfZW5hYmxlZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleClcbiBcdHJldHVybiB6bDMwNzN4X3N5bnRoX2lzX2VuYWJsZWQoc3ludGgpIFx1MDAyNlx1MDAyNiB6bDMwNzN4X291dF9pc19lbmFibGVkKG91dCk7XG4gfVxuIFxuKy8qKlxuKyAqIHpsMzA3M3hfZGV2X291dF9pc19zdGVwcGVkIC0gY2hlY2sgaWYgb3V0cHV0IGlzIGluIHN0ZXAtdGltZSBtYXNrXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGluZGV4OiBvdXRwdXQgaW5kZXhcbisgKlxuKyAqIFJldHVybjogdHJ1ZSBpZiBvdXRwdXQgaXMgYWZmZWN0ZWQgYnkgc3RlcC10aW1lIG9wZXJhdGlvbnNcbisgKi9cbitzdGF0aWMgaW5saW5lIGJvb2xcbit6bDMwNzN4X2Rldl9vdXRfaXNfc3RlcHBlZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleClcbit7XG4rXHRyZXR1cm4gISEoemxkZXYtXHUwMDNlb3V0X3N0ZXBfdGltZV9tYXNrIFx1MDAyNiBCSVQoaW5kZXgpKTtcbit9XG4rXG4gLyoqXG4gICogemwzMDczeF9kZXZfb3V0X2RwbGxfZ2V0IC0gZ2V0IERQTEwgSUQgdGhlIG91dHB1dCBpcyBkcml2ZW4gYnlcbiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcbmluZGV4IDA0ODhhZTZhYzQ4NmMuLmE2ODZkZDUyYmZhYzkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuY1xuQEAgLTIsNiArMiw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2J1Zy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29udGFpbmVyX29mLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZfcHJpbnRrLmhcdTAwM2VcbkBAIC0xMyw2ICsxNCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3ByaW50Zi5oXHUwMDNlXG4gXG5AQCAtMjI3NSw0NSArMjI3NywzNzUgQEAgemwzMDczeF9kcGxsX2luaXRfZmluZV9waGFzZV9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcbiBcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfU1lOVEhfUEhBU0VfU0hJRlRfQ1RSTCwgMHgwMSk7XG4gfVxuIFxuKy8qIE1heGltdW0gZnJlcXVlbmN5IGFkanVzdG1lbnQ6ICstMSUgb2Ygbm9taW5hbCBpbiBwcGIgKi9cbisjZGVmaW5lIFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESlx0MTAwMDAwMDBcbitcbiAvKipcbi0gKiB6bDMwNzN4X2RwbGxfYWxsb2MgLSBhbGxvY2F0ZSBEUExMIGRldmljZVxuLSAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuLSAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlclxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCAtIHJlYWQgY3VycmVudCB0aW1lIGZyb20gVG9EIGNvdW50ZXJzXG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4rICogQHRzOiB0aW1lc3BlYyB0byBzdG9yZSBjdXJyZW50IHRpbWVcbisgKiBAc3RzOiBvcHRpb25hbCBzeXN0ZW0gdGltZXN0YW1wIHBhaXIgZm9yIGNyb3NzLXRpbWVzdGFtcGluZ1xuICAqXG4tICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cylcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRwbGwtXHUwMDNlZGV2LCB6bGRwbGwtXHUwMDNlaWQsIGZhbHNlLCB0cywgc3RzKTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQgLSBzZXQgVG9EIGNvdW50ZXJzIHRvIGdpdmVuIHRpbWVcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbisgKiBAdHM6IHRpbWVzcGVjIHdpdGggdGltZSB0byBzZXRcbiAgKlxuLSAqIFJldHVybjogcG9pbnRlciB0byBEUExMIGRldmljZSBvbiBzdWNjZXNzLCBlcnJvciBwb2ludGVyIG9uIGVycm9yXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiAgKi9cbi1zdHJ1Y3QgemwzMDczeF9kcGxsICpcbi16bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXG4rXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpXG4ge1xuLVx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsO1xuK1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXG4rXHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuIFxuLVx0emxkcGxsID0ga3phbGxvY19vYmooKnpsZHBsbCk7XG4tXHRpZiAoIXpsZHBsbClcbi1cdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuIFxuLVx0emxkcGxsLVx1MDAzZWRldiA9IHpsZGV2O1xuLVx0emxkcGxsLVx1MDAzZWlkID0gY2g7XG4tXHRtdXRleF9pbml0KFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbi1cdElOSVRfTElTVF9IRUFEKFx1MDAyNnpsZHBsbC1cdTAwM2VwaW5zKTtcbitcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCwgKnRzKTtcbit9XG4gXG4tXHRyZXR1cm4gemxkcGxsO1xuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwIC0gYWRqdXN0IHN1Yi1zZWNvbmQgdGltZSB2aWEgcGhhc2Ugc3RlcFxuKyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbFxuKyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzIChtdXN0IGJlIHdpdGhpbiAoLU5TRUNfUEVSX1NFQyxcbisgKiAgICAgICAgIE5TRUNfUEVSX1NFQykpXG4rICpcbisgKiBVc2VzIHRoZSBvdXRwdXQgcGhhc2Ugc3RlcCBtZWNoYW5pc20gd2l0aCB0b2Rfc3RlcD0xIHRvIGFkanVzdCBib3RoXG4rICogdGhlIG91dHB1dCBjbG9jayBwaGFzZSBhbmQgdGhlIFRvRCBjb3VudGVyIHNpbXVsdGFuZW91c2x5LiBUaGlzIGtlZXBzXG4rICogb3V0cHV0cyBhbmQgVG9EIGNvaGVyZW50LiBPbmx5IHZhbGlkIGZvciBOQ08uXG4rICpcbisgKiBPdXRwdXRzIGFyZSBncm91cGVkIGJ5IHN5bnRoZXNpemVyIHNpbmNlIHRoZSBwaGFzZSBzdGVwIHZhbHVlIGlzIGluXG4rICogc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzLiBUaGUgZmlyc3Qgc3ludGggZ3JvdXAgd2l0aCBlbmFibGVkIG91dHB1dHNcbisgKiB1c2VzIHRvZF9zdGVwIHRvIGFkanVzdCBib3RoIG91dHB1dHMgYW5kIHRoZSBUb0QgY291bnRlci4gUmVtYWluaW5nXG4rICogZ3JvdXBzIHN0ZXAgb3V0cHV0cyBvbmx5LiBJZiBubyBzeW50aCBoYXMgZW5hYmxlZCBvdXRwdXRzLCB0aGUgVG9EXG4rICogY291bnRlciBpcyBzdGVwcGVkIGFsb25lIHVzaW5nIGFuIGVtcHR5IG91dHB1dCBtYXNrICh0aGUgRlcgdXNlc1xuKyAqIHRoZSBmaXJzdCBlbmFibGVkIHN5bnRoJ3MgcGVyaW9kIGZvciB0aGUgY29udmVyc2lvbikuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVPUE5PVFNVUFAgaWYgbm8gc3ludGhzIGF2YWlsYWJsZSwgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLFxuK1x0XHRcdFx0XHQgICAgICAgczY0IGRlbHRhKVxuK3tcbitcdHUxNiBzeW50aF9tYXNrW1pMMzA3M1hfTlVNX1NZTlRIU10gPSB7fTtcbitcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuK1x0Y29uc3Qgc3RydWN0IHpsMzA3M3hfc3ludGggKnN5bnRoO1xuK1x0c3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbjtcbitcdHUzMiBmaXJzdF9zeW50aF9mcmVxID0gMDtcbitcdGJvb2wgdG9kX3N0ZXBwZWQgPSBmYWxzZTtcbitcdHMzMiBzdGVwX2N5Y2xlcztcbitcdHUzMiBzeW50aF9mcmVxO1xuK1x0aW50IHJjO1xuK1x0dTggaTtcbitcbitcdC8qIEJ1aWxkIHBlci1zeW50aCBvdXRwdXQgbWFza3MgZnJvbSByZWdpc3RlcmVkIG91dHB1dCBwaW5zICovXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBpbiwgXHUwMDI2emxkcGxsLVx1MDAzZXBpbnMsIGxpc3QpIHtcbitcdFx0dTggb3V0X2lkLCBzeW50aF9pZDtcbitcbitcdFx0aWYgKHpsMzA3M3hfZHBsbF9pc19pbnB1dF9waW4ocGluKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0b3V0X2lkID0gemwzMDczeF9vdXRwdXRfcGluX291dF9nZXQocGluLVx1MDAzZWlkKTtcbitcbitcdFx0aWYgKCF6bDMwNzN4X2Rldl9vdXRfaXNfc3RlcHBlZCh6bGRldiwgb3V0X2lkKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0c3ludGhfaWQgPSB6bDMwNzN4X2Rldl9vdXRfc3ludGhfZ2V0KHpsZGV2LCBvdXRfaWQpO1xuK1x0XHRpZiAoc3ludGhfaWQgXHUwMDNlPSBaTDMwNzNYX05VTV9TWU5USFMpIHtcbitcdFx0XHRkZXZfd2Fybih6bGRldi1cdTAwM2VkZXYsIFwiVW5leHBlY3RlZCBzeW50aCBpZCBmb3IgT1VUJXVcXG5cIixcbitcdFx0XHRcdCBvdXRfaWQpO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXHRcdHN5bnRoX21hc2tbc3ludGhfaWRdIHw9IEJJVChvdXRfaWQpO1xuK1x0fVxuK1xuK1x0LyogUHJvY2VzcyBlYWNoIHN5bnRoIGdyb3VwICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBaTDMwNzNYX05VTV9TWU5USFM7IGkrKykge1xuK1x0XHRzeW50aCA9IHpsMzA3M3hfc3ludGhfc3RhdGVfZ2V0KHpsZGV2LCBpKTtcbitcdFx0aWYgKCF6bDMwNzN4X3N5bnRoX2lzX2VuYWJsZWQoc3ludGgpIHx8XG4rXHRcdCAgICB6bDMwNzN4X3N5bnRoX2RwbGxfZ2V0KHN5bnRoKSAhPSB6bGRwbGwtXHUwMDNlaWQpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHN5bnRoX2ZyZXEgPSB6bDMwNzN4X3N5bnRoX2ZyZXFfZ2V0KHN5bnRoKTtcbitcbitcdFx0LyogUmVtZW1iZXIgZmlyc3QgZW5hYmxlZCBzeW50aCBmcmVxIGZvciBUb0Qtb25seSBmYWxsYmFjayAqL1xuK1x0XHRpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpXG4rXHRcdFx0Zmlyc3Rfc3ludGhfZnJlcSA9IHN5bnRoX2ZyZXE7XG4rXG4rXHRcdGlmICghc3ludGhfbWFza1tpXSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0LyogU2FmZSBmb3IgczMyOiBtYXggc3ludGggZnJlcSBpcyA3NTAgTUh6ICovXG4rXHRcdHN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIHN5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7XG4rXG4rXHRcdHJjID0gemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCxcbitcdFx0XHRcdFx0ICAgICBzeW50aF9tYXNrW2ldLCBzdGVwX2N5Y2xlcyxcbitcdFx0XHRcdFx0ICAgICAhdG9kX3N0ZXBwZWQpO1xuK1x0XHRpZiAocmMpIHtcbitcdFx0XHRpZiAodG9kX3N0ZXBwZWQpIHtcbitcdFx0XHRcdGRldl93YXJuKHpsZGV2LVx1MDAzZWRldixcbitcdFx0XHRcdFx0IFwiUGFydGlhbCBwaGFzZSBzdGVwIGZhaWx1cmVcXG5cIik7XG4rXHRcdFx0XHRyZXR1cm4gMDtcbitcdFx0XHR9XG4rXHRcdFx0cmV0dXJuIHJjO1xuK1x0XHR9XG4rXHRcdHRvZF9zdGVwcGVkID0gdHJ1ZTtcbitcdH1cbitcbitcdGlmICghZmlyc3Rfc3ludGhfZnJlcSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0LyogTm8gZW5hYmxlZCBvdXRwdXRzIGZvdW5kOyBzdGVwIFRvRCBjb3VudGVyIG9ubHkgdXNpbmcgdGhlXG4rXHQgKiBmaXJzdCBlbmFibGVkIHN5bnRoJ3MgcGVyaW9kIChlbXB0eSBvdXRwdXQgbWFzaykuXG4rXHQgKi9cbitcdGlmICghdG9kX3N0ZXBwZWQpIHtcbitcdFx0c3RlcF9jeWNsZXMgPSBkaXZfczY0KGRlbHRhICogZmlyc3Rfc3ludGhfZnJlcSwgTlNFQ19QRVJfU0VDKTtcbitcdFx0cmV0dXJuIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsIDAsXG4rXHRcdFx0XHRcdCAgICAgICBzdGVwX2N5Y2xlcywgdHJ1ZSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gLyoqXG4tICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlXG4tICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lIC0gYWRqdXN0IFBUUCBjbG9jayB0aW1lXG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4rICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHNcbiAgKlxuLSAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuXG4rICogRm9yIE5DTywgbGFyZ2UgZGVsdGFzIChcdTAwM2U9IDEgc2Vjb25kKSBhcmUgc3BsaXQgaW50byBhIFRvRFxuKyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciB0aGUgc2Vjb25kcyBwYXJ0IGFuZCBhbiBvdXRwdXQgcGhhc2Ugc3RlcCBmb3JcbisgKiB0aGUgc3ViLXNlY29uZCByZW1haW5kZXIuIFN1Yi1zZWNvbmQgZGVsdGFzIHVzZSBwaGFzZSBzdGVwIGRpcmVjdGx5LFxuKyAqIGZhbGxpbmcgYmFjayB0byBUb0QgcmVhZC1tb2RpZnktd3JpdGUgaWYgcGhhc2Ugc3RlcCBpcyB1bmF2YWlsYWJsZS5cbisgKiBJbiBBVVRPL1JFRkxPQ0sgbW9kZXMsIGxhcmdlIGRlbHRhcyBhcmUgc3BsaXQgaW50byBUb0RcbisgKiByZWFkLW1vZGlmeS13cml0ZSBmb3Igc2Vjb25kcyBhbmQgVElFIHdyaXRlIGZvciB0aGUgc3ViLXNlY29uZFxuKyAqIHJlbWFpbmRlci4gU3ViLXNlY29uZCBkZWx0YXMgdXNlIFRJRSB3cml0ZSBkaXJlY3RseS5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4gICovXG4tdm9pZFxuLXpsMzA3M3hfZHBsbF9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHM2NCBkZWx0YSlcbiB7XG4tXHRXQVJOKHpsZHBsbC1cdTAwM2VkcGxsX2RldiwgXCJEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXFxuXCIpO1xuK1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXG4rXHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuK1x0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4rXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xuK1x0Ym9vbCBzZWNfYWRqdXN0ZWQgPSBmYWxzZTtcbitcdHN0cnVjdCB0aW1lc3BlYzY0IHRzO1xuK1x0aW50IHJjO1xuIFxuLVx0bXV0ZXhfZGVzdHJveShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4tXHRrZnJlZSh6bGRwbGwpO1xuK1x0aWYgKCFkZWx0YSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuK1x0LyogTW9kZXMgd2l0aG91dCBwaGFzZSBzdGVwIG9yIFRJRSB1c2UgcGxhaW4gVG9EIGFkanVzdCAqL1xuK1x0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCk7XG4rXHRpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKVxuK1x0XHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCxcbitcdFx0XHRcdFx0ICAgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTtcbitcbitcdC8qIFNwbGl0IG9mZiBzZWNvbmRzIHZpYSBUb0QgcmVhZC1tb2RpZnktd3JpdGUgc28gdGhlIHN1Yi1zZWNvbmRcbitcdCAqIHJlbWFpbmRlciBjYW4gYmUgYXBwbGllZCB0aHJvdWdoIHRoZSBvdXRwdXQtY29oZXJlbnQgbWVjaGFuaXNtXG4rXHQgKiAocGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUpLlxuK1x0ICovXG4rXHRpZiAoZGVsdGEgXHUwMDNlPSBOU0VDX1BFUl9TRUMgfHwgZGVsdGEgXHUwMDNjPSAtTlNFQ19QRVJfU0VDKSB7XG4rXHRcdHMzMiByZW1haW5kZXI7XG4rXG4rXHRcdHRzLnR2X3NlYyA9IGRpdl9zNjRfcmVtKGRlbHRhLCBOU0VDX1BFUl9TRUMsIFx1MDAyNnJlbWFpbmRlcik7XG4rXHRcdHRzLnR2X25zZWMgPSAwO1xuK1x0XHRkZWx0YSA9IHJlbWFpbmRlcjtcbitcbitcdFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCB0cyk7XG4rXHRcdGlmIChyYylcbitcdFx0XHRyZXR1cm4gcmM7XG4rXG4rXHRcdC8qIE5vIHN1Yi1zZWNvbmQgcmVtYWluZGVyLCBkb25lICovXG4rXHRcdGlmICghZGVsdGEpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXG4rXHRcdC8qIFdhaXQgZm9yIHRoZSBUb0Qgd3JpdGUgdG8gYmUgYXBwbGllZCBhdCB0aGUgMSBIeiBlZGdlXG4rXHRcdCAqIGJlZm9yZSBpc3N1aW5nIHBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlLCBzbyB0aGUgcGVuZGluZ1xuK1x0XHQgKiBXUl9ORVhUXzFIWiBkb2VzIG5vdCBvdmVyd3JpdGUgdGhlIHN1Yi1zZWNvbmQgYWRqdXN0bWVudC5cbitcdFx0ICovXG4rXHRcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQpO1xuK1x0XHRpZiAocmMpXG4rXHRcdFx0cmV0dXJuIHJjO1xuK1xuK1x0XHRzZWNfYWRqdXN0ZWQgPSB0cnVlO1xuK1x0fVxuK1xuK1x0LyogQXBwbHkgc3ViLXNlY29uZCBkZWx0YSB2aWEgcGhhc2Ugc3RlcCAoTkNPKSBvciBUSUUgd3JpdGUgKi9cbitcdGlmICh6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikpIHtcbitcdFx0cmMgPSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCh6bGRwbGwsIGRlbHRhKTtcbitcdFx0aWYgKCFyYylcbitcdFx0XHRyZXR1cm4gMDtcbitcdH0gZWxzZSB7XG4rXHRcdHJjID0gemwzMDczeF9jaGFuX3RpZV93cml0ZSh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCBkZWx0YSk7XG4rXHRcdGlmICghcmMpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHQvKiBQaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSBmYWlsZWQsIGZhbGwgYmFjayB0byBUb0QgYWRqdXN0ICovXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsXG4rXHRcdFx0XHQgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTtcbitcbitcdC8qIEluIHRoZSB1bmxpa2VseSBldmVudCB0aGF0IGJvdGggcGhhc2Ugc3RlcC9USUUgd3JpdGUgYW5kIGZhbGxiYWNrXG4rXHQgKiBUb0QgYWRqdXN0IGZhaWwgYWZ0ZXIgc2Vjb25kcyB3ZXJlIGFscmVhZHkgY29tbWl0dGVkLCByZXR1cm5cbitcdCAqIHN1Y2Nlc3MgdG8gcHJldmVudCB0aGUgUFRQIHNlcnZvIGZyb20gcmV0cnlpbmcgdGhlIGZ1bGwgZGVsdGEgYW5kXG4rXHQgKiBhcHBseWluZyBzZWNvbmRzIGFnYWluLiBUaGUgc3ViLXNlY29uZCByZXNpZHVhbCB3aWxsIHNlbGYtY29ycmVjdFxuK1x0ICogaW4gdGhlIG5leHQgc2Vydm8gY3ljbGUuXG4rXHQgKi9cbitcdGlmIChyYyBcdTAwMjZcdTAwMjYgc2VjX2FkanVzdGVkKSB7XG4rXHRcdGRldl93YXJuKHpsZGV2LVx1MDAzZWRldixcbitcdFx0XHQgXCJTdWItc2Vjb25kIGFkanVzdG1lbnQgZmFpbGVkIGFmdGVyIHNlY29uZHMgYXBwbGllZFxcblwiKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmM7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSAtIGFkanVzdCBQVFAgY2xvY2sgZnJlcXVlbmN5XG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4rICogQHNjYWxlZF9wcG06IGZyZXF1ZW5jeSBhZGp1c3RtZW50IGluIHNjYWxlZCBwcG0gKHBwbSAqIDJeMTYpXG4rICpcbisgKiBPbmx5IHN1cHBvcnRlZCBmb3IgTkNPLiBXcml0ZXMgdGhlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgcmVnaXN0ZXIuXG4rICpcbisgKiBSZXR1cm46XG4rICogKiAlMFx0XHRcdC0gc3VjY2VzcyBvciBAc2NhbGVkX3BwbSBpcyB6ZXJvIChuby1vcClcbisgKiAqICUtRU9QTk9UU1VQUFx0LSBOQ08gcGluIGlzIG5vdCBjb25uZWN0ZWQgYW5kIEBzY2FsZWRfcHBtIGlzIG5vbi16ZXJvXG4rICogKiBuZWdhdGl2ZVx0XHQtIG90aGVyIGVycm9yXG4rICovXG4rc3RhdGljIGludFxuK3psMzA3M3hfZHBsbF9wdHBfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGxvbmcgc2NhbGVkX3BwbSlcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xuK1x0czY0IG9mZnNldDtcbitcbitcdC8qIENvbnZlcnQgc2NhbGVkX3BwbSB0byBkZl9vZmZzZXQgaW4gMl4tNDggc3RlcHM6XG4rXHQgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDJeMzIpIC8gMTBeNlxuK1x0ICpcbitcdCAqIFNpbXBsaWZ5IHRvIGF2b2lkIG92ZXJmbG93OlxuK1x0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjI2KSAvIDVeNlxuK1x0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiA2NzEwODg2NCkgLyAxNTYyNVxuK1x0ICovXG4rXHRvZmZzZXQgPSAtZGl2X3M2NCgoczY0KXNjYWxlZF9wcG0gKiA2NzEwODg2NExMLCAxNTYyNSk7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuK1x0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkcGxsLVx1MDAzZWRldiwgemxkcGxsLVx1MDAzZWlkKTtcbitcdGlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKVxuK1x0XHRyZXR1cm4gc2NhbGVkX3BwbSA/IC1FT1BOT1RTVVBQIDogMDtcbitcdGlmIChvZmZzZXQgPT0gY2hhbi1cdTAwM2VkZl9vZmZzZXQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCwgb2Zmc2V0KTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSAtIGFkanVzdCBQVFAgY2xvY2sgcGhhc2VcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbisgKiBAZGVsdGE6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHNcbisgKlxuKyAqIE9ubHkgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMuIFVzZXMgVElFIHdyaXRlIGZvclxuKyAqIG5hbm9zZWNvbmQgcmVzb2x1dGlvbiBwaGFzZSBhZGp1c3RtZW50LlxuKyAqXG4rICogUmV0dXJuOlxuKyAqICogJTBcdFx0XHQtIHN1Y2Nlc3Mgb3IgQGRlbHRhIGlzIHplcm8gKG5vLW9wKVxuKyAqICogJS1FT1BOT1RTVVBQXHQtIG1vZGUgZG9lcyBub3Qgc3VwcG9ydCBUSUUgYW5kIEBkZWx0YSBpcyBub24temVyb1xuKyAqICogbmVnYXRpdmVcdFx0LSBvdGhlciBlcnJvclxuKyAqL1xuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHMzMiBkZWx0YSlcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbitcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XG4rXG4rXHRpZiAoIWRlbHRhKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXG4rXHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLVx1MDAzZWlkKTtcbitcbitcdGlmICghemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRyZXR1cm4gemwzMDczeF9jaGFuX3RpZV93cml0ZSh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCBkZWx0YSk7XG4rfVxuK1xuK3N0YXRpYyBzMzJcbit6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyBfX2Fsd2F5c191bnVzZWQpXG4re1xuK1x0LyogSFcgbGltaXRzIFRJRSB3cml0ZSB0byArLTEgc2Vjb25kLiBSZXR1cm4gdGhlIGNvbnN0YW50IEhXXG4rXHQgKiBsaW1pdCBhbmQgbGV0IGFkanBoYXNlIGhhbmRsZSBtb2RlLXNwZWNpZmljIGNoZWNrcy5cbitcdCAqL1xuK1x0cmV0dXJuIE5TRUNfUEVSX1NFQyAtIDE7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvID0ge1xuK1x0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4rXHQubWF4X2Fkalx0PSBaTDMwNzNYX0RQTExfUFRQX01BWF9BREosXG4rXHQuZ2V0dGltZXg2NFx0PSB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQsXG4rXHQuc2V0dGltZTY0XHQ9IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0LFxuK1x0LmFkanRpbWVcdD0gemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lLFxuK1x0LmFkamZpbmVcdD0gemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lLFxuK1x0LmFkanBoYXNlXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2UsXG4rXHQuZ2V0bWF4cGhhc2VcdD0gemwzMDczeF9kcGxsX3B0cF9nZXRtYXhwaGFzZSxcbit9O1xuK1xuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIgLSByZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsXG4rICogQHpsZHBsbDogRFBMTCBjaGFubmVsIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3JcbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbitcdHN0cnVjdCBwdHBfY2xvY2sgKnB0cF9jbG9jaztcbitcbitcdHNucHJpbnRmKHpsZHBsbC1cdTAwM2VwdHBfaW5mby5uYW1lLCBzaXplb2YoemxkcGxsLVx1MDAzZXB0cF9pbmZvLm5hbWUpLFxuK1x0XHQgXCIlcy1kcGxsJXVcIiwgZGV2X25hbWUoemxkZXYtXHUwMDNlZGV2KSwgemxkcGxsLVx1MDAzZWlkKTtcbitcbitcdHB0cF9jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcihcdTAwMjZ6bGRwbGwtXHUwMDNlcHRwX2luZm8sIHpsZGV2LVx1MDAzZWRldik7XG4rXHRpZiAoSVNfRVJSKHB0cF9jbG9jaykpIHtcbitcdFx0ZGV2X2Vycih6bGRldi1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgRFBMTCV1XFxuXCIsXG4rXHRcdFx0emxkcGxsLVx1MDAzZWlkKTtcbitcdFx0cmV0dXJuIFBUUl9FUlIocHRwX2Nsb2NrKTtcbitcdH1cbitcbitcdHpsZHBsbC1cdTAwM2VwdHBfY2xvY2sgPSBwdHBfY2xvY2s7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyIC0gdW5yZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsXG4rICogQHpsZHBsbDogRFBMTCBjaGFubmVsIHRvIHVucmVnaXN0ZXIgUFRQIGNsb2NrIGZvclxuKyAqL1xuK3N0YXRpYyB2b2lkIHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4re1xuK1x0aWYgKCFJU19FUlJfT1JfTlVMTCh6bGRwbGwtXHUwMDNlcHRwX2Nsb2NrKSkge1xuK1x0XHRwdHBfY2xvY2tfdW5yZWdpc3Rlcih6bGRwbGwtXHUwMDNlcHRwX2Nsb2NrKTtcbitcdFx0emxkcGxsLVx1MDAzZXB0cF9jbG9jayA9IE5VTEw7XG4rXHR9XG4gfVxuIFxuIC8qKlxuQEAgLTIzOTgsNiArMjczMCw0OCBAQCB6bDMwNzN4X2RwbGxfcmVmX3N5bmNfcGFpcnNfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9hbGxvYyAtIGFsbG9jYXRlIERQTEwgZGV2aWNlXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyXG4rICpcbisgKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuXG4rICpcbisgKiBSZXR1cm46IHBvaW50ZXIgdG8gRFBMTCBkZXZpY2Ugb24gc3VjY2VzcywgZXJyb3IgcG9pbnRlciBvbiBlcnJvclxuKyAqL1xuK3N0cnVjdCB6bDMwNzN4X2RwbGwgKlxuK3psMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7XG4rXG4rXHR6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTtcbitcdGlmICghemxkcGxsKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcbitcdHpsZHBsbC1cdTAwM2VkZXYgPSB6bGRldjtcbitcdHpsZHBsbC1cdTAwM2VpZCA9IGNoO1xuK1x0emxkcGxsLVx1MDAzZXB0cF9pbmZvID0gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvO1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXHRJTklUX0xJU1RfSEVBRChcdTAwMjZ6bGRwbGwtXHUwMDNlcGlucyk7XG4rXG4rXHRyZXR1cm4gemxkcGxsO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfZnJlZSAtIGZyZWUgRFBMTCBkZXZpY2VcbisgKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmVcbisgKlxuKyAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuXG4rICovXG4rdm9pZFxuK3psMzA3M3hfZHBsbF9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbit7XG4rXHRXQVJOKHpsZHBsbC1cdTAwM2VkcGxsX2RldiwgXCJEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXFxuXCIpO1xuK1xuK1x0bXV0ZXhfZGVzdHJveShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXHRrZnJlZSh6bGRwbGwpO1xuK31cbitcbiAvKipcbiAgKiB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIgLSByZWdpc3RlciBEUExMIGRldmljZSBhbmQgYWxsIGl0cyBwaW5zXG4gICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXG5AQCAtMjQyOCw2ICsyODAyLDEzIEBAIHpsMzA3M3hfZHBsbF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4gXHRcdHJldHVybiByYztcbiBcdH1cbiBcbitcdHJjID0gemwzMDczeF9kcGxsX3B0cF9yZWdpc3Rlcih6bGRwbGwpO1xuK1x0aWYgKHJjKSB7XG4rXHRcdHpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTtcbitcdFx0emwzMDczeF9kcGxsX2RldmljZV91bnJlZ2lzdGVyKHpsZHBsbCk7XG4rXHRcdHJldHVybiByYztcbitcdH1cbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0yNDQxLDcgKzI4MjIsNyBAQCB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIHZvaWRcbiB6bDMwNzN4X2RwbGxfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4ge1xuLVx0LyogVW5yZWdpc3RlciBhbGwgcGlucyBhbmQgZHBsbCAqL1xuK1x0emwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHpsZHBsbCk7XG4gXHR6bDMwNzN4X2RwbGxfcGluc191bnJlZ2lzdGVyKHpsZHBsbCk7XG4gXHR6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXG5pbmRleCBmYWViYzQwMmJhMWI3Li45OTMyMjFkYzYzMjQ5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmhcbkBAIC01LDYgKzUsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RwbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiY29yZS5oXCJcbiBcbkBAIC0yMiw2ICsyMyw4IEBAXG4gICogQHR5cGU6IERQTEwgdHlwZSAoUFBTIG9yIEVFQylcbiAgKiBAbG9ja19zdGF0dXM6IGxhc3Qgc2F2ZWQgRFBMTCBsb2NrIHN0YXR1c1xuICAqIEBwaW5zOiBsaXN0IG9mIHBpbnNcbisgKiBAcHRwX2luZm86IFBUUCBjbG9jayBpbmZvXG4rICogQHB0cF9jbG9jazogcmVnaXN0ZXJlZCBQVFAgY2xvY2sgKG9yIE5VTEwpXG4gICovXG4gc3RydWN0IHpsMzA3M3hfZHBsbCB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRcdGxpc3Q7XG5AQCAtMzYsNiArMzksOCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsIHtcbiBcdGVudW0gZHBsbF90eXBlXHRcdFx0dHlwZTtcbiBcdGVudW0gZHBsbF9sb2NrX3N0YXR1c1x0XHRsb2NrX3N0YXR1cztcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdFx0cGlucztcbitcdHN0cnVjdCBwdHBfY2xvY2tfaW5mb1x0XHRwdHBfaW5mbztcbitcdHN0cnVjdCBwdHBfY2xvY2tcdFx0KnB0cF9jbG9jaztcbiB9O1xuIFxuIHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXG5pbmRleCBiNzBlYWQ3ZDQ0OTViLi5mM2E1ZTEyMTVhYTM2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhcbkBAIC0xNzksNiArMTc5LDIwIEBAXG4gI2RlZmluZSBaTF9EUExMX0RGX1JFQURfQ01EXHRcdFx0R0VOTUFTSygyLCAwKVxuICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRF9BQ0NfSVx0XHQ0XG4gXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTFx0XHRcdFpMX1JFRyg1LCAweDMwLCAxKVxuKyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUFx0XHRcdEdFTk1BU0soMiwgMClcbisjZGVmaW5lIFpMX0RQTExfVElFX0NUUkxfT1BfV1JcdFx0XHQ0XG4rXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTF9NQVNLXHRcdFpMX1JFRyg1LCAweDMxLCAxKVxuK1xuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX0NUUkwoX2lkeClcdFx0XHRcdFx0XFxcbitcdFpMX1JFR19JRFgoX2lkeCwgNSwgMHgzOCwgMSwgWkwzMDczWF9NQVhfQ0hBTk5FTFMsIDEpXG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX1NFTVx0XHRcdEJJVCg0KVxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURcdFx0XHRHRU5NQVNLKDMsIDApXG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWlx0MVxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVFx0XHQ4XG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9ORVhUXzFIWlx0OVxuK1xuICNkZWZpbmUgWkxfUkVHX0RQTExfTUVBU19DVFJMXHRcdFx0WkxfUkVHKDUsIDB4NTAsIDEpXG4gI2RlZmluZSBaTF9EUExMX01FQVNfQ1RSTF9FTlx0XHRcdEJJVCgwKVxuICNkZWZpbmUgWkxfRFBMTF9NRUFTX0NUUkxfQVZHX0ZBQ1RPUlx0XHRHRU5NQVNLKDcsIDQpXG5AQCAtMTkzLDYgKzIwNyw5IEBAXG4gXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgKiBSZWdpc3RlciBQYWdlcyA2LTcsIERQTEwgRGF0YVxuKyAqXG4rICogUGVyLWNoYW5uZWwgcmVnaXN0ZXJzIHdpdGggc3RyaWRlIDB4MjAuIENoYW5uZWxzIDAtMyByZXNpZGUgb24gcGFnZSA2LFxuKyAqIGNoYW5uZWwgNCBvbiBwYWdlIDcuXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gXG4gI2RlZmluZSBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeClcdFx0XHRcdFx0XFxcbkBAIC0yMDIsNiArMjE5LDI0IEBAXG4gXHQoKF9pZHgpIFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfREZfT0ZGU0VUXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfREZfT0ZGU0VUXzQpXG4gI2RlZmluZSBaTF9EUExMX0RGX09GRlNFVF9VTktOT1dOXHRTNjRfTUlOXG4gXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KVx0XHRcdFx0XHRcXFxuK1x0WkxfUkVHX0lEWChfaWR4LCA2LCAweDBDLCA2LCA0LCAweDIwKVxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEFfNFx0XHRcdFpMX1JFRyg3LCAweDBDLCA2KVxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEEoX2lkeClcdFx0XHRcdFx0XFxcbitcdCgoX2lkeCkgXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RJRV9EQVRBXzQpXG4rXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG4rXHRaTF9SRUdfSURYKF9pZHgsIDYsIDB4MTIsIDYsIDQsIDB4MjApXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzRcdFx0XHRaTF9SRUcoNywgMHgxMiwgNilcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUMoX2lkeClcdFx0XHRcdFx0XFxcbitcdCgoX2lkeCkgXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVE9EX1NFQ180KVxuK1xuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG4rXHRaTF9SRUdfSURYKF9pZHgsIDYsIDB4MTgsIDQsIDQsIDB4MjApXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlNfNFx0XHRcdFpMX1JFRyg3LCAweDE4LCA0KVxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TKF9pZHgpXHRcdFx0XHRcdFxcXG4rXHQoKF9pZHgpIFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfVE9EX05TXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVE9EX05TXzQpXG4rXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICogUmVnaXN0ZXIgUGFnZSA5LCBTeW50aCBhbmQgT3V0cHV0XG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuQEAgLTIyMSw2ICsyNTYsMjMgQEBcbiAjZGVmaW5lIFpMX09VVFBVVF9DVFJMX0VOXHRcdFx0QklUKDApXG4gI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9TWU5USF9TRUxcdFx0R0VOTUFTSyg2LCA0KVxuIFxuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTS1x0XHRaTF9SRUcoOSwgMHgzNiwgMilcbitcbisjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMXHRcdFpMX1JFRyg5LCAweDM4LCAxKVxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9EUExMXHRcdEdFTk1BU0soNiwgNClcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVBcdEJJVCgzKVxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUFx0XHRHRU5NQVNLKDEsIDApXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX05PTkVcdDBcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfUkVTRVRcdDFcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfUkVBRFx0MlxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURVx0M1xuK1xuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUlx0XHRaTF9SRUcoOSwgMHgzOSwgMSlcbitcbisjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLXHRcdFpMX1JFRyg5LCAweDNhLCAyKVxuK1xuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0RBVEFcdFx0WkxfUkVHKDksIDB4M2MsIDQpXG4rXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgKiBSZWdpc3RlciBQYWdlIDEwLCBSZWYgTWFpbGJveFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTE6NTQ6MjYuNTY4MTgzOTVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjUyNzQ1MTkzMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogUFRQIENsb2NrIFN1cHBvcnQgZm9yIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0J3MgYWRkaW5nIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBgZHJpdmVycy9kcGxsL3psMzA3M3gvYCBjb2RlLiBJdCBsb29rcyBsaWtlIGl0J3MgaW1wbGVtZW50aW5nIGZ1bmN0aW9ucyB0byByZWFkLCB3cml0ZSwgYW5kIGFkanVzdCB0aGUgVGltZSBvZiBEYXkgKFRvRCkgcmVnaXN0ZXJzLCBhZGp1c3QgdGhlIGZyZXF1ZW5jeSBhbmQgcGhhc2UsIGFuZCByZWdpc3RlcmluZyBhIFBUUCBjbG9jayBkZXZpY2UgZm9yIGVhY2ggRFBMTCBjaGFubmVsLiBNeSBpbW1lZGlhdGUgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gTGV0J3Mgc2VlIGlmIHRoaXMgY29kZSBpbnRyb2R1Y2VzIGFueSByaXNrcyBoZXJlLlxuXG5GaXJzdCwgSSBzZWUgdGhlIGBwdHBfY2xvY2tfaW5mb2Agc3RydWN0IGlzIGRlZmluZWQgYW5kIGluaXRpYWxpemVkIHN0YXRpY2FsbHkuIFRoYXQncyBnb29kLiBJbiBgemwzMDczeF9kcGxsX2FsbG9jYCwgaXQgaXMgY29waWVkIHRvIGB6bGRwbGwtXHUwMDNlcHRwX2luZm9gLiBDcnVjaWFsbHksIGB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm9gIGlzIGBzdGF0aWMgY29uc3RgLCBzbyBhbnkgdW5pbml0aWFsaXplZCBmaWVsZHMgZ2V0IHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIGNvbXBpbGVyLiBUaGUgYG5hbWVgIGZpZWxkIG9mIHRoaXMgc3RydWN0IGlzIHBvcHVsYXRlZCB1c2luZyBgc25wcmludGZgIGluIGB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyYC4gVGhpcyBtZWFucyB0aGUgYmVnaW5uaW5nIG9mIGBuYW1lYCBpcyBvdmVyd3JpdHRlbiwgYnV0IHRoZSByZXN0IG9mIGBuYW1lYCB0aGF0J3Mgbm90IG92ZXJ3cml0dGVuIGlzIHplcm8uIFNvLCB0aGlzIGxvb2tzIHNhZmUuXG5cblRoZSBgemwzMDczeF9jaGFuX3RvZF9yZWFkYCBmdW5jdGlvbiBsb29rcyBzdHJhaWdodGZvcndhcmQuIEl0IHJlYWRzIGhhcmR3YXJlIHJlZ2lzdGVycyB0byBwb3B1bGF0ZSB0aGUgYHRzLVx1MDAzZXR2X3NlY2AgYW5kIGB0cy1cdTAwM2V0dl9uc2VjYCBmaWVsZHMgb2YgYSBgc3RydWN0IHRpbWVzcGVjNjRgLiBCb3RoIHZhbHVlcyBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHJldHVybmluZy5cblxuVGhlIGB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcGAgdXNlcyBgdTE2IHN5bnRoX21hc2tbWkwzMDczWF9OVU1fU1lOVEhTXSA9IHt9O2Agd2hpY2ggaXMgemVybyBpbml0aWFsaXplZC5cblxuTmV4dCwgSSdtIGNoZWNraW5nIGlmIHRoZXJlJ3MgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHBhc3NlZCB0byB1c2VyIHNwYWNlLiBUaGUgYHB0cF9jbG9ja19pbmZvYCBzdHJ1Y3QgKmlzKiBwYXNzZWQgdG8gYHB0cF9jbG9ja19yZWdpc3RlcmAuIEkgY29uc2lkZXJlZCBgbmFtZWAsIGJ1dCBhcyBJIHNhaWQsIHRoZSBzdGF0aWMgYHB0cF9jbG9ja19pbmZvYCBzdHJ1Y3QgaXMgemVybyBpbml0aWFsaXplZCwgYW5kIHRoZSBgc25wcmludGZgIGVuc3VyZXMgYXQgbGVhc3QgdGhlIGJlZ2lubmluZyBvZiB0aGUgYG5hbWVgIGlzIHZhbGlkIGFuZCBudWxsIHRlcm1pbmF0ZWQuIFRoZSByZXN0IHJlbWFpbnMgemVybyBhbmQgaXMgaGFybWxlc3MuXG5cbkxvb2tpbmcgYXQgYHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0YCwgYHRzX25leHRgIGFuZCBgdHNfY3VyYCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgd2l0aGluIHRoZSBmdW5jdGlvbiBieSBgemwzMDczeF9jaGFuX3RvZF9yZWFkYC5cblxuRm9yIGB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVgLCBgdHNgIGlzIGFsc28gZnVsbHkgaW5pdGlhbGl6ZWQgd2l0aCBgdHZfc2VjYCBhbmQgYHR2X25zZWNgLiBObyBpc3N1ZXMgdGhlcmUuXG5cblRoaXMgcGF0Y2ggcHJpbWFyaWx5IGRlYWxzIHdpdGggUFRQIGNsb2NrIHJlZ2lzdHJhdGlvbiBhbmQgbG93LWxldmVsIGhhcmR3YXJlIGludGVyYWN0aW9ucy4gSXQncyBoYW5kbGluZyByZWFkcyBhbmQgd3JpdGVzIHRvIGhhcmR3YXJlIHJlZ2lzdGVycyBhbmQgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgUFRQIHN1YnN5c3RlbS4gSSdtIG5vdCBzZWVpbmcgYW55IGNvbXBsZXggc3RydWN0dXJlcyBvciBkYXRhIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBUaGVyZSBhbHNvIGRvZXNuJ3Qgc2VlbSB0byBiZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBiZWluZyB1c2VkIGluIGNvbnRyb2wgZmxvdy4gR2l2ZW4gdGhpcywgSSBkb24ndCBiZWxpZXZlIEtNU0FOIGlzIG5lY2Vzc2FyeSBoZXJlLiBLQVNBTiBpcyBhbHJlYWR5IHN1ZmZpY2llbnQgZm9yIG1lbW9yeSBzYWZldHkgY29uY2VybnMgbGlrZSBvdXQtb2YtYm91bmRzIGFjY2VzcyBhbmQgdXNlLWFmdGVyLWZyZWUsIGlmIHByZXNlbnQuXG5cbk9uZSBsYXN0IHRoaW5nLCB0aGUgYHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHNgIHBhcmFtZXRlci4gSW4gYHpsMzA3M3hfY2hhbl90b2RfcmVhZGAsIHRoaXMgaXMgcGFzc2VkIHRvIGBwdHBfcmVhZF9zeXN0ZW1fcHJldHNgIGFuZCBgcHRwX3JlYWRfc3lzdGVtX3Bvc3R0c2AuIFRoaXMgdmFyaWFibGUgaXMgc3VwcGxpZWQgYnkgdGhlIFBUUCBjb3JlIGl0c2VsZiwgYW5kIHRob3NlIGZ1bmN0aW9ucyBhcmUgc3RhbmRhcmQgYW5kIHdpbGwgb25seSB3cml0ZSB0byBzdHMgaWYgc3RzIGlzIG5vdCBOVUxMLiBUaGUgUFRQIGNvcmUgaGFuZGxlcyBpdHMgaW5pdGlhbGl6YXRpb24uIFNvIG5vIHByb2JsZW0uXG5cblRoZXJlZm9yZSwgbXkgYXNzZXNzbWVudCBpcyB0aGF0IEtNU0FOIGlzIG5vdCBuZWVkZWQgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgxMDksIk91dHB1dFRva2VucyI6MjA4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU4NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDExOjU0OjUxLjg0MjcwNjMyN1oiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBQVFAgY2xvY2sgc3VwcG9ydCBmb3IgdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyLiBJdCBhZGRzIGZ1bmN0aW9ucyB0byByZWFkL3dyaXRlIFRpbWUgb2YgRGF5IChUb0QpIHJlZ2lzdGVycywgYWRqdXN0IGZyZXF1ZW5jeSwgYW5kIGFkanVzdCBwaGFzZSwgYXMgd2VsbCBhcyByZWdpc3RlcmluZyBhIFBUUCBjbG9jayBkZXZpY2UuIEFsbCBsb2NhbCB2YXJpYWJsZXMsIHN1Y2ggYXMgYHN0cnVjdCB0aW1lc3BlYzY0YCBhbmQgYHN5bnRoX21hc2tgLCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIGBwdHBfY2xvY2tfaW5mb2Agc3RydWN0dXJlIGlzIGluaXRpYWxpemVkIGZyb20gYSBzdGF0aWMgY29uc3QgdGVtcGxhdGUsIGVuc3VyaW5nIGFsbCBmaWVsZHMgKGluY2x1ZGluZyBwYWRkaW5nIGFuZCB0aGUgYG5hbWVgIGJ1ZmZlcikgYXJlIHplcm8taW5pdGlhbGl6ZWQgYmVmb3JlIGBzbnByaW50ZmAgaXMgY2FsbGVkLiBUaGVyZSBhcmUgbm8ga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZXMgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgUFRQIGNsb2NrIHN1cHBvcnQgZm9yIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlci4gSXQgYWRkcyBmdW5jdGlvbnMgdG8gcmVhZC93cml0ZSBUaW1lIG9mIERheSAoVG9EKSByZWdpc3RlcnMsIGFkanVzdCBmcmVxdWVuY3ksIGFuZCBhZGp1c3QgcGhhc2UsIGFzIHdlbGwgYXMgcmVnaXN0ZXJpbmcgYSBQVFAgY2xvY2sgZGV2aWNlLiBBbGwgbG9jYWwgdmFyaWFibGVzLCBzdWNoIGFzIGBzdHJ1Y3QgdGltZXNwZWM2NGAgYW5kIGBzeW50aF9tYXNrYCwgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBgcHRwX2Nsb2NrX2luZm9gIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCBmcm9tIGEgc3RhdGljIGNvbnN0IHRlbXBsYXRlLCBlbnN1cmluZyBhbGwgZmllbGRzIChpbmNsdWRpbmcgcGFkZGluZyBhbmQgdGhlIGBuYW1lYCBidWZmZXIpIGFyZSB6ZXJvLWluaXRpYWxpemVkIGJlZm9yZSBgc25wcmludGZgIGlzIGNhbGxlZC4gVGhlcmUgYXJlIG5vIGtlcm5lbC10by11c2VyIGluZm8tbGVha3Mgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2VzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcy4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowxvgbj[1] Phase: Succeeded StartedAt: 2026-08-07 11:55:10 +0000 UTC FinishedAt: 2026-08-07 11:55:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxvgbj[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-07 11:55:10 +0000 UTC FinishedAt: 2026-08-07 11:55:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxvgbj[2] Phase: Succeeded StartedAt: 2026-08-07 11:55:10 +0000 UTC FinishedAt: 2026-08-07 13:35:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxvgbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_chan_tod_ready_wait","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_df_offset_set","zl3073x_chan_tie_write","zl3073x_chan_phase_step"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"d89a7ab3-00aa-4bed-8dfb-a0d42b357707","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-07 11:55:10 +0000 UTC FinishedAt: 2026-08-07 13:35:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_chan_tod_ready_wait","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_df_offset_set","zl3073x_chan_tie_write","zl3073x_chan_phase_step"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"d89a7ab3-00aa-4bed-8dfb-a0d42b357707","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowxvgbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_chan_tod_ready_wait","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_df_offset_set","zl3073x_chan_tie_write","zl3073x_chan_phase_step"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"d89a7ab3-00aa-4bed-8dfb-a0d42b357707","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-07 11:55:10 +0000 UTC FinishedAt: 2026-08-07 11:55:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxvgbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_chan_tod_ready_wait","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_df_offset_set","zl3073x_chan_tie_write","zl3073x_chan_phase_step"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"d89a7ab3-00aa-4bed-8dfb-a0d42b357707","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-07 11:55:10 +0000 UTC FinishedAt: 2026-08-07 11:55:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxvgbj/series-workflowxvgbj-convert-artifact-4284745241/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxvgbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_chan_tod_ready_wait","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_df_offset_set","zl3073x_chan_tie_write","zl3073x_chan_phase_step"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"d89a7ab3-00aa-4bed-8dfb-a0d42b357707","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-07 11:55:20 +0000 UTC FinishedAt: 2026-08-07 12:11:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxvgbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_chan_tod_ready_wait","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_df_offset_set","zl3073x_chan_tie_write","zl3073x_chan_phase_step"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"d89a7ab3-00aa-4bed-8dfb-a0d42b357707","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-07 11:55:20 +0000 UTC FinishedAt: 2026-08-07 12:11:29 +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:*c286ff22-e634-4e47-9a0d-8c4fb0df0135,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-workflowxvgbj/series-workflowxvgbj-convert-artifact-4284745241/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": "3a2462bb-530a-45d7-8519-50aa80f47a97", "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-workflowxvgbj/series-workflowxvgbj-build-action-4166855095/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxvgbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_chan_tod_ready_wait","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_df_offset_set","zl3073x_chan_tie_write","zl3073x_chan_phase_step"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"d89a7ab3-00aa-4bed-8dfb-a0d42b357707","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-07 11:55:20 +0000 UTC FinishedAt: 2026-08-07 12:11:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*c286ff22-e634-4e47-9a0d-8c4fb0df0135,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-workflowxvgbj/series-workflowxvgbj-convert-artifact-4284745241/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": "3a2462bb-530a-45d7-8519-50aa80f47a97", "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-workflowxvgbj/series-workflowxvgbj-build-action-4166855095/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxvgbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_chan_tod_ready_wait","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_df_offset_set","zl3073x_chan_tie_write","zl3073x_chan_phase_step"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"d89a7ab3-00aa-4bed-8dfb-a0d42b357707","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-07 12:11:29 +0000 UTC FinishedAt: 2026-08-07 12:11:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxvgbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_chan_tod_ready_wait","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_df_offset_set","zl3073x_chan_tie_write","zl3073x_chan_phase_step"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"d89a7ab3-00aa-4bed-8dfb-a0d42b357707","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-07 12:11:29 +0000 UTC FinishedAt: 2026-08-07 12:11:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxvgbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_chan_tod_ready_wait","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_df_offset_set","zl3073x_chan_tie_write","zl3073x_chan_phase_step"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"d89a7ab3-00aa-4bed-8dfb-a0d42b357707","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-07 12:11:29 +0000 UTC FinishedAt: 2026-08-07 12:11:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxvgbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_chan_tod_ready_wait","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_df_offset_set","zl3073x_chan_tie_write","zl3073x_chan_phase_step"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"d89a7ab3-00aa-4bed-8dfb-a0d42b357707","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-07 12:11:29 +0000 UTC FinishedAt: 2026-08-07 12:11:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"d89a7ab3-00aa-4bed-8dfb-a0d42b357707","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxvgbj/series-workflowxvgbj-convert-artifact-2118760428/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxvgbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_chan_tod_ready_wait","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_df_offset_set","zl3073x_chan_tie_write","zl3073x_chan_phase_step"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"d89a7ab3-00aa-4bed-8dfb-a0d42b357707","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-07 12:11:39 +0000 UTC FinishedAt: 2026-08-07 12:13:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxvgbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_chan_tod_ready_wait","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_df_offset_set","zl3073x_chan_tie_write","zl3073x_chan_phase_step"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"d89a7ab3-00aa-4bed-8dfb-a0d42b357707","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-07 12:11:39 +0000 UTC FinishedAt: 2026-08-07 12:13:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3a2462bb-530a-45d7-8519-50aa80f47a97,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-workflowxvgbj/series-workflowxvgbj-build-action-4166855095/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-workflowxvgbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_chan_tod_ready_wait","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_df_offset_set","zl3073x_chan_tie_write","zl3073x_chan_phase_step"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"d89a7ab3-00aa-4bed-8dfb-a0d42b357707","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-07 12:13:42 +0000 UTC FinishedAt: 2026-08-07 12:13:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxvgbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_chan_tod_ready_wait","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_df_offset_set","zl3073x_chan_tie_write","zl3073x_chan_phase_step"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"d89a7ab3-00aa-4bed-8dfb-a0d42b357707","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-07 12:13:42 +0000 UTC FinishedAt: 2026-08-07 12:13:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxvgbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_chan_tod_ready_wait","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_df_offset_set","zl3073x_chan_tie_write","zl3073x_chan_phase_step"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"d89a7ab3-00aa-4bed-8dfb-a0d42b357707","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-07 12:13:42 +0000 UTC FinishedAt: 2026-08-07 12:34:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxvgbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_chan_tod_ready_wait","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_df_offset_set","zl3073x_chan_tie_write","zl3073x_chan_phase_step"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"d89a7ab3-00aa-4bed-8dfb-a0d42b357707","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-07 12:13:42 +0000 UTC FinishedAt: 2026-08-07 12:34:16 +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:*c286ff22-e634-4e47-9a0d-8c4fb0df0135,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-workflowxvgbj/series-workflowxvgbj-convert-artifact-2118760428/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": "efbfe771-d38d-4c3a-a53e-67748011232a", "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-workflowxvgbj/series-workflowxvgbj-build-action-2362478216/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxvgbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_chan_tod_ready_wait","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_df_offset_set","zl3073x_chan_tie_write","zl3073x_chan_phase_step"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"d89a7ab3-00aa-4bed-8dfb-a0d42b357707","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-07 12:13:42 +0000 UTC FinishedAt: 2026-08-07 12:33:45 +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:*c286ff22-e634-4e47-9a0d-8c4fb0df0135,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-workflowxvgbj/series-workflowxvgbj-convert-artifact-2118760428/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": "efbfe771-d38d-4c3a-a53e-67748011232a", "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-workflowxvgbj/series-workflowxvgbj-build-action-2362478216/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxvgbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_chan_tod_ready_wait","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_df_offset_set","zl3073x_chan_tie_write","zl3073x_chan_phase_step"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"d89a7ab3-00aa-4bed-8dfb-a0d42b357707","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-07 12:34:16 +0000 UTC FinishedAt: 2026-08-07 12:34:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxvgbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_chan_tod_ready_wait","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_df_offset_set","zl3073x_chan_tie_write","zl3073x_chan_phase_step"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"d89a7ab3-00aa-4bed-8dfb-a0d42b357707","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-07 12:34:16 +0000 UTC FinishedAt: 2026-08-07 12:34:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxvgbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_chan_tod_ready_wait","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_df_offset_set","zl3073x_chan_tie_write","zl3073x_chan_phase_step"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"d89a7ab3-00aa-4bed-8dfb-a0d42b357707","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-07 12:34:16 +0000 UTC FinishedAt: 2026-08-07 12:36:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxvgbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_chan_tod_ready_wait","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_df_offset_set","zl3073x_chan_tie_write","zl3073x_chan_phase_step"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"d89a7ab3-00aa-4bed-8dfb-a0d42b357707","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-07 12:34:16 +0000 UTC FinishedAt: 2026-08-07 12:36:15 +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:*efbfe771-d38d-4c3a-a53e-67748011232a,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-workflowxvgbj/series-workflowxvgbj-build-action-2362478216/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-workflowxvgbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_chan_tod_ready_wait","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_df_offset_set","zl3073x_chan_tie_write","zl3073x_chan_phase_step"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"d89a7ab3-00aa-4bed-8dfb-a0d42b357707","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-07 12:36:25 +0000 UTC FinishedAt: 2026-08-07 13:35:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxvgbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_chan_tod_ready_wait","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_df_offset_set","zl3073x_chan_tie_write","zl3073x_chan_phase_step"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"d89a7ab3-00aa-4bed-8dfb-a0d42b357707","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-07 12:36:25 +0000 UTC FinishedAt: 2026-08-07 13:35:37 +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_chan_tod_ready_wait","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_df_offset_set","zl3073x_chan_tie_write","zl3073x_chan_phase_step"],"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:*3a2462bb-530a-45d7-8519-50aa80f47a97,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*efbfe771-d38d-4c3a-a53e-67748011232a,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-workflowxvgbj/series-workflowxvgbj-build-action-4166855095/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-workflowxvgbj/series-workflowxvgbj-build-action-2362478216/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowxvgbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_chan_tod_ready_wait","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_df_offset_set","zl3073x_chan_tie_write","zl3073x_chan_phase_step"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"d89a7ab3-00aa-4bed-8dfb-a0d42b357707","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-07 12:36:25 +0000 UTC FinishedAt: 2026-08-07 12:36:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxvgbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_chan_tod_ready_wait","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_df_offset_set","zl3073x_chan_tie_write","zl3073x_chan_phase_step"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"d89a7ab3-00aa-4bed-8dfb-a0d42b357707","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-07 12:36:25 +0000 UTC FinishedAt: 2026-08-07 12:36:29 +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_chan_tod_ready_wait","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_df_offset_set","zl3073x_chan_tie_write","zl3073x_chan_phase_step"],"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-workflowxvgbj/series-workflowxvgbj-convert-artifact-2639685077/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxvgbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_chan_tod_ready_wait","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_df_offset_set","zl3073x_chan_tie_write","zl3073x_chan_phase_step"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"d89a7ab3-00aa-4bed-8dfb-a0d42b357707","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-07 12:36:25 +0000 UTC FinishedAt: 2026-08-07 12:36:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxvgbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_chan_tod_ready_wait","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_df_offset_set","zl3073x_chan_tie_write","zl3073x_chan_phase_step"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"d89a7ab3-00aa-4bed-8dfb-a0d42b357707","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-07 12:36:25 +0000 UTC FinishedAt: 2026-08-07 12:36:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxvgbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_chan_tod_ready_wait","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_df_offset_set","zl3073x_chan_tie_write","zl3073x_chan_phase_step"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"d89a7ab3-00aa-4bed-8dfb-a0d42b357707","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-07 12:36:25 +0000 UTC FinishedAt: 2026-08-07 12:36:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxvgbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_chan_tod_ready_wait","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_df_offset_set","zl3073x_chan_tie_write","zl3073x_chan_phase_step"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"d89a7ab3-00aa-4bed-8dfb-a0d42b357707","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-07 12:36:35 +0000 UTC FinishedAt: 2026-08-07 13:35:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxvgbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zl3073x_chan_tod_ready_wait","zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_df_offset_set","zl3073x_chan_tie_write","zl3073x_chan_phase_step"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"d89a7ab3-00aa-4bed-8dfb-a0d42b357707","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-07 12:36:35 +0000 UTC FinishedAt: 2026-08-07 13:35:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3a2462bb-530a-45d7-8519-50aa80f47a97,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*efbfe771-d38d-4c3a-a53e-67748011232a,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-workflowxvgbj/series-workflowxvgbj-build-action-4166855095/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-workflowxvgbj/series-workflowxvgbj-build-action-2362478216/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-workflowxvgbj/series-workflowxvgbj-convert-artifact-2639685077/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,}