Name: series-workflowbtlsz Phase: Running StartedAt: 2026-08-14 08:39:45 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbtlsz[0] Phase: Succeeded StartedAt: 2026-08-14 08:39:45 +0000 UTC FinishedAt: 2026-08-14 08:42:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbtlsz[0].run-triage Phase: Succeeded StartedAt: 2026-08-14 08:39:45 +0000 UTC FinishedAt: 2026-08-14 08:42:23 +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": "4f93b12cf7b25fbf8e73d222722805b049f0a6d3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZL3073X", "ZL3073X_I2C", "ZL3073X_SPI", "PTP_1588_CLOCK", "DPLL", "I2C", "SPI" ], "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": "4f93b12cf7b25fbf8e73d222722805b049f0a6d3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZL3073X", "ZL3073X_I2C", "ZL3073X_SPI", "PTP_1588_CLOCK", "DPLL", "I2C", "SPI" ], "series_id": "9e83a370-9e93-4740-b8b8-aa0de000a486" }, "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", "zl3073x_dpll_ptp_gettimex64", "zl3073x_dpll_ptp_settime64", "zl3073x_dpll_ptp_adjtime_phase_step", "zl3073x_dpll_ptp_adjtime", "zl3073x_dpll_ptp_adjfine", "zl3073x_dpll_ptp_adjphase", "zl3073x_dpll_ptp_getmaxphase" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pMMzA3M1gmIzM0OywKICAgICYjMzQ7WkwzMDczWF9JMkMmIzM0OywKICAgICYjMzQ7WkwzMDczWF9TUEkmIzM0OywKICAgICYjMzQ7UFRQXzE1ODhfQ0xPQ0smIzM0OywKICAgICYjMzQ7RFBMTCYjMzQ7LAogICAgJiMzNDtJMkMmIzM0OywKICAgICYjMzQ7U1BJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7emwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0JiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl90b2RfcmVhZCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fdG9kX3dyaXRlJiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl90b2RfYWRqdXN0JiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0JiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl90aWVfd3JpdGUmIzM0OywKICAgICYjMzQ7emwzMDczeF9jaGFuX3BoYXNlX3N0ZXAmIzM0OywKICAgICYjMzQ7emwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0JiMzNDssCiAgICAmIzM0O3psMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0JiMzNDssCiAgICAmIzM0O3psMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwJiMzNDssCiAgICAmIzM0O3psMzA3M3hfZHBsbF9wdHBfYWRqdGltZSYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUmIzM0OywKICAgICYjMzQ7emwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIuIEl0IGludHJvZHVjZXMgZnVuY3Rpb25zIHRvIHJlYWQvd3JpdGUgVGltZSBvZiBEYXkgKFRvRCkgcmVnaXN0ZXJzLCBhZGp1c3QgcGhhc2UsIGFkanVzdCBmcmVxdWVuY3ksIGFuZCByZWdpc3RlcnMgYSBQVFAgY2xvY2sgZGV2aWNlIHVzaW5nIGBwdHBfY2xvY2tfcmVnaXN0ZXJgLiBBbGwgbmV3IHZhcmlhYmxlcyBhbmQgc3RydWN0dXJlcyAoc3VjaCBhcyBgc3RydWN0IHRpbWVzcGVjNjRgLCBgc3ludGhfbWFza2AsIGFuZCBgc3RydWN0IHB0cF9jbG9ja19pbmZvYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2Ugb3IgcGFzc2VkIHRvIHN0YW5kYXJkIGtlcm5lbCBBUElzIHRoYXQgaGFuZGxlIGluaXRpYWxpemF0aW9uLiBUaGVyZSBhcmUgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBpcyB0aGVyZSBhbnkgY29udHJvbCBmbG93IGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBidWdzIChsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIgKHpsMzA3M3gpLiBUaGlzIGV4cG9zZXMgbmV3IGZ1bmN0aW9uYWxpdHkgdG8gdXNlcnNwYWNlIHZpYSB0aGUgUFRQIHN1YnN5c3RlbSAoZS5nLiwgL2Rldi9wdHBYIGlvY3RscykuIFRoZSBkcml2ZXIgaXMgYW4gSTJDL1NQSSBkZXZpY2UgZHJpdmVyLCB3aGljaCBjYW4gYmUgaW5zdGFudGlhdGVkIGFuZCBmdXp6ZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODo0MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDAxMjk4NWQzMTAxYWNkY2EwN2JhOTBiNTVmYTQxZGZlNjZkYWRlN2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAwODo0MTowNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xuaW5kZXggNWJiY2ExNDAwNTgxMy4uZGExNzMxYWNlMTVmMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdcbkBAIC0yLDcgJiM0MzsyLDcgQEBcbiBcbiBjb25maWcgWkwzMDczWFxuIFx0dHJpc3RhdGUgXCYjMzQ7TWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlc1wmIzM0OyBpZiBDT01QSUxFX1RFU1Rcbi1cdGRlcGVuZHMgb24gTkVUXG4mIzQzO1x0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IFBUUF8xNTg4X0NMT0NLXG4gXHRzZWxlY3QgRFBMTFxuIFx0c2VsZWN0IE5FVF9ERVZMSU5LXG4gXHRzZWxlY3QgUkVHTUFQXG5AQCAtMTYsNyAmIzQzOzE2LDcgQEAgY29uZmlnIFpMMzA3M1hcbiBcbiBjb25maWcgWkwzMDczWF9JMkNcbiBcdHRyaXN0YXRlIFwmIzM0O0kyQyBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcJiMzNDtcbi1cdGRlcGVuZHMgb24gSTJDIFx1MDAyNlx1MDAyNiBORVRcbiYjNDM7XHRkZXBlbmRzIG9uIEkyQyBcdTAwMjZcdTAwMjYgTkVUIFx1MDAyNlx1MDAyNiBQVFBfMTU4OF9DTE9DS1xuIFx0c2VsZWN0IFJFR01BUF9JMkNcbiBcdHNlbGVjdCBaTDMwNzNYXG4gXHRoZWxwXG5AQCAtMjgsNyAmIzQzOzI4LDcgQEAgY29uZmlnIFpMMzA3M1hfSTJDXG4gXG4gY29uZmlnIFpMMzA3M1hfU1BJXG4gXHR0cmlzdGF0ZSBcJiMzNDtTUEkgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzXCYjMzQ7XG4tXHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgU1BJXG4mIzQzO1x0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IFNQSSBcdTAwMjZcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tcbiBcdHNlbGVjdCBSRUdNQVBfU1BJXG4gXHRzZWxlY3QgWkwzMDczWFxuIFx0aGVscFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uY1xuaW5kZXggNGVjMmNmNTNkYWQ0Ni4uYmE0ZDMwM2Q0MWI0NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXG5AQCAtMyw2ICYjNDM7Myw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Rldl9wcmludGsuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiBcbkBAIC0xNjIsOCAmIzQzOzE2Myw4IEBAIGludCB6bDMwNzN4X2NoYW5fbmNvX21vZGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxuICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmVcbiAgKiBAaW5kZXg6IERQTEwgY2hhbm5lbCBpbmRleCB0byBmZXRjaCBzdGF0ZSBmb3JcbiAgKlxuLSAqIFJlYWRzIHRoZSBtb2RlX3JlZnNlbCByZWdpc3RlciBhbmQgcmVmZXJlbmNlIHByaW9yaXR5IHJlZ2lzdGVycyBmb3Jcbi0gKiB0aGUgZ2l2ZW4gRFBMTCBjaGFubmVsIGFuZCBzdG9yZXMgdGhlIHJhdyB2YWx1ZXMgZm9yIGxhdGVyIHVzZS5cbiYjNDM7ICogUmVhZHMgdGhlIG1vZGVfcmVmc2VsLCBzdGF0dXMgYW5kIHJlZmVyZW5jZSBwcmlvcml0eSByZWdpc3RlcnMgZm9yXG4mIzQzOyAqIHRoZSBnaXZlbiBEUExMIGNoYW5uZWwgYW5kIHN0b3JlcyB0aGUgdmFsdWVzIGZvciBsYXRlciB1c2UuXG4gICpcbiAgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuICAqL1xuQEAgLTIzNCw2ICYjNDM7MjM1LDMyMiBAQCBjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICp6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsXG4gXHRyZXR1cm4gXHUwMDI2emxkZXYtXHUwMDNlY2hhbltpbmRleF07XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0IC0gd2FpdCBmb3IgVG9EIHNlbWFwaG9yZSB0byBjbGVhclxuJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbiYjNDM7ICpcbiYjNDM7ICogQ2hlY2tzIHRoZSBUb0QgY29udHJvbCByZWdpc3RlciBzZW1hcGhvcmUgYml0LiBJZiBjbGVhciwgcmV0dXJuc1xuJiM0MzsgKiBpbW1lZGlhdGVseS4gT3RoZXJ3aXNlIHBvbGxzIHVudGlsIHRoZSBiaXQgaXMgY2xlYXJlZCBieSB0aGUgZGV2aWNlLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46XG4mIzQzOyAqICogMFx0XHRcdC0gc3VjY2Vzc1xuJiM0MzsgKiAqICUtRUJVU1lcdFx0LSB0aW1lb3V0XG4mIzQzOyAqICogJS1FT1BOT1RTVVBQXHQtIHVua25vd24gY29tbWFuZCBkZXRlY3RlZFxuJiM0MzsgKiAqIG5lZ2F0aXZlXHRcdC0gb3RoZXIgZXJyb3JcbiYjNDM7ICovXG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgdGltZW91dDtcbiYjNDM7XHR1OCB0b2RfY3RybDtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdHJjID0gemwzMDczeF9yZWFkX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksIFx1MDAyNnRvZF9jdHJsKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdGlmICghKHRvZF9jdHJsIFx1MDAyNiBaTF9EUExMX1RPRF9DVFJMX1NFTSkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChGSUVMRF9HRVQoWkxfRFBMTF9UT0RfQ1RSTF9DTUQsIHRvZF9jdHJsKSkge1xuJiM0MztcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFo6XG4mIzQzO1x0XHR0aW1lb3V0ID0gWkxfUE9MTF9UT0RfV1JfVElNRU9VVF9VUztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVDpcbiYjNDM7XHRjYXNlIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaOlxuJiM0MztcdFx0dGltZW91dCA9IFpMX1BPTExfVE9EX1JEX1RJTUVPVVRfVVM7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLFxuJiM0MztcdFx0XHRcdCAgWkxfRFBMTF9UT0RfQ1RSTF9TRU0sIHRpbWVvdXQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmMgPT0gLUVUSU1FRE9VVCA/IC1FQlVTWSA6IHJjO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9jdHJsIC0gaXNzdWUgVG9EIGNvbW1hbmRcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEBjbWQ6IFRvRCBjb21tYW5kIHRvIGV4ZWN1dGVcbiYjNDM7ICpcbiYjNDM7ICogV3JpdGVzIHRoZSBzZW1hcGhvcmUgYW5kIGNvbW1hbmQgdG8gZHBsbF90b2RfY3RybC4gVGhlIGNhbGxlciBtdXN0XG4mIzQzOyAqIGVuc3VyZSB0aGUgZGV2aWNlIGlzIHJlYWR5IChzZW1hcGhvcmUgY2xlYXIpIGJlZm9yZSBjYWxsaW5nIGFuZFxuJiM0MzsgKiBtdXN0IHdhaXQgZm9yIGNvbXBsZXRpb24gaWYgbmVlZGVkLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHU4IGNtZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksXG4mIzQzO1x0XHRcdFx0WkxfRFBMTF9UT0RfQ1RSTF9TRU0gfCBjbWQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9yZWFkIC0gcmVhZCBUb0QgcmVnaXN0ZXJzIGFmdGVyIGlzc3VpbmcgYSBjb21tYW5kXG4mIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuJiM0MzsgKiBAbmV4dF9oejogaWYgdHJ1ZSwgcmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIejsgb3RoZXJ3aXNlIHJlYWQgY3VycmVudFxuJiM0MzsgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIHRoZSByZXN1bHRcbiYjNDM7ICogQHN0czogb3B0aW9uYWwgc3lzdGVtIHRpbWVzdGFtcCBwYWlyIGZvciBjcm9zcy10aW1lc3RhbXBpbmdcbiYjNDM7ICpcbiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4mIzQzO1x0XHRcdCAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXG4mIzQzO1x0XHRcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpXG4mIzQzO3tcbiYjNDM7XHR1MzIgbnNlYztcbiYjNDM7XHR1NjQgc2VjO1xuJiM0MztcdHU4IGNtZDtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdGlmIChuZXh0X2h6KVxuJiM0MztcdFx0Y21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFo7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0Y21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVDtcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbiYjNDM7XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cHRwX3JlYWRfc3lzdGVtX3ByZXRzKHN0cyk7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLCBjbWQpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1x0cHRwX3JlYWRfc3lzdGVtX3Bvc3R0cyhzdHMpO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfcmVhZF91NDgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9TRUMoY2gpLCBcdTAwMjZzZWMpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0LyogSFcgbmFub3NlY29uZHMgYXJlIGFsd2F5cyBpbiBbMCwgTlNFQ19QRVJfU0VDKSByYW5nZSAqL1xuJiM0MztcdHJjID0gemwzMDczeF9yZWFkX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgXHUwMDI2bnNlYyk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHR0cy1cdTAwM2V0dl9zZWMgPSBzZWM7XG4mIzQzO1x0dHMtXHUwMDNldHZfbnNlYyA9IG5zZWM7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF93cml0ZSAtIHdyaXRlIFRvRCByZWdpc3RlcnMgYW5kIHRyaWdnZXIgMSBIeiB1cGRhdGVcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEB0czogdGltZSB0byBzZXRcbiYjNDM7ICpcbiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuJiM0MztcdFx0XHQgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cylcbiYjNDM7e1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbiYjNDM7XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIHRzLnR2X3NlYyk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCB0cy50dl9uc2VjKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLFxuJiM0MztcdFx0XHRcdCAgICAgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFopO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9hZGp1c3QgLSBhdG9taWMgVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIHdpdGggcm9sbG92ZXIgZ3VhcmRcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IHRvIGFwcGx5XG4mIzQzOyAqXG4mIzQzOyAqIFJlYWRzIHRoZSBuZXh0LUh6IFRvRCBhbmQgY3VycmVudCBUb0QsIHRoZW4gY2hlY2tzIHdoZXRoZXIgZW5vdWdoIHRpbWVcbiYjNDM7ICogcmVtYWlucyBiZWZvcmUgdGhlIG5leHQgMSBIeiByb2xsb3ZlciB0byBzYWZlbHkgY29tcGxldGUgdGhlIHdyaXRlLlxuJiM0MzsgKiBSZS1yZWFkcyBpZiB0aGUgMSBIeiB0aWNrIGNyb3NzZWQgYmV0d2VlbiB0aGUgdHdvIHJlYWRzIG9yIGlmIGxlc3NcbiYjNDM7ICogdGhhbiAyMCBtcyByZW1haW5zIGJlZm9yZSB0aGUgbmV4dCByb2xsb3Zlci4gQXBwbGllcyBAZGVsdGEgYW5kIHdyaXRlc1xuJiM0MzsgKiB0aGUgcmVzdWx0IGJhY2suXG4mIzQzOyAqXG4mIzQzOyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YSlcbiYjNDM7e1xuJiM0MzsjZGVmaW5lIFpMX1RPRF9NQVhfUkVUUklFU1x0MjBcbiYjNDM7XHRzdGF0aWMgY29uc3QgbG9uZyB0aHJlc2hvbGRfbnMgPSAyMCAqIE5TRUNfUEVSX01TRUM7XG4mIzQzO1x0c3RydWN0IHRpbWVzcGVjNjQgdHNfbmV4dCwgdHNfY3VyLCBkaWZmO1xuJiM0MztcdGludCByYywgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgWkxfVE9EX01BWF9SRVRSSUVTOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCB0cnVlLCBcdTAwMjZ0c19uZXh0LCBOVUxMKTtcbiYjNDM7XHRcdGlmIChyYylcbiYjNDM7XHRcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgZmFsc2UsIFx1MDAyNnRzX2N1ciwgTlVMTCk7XG4mIzQzO1x0XHRpZiAocmMpXG4mIzQzO1x0XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0XHQvKiBFbnN1cmUgdGhlIDEgSHogdGljayBkaWQgbm90IGNyb3NzIGJldHdlZW4gdGhlIHR3byByZWFkc1xuJiM0MztcdFx0ICogYW5kIHRoYXQgZW5vdWdoIG1hcmdpbiByZW1haW5zIHRvIGNvbXBsZXRlIHRoZSB3cml0ZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0ZGlmZiA9IHRpbWVzcGVjNjRfc3ViKHRzX25leHQsIHRzX2N1cik7XG4mIzQzO1x0XHRpZiAoZGlmZi50dl9zZWMgXHUwMDNlIDAgfHxcbiYjNDM7XHRcdCAgICAoIWRpZmYudHZfc2VjIFx1MDAyNlx1MDAyNiBkaWZmLnR2X25zZWMgXHUwMDNlPSB0aHJlc2hvbGRfbnMpKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKGkgPT0gWkxfVE9EX01BWF9SRVRSSUVTKSB7XG4mIzQzO1x0XHRkZXZfd2Fybih6bGRldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdCBcJiMzNDtEUExMJXUgVG9EIGFkanVzdCBmYWlsZWQgdG8gZ2V0IHN0YWJsZSBtYXJnaW5cXG5cJiMzNDssXG4mIzQzO1x0XHRcdCBjaCk7XG4mIzQzO1x0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogQXBwbHkgZGVsdGEgdG8gdGhlIG5leHQtSHogVG9EICovXG4mIzQzO1x0dHNfbmV4dCA9IHRpbWVzcGVjNjRfYWRkKHRzX25leHQsIGRlbHRhKTtcbiYjNDM7XHRpZiAoIXRpbWVzcGVjNjRfdmFsaWRfc2V0dG9kKFx1MDAyNnRzX25leHQpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZGV2LCBjaCwgdHNfbmV4dCk7XG4mIzQzOyN1bmRlZiBaTF9UT0RfTUFYX1JFVFJJRVNcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0IC0gd3JpdGUgZGVsdGEgZnJlcXVlbmN5IG9mZnNldCB0byBoYXJkd2FyZVxuJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbiYjNDM7ICogQG9mZnNldDogZnJlcXVlbmN5IG9mZnNldCBpbiAyXi00OCBzdGVwc1xuJiM0MzsgKlxuJiM0MzsgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBob2xkIHRoZSBwZXItRFBMTCBsb2NrLlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7aW50IHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgb2Zmc2V0KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJjO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9PRkZTRVQoY2gpLCBvZmZzZXQpO1xuJiM0MztcdGlmICghcmMpXG4mIzQzO1x0XHR6bGRldi1cdTAwM2VjaGFuW2NoXS5kZl9vZmZzZXQgPSBvZmZzZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiByYztcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfY2hhbl90aWVfd3JpdGUgLSBhZGp1c3QgRFBMTCBwaGFzZSB1c2luZyBUSUUgd3JpdGVcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEBkZWx0YV9uczogcGhhc2UgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcyAobXVzdCBiZSBpbiAoLTFzLCAxcykpXG4mIzQzOyAqXG4mIzQzOyAqIENvbnZlcnRzIG5hbm9zZWNvbmRzIHRvIFRJRSB1bml0cyAoMC4wMSBwcykgYW5kIHdyaXRlcyBUSUUgZGF0YVxuJiM0MzsgKiB0byB0aGUgc3BlY2lmaWVkIGNoYW5uZWwuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MztpbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKVxuJiM0Mzt7XG4mIzQzO1x0czY0IHRpZV9kYXRhO1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZGV2LVx1MDAzZXRpZV9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRJRSBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbiYjNDM7XHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTCxcbiYjNDM7XHRcdFx0XHQgIFpMX0RQTExfVElFX0NUUkxfT1AsXG4mIzQzO1x0XHRcdFx0ICBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdC8qIENvbnZlcnQgbnMgdG8gVElFIHVuaXRzICgwLjAxIHBzID0gMTBeLTE0IHMpICovXG4mIzQzO1x0dGllX2RhdGEgPSBkZWx0YV9ucyAqIDEwMDAwMExMO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfREFUQShjaCksIHRpZV9kYXRhKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkxfTUFTSywgQklUKGNoKSk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsXG4mIzQzO1x0XHRcdFx0WkxfRFBMTF9USUVfQ1RSTF9PUF9XUik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCAtIGV4ZWN1dGUgb25lIG91dHB1dCBwaGFzZSBzdGVwIG9wZXJhdGlvblxuJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbiYjNDM7ICogQG91dF9tYXNrOiBiaXRtYXNrIG9mIG91dHB1dHMgdG8gc3RlcFxuJiM0MzsgKiBAc3RlcF9jeWNsZXM6IHBoYXNlIHN0ZXAgaW4gc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzXG4mIzQzOyAqIEB0b2Rfc3RlcDogYWxzbyBzdGVwIHRoZSBUb0QgY291bnRlclxuJiM0MzsgKlxuJiM0MzsgKiBBbGwgbWFza2VkIG91dHB1dHMgbXVzdCB1c2Ugc3ludGhlc2l6ZXJzIG9mIHRoZSBzYW1lIGZyZXF1ZW5jeSBzaW5jZVxuJiM0MzsgKiB0aGUgc3RlcCB2YWx1ZSBpcyBpbiBzeW50aGVzaXplciBjbG9jayBjeWNsZXMuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MztpbnQgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4mIzQzO1x0XHRcdCAgICB1MTYgb3V0X21hc2ssIHMzMiBzdGVwX2N5Y2xlcyxcbiYjNDM7XHRcdFx0ICAgIGJvb2wgdG9kX3N0ZXApXG4mIzQzO3tcbiYjNDM7XHR1OCBjdHJsO1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZGV2LVx1MDAzZXBoYXNlX3N0ZXBfbG9jayk7XG4mIzQzO1xuJiM0MztcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBwaGFzZSBzdGVwIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xuJiM0MztcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLFxuJiM0MztcdFx0XHRcdCAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCxcbiYjNDM7XHRcdFx0XHQgIFpMX1BPTExfUEhBU0VfU1RFUF9USU1FT1VUX1VTKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBLFxuJiM0MztcdFx0XHQgICAgICAgc3RlcF9jeWNsZXMpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3dyaXRlX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX01BU0ssIG91dF9tYXNrKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUiwgMSk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRjdHJsID0gRklFTERfUFJFUChaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX0RQTEwsIGNoKSB8XG4mIzQzO1x0ICAgICAgIEZJRUxEX1BSRVAoWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCxcbiYjNDM7XHRcdFx0ICBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1dSSVRFKTtcbiYjNDM7XHRpZiAodG9kX3N0ZXApXG4mIzQzO1x0XHRjdHJsIHw9IFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVA7XG4mIzQzO1xuJiM0MztcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTCwgY3RybCk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogemwzMDczeF9jaGFuX3N0YXRlX3NldCAtIGNvbW1pdCBEUExMIGNoYW5uZWwgc3RhdGUgY2hhbmdlcyB0byBoYXJkd2FyZVxuICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhcbmluZGV4IGRjOWM2ZDk1YmRlZTcuLjk5YzNiNzA4OGY2NzggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaFxuQEAgLTUsMTAgJiM0Mzs1LDEyIEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0ZGRlZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWU2NC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O3JlZ3MuaFwmIzM0O1xuIFxuJiM0MztzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXA7XG4gc3RydWN0IHpsMzA3M3hfZGV2O1xuIFxuIC8qKlxuQEAgLTQyLDYgJiM0Mzs0NCwyMSBAQCBpbnQgemwzMDczeF9jaGFuX3N0YXRlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCxcbiBpbnQgemwzMDczeF9jaGFuX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7XG4gaW50IHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpO1xuIFxuJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKTtcbiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbiYjNDM7XHRcdFx0ICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbiYjNDM7XHRcdFx0ICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cyk7XG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuJiM0MztcdFx0XHQgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cyk7XG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKTtcbiYjNDM7aW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuJiM0MztcdFx0XHQgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsIGJvb2wgdG9kX3N0ZXApO1xuJiM0MztcbiYjNDM7aW50IHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgb2Zmc2V0KTtcbiYjNDM7XG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgZGVsdGFfbnMpO1xuJiM0MztcbiAvKipcbiAgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X2dldCAtIGdldCBjYWNoZWQgZGZfb2Zmc2V0IHZzIHRyYWNrZWQgcmVmZXJlbmNlXG4gICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuQEAgLTIwMCw2ICYjNDM7MjE3LDIxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6bDMwNzN4X2NoYW5fbW9kZV9pc19yZWZsb2NrKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXG4gXHRyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfZ2V0KGNoYW4pID09IFpMX0RQTExfTU9ERV9SRUZTRUxfTU9ERV9SRUZMT0NLO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZSAtIGNoZWNrIGlmIGNoYW5uZWwgbW9kZSBzdXBwb3J0cyBUSUUgd3JpdGVcbiYjNDM7ICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuJiM0MzsgKlxuJiM0MzsgKiBUSUUgd3JpdGUgaXMgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMgcmVnYXJkbGVzcyBvZiBsb2NrIHN0YXRlLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgVElFIHdyaXRlIGlzIHN1cHBvcnRlZCwgZmFsc2Ugb3RoZXJ3aXNlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2xcbiYjNDM7emwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfaXNfYXV0byhjaGFuKSB8fFxuJiM0MztcdFx0emwzMDczeF9jaGFuX21vZGVfaXNfcmVmbG9jayhjaGFuKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiB6bDMwNzN4X2NoYW5faXNfaG9fcmVhZHkgLSBjaGVjayBpZiBob2xkb3ZlciBpcyByZWFkeVxuICAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcbmluZGV4IDViMmQ3N2YyYzIyODguLjIzMGRmMDhlMjdjZDEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1xuQEAgLTMyMiw3ICYjNDM7MzIyLDcgQEAgaW50IHpsMzA3M3hfd3JpdGVfdTQ4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsIHU2NCB2YWwpXG4gaW50IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsXG4gXHRcdFx0IHU4IG1hc2ssIHVuc2lnbmVkIGludCB0aW1lb3V0X3VzKVxuIHtcbi0jZGVmaW5lIFpMX1BPTExfU0xFRVBfVVMgMTBcbiYjNDM7XHR1bnNpZ25lZCBpbnQgc2xlZXBfdXMgPSB0aW1lb3V0X3VzIC8gNTA7XG4gXHR1bnNpZ25lZCBpbnQgdmFsO1xuIFxuIFx0LyogQ2hlY2sgdGhlIHJlZ2lzdGVyIGlzIDhiaXQgKi9cbkBAIC0zMzYsNyAmIzQzOzMzNiw3IEBAIGludCB6bDMwNzN4X3BvbGxfemVyb191OChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLFxuIFx0cmVnID0gWkxfUkVHX0FERFIocmVnKSAmIzQzOyBaTF9SQU5HRV9PRkZTRVQ7XG4gXG4gXHRyZXR1cm4gcmVnbWFwX3JlYWRfcG9sbF90aW1lb3V0KHpsZGV2LVx1MDAzZXJlZ21hcCwgcmVnLCB2YWwsICEodmFsIFx1MDAyNiBtYXNrKSxcbi1cdFx0XHRcdFx0WkxfUE9MTF9TTEVFUF9VUywgdGltZW91dF91cyk7XG4mIzQzO1x0XHRcdFx0XHRzbGVlcF91cywgdGltZW91dF91cyk7XG4gfVxuIFxuIGludCB6bDMwNzN4X21iX29wKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCBvcF9yZWcsIHU4IG9wX3ZhbCxcbkBAIC01MTEsNiAmIzQzOzUxMSwxMSBAQCB6bDMwNzN4X2Rldl9zdGF0ZV9mZXRjaChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxuIFx0aW50IHJjO1xuIFx0dTggaTtcbiBcbiYjNDM7XHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfU1RFUF9USU1FX01BU0ssXG4mIzQzO1x0XHRcdCAgICAgIFx1MDAyNnpsZGV2LVx1MDAzZW91dF9zdGVwX3RpbWVfbWFzayk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFpMMzA3M1hfTlVNX1JFRlM7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdHJjID0gemwzMDczeF9yZWZfc3RhdGVfZmV0Y2goemxkZXYsIGkpO1xuIFx0XHRpZiAocmMpIHtcbkBAIC0xMDM0LDYgJiM0MzsxMDM5LDE0IEBAIGludCB6bDMwNzN4X2Rldl9wcm9iZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxuIFx0ICogYW5kL29yIHBvbGxzIGFyZSByZXF1aXJlZCB0byBiZSBkb25lIGF0b21pY2FsbHkuXG4gXHQgKi9cbiBcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVx1MDAzZWRldiwgXHUwMDI2emxkZXYtXHUwMDNlbXVsdGlvcF9sb2NrKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIHJjLFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXG5cJiMzNDspO1xuJiM0MztcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVx1MDAzZWRldiwgXHUwMDI2emxkZXYtXHUwMDNlcGhhc2Vfc3RlcF9sb2NrKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIHJjLFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXG5cJiMzNDspO1xuJiM0MztcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVx1MDAzZWRldiwgXHUwMDI2emxkZXYtXHUwMDNldGllX2xvY2spO1xuIFx0aWYgKHJjKVxuIFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIHJjLFxuIFx0XHRcdFx0ICAgICBcJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcblwmIzM0Oyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oXG5pbmRleCA3OGRjMjA4ZjNlZWEyLi42N2MxMGUyNTk1MTE4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcbkBAIC0yNiw2ICYjNDM7MjYsMTAgQEAgc3RydWN0IHpsMzA3M3hfZHBsbDtcbiAjZGVmaW5lIFpMX1BPTExfSFdSRUdfVElNRU9VVF9VU1x0KDUwICogVVNFQ19QRVJfTVNFQylcbiAjZGVmaW5lIFpMX1BPTExfTUJfVElNRU9VVF9VU1x0XHQoMzAgKiBVU0VDX1BFUl9NU0VDKVxuICNkZWZpbmUgWkxfUE9MTF9QSEFTRV9FUlJfVElNRU9VVF9VU1x0KDUwICogVVNFQ19QRVJfTVNFQylcbiYjNDM7I2RlZmluZSBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VU1x0KDMwMDAgKiBVU0VDX1BFUl9NU0VDKVxuJiM0MzsjZGVmaW5lIFpMX1BPTExfVElFX1dSX1RJTUVPVVRfVVNcdCgxMDAwICogVVNFQ19QRVJfTVNFQylcbiYjNDM7I2RlZmluZSBaTF9QT0xMX1RPRF9SRF9USU1FT1VUX1VTXHQoMzAgKiBVU0VDX1BFUl9NU0VDKVxuJiM0MzsjZGVmaW5lIFpMX1BPTExfVE9EX1dSX1RJTUVPVVRfVVNcdCgxMDAwICogVVNFQ19QRVJfTVNFQylcbiBcbiBlbnVtIHpsMzA3M3hfZmxhZ3Mge1xuIFx0WkwzMDczWF9GTEFHX1JFRl9QSEFTRV9DT01QXzMyX0JJVCxcbkBAIC01NSw2ICYjNDM7NTksOCBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8ge1xuICAqIEByZWdtYXA6IHJlZ21hcCB0byBhY2Nlc3MgZGV2aWNlIHJlZ2lzdGVyc1xuICAqIEBpbmZvOiBkZXRlY3RlZCBjaGlwIGluZm9cbiAgKiBAbXVsdGlvcF9sb2NrOiB0byBzZXJpYWxpemUgbXVsdGlwbGUgcmVnaXN0ZXIgb3BlcmF0aW9uc1xuJiM0MzsgKiBAdGllX2xvY2s6IHRvIHNlcmlhbGl6ZSBUSUUgd3JpdGUgb3BlcmF0aW9uc1xuJiM0MzsgKiBAcGhhc2Vfc3RlcF9sb2NrOiB0byBzZXJpYWxpemUgb3V0cHV0IHBoYXNlIHN0ZXAgb3BlcmF0aW9uc1xuICAqIEByZWY6IGFycmF5IG9mIGlucHV0IHJlZmVyZW5jZXMmIzM5OyBpbnZhcmlhbnRzXG4gICogQG91dDogYXJyYXkgb2Ygb3V0cyYjMzk7IGludmFyaWFudHNcbiAgKiBAc3ludGg6IGFycmF5IG9mIHN5bnRocyYjMzk7IGludmFyaWFudHNcbkBAIC02Myw2ICYjNDM7NjksNyBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8ge1xuICAqIEBrd29ya2VyOiB0aHJlYWQgZm9yIHBlcmlvZGljIHdvcmtcbiAgKiBAd29yazogcGVyaW9kaWMgd29ya1xuICAqIEBjbG9ja19pZDogY2xvY2sgaWQgb2YgdGhlIGRldmljZVxuJiM0MzsgKiBAb3V0X3N0ZXBfdGltZV9tYXNrOiBvdXRwdXQgc3RlcC10aW1lIG1hc2sgKGRldmljZS1nbG9iYWwpXG4gICogQHBoYXNlX2F2Z19mYWN0b3I6IHBoYXNlIG9mZnNldCBtZWFzdXJlbWVudCBhdmVyYWdpbmcgZmFjdG9yXG4gICogQGZyZXFfbW9uaXRvcjogaXMgZnJlcXVlbmN5IG1vbml0b3IgZW5hYmxlZFxuICAqL1xuQEAgLTcxLDYgJiM0Mzs3OCw4IEBAIHN0cnVjdCB6bDMwNzN4X2RldiB7XG4gXHRzdHJ1Y3QgcmVnbWFwXHRcdFx0KnJlZ21hcDtcbiBcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mb1x0KmluZm87XG4gXHRzdHJ1Y3QgbXV0ZXhcdFx0XHRtdWx0aW9wX2xvY2s7XG4mIzQzO1x0c3RydWN0IG11dGV4XHRcdFx0dGllX2xvY2s7XG4mIzQzO1x0c3RydWN0IG11dGV4XHRcdFx0cGhhc2Vfc3RlcF9sb2NrO1xuIFxuIFx0LyogSW52YXJpYW50cyAqL1xuIFx0c3RydWN0IHpsMzA3M3hfcmVmXHRyZWZbWkwzMDczWF9OVU1fUkVGU107XG5AQCAtODcsNiAmIzQzOzk2LDcgQEAgc3RydWN0IHpsMzA3M3hfZGV2IHtcbiBcbiBcdC8qIFBlci1jaGlwIHBhcmFtZXRlcnMgKi9cbiBcdHU2NFx0XHRcdGNsb2NrX2lkO1xuJiM0MztcdHUxNlx0XHRcdG91dF9zdGVwX3RpbWVfbWFzaztcbiBcdHU4XHRcdFx0cGhhc2VfYXZnX2ZhY3RvcjtcbiBcdGJvb2xcdFx0XHRmcmVxX21vbml0b3I7XG4gfTtcbkBAIC0zMDgsNiAmIzQzOzMxOCwxOSBAQCB6bDMwNzN4X2Rldl9vdXRfaXNfZW5hYmxlZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleClcbiBcdHJldHVybiB6bDMwNzN4X3N5bnRoX2lzX2VuYWJsZWQoc3ludGgpIFx1MDAyNlx1MDAyNiB6bDMwNzN4X291dF9pc19lbmFibGVkKG91dCk7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kZXZfb3V0X2lzX3N0ZXBwZWQgLSBjaGVjayBpZiBvdXRwdXQgaXMgaW4gc3RlcC10aW1lIG1hc2tcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBpbmRleDogb3V0cHV0IGluZGV4XG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogdHJ1ZSBpZiBvdXRwdXQgaXMgYWZmZWN0ZWQgYnkgc3RlcC10aW1lIG9wZXJhdGlvbnNcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbFxuJiM0Mzt6bDMwNzN4X2Rldl9vdXRfaXNfc3RlcHBlZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleClcbiYjNDM7e1xuJiM0MztcdHJldHVybiAhISh6bGRldi1cdTAwM2VvdXRfc3RlcF90aW1lX21hc2sgXHUwMDI2IEJJVChpbmRleCkpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIHpsMzA3M3hfZGV2X291dF9kcGxsX2dldCAtIGdldCBEUExMIElEIHRoZSBvdXRwdXQgaXMgZHJpdmVuIGJ5XG4gICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jXG5pbmRleCA4M2JkMzAyN2RiYWExLi5mMmUxMzc0NzViNDBmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcbkBAIC0yLDYgJiM0MzsyLDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2J1Zy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29udGFpbmVyX29mLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZfcHJpbnRrLmhcdTAwM2VcbkBAIC0xMyw2ICYjNDM7MTQsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zcHJpbnRmLmhcdTAwM2VcbiBcbkBAIC0yMzEzLDQ1ICYjNDM7MjMxNSwzODQgQEAgemwzMDczeF9kcGxsX2luaXRfZmluZV9waGFzZV9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcbiBcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfU1lOVEhfUEhBU0VfU0hJRlRfQ1RSTCwgMHgwMSk7XG4gfVxuIFxuJiM0MzsvKiBNYXhpbXVtIGZyZXF1ZW5jeSBhZGp1c3RtZW50OiAmIzQzOy0xJSBvZiBub21pbmFsIGluIHBwYiAqL1xuJiM0MzsjZGVmaW5lIFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESlx0MTAwMDAwMDBcbiYjNDM7XG4gLyoqXG4tICogemwzMDczeF9kcGxsX2FsbG9jIC0gYWxsb2NhdGUgRFBMTCBkZXZpY2Vcbi0gKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2Vcbi0gKiBAY2g6IERQTEwgY2hhbm5lbCBudW1iZXJcbiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0IC0gcmVhZCBjdXJyZW50IHRpbWUgZnJvbSBUb0QgY291bnRlcnNcbiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4mIzQzOyAqIEB0czogdGltZXNwZWMgdG8gc3RvcmUgY3VycmVudCB0aW1lXG4mIzQzOyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nXG4gICpcbi0gKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCwgZmFsc2UsIHRzLCBzdHMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQgLSBzZXQgVG9EIGNvdW50ZXJzIHRvIGdpdmVuIHRpbWVcbiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4mIzQzOyAqIEB0czogdGltZXNwZWMgd2l0aCB0aW1lIHRvIHNldFxuICAqXG4tICogUmV0dXJuOiBwb2ludGVyIHRvIERQTEwgZGV2aWNlIG9uIHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgb24gZXJyb3JcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiAgKi9cbi1zdHJ1Y3QgemwzMDczeF9kcGxsICpcbi16bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpXG4mIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxuJiM0MztcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcbiB7XG4tXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIHB0cF9pbmZvKTtcbiBcbi1cdHpsZHBsbCA9IGt6YWxsb2Nfb2JqKCp6bGRwbGwpO1xuLVx0aWYgKCF6bGRwbGwpXG4tXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4gXG4tXHR6bGRwbGwtXHUwMDNlZGV2ID0gemxkZXY7XG4tXHR6bGRwbGwtXHUwMDNlaWQgPSBjaDtcbi1cdG11dGV4X2luaXQoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2emxkcGxsLVx1MDAzZXBpbnMpO1xuJiM0MztcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCwgKnRzKTtcbiYjNDM7fVxuIFxuLVx0cmV0dXJuIHpsZHBsbDtcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwIC0gYWRqdXN0IHN1Yi1zZWNvbmQgdGltZSB2aWEgcGhhc2Ugc3RlcFxuJiM0MzsgKiBAemxkcGxsOiBEUExMIGNoYW5uZWxcbiYjNDM7ICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMgKG11c3QgYmUgd2l0aGluICgtTlNFQ19QRVJfU0VDLFxuJiM0MzsgKiAgICAgICAgIE5TRUNfUEVSX1NFQykpXG4mIzQzOyAqXG4mIzQzOyAqIFVzZXMgdGhlIG91dHB1dCBwaGFzZSBzdGVwIG1lY2hhbmlzbSB3aXRoIHRvZF9zdGVwPTEgdG8gYWRqdXN0IGJvdGhcbiYjNDM7ICogdGhlIG91dHB1dCBjbG9jayBwaGFzZSBhbmQgdGhlIFRvRCBjb3VudGVyIHNpbXVsdGFuZW91c2x5LiBUaGlzIGtlZXBzXG4mIzQzOyAqIG91dHB1dHMgYW5kIFRvRCBjb2hlcmVudC4gT25seSB2YWxpZCBmb3IgTkNPLlxuJiM0MzsgKlxuJiM0MzsgKiBPdXRwdXRzIGFyZSBncm91cGVkIGJ5IHN5bnRoZXNpemVyIHNpbmNlIHRoZSBwaGFzZSBzdGVwIHZhbHVlIGlzIGluXG4mIzQzOyAqIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcy4gVGhlIGZpcnN0IHN5bnRoIGdyb3VwIHdpdGggZW5hYmxlZCBvdXRwdXRzXG4mIzQzOyAqIHVzZXMgdG9kX3N0ZXAgdG8gYWRqdXN0IGJvdGggb3V0cHV0cyBhbmQgdGhlIFRvRCBjb3VudGVyLiBSZW1haW5pbmdcbiYjNDM7ICogZ3JvdXBzIHN0ZXAgb3V0cHV0cyBvbmx5LiBJZiBubyBzeW50aCBoYXMgZW5hYmxlZCBvdXRwdXRzLCB0aGUgVG9EXG4mIzQzOyAqIGNvdW50ZXIgaXMgc3RlcHBlZCBhbG9uZSB1c2luZyBhbiBlbXB0eSBvdXRwdXQgbWFzayAodGhlIEZXIHVzZXNcbiYjNDM7ICogdGhlIGZpcnN0IGVuYWJsZWQgc3ludGgmIzM5O3MgcGVyaW9kIGZvciB0aGUgY29udmVyc2lvbikuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjpcbiYjNDM7ICogKiAlMFx0XHRcdC0gc3VjY2VzcyAob3IgcGFydGlhbCBzdWNjZXNzIGlmIGEgbGF0ZXIgc3ludGggZ3JvdXBcbiYjNDM7ICpcdFx0XHQgIGZhaWxlZCBhZnRlciB0aGUgZmlyc3Qgd2FzIGFscmVhZHkgc3RlcHBlZClcbiYjNDM7ICogKiAlLUVPUE5PVFNVUFBcdC0gbm8gc3ludGhzIGF2YWlsYWJsZVxuJiM0MzsgKiAqIG5lZ2F0aXZlXHRcdC0gZXJyb3JcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHM2NCBkZWx0YSlcbiYjNDM7e1xuJiM0MztcdHUxNiBzeW50aF9tYXNrW1pMMzA3M1hfTlVNX1NZTlRIU10gPSB7fTtcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgemwzMDczeF9zeW50aCAqc3ludGg7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbjtcbiYjNDM7XHR1MzIgZmlyc3Rfc3ludGhfZnJlcSA9IDA7XG4mIzQzO1x0Ym9vbCB0b2Rfc3RlcHBlZCA9IGZhbHNlO1xuJiM0MztcdHMzMiBzdGVwX2N5Y2xlcztcbiYjNDM7XHR1MzIgc3ludGhfZnJlcTtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1x0dTggaTtcbiYjNDM7XG4mIzQzO1x0LyogQnVpbGQgcGVyLXN5bnRoIG91dHB1dCBtYXNrcyBmcm9tIHJlZ2lzdGVyZWQgb3V0cHV0IHBpbnMgKi9cbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBpbiwgXHUwMDI2emxkcGxsLVx1MDAzZXBpbnMsIGxpc3QpIHtcbiYjNDM7XHRcdHU4IG91dF9pZCwgc3ludGhfaWQ7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHpsMzA3M3hfZHBsbF9pc19pbnB1dF9waW4ocGluKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0b3V0X2lkID0gemwzMDczeF9vdXRwdXRfcGluX291dF9nZXQocGluLVx1MDAzZWlkKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXpsMzA3M3hfZGV2X291dF9pc19zdGVwcGVkKHpsZGV2LCBvdXRfaWQpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRzeW50aF9pZCA9IHpsMzA3M3hfZGV2X291dF9zeW50aF9nZXQoemxkZXYsIG91dF9pZCk7XG4mIzQzO1x0XHRpZiAoc3ludGhfaWQgXHUwMDNlPSBaTDMwNzNYX05VTV9TWU5USFMpIHtcbiYjNDM7XHRcdFx0ZGV2X3dhcm4oemxkZXYtXHUwMDNlZGV2LCBcJiMzNDtVbmV4cGVjdGVkIHN5bnRoIGlkIGZvciBPVVQldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgb3V0X2lkKTtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRzeW50aF9tYXNrW3N5bnRoX2lkXSB8PSBCSVQob3V0X2lkKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFByb2Nlc3MgZWFjaCBzeW50aCBncm91cCAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFpMMzA3M1hfTlVNX1NZTlRIUzsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN5bnRoID0gemwzMDczeF9zeW50aF9zdGF0ZV9nZXQoemxkZXYsIGkpO1xuJiM0MztcdFx0aWYgKCF6bDMwNzN4X3N5bnRoX2lzX2VuYWJsZWQoc3ludGgpIHx8XG4mIzQzO1x0XHQgICAgemwzMDczeF9zeW50aF9kcGxsX2dldChzeW50aCkgIT0gemxkcGxsLVx1MDAzZWlkKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRzeW50aF9mcmVxID0gemwzMDczeF9zeW50aF9mcmVxX2dldChzeW50aCk7XG4mIzQzO1xuJiM0MztcdFx0LyogUmVtZW1iZXIgZmlyc3QgZW5hYmxlZCBzeW50aCBmcmVxIGZvciBUb0Qtb25seSBmYWxsYmFjayAqL1xuJiM0MztcdFx0aWYgKCFmaXJzdF9zeW50aF9mcmVxKVxuJiM0MztcdFx0XHRmaXJzdF9zeW50aF9mcmVxID0gc3ludGhfZnJlcTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXN5bnRoX21hc2tbaV0pXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdC8qIFNhZmUgZm9yIHMzMjogbWF4IHN5bnRoIGZyZXEgaXMgNzUwIE1IeiAqL1xuJiM0MztcdFx0c3RlcF9jeWNsZXMgPSBkaXZfczY0KGRlbHRhICogc3ludGhfZnJlcSwgTlNFQ19QRVJfU0VDKTtcbiYjNDM7XG4mIzQzO1x0XHRyYyA9IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHN5bnRoX21hc2tbaV0sIHN0ZXBfY3ljbGVzLFxuJiM0MztcdFx0XHRcdFx0ICAgICAhdG9kX3N0ZXBwZWQpO1xuJiM0MztcdFx0aWYgKHJjKSB7XG4mIzQzO1x0XHRcdGlmICh0b2Rfc3RlcHBlZCkge1xuJiM0MztcdFx0XHRcdGRldl93YXJuKHpsZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcdCBcJiMzNDtQYXJ0aWFsIHBoYXNlIHN0ZXAgZmFpbHVyZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0cmV0dXJuIHJjO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0dG9kX3N0ZXBwZWQgPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFmaXJzdF9zeW50aF9mcmVxKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHQvKiBObyBlbmFibGVkIG91dHB1dHMgZm91bmQ7IHN0ZXAgVG9EIGNvdW50ZXIgb25seSB1c2luZyB0aGVcbiYjNDM7XHQgKiBmaXJzdCBlbmFibGVkIHN5bnRoJiMzOTtzIHBlcmlvZCAoZW1wdHkgb3V0cHV0IG1hc2spLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghdG9kX3N0ZXBwZWQpIHtcbiYjNDM7XHRcdHN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIGZpcnN0X3N5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7XG4mIzQzO1x0XHRyZXR1cm4gemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCwgMCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBzdGVwX2N5Y2xlcywgdHJ1ZSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gLyoqXG4tICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlXG4tICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXG4mIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSAtIGFkanVzdCBQVFAgY2xvY2sgdGltZVxuJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbiYjNDM7ICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHNcbiAgKlxuLSAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuXG4mIzQzOyAqIEZvciBOQ08sIGxhcmdlIGRlbHRhcyAoXHUwMDNlPSAxIHNlY29uZCkgYXJlIHNwbGl0IGludG8gYSBUb0RcbiYjNDM7ICogcmVhZC1tb2RpZnktd3JpdGUgZm9yIHRoZSBzZWNvbmRzIHBhcnQgYW5kIGFuIG91dHB1dCBwaGFzZSBzdGVwIGZvclxuJiM0MzsgKiB0aGUgc3ViLXNlY29uZCByZW1haW5kZXIuIFN1Yi1zZWNvbmQgZGVsdGFzIHVzZSBwaGFzZSBzdGVwIGRpcmVjdGx5LFxuJiM0MzsgKiBmYWxsaW5nIGJhY2sgdG8gVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIGlmIHBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlXG4mIzQzOyAqIGZhaWxzLiBJbiBBVVRPL1JFRkxPQ0sgbW9kZXMsIGxhcmdlIGRlbHRhcyBhcmUgc3BsaXQgaW50byBUb0RcbiYjNDM7ICogcmVhZC1tb2RpZnktd3JpdGUgZm9yIHNlY29uZHMgYW5kIFRJRSB3cml0ZSBmb3IgdGhlIHN1Yi1zZWNvbmRcbiYjNDM7ICogcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgVElFIHdyaXRlIGRpcmVjdGx5LlxuJiM0MzsgKlxuJiM0MzsgKiBJZiB0aGUgc2Vjb25kcyBwYXJ0IHdhcyBhbHJlYWR5IGNvbW1pdHRlZCB3aGVuIHRoZSBzdWItc2Vjb25kXG4mIzQzOyAqIG1lY2hhbmlzbSBmYWlscywgcmV0dXJucyAwIHRvIHByZXZlbnQgdGhlIFBUUCBzZXJ2byBmcm9tIHJldHJ5aW5nXG4mIzQzOyAqIHRoZSBmdWxsIGRlbHRhIGFuZCBhcHBseWluZyBzZWNvbmRzIGFnYWluLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcyAob3IgcGFydGlhbCBzdWNjZXNzKSwgXHUwMDNjMCBvbiBlcnJvclxuICAqL1xuLXZvaWRcbi16bDMwNzN4X2RwbGxfZnJlZShzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4mIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczY0IGRlbHRhKVxuIHtcbi1cdFdBUk4oemxkcGxsLVx1MDAzZWRwbGxfZGV2LCBcJiMzNDtEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuJiM0MztcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XG4mIzQzO1x0Ym9vbCBzZWNfYWRqdXN0ZWQgPSBmYWxzZTtcbiYjNDM7XHRzdHJ1Y3QgdGltZXNwZWM2NCB0cztcbiYjNDM7XHRpbnQgcmM7XG4gXG4tXHRtdXRleF9kZXN0cm95KFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbi1cdGtmcmVlKHpsZHBsbCk7XG4mIzQzO1x0aWYgKCFkZWx0YSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHQvKiBNb2RlcyB3aXRob3V0IHBoYXNlIHN0ZXAgb3IgVElFIHVzZSBwbGFpbiBUb0QgYWRqdXN0ICovXG4mIzQzO1x0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCk7XG4mIzQzO1x0aWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICF6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY2hhbikpXG4mIzQzO1x0XHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBuc190b190aW1lc3BlYzY0KGRlbHRhKSk7XG4mIzQzO1xuJiM0MztcdC8qIFNwbGl0IG9mZiBzZWNvbmRzIHZpYSBUb0QgcmVhZC1tb2RpZnktd3JpdGUgc28gdGhlIHN1Yi1zZWNvbmRcbiYjNDM7XHQgKiByZW1haW5kZXIgY2FuIGJlIGFwcGxpZWQgdGhyb3VnaCB0aGUgb3V0cHV0LWNvaGVyZW50IG1lY2hhbmlzbVxuJiM0MztcdCAqIChwaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSkuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGRlbHRhIFx1MDAzZT0gTlNFQ19QRVJfU0VDIHx8IGRlbHRhIFx1MDAzYz0gLU5TRUNfUEVSX1NFQykge1xuJiM0MztcdFx0czMyIHJlbWFpbmRlcjtcbiYjNDM7XG4mIzQzO1x0XHR0cy50dl9zZWMgPSBkaXZfczY0X3JlbShkZWx0YSwgTlNFQ19QRVJfU0VDLCBcdTAwMjZyZW1haW5kZXIpO1xuJiM0MztcdFx0dHMudHZfbnNlYyA9IDA7XG4mIzQzO1x0XHRkZWx0YSA9IHJlbWFpbmRlcjtcbiYjNDM7XG4mIzQzO1x0XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsIHRzKTtcbiYjNDM7XHRcdGlmIChyYylcbiYjNDM7XHRcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRcdC8qIE5vIHN1Yi1zZWNvbmQgcmVtYWluZGVyLCBkb25lICovXG4mIzQzO1x0XHRpZiAoIWRlbHRhKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBXYWl0IGZvciB0aGUgVG9EIHdyaXRlIHRvIGJlIGFwcGxpZWQgYXQgdGhlIDEgSHogZWRnZVxuJiM0MztcdFx0ICogYmVmb3JlIGlzc3VpbmcgcGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUsIHNvIHRoZSBwZW5kaW5nXG4mIzQzO1x0XHQgKiBXUl9ORVhUXzFIWiBkb2VzIG5vdCBvdmVyd3JpdGUgdGhlIHN1Yi1zZWNvbmQgYWRqdXN0bWVudC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCk7XG4mIzQzO1x0XHRpZiAocmMpXG4mIzQzO1x0XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0XHRzZWNfYWRqdXN0ZWQgPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogQXBwbHkgc3ViLXNlY29uZCBkZWx0YSB2aWEgcGhhc2Ugc3RlcCAoTkNPKSBvciBUSUUgd3JpdGUgKi9cbiYjNDM7XHRpZiAoemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKSB7XG4mIzQzO1x0XHRyYyA9IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwKHpsZHBsbCwgZGVsdGEpO1xuJiM0MztcdFx0aWYgKCFyYylcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJjID0gemwzMDczeF9jaGFuX3RpZV93cml0ZSh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCBkZWx0YSk7XG4mIzQzO1x0XHRpZiAoIXJjKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlIGZhaWxlZCwgZmFsbCBiYWNrIHRvIFRvRCBhZGp1c3QgKi9cbiYjNDM7XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsXG4mIzQzO1x0XHRcdFx0ICAgICBuc190b190aW1lc3BlYzY0KGRlbHRhKSk7XG4mIzQzO1xuJiM0MztcdC8qIEluIHRoZSB1bmxpa2VseSBldmVudCB0aGF0IGJvdGggcGhhc2Ugc3RlcC9USUUgd3JpdGUgYW5kIGZhbGxiYWNrXG4mIzQzO1x0ICogVG9EIGFkanVzdCBmYWlsIGFmdGVyIHNlY29uZHMgd2VyZSBhbHJlYWR5IGNvbW1pdHRlZCwgcmV0dXJuXG4mIzQzO1x0ICogc3VjY2VzcyB0byBwcmV2ZW50IHRoZSBQVFAgc2Vydm8gZnJvbSByZXRyeWluZyB0aGUgZnVsbCBkZWx0YSBhbmRcbiYjNDM7XHQgKiBhcHBseWluZyBzZWNvbmRzIGFnYWluLiBUaGUgc3ViLXNlY29uZCByZXNpZHVhbCB3aWxsIHNlbGYtY29ycmVjdFxuJiM0MztcdCAqIGluIHRoZSBuZXh0IHNlcnZvIGN5Y2xlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChyYyBcdTAwMjZcdTAwMjYgc2VjX2FkanVzdGVkKSB7XG4mIzQzO1x0XHRkZXZfd2Fybih6bGRldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdCBcJiMzNDtTdWItc2Vjb25kIGFkanVzdG1lbnQgZmFpbGVkIGFmdGVyIHNlY29uZHMgYXBwbGllZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiByYztcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSAtIGFkanVzdCBQVFAgY2xvY2sgZnJlcXVlbmN5XG4mIzQzOyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xuJiM0MzsgKiBAc2NhbGVkX3BwbTogZnJlcXVlbmN5IGFkanVzdG1lbnQgaW4gc2NhbGVkIHBwbSAocHBtICogMl4xNilcbiYjNDM7ICpcbiYjNDM7ICogT25seSBzdXBwb3J0ZWQgZm9yIE5DTy4gV3JpdGVzIHRoZSBkZWx0YSBmcmVxdWVuY3kgb2Zmc2V0IHJlZ2lzdGVyLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46XG4mIzQzOyAqICogJTBcdFx0XHQtIHN1Y2Nlc3Mgb3IgQHNjYWxlZF9wcG0gaXMgemVybyAobm8tb3ApXG4mIzQzOyAqICogJS1FT1BOT1RTVVBQXHQtIE5DTyBwaW4gaXMgbm90IGNvbm5lY3RlZCBhbmQgQHNjYWxlZF9wcG0gaXMgbm9uLXplcm9cbiYjNDM7ICogKiBuZWdhdGl2ZVx0XHQtIG90aGVyIGVycm9yXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3psMzA3M3hfZHBsbF9wdHBfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGxvbmcgc2NhbGVkX3BwbSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxuJiM0MztcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjtcbiYjNDM7XHRzNjQgb2Zmc2V0O1xuJiM0MztcbiYjNDM7XHQvKiBDb252ZXJ0IHNjYWxlZF9wcG0gdG8gZGZfb2Zmc2V0IGluIDJeLTQ4IHN0ZXBzOlxuJiM0MztcdCAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogMl4zMikgLyAxMF42XG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBTaW1wbGlmeSB0byBhdm9pZCBvdmVyZmxvdzpcbiYjNDM7XHQgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDJeMjYpIC8gNV42XG4mIzQzO1x0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiA2NzEwODg2NCkgLyAxNTYyNVxuJiM0MztcdCAqL1xuJiM0MztcdG9mZnNldCA9IC1kaXZfczY0KChzNjQpc2NhbGVkX3BwbSAqIDY3MTA4ODY0TEwsIDE1NjI1KTtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkcGxsLVx1MDAzZWRldiwgemxkcGxsLVx1MDAzZWlkKTtcbiYjNDM7XHRpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSlcbiYjNDM7XHRcdHJldHVybiBzY2FsZWRfcHBtID8gLUVPUE5PVFNVUFAgOiAwO1xuJiM0MztcdGlmIChvZmZzZXQgPT0gY2hhbi1cdTAwM2VkZl9vZmZzZXQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCwgb2Zmc2V0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2UgLSBhZGp1c3QgUFRQIGNsb2NrIHBoYXNlXG4mIzQzOyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xuJiM0MzsgKiBAZGVsdGE6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHNcbiYjNDM7ICpcbiYjNDM7ICogT25seSBzdXBwb3J0ZWQgaW4gQVVUTyBhbmQgUkVGTE9DSyBtb2Rlcy4gVXNlcyBUSUUgd3JpdGUgZm9yXG4mIzQzOyAqIG5hbm9zZWNvbmQgcmVzb2x1dGlvbiBwaGFzZSBhZGp1c3RtZW50LlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46XG4mIzQzOyAqICogJTBcdFx0XHQtIHN1Y2Nlc3Mgb3IgQGRlbHRhIGlzIHplcm8gKG5vLW9wKVxuJiM0MzsgKiAqICUtRU9QTk9UU1VQUFx0LSBtb2RlIGRvZXMgbm90IHN1cHBvcnQgVElFIGFuZCBAZGVsdGEgaXMgbm9uLXplcm9cbiYjNDM7ICogKiBuZWdhdGl2ZVx0XHQtIG90aGVyIGVycm9yXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2Uoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBzMzIgZGVsdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuJiM0MztcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XG4mIzQzO1xuJiM0MztcdGlmICghZGVsdGEpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCk7XG4mIzQzO1xuJiM0MztcdGlmICghemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gemwzMDczeF9jaGFuX3RpZV93cml0ZSh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCBkZWx0YSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzMzJcbiYjNDM7emwzMDczeF9kcGxsX3B0cF9nZXRtYXhwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8gX19hbHdheXNfdW51c2VkKVxuJiM0Mzt7XG4mIzQzO1x0LyogSFcgbGltaXRzIFRJRSB3cml0ZSB0byAmIzQzOy0xIHNlY29uZC4gUmV0dXJuIHRoZSBjb25zdGFudCBIV1xuJiM0MztcdCAqIGxpbWl0IGFuZCBsZXQgYWRqcGhhc2UgaGFuZGxlIG1vZGUtc3BlY2lmaWMgY2hlY2tzLlxuJiM0MztcdCAqL1xuJiM0MztcdHJldHVybiBOU0VDX1BFUl9TRUMgLSAxO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHB0cF9jbG9ja19pbmZvIHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mbyA9IHtcbiYjNDM7XHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbiYjNDM7XHQubWF4X2Fkalx0PSBaTDMwNzNYX0RQTExfUFRQX01BWF9BREosXG4mIzQzO1x0LmdldHRpbWV4NjRcdD0gemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0LFxuJiM0MztcdC5zZXR0aW1lNjRcdD0gemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQsXG4mIzQzO1x0LmFkanRpbWVcdD0gemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lLFxuJiM0MztcdC5hZGpmaW5lXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSxcbiYjNDM7XHQuYWRqcGhhc2VcdD0gemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSxcbiYjNDM7XHQuZ2V0bWF4cGhhc2VcdD0gemwzMDczeF9kcGxsX3B0cF9nZXRtYXhwaGFzZSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBhIERQTEwgY2hhbm5lbFxuJiM0MzsgKiBAemxkcGxsOiBEUExMIGNoYW5uZWwgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvclxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuJiM0MztcdHN0cnVjdCBwdHBfY2xvY2sgKnB0cF9jbG9jaztcbiYjNDM7XG4mIzQzO1x0emxkcGxsLVx1MDAzZXB0cF9pbmZvID0gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvO1xuJiM0MztcdHNucHJpbnRmKHpsZHBsbC1cdTAwM2VwdHBfaW5mby5uYW1lLCBzaXplb2YoemxkcGxsLVx1MDAzZXB0cF9pbmZvLm5hbWUpLFxuJiM0MztcdFx0IFwmIzM0OyVzLWRwbGwldVwmIzM0OywgZGV2X25hbWUoemxkZXYtXHUwMDNlZGV2KSwgemxkcGxsLVx1MDAzZWlkKTtcbiYjNDM7XG4mIzQzO1x0cHRwX2Nsb2NrID0gcHRwX2Nsb2NrX3JlZ2lzdGVyKFx1MDAyNnpsZHBsbC1cdTAwM2VwdHBfaW5mbywgemxkZXYtXHUwMDNlZGV2KTtcbiYjNDM7XHRpZiAoSVNfRVJSKHB0cF9jbG9jaykpIHtcbiYjNDM7XHRcdGRldl9lcnIoemxkZXYtXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBEUExMJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHpsZHBsbC1cdTAwM2VpZCk7XG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihwdHBfY2xvY2spO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0emxkcGxsLVx1MDAzZXB0cF9jbG9jayA9IHB0cF9jbG9jaztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIgLSB1bnJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgYSBEUExMIGNoYW5uZWxcbiYjNDM7ICogQHpsZHBsbDogRFBMTCBjaGFubmVsIHRvIHVucmVnaXN0ZXIgUFRQIGNsb2NrIGZvclxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiYjNDM7e1xuJiM0MztcdGlmICghSVNfRVJSX09SX05VTEwoemxkcGxsLVx1MDAzZXB0cF9jbG9jaykpIHtcbiYjNDM7XHRcdHB0cF9jbG9ja191bnJlZ2lzdGVyKHpsZHBsbC1cdTAwM2VwdHBfY2xvY2spO1xuJiM0MztcdFx0emxkcGxsLVx1MDAzZXB0cF9jbG9jayA9IE5VTEw7XG4mIzQzO1x0fVxuIH1cbiBcbiAvKipcbkBAIC0yNDM2LDYgJiM0MzsyNzc3LDQ3IEBAIHpsMzA3M3hfZHBsbF9yZWZfc3luY19wYWlyc19yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfYWxsb2MgLSBhbGxvY2F0ZSBEUExMIGRldmljZVxuJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyXG4mIzQzOyAqXG4mIzQzOyAqIEFsbG9jYXRlcyBEUExMIGRldmljZSBzdHJ1Y3R1cmUgZm9yIGdpdmVuIERQTEwgY2hhbm5lbC5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiBwb2ludGVyIHRvIERQTEwgZGV2aWNlIG9uIHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCB6bDMwNzN4X2RwbGwgKlxuJiM0Mzt6bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7XG4mIzQzO1xuJiM0MztcdHpsZHBsbCA9IGt6YWxsb2Nfb2JqKCp6bGRwbGwpO1xuJiM0MztcdGlmICghemxkcGxsKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1xuJiM0MztcdHpsZHBsbC1cdTAwM2VkZXYgPSB6bGRldjtcbiYjNDM7XHR6bGRwbGwtXHUwMDNlaWQgPSBjaDtcbiYjNDM7XHRtdXRleF9pbml0KFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRJTklUX0xJU1RfSEVBRChcdTAwMjZ6bGRwbGwtXHUwMDNlcGlucyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiB6bGRwbGw7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfZnJlZSAtIGZyZWUgRFBMTCBkZXZpY2VcbiYjNDM7ICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXG4mIzQzOyAqXG4mIzQzOyAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkXG4mIzQzO3psMzA3M3hfZHBsbF9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiYjNDM7e1xuJiM0MztcdFdBUk4oemxkcGxsLVx1MDAzZWRwbGxfZGV2LCBcJiMzNDtEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfZGVzdHJveShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4mIzQzO1x0a2ZyZWUoemxkcGxsKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIgLSByZWdpc3RlciBEUExMIGRldmljZSBhbmQgYWxsIGl0cyBwaW5zXG4gICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXG5AQCAtMjQ2Niw2ICYjNDM7Mjg0OCwxMyBAQCB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIFx0XHRyZXR1cm4gcmM7XG4gXHR9XG4gXG4mIzQzO1x0cmMgPSB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyKHpsZHBsbCk7XG4mIzQzO1x0aWYgKHJjKSB7XG4mIzQzO1x0XHR6bDMwNzN4X2RwbGxfcGluc191bnJlZ2lzdGVyKHpsZHBsbCk7XG4mIzQzO1x0XHR6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTtcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTI0NzksNyAmIzQzOzI4NjgsNyBAQCB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIHZvaWRcbiB6bDMwNzN4X2RwbGxfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4ge1xuLVx0LyogVW5yZWdpc3RlciBhbGwgcGlucyBhbmQgZHBsbCAqL1xuJiM0MztcdHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3Rlcih6bGRwbGwpO1xuIFx0emwzMDczeF9kcGxsX3BpbnNfdW5yZWdpc3Rlcih6bGRwbGwpO1xuIFx0emwzMDczeF9kcGxsX2RldmljZV91bnJlZ2lzdGVyKHpsZHBsbCk7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaFxuaW5kZXggZmFlYmM0MDJiYTFiNy4uOTkzMjIxZGM2MzI0OSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXG5AQCAtNSw2ICYjNDM7NSw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZHBsbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O2NvcmUuaFwmIzM0O1xuIFxuQEAgLTIyLDYgJiM0MzsyMyw4IEBAXG4gICogQHR5cGU6IERQTEwgdHlwZSAoUFBTIG9yIEVFQylcbiAgKiBAbG9ja19zdGF0dXM6IGxhc3Qgc2F2ZWQgRFBMTCBsb2NrIHN0YXR1c1xuICAqIEBwaW5zOiBsaXN0IG9mIHBpbnNcbiYjNDM7ICogQHB0cF9pbmZvOiBQVFAgY2xvY2sgaW5mb1xuJiM0MzsgKiBAcHRwX2Nsb2NrOiByZWdpc3RlcmVkIFBUUCBjbG9jayAob3IgTlVMTClcbiAgKi9cbiBzdHJ1Y3QgemwzMDczeF9kcGxsIHtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdFx0bGlzdDtcbkBAIC0zNiw2ICYjNDM7MzksOCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsIHtcbiBcdGVudW0gZHBsbF90eXBlXHRcdFx0dHlwZTtcbiBcdGVudW0gZHBsbF9sb2NrX3N0YXR1c1x0XHRsb2NrX3N0YXR1cztcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdFx0cGlucztcbiYjNDM7XHRzdHJ1Y3QgcHRwX2Nsb2NrX2luZm9cdFx0cHRwX2luZm87XG4mIzQzO1x0c3RydWN0IHB0cF9jbG9ja1x0XHQqcHRwX2Nsb2NrO1xuIH07XG4gXG4gc3RydWN0IHpsMzA3M3hfZHBsbCAqemwzMDczeF9kcGxsX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhcbmluZGV4IGI3MGVhZDdkNDQ5NWIuLmYzYTVlMTIxNWFhMzYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaFxuQEAgLTE3OSw2ICYjNDM7MTc5LDIwIEBAXG4gI2RlZmluZSBaTF9EUExMX0RGX1JFQURfQ01EXHRcdFx0R0VOTUFTSygyLCAwKVxuICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRF9BQ0NfSVx0XHQ0XG4gXG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0NUUkxcdFx0XHRaTF9SRUcoNSwgMHgzMCwgMSlcbiYjNDM7I2RlZmluZSBaTF9EUExMX1RJRV9DVFJMX09QXHRcdFx0R0VOTUFTSygyLCAwKVxuJiM0MzsjZGVmaW5lIFpMX0RQTExfVElFX0NUUkxfT1BfV1JcdFx0XHQ0XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0tcdFx0WkxfUkVHKDUsIDB4MzEsIDEpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9DVFJMKF9pZHgpXHRcdFx0XHRcdFxcXG4mIzQzO1x0WkxfUkVHX0lEWChfaWR4LCA1LCAweDM4LCAxLCBaTDMwNzNYX01BWF9DSEFOTkVMUywgMSlcbiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX1NFTVx0XHRcdEJJVCg0KVxuJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EXHRcdFx0R0VOTUFTSygzLCAwKVxuJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaXHQxXG4mIzQzOyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVFx0XHQ4XG4mIzQzOyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFpcdDlcbiYjNDM7XG4gI2RlZmluZSBaTF9SRUdfRFBMTF9NRUFTX0NUUkxcdFx0XHRaTF9SRUcoNSwgMHg1MCwgMSlcbiAjZGVmaW5lIFpMX0RQTExfTUVBU19DVFJMX0VOXHRcdFx0QklUKDApXG4gI2RlZmluZSBaTF9EUExMX01FQVNfQ1RSTF9BVkdfRkFDVE9SXHRcdEdFTk1BU0soNywgNClcbkBAIC0xOTMsNiAmIzQzOzIwNyw5IEBAXG4gXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgKiBSZWdpc3RlciBQYWdlcyA2LTcsIERQTEwgRGF0YVxuJiM0MzsgKlxuJiM0MzsgKiBQZXItY2hhbm5lbCByZWdpc3RlcnMgd2l0aCBzdHJpZGUgMHgyMC4gQ2hhbm5lbHMgMC0zIHJlc2lkZSBvbiBwYWdlIDYsXG4mIzQzOyAqIGNoYW5uZWwgNCBvbiBwYWdlIDcuXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gXG4gI2RlZmluZSBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeClcdFx0XHRcdFx0XFxcbkBAIC0yMDIsNiAmIzQzOzIxOSwyNCBAQFxuIFx0KChfaWR4KSBcdTAwM2MgNCA/IFpMX1JFR19EUExMX0RGX09GRlNFVF8wMyhfaWR4KSA6IFpMX1JFR19EUExMX0RGX09GRlNFVF80KVxuICNkZWZpbmUgWkxfRFBMTF9ERl9PRkZTRVRfVU5LTk9XTlx0UzY0X01JTlxuIFxuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG4mIzQzO1x0WkxfUkVHX0lEWChfaWR4LCA2LCAweDBDLCA2LCA0LCAweDIwKVxuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBXzRcdFx0XHRaTF9SRUcoNywgMHgwQywgNilcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQShfaWR4KVx0XHRcdFx0XHRcXFxuJiM0MztcdCgoX2lkeCkgXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RJRV9EQVRBXzQpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUNfMDMoX2lkeClcdFx0XHRcdFx0XFxcbiYjNDM7XHRaTF9SRUdfSURYKF9pZHgsIDYsIDB4MTIsIDYsIDQsIDB4MjApXG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQ180XHRcdFx0WkxfUkVHKDcsIDB4MTIsIDYpXG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQyhfaWR4KVx0XHRcdFx0XHRcXFxuJiM0MztcdCgoX2lkeCkgXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVE9EX1NFQ180KVxuJiM0MztcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlNfMDMoX2lkeClcdFx0XHRcdFx0XFxcbiYjNDM7XHRaTF9SRUdfSURYKF9pZHgsIDYsIDB4MTgsIDQsIDQsIDB4MjApXG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TXzRcdFx0XHRaTF9SRUcoNywgMHgxOCwgNClcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlMoX2lkeClcdFx0XHRcdFx0XFxcbiYjNDM7XHQoKF9pZHgpIFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfVE9EX05TXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVE9EX05TXzQpXG4mIzQzO1xuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAqIFJlZ2lzdGVyIFBhZ2UgOSwgU3ludGggYW5kIE91dHB1dFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbkBAIC0yMjEsNiAmIzQzOzI1NiwyMyBAQFxuICNkZWZpbmUgWkxfT1VUUFVUX0NUUkxfRU5cdFx0XHRCSVQoMClcbiAjZGVmaW5lIFpMX09VVFBVVF9DVFJMX1NZTlRIX1NFTFx0XHRHRU5NQVNLKDYsIDQpXG4gXG4mIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTS1x0XHRaTF9SRUcoOSwgMHgzNiwgMilcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxcdFx0WkxfUkVHKDksIDB4MzgsIDEpXG4mIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9EUExMXHRcdEdFTk1BU0soNiwgNClcbiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX1RPRF9TVEVQXHRCSVQoMylcbiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QXHRcdEdFTk1BU0soMSwgMClcbiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX05PTkVcdDBcbiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1JFU0VUXHQxXG4mIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9SRUFEXHQyXG4mIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURVx0M1xuJiM0MztcbiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTlVNQkVSXHRcdFpMX1JFRyg5LCAweDM5LCAxKVxuJiM0MztcbiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTUFTS1x0XHRaTF9SRUcoOSwgMHgzYSwgMilcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0RBVEFcdFx0WkxfUkVHKDksIDB4M2MsIDQpXG4mIzQzO1xuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICogUmVnaXN0ZXIgUGFnZSAxMCwgUmVmIE1haWxib3hcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODo0MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WkwzMDczWCYjMzQ7LAogICAgJiMzNDtaTDMwNzNYX0kyQyYjMzQ7LAogICAgJiMzNDtaTDMwNzNYX1NQSSYjMzQ7LAogICAgJiMzNDtQVFBfMTU4OF9DTE9DSyYjMzQ7LAogICAgJiMzNDtEUExMJiMzNDssCiAgICAmIzM0O0kyQyYjMzQ7LAogICAgJiMzNDtTUEkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQmIzM0OywKICAgICYjMzQ7emwzMDczeF9jaGFuX3RvZF9yZWFkJiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl90b2Rfd3JpdGUmIzM0OywKICAgICYjMzQ7emwzMDczeF9jaGFuX3RvZF9hZGp1c3QmIzM0OywKICAgICYjMzQ7emwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQmIzM0OywKICAgICYjMzQ7emwzMDczeF9jaGFuX3RpZV93cml0ZSYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQmIzM0OywKICAgICYjMzQ7emwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQmIzM0OywKICAgICYjMzQ7emwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAmIzM0OywKICAgICYjMzQ7emwzMDczeF9kcGxsX3B0cF9hZGp0aW1lJiMzNDssCiAgICAmIzM0O3psMzA3M3hfZHBsbF9wdHBfYWRqZmluZSYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlJiMzNDssCiAgICAmIzM0O3psMzA3M3hfZHBsbF9wdHBfZ2V0bWF4cGhhc2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIgKHpsMzA3M3gpLiBUaGlzIGV4cG9zZXMgbmV3IGZ1bmN0aW9uYWxpdHkgdG8gdXNlcnNwYWNlIHZpYSB0aGUgUFRQIHN1YnN5c3RlbSAoZS5nLiwgL2Rldi9wdHBYIGlvY3RscykuIFRoZSBkcml2ZXIgaXMgYW4gSTJDL1NQSSBkZXZpY2UgZHJpdmVyLCB3aGljaCBjYW4gYmUgaW5zdGFudGlhdGVkIGFuZCBmdXp6ZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDAxMjk4NWQzMTAxYWNkY2EwN2JhOTBiNTVmYTQxZGZlNjZkYWRlN2YKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAxNCAwODo0MTowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWcgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnCmluZGV4IDViYmNhMTQwMDU4MTMuLmRhMTczMWFjZTE1ZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZwpAQCAtMiw3ICYjNDM7Miw3IEBACiAKIGNvbmZpZyBaTDMwNzNYCiAJdHJpc3RhdGUgJiMzNDtNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRSBkZXZpY2VzJiMzNDsgaWYgQ09NUElMRV9URVNUCi0JZGVwZW5kcyBvbiBORVQKJiM0MzsJZGVwZW5kcyBvbiBORVQgJmFtcDsmYW1wOyBQVFBfMTU4OF9DTE9DSwogCXNlbGVjdCBEUExMCiAJc2VsZWN0IE5FVF9ERVZMSU5LCiAJc2VsZWN0IFJFR01BUApAQCAtMTYsNyAmIzQzOzE2LDcgQEAgY29uZmlnIFpMMzA3M1gKIAogY29uZmlnIFpMMzA3M1hfSTJDCiAJdHJpc3RhdGUgJiMzNDtJMkMgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzJiMzNDsKLQlkZXBlbmRzIG9uIEkyQyAmYW1wOyZhbXA7IE5FVAomIzQzOwlkZXBlbmRzIG9uIEkyQyAmYW1wOyZhbXA7IE5FVCAmYW1wOyZhbXA7IFBUUF8xNTg4X0NMT0NLCiAJc2VsZWN0IFJFR01BUF9JMkMKIAlzZWxlY3QgWkwzMDczWAogCWhlbHAKQEAgLTI4LDcgJiM0MzsyOCw3IEBAIGNvbmZpZyBaTDMwNzNYX0kyQwogCiBjb25maWcgWkwzMDczWF9TUEkKIAl0cmlzdGF0ZSAmIzM0O1NQSSBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXMmIzM0OwotCWRlcGVuZHMgb24gTkVUICZhbXA7JmFtcDsgU1BJCiYjNDM7CWRlcGVuZHMgb24gTkVUICZhbXA7JmFtcDsgU1BJICZhbXA7JmFtcDsgUFRQXzE1ODhfQ0xPQ0sKIAlzZWxlY3QgUkVHTUFQX1NQSQogCXNlbGVjdCBaTDMwNzNYCiAJaGVscApkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jCmluZGV4IDRlYzJjZjUzZGFkNDYuLmJhNGQzMDNkNDFiNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMKQEAgLTMsNiAmIzQzOzMsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2NsZWFudXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZWxheS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2Rldl9wcmludGsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3N0cmluZy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiAKQEAgLTE2Miw4ICYjNDM7MTYzLDggQEAgaW50IHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpCiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlCiAgKiBAaW5kZXg6IERQTEwgY2hhbm5lbCBpbmRleCB0byBmZXRjaCBzdGF0ZSBmb3IKICAqCi0gKiBSZWFkcyB0aGUgbW9kZV9yZWZzZWwgcmVnaXN0ZXIgYW5kIHJlZmVyZW5jZSBwcmlvcml0eSByZWdpc3RlcnMgZm9yCi0gKiB0aGUgZ2l2ZW4gRFBMTCBjaGFubmVsIGFuZCBzdG9yZXMgdGhlIHJhdyB2YWx1ZXMgZm9yIGxhdGVyIHVzZS4KJiM0MzsgKiBSZWFkcyB0aGUgbW9kZV9yZWZzZWwsIHN0YXR1cyBhbmQgcmVmZXJlbmNlIHByaW9yaXR5IHJlZ2lzdGVycyBmb3IKJiM0MzsgKiB0aGUgZ2l2ZW4gRFBMTCBjaGFubmVsIGFuZCBzdG9yZXMgdGhlIHZhbHVlcyBmb3IgbGF0ZXIgdXNlLgogICoKICAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgogICovCkBAIC0yMzQsNiAmIzQzOzIzNSwzMjIgQEAgY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqemwzMDczeF9jaGFuX3N0YXRlX2dldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LAogCXJldHVybiAmYW1wO3psZGV2LSZndDtjaGFuW2luZGV4XTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCAtIHdhaXQgZm9yIFRvRCBzZW1hcGhvcmUgdG8gY2xlYXIKJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleAomIzQzOyAqCiYjNDM7ICogQ2hlY2tzIHRoZSBUb0QgY29udHJvbCByZWdpc3RlciBzZW1hcGhvcmUgYml0LiBJZiBjbGVhciwgcmV0dXJucwomIzQzOyAqIGltbWVkaWF0ZWx5LiBPdGhlcndpc2UgcG9sbHMgdW50aWwgdGhlIGJpdCBpcyBjbGVhcmVkIGJ5IHRoZSBkZXZpY2UuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46CiYjNDM7ICogKiAwCQkJLSBzdWNjZXNzCiYjNDM7ICogKiAlLUVCVVNZCQktIHRpbWVvdXQKJiM0MzsgKiAqICUtRU9QTk9UU1VQUAktIHVua25vd24gY29tbWFuZCBkZXRlY3RlZAomIzQzOyAqICogbmVnYXRpdmUJCS0gb3RoZXIgZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IHRpbWVvdXQ7CiYjNDM7CXU4IHRvZF9jdHJsOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF9yZWFkX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksICZhbXA7dG9kX2N0cmwpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CWlmICghKHRvZF9jdHJsICZhbXA7IFpMX0RQTExfVE9EX0NUUkxfU0VNKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlzd2l0Y2ggKEZJRUxEX0dFVChaTF9EUExMX1RPRF9DVFJMX0NNRCwgdG9kX2N0cmwpKSB7CiYjNDM7CWNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFo6CiYjNDM7CQl0aW1lb3V0ID0gWkxfUE9MTF9UT0RfV1JfVElNRU9VVF9VUzsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX0NVUlJFTlQ6CiYjNDM7CWNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFo6CiYjNDM7CQl0aW1lb3V0ID0gWkxfUE9MTF9UT0RfUkRfVElNRU9VVF9VUzsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSwKJiM0MzsJCQkJICBaTF9EUExMX1RPRF9DVFJMX1NFTSwgdGltZW91dCk7CiYjNDM7CiYjNDM7CXJldHVybiByYyA9PSAtRVRJTUVET1VUID8gLUVCVVNZIDogcmM7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl90b2RfY3RybCAtIGlzc3VlIFRvRCBjb21tYW5kCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAY21kOiBUb0QgY29tbWFuZCB0byBleGVjdXRlCiYjNDM7ICoKJiM0MzsgKiBXcml0ZXMgdGhlIHNlbWFwaG9yZSBhbmQgY29tbWFuZCB0byBkcGxsX3RvZF9jdHJsLiBUaGUgY2FsbGVyIG11c3QKJiM0MzsgKiBlbnN1cmUgdGhlIGRldmljZSBpcyByZWFkeSAoc2VtYXBob3JlIGNsZWFyKSBiZWZvcmUgY2FsbGluZyBhbmQKJiM0MzsgKiBtdXN0IHdhaXQgZm9yIGNvbXBsZXRpb24gaWYgbmVlZGVkLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHU4IGNtZCkKJiM0Mzt7CiYjNDM7CXJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksCiYjNDM7CQkJCVpMX0RQTExfVE9EX0NUUkxfU0VNIHwgY21kKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9yZWFkIC0gcmVhZCBUb0QgcmVnaXN0ZXJzIGFmdGVyIGlzc3VpbmcgYSBjb21tYW5kCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAbmV4dF9oejogaWYgdHJ1ZSwgcmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIejsgb3RoZXJ3aXNlIHJlYWQgY3VycmVudAomIzQzOyAqIEB0czogdGltZXNwZWMgdG8gc3RvcmUgdGhlIHJlc3VsdAomIzQzOyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nCiYjNDM7ICoKJiM0MzsgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cywKJiM0MzsJCQkgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKQomIzQzO3sKJiM0MzsJdTMyIG5zZWM7CiYjNDM7CXU2NCBzZWM7CiYjNDM7CXU4IGNtZDsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlpZiAobmV4dF9oeikKJiM0MzsJCWNtZCA9IFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaOwomIzQzOwllbHNlCiYjNDM7CQljbWQgPSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UOwomIzQzOwomIzQzOwkvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVG9EIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqLwomIzQzOwlyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXB0cF9yZWFkX3N5c3RlbV9wcmV0cyhzdHMpOwomIzQzOwlyYyA9IHpsMzA3M3hfY2hhbl90b2RfY3RybCh6bGRldiwgY2gsIGNtZCk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwlwdHBfcmVhZF9zeXN0ZW1fcG9zdHRzKHN0cyk7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF9yZWFkX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksICZhbXA7c2VjKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwkvKiBIVyBuYW5vc2Vjb25kcyBhcmUgYWx3YXlzIGluIFswLCBOU0VDX1BFUl9TRUMpIHJhbmdlICovCiYjNDM7CXJjID0gemwzMDczeF9yZWFkX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgJmFtcDtuc2VjKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwl0cy0mZ3Q7dHZfc2VjID0gc2VjOwomIzQzOwl0cy0mZ3Q7dHZfbnNlYyA9IG5zZWM7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlIC0gd3JpdGUgVG9EIHJlZ2lzdGVycyBhbmQgdHJpZ2dlciAxIEh6IHVwZGF0ZQomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQHRzOiB0aW1lIHRvIHNldAomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS4KJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cykKJiM0Mzt7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi8KJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfU0VDKGNoKSwgdHMudHZfc2VjKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCB0cy50dl9uc2VjKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9jdHJsKHpsZGV2LCBjaCwKJiM0MzsJCQkJICAgICBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWik7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0IC0gYXRvbWljIFRvRCByZWFkLW1vZGlmeS13cml0ZSB3aXRoIHJvbGxvdmVyIGd1YXJkCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCB0byBhcHBseQomIzQzOyAqCiYjNDM7ICogUmVhZHMgdGhlIG5leHQtSHogVG9EIGFuZCBjdXJyZW50IFRvRCwgdGhlbiBjaGVja3Mgd2hldGhlciBlbm91Z2ggdGltZQomIzQzOyAqIHJlbWFpbnMgYmVmb3JlIHRoZSBuZXh0IDEgSHogcm9sbG92ZXIgdG8gc2FmZWx5IGNvbXBsZXRlIHRoZSB3cml0ZS4KJiM0MzsgKiBSZS1yZWFkcyBpZiB0aGUgMSBIeiB0aWNrIGNyb3NzZWQgYmV0d2VlbiB0aGUgdHdvIHJlYWRzIG9yIGlmIGxlc3MKJiM0MzsgKiB0aGFuIDIwIG1zIHJlbWFpbnMgYmVmb3JlIHRoZSBuZXh0IHJvbGxvdmVyLiBBcHBsaWVzIEBkZWx0YSBhbmQgd3JpdGVzCiYjNDM7ICogdGhlIHJlc3VsdCBiYWNrLgomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS4KJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKQomIzQzO3sKJiM0MzsjZGVmaW5lIFpMX1RPRF9NQVhfUkVUUklFUwkyMAomIzQzOwlzdGF0aWMgY29uc3QgbG9uZyB0aHJlc2hvbGRfbnMgPSAyMCAqIE5TRUNfUEVSX01TRUM7CiYjNDM7CXN0cnVjdCB0aW1lc3BlYzY0IHRzX25leHQsIHRzX2N1ciwgZGlmZjsKJiM0MzsJaW50IHJjLCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgWkxfVE9EX01BWF9SRVRSSUVTOyBpJiM0MzsmIzQzOykgewomIzQzOwkJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCB0cnVlLCAmYW1wO3RzX25leHQsIE5VTEwpOwomIzQzOwkJaWYgKHJjKQomIzQzOwkJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJCXJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgZmFsc2UsICZhbXA7dHNfY3VyLCBOVUxMKTsKJiM0MzsJCWlmIChyYykKJiM0MzsJCQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CQkvKiBFbnN1cmUgdGhlIDEgSHogdGljayBkaWQgbm90IGNyb3NzIGJldHdlZW4gdGhlIHR3byByZWFkcwomIzQzOwkJICogYW5kIHRoYXQgZW5vdWdoIG1hcmdpbiByZW1haW5zIHRvIGNvbXBsZXRlIHRoZSB3cml0ZS4KJiM0MzsJCSAqLwomIzQzOwkJZGlmZiA9IHRpbWVzcGVjNjRfc3ViKHRzX25leHQsIHRzX2N1cik7CiYjNDM7CQlpZiAoZGlmZi50dl9zZWMgJmd0OyAwIHx8CiYjNDM7CQkgICAgKCFkaWZmLnR2X3NlYyAmYW1wOyZhbXA7IGRpZmYudHZfbnNlYyAmZ3Q7PSB0aHJlc2hvbGRfbnMpKQomIzQzOwkJCWJyZWFrOwomIzQzOwl9CiYjNDM7CWlmIChpID09IFpMX1RPRF9NQVhfUkVUUklFUykgewomIzQzOwkJZGV2X3dhcm4oemxkZXYtJmd0O2RldiwKJiM0MzsJCQkgJiMzNDtEUExMJXUgVG9EIGFkanVzdCBmYWlsZWQgdG8gZ2V0IHN0YWJsZSBtYXJnaW5cbiYjMzQ7LAomIzQzOwkJCSBjaCk7CiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEFwcGx5IGRlbHRhIHRvIHRoZSBuZXh0LUh6IFRvRCAqLwomIzQzOwl0c19uZXh0ID0gdGltZXNwZWM2NF9hZGQodHNfbmV4dCwgZGVsdGEpOwomIzQzOwlpZiAoIXRpbWVzcGVjNjRfdmFsaWRfc2V0dG9kKCZhbXA7dHNfbmV4dCkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkZXYsIGNoLCB0c19uZXh0KTsKJiM0MzsjdW5kZWYgWkxfVE9EX01BWF9SRVRSSUVTCiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0IC0gd3JpdGUgZGVsdGEgZnJlcXVlbmN5IG9mZnNldCB0byBoYXJkd2FyZQomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQG9mZnNldDogZnJlcXVlbmN5IG9mZnNldCBpbiAyXi00OCBzdGVwcwomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3QgaG9sZCB0aGUgcGVyLURQTEwgbG9jay4KJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBvZmZzZXQpCiYjNDM7ewomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX0RGX09GRlNFVChjaCksIG9mZnNldCk7CiYjNDM7CWlmICghcmMpCiYjNDM7CQl6bGRldi0mZ3Q7Y2hhbltjaF0uZGZfb2Zmc2V0ID0gb2Zmc2V0OwomIzQzOwomIzQzOwlyZXR1cm4gcmM7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl90aWVfd3JpdGUgLSBhZGp1c3QgRFBMTCBwaGFzZSB1c2luZyBUSUUgd3JpdGUKJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleAomIzQzOyAqIEBkZWx0YV9uczogcGhhc2UgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcyAobXVzdCBiZSBpbiAoLTFzLCAxcykpCiYjNDM7ICoKJiM0MzsgKiBDb252ZXJ0cyBuYW5vc2Vjb25kcyB0byBUSUUgdW5pdHMgKDAuMDEgcHMpIGFuZCB3cml0ZXMgVElFIGRhdGEKJiM0MzsgKiB0byB0aGUgc3BlY2lmaWVkIGNoYW5uZWwuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKQomIzQzO3sKJiM0MzsJczY0IHRpZV9kYXRhOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3psZGV2LSZndDt0aWVfbG9jayk7CiYjNDM7CiYjNDM7CS8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUSUUgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCiYjNDM7CXJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLAomIzQzOwkJCQkgIFpMX0RQTExfVElFX0NUUkxfT1AsCiYjNDM7CQkJCSAgWkxfUE9MTF9USUVfV1JfVElNRU9VVF9VUyk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJLyogQ29udmVydCBucyB0byBUSUUgdW5pdHMgKDAuMDEgcHMgPSAxMF4tMTQgcykgKi8KJiM0MzsJdGllX2RhdGEgPSBkZWx0YV9ucyAqIDEwMDAwMExMOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfREFUQShjaCksIHRpZV9kYXRhKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0ssIEJJVChjaCkpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTCwKJiM0MzsJCQkJWkxfRFBMTF9USUVfQ1RSTF9PUF9XUik7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwIC0gZXhlY3V0ZSBvbmUgb3V0cHV0IHBoYXNlIHN0ZXAgb3BlcmF0aW9uCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAb3V0X21hc2s6IGJpdG1hc2sgb2Ygb3V0cHV0cyB0byBzdGVwCiYjNDM7ICogQHN0ZXBfY3ljbGVzOiBwaGFzZSBzdGVwIGluIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcwomIzQzOyAqIEB0b2Rfc3RlcDogYWxzbyBzdGVwIHRoZSBUb0QgY291bnRlcgomIzQzOyAqCiYjNDM7ICogQWxsIG1hc2tlZCBvdXRwdXRzIG11c3QgdXNlIHN5bnRoZXNpemVycyBvZiB0aGUgc2FtZSBmcmVxdWVuY3kgc2luY2UKJiM0MzsgKiB0aGUgc3RlcCB2YWx1ZSBpcyBpbiBzeW50aGVzaXplciBjbG9jayBjeWNsZXMuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLAomIzQzOwkJCSAgICBib29sIHRvZF9zdGVwKQomIzQzO3sKJiM0MzsJdTggY3RybDsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRldi0mZ3Q7cGhhc2Vfc3RlcF9sb2NrKTsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgYW55IHByZXZpb3VzIHBoYXNlIHN0ZXAgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCiYjNDM7CXJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLAomIzQzOwkJCQkgIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AsCiYjNDM7CQkJCSAgWkxfUE9MTF9QSEFTRV9TVEVQX1RJTUVPVVRfVVMpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBLAomIzQzOwkJCSAgICAgICBzdGVwX2N5Y2xlcyk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3dyaXRlX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX01BU0ssIG91dF9tYXNrKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9OVU1CRVIsIDEpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CWN0cmwgPSBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfRFBMTCwgY2gpIHwKJiM0MzsJICAgICAgIEZJRUxEX1BSRVAoWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCwKJiM0MzsJCQkgIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfV1JJVEUpOwomIzQzOwlpZiAodG9kX3N0ZXApCiYjNDM7CQljdHJsIHw9IFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVA7CiYjNDM7CiYjNDM7CXJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTCwgY3RybCk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0IC0gY29tbWl0IERQTEwgY2hhbm5lbCBzdGF0ZSBjaGFuZ2VzIHRvIGhhcmR3YXJlCiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgKaW5kZXggZGM5YzZkOTViZGVlNy4uOTljM2I3MDg4ZjY3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaApAQCAtNSwxMCAmIzQzOzUsMTIgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3RkZGVmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3RpbWU2NC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7cmVncy5oJiMzNDsKIAomIzQzO3N0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcDsKIHN0cnVjdCB6bDMwNzN4X2RldjsKIAogLyoqCkBAIC00Miw2ICYjNDM7NDQsMjEgQEAgaW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgsCiBpbnQgemwzMDczeF9jaGFuX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7CiBpbnQgemwzMDczeF9jaGFuX25jb19tb2RlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7CiAKJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKTsKJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLAomIzQzOwkJCSAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsCiYjNDM7CQkJICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cyk7CiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICAgc3RydWN0IHRpbWVzcGVjNjQgdHMpOwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpOwomIzQzO2ludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsIGJvb2wgdG9kX3N0ZXApOwomIzQzOwomIzQzO2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldCk7CiYjNDM7CiYjNDM7aW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucyk7CiYjNDM7CiAvKioKICAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfZ2V0IC0gZ2V0IGNhY2hlZCBkZl9vZmZzZXQgdnMgdHJhY2tlZCByZWZlcmVuY2UKICAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGUKQEAgLTIwMCw2ICYjNDM7MjE3LDIxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6bDMwNzN4X2NoYW5fbW9kZV9pc19yZWZsb2NrKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pCiAJcmV0dXJuIHpsMzA3M3hfY2hhbl9tb2RlX2dldChjaGFuKSA9PSBaTF9EUExMX01PREVfUkVGU0VMX01PREVfUkVGTE9DSzsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZSAtIGNoZWNrIGlmIGNoYW5uZWwgbW9kZSBzdXBwb3J0cyBUSUUgd3JpdGUKJiM0MzsgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlCiYjNDM7ICoKJiM0MzsgKiBUSUUgd3JpdGUgaXMgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMgcmVnYXJkbGVzcyBvZiBsb2NrIHN0YXRlLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIFRJRSB3cml0ZSBpcyBzdXBwb3J0ZWQsIGZhbHNlIG90aGVyd2lzZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbAomIzQzO3psMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKQomIzQzO3sKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl9tb2RlX2lzX2F1dG8oY2hhbikgfHwKJiM0MzsJCXpsMzA3M3hfY2hhbl9tb2RlX2lzX3JlZmxvY2soY2hhbik7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB6bDMwNzN4X2NoYW5faXNfaG9fcmVhZHkgLSBjaGVjayBpZiBob2xkb3ZlciBpcyByZWFkeQogICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jCmluZGV4IDViMmQ3N2YyYzIyODguLjIzMGRmMDhlMjdjZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMKQEAgLTMyMiw3ICYjNDM7MzIyLDcgQEAgaW50IHpsMzA3M3hfd3JpdGVfdTQ4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsIHU2NCB2YWwpCiBpbnQgemwzMDczeF9wb2xsX3plcm9fdTgoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IHJlZywKIAkJCSB1OCBtYXNrLCB1bnNpZ25lZCBpbnQgdGltZW91dF91cykKIHsKLSNkZWZpbmUgWkxfUE9MTF9TTEVFUF9VUyAxMAomIzQzOwl1bnNpZ25lZCBpbnQgc2xlZXBfdXMgPSB0aW1lb3V0X3VzIC8gNTA7CiAJdW5zaWduZWQgaW50IHZhbDsKIAogCS8qIENoZWNrIHRoZSByZWdpc3RlciBpcyA4Yml0ICovCkBAIC0zMzYsNyAmIzQzOzMzNiw3IEBAIGludCB6bDMwNzN4X3BvbGxfemVyb191OChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLAogCXJlZyA9IFpMX1JFR19BRERSKHJlZykgJiM0MzsgWkxfUkFOR0VfT0ZGU0VUOwogCiAJcmV0dXJuIHJlZ21hcF9yZWFkX3BvbGxfdGltZW91dCh6bGRldi0mZ3Q7cmVnbWFwLCByZWcsIHZhbCwgISh2YWwgJmFtcDsgbWFzayksCi0JCQkJCVpMX1BPTExfU0xFRVBfVVMsIHRpbWVvdXRfdXMpOwomIzQzOwkJCQkJc2xlZXBfdXMsIHRpbWVvdXRfdXMpOwogfQogCiBpbnQgemwzMDczeF9tYl9vcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgb3BfcmVnLCB1OCBvcF92YWwsCkBAIC01MTEsNiAmIzQzOzUxMSwxMSBAQCB6bDMwNzN4X2Rldl9zdGF0ZV9mZXRjaChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KQogCWludCByYzsKIAl1OCBpOwogCiYjNDM7CXJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTSywKJiM0MzsJCQkgICAgICAmYW1wO3psZGV2LSZndDtvdXRfc3RlcF90aW1lX21hc2spOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiAJZm9yIChpID0gMDsgaSAmbHQ7IFpMMzA3M1hfTlVNX1JFRlM7IGkmIzQzOyYjNDM7KSB7CiAJCXJjID0gemwzMDczeF9yZWZfc3RhdGVfZmV0Y2goemxkZXYsIGkpOwogCQlpZiAocmMpIHsKQEAgLTEwMzQsNiAmIzQzOzEwMzksMTQgQEAgaW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpCiAJICogYW5kL29yIHBvbGxzIGFyZSByZXF1aXJlZCB0byBiZSBkb25lIGF0b21pY2FsbHkuCiAJICovCiAJcmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtJmd0O2RldiwgJmFtcDt6bGRldi0mZ3Q7bXVsdGlvcF9sb2NrKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtJmd0O2RldiwgcmMsCiYjNDM7CQkJCSAgICAgJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxuJiMzNDspOwomIzQzOwlyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi0mZ3Q7ZGV2LCAmYW1wO3psZGV2LSZndDtwaGFzZV9zdGVwX2xvY2spOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi0mZ3Q7ZGV2LCByYywKJiM0MzsJCQkJICAgICAmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XG4mIzM0Oyk7CiYjNDM7CXJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LSZndDtkZXYsICZhbXA7emxkZXYtJmd0O3RpZV9sb2NrKTsKIAlpZiAocmMpCiAJCXJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LSZndDtkZXYsIHJjLAogCQkJCSAgICAgJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxuJiMzNDspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oCmluZGV4IDc4ZGMyMDhmM2VlYTIuLjY3YzEwZTI1OTUxMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmgKQEAgLTI2LDYgJiM0MzsyNiwxMCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsOwogI2RlZmluZSBaTF9QT0xMX0hXUkVHX1RJTUVPVVRfVVMJKDUwICogVVNFQ19QRVJfTVNFQykKICNkZWZpbmUgWkxfUE9MTF9NQl9USU1FT1VUX1VTCQkoMzAgKiBVU0VDX1BFUl9NU0VDKQogI2RlZmluZSBaTF9QT0xMX1BIQVNFX0VSUl9USU1FT1VUX1VTCSg1MCAqIFVTRUNfUEVSX01TRUMpCiYjNDM7I2RlZmluZSBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VUwkoMzAwMCAqIFVTRUNfUEVSX01TRUMpCiYjNDM7I2RlZmluZSBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTCSgxMDAwICogVVNFQ19QRVJfTVNFQykKJiM0MzsjZGVmaW5lIFpMX1BPTExfVE9EX1JEX1RJTUVPVVRfVVMJKDMwICogVVNFQ19QRVJfTVNFQykKJiM0MzsjZGVmaW5lIFpMX1BPTExfVE9EX1dSX1RJTUVPVVRfVVMJKDEwMDAgKiBVU0VDX1BFUl9NU0VDKQogCiBlbnVtIHpsMzA3M3hfZmxhZ3MgewogCVpMMzA3M1hfRkxBR19SRUZfUEhBU0VfQ09NUF8zMl9CSVQsCkBAIC01NSw2ICYjNDM7NTksOCBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8gewogICogQHJlZ21hcDogcmVnbWFwIHRvIGFjY2VzcyBkZXZpY2UgcmVnaXN0ZXJzCiAgKiBAaW5mbzogZGV0ZWN0ZWQgY2hpcCBpbmZvCiAgKiBAbXVsdGlvcF9sb2NrOiB0byBzZXJpYWxpemUgbXVsdGlwbGUgcmVnaXN0ZXIgb3BlcmF0aW9ucwomIzQzOyAqIEB0aWVfbG9jazogdG8gc2VyaWFsaXplIFRJRSB3cml0ZSBvcGVyYXRpb25zCiYjNDM7ICogQHBoYXNlX3N0ZXBfbG9jazogdG8gc2VyaWFsaXplIG91dHB1dCBwaGFzZSBzdGVwIG9wZXJhdGlvbnMKICAqIEByZWY6IGFycmF5IG9mIGlucHV0IHJlZmVyZW5jZXMmIzM5OyBpbnZhcmlhbnRzCiAgKiBAb3V0OiBhcnJheSBvZiBvdXRzJiMzOTsgaW52YXJpYW50cwogICogQHN5bnRoOiBhcnJheSBvZiBzeW50aHMmIzM5OyBpbnZhcmlhbnRzCkBAIC02Myw2ICYjNDM7NjksNyBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8gewogICogQGt3b3JrZXI6IHRocmVhZCBmb3IgcGVyaW9kaWMgd29yawogICogQHdvcms6IHBlcmlvZGljIHdvcmsKICAqIEBjbG9ja19pZDogY2xvY2sgaWQgb2YgdGhlIGRldmljZQomIzQzOyAqIEBvdXRfc3RlcF90aW1lX21hc2s6IG91dHB1dCBzdGVwLXRpbWUgbWFzayAoZGV2aWNlLWdsb2JhbCkKICAqIEBwaGFzZV9hdmdfZmFjdG9yOiBwaGFzZSBvZmZzZXQgbWVhc3VyZW1lbnQgYXZlcmFnaW5nIGZhY3RvcgogICogQGZyZXFfbW9uaXRvcjogaXMgZnJlcXVlbmN5IG1vbml0b3IgZW5hYmxlZAogICovCkBAIC03MSw2ICYjNDM7NzgsOCBAQCBzdHJ1Y3QgemwzMDczeF9kZXYgewogCXN0cnVjdCByZWdtYXAJCQkqcmVnbWFwOwogCWNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mbwkqaW5mbzsKIAlzdHJ1Y3QgbXV0ZXgJCQltdWx0aW9wX2xvY2s7CiYjNDM7CXN0cnVjdCBtdXRleAkJCXRpZV9sb2NrOwomIzQzOwlzdHJ1Y3QgbXV0ZXgJCQlwaGFzZV9zdGVwX2xvY2s7CiAKIAkvKiBJbnZhcmlhbnRzICovCiAJc3RydWN0IHpsMzA3M3hfcmVmCXJlZltaTDMwNzNYX05VTV9SRUZTXTsKQEAgLTg3LDYgJiM0Mzs5Niw3IEBAIHN0cnVjdCB6bDMwNzN4X2RldiB7CiAKIAkvKiBQZXItY2hpcCBwYXJhbWV0ZXJzICovCiAJdTY0CQkJY2xvY2tfaWQ7CiYjNDM7CXUxNgkJCW91dF9zdGVwX3RpbWVfbWFzazsKIAl1OAkJCXBoYXNlX2F2Z19mYWN0b3I7CiAJYm9vbAkJCWZyZXFfbW9uaXRvcjsKIH07CkBAIC0zMDgsNiAmIzQzOzMxOCwxOSBAQCB6bDMwNzN4X2Rldl9vdXRfaXNfZW5hYmxlZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCkKIAlyZXR1cm4gemwzMDczeF9zeW50aF9pc19lbmFibGVkKHN5bnRoKSAmYW1wOyZhbXA7IHpsMzA3M3hfb3V0X2lzX2VuYWJsZWQob3V0KTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZGV2X291dF9pc19zdGVwcGVkIC0gY2hlY2sgaWYgb3V0cHV0IGlzIGluIHN0ZXAtdGltZSBtYXNrCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGluZGV4OiBvdXRwdXQgaW5kZXgKJiM0MzsgKgomIzQzOyAqIFJldHVybjogdHJ1ZSBpZiBvdXRwdXQgaXMgYWZmZWN0ZWQgYnkgc3RlcC10aW1lIG9wZXJhdGlvbnMKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wKJiM0Mzt6bDMwNzN4X2Rldl9vdXRfaXNfc3RlcHBlZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCkKJiM0Mzt7CiYjNDM7CXJldHVybiAhISh6bGRldi0mZ3Q7b3V0X3N0ZXBfdGltZV9tYXNrICZhbXA7IEJJVChpbmRleCkpOwomIzQzO30KJiM0MzsKIC8qKgogICogemwzMDczeF9kZXZfb3V0X2RwbGxfZ2V0IC0gZ2V0IERQTEwgSUQgdGhlIG91dHB1dCBpcyBkcml2ZW4gYnkKICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jCmluZGV4IDgzYmQzMDI3ZGJhYTEuLmYyZTEzNzQ3NWI0MGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMKQEAgLTIsNiAmIzQzOzIsNyBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvYml0cy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NsZWFudXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9idWcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jb250YWluZXJfb2YuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZXZfcHJpbnRrLmgmZ3Q7CkBAIC0xMyw2ICYjNDM7MTQsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L25ldGxpbmsuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wcm9wZXJ0eS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wdHBfY2xvY2tfa2VybmVsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NwcmludGYuaCZndDsKIApAQCAtMjMxMyw0NSAmIzQzOzIzMTUsMzg0IEBAIHpsMzA3M3hfZHBsbF9pbml0X2ZpbmVfcGhhc2VfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpCiAJcmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19TWU5USF9QSEFTRV9TSElGVF9DVFJMLCAweDAxKTsKIH0KIAomIzQzOy8qIE1heGltdW0gZnJlcXVlbmN5IGFkanVzdG1lbnQ6ICYjNDM7LTElIG9mIG5vbWluYWwgaW4gcHBiICovCiYjNDM7I2RlZmluZSBaTDMwNzNYX0RQTExfUFRQX01BWF9BREoJMTAwMDAwMDAKJiM0MzsKIC8qKgotICogemwzMDczeF9kcGxsX2FsbG9jIC0gYWxsb2NhdGUgRFBMTCBkZXZpY2UKLSAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQotICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0IC0gcmVhZCBjdXJyZW50IHRpbWUgZnJvbSBUb0QgY291bnRlcnMKJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm8KJiM0MzsgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIGN1cnJlbnQgdGltZQomIzQzOyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nCiAgKgotICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywKJiM0MzsJCQkJICAgICAgIHN0cnVjdCB0aW1lc3BlYzY0ICp0cywKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKQomIzQzO3sKJiM0MzsJc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsCiYjNDM7CQkJCQkJICAgcHRwX2luZm8pOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZHBsbC0mZ3Q7ZGV2LCB6bGRwbGwtJmd0O2lkLCBmYWxzZSwgdHMsIHN0cyk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0IC0gc2V0IFRvRCBjb3VudGVycyB0byBnaXZlbiB0aW1lCiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvCiYjNDM7ICogQHRzOiB0aW1lc3BlYyB3aXRoIHRpbWUgdG8gc2V0CiAgKgotICogUmV0dXJuOiBwb2ludGVyIHRvIERQTEwgZGV2aWNlIG9uIHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgb24gZXJyb3IKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKICAqLwotc3RydWN0IHpsMzA3M3hfZHBsbCAqCi16bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sCiYjNDM7CQkJCSAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cykKIHsKLQlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLAomIzQzOwkJCQkJCSAgIHB0cF9pbmZvKTsKIAotCXpsZHBsbCA9IGt6YWxsb2Nfb2JqKCp6bGRwbGwpOwotCWlmICghemxkcGxsKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7emxkcGxsLSZndDtsb2NrKTsKIAotCXpsZHBsbC0mZ3Q7ZGV2ID0gemxkZXY7Ci0JemxkcGxsLSZndDtpZCA9IGNoOwotCW11dGV4X2luaXQoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwotCUlOSVRfTElTVF9IRUFEKCZhbXA7emxkcGxsLSZndDtwaW5zKTsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkcGxsLSZndDtkZXYsIHpsZHBsbC0mZ3Q7aWQsICp0cyk7CiYjNDM7fQogCi0JcmV0dXJuIHpsZHBsbDsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCAtIGFkanVzdCBzdWItc2Vjb25kIHRpbWUgdmlhIHBoYXNlIHN0ZXAKJiM0MzsgKiBAemxkcGxsOiBEUExMIGNoYW5uZWwKJiM0MzsgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcyAobXVzdCBiZSB3aXRoaW4gKC1OU0VDX1BFUl9TRUMsCiYjNDM7ICogICAgICAgICBOU0VDX1BFUl9TRUMpKQomIzQzOyAqCiYjNDM7ICogVXNlcyB0aGUgb3V0cHV0IHBoYXNlIHN0ZXAgbWVjaGFuaXNtIHdpdGggdG9kX3N0ZXA9MSB0byBhZGp1c3QgYm90aAomIzQzOyAqIHRoZSBvdXRwdXQgY2xvY2sgcGhhc2UgYW5kIHRoZSBUb0QgY291bnRlciBzaW11bHRhbmVvdXNseS4gVGhpcyBrZWVwcwomIzQzOyAqIG91dHB1dHMgYW5kIFRvRCBjb2hlcmVudC4gT25seSB2YWxpZCBmb3IgTkNPLgomIzQzOyAqCiYjNDM7ICogT3V0cHV0cyBhcmUgZ3JvdXBlZCBieSBzeW50aGVzaXplciBzaW5jZSB0aGUgcGhhc2Ugc3RlcCB2YWx1ZSBpcyBpbgomIzQzOyAqIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcy4gVGhlIGZpcnN0IHN5bnRoIGdyb3VwIHdpdGggZW5hYmxlZCBvdXRwdXRzCiYjNDM7ICogdXNlcyB0b2Rfc3RlcCB0byBhZGp1c3QgYm90aCBvdXRwdXRzIGFuZCB0aGUgVG9EIGNvdW50ZXIuIFJlbWFpbmluZwomIzQzOyAqIGdyb3VwcyBzdGVwIG91dHB1dHMgb25seS4gSWYgbm8gc3ludGggaGFzIGVuYWJsZWQgb3V0cHV0cywgdGhlIFRvRAomIzQzOyAqIGNvdW50ZXIgaXMgc3RlcHBlZCBhbG9uZSB1c2luZyBhbiBlbXB0eSBvdXRwdXQgbWFzayAodGhlIEZXIHVzZXMKJiM0MzsgKiB0aGUgZmlyc3QgZW5hYmxlZCBzeW50aCYjMzk7cyBwZXJpb2QgZm9yIHRoZSBjb252ZXJzaW9uKS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjoKJiM0MzsgKiAqICUwCQkJLSBzdWNjZXNzIChvciBwYXJ0aWFsIHN1Y2Nlc3MgaWYgYSBsYXRlciBzeW50aCBncm91cAomIzQzOyAqCQkJICBmYWlsZWQgYWZ0ZXIgdGhlIGZpcnN0IHdhcyBhbHJlYWR5IHN0ZXBwZWQpCiYjNDM7ICogKiAlLUVPUE5PVFNVUFAJLSBubyBzeW50aHMgYXZhaWxhYmxlCiYjNDM7ICogKiBuZWdhdGl2ZQkJLSBlcnJvcgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLAomIzQzOwkJCQkJICAgICAgIHM2NCBkZWx0YSkKJiM0Mzt7CiYjNDM7CXUxNiBzeW50aF9tYXNrW1pMMzA3M1hfTlVNX1NZTlRIU10gPSB7fTsKJiM0MzsJc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC0mZ3Q7ZGV2OwomIzQzOwljb25zdCBzdHJ1Y3QgemwzMDczeF9zeW50aCAqc3ludGg7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW47CiYjNDM7CXUzMiBmaXJzdF9zeW50aF9mcmVxID0gMDsKJiM0MzsJYm9vbCB0b2Rfc3RlcHBlZCA9IGZhbHNlOwomIzQzOwlzMzIgc3RlcF9jeWNsZXM7CiYjNDM7CXUzMiBzeW50aF9mcmVxOwomIzQzOwlpbnQgcmM7CiYjNDM7CXU4IGk7CiYjNDM7CiYjNDM7CS8qIEJ1aWxkIHBlci1zeW50aCBvdXRwdXQgbWFza3MgZnJvbSByZWdpc3RlcmVkIG91dHB1dCBwaW5zICovCiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkocGluLCAmYW1wO3psZHBsbC0mZ3Q7cGlucywgbGlzdCkgewomIzQzOwkJdTggb3V0X2lkLCBzeW50aF9pZDsKJiM0MzsKJiM0MzsJCWlmICh6bDMwNzN4X2RwbGxfaXNfaW5wdXRfcGluKHBpbikpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlvdXRfaWQgPSB6bDMwNzN4X291dHB1dF9waW5fb3V0X2dldChwaW4tJmd0O2lkKTsKJiM0MzsKJiM0MzsJCWlmICghemwzMDczeF9kZXZfb3V0X2lzX3N0ZXBwZWQoemxkZXYsIG91dF9pZCkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlzeW50aF9pZCA9IHpsMzA3M3hfZGV2X291dF9zeW50aF9nZXQoemxkZXYsIG91dF9pZCk7CiYjNDM7CQlpZiAoc3ludGhfaWQgJmd0Oz0gWkwzMDczWF9OVU1fU1lOVEhTKSB7CiYjNDM7CQkJZGV2X3dhcm4oemxkZXYtJmd0O2RldiwgJiMzNDtVbmV4cGVjdGVkIHN5bnRoIGlkIGZvciBPVVQldVxuJiMzNDssCiYjNDM7CQkJCSBvdXRfaWQpOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwkJc3ludGhfbWFza1tzeW50aF9pZF0gfD0gQklUKG91dF9pZCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogUHJvY2VzcyBlYWNoIHN5bnRoIGdyb3VwICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBaTDMwNzNYX05VTV9TWU5USFM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzeW50aCA9IHpsMzA3M3hfc3ludGhfc3RhdGVfZ2V0KHpsZGV2LCBpKTsKJiM0MzsJCWlmICghemwzMDczeF9zeW50aF9pc19lbmFibGVkKHN5bnRoKSB8fAomIzQzOwkJICAgIHpsMzA3M3hfc3ludGhfZHBsbF9nZXQoc3ludGgpICE9IHpsZHBsbC0mZ3Q7aWQpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlzeW50aF9mcmVxID0gemwzMDczeF9zeW50aF9mcmVxX2dldChzeW50aCk7CiYjNDM7CiYjNDM7CQkvKiBSZW1lbWJlciBmaXJzdCBlbmFibGVkIHN5bnRoIGZyZXEgZm9yIFRvRC1vbmx5IGZhbGxiYWNrICovCiYjNDM7CQlpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpCiYjNDM7CQkJZmlyc3Rfc3ludGhfZnJlcSA9IHN5bnRoX2ZyZXE7CiYjNDM7CiYjNDM7CQlpZiAoIXN5bnRoX21hc2tbaV0pCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkvKiBTYWZlIGZvciBzMzI6IG1heCBzeW50aCBmcmVxIGlzIDc1MCBNSHogKi8KJiM0MzsJCXN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIHN5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7CiYjNDM7CiYjNDM7CQlyYyA9IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtJmd0O2lkLAomIzQzOwkJCQkJICAgICBzeW50aF9tYXNrW2ldLCBzdGVwX2N5Y2xlcywKJiM0MzsJCQkJCSAgICAgIXRvZF9zdGVwcGVkKTsKJiM0MzsJCWlmIChyYykgewomIzQzOwkJCWlmICh0b2Rfc3RlcHBlZCkgewomIzQzOwkJCQlkZXZfd2Fybih6bGRldi0mZ3Q7ZGV2LAomIzQzOwkJCQkJICYjMzQ7UGFydGlhbCBwaGFzZSBzdGVwIGZhaWx1cmVcbiYjMzQ7KTsKJiM0MzsJCQkJcmV0dXJuIDA7CiYjNDM7CQkJfQomIzQzOwkJCXJldHVybiByYzsKJiM0MzsJCX0KJiM0MzsJCXRvZF9zdGVwcGVkID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CS8qIE5vIGVuYWJsZWQgb3V0cHV0cyBmb3VuZDsgc3RlcCBUb0QgY291bnRlciBvbmx5IHVzaW5nIHRoZQomIzQzOwkgKiBmaXJzdCBlbmFibGVkIHN5bnRoJiMzOTtzIHBlcmlvZCAoZW1wdHkgb3V0cHV0IG1hc2spLgomIzQzOwkgKi8KJiM0MzsJaWYgKCF0b2Rfc3RlcHBlZCkgewomIzQzOwkJc3RlcF9jeWNsZXMgPSBkaXZfczY0KGRlbHRhICogZmlyc3Rfc3ludGhfZnJlcSwgTlNFQ19QRVJfU0VDKTsKJiM0MzsJCXJldHVybiB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCh6bGRldiwgemxkcGxsLSZndDtpZCwgMCwKJiM0MzsJCQkJCSAgICAgICBzdGVwX2N5Y2xlcywgdHJ1ZSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIC8qKgotICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlCi0gKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmUKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUgLSBhZGp1c3QgUFRQIGNsb2NrIHRpbWUKJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm8KJiM0MzsgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcwogICoKLSAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuCiYjNDM7ICogRm9yIE5DTywgbGFyZ2UgZGVsdGFzICgmZ3Q7PSAxIHNlY29uZCkgYXJlIHNwbGl0IGludG8gYSBUb0QKJiM0MzsgKiByZWFkLW1vZGlmeS13cml0ZSBmb3IgdGhlIHNlY29uZHMgcGFydCBhbmQgYW4gb3V0cHV0IHBoYXNlIHN0ZXAgZm9yCiYjNDM7ICogdGhlIHN1Yi1zZWNvbmQgcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgcGhhc2Ugc3RlcCBkaXJlY3RseSwKJiM0MzsgKiBmYWxsaW5nIGJhY2sgdG8gVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIGlmIHBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlCiYjNDM7ICogZmFpbHMuIEluIEFVVE8vUkVGTE9DSyBtb2RlcywgbGFyZ2UgZGVsdGFzIGFyZSBzcGxpdCBpbnRvIFRvRAomIzQzOyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciBzZWNvbmRzIGFuZCBUSUUgd3JpdGUgZm9yIHRoZSBzdWItc2Vjb25kCiYjNDM7ICogcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgVElFIHdyaXRlIGRpcmVjdGx5LgomIzQzOyAqCiYjNDM7ICogSWYgdGhlIHNlY29uZHMgcGFydCB3YXMgYWxyZWFkeSBjb21taXR0ZWQgd2hlbiB0aGUgc3ViLXNlY29uZAomIzQzOyAqIG1lY2hhbmlzbSBmYWlscywgcmV0dXJucyAwIHRvIHByZXZlbnQgdGhlIFBUUCBzZXJ2byBmcm9tIHJldHJ5aW5nCiYjNDM7ICogdGhlIGZ1bGwgZGVsdGEgYW5kIGFwcGx5aW5nIHNlY29uZHMgYWdhaW4uCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcyAob3IgcGFydGlhbCBzdWNjZXNzKSwgJmx0OzAgb24gZXJyb3IKICAqLwotdm9pZAotemwzMDczeF9kcGxsX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczY0IGRlbHRhKQogewotCVdBUk4oemxkcGxsLSZndDtkcGxsX2RldiwgJiMzNDtEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXG4mIzM0Oyk7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLAomIzQzOwkJCQkJCSAgIHB0cF9pbmZvKTsKJiM0MzsJc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC0mZ3Q7ZGV2OwomIzQzOwljb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuOwomIzQzOwlib29sIHNlY19hZGp1c3RlZCA9IGZhbHNlOwomIzQzOwlzdHJ1Y3QgdGltZXNwZWM2NCB0czsKJiM0MzsJaW50IHJjOwogCi0JbXV0ZXhfZGVzdHJveSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7Ci0Ja2ZyZWUoemxkcGxsKTsKJiM0MzsJaWYgKCFkZWx0YSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwomIzQzOwkvKiBNb2RlcyB3aXRob3V0IHBoYXNlIHN0ZXAgb3IgVElFIHVzZSBwbGFpbiBUb0QgYWRqdXN0ICovCiYjNDM7CWNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZGV2LCB6bGRwbGwtJmd0O2lkKTsKJiM0MzsJaWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikgJmFtcDsmYW1wOwomIzQzOwkgICAgIXpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjaGFuKSkKJiM0MzsJCXJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLSZndDtpZCwKJiM0MzsJCQkJCSAgICAgICBuc190b190aW1lc3BlYzY0KGRlbHRhKSk7CiYjNDM7CiYjNDM7CS8qIFNwbGl0IG9mZiBzZWNvbmRzIHZpYSBUb0QgcmVhZC1tb2RpZnktd3JpdGUgc28gdGhlIHN1Yi1zZWNvbmQKJiM0MzsJICogcmVtYWluZGVyIGNhbiBiZSBhcHBsaWVkIHRocm91Z2ggdGhlIG91dHB1dC1jb2hlcmVudCBtZWNoYW5pc20KJiM0MzsJICogKHBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlKS4KJiM0MzsJICovCiYjNDM7CWlmIChkZWx0YSAmZ3Q7PSBOU0VDX1BFUl9TRUMgfHwgZGVsdGEgJmx0Oz0gLU5TRUNfUEVSX1NFQykgewomIzQzOwkJczMyIHJlbWFpbmRlcjsKJiM0MzsKJiM0MzsJCXRzLnR2X3NlYyA9IGRpdl9zNjRfcmVtKGRlbHRhLCBOU0VDX1BFUl9TRUMsICZhbXA7cmVtYWluZGVyKTsKJiM0MzsJCXRzLnR2X25zZWMgPSAwOwomIzQzOwkJZGVsdGEgPSByZW1haW5kZXI7CiYjNDM7CiYjNDM7CQlyYyA9IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtJmd0O2lkLCB0cyk7CiYjNDM7CQlpZiAocmMpCiYjNDM7CQkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwkJLyogTm8gc3ViLXNlY29uZCByZW1haW5kZXIsIGRvbmUgKi8KJiM0MzsJCWlmICghZGVsdGEpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CQkvKiBXYWl0IGZvciB0aGUgVG9EIHdyaXRlIHRvIGJlIGFwcGxpZWQgYXQgdGhlIDEgSHogZWRnZQomIzQzOwkJICogYmVmb3JlIGlzc3VpbmcgcGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUsIHNvIHRoZSBwZW5kaW5nCiYjNDM7CQkgKiBXUl9ORVhUXzFIWiBkb2VzIG5vdCBvdmVyd3JpdGUgdGhlIHN1Yi1zZWNvbmQgYWRqdXN0bWVudC4KJiM0MzsJCSAqLwomIzQzOwkJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIHpsZHBsbC0mZ3Q7aWQpOwomIzQzOwkJaWYgKHJjKQomIzQzOwkJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJCXNlY19hZGp1c3RlZCA9IHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQXBwbHkgc3ViLXNlY29uZCBkZWx0YSB2aWEgcGhhc2Ugc3RlcCAoTkNPKSBvciBUSUUgd3JpdGUgKi8KJiM0MzsJaWYgKHpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSkgewomIzQzOwkJcmMgPSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCh6bGRwbGwsIGRlbHRhKTsKJiM0MzsJCWlmICghcmMpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyYyA9IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoemxkZXYsIHpsZHBsbC0mZ3Q7aWQsIGRlbHRhKTsKJiM0MzsJCWlmICghcmMpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogUGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUgZmFpbGVkLCBmYWxsIGJhY2sgdG8gVG9EIGFkanVzdCAqLwomIzQzOwlyYyA9IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtJmd0O2lkLAomIzQzOwkJCQkgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTsKJiM0MzsKJiM0MzsJLyogSW4gdGhlIHVubGlrZWx5IGV2ZW50IHRoYXQgYm90aCBwaGFzZSBzdGVwL1RJRSB3cml0ZSBhbmQgZmFsbGJhY2sKJiM0MzsJICogVG9EIGFkanVzdCBmYWlsIGFmdGVyIHNlY29uZHMgd2VyZSBhbHJlYWR5IGNvbW1pdHRlZCwgcmV0dXJuCiYjNDM7CSAqIHN1Y2Nlc3MgdG8gcHJldmVudCB0aGUgUFRQIHNlcnZvIGZyb20gcmV0cnlpbmcgdGhlIGZ1bGwgZGVsdGEgYW5kCiYjNDM7CSAqIGFwcGx5aW5nIHNlY29uZHMgYWdhaW4uIFRoZSBzdWItc2Vjb25kIHJlc2lkdWFsIHdpbGwgc2VsZi1jb3JyZWN0CiYjNDM7CSAqIGluIHRoZSBuZXh0IHNlcnZvIGN5Y2xlLgomIzQzOwkgKi8KJiM0MzsJaWYgKHJjICZhbXA7JmFtcDsgc2VjX2FkanVzdGVkKSB7CiYjNDM7CQlkZXZfd2Fybih6bGRldi0mZ3Q7ZGV2LAomIzQzOwkJCSAmIzM0O1N1Yi1zZWNvbmQgYWRqdXN0bWVudCBmYWlsZWQgYWZ0ZXIgc2Vjb25kcyBhcHBsaWVkXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcmM7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSAtIGFkanVzdCBQVFAgY2xvY2sgZnJlcXVlbmN5CiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvCiYjNDM7ICogQHNjYWxlZF9wcG06IGZyZXF1ZW5jeSBhZGp1c3RtZW50IGluIHNjYWxlZCBwcG0gKHBwbSAqIDJeMTYpCiYjNDM7ICoKJiM0MzsgKiBPbmx5IHN1cHBvcnRlZCBmb3IgTkNPLiBXcml0ZXMgdGhlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgcmVnaXN0ZXIuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46CiYjNDM7ICogKiAlMAkJCS0gc3VjY2VzcyBvciBAc2NhbGVkX3BwbSBpcyB6ZXJvIChuby1vcCkKJiM0MzsgKiAqICUtRU9QTk9UU1VQUAktIE5DTyBwaW4gaXMgbm90IGNvbm5lY3RlZCBhbmQgQHNjYWxlZF9wcG0gaXMgbm9uLXplcm8KJiM0MzsgKiAqIG5lZ2F0aXZlCQktIG90aGVyIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludAomIzQzO3psMzA3M3hfZHBsbF9wdHBfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGxvbmcgc2NhbGVkX3BwbSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLAomIzQzOwkJCQkJCSAgIHB0cF9pbmZvKTsKJiM0MzsJY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjsKJiM0MzsJczY0IG9mZnNldDsKJiM0MzsKJiM0MzsJLyogQ29udmVydCBzY2FsZWRfcHBtIHRvIGRmX29mZnNldCBpbiAyXi00OCBzdGVwczoKJiM0MzsJICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjMyKSAvIDEwXjYKJiM0MzsJICoKJiM0MzsJICogU2ltcGxpZnkgdG8gYXZvaWQgb3ZlcmZsb3c6CiYjNDM7CSAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogMl4yNikgLyA1XjYKJiM0MzsJICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiA2NzEwODg2NCkgLyAxNTYyNQomIzQzOwkgKi8KJiM0MzsJb2Zmc2V0ID0gLWRpdl9zNjQoKHM2NClzY2FsZWRfcHBtICogNjcxMDg4NjRMTCwgMTU2MjUpOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwomIzQzOwljaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRwbGwtJmd0O2RldiwgemxkcGxsLSZndDtpZCk7CiYjNDM7CWlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKQomIzQzOwkJcmV0dXJuIHNjYWxlZF9wcG0gPyAtRU9QTk9UU1VQUCA6IDA7CiYjNDM7CWlmIChvZmZzZXQgPT0gY2hhbi0mZ3Q7ZGZfb2Zmc2V0KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCh6bGRwbGwtJmd0O2RldiwgemxkcGxsLSZndDtpZCwgb2Zmc2V0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSAtIGFkanVzdCBQVFAgY2xvY2sgcGhhc2UKJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm8KJiM0MzsgKiBAZGVsdGE6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMKJiM0MzsgKgomIzQzOyAqIE9ubHkgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMuIFVzZXMgVElFIHdyaXRlIGZvcgomIzQzOyAqIG5hbm9zZWNvbmQgcmVzb2x1dGlvbiBwaGFzZSBhZGp1c3RtZW50LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOgomIzQzOyAqICogJTAJCQktIHN1Y2Nlc3Mgb3IgQGRlbHRhIGlzIHplcm8gKG5vLW9wKQomIzQzOyAqICogJS1FT1BOT1RTVVBQCS0gbW9kZSBkb2VzIG5vdCBzdXBwb3J0IFRJRSBhbmQgQGRlbHRhIGlzIG5vbi16ZXJvCiYjNDM7ICogKiBuZWdhdGl2ZQkJLSBvdGhlciBlcnJvcgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHMzMiBkZWx0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLAomIzQzOwkJCQkJCSAgIHB0cF9pbmZvKTsKJiM0MzsJc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC0mZ3Q7ZGV2OwomIzQzOwljb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuOwomIzQzOwomIzQzOwlpZiAoIWRlbHRhKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CWNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZGV2LCB6bGRwbGwtJmd0O2lkKTsKJiM0MzsKJiM0MzsJaWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY2hhbikpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJldHVybiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHpsZGV2LCB6bGRwbGwtJmd0O2lkLCBkZWx0YSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzMzIKJiM0Mzt6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyBfX2Fsd2F5c191bnVzZWQpCiYjNDM7ewomIzQzOwkvKiBIVyBsaW1pdHMgVElFIHdyaXRlIHRvICYjNDM7LTEgc2Vjb25kLiBSZXR1cm4gdGhlIGNvbnN0YW50IEhXCiYjNDM7CSAqIGxpbWl0IGFuZCBsZXQgYWRqcGhhc2UgaGFuZGxlIG1vZGUtc3BlY2lmaWMgY2hlY2tzLgomIzQzOwkgKi8KJiM0MzsJcmV0dXJuIE5TRUNfUEVSX1NFQyAtIDE7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvID0gewomIzQzOwkub3duZXIJCT0gVEhJU19NT0RVTEUsCiYjNDM7CS5tYXhfYWRqCT0gWkwzMDczWF9EUExMX1BUUF9NQVhfQURKLAomIzQzOwkuZ2V0dGltZXg2NAk9IHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCwKJiM0MzsJLnNldHRpbWU2NAk9IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0LAomIzQzOwkuYWRqdGltZQk9IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSwKJiM0MzsJLmFkamZpbmUJPSB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUsCiYjNDM7CS5hZGpwaGFzZQk9IHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2UsCiYjNDM7CS5nZXRtYXhwaGFzZQk9IHpsMzA3M3hfZHBsbF9wdHBfZ2V0bWF4cGhhc2UsCiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBhIERQTEwgY2hhbm5lbAomIzQzOyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byByZWdpc3RlciBQVFAgY2xvY2sgZm9yCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQomIzQzO3sKJiM0MzsJc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC0mZ3Q7ZGV2OwomIzQzOwlzdHJ1Y3QgcHRwX2Nsb2NrICpwdHBfY2xvY2s7CiYjNDM7CiYjNDM7CXpsZHBsbC0mZ3Q7cHRwX2luZm8gPSB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm87CiYjNDM7CXNucHJpbnRmKHpsZHBsbC0mZ3Q7cHRwX2luZm8ubmFtZSwgc2l6ZW9mKHpsZHBsbC0mZ3Q7cHRwX2luZm8ubmFtZSksCiYjNDM7CQkgJiMzNDslcy1kcGxsJXUmIzM0OywgZGV2X25hbWUoemxkZXYtJmd0O2RldiksIHpsZHBsbC0mZ3Q7aWQpOwomIzQzOwomIzQzOwlwdHBfY2xvY2sgPSBwdHBfY2xvY2tfcmVnaXN0ZXIoJmFtcDt6bGRwbGwtJmd0O3B0cF9pbmZvLCB6bGRldi0mZ3Q7ZGV2KTsKJiM0MzsJaWYgKElTX0VSUihwdHBfY2xvY2spKSB7CiYjNDM7CQlkZXZfZXJyKHpsZGV2LSZndDtkZXYsICYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgRFBMTCV1XG4mIzM0OywKJiM0MzsJCQl6bGRwbGwtJmd0O2lkKTsKJiM0MzsJCXJldHVybiBQVFJfRVJSKHB0cF9jbG9jayk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJemxkcGxsLSZndDtwdHBfY2xvY2sgPSBwdHBfY2xvY2s7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIgLSB1bnJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgYSBEUExMIGNoYW5uZWwKJiM0MzsgKiBAemxkcGxsOiBEUExMIGNoYW5uZWwgdG8gdW5yZWdpc3RlciBQVFAgY2xvY2sgZm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKJiM0Mzt7CiYjNDM7CWlmICghSVNfRVJSX09SX05VTEwoemxkcGxsLSZndDtwdHBfY2xvY2spKSB7CiYjNDM7CQlwdHBfY2xvY2tfdW5yZWdpc3Rlcih6bGRwbGwtJmd0O3B0cF9jbG9jayk7CiYjNDM7CQl6bGRwbGwtJmd0O3B0cF9jbG9jayA9IE5VTEw7CiYjNDM7CX0KIH0KIAogLyoqCkBAIC0yNDM2LDYgJiM0MzsyNzc3LDQ3IEBAIHpsMzA3M3hfZHBsbF9yZWZfc3luY19wYWlyc19yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfYWxsb2MgLSBhbGxvY2F0ZSBEUExMIGRldmljZQomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlcgomIzQzOyAqCiYjNDM7ICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBwb2ludGVyIHRvIERQTEwgZGV2aWNlIG9uIHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgemwzMDczeF9kcGxsICoKJiM0Mzt6bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7CiYjNDM7CiYjNDM7CXpsZHBsbCA9IGt6YWxsb2Nfb2JqKCp6bGRwbGwpOwomIzQzOwlpZiAoIXpsZHBsbCkKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwomIzQzOwomIzQzOwl6bGRwbGwtJmd0O2RldiA9IHpsZGV2OwomIzQzOwl6bGRwbGwtJmd0O2lkID0gY2g7CiYjNDM7CW11dGV4X2luaXQoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwlJTklUX0xJU1RfSEVBRCgmYW1wO3psZHBsbC0mZ3Q7cGlucyk7CiYjNDM7CiYjNDM7CXJldHVybiB6bGRwbGw7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9mcmVlIC0gZnJlZSBEUExMIGRldmljZQomIzQzOyAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZQomIzQzOyAqCiYjNDM7ICogRGVhbGxvY2F0ZXMgZ2l2ZW4gRFBMTCBkZXZpY2UgcHJldmlvdXNseSBhbGxvY2F0ZWQgYnkgQHpsMzA3M3hfZHBsbF9hbGxvYy4KJiM0MzsgKi8KJiM0Mzt2b2lkCiYjNDM7emwzMDczeF9kcGxsX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQomIzQzO3sKJiM0MzsJV0FSTih6bGRwbGwtJmd0O2RwbGxfZGV2LCAmIzM0O0RQTEwgZGV2aWNlIGlzIHN0aWxsIHJlZ2lzdGVyZWRcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJbXV0ZXhfZGVzdHJveSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiYjNDM7CWtmcmVlKHpsZHBsbCk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIgLSByZWdpc3RlciBEUExMIGRldmljZSBhbmQgYWxsIGl0cyBwaW5zCiAgKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmUKQEAgLTI0NjYsNiAmIzQzOzI4NDgsMTMgQEAgemwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKIAkJcmV0dXJuIHJjOwogCX0KIAomIzQzOwlyYyA9IHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIoemxkcGxsKTsKJiM0MzsJaWYgKHJjKSB7CiYjNDM7CQl6bDMwNzN4X2RwbGxfcGluc191bnJlZ2lzdGVyKHpsZHBsbCk7CiYjNDM7CQl6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTsKJiM0MzsJCXJldHVybiByYzsKJiM0MzsJfQomIzQzOwogCXJldHVybiAwOwogfQogCkBAIC0yNDc5LDcgJiM0MzsyODY4LDcgQEAgemwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKIHZvaWQKIHpsMzA3M3hfZHBsbF91bnJlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKIHsKLQkvKiBVbnJlZ2lzdGVyIGFsbCBwaW5zIGFuZCBkcGxsICovCiYjNDM7CXpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3Rlcih6bGRwbGwpOwogCXpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTsKIAl6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaAppbmRleCBmYWViYzQwMmJhMWI3Li45OTMyMjFkYzYzMjQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oCkBAIC01LDYgJiM0Mzs1LDcgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2RwbGwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9saXN0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtjb3JlLmgmIzM0OwogCkBAIC0yMiw2ICYjNDM7MjMsOCBAQAogICogQHR5cGU6IERQTEwgdHlwZSAoUFBTIG9yIEVFQykKICAqIEBsb2NrX3N0YXR1czogbGFzdCBzYXZlZCBEUExMIGxvY2sgc3RhdHVzCiAgKiBAcGluczogbGlzdCBvZiBwaW5zCiYjNDM7ICogQHB0cF9pbmZvOiBQVFAgY2xvY2sgaW5mbwomIzQzOyAqIEBwdHBfY2xvY2s6IHJlZ2lzdGVyZWQgUFRQIGNsb2NrIChvciBOVUxMKQogICovCiBzdHJ1Y3QgemwzMDczeF9kcGxsIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCQlsaXN0OwpAQCAtMzYsNiAmIzQzOzM5LDggQEAgc3RydWN0IHpsMzA3M3hfZHBsbCB7CiAJZW51bSBkcGxsX3R5cGUJCQl0eXBlOwogCWVudW0gZHBsbF9sb2NrX3N0YXR1cwkJbG9ja19zdGF0dXM7CiAJc3RydWN0IGxpc3RfaGVhZAkJcGluczsKJiM0MzsJc3RydWN0IHB0cF9jbG9ja19pbmZvCQlwdHBfaW5mbzsKJiM0MzsJc3RydWN0IHB0cF9jbG9jawkJKnB0cF9jbG9jazsKIH07CiAKIHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgKaW5kZXggYjcwZWFkN2Q0NDk1Yi4uZjNhNWUxMjE1YWEzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaApAQCAtMTc5LDYgJiM0MzsxNzksMjAgQEAKICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRAkJCUdFTk1BU0soMiwgMCkKICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRF9BQ0NfSQkJNAogCiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTAkJCVpMX1JFRyg1LCAweDMwLCAxKQomIzQzOyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUAkJCUdFTk1BU0soMiwgMCkKJiM0MzsjZGVmaW5lIFpMX0RQTExfVElFX0NUUkxfT1BfV1IJCQk0CiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTF9NQVNLCQlaTF9SRUcoNSwgMHgzMSwgMSkKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9DVFJMKF9pZHgpCQkJCQlcCiYjNDM7CVpMX1JFR19JRFgoX2lkeCwgNSwgMHgzOCwgMSwgWkwzMDczWF9NQVhfQ0hBTk5FTFMsIDEpCiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX1NFTQkJCUJJVCg0KQomIzQzOyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTUQJCQlHRU5NQVNLKDMsIDApCiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWgkxCiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UCQk4CiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9ORVhUXzFIWgk5CiYjNDM7CiAjZGVmaW5lIFpMX1JFR19EUExMX01FQVNfQ1RSTAkJCVpMX1JFRyg1LCAweDUwLCAxKQogI2RlZmluZSBaTF9EUExMX01FQVNfQ1RSTF9FTgkJCUJJVCgwKQogI2RlZmluZSBaTF9EUExMX01FQVNfQ1RSTF9BVkdfRkFDVE9SCQlHRU5NQVNLKDcsIDQpCkBAIC0xOTMsNiAmIzQzOzIwNyw5IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBSZWdpc3RlciBQYWdlcyA2LTcsIERQTEwgRGF0YQomIzQzOyAqCiYjNDM7ICogUGVyLWNoYW5uZWwgcmVnaXN0ZXJzIHdpdGggc3RyaWRlIDB4MjAuIENoYW5uZWxzIDAtMyByZXNpZGUgb24gcGFnZSA2LAomIzQzOyAqIGNoYW5uZWwgNCBvbiBwYWdlIDcuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2RlZmluZSBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeCkJCQkJCVwKQEAgLTIwMiw2ICYjNDM7MjE5LDI0IEBACiAJKChfaWR4KSAmbHQ7IDQgPyBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfNCkKICNkZWZpbmUgWkxfRFBMTF9ERl9PRkZTRVRfVU5LTk9XTglTNjRfTUlOCiAKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBXzAzKF9pZHgpCQkJCQlcCiYjNDM7CVpMX1JFR19JRFgoX2lkeCwgNiwgMHgwQywgNiwgNCwgMHgyMCkKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBXzQJCQlaTF9SRUcoNywgMHgwQywgNikKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBKF9pZHgpCQkJCQlcCiYjNDM7CSgoX2lkeCkgJmx0OyA0ID8gWkxfUkVHX0RQTExfVElFX0RBVEFfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9USUVfREFUQV80KQomIzQzOwomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQ18wMyhfaWR4KQkJCQkJXAomIzQzOwlaTF9SRUdfSURYKF9pZHgsIDYsIDB4MTIsIDYsIDQsIDB4MjApCiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzQJCQlaTF9SRUcoNywgMHgxMiwgNikKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUMoX2lkeCkJCQkJCVwKJiM0MzsJKChfaWR4KSAmbHQ7IDQgPyBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVE9EX1NFQ180KQomIzQzOwomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TXzAzKF9pZHgpCQkJCQlcCiYjNDM7CVpMX1JFR19JRFgoX2lkeCwgNiwgMHgxOCwgNCwgNCwgMHgyMCkKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU180CQkJWkxfUkVHKDcsIDB4MTgsIDQpCiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlMoX2lkeCkJCQkJCVwKJiM0MzsJKChfaWR4KSAmbHQ7IDQgPyBaTF9SRUdfRFBMTF9UT0RfTlNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfTlNfNCkKJiM0MzsKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogUmVnaXN0ZXIgUGFnZSA5LCBTeW50aCBhbmQgT3V0cHV0CiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0yMjEsNiAmIzQzOzI1NiwyMyBAQAogI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9FTgkJCUJJVCgwKQogI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9TWU5USF9TRUwJCUdFTk1BU0soNiwgNCkKIAomIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTSwkJWkxfUkVHKDksIDB4MzYsIDIpCiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTAkJWkxfUkVHKDksIDB4MzgsIDEpCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX0RQTEwJCUdFTk1BU0soNiwgNCkKJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVAJQklUKDMpCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QCQlHRU5NQVNLKDEsIDApCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX05PTkUJMAomIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9SRVNFVAkxCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1JFQUQJMgomIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURQkzCiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTlVNQkVSCQlaTF9SRUcoOSwgMHgzOSwgMSkKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLCQlaTF9SRUcoOSwgMHgzYSwgMikKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBCQlaTF9SRUcoOSwgMHgzYywgNCkKJiM0MzsKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBSZWdpc3RlciBQYWdlIDEwLCBSZWYgTWFpbGJveAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MTc4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogOTE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWkwzMDczWCBEUExMIERyaXZlciBQYXRjaCBmb3IgRnV6emluZyBTdWl0YWJpbGl0eSoqCgpPa2F5LCBzbyBJIGhhdmUgYSBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgYWRkaW5nIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBgemwzMDczeGAgRFBMTCBkcml2ZXIuIFRoaXMgaW52b2x2ZXMgY2hhbmdlcyBhY3Jvc3Mgc2V2ZXJhbCBmaWxlczogYEtjb25maWdgLCBgY2hhbi5jYCwgYGNoYW4uaGAsIGBjb3JlLmNgLCBgY29yZS5oYCwgYGRwbGwuY2AsIGBkcGxsLmhgLCBhbmQgYHJlZ3MuaGAuIENydWNpYWxseSwgaXQmIzM5O3MgYWRkaW5nIGEgYFBUUF8xNTg4X0NMT0NLYCBkZXBlbmRlbmN5IHRvIGBaTDMwNzNYYCwgYFpMMzA3M1hfSTJDYCwgYW5kIGBaTDMwNzNYX1NQSWAsIGFuZCBpbnRyb2R1Y2luZyBuZXcgUFRQLXJlbGF0ZWQgZnVuY3Rpb25zIGxpa2UgYHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdGAgYW5kIGB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyYC4gU2VlbXMgcHJldHR5IHN0YW5kYXJkIGZvciBQVFAgY2xvY2sgaW50ZWdyYXRpb24uCgpOb3csIHRoZSBwcm9tcHQgaXMgdGhyb3dpbmcgYSBjdXJ2ZWJhbGwsIGFza2luZyBpZiB0aGlzIGlzIGZ1enphYmxlLiBJdCBtZW50aW9ucyAmIzM0O3ZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzJiMzNDsgdGhhdCByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlIGFuZCBjYW4mIzM5O3QgYmUgZW11bGF0ZWQuIEJ1dCwgdGhpcyBgemwzMDczeGAgaXMgYSBEUExMIGRyaXZlciBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlcywgc3BlY2lmaWNhbGx5IHVzaW5nIEkyQy9TUEkuIFRoYXQmIzM5O3MgYSBnb29kIHNpZ24uIEkyQyBhbmQgU1BJIGRldmljZXMgY2FuIG9mdGVuIGJlIGVtdWxhdGVkIGFuZCBmdXp6ZWQgaW4gUUVNVSwgcmlnaHQ/IFdlIGNhbiB0eXBpY2FsbHkgaW5zdGFudGlhdGUgdGhlbSB2aWEgZGV2aWNlIHRyZWUgb3ZlcmxheXMgb3Igc3lzZnMsIG9yIGV2ZW4gZnV6eiB0aGVtIHdpdGggc29tZXRoaW5nIGxpa2Ugc3l6a2FsbGVyLgoKU3l6a2FsbGVyLCBzcGVjaWZpY2FsbHksIGhhcyBJMkMgYW5kIFNQSSBzdXBwb3J0OyBpdCBjYW4gaW5qZWN0IG5vZGVzLCB1c2UgYGkyYy1zdHViYCBvciBgc3BpYCBsb29wYmFja3MsIG9yIGp1c3QgaW5zdGFudGlhdGUgdGhlbSBhbmQgZnV6eiB0aGVpciBvcGVyYXRpb25zLiBUaGF0JiMzOTtzIHRoZSBrZXkuIFRoaXMgZHJpdmVyIHVzZXMgYHJlZ21hcF9pMmNgIGFuZCBgcmVnbWFwX3NwaWAuIFN5emthbGxlciBjYW4gZnV6eiBJMkMgZGV2aWNlcyB2aWEgYC9kZXYvaTJjLSpgIG9yIGJ5IGluc3RhbnRpYXRpbmcgdGhlbSwgc28gdGhhdCYjMzk7cyBob3BlZnVsLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhpcyBkcml2ZXIgY2FuIGJlIGluc3RhbnRpYXRlZCBpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQuIFRoZSBwcm9tcHQgaXMgc3BlY2lmaWNhbGx5IHRhbGtpbmcgYWJvdXQgY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBzbyB0aGF0JiMzOTtzIHdoYXQgSSBoYXZlIHRvIGNoZWNrLgoKVGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIGNhbiB0aGlzIGJlIGluc3RhbnRpYXRlZCB2aWEsIHNheSwgd3JpdGluZyB0byBgL3N5cy9idXMvaTJjL2RldmljZXMvaTJjLSovbmV3X2RldmljZWA/IFRoYXQgc2hvdWxkIHdvcmsgZm9yIGFueSBJMkMgZHJpdmVyIGlmIHdlIGtub3cgdGhlIGRyaXZlciBuYW1lLiBBbmQgdGhlIGRyaXZlciBuYW1lICpzaG91bGQqIGJlIGB6bDMwNzN4YCwgSSYjMzk7bGwgZG91YmxlLWNoZWNrIHRoZSBzb3VyY2UgdG8gYmUgc3VyZS4gSWYgSSBjYW4gY3JlYXRlIHRoZSBJMkMgZGV2aWNlIG5vZGUgYW5kIHRoZW4gcnVuIHRoaXMgbmV3IGNvZGUsIHRoYXQgbWVhbnMgSSBjYW4gZnV6eiB0aGUgY29kZS4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBpbnN0YW50aWF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3psMzA3M3gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDQ0ODYgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWc9Mz1jb25maWcgWkwzMDczWFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctMTQtXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGVcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWc6MTU6XHQgIHdpbGwgYmUgY2FsbGVkIHpsMzA3M3guXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTE2LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZz0xNz1jb25maWcgWkwzMDczWF9JMkNcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTI2LVx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWc6Mjc6XHQgIGJlIGNhbGxlZCB6bDMwNzN4X2kyYy5cbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctMjgtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnPTI5PWNvbmZpZyBaTDMwNzNYX1NQSVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctMzgtXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZzozOTpcdCAgYmUgY2FsbGVkIHpsMzA3M3hfc3BpLlxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L01ha2VmaWxlLTItXG5kcml2ZXJzL2RwbGwvemwzMDczeC9NYWtlZmlsZTozOm9iai0kKENPTkZJR19aTDMwNzNYKVx0XHQmIzQzOz0gemwzMDczeC5vXG5kcml2ZXJzL2RwbGwvemwzMDczeC9NYWtlZmlsZTo0OnpsMzA3M3gtb2Jqc1x0XHRcdDo9IGNoYW4ubyBjb3JlLm8gZGV2bGluay5vIGRwbGwub1x0XFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L01ha2VmaWxlLTUtXHRcdFx0XHQgICBmbGFzaC5vIGZ3Lm8gb3V0Lm8gcHJvcC5vIHJlZi5vIHN5bnRoLm9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L01ha2VmaWxlLTYtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19aTDMwNzNYX0kyQylcdCYjNDM7PSB6bDMwNzN4X2kyYy5vXG5kcml2ZXJzL2RwbGwvemwzMDczeC9NYWtlZmlsZTo4OnpsMzA3M3hfaTJjLW9ianNcdFx0Oj0gaTJjLm9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L01ha2VmaWxlLTktXG5kcml2ZXJzL2RwbGwvemwzMDczeC9NYWtlZmlsZToxMDpvYmotJChDT05GSUdfWkwzMDczWF9TUEkpXHQmIzQzOz0gemwzMDczeF9zcGkub1xuZHJpdmVycy9kcGxsL3psMzA3M3gvTWFrZWZpbGU6MTE6emwzMDczeF9zcGktb2Jqc1x0XHQ6PSBzcGkub1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xMy0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxNDogKiB6bDMwNzN4X2NoYW5fc3RhdGVfdXBkYXRlIC0gdXBkYXRlIERQTEwgY2hhbm5lbCBzdGF0dXMgZnJvbSBIV1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE1OiAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmVcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xNi0gKiBAaW5kZXg6IERQTEwgY2hhbm5lbCBpbmRleFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xOS0gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyMDppbnQgemwzMDczeF9jaGFuX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleClcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMS17XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjI6XHRzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuID0gXHUwMDI2emxkZXYtXHUwMDNlY2hhbltpbmRleF07XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjMtXHR1NjQgdmFsO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyNjpcdHJjID0gemwzMDczeF9yZWFkX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9NT05fU1RBVFVTKGluZGV4KSxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNy1cdFx0XHQgICAgIFx1MDAyNmNoYW4tXHUwMDNlbW9uX3N0YXR1cyk7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMwLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjMxOlx0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX1JFRlNFTF9TVEFUVVMoaW5kZXgpLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMyLVx0XHRcdCAgICAgXHUwMDI2Y2hhbi1cdTAwM2VyZWZzZWxfc3RhdHVzKTtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzgtXHQgKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozOTpcdGlmICghemwzMDczeF9jaGFuX2lzX2xvY2tlZChjaGFuKSkge1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQwOlx0XHRpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSlcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00MS1cdFx0XHRjaGFuLVx1MDAzZWRmX29mZnNldCA9IFpMX0RQTExfREZfT0ZGU0VUX1VOS05PV047XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ0LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQ1Olx0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfREZfUkVBRChpbmRleCksXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDYtXHRcdFx0XHQgIFpMX0RQTExfREZfUkVBRF9TRU0sXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUwLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjUxOlx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9SRUFEKGluZGV4KSxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01Mi1cdFx0XHQgICAgICBaTF9EUExMX0RGX1JFQURfU0VNIHwgWkxfRFBMTF9ERl9SRUFEX1JFRl9PRlNUKTtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTUtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTY6XHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9SRUFEKGluZGV4KSxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01Ny1cdFx0XHRcdCAgWkxfRFBMTF9ERl9SRUFEX1NFTSxcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNjEtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NjI6XHRyYyA9IHpsMzA3M3hfcmVhZF91NDgoemxkZXYsIFpMX1JFR19EUExMX0RGX09GRlNFVChpbmRleCksIFx1MDAyNnZhbCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNjMtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTcxLS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjcyOiAqIHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQgLSBzd2l0Y2ggRFBMTCBjaGFubmVsIHRvIE5DTyBtb2RlXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NzM6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3hfZGV2IHN0cnVjdHVyZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTc0LSAqIEBpbmRleDogRFBMTCBjaGFubmVsIGluZGV4XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTgyLSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjgzOmludCB6bDMwNzN4X2NoYW5fbmNvX21vZGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTg0LXtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo4NTpcdHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4gPSBcdTAwMjZ6bGRldi1cdTAwM2VjaGFuW2luZGV4XTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy04Ni1cdHU4IHByZXZfbW9kZSwgZGZfcmVhZDtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtODktXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6OTA6XHRwcmV2X21vZGUgPSB6bDMwNzN4X2NoYW5fbW9kZV9nZXQoY2hhbik7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtOTEtXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTk2LVx0aWYgKHByZXZfbW9kZSA9PSBaTF9EUExMX01PREVfUkVGU0VMX01PREVfRlJFRVJVTikge1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjk3Olx0XHR6bDMwNzN4X2NoYW5fbW9kZV9zZXQoY2hhbiwgWkxfRFBMTF9NT0RFX1JFRlNFTF9NT0RFX05DTyk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtOTgtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6OTk6XHRcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfTU9ERV9SRUZTRUwoaW5kZXgpLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTEwMC1cdFx0XHRcdCAgICAgIGNoYW4tXHUwMDNlbW9kZV9yZWZzZWwpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTEwMS1cdFx0aWYgKHJjKSB7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTAyOlx0XHRcdHpsMzA3M3hfY2hhbl9tb2RlX3NldChjaGFuLCBwcmV2X21vZGUpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTEwMy1cdFx0XHRyZXR1cm4gcmM7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTEyMC1cdFx0ICBGSUVMRF9QUkVQKFpMX0RQTExfREZfUkVBRF9DTUQsIFpMX0RQTExfREZfUkVBRF9DTURfQUNDX0kpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjEyMTpcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfREZfUkVBRChpbmRleCksIGRmX3JlYWQpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTEyMi1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTMwLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjEzMTpcdHpsMzA3M3hfY2hhbl9tb2RlX3NldChjaGFuLCBaTF9EUExMX01PREVfUkVGU0VMX01PREVfTkNPKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxMzI6XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX01PREVfUkVGU0VMKGluZGV4KSxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xMzMtXHRcdFx0ICAgICAgY2hhbi1cdTAwM2Vtb2RlX3JlZnNlbCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTM0LVx0aWYgKHJjKSB7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTM1Olx0XHR6bDMwNzN4X2NoYW5fbW9kZV9zZXQoY2hhbiwgcHJldl9tb2RlKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xMzYtXHRcdHJldHVybiByYztcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTQ3LVx0ICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTQ4Olx0cmMgPSB6bDMwNzN4X3JlYWRfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9PRkZTRVQoaW5kZXgpLCBcdTAwMjZ2YWwpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE0OS1cdGlmIChyYykge1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xNjEtLyoqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTYyOiAqIHpsMzA3M3hfY2hhbl9zdGF0ZV9mZXRjaCAtIGZldGNoIERQTEwgY2hhbm5lbCBzdGF0ZSBmcm9tIGhhcmR3YXJlXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTYzOiAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmVcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xNjQtICogQGluZGV4OiBEUExMIGNoYW5uZWwgaW5kZXggdG8gZmV0Y2ggc3RhdGUgZm9yXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE3MC0gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxNzE6aW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9mZXRjaChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleClcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xNzIte1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE3MzpcdHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4gPSBcdTAwMjZ6bGRldi1cdTAwM2VjaGFuW2luZGV4XTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xNzQtXHRpbnQgcmMsIGk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTc1LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE3NjpcdHJjID0gemwzMDczeF9yZWFkX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9DVFJMKGluZGV4KSwgXHUwMDI2Y2hhbi1cdTAwM2VjdHJsKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xNzctXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE3OS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxODA6XHRyYyA9IHpsMzA3M3hfcmVhZF91OCh6bGRldiwgWkxfUkVHX0RQTExfTU9ERV9SRUZTRUwoaW5kZXgpLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE4MS1cdFx0XHQgICAgIFx1MDAyNmNoYW4tXHUwMDNlbW9kZV9yZWZzZWwpO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xODUtXHRkZXZfZGJnKHpsZGV2LVx1MDAzZWRldiwgXCYjMzQ7RFBMTCV1IG1vZGU6ICV1LCByZWY6ICV1XFxuXCYjMzQ7LCBpbmRleCxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxODY6XHRcdHpsMzA3M3hfY2hhbl9tb2RlX2dldChjaGFuKSwgemwzMDczeF9jaGFuX3JlZl9nZXQoY2hhbikpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE4Ny1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxODg6XHRyYyA9IHpsMzA3M3hfY2hhbl9zdGF0ZV91cGRhdGUoemxkZXYsIGluZGV4KTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xODktXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE5NS1cdCAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE5NjpcdGlmICh6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikpXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTk3LVx0XHRjaGFuLVx1MDAzZWRmX29mZnNldCA9IFpMX0RQTExfREZfT0ZGU0VUX1VOS05PV047XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIwMC1cdFx0XCYjMzQ7RFBMTCV1IGxvY2tfc3RhdGU6ICV1LCBobzogJXUsIHNlbF9zdGF0ZTogJXUsIHNlbF9yZWY6ICV1XFxuXCYjMzQ7LFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIwMTpcdFx0aW5kZXgsIHpsMzA3M3hfY2hhbl9sb2NrX3N0YXRlX2dldChjaGFuKSxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyMDI6XHRcdHpsMzA3M3hfY2hhbl9pc19ob19yZWFkeShjaGFuKSA/IDEgOiAwLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIwMzpcdFx0emwzMDczeF9jaGFuX3JlZnNlbF9zdGF0ZV9nZXQoY2hhbiksXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjA0Olx0XHR6bDMwNzN4X2NoYW5fcmVmc2VsX3JlZl9nZXQoY2hhbikpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIwNS1cbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjA4LVx0LyogUmVhZCBEUExMIGNvbmZpZ3VyYXRpb24gZnJvbSBtYWlsYm94ICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjA5Olx0cmMgPSB6bDMwNzN4X21iX29wKHpsZGV2LCBaTF9SRUdfRFBMTF9NQl9TRU0sIFpMX0RQTExfTUJfU0VNX1JELFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIxMC1cdFx0XHQgICBaTF9SRUdfRFBMTF9NQl9NQVNLLCBCSVQoaW5kZXgpKTtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjE1LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShjaGFuLVx1MDAzZXJlZl9wcmlvKTsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyMTY6XHRcdHJjID0gemwzMDczeF9yZWFkX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9SRUZfUFJJTyhpKSxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMTctXHRcdFx0XHQgICAgIFx1MDAyNmNoYW4tXHUwMDNlcmVmX3ByaW9baV0pO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMjUtLyoqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjI2OiAqIHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQgLSBnZXQgY3VycmVudCBEUExMIGNoYW5uZWwgc3RhdGVcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyMjc6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3hfZGV2IHN0cnVjdHVyZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIyOC0gKiBAaW5kZXg6IERQTEwgY2hhbm5lbCBpbmRleCB0byBnZXQgc3RhdGUgZm9yXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIzMS0gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyMzI6Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqemwzMDczeF9jaGFuX3N0YXRlX2dldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIzMy1cdFx0XHRcdFx0XHQgIHU4IGluZGV4KVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMzgtLyoqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjM5OiAqIHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCAtIHdhaXQgZm9yIFRvRCBzZW1hcGhvcmUgdG8gY2xlYXJcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyNDA6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjQxLSAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI1MS0gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyNTI6aW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNTMte1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNTctXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjU4Olx0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSwgXHUwMDI2dG9kX2N0cmwpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI1OS1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjc2LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI3NzpcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNzgtXHRcdFx0XHQgIFpMX0RQTExfVE9EX0NUUkxfU0VNLCB0aW1lb3V0KTtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjgzLS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI4NDogKiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwgLSBpc3N1ZSBUb0QgY29tbWFuZFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI4NTogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yODYtICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjk0LSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI5NTpzdGF0aWMgaW50IHpsMzA3M3hfY2hhbl90b2RfY3RybChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgdTggY21kKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI5Ni17XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6Mjk3Olx0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yOTgtXHRcdFx0XHRaTF9EUExMX1RPRF9DVFJMX1NFTSB8IGNtZCk7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMwMS0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozMDI6ICogemwzMDczeF9jaGFuX3RvZF9yZWFkIC0gcmVhZCBUb0QgcmVnaXN0ZXJzIGFmdGVyIGlzc3VpbmcgYSBjb21tYW5kXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzAzOiAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMwNC0gKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMDgtICpcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozMDk6ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMTAtICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMTEtICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzEyOmludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzEzLVx0XHRcdCAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMyNi1cdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzI3Olx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMjgtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMzMS1cdHB0cF9yZWFkX3N5c3RlbV9wcmV0cyhzdHMpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjMzMjpcdHJjID0gemwzMDczeF9jaGFuX3RvZF9jdHJsKHpsZGV2LCBjaCwgY21kKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMzMtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMzNS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozMzY6XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMzNy1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzQwLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM0MTpcdHJjID0gemwzMDczeF9yZWFkX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIFx1MDAyNnNlYyk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzQyLVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNDUtXHQvKiBIVyBuYW5vc2Vjb25kcyBhcmUgYWx3YXlzIGluIFswLCBOU0VDX1BFUl9TRUMpIHJhbmdlICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzQ2Olx0cmMgPSB6bDMwNzN4X3JlYWRfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCBcdTAwMjZuc2VjKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNDctXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM1Ni0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozNTc6ICogemwzMDczeF9jaGFuX3RvZF93cml0ZSAtIHdyaXRlIFRvRCByZWdpc3RlcnMgYW5kIHRyaWdnZXIgMSBIeiB1cGRhdGVcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozNTg6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzU5LSAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM2MS0gKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM2MjogKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM2My0gKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM2NC0gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozNjU6aW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzY2LVx0XHRcdCAgIHN0cnVjdCB0aW1lc3BlYzY0IHRzKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNzAtXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVG9EIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM3MTpcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzcyLVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNzQtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6Mzc1Olx0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIHRzLnR2X3NlYyk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzc2LVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNzgtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6Mzc5Olx0cmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgdHMudHZfbnNlYyk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzgwLVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zODItXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzgzOlx0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfY3RybCh6bGRldiwgY2gsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzg0LVx0XHRcdFx0ICAgICBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWik7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM4Ny0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozODg6ICogemwzMDczeF9jaGFuX3RvZF9hZGp1c3QgLSBhdG9taWMgVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIHdpdGggcm9sbG92ZXIgZ3VhcmRcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozODk6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzkwLSAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM5OC0gKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM5OTogKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQwMC0gKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQwMS0gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0MDI6aW50IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQwMy1cdFx0XHQgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQxMC1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIFpMX1RPRF9NQVhfUkVUUklFUzsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0MTE6XHRcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgdHJ1ZSwgXHUwMDI2dHNfbmV4dCwgTlVMTCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDEyLVx0XHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQxNC1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0MTU6XHRcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgZmFsc2UsIFx1MDAyNnRzX2N1ciwgTlVMTCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDE2LVx0XHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQzOC1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0Mzk6XHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF93cml0ZSh6bGRldiwgY2gsIHRzX25leHQpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ0MC0jdW5kZWYgWkxfVE9EX01BWF9SRVRSSUVTXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ0My0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0NDQ6ICogemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQgLSB3cml0ZSBkZWx0YSBmcmVxdWVuY3kgb2Zmc2V0IHRvIGhhcmR3YXJlXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDQ1OiAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ0Ni0gKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00NTEtICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDUyOmludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldClcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00NTMte1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00NTUtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDU2Olx0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfREZfT0ZGU0VUKGNoKSwgb2Zmc2V0KTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00NTctXHRpZiAoIXJjKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00NjMtLyoqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDY0OiAqIHpsMzA3M3hfY2hhbl90aWVfd3JpdGUgLSBhZGp1c3QgRFBMTCBwaGFzZSB1c2luZyBUSUUgd3JpdGVcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0NjU6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDY2LSAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ3My0gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0NzQ6aW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucylcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00NzUte1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00ODEtXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVElFIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQ4MjpcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ4My1cdFx0XHRcdCAgWkxfRFBMTF9USUVfQ1RSTF9PUCxcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDkwLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQ5MTpcdHJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9EQVRBKGNoKSwgdGllX2RhdGEpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ5Mi1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDk0LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQ5NTpcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkxfTUFTSywgQklUKGNoKSk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDk2LVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00OTgtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDk5Olx0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUwMC1cdFx0XHRcdFpMX0RQTExfVElFX0NUUkxfT1BfV1IpO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01MDMtLyoqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTA0OiAqIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwIC0gZXhlY3V0ZSBvbmUgb3V0cHV0IHBoYXNlIHN0ZXAgb3BlcmF0aW9uXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTA1OiAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUwNi0gKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01MTUtICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTE2OmludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01MTctXHRcdFx0ICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01MjUtXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgcGhhc2Ugc3RlcCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1MjY6XHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTCxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01MjctXHRcdFx0XHQgIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AsXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUzMS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1MzI6XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfREFUQSxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01MzMtXHRcdFx0ICAgICAgIHN0ZXBfY3ljbGVzKTtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTM2LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjUzNzpcdHJjID0gemwzMDczeF93cml0ZV91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLLCBvdXRfbWFzayk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTM4LVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NDAtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTQxOlx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTlVNQkVSLCAxKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NDItXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU1MC1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1NTE6XHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwsIGN0cmwpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU1Mi19XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU1NC0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1NTU6ICogemwzMDczeF9jaGFuX3N0YXRlX3NldCAtIGNvbW1pdCBEUExMIGNoYW5uZWwgc3RhdGUgY2hhbmdlcyB0byBoYXJkd2FyZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU1NjogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTU3LSAqIEBpbmRleDogRFBMTCBjaGFubmVsIGluZGV4IHRvIHNldCBzdGF0ZSBmb3Jcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTY2LSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU2NzppbnQgemwzMDczeF9jaGFuX3N0YXRlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1Njg6XHRcdFx0ICAgY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01Njkte1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU3MDpcdHN0cnVjdCB6bDMwNzN4X2NoYW4gKmRjaGFuID0gXHUwMDI2emxkZXYtXHUwMDNlY2hhbltpbmRleF07XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTcxLVx0aW50IHJjLCBpO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NzgtXHRpZiAoZGNoYW4tXHUwMDNlY3RybCAhPSBjaGFuLVx1MDAzZWN0cmwpIHtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1Nzk6XHRcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfQ1RSTChpbmRleCksXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTgwLVx0XHRcdFx0ICAgICAgY2hhbi1cdTAwM2VjdHJsKTtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTg2LVx0aWYgKGRjaGFuLVx1MDAzZW1vZGVfcmVmc2VsICE9IGNoYW4tXHUwMDNlbW9kZV9yZWZzZWwpIHtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1ODc6XHRcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfTU9ERV9SRUZTRUwoaW5kZXgpLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU4OC1cdFx0XHRcdCAgICAgIGNoYW4tXHUwMDNlbW9kZV9yZWZzZWwpO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy02MDItXHQvKiBSZWFkIERQTEwgY29uZmlndXJhdGlvbiBpbnRvIG1haWxib3ggKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo2MDM6XHRyYyA9IHpsMzA3M3hfbWJfb3AoemxkZXYsIFpMX1JFR19EUExMX01CX1NFTSwgWkxfRFBMTF9NQl9TRU1fUkQsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNjA0LVx0XHRcdCAgIFpMX1JFR19EUExMX01CX01BU0ssIEJJVChpbmRleCkpO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy02MTAtXHRcdGlmIChkY2hhbi1cdTAwM2VyZWZfcHJpb1tpXSAhPSBjaGFuLVx1MDAzZXJlZl9wcmlvW2ldKSB7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NjExOlx0XHRcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldixcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy02MTItXHRcdFx0XHRcdCAgICAgIFpMX1JFR19EUExMX1JFRl9QUklPKGkpLFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy02MTktXHQvKiBDb21taXQgRFBMTCBjb25maWd1cmF0aW9uICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NjIwOlx0cmMgPSB6bDMwNzN4X21iX29wKHpsZGV2LCBaTF9SRUdfRFBMTF9NQl9TRU0sIFpMX0RQTExfTUJfU0VNX1dSLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTYyMS1cdFx0XHQgICBaTF9SRUdfRFBMTF9NQl9NQVNLLCBCSVQoaW5kZXgpKTtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg9MTM9c3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjE0OnN0cnVjdCB6bDMwNzN4X2RldjtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xNS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xNi0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxNzogKiBzdHJ1Y3QgemwzMDczeF9jaGFuIC0gRFBMTCBjaGFubmVsIHN0YXRlXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTgtICogQGN0cmw6IERQTEwgY29udHJvbCByZWdpc3RlciB2YWx1ZVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0yNC0gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoyNTpzdHJ1Y3QgemwzMDczeF9jaGFuIHtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0yNi1cdHN0cnVjdF9ncm91cChjZmcsXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTM3LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjM4OmludCB6bDMwNzN4X2NoYW5fc3RhdGVfZmV0Y2goc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjM5OmNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKnpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldixcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC00MC1cdFx0XHRcdFx0XHQgdTggaW5kZXgpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjQxOmludCB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4LFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjQyOlx0XHRcdCAgIGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTQzLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjQ0OmludCB6bDMwNzN4X2NoYW5fc3RhdGVfdXBkYXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDo0NTppbnQgemwzMDczeF9jaGFuX25jb19tb2RlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNDYtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NDc6aW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NDg6aW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC00OS1cdFx0XHQgIGJvb2wgbmV4dF9oeiwgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTUwLVx0XHRcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjUxOmludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTUyLVx0XHRcdCAgIHN0cnVjdCB0aW1lc3BlYzY0IHRzKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDo1MzppbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNTQtXHRcdFx0ICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDo1NTppbnQgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNTYtXHRcdFx0ICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLCBib29sIHRvZF9zdGVwKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC01Ny1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDo1ODppbnQgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBvZmZzZXQpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTU5LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjYwOmludCB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgZGVsdGFfbnMpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTYxLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTYyLS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjYzOiAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfZ2V0IC0gZ2V0IGNhY2hlZCBkZl9vZmZzZXQgdnMgdHJhY2tlZCByZWZlcmVuY2VcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC02NC0gKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oPTY4PXN0YXRpYyBpbmxpbmUgczY0XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6Njk6emwzMDczeF9jaGFuX2RmX29mZnNldF9nZXQoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC03MC17XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTc0LS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjc1OiAqIHpsMzA3M3hfY2hhbl9tb2RlX2dldCAtIGdldCBEUExMIGNoYW5uZWwgb3BlcmF0aW5nIG1vZGVcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC03Ni0gKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTc5LSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjgwOnN0YXRpYyBpbmxpbmUgdTggemwzMDczeF9jaGFuX21vZGVfZ2V0KGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtODEte1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC04NS0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDo4NjogKiB6bDMwNzN4X2NoYW5fcmVmX2dldCAtIGdldCBtYW51YWxseSBzZWxlY3RlZCByZWZlcmVuY2VcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC04Ny0gKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTkwLSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjkxOnN0YXRpYyBpbmxpbmUgdTggemwzMDczeF9jaGFuX3JlZl9nZXQoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC05Mi17XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTk2LS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjk3OiAqIHpsMzA3M3hfY2hhbl9tb2RlX3NldCAtIHNldCBEUExMIGNoYW5uZWwgb3BlcmF0aW5nIG1vZGVcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC05OC0gKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTEwMC0gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxMDE6c3RhdGljIGlubGluZSB2b2lkIHpsMzA3M3hfY2hhbl9tb2RlX3NldChzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuLCB1OCBtb2RlKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTEwMi17XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTEwNi0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxMDc6ICogemwzMDczeF9jaGFuX3JlZl9zZXQgLSBzZXQgbWFudWFsbHkgc2VsZWN0ZWQgcmVmZXJlbmNlXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTA4LSAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTEwLSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjExMTpzdGF0aWMgaW5saW5lIHZvaWQgemwzMDczeF9jaGFuX3JlZl9zZXQoc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiwgdTggcmVmKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTExMi17XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTExNi0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxMTc6ICogemwzMDczeF9jaGFuX3JlZl9wcmlvX2dldCAtIGdldCByZWZlcmVuY2UgcHJpb3JpdHlcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xMTgtICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaD0xMjM9c3RhdGljIGlubGluZSB1OFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjEyNDp6bDMwNzN4X2NoYW5fcmVmX3ByaW9fZ2V0KGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4sIHU4IHJlZilcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xMjUte1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xMzQtLyoqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTM1OiAqIHpsMzA3M3hfY2hhbl9yZWZfcHJpb19zZXQgLSBzZXQgcmVmZXJlbmNlIHByaW9yaXR5XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTM2LSAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg9MTQwPXN0YXRpYyBpbmxpbmUgdm9pZFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjE0MTp6bDMwNzN4X2NoYW5fcmVmX3ByaW9fc2V0KHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4sIHU4IHJlZiwgdTggcHJpbylcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xNDIte1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xNTEtLyoqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTUyOiAqIHpsMzA3M3hfY2hhbl9yZWZfaXNfc2VsZWN0YWJsZSAtIGNoZWNrIGlmIHJlZmVyZW5jZSBpcyBzZWxlY3RhYmxlXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTUzLSAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg9MTU4PXN0YXRpYyBpbmxpbmUgYm9vbFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjE1OTp6bDMwNzN4X2NoYW5fcmVmX2lzX3NlbGVjdGFibGUoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiwgdTggcmVmKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE2MC17XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTYxOlx0cmV0dXJuIHpsMzA3M3hfY2hhbl9yZWZfcHJpb19nZXQoY2hhbiwgcmVmKSAhPSBaTF9EUExMX1JFRl9QUklPX05PTkU7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTYyLX1cbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTY0LS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjE2NTogKiB6bDMwNzN4X2NoYW5fbG9ja19zdGF0ZV9nZXQgLSBnZXQgRFBMTCBjaGFubmVsIGxvY2sgc3RhdGVcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xNjYtICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xNjktICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTcwOnN0YXRpYyBpbmxpbmUgdTggemwzMDczeF9jaGFuX2xvY2tfc3RhdGVfZ2V0KGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTcxLXtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTc1LS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjE3NjogKiB6bDMwNzN4X2NoYW5faXNfbG9ja2VkIC0gY2hlY2sgaWYgY2hhbm5lbCBpcyBsb2NrZWQgdG8gYSByZWZlcmVuY2VcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xNzctICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xODAtICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTgxOnN0YXRpYyBpbmxpbmUgYm9vbCB6bDMwNzN4X2NoYW5faXNfbG9ja2VkKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTgyLXtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxODM6XHR1OCBsb2NrX3N0YXRlID0gemwzMDczeF9jaGFuX2xvY2tfc3RhdGVfZ2V0KGNoYW4pO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE4NC1cdHJldHVybiBsb2NrX3N0YXRlID09IFpMX0RQTExfTU9OX1NUQVRVU19TVEFURV9MT0NLO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xODctLyoqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTg4OiAqIHpsMzA3M3hfY2hhbl9tb2RlX2lzX2F1dG8gLSBjaGVjayBpZiBjaGFubmVsIGlzIGluIGF1dG9tYXRpYyBtb2RlXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTg5LSAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTkyLSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjE5MzpzdGF0aWMgaW5saW5lIGJvb2wgemwzMDczeF9jaGFuX21vZGVfaXNfYXV0byhjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE5NC17XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTk1Olx0cmV0dXJuIHpsMzA3M3hfY2hhbl9tb2RlX2dldChjaGFuKSA9PSBaTF9EUExMX01PREVfUkVGU0VMX01PREVfQVVUTztcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xOTYtfVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xOTgtLyoqXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDE5MgoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDE1NDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhY2hpbmcgdGhlIFBUUCBGdW5jdGlvbmFsaXR5IGluIHRoZSB6bDMwNzN4IERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBEUExMIGRyaXZlciwgYHpsMzA3M3hgLiBNeSBmaXJzdCB0aG91Z2h0IGlzLCAmIzM0O0NhbiBJIHJlYWNoIGl0IHZpYSBzeXNmcz8mIzM0OyBJdCByZWdpc3RlcnMgYm90aCBJMkMgYW5kIFNQSSBkcml2ZXJzLCB3aGljaCBpcyBwcm9taXNpbmcuIEkyQyBpcyBlYXN5IGVub3VnaCDigJMgSSBjYW4gaW5zdGFudGlhdGUgYSBkZXZpY2Ugd2l0aCBgZWNobyB6bDMwNzN4ICZndDsgL3N5cy9idXMvaTJjL2RldmljZXMvaTJjLTAvbmV3X2RldmljZWAuIFdpdGggU1BJIEkgY2FuIHVzZSBzeXNmcywgb3Igc3BpZGV2LCBidXQgYWN0dWFsbHkgc3l6a2FsbGVyJiMzOTtzIGdvdCBtZSBjb3ZlcmVkLCBhcyBpdCBjYW4gaW5qZWN0IEkyQyBhbmQgU1BJIGRldmljZXMgdGhyb3VnaCBpdHMgcHNldWRvLWRldmljZXMgb3IgZGV2aWNlIHRyZWUgb3ZlcmxheXMuCgpBaGEhIEl0JiMzOTtzIGEgUFRQIGNsb2NrLCB0b28uIFRoYXQgbWVhbnMgSSBjYW4gaW50ZXJhY3Qgd2l0aCBpdCB0aHJvdWdoIGAvZGV2L3B0cFhgIHVzaW5nIGBpb2N0bGBzIGxpa2UgYFBUUF9DTE9DS19HRVRFWFRUU2AsIGBQVFBfU1lTX09GRlNFVGAsIGBQVFBfQ0xPQ0tfQURKVElNRWAsIGFuZCBzbyBvbi4gVGhpcyBwYXRjaCBzcGVjaWZpY2FsbHkgYWRkcyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgYHpsMzA3M3hgIGRyaXZlci4gSSYjMzk7dmUgZ290IGEgbGlzdCBvZiBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gYWRkZWQ6IGB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXRgLCBgemwzMDczeF9jaGFuX3RvZF9jdHJsYCwgYHpsMzA3M3hfY2hhbl90b2RfcmVhZGAsIGB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlYCwgYHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0YCwgYHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0YCwgYHpsMzA3M3hfY2hhbl90aWVfd3JpdGVgLCBgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXBgLCBgemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0YCwgYHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0YCwgYHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwYCwgYHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZWAsIGB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmVgLCBgemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZWAsIGB6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlYCwgYHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXJgLCBhbmQgYHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlcmAuCgpSaWdodCwgdGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgaWYgdGhlIGRldmljZSBpcyBpbnN0YW50aWF0ZWQgYW5kIHRoZSBQVFAgY2xvY2sgaXMgcmVnaXN0ZXJlZC4gSXQmIzM5O3MgYW4gSTJDL1NQSSBkZXZpY2UsIHNvIHN5emthbGxlciBzaG91bGQgYmUgYWJsZSB0byBnZXQgdGhpcyBkb25lIGZvciBtZS4gTm93LCB0aGUgdHJpY2sgaXMgdG8gZmlndXJlIG91dCB3aGF0IHRvIGZvY3VzIG9uLgoKU28gbGV0JiMzOTtzIGV4dHJhY3QgdGhlIGtleSBmdW5jdGlvbnMgaGVyZTogYHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NGAsIGB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NGAsIGB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcGAsIGB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVgLCBgemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lYCwgYHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2VgLCBgemwzMDczeF9kcGxsX3B0cF9nZXRtYXhwaGFzZWAsIGB6bDMwNzN4X2NoYW5fdG9kX3JlYWRgLCBgemwzMDczeF9jaGFuX3RvZF93cml0ZWAsIGB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdGAsIGB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldGAsIGB6bDMwNzN4X2NoYW5fdGllX3dyaXRlYCwgYHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwYC4KCk9rYXksIEkgbmVlZCB0byBzZWUgaG93IHRoZXkmIzM5O3JlIGV4cG9zZWQuIFdoaWxlIGB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcGAgaXMgc3RhdGljLCB0aGUgcHJvbXB0IHNheXMgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucy4gSG93ZXZlciwgaXQmIzM5O3MgYSBzaWduaWZpY2FudCBmdW5jdGlvbiwgYW5kIGl0JiMzOTtzIG5vdCBpbmxpbmVkLiBGaW5lLCBJJiMzOTtsbCBpbmNsdWRlIGl0LiBBbHNvLCB0aGUgZnVuY3Rpb25zIGZyb20gYGNoYW4uY2Agc2hvdWxkIGJlIGluY2x1ZGVkOiBgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0YCwgYHpsMzA3M3hfY2hhbl90b2RfcmVhZGAsIGB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlYCwgYHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0YCwgYHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0YCwgYHpsMzA3M3hfY2hhbl90aWVfd3JpdGVgLCBhbmQgYHpsMzA3M3gKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaTDMwNzNYJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTItXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnOjM6Y29uZmlnIFpMMzA3M1hcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctNC1cdHRyaXN0YXRlIFwmIzM0O01pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXNcJiMzNDsgaWYgQ09NUElMRV9URVNUXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZy0xNi1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWc6MTc6Y29uZmlnIFpMMzA3M1hfSTJDXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTE4LVx0dHJpc3RhdGUgXCYjMzQ7STJDIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1wmIzM0O1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctMjgtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnOjI5OmNvbmZpZyBaTDMwNzNYX1NQSVxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZy0zMC1cdHRyaXN0YXRlIFwmIzM0O1NQSSBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzA4MwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIFpMMzA3M1ggS2NvbmZpZyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZ2V0IGEgcmVhbGx5IGdvb2QgaGFuZGxlIG9uIGhvdyB0aGUgWkwzMDczWCBpcyBjb25maWd1cmVkLiBTbywgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQmIzM5O3MgcHVsbCB1cCB0aGUgZnVsbCBLY29uZmlnIGZpbGUuIEkmIzM5O20gbm90IGdvaW5nIHRvIHNraW07IEkgbmVlZCBhIGNvbXByZWhlbnNpdmUgb3ZlcnZpZXcuIEkgd2FudCB0byB1bmRlcnN0YW5kICpldmVyeSogb3B0aW9uLCBkZXBlbmRlbmN5LCBhbmQgZGVmYXVsdCBzZXR0aW5nLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGFib3V0IGZpbmRpbmcgb25lIHNwZWNpZmljIHRoaW5nOyBpdCYjMzk7cyBhYm91dCBidWlsZGluZyBhIHNvbGlkLCBob2xpc3RpYyB1bmRlcnN0YW5kaW5nIG9mIHRoZSBtb2R1bGUmIzM5O3MgY29uZmlndXJhYmlsaXR5LiBXZSYjMzk7cmUgZ29pbmcgdG8gdXNlIHRoaXMgYXMgdGhlIGZvdW5kYXRpb24gZm9yIHRoZSBuZXh0IHN0YWdlIG9mIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdFxuICAgMzpcdGNvbmZpZyBaTDMwNzNYXG4gICA0Olx0XHR0cmlzdGF0ZSBcJiMzNDtNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRSBkZXZpY2VzXCYjMzQ7IGlmIENPTVBJTEVfVEVTVFxuICAgNTpcdFx0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IFBUUF8xNTg4X0NMT0NLXG4gICA2Olx0XHRzZWxlY3QgRFBMTFxuICAgNzpcdFx0c2VsZWN0IE5FVF9ERVZMSU5LXG4gICA4Olx0XHRzZWxlY3QgUkVHTUFQXG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIE1pY3JvY2hpcCBBenVyaXRlIGZhbWlseSBEUExML1BUUC9TeW5jRVxuICAxMTpcdFx0ICBkZXZpY2VzIHRoYXQgc3VwcG9ydCB1cCB0byA1IGluZGVwZW5kZW50IERQTEwgY2hhbm5lbHMsXG4gIDEyOlx0XHQgIDEwIGlucHV0IHBpbnMgYW5kIHVwIHRvIDIwIG91dHB1dCBwaW5zLlxuICAxMzpcdFxuICAxNDpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlXG4gIDE1Olx0XHQgIHdpbGwgYmUgY2FsbGVkIHpsMzA3M3guXG4gIDE2Olx0XG4gIDE3Olx0Y29uZmlnIFpMMzA3M1hfSTJDXG4gIDE4Olx0XHR0cmlzdGF0ZSBcJiMzNDtJMkMgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzXCYjMzQ7XG4gIDE5Olx0XHRkZXBlbmRzIG9uIEkyQyBcdTAwMjZcdTAwMjYgTkVUIFx1MDAyNlx1MDAyNiBQVFBfMTU4OF9DTE9DS1xuICAyMDpcdFx0c2VsZWN0IFJFR01BUF9JMkNcbiAgMjE6XHRcdHNlbGVjdCBaTDMwNzNYXG4gIDIyOlx0XHRoZWxwXG4gIDIzOlx0XHQgIFRoaXMgaXMgSTJDIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0VcbiAgMjQ6XHRcdCAgZGV2aWNlcy5cbiAgMjU6XHRcbiAgMjY6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXG4gIDI3Olx0XHQgIGJlIGNhbGxlZCB6bDMwNzN4X2kyYy5cbiAgMjg6XHRcbiAgMjk6XHRjb25maWcgWkwzMDczWF9TUElcbiAgMzA6XHRcdHRyaXN0YXRlIFwmIzM0O1NQSSBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcJiMzNDtcbiAgMzE6XHRcdGRlcGVuZHMgb24gTkVUIFx1MDAyNlx1MDAyNiBTUEkgXHUwMDI2XHUwMDI2IFBUUF8xNTg4X0NMT0NLXG4gIDMyOlx0XHRzZWxlY3QgUkVHTUFQX1NQSVxuICAzMzpcdFx0c2VsZWN0IFpMMzA3M1hcbiAgMzQ6XHRcdGhlbHBcbiAgMzU6XHRcdCAgVGhpcyBpcyBTUEkgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRVxuICAzNjpcdFx0ICBkZXZpY2VzLlxuICAzNzpcdFxuICAzODpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcbiAgMzk6XHRcdCAgYmUgY2FsbGVkIHpsMzA3M3hfc3BpLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3OTA5CgkJCQkJCQlvdXRwdXQ6IDQxOQoJCQkJCQkJdGhvdWdodHM6IDU0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBaTDMwNzNYIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBoYW5kbGUgb24gdGhpcyBwYXRjaC4gSSYjMzk7bSBzZWVpbmcgY29uZmlndXJhdGlvbnMgZm9yIGBaTDMwNzNYYCwgYFpMMzA3M1hfSTJDYCwgYW5kIGBaTDMwNzNYX1NQSWAuIFJpZ2h0IGF3YXksIHRoZSBkZXBlbmRlbmNpZXMganVtcCBvdXQ6IGBORVRgLCBgUFRQXzE1ODhfQ0xPQ0tgLCBgSTJDYCwgYFNQSWAsIGBEUExMYCwgYE5FVF9ERVZMSU5LYCwgYW5kIGBSRUdNQVBgLiBCYXNlZCBvbiB0aGlzLCBJIG5lZWQgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBgWkwzMDczWF9JMkNgLCBgWkwzMDczWF9TUElgLCB0aGUgUFRQIGNsb2NrIGZ1bmN0aW9uYWxpdHkgKGBQVFBfMTU4OF9DTE9DS2ApLCB0aGUgRFBMTCBmdW5jdGlvbmFsaXR5IChgRFBMTGApLCBhbmQsIG9mIGNvdXJzZSwgdGhlIHVuZGVybHlpbmcgYEkyQ2AgYW5kIGBTUElgIHByb3RvY29scy4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUga2V5IGZ1bmN0aW9ucy4gSSYjMzk7dmUgY29tcGlsZWQgYSBsaXN0IHRoYXQgSSB3YW50IHRvIGtlZXAgaW4gbWluZCwgYW5kIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2Ugb2YgZWFjaDoKCiogICBgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0YAoqICAgYHpsMzA3M3hfY2hhbl90b2RfcmVhZGAKKiAgIGB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlYAoqICAgYHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0YAoqICAgYHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0YAoqICAgYHpsMzA3M3hfY2hhbl90aWVfd3JpdGVgCiogICBgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXBgCiogICBgemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0YAoqICAgYHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0YAoqICAgYHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwYAoqICAgYHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZWAKKiAgIGB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmVgCiogICBgemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZWAKKiAgIGB6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlYAoKV2FpdCBhIG1pbnV0ZSwgYHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwYCBpcyBtYXJrZWQgYXMgYHN0YXRpY2AsIGJ1dCBpdCYjMzk7cyBub3QgYW4gQVBJIGVudHJ5cG9pbnQuIFRoYXQgc2FpZCwgaXQmIzM5O3MgY2FsbGVkIGJ5IGB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVgLiBJdCYjMzk7cyBmaW5lIHRvIGluY2x1ZGUgaXQgaGVyZSwgYXMgaXQmIzM5O3MgcGFydCBvZiB0aGUgZmxvdy4KClRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLCBsZXQmIzM5O3MgZG91YmxlIGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciBuZXcgZnVuY3Rpb25zOgoKKiAgIGB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyYAoqICAgYHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlcmAKCkFscmlnaHQsIEkmIzM5O20gY29uZmlkZW50IG5vdy4gVGhpcyBwYXRjaCBpcyAqZGVmaW5pdGVseSogd29ydGggZnV6emluZy4gVGhlIG1haW4gdGFrZWF3YXkgaXMgdGhlIGFkZGl0aW9uIG9mIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBkcml2ZXIuIFRoaXMgaW50cm9kdWNlcyBuZXcgaW9jdGxzIHRoYXQgd2lsbCBiZSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBgL2Rldi9wdHBYYC4gVGhpcyBpcyB3aGVyZSBJIGNhbiBzdGFydCBsb29raW5nIGZvciB2dWxuZXJhYmlsaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaTDMwNzNYJiMzNDssCiAgICAmIzM0O1pMMzA3M1hfSTJDJiMzNDssCiAgICAmIzM0O1pMMzA3M1hfU1BJJiMzNDssCiAgICAmIzM0O1BUUF8xNTg4X0NMT0NLJiMzNDssCiAgICAmIzM0O0RQTEwmIzM0OywKICAgICYjMzQ7STJDJiMzNDssCiAgICAmIzM0O1NQSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3psMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fdG9kX3JlYWQmIzM0OywKICAgICYjMzQ7emwzMDczeF9jaGFuX3RvZF93cml0ZSYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fdGllX3dyaXRlJiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl9waGFzZV9zdGVwJiMzNDssCiAgICAmIzM0O3psMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUmIzM0OywKICAgICYjMzQ7emwzMDczeF9kcGxsX3B0cF9hZGpmaW5lJiMzNDssCiAgICAmIzM0O3psMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2UmIzM0OywKICAgICYjMzQ7emwzMDczeF9kcGxsX3B0cF9nZXRtYXhwaGFzZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciAoemwzMDczeCkuIFRoaXMgZXhwb3NlcyBuZXcgZnVuY3Rpb25hbGl0eSB0byB1c2Vyc3BhY2UgdmlhIHRoZSBQVFAgc3Vic3lzdGVtIChlLmcuLCAvZGV2L3B0cFggaW9jdGxzKS4gVGhlIGRyaXZlciBpcyBhbiBJMkMvU1BJIGRldmljZSBkcml2ZXIsIHdoaWNoIGNhbiBiZSBpbnN0YW50aWF0ZWQgYW5kIGZ1enplZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaTDMwNzNYJiMzNDssCiAgICAmIzM0O1pMMzA3M1hfSTJDJiMzNDssCiAgICAmIzM0O1pMMzA3M1hfU1BJJiMzNDssCiAgICAmIzM0O1BUUF8xNTg4X0NMT0NLJiMzNDssCiAgICAmIzM0O0RQTEwmIzM0OywKICAgICYjMzQ7STJDJiMzNDssCiAgICAmIzM0O1NQSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3psMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fdG9kX3JlYWQmIzM0OywKICAgICYjMzQ7emwzMDczeF9jaGFuX3RvZF93cml0ZSYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fdGllX3dyaXRlJiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl9waGFzZV9zdGVwJiMzNDssCiAgICAmIzM0O3psMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUmIzM0OywKICAgICYjMzQ7emwzMDczeF9kcGxsX3B0cF9hZGpmaW5lJiMzNDssCiAgICAmIzM0O3psMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2UmIzM0OywKICAgICYjMzQ7emwzMDczeF9kcGxsX3B0cF9nZXRtYXhwaGFzZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciAoemwzMDczeCkuIFRoaXMgZXhwb3NlcyBuZXcgZnVuY3Rpb25hbGl0eSB0byB1c2Vyc3BhY2UgdmlhIHRoZSBQVFAgc3Vic3lzdGVtIChlLmcuLCAvZGV2L3B0cFggaW9jdGxzKS4gVGhlIGRyaXZlciBpcyBhbiBJMkMvU1BJIGRldmljZSBkcml2ZXIsIHdoaWNoIGNhbiBiZSBpbnN0YW50aWF0ZWQgYW5kIGZ1enplZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODo0MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjQxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgUFRQIGNsb2NrIHN1cHBvcnQgdG8gdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyLiBJdCBpbnRyb2R1Y2VzIGZ1bmN0aW9ucyB0byByZWFkL3dyaXRlIFRpbWUgb2YgRGF5IChUb0QpIHJlZ2lzdGVycywgYWRqdXN0IHBoYXNlLCBhZGp1c3QgZnJlcXVlbmN5LCBhbmQgcmVnaXN0ZXJzIGEgUFRQIGNsb2NrIGRldmljZSB1c2luZyBgcHRwX2Nsb2NrX3JlZ2lzdGVyYC4gQWxsIG5ldyB2YXJpYWJsZXMgYW5kIHN0cnVjdHVyZXMgKHN1Y2ggYXMgYHN0cnVjdCB0aW1lc3BlYzY0YCwgYHN5bnRoX21hc2tgLCBhbmQgYHN0cnVjdCBwdHBfY2xvY2tfaW5mb2ApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIG9yIHBhc3NlZCB0byBzdGFuZGFyZCBrZXJuZWwgQVBJcyB0aGF0IGhhbmRsZSBpbml0aWFsaXphdGlvbi4gVGhlcmUgYXJlIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgaXMgdGhlcmUgYW55IGNvbnRyb2wgZmxvdyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyAobGlrZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDAxMjk4NWQzMTAxYWNkY2EwN2JhOTBiNTVmYTQxZGZlNjZkYWRlN2YKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAxNCAwODo0MTowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWcgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnCmluZGV4IDViYmNhMTQwMDU4MTMuLmRhMTczMWFjZTE1ZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZwpAQCAtMiw3ICYjNDM7Miw3IEBACiAKIGNvbmZpZyBaTDMwNzNYCiAJdHJpc3RhdGUgJiMzNDtNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRSBkZXZpY2VzJiMzNDsgaWYgQ09NUElMRV9URVNUCi0JZGVwZW5kcyBvbiBORVQKJiM0MzsJZGVwZW5kcyBvbiBORVQgJmFtcDsmYW1wOyBQVFBfMTU4OF9DTE9DSwogCXNlbGVjdCBEUExMCiAJc2VsZWN0IE5FVF9ERVZMSU5LCiAJc2VsZWN0IFJFR01BUApAQCAtMTYsNyAmIzQzOzE2LDcgQEAgY29uZmlnIFpMMzA3M1gKIAogY29uZmlnIFpMMzA3M1hfSTJDCiAJdHJpc3RhdGUgJiMzNDtJMkMgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzJiMzNDsKLQlkZXBlbmRzIG9uIEkyQyAmYW1wOyZhbXA7IE5FVAomIzQzOwlkZXBlbmRzIG9uIEkyQyAmYW1wOyZhbXA7IE5FVCAmYW1wOyZhbXA7IFBUUF8xNTg4X0NMT0NLCiAJc2VsZWN0IFJFR01BUF9JMkMKIAlzZWxlY3QgWkwzMDczWAogCWhlbHAKQEAgLTI4LDcgJiM0MzsyOCw3IEBAIGNvbmZpZyBaTDMwNzNYX0kyQwogCiBjb25maWcgWkwzMDczWF9TUEkKIAl0cmlzdGF0ZSAmIzM0O1NQSSBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXMmIzM0OwotCWRlcGVuZHMgb24gTkVUICZhbXA7JmFtcDsgU1BJCiYjNDM7CWRlcGVuZHMgb24gTkVUICZhbXA7JmFtcDsgU1BJICZhbXA7JmFtcDsgUFRQXzE1ODhfQ0xPQ0sKIAlzZWxlY3QgUkVHTUFQX1NQSQogCXNlbGVjdCBaTDMwNzNYCiAJaGVscApkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jCmluZGV4IDRlYzJjZjUzZGFkNDYuLmJhNGQzMDNkNDFiNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMKQEAgLTMsNiAmIzQzOzMsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2NsZWFudXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZWxheS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2Rldl9wcmludGsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3N0cmluZy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiAKQEAgLTE2Miw4ICYjNDM7MTYzLDggQEAgaW50IHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpCiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlCiAgKiBAaW5kZXg6IERQTEwgY2hhbm5lbCBpbmRleCB0byBmZXRjaCBzdGF0ZSBmb3IKICAqCi0gKiBSZWFkcyB0aGUgbW9kZV9yZWZzZWwgcmVnaXN0ZXIgYW5kIHJlZmVyZW5jZSBwcmlvcml0eSByZWdpc3RlcnMgZm9yCi0gKiB0aGUgZ2l2ZW4gRFBMTCBjaGFubmVsIGFuZCBzdG9yZXMgdGhlIHJhdyB2YWx1ZXMgZm9yIGxhdGVyIHVzZS4KJiM0MzsgKiBSZWFkcyB0aGUgbW9kZV9yZWZzZWwsIHN0YXR1cyBhbmQgcmVmZXJlbmNlIHByaW9yaXR5IHJlZ2lzdGVycyBmb3IKJiM0MzsgKiB0aGUgZ2l2ZW4gRFBMTCBjaGFubmVsIGFuZCBzdG9yZXMgdGhlIHZhbHVlcyBmb3IgbGF0ZXIgdXNlLgogICoKICAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgogICovCkBAIC0yMzQsNiAmIzQzOzIzNSwzMjIgQEAgY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqemwzMDczeF9jaGFuX3N0YXRlX2dldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LAogCXJldHVybiAmYW1wO3psZGV2LSZndDtjaGFuW2luZGV4XTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCAtIHdhaXQgZm9yIFRvRCBzZW1hcGhvcmUgdG8gY2xlYXIKJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleAomIzQzOyAqCiYjNDM7ICogQ2hlY2tzIHRoZSBUb0QgY29udHJvbCByZWdpc3RlciBzZW1hcGhvcmUgYml0LiBJZiBjbGVhciwgcmV0dXJucwomIzQzOyAqIGltbWVkaWF0ZWx5LiBPdGhlcndpc2UgcG9sbHMgdW50aWwgdGhlIGJpdCBpcyBjbGVhcmVkIGJ5IHRoZSBkZXZpY2UuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46CiYjNDM7ICogKiAwCQkJLSBzdWNjZXNzCiYjNDM7ICogKiAlLUVCVVNZCQktIHRpbWVvdXQKJiM0MzsgKiAqICUtRU9QTk9UU1VQUAktIHVua25vd24gY29tbWFuZCBkZXRlY3RlZAomIzQzOyAqICogbmVnYXRpdmUJCS0gb3RoZXIgZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IHRpbWVvdXQ7CiYjNDM7CXU4IHRvZF9jdHJsOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF9yZWFkX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksICZhbXA7dG9kX2N0cmwpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CWlmICghKHRvZF9jdHJsICZhbXA7IFpMX0RQTExfVE9EX0NUUkxfU0VNKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlzd2l0Y2ggKEZJRUxEX0dFVChaTF9EUExMX1RPRF9DVFJMX0NNRCwgdG9kX2N0cmwpKSB7CiYjNDM7CWNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFo6CiYjNDM7CQl0aW1lb3V0ID0gWkxfUE9MTF9UT0RfV1JfVElNRU9VVF9VUzsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX0NVUlJFTlQ6CiYjNDM7CWNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFo6CiYjNDM7CQl0aW1lb3V0ID0gWkxfUE9MTF9UT0RfUkRfVElNRU9VVF9VUzsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSwKJiM0MzsJCQkJICBaTF9EUExMX1RPRF9DVFJMX1NFTSwgdGltZW91dCk7CiYjNDM7CiYjNDM7CXJldHVybiByYyA9PSAtRVRJTUVET1VUID8gLUVCVVNZIDogcmM7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl90b2RfY3RybCAtIGlzc3VlIFRvRCBjb21tYW5kCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAY21kOiBUb0QgY29tbWFuZCB0byBleGVjdXRlCiYjNDM7ICoKJiM0MzsgKiBXcml0ZXMgdGhlIHNlbWFwaG9yZSBhbmQgY29tbWFuZCB0byBkcGxsX3RvZF9jdHJsLiBUaGUgY2FsbGVyIG11c3QKJiM0MzsgKiBlbnN1cmUgdGhlIGRldmljZSBpcyByZWFkeSAoc2VtYXBob3JlIGNsZWFyKSBiZWZvcmUgY2FsbGluZyBhbmQKJiM0MzsgKiBtdXN0IHdhaXQgZm9yIGNvbXBsZXRpb24gaWYgbmVlZGVkLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHU4IGNtZCkKJiM0Mzt7CiYjNDM7CXJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksCiYjNDM7CQkJCVpMX0RQTExfVE9EX0NUUkxfU0VNIHwgY21kKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9yZWFkIC0gcmVhZCBUb0QgcmVnaXN0ZXJzIGFmdGVyIGlzc3VpbmcgYSBjb21tYW5kCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAbmV4dF9oejogaWYgdHJ1ZSwgcmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIejsgb3RoZXJ3aXNlIHJlYWQgY3VycmVudAomIzQzOyAqIEB0czogdGltZXNwZWMgdG8gc3RvcmUgdGhlIHJlc3VsdAomIzQzOyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nCiYjNDM7ICoKJiM0MzsgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cywKJiM0MzsJCQkgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKQomIzQzO3sKJiM0MzsJdTMyIG5zZWM7CiYjNDM7CXU2NCBzZWM7CiYjNDM7CXU4IGNtZDsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlpZiAobmV4dF9oeikKJiM0MzsJCWNtZCA9IFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaOwomIzQzOwllbHNlCiYjNDM7CQljbWQgPSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UOwomIzQzOwomIzQzOwkvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVG9EIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqLwomIzQzOwlyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXB0cF9yZWFkX3N5c3RlbV9wcmV0cyhzdHMpOwomIzQzOwlyYyA9IHpsMzA3M3hfY2hhbl90b2RfY3RybCh6bGRldiwgY2gsIGNtZCk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwlwdHBfcmVhZF9zeXN0ZW1fcG9zdHRzKHN0cyk7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF9yZWFkX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksICZhbXA7c2VjKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwkvKiBIVyBuYW5vc2Vjb25kcyBhcmUgYWx3YXlzIGluIFswLCBOU0VDX1BFUl9TRUMpIHJhbmdlICovCiYjNDM7CXJjID0gemwzMDczeF9yZWFkX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgJmFtcDtuc2VjKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwl0cy0mZ3Q7dHZfc2VjID0gc2VjOwomIzQzOwl0cy0mZ3Q7dHZfbnNlYyA9IG5zZWM7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlIC0gd3JpdGUgVG9EIHJlZ2lzdGVycyBhbmQgdHJpZ2dlciAxIEh6IHVwZGF0ZQomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQHRzOiB0aW1lIHRvIHNldAomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS4KJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cykKJiM0Mzt7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi8KJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfU0VDKGNoKSwgdHMudHZfc2VjKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCB0cy50dl9uc2VjKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9jdHJsKHpsZGV2LCBjaCwKJiM0MzsJCQkJICAgICBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWik7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0IC0gYXRvbWljIFRvRCByZWFkLW1vZGlmeS13cml0ZSB3aXRoIHJvbGxvdmVyIGd1YXJkCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCB0byBhcHBseQomIzQzOyAqCiYjNDM7ICogUmVhZHMgdGhlIG5leHQtSHogVG9EIGFuZCBjdXJyZW50IFRvRCwgdGhlbiBjaGVja3Mgd2hldGhlciBlbm91Z2ggdGltZQomIzQzOyAqIHJlbWFpbnMgYmVmb3JlIHRoZSBuZXh0IDEgSHogcm9sbG92ZXIgdG8gc2FmZWx5IGNvbXBsZXRlIHRoZSB3cml0ZS4KJiM0MzsgKiBSZS1yZWFkcyBpZiB0aGUgMSBIeiB0aWNrIGNyb3NzZWQgYmV0d2VlbiB0aGUgdHdvIHJlYWRzIG9yIGlmIGxlc3MKJiM0MzsgKiB0aGFuIDIwIG1zIHJlbWFpbnMgYmVmb3JlIHRoZSBuZXh0IHJvbGxvdmVyLiBBcHBsaWVzIEBkZWx0YSBhbmQgd3JpdGVzCiYjNDM7ICogdGhlIHJlc3VsdCBiYWNrLgomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS4KJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKQomIzQzO3sKJiM0MzsjZGVmaW5lIFpMX1RPRF9NQVhfUkVUUklFUwkyMAomIzQzOwlzdGF0aWMgY29uc3QgbG9uZyB0aHJlc2hvbGRfbnMgPSAyMCAqIE5TRUNfUEVSX01TRUM7CiYjNDM7CXN0cnVjdCB0aW1lc3BlYzY0IHRzX25leHQsIHRzX2N1ciwgZGlmZjsKJiM0MzsJaW50IHJjLCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgWkxfVE9EX01BWF9SRVRSSUVTOyBpJiM0MzsmIzQzOykgewomIzQzOwkJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCB0cnVlLCAmYW1wO3RzX25leHQsIE5VTEwpOwomIzQzOwkJaWYgKHJjKQomIzQzOwkJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJCXJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgZmFsc2UsICZhbXA7dHNfY3VyLCBOVUxMKTsKJiM0MzsJCWlmIChyYykKJiM0MzsJCQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CQkvKiBFbnN1cmUgdGhlIDEgSHogdGljayBkaWQgbm90IGNyb3NzIGJldHdlZW4gdGhlIHR3byByZWFkcwomIzQzOwkJICogYW5kIHRoYXQgZW5vdWdoIG1hcmdpbiByZW1haW5zIHRvIGNvbXBsZXRlIHRoZSB3cml0ZS4KJiM0MzsJCSAqLwomIzQzOwkJZGlmZiA9IHRpbWVzcGVjNjRfc3ViKHRzX25leHQsIHRzX2N1cik7CiYjNDM7CQlpZiAoZGlmZi50dl9zZWMgJmd0OyAwIHx8CiYjNDM7CQkgICAgKCFkaWZmLnR2X3NlYyAmYW1wOyZhbXA7IGRpZmYudHZfbnNlYyAmZ3Q7PSB0aHJlc2hvbGRfbnMpKQomIzQzOwkJCWJyZWFrOwomIzQzOwl9CiYjNDM7CWlmIChpID09IFpMX1RPRF9NQVhfUkVUUklFUykgewomIzQzOwkJZGV2X3dhcm4oemxkZXYtJmd0O2RldiwKJiM0MzsJCQkgJiMzNDtEUExMJXUgVG9EIGFkanVzdCBmYWlsZWQgdG8gZ2V0IHN0YWJsZSBtYXJnaW5cbiYjMzQ7LAomIzQzOwkJCSBjaCk7CiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEFwcGx5IGRlbHRhIHRvIHRoZSBuZXh0LUh6IFRvRCAqLwomIzQzOwl0c19uZXh0ID0gdGltZXNwZWM2NF9hZGQodHNfbmV4dCwgZGVsdGEpOwomIzQzOwlpZiAoIXRpbWVzcGVjNjRfdmFsaWRfc2V0dG9kKCZhbXA7dHNfbmV4dCkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkZXYsIGNoLCB0c19uZXh0KTsKJiM0MzsjdW5kZWYgWkxfVE9EX01BWF9SRVRSSUVTCiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0IC0gd3JpdGUgZGVsdGEgZnJlcXVlbmN5IG9mZnNldCB0byBoYXJkd2FyZQomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQG9mZnNldDogZnJlcXVlbmN5IG9mZnNldCBpbiAyXi00OCBzdGVwcwomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3QgaG9sZCB0aGUgcGVyLURQTEwgbG9jay4KJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBvZmZzZXQpCiYjNDM7ewomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX0RGX09GRlNFVChjaCksIG9mZnNldCk7CiYjNDM7CWlmICghcmMpCiYjNDM7CQl6bGRldi0mZ3Q7Y2hhbltjaF0uZGZfb2Zmc2V0ID0gb2Zmc2V0OwomIzQzOwomIzQzOwlyZXR1cm4gcmM7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl90aWVfd3JpdGUgLSBhZGp1c3QgRFBMTCBwaGFzZSB1c2luZyBUSUUgd3JpdGUKJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleAomIzQzOyAqIEBkZWx0YV9uczogcGhhc2UgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcyAobXVzdCBiZSBpbiAoLTFzLCAxcykpCiYjNDM7ICoKJiM0MzsgKiBDb252ZXJ0cyBuYW5vc2Vjb25kcyB0byBUSUUgdW5pdHMgKDAuMDEgcHMpIGFuZCB3cml0ZXMgVElFIGRhdGEKJiM0MzsgKiB0byB0aGUgc3BlY2lmaWVkIGNoYW5uZWwuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKQomIzQzO3sKJiM0MzsJczY0IHRpZV9kYXRhOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3psZGV2LSZndDt0aWVfbG9jayk7CiYjNDM7CiYjNDM7CS8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUSUUgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCiYjNDM7CXJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLAomIzQzOwkJCQkgIFpMX0RQTExfVElFX0NUUkxfT1AsCiYjNDM7CQkJCSAgWkxfUE9MTF9USUVfV1JfVElNRU9VVF9VUyk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJLyogQ29udmVydCBucyB0byBUSUUgdW5pdHMgKDAuMDEgcHMgPSAxMF4tMTQgcykgKi8KJiM0MzsJdGllX2RhdGEgPSBkZWx0YV9ucyAqIDEwMDAwMExMOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfREFUQShjaCksIHRpZV9kYXRhKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0ssIEJJVChjaCkpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTCwKJiM0MzsJCQkJWkxfRFBMTF9USUVfQ1RSTF9PUF9XUik7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwIC0gZXhlY3V0ZSBvbmUgb3V0cHV0IHBoYXNlIHN0ZXAgb3BlcmF0aW9uCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAb3V0X21hc2s6IGJpdG1hc2sgb2Ygb3V0cHV0cyB0byBzdGVwCiYjNDM7ICogQHN0ZXBfY3ljbGVzOiBwaGFzZSBzdGVwIGluIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcwomIzQzOyAqIEB0b2Rfc3RlcDogYWxzbyBzdGVwIHRoZSBUb0QgY291bnRlcgomIzQzOyAqCiYjNDM7ICogQWxsIG1hc2tlZCBvdXRwdXRzIG11c3QgdXNlIHN5bnRoZXNpemVycyBvZiB0aGUgc2FtZSBmcmVxdWVuY3kgc2luY2UKJiM0MzsgKiB0aGUgc3RlcCB2YWx1ZSBpcyBpbiBzeW50aGVzaXplciBjbG9jayBjeWNsZXMuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLAomIzQzOwkJCSAgICBib29sIHRvZF9zdGVwKQomIzQzO3sKJiM0MzsJdTggY3RybDsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRldi0mZ3Q7cGhhc2Vfc3RlcF9sb2NrKTsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgYW55IHByZXZpb3VzIHBoYXNlIHN0ZXAgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCiYjNDM7CXJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLAomIzQzOwkJCQkgIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AsCiYjNDM7CQkJCSAgWkxfUE9MTF9QSEFTRV9TVEVQX1RJTUVPVVRfVVMpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBLAomIzQzOwkJCSAgICAgICBzdGVwX2N5Y2xlcyk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3dyaXRlX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX01BU0ssIG91dF9tYXNrKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9OVU1CRVIsIDEpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CWN0cmwgPSBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfRFBMTCwgY2gpIHwKJiM0MzsJICAgICAgIEZJRUxEX1BSRVAoWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCwKJiM0MzsJCQkgIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfV1JJVEUpOwomIzQzOwlpZiAodG9kX3N0ZXApCiYjNDM7CQljdHJsIHw9IFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVA7CiYjNDM7CiYjNDM7CXJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTCwgY3RybCk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0IC0gY29tbWl0IERQTEwgY2hhbm5lbCBzdGF0ZSBjaGFuZ2VzIHRvIGhhcmR3YXJlCiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgKaW5kZXggZGM5YzZkOTViZGVlNy4uOTljM2I3MDg4ZjY3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaApAQCAtNSwxMCAmIzQzOzUsMTIgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3RkZGVmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3RpbWU2NC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7cmVncy5oJiMzNDsKIAomIzQzO3N0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcDsKIHN0cnVjdCB6bDMwNzN4X2RldjsKIAogLyoqCkBAIC00Miw2ICYjNDM7NDQsMjEgQEAgaW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgsCiBpbnQgemwzMDczeF9jaGFuX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7CiBpbnQgemwzMDczeF9jaGFuX25jb19tb2RlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7CiAKJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKTsKJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLAomIzQzOwkJCSAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsCiYjNDM7CQkJICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cyk7CiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICAgc3RydWN0IHRpbWVzcGVjNjQgdHMpOwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpOwomIzQzO2ludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsIGJvb2wgdG9kX3N0ZXApOwomIzQzOwomIzQzO2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldCk7CiYjNDM7CiYjNDM7aW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucyk7CiYjNDM7CiAvKioKICAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfZ2V0IC0gZ2V0IGNhY2hlZCBkZl9vZmZzZXQgdnMgdHJhY2tlZCByZWZlcmVuY2UKICAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGUKQEAgLTIwMCw2ICYjNDM7MjE3LDIxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6bDMwNzN4X2NoYW5fbW9kZV9pc19yZWZsb2NrKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pCiAJcmV0dXJuIHpsMzA3M3hfY2hhbl9tb2RlX2dldChjaGFuKSA9PSBaTF9EUExMX01PREVfUkVGU0VMX01PREVfUkVGTE9DSzsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZSAtIGNoZWNrIGlmIGNoYW5uZWwgbW9kZSBzdXBwb3J0cyBUSUUgd3JpdGUKJiM0MzsgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlCiYjNDM7ICoKJiM0MzsgKiBUSUUgd3JpdGUgaXMgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMgcmVnYXJkbGVzcyBvZiBsb2NrIHN0YXRlLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIFRJRSB3cml0ZSBpcyBzdXBwb3J0ZWQsIGZhbHNlIG90aGVyd2lzZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbAomIzQzO3psMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKQomIzQzO3sKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl9tb2RlX2lzX2F1dG8oY2hhbikgfHwKJiM0MzsJCXpsMzA3M3hfY2hhbl9tb2RlX2lzX3JlZmxvY2soY2hhbik7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB6bDMwNzN4X2NoYW5faXNfaG9fcmVhZHkgLSBjaGVjayBpZiBob2xkb3ZlciBpcyByZWFkeQogICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jCmluZGV4IDViMmQ3N2YyYzIyODguLjIzMGRmMDhlMjdjZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMKQEAgLTMyMiw3ICYjNDM7MzIyLDcgQEAgaW50IHpsMzA3M3hfd3JpdGVfdTQ4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsIHU2NCB2YWwpCiBpbnQgemwzMDczeF9wb2xsX3plcm9fdTgoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IHJlZywKIAkJCSB1OCBtYXNrLCB1bnNpZ25lZCBpbnQgdGltZW91dF91cykKIHsKLSNkZWZpbmUgWkxfUE9MTF9TTEVFUF9VUyAxMAomIzQzOwl1bnNpZ25lZCBpbnQgc2xlZXBfdXMgPSB0aW1lb3V0X3VzIC8gNTA7CiAJdW5zaWduZWQgaW50IHZhbDsKIAogCS8qIENoZWNrIHRoZSByZWdpc3RlciBpcyA4Yml0ICovCkBAIC0zMzYsNyAmIzQzOzMzNiw3IEBAIGludCB6bDMwNzN4X3BvbGxfemVyb191OChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLAogCXJlZyA9IFpMX1JFR19BRERSKHJlZykgJiM0MzsgWkxfUkFOR0VfT0ZGU0VUOwogCiAJcmV0dXJuIHJlZ21hcF9yZWFkX3BvbGxfdGltZW91dCh6bGRldi0mZ3Q7cmVnbWFwLCByZWcsIHZhbCwgISh2YWwgJmFtcDsgbWFzayksCi0JCQkJCVpMX1BPTExfU0xFRVBfVVMsIHRpbWVvdXRfdXMpOwomIzQzOwkJCQkJc2xlZXBfdXMsIHRpbWVvdXRfdXMpOwogfQogCiBpbnQgemwzMDczeF9tYl9vcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgb3BfcmVnLCB1OCBvcF92YWwsCkBAIC01MTEsNiAmIzQzOzUxMSwxMSBAQCB6bDMwNzN4X2Rldl9zdGF0ZV9mZXRjaChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KQogCWludCByYzsKIAl1OCBpOwogCiYjNDM7CXJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTSywKJiM0MzsJCQkgICAgICAmYW1wO3psZGV2LSZndDtvdXRfc3RlcF90aW1lX21hc2spOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiAJZm9yIChpID0gMDsgaSAmbHQ7IFpMMzA3M1hfTlVNX1JFRlM7IGkmIzQzOyYjNDM7KSB7CiAJCXJjID0gemwzMDczeF9yZWZfc3RhdGVfZmV0Y2goemxkZXYsIGkpOwogCQlpZiAocmMpIHsKQEAgLTEwMzQsNiAmIzQzOzEwMzksMTQgQEAgaW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpCiAJICogYW5kL29yIHBvbGxzIGFyZSByZXF1aXJlZCB0byBiZSBkb25lIGF0b21pY2FsbHkuCiAJICovCiAJcmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtJmd0O2RldiwgJmFtcDt6bGRldi0mZ3Q7bXVsdGlvcF9sb2NrKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtJmd0O2RldiwgcmMsCiYjNDM7CQkJCSAgICAgJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxuJiMzNDspOwomIzQzOwlyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi0mZ3Q7ZGV2LCAmYW1wO3psZGV2LSZndDtwaGFzZV9zdGVwX2xvY2spOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi0mZ3Q7ZGV2LCByYywKJiM0MzsJCQkJICAgICAmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XG4mIzM0Oyk7CiYjNDM7CXJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LSZndDtkZXYsICZhbXA7emxkZXYtJmd0O3RpZV9sb2NrKTsKIAlpZiAocmMpCiAJCXJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LSZndDtkZXYsIHJjLAogCQkJCSAgICAgJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxuJiMzNDspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oCmluZGV4IDc4ZGMyMDhmM2VlYTIuLjY3YzEwZTI1OTUxMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmgKQEAgLTI2LDYgJiM0MzsyNiwxMCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsOwogI2RlZmluZSBaTF9QT0xMX0hXUkVHX1RJTUVPVVRfVVMJKDUwICogVVNFQ19QRVJfTVNFQykKICNkZWZpbmUgWkxfUE9MTF9NQl9USU1FT1VUX1VTCQkoMzAgKiBVU0VDX1BFUl9NU0VDKQogI2RlZmluZSBaTF9QT0xMX1BIQVNFX0VSUl9USU1FT1VUX1VTCSg1MCAqIFVTRUNfUEVSX01TRUMpCiYjNDM7I2RlZmluZSBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VUwkoMzAwMCAqIFVTRUNfUEVSX01TRUMpCiYjNDM7I2RlZmluZSBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTCSgxMDAwICogVVNFQ19QRVJfTVNFQykKJiM0MzsjZGVmaW5lIFpMX1BPTExfVE9EX1JEX1RJTUVPVVRfVVMJKDMwICogVVNFQ19QRVJfTVNFQykKJiM0MzsjZGVmaW5lIFpMX1BPTExfVE9EX1dSX1RJTUVPVVRfVVMJKDEwMDAgKiBVU0VDX1BFUl9NU0VDKQogCiBlbnVtIHpsMzA3M3hfZmxhZ3MgewogCVpMMzA3M1hfRkxBR19SRUZfUEhBU0VfQ09NUF8zMl9CSVQsCkBAIC01NSw2ICYjNDM7NTksOCBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8gewogICogQHJlZ21hcDogcmVnbWFwIHRvIGFjY2VzcyBkZXZpY2UgcmVnaXN0ZXJzCiAgKiBAaW5mbzogZGV0ZWN0ZWQgY2hpcCBpbmZvCiAgKiBAbXVsdGlvcF9sb2NrOiB0byBzZXJpYWxpemUgbXVsdGlwbGUgcmVnaXN0ZXIgb3BlcmF0aW9ucwomIzQzOyAqIEB0aWVfbG9jazogdG8gc2VyaWFsaXplIFRJRSB3cml0ZSBvcGVyYXRpb25zCiYjNDM7ICogQHBoYXNlX3N0ZXBfbG9jazogdG8gc2VyaWFsaXplIG91dHB1dCBwaGFzZSBzdGVwIG9wZXJhdGlvbnMKICAqIEByZWY6IGFycmF5IG9mIGlucHV0IHJlZmVyZW5jZXMmIzM5OyBpbnZhcmlhbnRzCiAgKiBAb3V0OiBhcnJheSBvZiBvdXRzJiMzOTsgaW52YXJpYW50cwogICogQHN5bnRoOiBhcnJheSBvZiBzeW50aHMmIzM5OyBpbnZhcmlhbnRzCkBAIC02Myw2ICYjNDM7NjksNyBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8gewogICogQGt3b3JrZXI6IHRocmVhZCBmb3IgcGVyaW9kaWMgd29yawogICogQHdvcms6IHBlcmlvZGljIHdvcmsKICAqIEBjbG9ja19pZDogY2xvY2sgaWQgb2YgdGhlIGRldmljZQomIzQzOyAqIEBvdXRfc3RlcF90aW1lX21hc2s6IG91dHB1dCBzdGVwLXRpbWUgbWFzayAoZGV2aWNlLWdsb2JhbCkKICAqIEBwaGFzZV9hdmdfZmFjdG9yOiBwaGFzZSBvZmZzZXQgbWVhc3VyZW1lbnQgYXZlcmFnaW5nIGZhY3RvcgogICogQGZyZXFfbW9uaXRvcjogaXMgZnJlcXVlbmN5IG1vbml0b3IgZW5hYmxlZAogICovCkBAIC03MSw2ICYjNDM7NzgsOCBAQCBzdHJ1Y3QgemwzMDczeF9kZXYgewogCXN0cnVjdCByZWdtYXAJCQkqcmVnbWFwOwogCWNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mbwkqaW5mbzsKIAlzdHJ1Y3QgbXV0ZXgJCQltdWx0aW9wX2xvY2s7CiYjNDM7CXN0cnVjdCBtdXRleAkJCXRpZV9sb2NrOwomIzQzOwlzdHJ1Y3QgbXV0ZXgJCQlwaGFzZV9zdGVwX2xvY2s7CiAKIAkvKiBJbnZhcmlhbnRzICovCiAJc3RydWN0IHpsMzA3M3hfcmVmCXJlZltaTDMwNzNYX05VTV9SRUZTXTsKQEAgLTg3LDYgJiM0Mzs5Niw3IEBAIHN0cnVjdCB6bDMwNzN4X2RldiB7CiAKIAkvKiBQZXItY2hpcCBwYXJhbWV0ZXJzICovCiAJdTY0CQkJY2xvY2tfaWQ7CiYjNDM7CXUxNgkJCW91dF9zdGVwX3RpbWVfbWFzazsKIAl1OAkJCXBoYXNlX2F2Z19mYWN0b3I7CiAJYm9vbAkJCWZyZXFfbW9uaXRvcjsKIH07CkBAIC0zMDgsNiAmIzQzOzMxOCwxOSBAQCB6bDMwNzN4X2Rldl9vdXRfaXNfZW5hYmxlZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCkKIAlyZXR1cm4gemwzMDczeF9zeW50aF9pc19lbmFibGVkKHN5bnRoKSAmYW1wOyZhbXA7IHpsMzA3M3hfb3V0X2lzX2VuYWJsZWQob3V0KTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZGV2X291dF9pc19zdGVwcGVkIC0gY2hlY2sgaWYgb3V0cHV0IGlzIGluIHN0ZXAtdGltZSBtYXNrCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGluZGV4OiBvdXRwdXQgaW5kZXgKJiM0MzsgKgomIzQzOyAqIFJldHVybjogdHJ1ZSBpZiBvdXRwdXQgaXMgYWZmZWN0ZWQgYnkgc3RlcC10aW1lIG9wZXJhdGlvbnMKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wKJiM0Mzt6bDMwNzN4X2Rldl9vdXRfaXNfc3RlcHBlZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCkKJiM0Mzt7CiYjNDM7CXJldHVybiAhISh6bGRldi0mZ3Q7b3V0X3N0ZXBfdGltZV9tYXNrICZhbXA7IEJJVChpbmRleCkpOwomIzQzO30KJiM0MzsKIC8qKgogICogemwzMDczeF9kZXZfb3V0X2RwbGxfZ2V0IC0gZ2V0IERQTEwgSUQgdGhlIG91dHB1dCBpcyBkcml2ZW4gYnkKICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jCmluZGV4IDgzYmQzMDI3ZGJhYTEuLmYyZTEzNzQ3NWI0MGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMKQEAgLTIsNiAmIzQzOzIsNyBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvYml0cy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NsZWFudXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9idWcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jb250YWluZXJfb2YuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZXZfcHJpbnRrLmgmZ3Q7CkBAIC0xMyw2ICYjNDM7MTQsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L25ldGxpbmsuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wcm9wZXJ0eS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wdHBfY2xvY2tfa2VybmVsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NwcmludGYuaCZndDsKIApAQCAtMjMxMyw0NSAmIzQzOzIzMTUsMzg0IEBAIHpsMzA3M3hfZHBsbF9pbml0X2ZpbmVfcGhhc2VfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpCiAJcmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19TWU5USF9QSEFTRV9TSElGVF9DVFJMLCAweDAxKTsKIH0KIAomIzQzOy8qIE1heGltdW0gZnJlcXVlbmN5IGFkanVzdG1lbnQ6ICYjNDM7LTElIG9mIG5vbWluYWwgaW4gcHBiICovCiYjNDM7I2RlZmluZSBaTDMwNzNYX0RQTExfUFRQX01BWF9BREoJMTAwMDAwMDAKJiM0MzsKIC8qKgotICogemwzMDczeF9kcGxsX2FsbG9jIC0gYWxsb2NhdGUgRFBMTCBkZXZpY2UKLSAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQotICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0IC0gcmVhZCBjdXJyZW50IHRpbWUgZnJvbSBUb0QgY291bnRlcnMKJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm8KJiM0MzsgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIGN1cnJlbnQgdGltZQomIzQzOyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nCiAgKgotICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywKJiM0MzsJCQkJICAgICAgIHN0cnVjdCB0aW1lc3BlYzY0ICp0cywKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKQomIzQzO3sKJiM0MzsJc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsCiYjNDM7CQkJCQkJICAgcHRwX2luZm8pOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZHBsbC0mZ3Q7ZGV2LCB6bGRwbGwtJmd0O2lkLCBmYWxzZSwgdHMsIHN0cyk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0IC0gc2V0IFRvRCBjb3VudGVycyB0byBnaXZlbiB0aW1lCiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvCiYjNDM7ICogQHRzOiB0aW1lc3BlYyB3aXRoIHRpbWUgdG8gc2V0CiAgKgotICogUmV0dXJuOiBwb2ludGVyIHRvIERQTEwgZGV2aWNlIG9uIHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgb24gZXJyb3IKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKICAqLwotc3RydWN0IHpsMzA3M3hfZHBsbCAqCi16bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sCiYjNDM7CQkJCSAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cykKIHsKLQlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLAomIzQzOwkJCQkJCSAgIHB0cF9pbmZvKTsKIAotCXpsZHBsbCA9IGt6YWxsb2Nfb2JqKCp6bGRwbGwpOwotCWlmICghemxkcGxsKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7emxkcGxsLSZndDtsb2NrKTsKIAotCXpsZHBsbC0mZ3Q7ZGV2ID0gemxkZXY7Ci0JemxkcGxsLSZndDtpZCA9IGNoOwotCW11dGV4X2luaXQoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwotCUlOSVRfTElTVF9IRUFEKCZhbXA7emxkcGxsLSZndDtwaW5zKTsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkcGxsLSZndDtkZXYsIHpsZHBsbC0mZ3Q7aWQsICp0cyk7CiYjNDM7fQogCi0JcmV0dXJuIHpsZHBsbDsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCAtIGFkanVzdCBzdWItc2Vjb25kIHRpbWUgdmlhIHBoYXNlIHN0ZXAKJiM0MzsgKiBAemxkcGxsOiBEUExMIGNoYW5uZWwKJiM0MzsgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcyAobXVzdCBiZSB3aXRoaW4gKC1OU0VDX1BFUl9TRUMsCiYjNDM7ICogICAgICAgICBOU0VDX1BFUl9TRUMpKQomIzQzOyAqCiYjNDM7ICogVXNlcyB0aGUgb3V0cHV0IHBoYXNlIHN0ZXAgbWVjaGFuaXNtIHdpdGggdG9kX3N0ZXA9MSB0byBhZGp1c3QgYm90aAomIzQzOyAqIHRoZSBvdXRwdXQgY2xvY2sgcGhhc2UgYW5kIHRoZSBUb0QgY291bnRlciBzaW11bHRhbmVvdXNseS4gVGhpcyBrZWVwcwomIzQzOyAqIG91dHB1dHMgYW5kIFRvRCBjb2hlcmVudC4gT25seSB2YWxpZCBmb3IgTkNPLgomIzQzOyAqCiYjNDM7ICogT3V0cHV0cyBhcmUgZ3JvdXBlZCBieSBzeW50aGVzaXplciBzaW5jZSB0aGUgcGhhc2Ugc3RlcCB2YWx1ZSBpcyBpbgomIzQzOyAqIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcy4gVGhlIGZpcnN0IHN5bnRoIGdyb3VwIHdpdGggZW5hYmxlZCBvdXRwdXRzCiYjNDM7ICogdXNlcyB0b2Rfc3RlcCB0byBhZGp1c3QgYm90aCBvdXRwdXRzIGFuZCB0aGUgVG9EIGNvdW50ZXIuIFJlbWFpbmluZwomIzQzOyAqIGdyb3VwcyBzdGVwIG91dHB1dHMgb25seS4gSWYgbm8gc3ludGggaGFzIGVuYWJsZWQgb3V0cHV0cywgdGhlIFRvRAomIzQzOyAqIGNvdW50ZXIgaXMgc3RlcHBlZCBhbG9uZSB1c2luZyBhbiBlbXB0eSBvdXRwdXQgbWFzayAodGhlIEZXIHVzZXMKJiM0MzsgKiB0aGUgZmlyc3QgZW5hYmxlZCBzeW50aCYjMzk7cyBwZXJpb2QgZm9yIHRoZSBjb252ZXJzaW9uKS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjoKJiM0MzsgKiAqICUwCQkJLSBzdWNjZXNzIChvciBwYXJ0aWFsIHN1Y2Nlc3MgaWYgYSBsYXRlciBzeW50aCBncm91cAomIzQzOyAqCQkJICBmYWlsZWQgYWZ0ZXIgdGhlIGZpcnN0IHdhcyBhbHJlYWR5IHN0ZXBwZWQpCiYjNDM7ICogKiAlLUVPUE5PVFNVUFAJLSBubyBzeW50aHMgYXZhaWxhYmxlCiYjNDM7ICogKiBuZWdhdGl2ZQkJLSBlcnJvcgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLAomIzQzOwkJCQkJICAgICAgIHM2NCBkZWx0YSkKJiM0Mzt7CiYjNDM7CXUxNiBzeW50aF9tYXNrW1pMMzA3M1hfTlVNX1NZTlRIU10gPSB7fTsKJiM0MzsJc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC0mZ3Q7ZGV2OwomIzQzOwljb25zdCBzdHJ1Y3QgemwzMDczeF9zeW50aCAqc3ludGg7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW47CiYjNDM7CXUzMiBmaXJzdF9zeW50aF9mcmVxID0gMDsKJiM0MzsJYm9vbCB0b2Rfc3RlcHBlZCA9IGZhbHNlOwomIzQzOwlzMzIgc3RlcF9jeWNsZXM7CiYjNDM7CXUzMiBzeW50aF9mcmVxOwomIzQzOwlpbnQgcmM7CiYjNDM7CXU4IGk7CiYjNDM7CiYjNDM7CS8qIEJ1aWxkIHBlci1zeW50aCBvdXRwdXQgbWFza3MgZnJvbSByZWdpc3RlcmVkIG91dHB1dCBwaW5zICovCiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkocGluLCAmYW1wO3psZHBsbC0mZ3Q7cGlucywgbGlzdCkgewomIzQzOwkJdTggb3V0X2lkLCBzeW50aF9pZDsKJiM0MzsKJiM0MzsJCWlmICh6bDMwNzN4X2RwbGxfaXNfaW5wdXRfcGluKHBpbikpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlvdXRfaWQgPSB6bDMwNzN4X291dHB1dF9waW5fb3V0X2dldChwaW4tJmd0O2lkKTsKJiM0MzsKJiM0MzsJCWlmICghemwzMDczeF9kZXZfb3V0X2lzX3N0ZXBwZWQoemxkZXYsIG91dF9pZCkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlzeW50aF9pZCA9IHpsMzA3M3hfZGV2X291dF9zeW50aF9nZXQoemxkZXYsIG91dF9pZCk7CiYjNDM7CQlpZiAoc3ludGhfaWQgJmd0Oz0gWkwzMDczWF9OVU1fU1lOVEhTKSB7CiYjNDM7CQkJZGV2X3dhcm4oemxkZXYtJmd0O2RldiwgJiMzNDtVbmV4cGVjdGVkIHN5bnRoIGlkIGZvciBPVVQldVxuJiMzNDssCiYjNDM7CQkJCSBvdXRfaWQpOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwkJc3ludGhfbWFza1tzeW50aF9pZF0gfD0gQklUKG91dF9pZCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogUHJvY2VzcyBlYWNoIHN5bnRoIGdyb3VwICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBaTDMwNzNYX05VTV9TWU5USFM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzeW50aCA9IHpsMzA3M3hfc3ludGhfc3RhdGVfZ2V0KHpsZGV2LCBpKTsKJiM0MzsJCWlmICghemwzMDczeF9zeW50aF9pc19lbmFibGVkKHN5bnRoKSB8fAomIzQzOwkJICAgIHpsMzA3M3hfc3ludGhfZHBsbF9nZXQoc3ludGgpICE9IHpsZHBsbC0mZ3Q7aWQpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlzeW50aF9mcmVxID0gemwzMDczeF9zeW50aF9mcmVxX2dldChzeW50aCk7CiYjNDM7CiYjNDM7CQkvKiBSZW1lbWJlciBmaXJzdCBlbmFibGVkIHN5bnRoIGZyZXEgZm9yIFRvRC1vbmx5IGZhbGxiYWNrICovCiYjNDM7CQlpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpCiYjNDM7CQkJZmlyc3Rfc3ludGhfZnJlcSA9IHN5bnRoX2ZyZXE7CiYjNDM7CiYjNDM7CQlpZiAoIXN5bnRoX21hc2tbaV0pCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkvKiBTYWZlIGZvciBzMzI6IG1heCBzeW50aCBmcmVxIGlzIDc1MCBNSHogKi8KJiM0MzsJCXN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIHN5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7CiYjNDM7CiYjNDM7CQlyYyA9IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtJmd0O2lkLAomIzQzOwkJCQkJICAgICBzeW50aF9tYXNrW2ldLCBzdGVwX2N5Y2xlcywKJiM0MzsJCQkJCSAgICAgIXRvZF9zdGVwcGVkKTsKJiM0MzsJCWlmIChyYykgewomIzQzOwkJCWlmICh0b2Rfc3RlcHBlZCkgewomIzQzOwkJCQlkZXZfd2Fybih6bGRldi0mZ3Q7ZGV2LAomIzQzOwkJCQkJICYjMzQ7UGFydGlhbCBwaGFzZSBzdGVwIGZhaWx1cmVcbiYjMzQ7KTsKJiM0MzsJCQkJcmV0dXJuIDA7CiYjNDM7CQkJfQomIzQzOwkJCXJldHVybiByYzsKJiM0MzsJCX0KJiM0MzsJCXRvZF9zdGVwcGVkID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CS8qIE5vIGVuYWJsZWQgb3V0cHV0cyBmb3VuZDsgc3RlcCBUb0QgY291bnRlciBvbmx5IHVzaW5nIHRoZQomIzQzOwkgKiBmaXJzdCBlbmFibGVkIHN5bnRoJiMzOTtzIHBlcmlvZCAoZW1wdHkgb3V0cHV0IG1hc2spLgomIzQzOwkgKi8KJiM0MzsJaWYgKCF0b2Rfc3RlcHBlZCkgewomIzQzOwkJc3RlcF9jeWNsZXMgPSBkaXZfczY0KGRlbHRhICogZmlyc3Rfc3ludGhfZnJlcSwgTlNFQ19QRVJfU0VDKTsKJiM0MzsJCXJldHVybiB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCh6bGRldiwgemxkcGxsLSZndDtpZCwgMCwKJiM0MzsJCQkJCSAgICAgICBzdGVwX2N5Y2xlcywgdHJ1ZSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIC8qKgotICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlCi0gKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmUKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUgLSBhZGp1c3QgUFRQIGNsb2NrIHRpbWUKJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm8KJiM0MzsgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcwogICoKLSAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuCiYjNDM7ICogRm9yIE5DTywgbGFyZ2UgZGVsdGFzICgmZ3Q7PSAxIHNlY29uZCkgYXJlIHNwbGl0IGludG8gYSBUb0QKJiM0MzsgKiByZWFkLW1vZGlmeS13cml0ZSBmb3IgdGhlIHNlY29uZHMgcGFydCBhbmQgYW4gb3V0cHV0IHBoYXNlIHN0ZXAgZm9yCiYjNDM7ICogdGhlIHN1Yi1zZWNvbmQgcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgcGhhc2Ugc3RlcCBkaXJlY3RseSwKJiM0MzsgKiBmYWxsaW5nIGJhY2sgdG8gVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIGlmIHBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlCiYjNDM7ICogZmFpbHMuIEluIEFVVE8vUkVGTE9DSyBtb2RlcywgbGFyZ2UgZGVsdGFzIGFyZSBzcGxpdCBpbnRvIFRvRAomIzQzOyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciBzZWNvbmRzIGFuZCBUSUUgd3JpdGUgZm9yIHRoZSBzdWItc2Vjb25kCiYjNDM7ICogcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgVElFIHdyaXRlIGRpcmVjdGx5LgomIzQzOyAqCiYjNDM7ICogSWYgdGhlIHNlY29uZHMgcGFydCB3YXMgYWxyZWFkeSBjb21taXR0ZWQgd2hlbiB0aGUgc3ViLXNlY29uZAomIzQzOyAqIG1lY2hhbmlzbSBmYWlscywgcmV0dXJucyAwIHRvIHByZXZlbnQgdGhlIFBUUCBzZXJ2byBmcm9tIHJldHJ5aW5nCiYjNDM7ICogdGhlIGZ1bGwgZGVsdGEgYW5kIGFwcGx5aW5nIHNlY29uZHMgYWdhaW4uCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcyAob3IgcGFydGlhbCBzdWNjZXNzKSwgJmx0OzAgb24gZXJyb3IKICAqLwotdm9pZAotemwzMDczeF9kcGxsX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczY0IGRlbHRhKQogewotCVdBUk4oemxkcGxsLSZndDtkcGxsX2RldiwgJiMzNDtEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXG4mIzM0Oyk7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLAomIzQzOwkJCQkJCSAgIHB0cF9pbmZvKTsKJiM0MzsJc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC0mZ3Q7ZGV2OwomIzQzOwljb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuOwomIzQzOwlib29sIHNlY19hZGp1c3RlZCA9IGZhbHNlOwomIzQzOwlzdHJ1Y3QgdGltZXNwZWM2NCB0czsKJiM0MzsJaW50IHJjOwogCi0JbXV0ZXhfZGVzdHJveSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7Ci0Ja2ZyZWUoemxkcGxsKTsKJiM0MzsJaWYgKCFkZWx0YSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwomIzQzOwkvKiBNb2RlcyB3aXRob3V0IHBoYXNlIHN0ZXAgb3IgVElFIHVzZSBwbGFpbiBUb0QgYWRqdXN0ICovCiYjNDM7CWNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZGV2LCB6bGRwbGwtJmd0O2lkKTsKJiM0MzsJaWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikgJmFtcDsmYW1wOwomIzQzOwkgICAgIXpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjaGFuKSkKJiM0MzsJCXJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLSZndDtpZCwKJiM0MzsJCQkJCSAgICAgICBuc190b190aW1lc3BlYzY0KGRlbHRhKSk7CiYjNDM7CiYjNDM7CS8qIFNwbGl0IG9mZiBzZWNvbmRzIHZpYSBUb0QgcmVhZC1tb2RpZnktd3JpdGUgc28gdGhlIHN1Yi1zZWNvbmQKJiM0MzsJICogcmVtYWluZGVyIGNhbiBiZSBhcHBsaWVkIHRocm91Z2ggdGhlIG91dHB1dC1jb2hlcmVudCBtZWNoYW5pc20KJiM0MzsJICogKHBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlKS4KJiM0MzsJICovCiYjNDM7CWlmIChkZWx0YSAmZ3Q7PSBOU0VDX1BFUl9TRUMgfHwgZGVsdGEgJmx0Oz0gLU5TRUNfUEVSX1NFQykgewomIzQzOwkJczMyIHJlbWFpbmRlcjsKJiM0MzsKJiM0MzsJCXRzLnR2X3NlYyA9IGRpdl9zNjRfcmVtKGRlbHRhLCBOU0VDX1BFUl9TRUMsICZhbXA7cmVtYWluZGVyKTsKJiM0MzsJCXRzLnR2X25zZWMgPSAwOwomIzQzOwkJZGVsdGEgPSByZW1haW5kZXI7CiYjNDM7CiYjNDM7CQlyYyA9IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtJmd0O2lkLCB0cyk7CiYjNDM7CQlpZiAocmMpCiYjNDM7CQkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwkJLyogTm8gc3ViLXNlY29uZCByZW1haW5kZXIsIGRvbmUgKi8KJiM0MzsJCWlmICghZGVsdGEpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CQkvKiBXYWl0IGZvciB0aGUgVG9EIHdyaXRlIHRvIGJlIGFwcGxpZWQgYXQgdGhlIDEgSHogZWRnZQomIzQzOwkJICogYmVmb3JlIGlzc3VpbmcgcGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUsIHNvIHRoZSBwZW5kaW5nCiYjNDM7CQkgKiBXUl9ORVhUXzFIWiBkb2VzIG5vdCBvdmVyd3JpdGUgdGhlIHN1Yi1zZWNvbmQgYWRqdXN0bWVudC4KJiM0MzsJCSAqLwomIzQzOwkJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIHpsZHBsbC0mZ3Q7aWQpOwomIzQzOwkJaWYgKHJjKQomIzQzOwkJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJCXNlY19hZGp1c3RlZCA9IHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQXBwbHkgc3ViLXNlY29uZCBkZWx0YSB2aWEgcGhhc2Ugc3RlcCAoTkNPKSBvciBUSUUgd3JpdGUgKi8KJiM0MzsJaWYgKHpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSkgewomIzQzOwkJcmMgPSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCh6bGRwbGwsIGRlbHRhKTsKJiM0MzsJCWlmICghcmMpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyYyA9IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoemxkZXYsIHpsZHBsbC0mZ3Q7aWQsIGRlbHRhKTsKJiM0MzsJCWlmICghcmMpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogUGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUgZmFpbGVkLCBmYWxsIGJhY2sgdG8gVG9EIGFkanVzdCAqLwomIzQzOwlyYyA9IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtJmd0O2lkLAomIzQzOwkJCQkgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTsKJiM0MzsKJiM0MzsJLyogSW4gdGhlIHVubGlrZWx5IGV2ZW50IHRoYXQgYm90aCBwaGFzZSBzdGVwL1RJRSB3cml0ZSBhbmQgZmFsbGJhY2sKJiM0MzsJICogVG9EIGFkanVzdCBmYWlsIGFmdGVyIHNlY29uZHMgd2VyZSBhbHJlYWR5IGNvbW1pdHRlZCwgcmV0dXJuCiYjNDM7CSAqIHN1Y2Nlc3MgdG8gcHJldmVudCB0aGUgUFRQIHNlcnZvIGZyb20gcmV0cnlpbmcgdGhlIGZ1bGwgZGVsdGEgYW5kCiYjNDM7CSAqIGFwcGx5aW5nIHNlY29uZHMgYWdhaW4uIFRoZSBzdWItc2Vjb25kIHJlc2lkdWFsIHdpbGwgc2VsZi1jb3JyZWN0CiYjNDM7CSAqIGluIHRoZSBuZXh0IHNlcnZvIGN5Y2xlLgomIzQzOwkgKi8KJiM0MzsJaWYgKHJjICZhbXA7JmFtcDsgc2VjX2FkanVzdGVkKSB7CiYjNDM7CQlkZXZfd2Fybih6bGRldi0mZ3Q7ZGV2LAomIzQzOwkJCSAmIzM0O1N1Yi1zZWNvbmQgYWRqdXN0bWVudCBmYWlsZWQgYWZ0ZXIgc2Vjb25kcyBhcHBsaWVkXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcmM7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSAtIGFkanVzdCBQVFAgY2xvY2sgZnJlcXVlbmN5CiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvCiYjNDM7ICogQHNjYWxlZF9wcG06IGZyZXF1ZW5jeSBhZGp1c3RtZW50IGluIHNjYWxlZCBwcG0gKHBwbSAqIDJeMTYpCiYjNDM7ICoKJiM0MzsgKiBPbmx5IHN1cHBvcnRlZCBmb3IgTkNPLiBXcml0ZXMgdGhlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgcmVnaXN0ZXIuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46CiYjNDM7ICogKiAlMAkJCS0gc3VjY2VzcyBvciBAc2NhbGVkX3BwbSBpcyB6ZXJvIChuby1vcCkKJiM0MzsgKiAqICUtRU9QTk9UU1VQUAktIE5DTyBwaW4gaXMgbm90IGNvbm5lY3RlZCBhbmQgQHNjYWxlZF9wcG0gaXMgbm9uLXplcm8KJiM0MzsgKiAqIG5lZ2F0aXZlCQktIG90aGVyIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludAomIzQzO3psMzA3M3hfZHBsbF9wdHBfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGxvbmcgc2NhbGVkX3BwbSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLAomIzQzOwkJCQkJCSAgIHB0cF9pbmZvKTsKJiM0MzsJY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjsKJiM0MzsJczY0IG9mZnNldDsKJiM0MzsKJiM0MzsJLyogQ29udmVydCBzY2FsZWRfcHBtIHRvIGRmX29mZnNldCBpbiAyXi00OCBzdGVwczoKJiM0MzsJICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjMyKSAvIDEwXjYKJiM0MzsJICoKJiM0MzsJICogU2ltcGxpZnkgdG8gYXZvaWQgb3ZlcmZsb3c6CiYjNDM7CSAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogMl4yNikgLyA1XjYKJiM0MzsJICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiA2NzEwODg2NCkgLyAxNTYyNQomIzQzOwkgKi8KJiM0MzsJb2Zmc2V0ID0gLWRpdl9zNjQoKHM2NClzY2FsZWRfcHBtICogNjcxMDg4NjRMTCwgMTU2MjUpOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwomIzQzOwljaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRwbGwtJmd0O2RldiwgemxkcGxsLSZndDtpZCk7CiYjNDM7CWlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKQomIzQzOwkJcmV0dXJuIHNjYWxlZF9wcG0gPyAtRU9QTk9UU1VQUCA6IDA7CiYjNDM7CWlmIChvZmZzZXQgPT0gY2hhbi0mZ3Q7ZGZfb2Zmc2V0KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCh6bGRwbGwtJmd0O2RldiwgemxkcGxsLSZndDtpZCwgb2Zmc2V0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSAtIGFkanVzdCBQVFAgY2xvY2sgcGhhc2UKJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm8KJiM0MzsgKiBAZGVsdGE6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMKJiM0MzsgKgomIzQzOyAqIE9ubHkgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMuIFVzZXMgVElFIHdyaXRlIGZvcgomIzQzOyAqIG5hbm9zZWNvbmQgcmVzb2x1dGlvbiBwaGFzZSBhZGp1c3RtZW50LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOgomIzQzOyAqICogJTAJCQktIHN1Y2Nlc3Mgb3IgQGRlbHRhIGlzIHplcm8gKG5vLW9wKQomIzQzOyAqICogJS1FT1BOT1RTVVBQCS0gbW9kZSBkb2VzIG5vdCBzdXBwb3J0IFRJRSBhbmQgQGRlbHRhIGlzIG5vbi16ZXJvCiYjNDM7ICogKiBuZWdhdGl2ZQkJLSBvdGhlciBlcnJvcgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHMzMiBkZWx0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLAomIzQzOwkJCQkJCSAgIHB0cF9pbmZvKTsKJiM0MzsJc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC0mZ3Q7ZGV2OwomIzQzOwljb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuOwomIzQzOwomIzQzOwlpZiAoIWRlbHRhKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CWNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZGV2LCB6bGRwbGwtJmd0O2lkKTsKJiM0MzsKJiM0MzsJaWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY2hhbikpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJldHVybiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHpsZGV2LCB6bGRwbGwtJmd0O2lkLCBkZWx0YSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzMzIKJiM0Mzt6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyBfX2Fsd2F5c191bnVzZWQpCiYjNDM7ewomIzQzOwkvKiBIVyBsaW1pdHMgVElFIHdyaXRlIHRvICYjNDM7LTEgc2Vjb25kLiBSZXR1cm4gdGhlIGNvbnN0YW50IEhXCiYjNDM7CSAqIGxpbWl0IGFuZCBsZXQgYWRqcGhhc2UgaGFuZGxlIG1vZGUtc3BlY2lmaWMgY2hlY2tzLgomIzQzOwkgKi8KJiM0MzsJcmV0dXJuIE5TRUNfUEVSX1NFQyAtIDE7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvID0gewomIzQzOwkub3duZXIJCT0gVEhJU19NT0RVTEUsCiYjNDM7CS5tYXhfYWRqCT0gWkwzMDczWF9EUExMX1BUUF9NQVhfQURKLAomIzQzOwkuZ2V0dGltZXg2NAk9IHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCwKJiM0MzsJLnNldHRpbWU2NAk9IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0LAomIzQzOwkuYWRqdGltZQk9IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSwKJiM0MzsJLmFkamZpbmUJPSB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUsCiYjNDM7CS5hZGpwaGFzZQk9IHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2UsCiYjNDM7CS5nZXRtYXhwaGFzZQk9IHpsMzA3M3hfZHBsbF9wdHBfZ2V0bWF4cGhhc2UsCiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBhIERQTEwgY2hhbm5lbAomIzQzOyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byByZWdpc3RlciBQVFAgY2xvY2sgZm9yCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQomIzQzO3sKJiM0MzsJc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC0mZ3Q7ZGV2OwomIzQzOwlzdHJ1Y3QgcHRwX2Nsb2NrICpwdHBfY2xvY2s7CiYjNDM7CiYjNDM7CXpsZHBsbC0mZ3Q7cHRwX2luZm8gPSB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm87CiYjNDM7CXNucHJpbnRmKHpsZHBsbC0mZ3Q7cHRwX2luZm8ubmFtZSwgc2l6ZW9mKHpsZHBsbC0mZ3Q7cHRwX2luZm8ubmFtZSksCiYjNDM7CQkgJiMzNDslcy1kcGxsJXUmIzM0OywgZGV2X25hbWUoemxkZXYtJmd0O2RldiksIHpsZHBsbC0mZ3Q7aWQpOwomIzQzOwomIzQzOwlwdHBfY2xvY2sgPSBwdHBfY2xvY2tfcmVnaXN0ZXIoJmFtcDt6bGRwbGwtJmd0O3B0cF9pbmZvLCB6bGRldi0mZ3Q7ZGV2KTsKJiM0MzsJaWYgKElTX0VSUihwdHBfY2xvY2spKSB7CiYjNDM7CQlkZXZfZXJyKHpsZGV2LSZndDtkZXYsICYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgRFBMTCV1XG4mIzM0OywKJiM0MzsJCQl6bGRwbGwtJmd0O2lkKTsKJiM0MzsJCXJldHVybiBQVFJfRVJSKHB0cF9jbG9jayk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJemxkcGxsLSZndDtwdHBfY2xvY2sgPSBwdHBfY2xvY2s7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIgLSB1bnJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgYSBEUExMIGNoYW5uZWwKJiM0MzsgKiBAemxkcGxsOiBEUExMIGNoYW5uZWwgdG8gdW5yZWdpc3RlciBQVFAgY2xvY2sgZm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKJiM0Mzt7CiYjNDM7CWlmICghSVNfRVJSX09SX05VTEwoemxkcGxsLSZndDtwdHBfY2xvY2spKSB7CiYjNDM7CQlwdHBfY2xvY2tfdW5yZWdpc3Rlcih6bGRwbGwtJmd0O3B0cF9jbG9jayk7CiYjNDM7CQl6bGRwbGwtJmd0O3B0cF9jbG9jayA9IE5VTEw7CiYjNDM7CX0KIH0KIAogLyoqCkBAIC0yNDM2LDYgJiM0MzsyNzc3LDQ3IEBAIHpsMzA3M3hfZHBsbF9yZWZfc3luY19wYWlyc19yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfYWxsb2MgLSBhbGxvY2F0ZSBEUExMIGRldmljZQomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlcgomIzQzOyAqCiYjNDM7ICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBwb2ludGVyIHRvIERQTEwgZGV2aWNlIG9uIHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgemwzMDczeF9kcGxsICoKJiM0Mzt6bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7CiYjNDM7CiYjNDM7CXpsZHBsbCA9IGt6YWxsb2Nfb2JqKCp6bGRwbGwpOwomIzQzOwlpZiAoIXpsZHBsbCkKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwomIzQzOwomIzQzOwl6bGRwbGwtJmd0O2RldiA9IHpsZGV2OwomIzQzOwl6bGRwbGwtJmd0O2lkID0gY2g7CiYjNDM7CW11dGV4X2luaXQoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwlJTklUX0xJU1RfSEVBRCgmYW1wO3psZHBsbC0mZ3Q7cGlucyk7CiYjNDM7CiYjNDM7CXJldHVybiB6bGRwbGw7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9mcmVlIC0gZnJlZSBEUExMIGRldmljZQomIzQzOyAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZQomIzQzOyAqCiYjNDM7ICogRGVhbGxvY2F0ZXMgZ2l2ZW4gRFBMTCBkZXZpY2UgcHJldmlvdXNseSBhbGxvY2F0ZWQgYnkgQHpsMzA3M3hfZHBsbF9hbGxvYy4KJiM0MzsgKi8KJiM0Mzt2b2lkCiYjNDM7emwzMDczeF9kcGxsX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQomIzQzO3sKJiM0MzsJV0FSTih6bGRwbGwtJmd0O2RwbGxfZGV2LCAmIzM0O0RQTEwgZGV2aWNlIGlzIHN0aWxsIHJlZ2lzdGVyZWRcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJbXV0ZXhfZGVzdHJveSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiYjNDM7CWtmcmVlKHpsZHBsbCk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIgLSByZWdpc3RlciBEUExMIGRldmljZSBhbmQgYWxsIGl0cyBwaW5zCiAgKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmUKQEAgLTI0NjYsNiAmIzQzOzI4NDgsMTMgQEAgemwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKIAkJcmV0dXJuIHJjOwogCX0KIAomIzQzOwlyYyA9IHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIoemxkcGxsKTsKJiM0MzsJaWYgKHJjKSB7CiYjNDM7CQl6bDMwNzN4X2RwbGxfcGluc191bnJlZ2lzdGVyKHpsZHBsbCk7CiYjNDM7CQl6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTsKJiM0MzsJCXJldHVybiByYzsKJiM0MzsJfQomIzQzOwogCXJldHVybiAwOwogfQogCkBAIC0yNDc5LDcgJiM0MzsyODY4LDcgQEAgemwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKIHZvaWQKIHpsMzA3M3hfZHBsbF91bnJlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKIHsKLQkvKiBVbnJlZ2lzdGVyIGFsbCBwaW5zIGFuZCBkcGxsICovCiYjNDM7CXpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3Rlcih6bGRwbGwpOwogCXpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTsKIAl6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaAppbmRleCBmYWViYzQwMmJhMWI3Li45OTMyMjFkYzYzMjQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oCkBAIC01LDYgJiM0Mzs1LDcgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2RwbGwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9saXN0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtjb3JlLmgmIzM0OwogCkBAIC0yMiw2ICYjNDM7MjMsOCBAQAogICogQHR5cGU6IERQTEwgdHlwZSAoUFBTIG9yIEVFQykKICAqIEBsb2NrX3N0YXR1czogbGFzdCBzYXZlZCBEUExMIGxvY2sgc3RhdHVzCiAgKiBAcGluczogbGlzdCBvZiBwaW5zCiYjNDM7ICogQHB0cF9pbmZvOiBQVFAgY2xvY2sgaW5mbwomIzQzOyAqIEBwdHBfY2xvY2s6IHJlZ2lzdGVyZWQgUFRQIGNsb2NrIChvciBOVUxMKQogICovCiBzdHJ1Y3QgemwzMDczeF9kcGxsIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCQlsaXN0OwpAQCAtMzYsNiAmIzQzOzM5LDggQEAgc3RydWN0IHpsMzA3M3hfZHBsbCB7CiAJZW51bSBkcGxsX3R5cGUJCQl0eXBlOwogCWVudW0gZHBsbF9sb2NrX3N0YXR1cwkJbG9ja19zdGF0dXM7CiAJc3RydWN0IGxpc3RfaGVhZAkJcGluczsKJiM0MzsJc3RydWN0IHB0cF9jbG9ja19pbmZvCQlwdHBfaW5mbzsKJiM0MzsJc3RydWN0IHB0cF9jbG9jawkJKnB0cF9jbG9jazsKIH07CiAKIHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgKaW5kZXggYjcwZWFkN2Q0NDk1Yi4uZjNhNWUxMjE1YWEzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaApAQCAtMTc5LDYgJiM0MzsxNzksMjAgQEAKICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRAkJCUdFTk1BU0soMiwgMCkKICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRF9BQ0NfSQkJNAogCiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTAkJCVpMX1JFRyg1LCAweDMwLCAxKQomIzQzOyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUAkJCUdFTk1BU0soMiwgMCkKJiM0MzsjZGVmaW5lIFpMX0RQTExfVElFX0NUUkxfT1BfV1IJCQk0CiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTF9NQVNLCQlaTF9SRUcoNSwgMHgzMSwgMSkKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9DVFJMKF9pZHgpCQkJCQlcCiYjNDM7CVpMX1JFR19JRFgoX2lkeCwgNSwgMHgzOCwgMSwgWkwzMDczWF9NQVhfQ0hBTk5FTFMsIDEpCiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX1NFTQkJCUJJVCg0KQomIzQzOyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTUQJCQlHRU5NQVNLKDMsIDApCiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWgkxCiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UCQk4CiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9ORVhUXzFIWgk5CiYjNDM7CiAjZGVmaW5lIFpMX1JFR19EUExMX01FQVNfQ1RSTAkJCVpMX1JFRyg1LCAweDUwLCAxKQogI2RlZmluZSBaTF9EUExMX01FQVNfQ1RSTF9FTgkJCUJJVCgwKQogI2RlZmluZSBaTF9EUExMX01FQVNfQ1RSTF9BVkdfRkFDVE9SCQlHRU5NQVNLKDcsIDQpCkBAIC0xOTMsNiAmIzQzOzIwNyw5IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBSZWdpc3RlciBQYWdlcyA2LTcsIERQTEwgRGF0YQomIzQzOyAqCiYjNDM7ICogUGVyLWNoYW5uZWwgcmVnaXN0ZXJzIHdpdGggc3RyaWRlIDB4MjAuIENoYW5uZWxzIDAtMyByZXNpZGUgb24gcGFnZSA2LAomIzQzOyAqIGNoYW5uZWwgNCBvbiBwYWdlIDcuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2RlZmluZSBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeCkJCQkJCVwKQEAgLTIwMiw2ICYjNDM7MjE5LDI0IEBACiAJKChfaWR4KSAmbHQ7IDQgPyBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfNCkKICNkZWZpbmUgWkxfRFBMTF9ERl9PRkZTRVRfVU5LTk9XTglTNjRfTUlOCiAKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBXzAzKF9pZHgpCQkJCQlcCiYjNDM7CVpMX1JFR19JRFgoX2lkeCwgNiwgMHgwQywgNiwgNCwgMHgyMCkKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBXzQJCQlaTF9SRUcoNywgMHgwQywgNikKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBKF9pZHgpCQkJCQlcCiYjNDM7CSgoX2lkeCkgJmx0OyA0ID8gWkxfUkVHX0RQTExfVElFX0RBVEFfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9USUVfREFUQV80KQomIzQzOwomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQ18wMyhfaWR4KQkJCQkJXAomIzQzOwlaTF9SRUdfSURYKF9pZHgsIDYsIDB4MTIsIDYsIDQsIDB4MjApCiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzQJCQlaTF9SRUcoNywgMHgxMiwgNikKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUMoX2lkeCkJCQkJCVwKJiM0MzsJKChfaWR4KSAmbHQ7IDQgPyBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVE9EX1NFQ180KQomIzQzOwomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TXzAzKF9pZHgpCQkJCQlcCiYjNDM7CVpMX1JFR19JRFgoX2lkeCwgNiwgMHgxOCwgNCwgNCwgMHgyMCkKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU180CQkJWkxfUkVHKDcsIDB4MTgsIDQpCiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlMoX2lkeCkJCQkJCVwKJiM0MzsJKChfaWR4KSAmbHQ7IDQgPyBaTF9SRUdfRFBMTF9UT0RfTlNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfTlNfNCkKJiM0MzsKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogUmVnaXN0ZXIgUGFnZSA5LCBTeW50aCBhbmQgT3V0cHV0CiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0yMjEsNiAmIzQzOzI1NiwyMyBAQAogI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9FTgkJCUJJVCgwKQogI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9TWU5USF9TRUwJCUdFTk1BU0soNiwgNCkKIAomIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTSwkJWkxfUkVHKDksIDB4MzYsIDIpCiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTAkJWkxfUkVHKDksIDB4MzgsIDEpCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX0RQTEwJCUdFTk1BU0soNiwgNCkKJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVAJQklUKDMpCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QCQlHRU5NQVNLKDEsIDApCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX05PTkUJMAomIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9SRVNFVAkxCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1JFQUQJMgomIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURQkzCiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTlVNQkVSCQlaTF9SRUcoOSwgMHgzOSwgMSkKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLCQlaTF9SRUcoOSwgMHgzYSwgMikKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBCQlaTF9SRUcoOSwgMHgzYywgNCkKJiM0MzsKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBSZWdpc3RlciBQYWdlIDEwLCBSZWYgTWFpbGJveAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODE3NQoJCQkJCQkJb3V0cHV0OiAyMDIKCQkJCQkJCXRob3VnaHRzOiA0NTc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBUUCBDbG9jayBTdXBwb3J0IGluIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgRHJpdmVyIFJldmlldyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGFkZHMgUHJlY2lzaW9uIFRpbWUgUHJvdG9jb2wgKFBUUCkgY2xvY2sgZnVuY3Rpb25hbGl0eSB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIsIGVzc2VudGlhbGx5IGVuYWJsaW5nIG1vcmUgcHJlY2lzZSB0aW1lIHN5bmNocm9uaXphdGlvbiBjYXBhYmlsaXRpZXMuIE15IGluaXRpYWwgc2NhbiBmb2N1c2VkIG9uIGlkZW50aWZ5aW5nIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MsIGEgY29tbW9uIGFyZWEgZm9yIHNlY3VyaXR5IGZsYXdzLgoKRmlyc3QsIEkgZXhhbWluZWQgdGhlIGBwdHBfY2xvY2tfaW5mb2Agc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLiBJdCBsb29rcyBzb3VuZDsgdGhlIGNyaXRpY2FsIGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCwgYW5kIHRoZSBzdHJ1Y3R1cmUgaXMgY29waWVkIHJhdGhlciB0aGFuIGRpcmVjdGx5IHVzZWQsIHdoaWNoIHByZXZlbnRzIGFueSBkYW5nbGluZyBwb2ludGVycyBvciB1bmluaXRpYWxpemVkIGRhdGEgaXNzdWVzLiBJIHBhaWQgc3BlY2lmaWMgYXR0ZW50aW9uIHRvIHRoZSBgdGltZXNwZWM2NGAgYW5kIGBwdHBfc3lzdGVtX3RpbWVzdGFtcGAgc3RydWN0dXJlcywgZW5zdXJpbmcgdGhleSBhcmUgcHJvcGVybHkgcG9wdWxhdGVkIGJ5IHRoZSBmdW5jdGlvbnMgcmVhZGluZyBUaW1lIG9mIERheSAoVG9EKSByZWdpc3RlcnMgZnJvbSB0aGUgaGFyZHdhcmUuIFRoZSByZWFkIGFuZCBhZGp1c3RtZW50IGZ1bmN0aW9ucywgc3VjaCBhcyBgemwzMDczeF9jaGFuX3RvZF9yZWFkYCwgYHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NGAsIGFuZCB2YXJpb3VzICphZGoqIGZ1bmN0aW9ucyB3ZXJlIGNoZWNrZWQgdG8gZW5zdXJlIHRoZXkgYXJlIHByb3Blcmx5IHNldHRpbmcgYWxsIHZhbHVlcy4KClRoZSBgemwzMDczeF9kcGxsX2FsbG9jYCBmdW5jdGlvbiBpbml0aWFsbHkgcmFpc2VkIGEgc2xpZ2h0IGNvbmNlcm4gZHVlIHRvIHRoZSB1c2Ugb2YgYSBtYWNybyB0aGF0IHdhc24mIzM5O3QgaW1tZWRpYXRlbHkgZmFtaWxpYXIuIEFmdGVyIGEgY2xvc2VyIGxvb2ssIGl0JiMzOTtzIGp1c3QgYSBzdGFuZGFyZCBga3phbGxvY2Agb3BlcmF0aW9uLCB3aGljaCBndWFyYW50ZWVzIHplcm8taW5pdGlhbGl6YXRpb24uCgpUaGVyZSBpc24mIzM5O3QgbXVjaCBuZXcgaGVyZTogSSYjMzk7bSBzZWVpbmcgcmVnaXN0ZXIgcmVhZHMsIHJlZ2lzdGVyIHdyaXRlcywgc29tZSBiYXNpYyBhcml0aG1ldGljIGZvciB0aW1lIGFkanVzdG1lbnRzLCBhbmQgc3RhbmRhcmQgUFRQIGZyYW1ld29yayBpbnRlcmFjdGlvbnMuIFRoZSBmb2N1cyBvbiBsb2NraW5nIHdpdGggbXV0ZXhlcyBpbmRpY2F0ZXMgcm9idXN0IGNvbmN1cnJlbmN5IGhhbmRsaW5nLCBtaW5pbWl6aW5nIGRhdGEgcmFjZSByaXNrcy4gQWxzbywgc2luY2UgdGhlcmUgYXJlIG5vIG5ldyBpb2N0bHMgb3IgbmV0bGluayBhdHRyaWJ1dGVzLCBpbnRlcmFjdGlvbiB3aXRoIHVzZXJzcGFjZSBpcyBzdGFuZGFyZCBQVFAgY29yZSBpbXBsZW1lbnRhdGlvbi4gTm90aGluZyBsb29rcyBsaWtlIGl0IGNvdWxkIGxlYWsgc2Vuc2l0aXZlIGluZm9ybWF0aW9uLCBub3IgaW50cm9kdWNlIGFueSBzZWN1cml0eSBjb25jZXJucy4gSW4gc2hvcnQsIHRoZSBwYXRjaCBhcHBlYXJzIHRvIGJlIGltcGxlbWVudGluZyBQVFAgZnVuY3Rpb25hbGl0eSBpbiBhIHNhZmUgbWFubmVyLCBhZGhlcmluZyB0byBlc3RhYmxpc2hlZCBMaW51eCBrZXJuZWwgY29kaW5nIHByYWN0aWNlcyBhbmQgUFRQIGZyYW1ld29yayBndWlkZWxpbmVzLiBJJiMzOTttIHJlYXNvbmFibHkgY29uZmlkZW50IGluIHRoaXMgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgUFRQIGNsb2NrIHN1cHBvcnQgdG8gdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyLiBJdCBpbnRyb2R1Y2VzIGZ1bmN0aW9ucyB0byByZWFkL3dyaXRlIFRpbWUgb2YgRGF5IChUb0QpIHJlZ2lzdGVycywgYWRqdXN0IHBoYXNlLCBhZGp1c3QgZnJlcXVlbmN5LCBhbmQgcmVnaXN0ZXJzIGEgUFRQIGNsb2NrIGRldmljZSB1c2luZyBgcHRwX2Nsb2NrX3JlZ2lzdGVyYC4gQWxsIG5ldyB2YXJpYWJsZXMgYW5kIHN0cnVjdHVyZXMgKHN1Y2ggYXMgYHN0cnVjdCB0aW1lc3BlYzY0YCwgYHN5bnRoX21hc2tgLCBhbmQgYHN0cnVjdCBwdHBfY2xvY2tfaW5mb2ApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIG9yIHBhc3NlZCB0byBzdGFuZGFyZCBrZXJuZWwgQVBJcyB0aGF0IGhhbmRsZSBpbml0aWFsaXphdGlvbi4gVGhlcmUgYXJlIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgaXMgdGhlcmUgYW55IGNvbnRyb2wgZmxvdyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyAobGlrZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlci4gSXQgaW50cm9kdWNlcyBmdW5jdGlvbnMgdG8gcmVhZC93cml0ZSBUaW1lIG9mIERheSAoVG9EKSByZWdpc3RlcnMsIGFkanVzdCBwaGFzZSwgYWRqdXN0IGZyZXF1ZW5jeSwgYW5kIHJlZ2lzdGVycyBhIFBUUCBjbG9jayBkZXZpY2UgdXNpbmcgYHB0cF9jbG9ja19yZWdpc3RlcmAuIEFsbCBuZXcgdmFyaWFibGVzIGFuZCBzdHJ1Y3R1cmVzIChzdWNoIGFzIGBzdHJ1Y3QgdGltZXNwZWM2NGAsIGBzeW50aF9tYXNrYCwgYW5kIGBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm9gKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBvciBwYXNzZWQgdG8gc3RhbmRhcmQga2VybmVsIEFQSXMgdGhhdCBoYW5kbGUgaW5pdGlhbGl6YXRpb24uIFRoZXJlIGFyZSBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGlzIHRoZXJlIGFueSBjb250cm9sIGZsb3cgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgKGxpa2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSkgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODo0MTowNi4yMTQ2NjM4OTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDY4MDgzODUxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaTDMwNzNYXCIsXG4gICAgXCJaTDMwNzNYX0kyQ1wiLFxuICAgIFwiWkwzMDczWF9TUElcIixcbiAgICBcIlBUUF8xNTg4X0NMT0NLXCIsXG4gICAgXCJEUExMXCIsXG4gICAgXCJJMkNcIixcbiAgICBcIlNQSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdFwiLFxuICAgIFwiemwzMDczeF9jaGFuX3RvZF9yZWFkXCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fdG9kX3dyaXRlXCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fdG9kX2FkanVzdFwiLFxuICAgIFwiemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXRcIixcbiAgICBcInpsMzA3M3hfY2hhbl90aWVfd3JpdGVcIixcbiAgICBcInpsMzA3M3hfY2hhbl9waGFzZV9zdGVwXCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjRcIixcbiAgICBcInpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0XCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcFwiLFxuICAgIFwiemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lXCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmVcIixcbiAgICBcInpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2VcIixcbiAgICBcInpsMzA3M3hfZHBsbF9wdHBfZ2V0bWF4cGhhc2VcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgUFRQIGNsb2NrIHN1cHBvcnQgdG8gdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyLiBJdCBpbnRyb2R1Y2VzIGZ1bmN0aW9ucyB0byByZWFkL3dyaXRlIFRpbWUgb2YgRGF5IChUb0QpIHJlZ2lzdGVycywgYWRqdXN0IHBoYXNlLCBhZGp1c3QgZnJlcXVlbmN5LCBhbmQgcmVnaXN0ZXJzIGEgUFRQIGNsb2NrIGRldmljZSB1c2luZyBgcHRwX2Nsb2NrX3JlZ2lzdGVyYC4gQWxsIG5ldyB2YXJpYWJsZXMgYW5kIHN0cnVjdHVyZXMgKHN1Y2ggYXMgYHN0cnVjdCB0aW1lc3BlYzY0YCwgYHN5bnRoX21hc2tgLCBhbmQgYHN0cnVjdCBwdHBfY2xvY2tfaW5mb2ApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIG9yIHBhc3NlZCB0byBzdGFuZGFyZCBrZXJuZWwgQVBJcyB0aGF0IGhhbmRsZSBpbml0aWFsaXphdGlvbi4gVGhlcmUgYXJlIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgaXMgdGhlcmUgYW55IGNvbnRyb2wgZmxvdyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyAobGlrZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIgKHpsMzA3M3gpLiBUaGlzIGV4cG9zZXMgbmV3IGZ1bmN0aW9uYWxpdHkgdG8gdXNlcnNwYWNlIHZpYSB0aGUgUFRQIHN1YnN5c3RlbSAoZS5nLiwgL2Rldi9wdHBYIGlvY3RscykuIFRoZSBkcml2ZXIgaXMgYW4gSTJDL1NQSSBkZXZpY2UgZHJpdmVyLCB3aGljaCBjYW4gYmUgaW5zdGFudGlhdGVkIGFuZCBmdXp6ZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6NDE6MDYuMjE0NjcxNTA2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTYyNjM2NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwMTI5ODVkMzEwMWFjZGNhMDdiYTkwYjU1ZmE0MWRmZTY2ZGFkZTdmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDE0IDA4OjQxOjA1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWcgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXFxuaW5kZXggNWJiY2ExNDAwNTgxMy4uZGExNzMxYWNlMTVmMCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xcbkBAIC0yLDcgKzIsNyBAQFxcbiBcXG4gY29uZmlnIFpMMzA3M1hcXG4gXFx0dHJpc3RhdGUgXFxcIk1pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXNcXFwiIGlmIENPTVBJTEVfVEVTVFxcbi1cXHRkZXBlbmRzIG9uIE5FVFxcbitcXHRkZXBlbmRzIG9uIE5FVCBcXHUwMDI2XFx1MDAyNiBQVFBfMTU4OF9DTE9DS1xcbiBcXHRzZWxlY3QgRFBMTFxcbiBcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG4gXFx0c2VsZWN0IFJFR01BUFxcbkBAIC0xNiw3ICsxNiw3IEBAIGNvbmZpZyBaTDMwNzNYXFxuIFxcbiBjb25maWcgWkwzMDczWF9JMkNcXG4gXFx0dHJpc3RhdGUgXFxcIkkyQyBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcXFwiXFxuLVxcdGRlcGVuZHMgb24gSTJDIFxcdTAwMjZcXHUwMDI2IE5FVFxcbitcXHRkZXBlbmRzIG9uIEkyQyBcXHUwMDI2XFx1MDAyNiBORVQgXFx1MDAyNlxcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tcXG4gXFx0c2VsZWN0IFJFR01BUF9JMkNcXG4gXFx0c2VsZWN0IFpMMzA3M1hcXG4gXFx0aGVscFxcbkBAIC0yOCw3ICsyOCw3IEBAIGNvbmZpZyBaTDMwNzNYX0kyQ1xcbiBcXG4gY29uZmlnIFpMMzA3M1hfU1BJXFxuIFxcdHRyaXN0YXRlIFxcXCJTUEkgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzXFxcIlxcbi1cXHRkZXBlbmRzIG9uIE5FVCBcXHUwMDI2XFx1MDAyNiBTUElcXG4rXFx0ZGVwZW5kcyBvbiBORVQgXFx1MDAyNlxcdTAwMjYgU1BJIFxcdTAwMjZcXHUwMDI2IFBUUF8xNTg4X0NMT0NLXFxuIFxcdHNlbGVjdCBSRUdNQVBfU1BJXFxuIFxcdHNlbGVjdCBaTDMwNzNYXFxuIFxcdGhlbHBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXFxuaW5kZXggNGVjMmNmNTNkYWQ0Ni4uYmE0ZDMwM2Q0MWI0NyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNcXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNcXG5AQCAtMyw2ICszLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NsZWFudXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlbGF5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZXZfcHJpbnRrLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdHJpbmcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuIFxcbkBAIC0xNjIsOCArMTYzLDggQEAgaW50IHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpXFxuICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmVcXG4gICogQGluZGV4OiBEUExMIGNoYW5uZWwgaW5kZXggdG8gZmV0Y2ggc3RhdGUgZm9yXFxuICAqXFxuLSAqIFJlYWRzIHRoZSBtb2RlX3JlZnNlbCByZWdpc3RlciBhbmQgcmVmZXJlbmNlIHByaW9yaXR5IHJlZ2lzdGVycyBmb3JcXG4tICogdGhlIGdpdmVuIERQTEwgY2hhbm5lbCBhbmQgc3RvcmVzIHRoZSByYXcgdmFsdWVzIGZvciBsYXRlciB1c2UuXFxuKyAqIFJlYWRzIHRoZSBtb2RlX3JlZnNlbCwgc3RhdHVzIGFuZCByZWZlcmVuY2UgcHJpb3JpdHkgcmVnaXN0ZXJzIGZvclxcbisgKiB0aGUgZ2l2ZW4gRFBMTCBjaGFubmVsIGFuZCBzdG9yZXMgdGhlIHZhbHVlcyBmb3IgbGF0ZXIgdXNlLlxcbiAgKlxcbiAgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4gICovXFxuQEAgLTIzNCw2ICsyMzUsMzIyIEBAIGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKnpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldixcXG4gXFx0cmV0dXJuIFxcdTAwMjZ6bGRldi1cXHUwMDNlY2hhbltpbmRleF07XFxuIH1cXG4gXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQgLSB3YWl0IGZvciBUb0Qgc2VtYXBob3JlIHRvIGNsZWFyXFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxcbisgKlxcbisgKiBDaGVja3MgdGhlIFRvRCBjb250cm9sIHJlZ2lzdGVyIHNlbWFwaG9yZSBiaXQuIElmIGNsZWFyLCByZXR1cm5zXFxuKyAqIGltbWVkaWF0ZWx5LiBPdGhlcndpc2UgcG9sbHMgdW50aWwgdGhlIGJpdCBpcyBjbGVhcmVkIGJ5IHRoZSBkZXZpY2UuXFxuKyAqXFxuKyAqIFJldHVybjpcXG4rICogKiAwXFx0XFx0XFx0LSBzdWNjZXNzXFxuKyAqICogJS1FQlVTWVxcdFxcdC0gdGltZW91dFxcbisgKiAqICUtRU9QTk9UU1VQUFxcdC0gdW5rbm93biBjb21tYW5kIGRldGVjdGVkXFxuKyAqICogbmVnYXRpdmVcXHRcXHQtIG90aGVyIGVycm9yXFxuKyAqL1xcbitpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCB0aW1lb3V0O1xcbitcXHR1OCB0b2RfY3RybDtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSwgXFx1MDAyNnRvZF9jdHJsKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRpZiAoISh0b2RfY3RybCBcXHUwMDI2IFpMX0RQTExfVE9EX0NUUkxfU0VNKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRzd2l0Y2ggKEZJRUxEX0dFVChaTF9EUExMX1RPRF9DVFJMX0NNRCwgdG9kX2N0cmwpKSB7XFxuK1xcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFo6XFxuK1xcdFxcdHRpbWVvdXQgPSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UOlxcbitcXHRjYXNlIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaOlxcbitcXHRcXHR0aW1lb3V0ID0gWkxfUE9MTF9UT0RfUkRfVElNRU9VVF9VUztcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLFxcbitcXHRcXHRcXHRcXHQgIFpMX0RQTExfVE9EX0NUUkxfU0VNLCB0aW1lb3V0KTtcXG4rXFxuK1xcdHJldHVybiByYyA9PSAtRVRJTUVET1VUID8gLUVCVVNZIDogcmM7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwgLSBpc3N1ZSBUb0QgY29tbWFuZFxcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4rICogQGNtZDogVG9EIGNvbW1hbmQgdG8gZXhlY3V0ZVxcbisgKlxcbisgKiBXcml0ZXMgdGhlIHNlbWFwaG9yZSBhbmQgY29tbWFuZCB0byBkcGxsX3RvZF9jdHJsLiBUaGUgY2FsbGVyIG11c3RcXG4rICogZW5zdXJlIHRoZSBkZXZpY2UgaXMgcmVhZHkgKHNlbWFwaG9yZSBjbGVhcikgYmVmb3JlIGNhbGxpbmcgYW5kXFxuKyAqIG11c3Qgd2FpdCBmb3IgY29tcGxldGlvbiBpZiBuZWVkZWQuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4rc3RhdGljIGludCB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHU4IGNtZClcXG4re1xcbitcXHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLFxcbitcXHRcXHRcXHRcXHRaTF9EUExMX1RPRF9DVFJMX1NFTSB8IGNtZCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5fdG9kX3JlYWQgLSByZWFkIFRvRCByZWdpc3RlcnMgYWZ0ZXIgaXNzdWluZyBhIGNvbW1hbmRcXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuKyAqIEBuZXh0X2h6OiBpZiB0cnVlLCByZWFkIHByZWRpY3RlZCBUb0QgYXQgbmV4dCAxIEh6OyBvdGhlcndpc2UgcmVhZCBjdXJyZW50XFxuKyAqIEB0czogdGltZXNwZWMgdG8gc3RvcmUgdGhlIHJlc3VsdFxcbisgKiBAc3RzOiBvcHRpb25hbCBzeXN0ZW0gdGltZXN0YW1wIHBhaXIgZm9yIGNyb3NzLXRpbWVzdGFtcGluZ1xcbisgKlxcbisgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuK1xcdFxcdFxcdCAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXFxuK1xcdFxcdFxcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpXFxuK3tcXG4rXFx0dTMyIG5zZWM7XFxuK1xcdHU2NCBzZWM7XFxuK1xcdHU4IGNtZDtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0aWYgKG5leHRfaHopXFxuK1xcdFxcdGNtZCA9IFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaO1xcbitcXHRlbHNlXFxuK1xcdFxcdGNtZCA9IFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX0NVUlJFTlQ7XFxuK1xcbitcXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVG9EIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xcbitcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHB0cF9yZWFkX3N5c3RlbV9wcmV0cyhzdHMpO1xcbitcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfY3RybCh6bGRldiwgY2gsIGNtZCk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcdHB0cF9yZWFkX3N5c3RlbV9wb3N0dHMoc3RzKTtcXG4rXFxuK1xcdHJjID0gemwzMDczeF9yZWFkX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIFxcdTAwMjZzZWMpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdC8qIEhXIG5hbm9zZWNvbmRzIGFyZSBhbHdheXMgaW4gWzAsIE5TRUNfUEVSX1NFQykgcmFuZ2UgKi9cXG4rXFx0cmMgPSB6bDMwNzN4X3JlYWRfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCBcXHUwMDI2bnNlYyk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0dHMtXFx1MDAzZXR2X3NlYyA9IHNlYztcXG4rXFx0dHMtXFx1MDAzZXR2X25zZWMgPSBuc2VjO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlIC0gd3JpdGUgVG9EIHJlZ2lzdGVycyBhbmQgdHJpZ2dlciAxIEh6IHVwZGF0ZVxcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4rICogQHRzOiB0aW1lIHRvIHNldFxcbisgKlxcbisgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbitcXHRcXHRcXHQgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cylcXG4re1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVG9EIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xcbitcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9TRUMoY2gpLCB0cy50dl9zZWMpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19EUExMX1RPRF9OUyhjaCksIHRzLnR2X25zZWMpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLFxcbitcXHRcXHRcXHRcXHQgICAgIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0IC0gYXRvbWljIFRvRCByZWFkLW1vZGlmeS13cml0ZSB3aXRoIHJvbGxvdmVyIGd1YXJkXFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxcbisgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCB0byBhcHBseVxcbisgKlxcbisgKiBSZWFkcyB0aGUgbmV4dC1IeiBUb0QgYW5kIGN1cnJlbnQgVG9ELCB0aGVuIGNoZWNrcyB3aGV0aGVyIGVub3VnaCB0aW1lXFxuKyAqIHJlbWFpbnMgYmVmb3JlIHRoZSBuZXh0IDEgSHogcm9sbG92ZXIgdG8gc2FmZWx5IGNvbXBsZXRlIHRoZSB3cml0ZS5cXG4rICogUmUtcmVhZHMgaWYgdGhlIDEgSHogdGljayBjcm9zc2VkIGJldHdlZW4gdGhlIHR3byByZWFkcyBvciBpZiBsZXNzXFxuKyAqIHRoYW4gMjAgbXMgcmVtYWlucyBiZWZvcmUgdGhlIG5leHQgcm9sbG92ZXIuIEFwcGxpZXMgQGRlbHRhIGFuZCB3cml0ZXNcXG4rICogdGhlIHJlc3VsdCBiYWNrLlxcbisgKlxcbisgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK2ludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG4rXFx0XFx0XFx0ICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKVxcbit7XFxuKyNkZWZpbmUgWkxfVE9EX01BWF9SRVRSSUVTXFx0MjBcXG4rXFx0c3RhdGljIGNvbnN0IGxvbmcgdGhyZXNob2xkX25zID0gMjAgKiBOU0VDX1BFUl9NU0VDO1xcbitcXHRzdHJ1Y3QgdGltZXNwZWM2NCB0c19uZXh0LCB0c19jdXIsIGRpZmY7XFxuK1xcdGludCByYywgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBaTF9UT0RfTUFYX1JFVFJJRVM7IGkrKykge1xcbitcXHRcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRldiwgY2gsIHRydWUsIFxcdTAwMjZ0c19uZXh0LCBOVUxMKTtcXG4rXFx0XFx0aWYgKHJjKVxcbitcXHRcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRldiwgY2gsIGZhbHNlLCBcXHUwMDI2dHNfY3VyLCBOVUxMKTtcXG4rXFx0XFx0aWYgKHJjKVxcbitcXHRcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRcXHQvKiBFbnN1cmUgdGhlIDEgSHogdGljayBkaWQgbm90IGNyb3NzIGJldHdlZW4gdGhlIHR3byByZWFkc1xcbitcXHRcXHQgKiBhbmQgdGhhdCBlbm91Z2ggbWFyZ2luIHJlbWFpbnMgdG8gY29tcGxldGUgdGhlIHdyaXRlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0ZGlmZiA9IHRpbWVzcGVjNjRfc3ViKHRzX25leHQsIHRzX2N1cik7XFxuK1xcdFxcdGlmIChkaWZmLnR2X3NlYyBcXHUwMDNlIDAgfHxcXG4rXFx0XFx0ICAgICghZGlmZi50dl9zZWMgXFx1MDAyNlxcdTAwMjYgZGlmZi50dl9uc2VjIFxcdTAwM2U9IHRocmVzaG9sZF9ucykpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcdGlmIChpID09IFpMX1RPRF9NQVhfUkVUUklFUykge1xcbitcXHRcXHRkZXZfd2Fybih6bGRldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHQgXFxcIkRQTEwldSBUb0QgYWRqdXN0IGZhaWxlZCB0byBnZXQgc3RhYmxlIG1hcmdpblxcXFxuXFxcIixcXG4rXFx0XFx0XFx0IGNoKTtcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFx0fVxcbitcXG4rXFx0LyogQXBwbHkgZGVsdGEgdG8gdGhlIG5leHQtSHogVG9EICovXFxuK1xcdHRzX25leHQgPSB0aW1lc3BlYzY0X2FkZCh0c19uZXh0LCBkZWx0YSk7XFxuK1xcdGlmICghdGltZXNwZWM2NF92YWxpZF9zZXR0b2QoXFx1MDAyNnRzX25leHQpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZGV2LCBjaCwgdHNfbmV4dCk7XFxuKyN1bmRlZiBaTF9UT0RfTUFYX1JFVFJJRVNcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0IC0gd3JpdGUgZGVsdGEgZnJlcXVlbmN5IG9mZnNldCB0byBoYXJkd2FyZVxcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4rICogQG9mZnNldDogZnJlcXVlbmN5IG9mZnNldCBpbiAyXi00OCBzdGVwc1xcbisgKlxcbisgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBob2xkIHRoZSBwZXItRFBMTCBsb2NrLlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldClcXG4re1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9PRkZTRVQoY2gpLCBvZmZzZXQpO1xcbitcXHRpZiAoIXJjKVxcbitcXHRcXHR6bGRldi1cXHUwMDNlY2hhbltjaF0uZGZfb2Zmc2V0ID0gb2Zmc2V0O1xcbitcXG4rXFx0cmV0dXJuIHJjO1xcbit9XFxuK1xcbisvKipcXG4rICogemwzMDczeF9jaGFuX3RpZV93cml0ZSAtIGFkanVzdCBEUExMIHBoYXNlIHVzaW5nIFRJRSB3cml0ZVxcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4rICogQGRlbHRhX25zOiBwaGFzZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzIChtdXN0IGJlIGluICgtMXMsIDFzKSlcXG4rICpcXG4rICogQ29udmVydHMgbmFub3NlY29uZHMgdG8gVElFIHVuaXRzICgwLjAxIHBzKSBhbmQgd3JpdGVzIFRJRSBkYXRhXFxuKyAqIHRvIHRoZSBzcGVjaWZpZWQgY2hhbm5lbC5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitpbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKVxcbit7XFxuK1xcdHM2NCB0aWVfZGF0YTtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZ6bGRldi1cXHUwMDNldGllX2xvY2spO1xcbitcXG4rXFx0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRJRSBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cXG4rXFx0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsXFxuK1xcdFxcdFxcdFxcdCAgWkxfRFBMTF9USUVfQ1RSTF9PUCxcXG4rXFx0XFx0XFx0XFx0ICBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHQvKiBDb252ZXJ0IG5zIHRvIFRJRSB1bml0cyAoMC4wMSBwcyA9IDEwXi0xNCBzKSAqL1xcbitcXHR0aWVfZGF0YSA9IGRlbHRhX25zICogMTAwMDAwTEw7XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfREFUQShjaCksIHRpZV9kYXRhKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0ssIEJJVChjaCkpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTCxcXG4rXFx0XFx0XFx0XFx0WkxfRFBMTF9USUVfQ1RSTF9PUF9XUik7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCAtIGV4ZWN1dGUgb25lIG91dHB1dCBwaGFzZSBzdGVwIG9wZXJhdGlvblxcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4rICogQG91dF9tYXNrOiBiaXRtYXNrIG9mIG91dHB1dHMgdG8gc3RlcFxcbisgKiBAc3RlcF9jeWNsZXM6IHBoYXNlIHN0ZXAgaW4gc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzXFxuKyAqIEB0b2Rfc3RlcDogYWxzbyBzdGVwIHRoZSBUb0QgY291bnRlclxcbisgKlxcbisgKiBBbGwgbWFza2VkIG91dHB1dHMgbXVzdCB1c2Ugc3ludGhlc2l6ZXJzIG9mIHRoZSBzYW1lIGZyZXF1ZW5jeSBzaW5jZVxcbisgKiB0aGUgc3RlcCB2YWx1ZSBpcyBpbiBzeW50aGVzaXplciBjbG9jayBjeWNsZXMuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4raW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbitcXHRcXHRcXHQgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsXFxuK1xcdFxcdFxcdCAgICBib29sIHRvZF9zdGVwKVxcbit7XFxuK1xcdHU4IGN0cmw7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2emxkZXYtXFx1MDAzZXBoYXNlX3N0ZXBfbG9jayk7XFxuK1xcbitcXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgcGhhc2Ugc3RlcCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cXG4rXFx0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwsXFxuK1xcdFxcdFxcdFxcdCAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCxcXG4rXFx0XFx0XFx0XFx0ICBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VUyk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0RBVEEsXFxuK1xcdFxcdFxcdCAgICAgICBzdGVwX2N5Y2xlcyk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3dyaXRlX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX01BU0ssIG91dF9tYXNrKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9OVU1CRVIsIDEpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdGN0cmwgPSBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfRFBMTCwgY2gpIHxcXG4rXFx0ICAgICAgIEZJRUxEX1BSRVAoWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCxcXG4rXFx0XFx0XFx0ICBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1dSSVRFKTtcXG4rXFx0aWYgKHRvZF9zdGVwKVxcbitcXHRcXHRjdHJsIHw9IFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVA7XFxuK1xcbitcXHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwsIGN0cmwpO1xcbit9XFxuK1xcbiAvKipcXG4gICogemwzMDczeF9jaGFuX3N0YXRlX3NldCAtIGNvbW1pdCBEUExMIGNoYW5uZWwgc3RhdGUgY2hhbmdlcyB0byBoYXJkd2FyZVxcbiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaFxcbmluZGV4IGRjOWM2ZDk1YmRlZTcuLjk5YzNiNzA4OGY2NzggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXFxuQEAgLTUsMTAgKzUsMTIgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RkZGVmLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC90aW1lNjQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwicmVncy5oXFxcIlxcbiBcXG4rc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wO1xcbiBzdHJ1Y3QgemwzMDczeF9kZXY7XFxuIFxcbiAvKipcXG5AQCAtNDIsNiArNDQsMjEgQEAgaW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgsXFxuIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfdXBkYXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTtcXG4gaW50IHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpO1xcbiBcXG4raW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCk7XFxuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuK1xcdFxcdFxcdCAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXFxuK1xcdFxcdFxcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpO1xcbitpbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG4rXFx0XFx0XFx0ICAgc3RydWN0IHRpbWVzcGVjNjQgdHMpO1xcbitpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YSk7XFxuK2ludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG4rXFx0XFx0XFx0ICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLCBib29sIHRvZF9zdGVwKTtcXG4rXFxuK2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldCk7XFxuK1xcbitpbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKTtcXG4rXFxuIC8qKlxcbiAgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X2dldCAtIGdldCBjYWNoZWQgZGZfb2Zmc2V0IHZzIHRyYWNrZWQgcmVmZXJlbmNlXFxuICAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcXG5AQCAtMjAwLDYgKzIxNywyMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgemwzMDczeF9jaGFuX21vZGVfaXNfcmVmbG9jayhjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxcbiBcXHRyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfZ2V0KGNoYW4pID09IFpMX0RQTExfTU9ERV9SRUZTRUxfTU9ERV9SRUZMT0NLO1xcbiB9XFxuIFxcbisvKipcXG4rICogemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllIC0gY2hlY2sgaWYgY2hhbm5lbCBtb2RlIHN1cHBvcnRzIFRJRSB3cml0ZVxcbisgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXFxuKyAqXFxuKyAqIFRJRSB3cml0ZSBpcyBzdXBwb3J0ZWQgaW4gQVVUTyBhbmQgUkVGTE9DSyBtb2RlcyByZWdhcmRsZXNzIG9mIGxvY2sgc3RhdGUuXFxuKyAqXFxuKyAqIFJldHVybjogdHJ1ZSBpZiBUSUUgd3JpdGUgaXMgc3VwcG9ydGVkLCBmYWxzZSBvdGhlcndpc2VcXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgYm9vbFxcbit6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcXG4re1xcbitcXHRyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfaXNfYXV0byhjaGFuKSB8fFxcbitcXHRcXHR6bDMwNzN4X2NoYW5fbW9kZV9pc19yZWZsb2NrKGNoYW4pO1xcbit9XFxuK1xcbiAvKipcXG4gICogemwzMDczeF9jaGFuX2lzX2hvX3JlYWR5IC0gY2hlY2sgaWYgaG9sZG92ZXIgaXMgcmVhZHlcXG4gICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcXG5pbmRleCA1YjJkNzdmMmMyMjg4Li4yMzBkZjA4ZTI3Y2QxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1xcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1xcbkBAIC0zMjIsNyArMzIyLDcgQEAgaW50IHpsMzA3M3hfd3JpdGVfdTQ4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsIHU2NCB2YWwpXFxuIGludCB6bDMwNzN4X3BvbGxfemVyb191OChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLFxcbiBcXHRcXHRcXHQgdTggbWFzaywgdW5zaWduZWQgaW50IHRpbWVvdXRfdXMpXFxuIHtcXG4tI2RlZmluZSBaTF9QT0xMX1NMRUVQX1VTIDEwXFxuK1xcdHVuc2lnbmVkIGludCBzbGVlcF91cyA9IHRpbWVvdXRfdXMgLyA1MDtcXG4gXFx0dW5zaWduZWQgaW50IHZhbDtcXG4gXFxuIFxcdC8qIENoZWNrIHRoZSByZWdpc3RlciBpcyA4Yml0ICovXFxuQEAgLTMzNiw3ICszMzYsNyBAQCBpbnQgemwzMDczeF9wb2xsX3plcm9fdTgoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IHJlZyxcXG4gXFx0cmVnID0gWkxfUkVHX0FERFIocmVnKSArIFpMX1JBTkdFX09GRlNFVDtcXG4gXFxuIFxcdHJldHVybiByZWdtYXBfcmVhZF9wb2xsX3RpbWVvdXQoemxkZXYtXFx1MDAzZXJlZ21hcCwgcmVnLCB2YWwsICEodmFsIFxcdTAwMjYgbWFzayksXFxuLVxcdFxcdFxcdFxcdFxcdFpMX1BPTExfU0xFRVBfVVMsIHRpbWVvdXRfdXMpO1xcbitcXHRcXHRcXHRcXHRcXHRzbGVlcF91cywgdGltZW91dF91cyk7XFxuIH1cXG4gXFxuIGludCB6bDMwNzN4X21iX29wKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCBvcF9yZWcsIHU4IG9wX3ZhbCxcXG5AQCAtNTExLDYgKzUxMSwxMSBAQCB6bDMwNzN4X2Rldl9zdGF0ZV9mZXRjaChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxcbiBcXHRpbnQgcmM7XFxuIFxcdHU4IGk7XFxuIFxcbitcXHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfU1RFUF9USU1FX01BU0ssXFxuK1xcdFxcdFxcdCAgICAgIFxcdTAwMjZ6bGRldi1cXHUwMDNlb3V0X3N0ZXBfdGltZV9tYXNrKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgWkwzMDczWF9OVU1fUkVGUzsgaSsrKSB7XFxuIFxcdFxcdHJjID0gemwzMDczeF9yZWZfc3RhdGVfZmV0Y2goemxkZXYsIGkpO1xcbiBcXHRcXHRpZiAocmMpIHtcXG5AQCAtMTAzNCw2ICsxMDM5LDE0IEBAIGludCB6bDMwNzN4X2Rldl9wcm9iZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxcbiBcXHQgKiBhbmQvb3IgcG9sbHMgYXJlIHJlcXVpcmVkIHRvIGJlIGRvbmUgYXRvbWljYWxseS5cXG4gXFx0ICovXFxuIFxcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVxcdTAwM2VkZXYsIFxcdTAwMjZ6bGRldi1cXHUwMDNlbXVsdGlvcF9sb2NrKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cXHUwMDNlZGV2LCByYyxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiRmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXFxcblxcXCIpO1xcbitcXHRyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi1cXHUwMDNlZGV2LCBcXHUwMDI2emxkZXYtXFx1MDAzZXBoYXNlX3N0ZXBfbG9jayk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXFx1MDAzZWRldiwgcmMsXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxcXG5cXFwiKTtcXG4rXFx0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXFx1MDAzZWRldiwgXFx1MDAyNnpsZGV2LVxcdTAwM2V0aWVfbG9jayk7XFxuIFxcdGlmIChyYylcXG4gXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXFx1MDAzZWRldiwgcmMsXFxuIFxcdFxcdFxcdFxcdCAgICAgXFxcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxcXG5cXFwiKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oXFxuaW5kZXggNzhkYzIwOGYzZWVhMi4uNjdjMTBlMjU5NTExOCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcXG5AQCAtMjYsNiArMjYsMTAgQEAgc3RydWN0IHpsMzA3M3hfZHBsbDtcXG4gI2RlZmluZSBaTF9QT0xMX0hXUkVHX1RJTUVPVVRfVVNcXHQoNTAgKiBVU0VDX1BFUl9NU0VDKVxcbiAjZGVmaW5lIFpMX1BPTExfTUJfVElNRU9VVF9VU1xcdFxcdCgzMCAqIFVTRUNfUEVSX01TRUMpXFxuICNkZWZpbmUgWkxfUE9MTF9QSEFTRV9FUlJfVElNRU9VVF9VU1xcdCg1MCAqIFVTRUNfUEVSX01TRUMpXFxuKyNkZWZpbmUgWkxfUE9MTF9QSEFTRV9TVEVQX1RJTUVPVVRfVVNcXHQoMzAwMCAqIFVTRUNfUEVSX01TRUMpXFxuKyNkZWZpbmUgWkxfUE9MTF9USUVfV1JfVElNRU9VVF9VU1xcdCgxMDAwICogVVNFQ19QRVJfTVNFQylcXG4rI2RlZmluZSBaTF9QT0xMX1RPRF9SRF9USU1FT1VUX1VTXFx0KDMwICogVVNFQ19QRVJfTVNFQylcXG4rI2RlZmluZSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTXFx0KDEwMDAgKiBVU0VDX1BFUl9NU0VDKVxcbiBcXG4gZW51bSB6bDMwNzN4X2ZsYWdzIHtcXG4gXFx0WkwzMDczWF9GTEFHX1JFRl9QSEFTRV9DT01QXzMyX0JJVCxcXG5AQCAtNTUsNiArNTksOCBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8ge1xcbiAgKiBAcmVnbWFwOiByZWdtYXAgdG8gYWNjZXNzIGRldmljZSByZWdpc3RlcnNcXG4gICogQGluZm86IGRldGVjdGVkIGNoaXAgaW5mb1xcbiAgKiBAbXVsdGlvcF9sb2NrOiB0byBzZXJpYWxpemUgbXVsdGlwbGUgcmVnaXN0ZXIgb3BlcmF0aW9uc1xcbisgKiBAdGllX2xvY2s6IHRvIHNlcmlhbGl6ZSBUSUUgd3JpdGUgb3BlcmF0aW9uc1xcbisgKiBAcGhhc2Vfc3RlcF9sb2NrOiB0byBzZXJpYWxpemUgb3V0cHV0IHBoYXNlIHN0ZXAgb3BlcmF0aW9uc1xcbiAgKiBAcmVmOiBhcnJheSBvZiBpbnB1dCByZWZlcmVuY2VzJyBpbnZhcmlhbnRzXFxuICAqIEBvdXQ6IGFycmF5IG9mIG91dHMnIGludmFyaWFudHNcXG4gICogQHN5bnRoOiBhcnJheSBvZiBzeW50aHMnIGludmFyaWFudHNcXG5AQCAtNjMsNiArNjksNyBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8ge1xcbiAgKiBAa3dvcmtlcjogdGhyZWFkIGZvciBwZXJpb2RpYyB3b3JrXFxuICAqIEB3b3JrOiBwZXJpb2RpYyB3b3JrXFxuICAqIEBjbG9ja19pZDogY2xvY2sgaWQgb2YgdGhlIGRldmljZVxcbisgKiBAb3V0X3N0ZXBfdGltZV9tYXNrOiBvdXRwdXQgc3RlcC10aW1lIG1hc2sgKGRldmljZS1nbG9iYWwpXFxuICAqIEBwaGFzZV9hdmdfZmFjdG9yOiBwaGFzZSBvZmZzZXQgbWVhc3VyZW1lbnQgYXZlcmFnaW5nIGZhY3RvclxcbiAgKiBAZnJlcV9tb25pdG9yOiBpcyBmcmVxdWVuY3kgbW9uaXRvciBlbmFibGVkXFxuICAqL1xcbkBAIC03MSw2ICs3OCw4IEBAIHN0cnVjdCB6bDMwNzN4X2RldiB7XFxuIFxcdHN0cnVjdCByZWdtYXBcXHRcXHRcXHQqcmVnbWFwO1xcbiBcXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm9cXHQqaW5mbztcXG4gXFx0c3RydWN0IG11dGV4XFx0XFx0XFx0bXVsdGlvcF9sb2NrO1xcbitcXHRzdHJ1Y3QgbXV0ZXhcXHRcXHRcXHR0aWVfbG9jaztcXG4rXFx0c3RydWN0IG11dGV4XFx0XFx0XFx0cGhhc2Vfc3RlcF9sb2NrO1xcbiBcXG4gXFx0LyogSW52YXJpYW50cyAqL1xcbiBcXHRzdHJ1Y3QgemwzMDczeF9yZWZcXHRyZWZbWkwzMDczWF9OVU1fUkVGU107XFxuQEAgLTg3LDYgKzk2LDcgQEAgc3RydWN0IHpsMzA3M3hfZGV2IHtcXG4gXFxuIFxcdC8qIFBlci1jaGlwIHBhcmFtZXRlcnMgKi9cXG4gXFx0dTY0XFx0XFx0XFx0Y2xvY2tfaWQ7XFxuK1xcdHUxNlxcdFxcdFxcdG91dF9zdGVwX3RpbWVfbWFzaztcXG4gXFx0dThcXHRcXHRcXHRwaGFzZV9hdmdfZmFjdG9yO1xcbiBcXHRib29sXFx0XFx0XFx0ZnJlcV9tb25pdG9yO1xcbiB9O1xcbkBAIC0zMDgsNiArMzE4LDE5IEBAIHpsMzA3M3hfZGV2X291dF9pc19lbmFibGVkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxcbiBcXHRyZXR1cm4gemwzMDczeF9zeW50aF9pc19lbmFibGVkKHN5bnRoKSBcXHUwMDI2XFx1MDAyNiB6bDMwNzN4X291dF9pc19lbmFibGVkKG91dCk7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiB6bDMwNzN4X2Rldl9vdXRfaXNfc3RlcHBlZCAtIGNoZWNrIGlmIG91dHB1dCBpcyBpbiBzdGVwLXRpbWUgbWFza1xcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGluZGV4OiBvdXRwdXQgaW5kZXhcXG4rICpcXG4rICogUmV0dXJuOiB0cnVlIGlmIG91dHB1dCBpcyBhZmZlY3RlZCBieSBzdGVwLXRpbWUgb3BlcmF0aW9uc1xcbisgKi9cXG4rc3RhdGljIGlubGluZSBib29sXFxuK3psMzA3M3hfZGV2X291dF9pc19zdGVwcGVkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxcbit7XFxuK1xcdHJldHVybiAhISh6bGRldi1cXHUwMDNlb3V0X3N0ZXBfdGltZV9tYXNrIFxcdTAwMjYgQklUKGluZGV4KSk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiB6bDMwNzN4X2Rldl9vdXRfZHBsbF9nZXQgLSBnZXQgRFBMTCBJRCB0aGUgb3V0cHV0IGlzIGRyaXZlbiBieVxcbiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jXFxuaW5kZXggODNiZDMwMjdkYmFhMS4uZjJlMTM3NDc1YjQwZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcXG5AQCAtMiw2ICsyLDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY2xlYW51cC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYnVnLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb250YWluZXJfb2YuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Rldl9wcmludGsuaFxcdTAwM2VcXG5AQCAtMTMsNiArMTQsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0bGluay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3ByaW50Zi5oXFx1MDAzZVxcbiBcXG5AQCAtMjMxMyw0NSArMjMxNSwzODQgQEAgemwzMDczeF9kcGxsX2luaXRfZmluZV9waGFzZV9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcXG4gXFx0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19TWU5USF9QSEFTRV9TSElGVF9DVFJMLCAweDAxKTtcXG4gfVxcbiBcXG4rLyogTWF4aW11bSBmcmVxdWVuY3kgYWRqdXN0bWVudDogKy0xJSBvZiBub21pbmFsIGluIHBwYiAqL1xcbisjZGVmaW5lIFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESlxcdDEwMDAwMDAwXFxuK1xcbiAvKipcXG4tICogemwzMDczeF9kcGxsX2FsbG9jIC0gYWxsb2NhdGUgRFBMTCBkZXZpY2VcXG4tICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuLSAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlclxcbisgKiB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQgLSByZWFkIGN1cnJlbnQgdGltZSBmcm9tIFRvRCBjb3VudGVyc1xcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cXG4rICogQHRzOiB0aW1lc3BlYyB0byBzdG9yZSBjdXJyZW50IHRpbWVcXG4rICogQHN0czogb3B0aW9uYWwgc3lzdGVtIHRpbWVzdGFtcCBwYWlyIGZvciBjcm9zcy10aW1lc3RhbXBpbmdcXG4gICpcXG4tICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKVxcbit7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBwdHBfaW5mbyk7XFxuK1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZHBsbC1cXHUwMDNlZGV2LCB6bGRwbGwtXFx1MDAzZWlkLCBmYWxzZSwgdHMsIHN0cyk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCAtIHNldCBUb0QgY291bnRlcnMgdG8gZ2l2ZW4gdGltZVxcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cXG4rICogQHRzOiB0aW1lc3BlYyB3aXRoIHRpbWUgdG8gc2V0XFxuICAqXFxuLSAqIFJldHVybjogcG9pbnRlciB0byBEUExMIGRldmljZSBvbiBzdWNjZXNzLCBlcnJvciBwb2ludGVyIG9uIGVycm9yXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbiAgKi9cXG4tc3RydWN0IHpsMzA3M3hfZHBsbCAqXFxuLXpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXFxuK1xcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcXG4ge1xcbi1cXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBwdHBfaW5mbyk7XFxuIFxcbi1cXHR6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTtcXG4tXFx0aWYgKCF6bGRwbGwpXFxuLVxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuIFxcbi1cXHR6bGRwbGwtXFx1MDAzZWRldiA9IHpsZGV2O1xcbi1cXHR6bGRwbGwtXFx1MDAzZWlkID0gY2g7XFxuLVxcdG11dGV4X2luaXQoXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuLVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZ6bGRwbGwtXFx1MDAzZXBpbnMpO1xcbitcXHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF93cml0ZSh6bGRwbGwtXFx1MDAzZWRldiwgemxkcGxsLVxcdTAwM2VpZCwgKnRzKTtcXG4rfVxcbiBcXG4tXFx0cmV0dXJuIHpsZHBsbDtcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwIC0gYWRqdXN0IHN1Yi1zZWNvbmQgdGltZSB2aWEgcGhhc2Ugc3RlcFxcbisgKiBAemxkcGxsOiBEUExMIGNoYW5uZWxcXG4rICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMgKG11c3QgYmUgd2l0aGluICgtTlNFQ19QRVJfU0VDLFxcbisgKiAgICAgICAgIE5TRUNfUEVSX1NFQykpXFxuKyAqXFxuKyAqIFVzZXMgdGhlIG91dHB1dCBwaGFzZSBzdGVwIG1lY2hhbmlzbSB3aXRoIHRvZF9zdGVwPTEgdG8gYWRqdXN0IGJvdGhcXG4rICogdGhlIG91dHB1dCBjbG9jayBwaGFzZSBhbmQgdGhlIFRvRCBjb3VudGVyIHNpbXVsdGFuZW91c2x5LiBUaGlzIGtlZXBzXFxuKyAqIG91dHB1dHMgYW5kIFRvRCBjb2hlcmVudC4gT25seSB2YWxpZCBmb3IgTkNPLlxcbisgKlxcbisgKiBPdXRwdXRzIGFyZSBncm91cGVkIGJ5IHN5bnRoZXNpemVyIHNpbmNlIHRoZSBwaGFzZSBzdGVwIHZhbHVlIGlzIGluXFxuKyAqIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcy4gVGhlIGZpcnN0IHN5bnRoIGdyb3VwIHdpdGggZW5hYmxlZCBvdXRwdXRzXFxuKyAqIHVzZXMgdG9kX3N0ZXAgdG8gYWRqdXN0IGJvdGggb3V0cHV0cyBhbmQgdGhlIFRvRCBjb3VudGVyLiBSZW1haW5pbmdcXG4rICogZ3JvdXBzIHN0ZXAgb3V0cHV0cyBvbmx5LiBJZiBubyBzeW50aCBoYXMgZW5hYmxlZCBvdXRwdXRzLCB0aGUgVG9EXFxuKyAqIGNvdW50ZXIgaXMgc3RlcHBlZCBhbG9uZSB1c2luZyBhbiBlbXB0eSBvdXRwdXQgbWFzayAodGhlIEZXIHVzZXNcXG4rICogdGhlIGZpcnN0IGVuYWJsZWQgc3ludGgncyBwZXJpb2QgZm9yIHRoZSBjb252ZXJzaW9uKS5cXG4rICpcXG4rICogUmV0dXJuOlxcbisgKiAqICUwXFx0XFx0XFx0LSBzdWNjZXNzIChvciBwYXJ0aWFsIHN1Y2Nlc3MgaWYgYSBsYXRlciBzeW50aCBncm91cFxcbisgKlxcdFxcdFxcdCAgZmFpbGVkIGFmdGVyIHRoZSBmaXJzdCB3YXMgYWxyZWFkeSBzdGVwcGVkKVxcbisgKiAqICUtRU9QTk9UU1VQUFxcdC0gbm8gc3ludGhzIGF2YWlsYWJsZVxcbisgKiAqIG5lZ2F0aXZlXFx0XFx0LSBlcnJvclxcbisgKi9cXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBzNjQgZGVsdGEpXFxuK3tcXG4rXFx0dTE2IHN5bnRoX21hc2tbWkwzMDczWF9OVU1fU1lOVEhTXSA9IHt9O1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVxcdTAwM2VkZXY7XFxuK1xcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X3N5bnRoICpzeW50aDtcXG4rXFx0c3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbjtcXG4rXFx0dTMyIGZpcnN0X3N5bnRoX2ZyZXEgPSAwO1xcbitcXHRib29sIHRvZF9zdGVwcGVkID0gZmFsc2U7XFxuK1xcdHMzMiBzdGVwX2N5Y2xlcztcXG4rXFx0dTMyIHN5bnRoX2ZyZXE7XFxuK1xcdGludCByYztcXG4rXFx0dTggaTtcXG4rXFxuK1xcdC8qIEJ1aWxkIHBlci1zeW50aCBvdXRwdXQgbWFza3MgZnJvbSByZWdpc3RlcmVkIG91dHB1dCBwaW5zICovXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnkocGluLCBcXHUwMDI2emxkcGxsLVxcdTAwM2VwaW5zLCBsaXN0KSB7XFxuK1xcdFxcdHU4IG91dF9pZCwgc3ludGhfaWQ7XFxuK1xcbitcXHRcXHRpZiAoemwzMDczeF9kcGxsX2lzX2lucHV0X3BpbihwaW4pKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdG91dF9pZCA9IHpsMzA3M3hfb3V0cHV0X3Bpbl9vdXRfZ2V0KHBpbi1cXHUwMDNlaWQpO1xcbitcXG4rXFx0XFx0aWYgKCF6bDMwNzN4X2Rldl9vdXRfaXNfc3RlcHBlZCh6bGRldiwgb3V0X2lkKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRzeW50aF9pZCA9IHpsMzA3M3hfZGV2X291dF9zeW50aF9nZXQoemxkZXYsIG91dF9pZCk7XFxuK1xcdFxcdGlmIChzeW50aF9pZCBcXHUwMDNlPSBaTDMwNzNYX05VTV9TWU5USFMpIHtcXG4rXFx0XFx0XFx0ZGV2X3dhcm4oemxkZXYtXFx1MDAzZWRldiwgXFxcIlVuZXhwZWN0ZWQgc3ludGggaWQgZm9yIE9VVCV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgb3V0X2lkKTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFx0XFx0c3ludGhfbWFza1tzeW50aF9pZF0gfD0gQklUKG91dF9pZCk7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFByb2Nlc3MgZWFjaCBzeW50aCBncm91cCAqL1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgWkwzMDczWF9OVU1fU1lOVEhTOyBpKyspIHtcXG4rXFx0XFx0c3ludGggPSB6bDMwNzN4X3N5bnRoX3N0YXRlX2dldCh6bGRldiwgaSk7XFxuK1xcdFxcdGlmICghemwzMDczeF9zeW50aF9pc19lbmFibGVkKHN5bnRoKSB8fFxcbitcXHRcXHQgICAgemwzMDczeF9zeW50aF9kcGxsX2dldChzeW50aCkgIT0gemxkcGxsLVxcdTAwM2VpZClcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRzeW50aF9mcmVxID0gemwzMDczeF9zeW50aF9mcmVxX2dldChzeW50aCk7XFxuK1xcbitcXHRcXHQvKiBSZW1lbWJlciBmaXJzdCBlbmFibGVkIHN5bnRoIGZyZXEgZm9yIFRvRC1vbmx5IGZhbGxiYWNrICovXFxuK1xcdFxcdGlmICghZmlyc3Rfc3ludGhfZnJlcSlcXG4rXFx0XFx0XFx0Zmlyc3Rfc3ludGhfZnJlcSA9IHN5bnRoX2ZyZXE7XFxuK1xcbitcXHRcXHRpZiAoIXN5bnRoX21hc2tbaV0pXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0LyogU2FmZSBmb3IgczMyOiBtYXggc3ludGggZnJlcSBpcyA3NTAgTUh6ICovXFxuK1xcdFxcdHN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIHN5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7XFxuK1xcbitcXHRcXHRyYyA9IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHN5bnRoX21hc2tbaV0sIHN0ZXBfY3ljbGVzLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICF0b2Rfc3RlcHBlZCk7XFxuK1xcdFxcdGlmIChyYykge1xcbitcXHRcXHRcXHRpZiAodG9kX3N0ZXBwZWQpIHtcXG4rXFx0XFx0XFx0XFx0ZGV2X3dhcm4oemxkZXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0XFx0IFxcXCJQYXJ0aWFsIHBoYXNlIHN0ZXAgZmFpbHVyZVxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdHJldHVybiByYztcXG4rXFx0XFx0fVxcbitcXHRcXHR0b2Rfc3RlcHBlZCA9IHRydWU7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghZmlyc3Rfc3ludGhfZnJlcSlcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0LyogTm8gZW5hYmxlZCBvdXRwdXRzIGZvdW5kOyBzdGVwIFRvRCBjb3VudGVyIG9ubHkgdXNpbmcgdGhlXFxuK1xcdCAqIGZpcnN0IGVuYWJsZWQgc3ludGgncyBwZXJpb2QgKGVtcHR5IG91dHB1dCBtYXNrKS5cXG4rXFx0ICovXFxuK1xcdGlmICghdG9kX3N0ZXBwZWQpIHtcXG4rXFx0XFx0c3RlcF9jeWNsZXMgPSBkaXZfczY0KGRlbHRhICogZmlyc3Rfc3ludGhfZnJlcSwgTlNFQ19QRVJfU0VDKTtcXG4rXFx0XFx0cmV0dXJuIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkLCAwLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RlcF9jeWNsZXMsIHRydWUpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gLyoqXFxuLSAqIHpsMzA3M3hfZHBsbF9mcmVlIC0gZnJlZSBEUExMIGRldmljZVxcbi0gKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmVcXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lIC0gYWRqdXN0IFBUUCBjbG9jayB0aW1lXFxuKyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xcbisgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kc1xcbiAgKlxcbi0gKiBEZWFsbG9jYXRlcyBnaXZlbiBEUExMIGRldmljZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBieSBAemwzMDczeF9kcGxsX2FsbG9jLlxcbisgKiBGb3IgTkNPLCBsYXJnZSBkZWx0YXMgKFxcdTAwM2U9IDEgc2Vjb25kKSBhcmUgc3BsaXQgaW50byBhIFRvRFxcbisgKiByZWFkLW1vZGlmeS13cml0ZSBmb3IgdGhlIHNlY29uZHMgcGFydCBhbmQgYW4gb3V0cHV0IHBoYXNlIHN0ZXAgZm9yXFxuKyAqIHRoZSBzdWItc2Vjb25kIHJlbWFpbmRlci4gU3ViLXNlY29uZCBkZWx0YXMgdXNlIHBoYXNlIHN0ZXAgZGlyZWN0bHksXFxuKyAqIGZhbGxpbmcgYmFjayB0byBUb0QgcmVhZC1tb2RpZnktd3JpdGUgaWYgcGhhc2Ugc3RlcCBvciBUSUUgd3JpdGVcXG4rICogZmFpbHMuIEluIEFVVE8vUkVGTE9DSyBtb2RlcywgbGFyZ2UgZGVsdGFzIGFyZSBzcGxpdCBpbnRvIFRvRFxcbisgKiByZWFkLW1vZGlmeS13cml0ZSBmb3Igc2Vjb25kcyBhbmQgVElFIHdyaXRlIGZvciB0aGUgc3ViLXNlY29uZFxcbisgKiByZW1haW5kZXIuIFN1Yi1zZWNvbmQgZGVsdGFzIHVzZSBUSUUgd3JpdGUgZGlyZWN0bHkuXFxuKyAqXFxuKyAqIElmIHRoZSBzZWNvbmRzIHBhcnQgd2FzIGFscmVhZHkgY29tbWl0dGVkIHdoZW4gdGhlIHN1Yi1zZWNvbmRcXG4rICogbWVjaGFuaXNtIGZhaWxzLCByZXR1cm5zIDAgdG8gcHJldmVudCB0aGUgUFRQIHNlcnZvIGZyb20gcmV0cnlpbmdcXG4rICogdGhlIGZ1bGwgZGVsdGEgYW5kIGFwcGx5aW5nIHNlY29uZHMgYWdhaW4uXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzIChvciBwYXJ0aWFsIHN1Y2Nlc3MpLCBcXHUwMDNjMCBvbiBlcnJvclxcbiAgKi9cXG4tdm9pZFxcbi16bDMwNzN4X2RwbGxfZnJlZShzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXFxuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczY0IGRlbHRhKVxcbiB7XFxuLVxcdFdBUk4oemxkcGxsLVxcdTAwM2VkcGxsX2RldiwgXFxcIkRQTEwgZGV2aWNlIGlzIHN0aWxsIHJlZ2lzdGVyZWRcXFxcblxcXCIpO1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgcHRwX2luZm8pO1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVxcdTAwM2VkZXY7XFxuK1xcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XFxuK1xcdGJvb2wgc2VjX2FkanVzdGVkID0gZmFsc2U7XFxuK1xcdHN0cnVjdCB0aW1lc3BlYzY0IHRzO1xcbitcXHRpbnQgcmM7XFxuIFxcbi1cXHRtdXRleF9kZXN0cm95KFxcdTAwMjZ6bGRwbGwtXFx1MDAzZWxvY2spO1xcbi1cXHRrZnJlZSh6bGRwbGwpO1xcbitcXHRpZiAoIWRlbHRhKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdC8qIE1vZGVzIHdpdGhvdXQgcGhhc2Ugc3RlcCBvciBUSUUgdXNlIHBsYWluIFRvRCBhZGp1c3QgKi9cXG4rXFx0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQpO1xcbitcXHRpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIXpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjaGFuKSlcXG4rXFx0XFx0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgbnNfdG9fdGltZXNwZWM2NChkZWx0YSkpO1xcbitcXG4rXFx0LyogU3BsaXQgb2ZmIHNlY29uZHMgdmlhIFRvRCByZWFkLW1vZGlmeS13cml0ZSBzbyB0aGUgc3ViLXNlY29uZFxcbitcXHQgKiByZW1haW5kZXIgY2FuIGJlIGFwcGxpZWQgdGhyb3VnaCB0aGUgb3V0cHV0LWNvaGVyZW50IG1lY2hhbmlzbVxcbitcXHQgKiAocGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUpLlxcbitcXHQgKi9cXG4rXFx0aWYgKGRlbHRhIFxcdTAwM2U9IE5TRUNfUEVSX1NFQyB8fCBkZWx0YSBcXHUwMDNjPSAtTlNFQ19QRVJfU0VDKSB7XFxuK1xcdFxcdHMzMiByZW1haW5kZXI7XFxuK1xcbitcXHRcXHR0cy50dl9zZWMgPSBkaXZfczY0X3JlbShkZWx0YSwgTlNFQ19QRVJfU0VDLCBcXHUwMDI2cmVtYWluZGVyKTtcXG4rXFx0XFx0dHMudHZfbnNlYyA9IDA7XFxuK1xcdFxcdGRlbHRhID0gcmVtYWluZGVyO1xcbitcXG4rXFx0XFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVxcdTAwM2VpZCwgdHMpO1xcbitcXHRcXHRpZiAocmMpXFxuK1xcdFxcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdFxcdC8qIE5vIHN1Yi1zZWNvbmQgcmVtYWluZGVyLCBkb25lICovXFxuK1xcdFxcdGlmICghZGVsdGEpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0XFx0LyogV2FpdCBmb3IgdGhlIFRvRCB3cml0ZSB0byBiZSBhcHBsaWVkIGF0IHRoZSAxIEh6IGVkZ2VcXG4rXFx0XFx0ICogYmVmb3JlIGlzc3VpbmcgcGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUsIHNvIHRoZSBwZW5kaW5nXFxuK1xcdFxcdCAqIFdSX05FWFRfMUhaIGRvZXMgbm90IG92ZXJ3cml0ZSB0aGUgc3ViLXNlY29uZCBhZGp1c3RtZW50LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQpO1xcbitcXHRcXHRpZiAocmMpXFxuK1xcdFxcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdFxcdHNlY19hZGp1c3RlZCA9IHRydWU7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIEFwcGx5IHN1Yi1zZWNvbmQgZGVsdGEgdmlhIHBoYXNlIHN0ZXAgKE5DTykgb3IgVElFIHdyaXRlICovXFxuK1xcdGlmICh6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikpIHtcXG4rXFx0XFx0cmMgPSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCh6bGRwbGwsIGRlbHRhKTtcXG4rXFx0XFx0aWYgKCFyYylcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHJjID0gemwzMDczeF9jaGFuX3RpZV93cml0ZSh6bGRldiwgemxkcGxsLVxcdTAwM2VpZCwgZGVsdGEpO1xcbitcXHRcXHRpZiAoIXJjKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0LyogUGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUgZmFpbGVkLCBmYWxsIGJhY2sgdG8gVG9EIGFkanVzdCAqL1xcbitcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkLFxcbitcXHRcXHRcXHRcXHQgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTtcXG4rXFxuK1xcdC8qIEluIHRoZSB1bmxpa2VseSBldmVudCB0aGF0IGJvdGggcGhhc2Ugc3RlcC9USUUgd3JpdGUgYW5kIGZhbGxiYWNrXFxuK1xcdCAqIFRvRCBhZGp1c3QgZmFpbCBhZnRlciBzZWNvbmRzIHdlcmUgYWxyZWFkeSBjb21taXR0ZWQsIHJldHVyblxcbitcXHQgKiBzdWNjZXNzIHRvIHByZXZlbnQgdGhlIFBUUCBzZXJ2byBmcm9tIHJldHJ5aW5nIHRoZSBmdWxsIGRlbHRhIGFuZFxcbitcXHQgKiBhcHBseWluZyBzZWNvbmRzIGFnYWluLiBUaGUgc3ViLXNlY29uZCByZXNpZHVhbCB3aWxsIHNlbGYtY29ycmVjdFxcbitcXHQgKiBpbiB0aGUgbmV4dCBzZXJ2byBjeWNsZS5cXG4rXFx0ICovXFxuK1xcdGlmIChyYyBcXHUwMDI2XFx1MDAyNiBzZWNfYWRqdXN0ZWQpIHtcXG4rXFx0XFx0ZGV2X3dhcm4oemxkZXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0IFxcXCJTdWItc2Vjb25kIGFkanVzdG1lbnQgZmFpbGVkIGFmdGVyIHNlY29uZHMgYXBwbGllZFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gcmM7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUgLSBhZGp1c3QgUFRQIGNsb2NrIGZyZXF1ZW5jeVxcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cXG4rICogQHNjYWxlZF9wcG06IGZyZXF1ZW5jeSBhZGp1c3RtZW50IGluIHNjYWxlZCBwcG0gKHBwbSAqIDJeMTYpXFxuKyAqXFxuKyAqIE9ubHkgc3VwcG9ydGVkIGZvciBOQ08uIFdyaXRlcyB0aGUgZGVsdGEgZnJlcXVlbmN5IG9mZnNldCByZWdpc3Rlci5cXG4rICpcXG4rICogUmV0dXJuOlxcbisgKiAqICUwXFx0XFx0XFx0LSBzdWNjZXNzIG9yIEBzY2FsZWRfcHBtIGlzIHplcm8gKG5vLW9wKVxcbisgKiAqICUtRU9QTk9UU1VQUFxcdC0gTkNPIHBpbiBpcyBub3QgY29ubmVjdGVkIGFuZCBAc2NhbGVkX3BwbSBpcyBub24temVyb1xcbisgKiAqIG5lZ2F0aXZlXFx0XFx0LSBvdGhlciBlcnJvclxcbisgKi9cXG4rc3RhdGljIGludFxcbit6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBsb25nIHNjYWxlZF9wcG0pXFxuK3tcXG4rXFx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIHB0cF9pbmZvKTtcXG4rXFx0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjtcXG4rXFx0czY0IG9mZnNldDtcXG4rXFxuK1xcdC8qIENvbnZlcnQgc2NhbGVkX3BwbSB0byBkZl9vZmZzZXQgaW4gMl4tNDggc3RlcHM6XFxuK1xcdCAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogMl4zMikgLyAxMF42XFxuK1xcdCAqXFxuK1xcdCAqIFNpbXBsaWZ5IHRvIGF2b2lkIG92ZXJmbG93OlxcbitcXHQgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDJeMjYpIC8gNV42XFxuK1xcdCAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogNjcxMDg4NjQpIC8gMTU2MjVcXG4rXFx0ICovXFxuK1xcdG9mZnNldCA9IC1kaXZfczY0KChzNjQpc2NhbGVkX3BwbSAqIDY3MTA4ODY0TEwsIDE1NjI1KTtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdGNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZHBsbC1cXHUwMDNlZGV2LCB6bGRwbGwtXFx1MDAzZWlkKTtcXG4rXFx0aWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikpXFxuK1xcdFxcdHJldHVybiBzY2FsZWRfcHBtID8gLUVPUE5PVFNVUFAgOiAwO1xcbitcXHRpZiAob2Zmc2V0ID09IGNoYW4tXFx1MDAzZWRmX29mZnNldClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4gemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoemxkcGxsLVxcdTAwM2VkZXYsIHpsZHBsbC1cXHUwMDNlaWQsIG9mZnNldCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlIC0gYWRqdXN0IFBUUCBjbG9jayBwaGFzZVxcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cXG4rICogQGRlbHRhOiBwaGFzZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzXFxuKyAqXFxuKyAqIE9ubHkgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMuIFVzZXMgVElFIHdyaXRlIGZvclxcbisgKiBuYW5vc2Vjb25kIHJlc29sdXRpb24gcGhhc2UgYWRqdXN0bWVudC5cXG4rICpcXG4rICogUmV0dXJuOlxcbisgKiAqICUwXFx0XFx0XFx0LSBzdWNjZXNzIG9yIEBkZWx0YSBpcyB6ZXJvIChuby1vcClcXG4rICogKiAlLUVPUE5PVFNVUFBcXHQtIG1vZGUgZG9lcyBub3Qgc3VwcG9ydCBUSUUgYW5kIEBkZWx0YSBpcyBub24temVyb1xcbisgKiAqIG5lZ2F0aXZlXFx0XFx0LSBvdGhlciBlcnJvclxcbisgKi9cXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczMyIGRlbHRhKVxcbit7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBwdHBfaW5mbyk7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXFx1MDAzZWRldjtcXG4rXFx0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjtcXG4rXFxuK1xcdGlmICghZGVsdGEpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZ6bGRwbGwtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQpO1xcbitcXG4rXFx0aWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY2hhbikpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHJldHVybiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkLCBkZWx0YSk7XFxuK31cXG4rXFxuK3N0YXRpYyBzMzJcXG4remwzMDczeF9kcGxsX3B0cF9nZXRtYXhwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8gX19hbHdheXNfdW51c2VkKVxcbit7XFxuK1xcdC8qIEhXIGxpbWl0cyBUSUUgd3JpdGUgdG8gKy0xIHNlY29uZC4gUmV0dXJuIHRoZSBjb25zdGFudCBIV1xcbitcXHQgKiBsaW1pdCBhbmQgbGV0IGFkanBoYXNlIGhhbmRsZSBtb2RlLXNwZWNpZmljIGNoZWNrcy5cXG4rXFx0ICovXFxuK1xcdHJldHVybiBOU0VDX1BFUl9TRUMgLSAxO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHB0cF9jbG9ja19pbmZvIHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mbyA9IHtcXG4rXFx0Lm93bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG4rXFx0Lm1heF9hZGpcXHQ9IFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESixcXG4rXFx0LmdldHRpbWV4NjRcXHQ9IHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCxcXG4rXFx0LnNldHRpbWU2NFxcdD0gemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQsXFxuK1xcdC5hZGp0aW1lXFx0PSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUsXFxuK1xcdC5hZGpmaW5lXFx0PSB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUsXFxuK1xcdC5hZGpwaGFzZVxcdD0gemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSxcXG4rXFx0LmdldG1heHBoYXNlXFx0PSB6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlLFxcbit9O1xcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIgLSByZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsXFxuKyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byByZWdpc3RlciBQVFAgY2xvY2sgZm9yXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcXG4re1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVxcdTAwM2VkZXY7XFxuK1xcdHN0cnVjdCBwdHBfY2xvY2sgKnB0cF9jbG9jaztcXG4rXFxuK1xcdHpsZHBsbC1cXHUwMDNlcHRwX2luZm8gPSB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm87XFxuK1xcdHNucHJpbnRmKHpsZHBsbC1cXHUwMDNlcHRwX2luZm8ubmFtZSwgc2l6ZW9mKHpsZHBsbC1cXHUwMDNlcHRwX2luZm8ubmFtZSksXFxuK1xcdFxcdCBcXFwiJXMtZHBsbCV1XFxcIiwgZGV2X25hbWUoemxkZXYtXFx1MDAzZWRldiksIHpsZHBsbC1cXHUwMDNlaWQpO1xcbitcXG4rXFx0cHRwX2Nsb2NrID0gcHRwX2Nsb2NrX3JlZ2lzdGVyKFxcdTAwMjZ6bGRwbGwtXFx1MDAzZXB0cF9pbmZvLCB6bGRldi1cXHUwMDNlZGV2KTtcXG4rXFx0aWYgKElTX0VSUihwdHBfY2xvY2spKSB7XFxuK1xcdFxcdGRldl9lcnIoemxkZXYtXFx1MDAzZWRldiwgXFxcIkZhaWxlZCB0byByZWdpc3RlciBQVFAgY2xvY2sgZm9yIERQTEwldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0emxkcGxsLVxcdTAwM2VpZCk7XFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKHB0cF9jbG9jayk7XFxuK1xcdH1cXG4rXFxuK1xcdHpsZHBsbC1cXHUwMDNlcHRwX2Nsb2NrID0gcHRwX2Nsb2NrO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIgLSB1bnJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgYSBEUExMIGNoYW5uZWxcXG4rICogQHpsZHBsbDogRFBMTCBjaGFubmVsIHRvIHVucmVnaXN0ZXIgUFRQIGNsb2NrIGZvclxcbisgKi9cXG4rc3RhdGljIHZvaWQgemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcXG4re1xcbitcXHRpZiAoIUlTX0VSUl9PUl9OVUxMKHpsZHBsbC1cXHUwMDNlcHRwX2Nsb2NrKSkge1xcbitcXHRcXHRwdHBfY2xvY2tfdW5yZWdpc3Rlcih6bGRwbGwtXFx1MDAzZXB0cF9jbG9jayk7XFxuK1xcdFxcdHpsZHBsbC1cXHUwMDNlcHRwX2Nsb2NrID0gTlVMTDtcXG4rXFx0fVxcbiB9XFxuIFxcbiAvKipcXG5AQCAtMjQzNiw2ICsyNzc3LDQ3IEBAIHpsMzA3M3hfZHBsbF9yZWZfc3luY19wYWlyc19yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbisvKipcXG4rICogemwzMDczeF9kcGxsX2FsbG9jIC0gYWxsb2NhdGUgRFBMTCBkZXZpY2VcXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuKyAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlclxcbisgKlxcbisgKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuXFxuKyAqXFxuKyAqIFJldHVybjogcG9pbnRlciB0byBEUExMIGRldmljZSBvbiBzdWNjZXNzLCBlcnJvciBwb2ludGVyIG9uIGVycm9yXFxuKyAqL1xcbitzdHJ1Y3QgemwzMDczeF9kcGxsICpcXG4remwzMDczeF9kcGxsX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKVxcbit7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbDtcXG4rXFxuK1xcdHpsZHBsbCA9IGt6YWxsb2Nfb2JqKCp6bGRwbGwpO1xcbitcXHRpZiAoIXpsZHBsbClcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuK1xcbitcXHR6bGRwbGwtXFx1MDAzZWRldiA9IHpsZGV2O1xcbitcXHR6bGRwbGwtXFx1MDAzZWlkID0gY2g7XFxuK1xcdG11dGV4X2luaXQoXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuK1xcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZ6bGRwbGwtXFx1MDAzZXBpbnMpO1xcbitcXG4rXFx0cmV0dXJuIHpsZHBsbDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9mcmVlIC0gZnJlZSBEUExMIGRldmljZVxcbisgKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmVcXG4rICpcXG4rICogRGVhbGxvY2F0ZXMgZ2l2ZW4gRFBMTCBkZXZpY2UgcHJldmlvdXNseSBhbGxvY2F0ZWQgYnkgQHpsMzA3M3hfZHBsbF9hbGxvYy5cXG4rICovXFxuK3ZvaWRcXG4remwzMDczeF9kcGxsX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxcbit7XFxuK1xcdFdBUk4oemxkcGxsLVxcdTAwM2VkcGxsX2RldiwgXFxcIkRQTEwgZGV2aWNlIGlzIHN0aWxsIHJlZ2lzdGVyZWRcXFxcblxcXCIpO1xcbitcXG4rXFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4rXFx0a2ZyZWUoemxkcGxsKTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIHpsMzA3M3hfZHBsbF9yZWdpc3RlciAtIHJlZ2lzdGVyIERQTEwgZGV2aWNlIGFuZCBhbGwgaXRzIHBpbnNcXG4gICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXFxuQEAgLTI0NjYsNiArMjg0OCwxMyBAQCB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxcbiBcXHRcXHRyZXR1cm4gcmM7XFxuIFxcdH1cXG4gXFxuK1xcdHJjID0gemwzMDczeF9kcGxsX3B0cF9yZWdpc3Rlcih6bGRwbGwpO1xcbitcXHRpZiAocmMpIHtcXG4rXFx0XFx0emwzMDczeF9kcGxsX3BpbnNfdW5yZWdpc3Rlcih6bGRwbGwpO1xcbitcXHRcXHR6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTtcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXHR9XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtMjQ3OSw3ICsyODY4LDcgQEAgemwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcXG4gdm9pZFxcbiB6bDMwNzN4X2RwbGxfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXFxuIHtcXG4tXFx0LyogVW5yZWdpc3RlciBhbGwgcGlucyBhbmQgZHBsbCAqL1xcbitcXHR6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIoemxkcGxsKTtcXG4gXFx0emwzMDczeF9kcGxsX3BpbnNfdW5yZWdpc3Rlcih6bGRwbGwpO1xcbiBcXHR6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmhcXG5pbmRleCBmYWViYzQwMmJhMWI3Li45OTMyMjFkYzYzMjQ5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaFxcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaFxcbkBAIC01LDYgKzUsNyBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RwbGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpc3QuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJjb3JlLmhcXFwiXFxuIFxcbkBAIC0yMiw2ICsyMyw4IEBAXFxuICAqIEB0eXBlOiBEUExMIHR5cGUgKFBQUyBvciBFRUMpXFxuICAqIEBsb2NrX3N0YXR1czogbGFzdCBzYXZlZCBEUExMIGxvY2sgc3RhdHVzXFxuICAqIEBwaW5zOiBsaXN0IG9mIHBpbnNcXG4rICogQHB0cF9pbmZvOiBQVFAgY2xvY2sgaW5mb1xcbisgKiBAcHRwX2Nsb2NrOiByZWdpc3RlcmVkIFBUUCBjbG9jayAob3IgTlVMTClcXG4gICovXFxuIHN0cnVjdCB6bDMwNzN4X2RwbGwge1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0XFx0bGlzdDtcXG5AQCAtMzYsNiArMzksOCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsIHtcXG4gXFx0ZW51bSBkcGxsX3R5cGVcXHRcXHRcXHR0eXBlO1xcbiBcXHRlbnVtIGRwbGxfbG9ja19zdGF0dXNcXHRcXHRsb2NrX3N0YXR1cztcXG4gXFx0c3RydWN0IGxpc3RfaGVhZFxcdFxcdHBpbnM7XFxuK1xcdHN0cnVjdCBwdHBfY2xvY2tfaW5mb1xcdFxcdHB0cF9pbmZvO1xcbitcXHRzdHJ1Y3QgcHRwX2Nsb2NrXFx0XFx0KnB0cF9jbG9jaztcXG4gfTtcXG4gXFxuIHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaFxcbmluZGV4IGI3MGVhZDdkNDQ5NWIuLmYzYTVlMTIxNWFhMzYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXFxuQEAgLTE3OSw2ICsxNzksMjAgQEBcXG4gI2RlZmluZSBaTF9EUExMX0RGX1JFQURfQ01EXFx0XFx0XFx0R0VOTUFTSygyLCAwKVxcbiAjZGVmaW5lIFpMX0RQTExfREZfUkVBRF9DTURfQUNDX0lcXHRcXHQ0XFxuIFxcbisjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9DVFJMXFx0XFx0XFx0WkxfUkVHKDUsIDB4MzAsIDEpXFxuKyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUFxcdFxcdFxcdEdFTk1BU0soMiwgMClcXG4rI2RlZmluZSBaTF9EUExMX1RJRV9DVFJMX09QX1dSXFx0XFx0XFx0NFxcbitcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTF9NQVNLXFx0XFx0WkxfUkVHKDUsIDB4MzEsIDEpXFxuK1xcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9DVFJMKF9pZHgpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRaTF9SRUdfSURYKF9pZHgsIDUsIDB4MzgsIDEsIFpMMzA3M1hfTUFYX0NIQU5ORUxTLCAxKVxcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfU0VNXFx0XFx0XFx0QklUKDQpXFxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURcXHRcXHRcXHRHRU5NQVNLKDMsIDApXFxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFpcXHQxXFxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVFxcdFxcdDhcXG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9ORVhUXzFIWlxcdDlcXG4rXFxuICNkZWZpbmUgWkxfUkVHX0RQTExfTUVBU19DVFJMXFx0XFx0XFx0WkxfUkVHKDUsIDB4NTAsIDEpXFxuICNkZWZpbmUgWkxfRFBMTF9NRUFTX0NUUkxfRU5cXHRcXHRcXHRCSVQoMClcXG4gI2RlZmluZSBaTF9EUExMX01FQVNfQ1RSTF9BVkdfRkFDVE9SXFx0XFx0R0VOTUFTSyg3LCA0KVxcbkBAIC0xOTMsNiArMjA3LDkgQEBcXG4gXFxuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXFxuICAqIFJlZ2lzdGVyIFBhZ2VzIDYtNywgRFBMTCBEYXRhXFxuKyAqXFxuKyAqIFBlci1jaGFubmVsIHJlZ2lzdGVycyB3aXRoIHN0cmlkZSAweDIwLiBDaGFubmVscyAwLTMgcmVzaWRlIG9uIHBhZ2UgNixcXG4rICogY2hhbm5lbCA0IG9uIHBhZ2UgNy5cXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuIFxcbiAjZGVmaW5lIFpMX1JFR19EUExMX0RGX09GRlNFVF8wMyhfaWR4KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5AQCAtMjAyLDYgKzIxOSwyNCBAQFxcbiBcXHQoKF9pZHgpIFxcdTAwM2MgNCA/IFpMX1JFR19EUExMX0RGX09GRlNFVF8wMyhfaWR4KSA6IFpMX1JFR19EUExMX0RGX09GRlNFVF80KVxcbiAjZGVmaW5lIFpMX0RQTExfREZfT0ZGU0VUX1VOS05PV05cXHRTNjRfTUlOXFxuIFxcbisjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBXzAzKF9pZHgpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRaTF9SRUdfSURYKF9pZHgsIDYsIDB4MEMsIDYsIDQsIDB4MjApXFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEFfNFxcdFxcdFxcdFpMX1JFRyg3LCAweDBDLCA2KVxcbisjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBKF9pZHgpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHQoKF9pZHgpIFxcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RJRV9EQVRBXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVElFX0RBVEFfNClcXG4rXFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQ18wMyhfaWR4KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0WkxfUkVHX0lEWChfaWR4LCA2LCAweDEyLCA2LCA0LCAweDIwKVxcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUNfNFxcdFxcdFxcdFpMX1JFRyg3LCAweDEyLCA2KVxcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUMoX2lkeClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdCgoX2lkeCkgXFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfVE9EX1NFQ18wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RPRF9TRUNfNClcXG4rXFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TXzAzKF9pZHgpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRaTF9SRUdfSURYKF9pZHgsIDYsIDB4MTgsIDQsIDQsIDB4MjApXFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TXzRcXHRcXHRcXHRaTF9SRUcoNywgMHgxOCwgNClcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlMoX2lkeClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdCgoX2lkeCkgXFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfVE9EX05TXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVE9EX05TXzQpXFxuK1xcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcXG4gICogUmVnaXN0ZXIgUGFnZSA5LCBTeW50aCBhbmQgT3V0cHV0XFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5AQCAtMjIxLDYgKzI1NiwyMyBAQFxcbiAjZGVmaW5lIFpMX09VVFBVVF9DVFJMX0VOXFx0XFx0XFx0QklUKDApXFxuICNkZWZpbmUgWkxfT1VUUFVUX0NUUkxfU1lOVEhfU0VMXFx0XFx0R0VOTUFTSyg2LCA0KVxcbiBcXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1NURVBfVElNRV9NQVNLXFx0XFx0WkxfUkVHKDksIDB4MzYsIDIpXFxuK1xcbisjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMXFx0XFx0WkxfUkVHKDksIDB4MzgsIDEpXFxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9EUExMXFx0XFx0R0VOTUFTSyg2LCA0KVxcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVBcXHRCSVQoMylcXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QXFx0XFx0R0VOTUFTSygxLCAwKVxcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfTk9ORVxcdDBcXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1JFU0VUXFx0MVxcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfUkVBRFxcdDJcXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1dSSVRFXFx0M1xcbitcXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTlVNQkVSXFx0XFx0WkxfUkVHKDksIDB4MzksIDEpXFxuK1xcbisjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLXFx0XFx0WkxfUkVHKDksIDB4M2EsIDIpXFxuK1xcbisjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBXFx0XFx0WkxfUkVHKDksIDB4M2MsIDQpXFxuK1xcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbiAgKiBSZWdpc3RlciBQYWdlIDEwLCBSZWYgTWFpbGJveFxcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6NDE6MDYuNjcxODMxNjUyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzgyODczMDMwNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWkwzMDczWFwiLFxuICAgIFwiWkwzMDczWF9JMkNcIixcbiAgICBcIlpMMzA3M1hfU1BJXCIsXG4gICAgXCJQVFBfMTU4OF9DTE9DS1wiLFxuICAgIFwiRFBMTFwiLFxuICAgIFwiSTJDXCIsXG4gICAgXCJTUElcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXRcIixcbiAgICBcInpsMzA3M3hfY2hhbl90b2RfcmVhZFwiLFxuICAgIFwiemwzMDczeF9jaGFuX3RvZF93cml0ZVwiLFxuICAgIFwiemwzMDczeF9jaGFuX3RvZF9hZGp1c3RcIixcbiAgICBcInpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0XCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fdGllX3dyaXRlXCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcFwiLFxuICAgIFwiemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0XCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NFwiLFxuICAgIFwiemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXBcIixcbiAgICBcInpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZVwiLFxuICAgIFwiemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lXCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlXCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIgKHpsMzA3M3gpLiBUaGlzIGV4cG9zZXMgbmV3IGZ1bmN0aW9uYWxpdHkgdG8gdXNlcnNwYWNlIHZpYSB0aGUgUFRQIHN1YnN5c3RlbSAoZS5nLiwgL2Rldi9wdHBYIGlvY3RscykuIFRoZSBkcml2ZXIgaXMgYW4gSTJDL1NQSSBkZXZpY2UgZHJpdmVyLCB3aGljaCBjYW4gYmUgaW5zdGFudGlhdGVkIGFuZCBmdXp6ZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDEyOTg1ZDMxMDFhY2RjYTA3YmE5MGI1NWZhNDFkZmU2NmRhZGU3ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDA4OjQxOjA1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdcbmluZGV4IDViYmNhMTQwMDU4MTMuLmRhMTczMWFjZTE1ZjAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXG5AQCAtMiw3ICsyLDcgQEBcbiBcbiBjb25maWcgWkwzMDczWFxuIFx0dHJpc3RhdGUgXCJNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRSBkZXZpY2VzXCIgaWYgQ09NUElMRV9URVNUXG4tXHRkZXBlbmRzIG9uIE5FVFxuK1x0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IFBUUF8xNTg4X0NMT0NLXG4gXHRzZWxlY3QgRFBMTFxuIFx0c2VsZWN0IE5FVF9ERVZMSU5LXG4gXHRzZWxlY3QgUkVHTUFQXG5AQCAtMTYsNyArMTYsNyBAQCBjb25maWcgWkwzMDczWFxuIFxuIGNvbmZpZyBaTDMwNzNYX0kyQ1xuIFx0dHJpc3RhdGUgXCJJMkMgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzXCJcbi1cdGRlcGVuZHMgb24gSTJDIFx1MDAyNlx1MDAyNiBORVRcbitcdGRlcGVuZHMgb24gSTJDIFx1MDAyNlx1MDAyNiBORVQgXHUwMDI2XHUwMDI2IFBUUF8xNTg4X0NMT0NLXG4gXHRzZWxlY3QgUkVHTUFQX0kyQ1xuIFx0c2VsZWN0IFpMMzA3M1hcbiBcdGhlbHBcbkBAIC0yOCw3ICsyOCw3IEBAIGNvbmZpZyBaTDMwNzNYX0kyQ1xuIFxuIGNvbmZpZyBaTDMwNzNYX1NQSVxuIFx0dHJpc3RhdGUgXCJTUEkgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzXCJcbi1cdGRlcGVuZHMgb24gTkVUIFx1MDAyNlx1MDAyNiBTUElcbitcdGRlcGVuZHMgb24gTkVUIFx1MDAyNlx1MDAyNiBTUEkgXHUwMDI2XHUwMDI2IFBUUF8xNTg4X0NMT0NLXG4gXHRzZWxlY3QgUkVHTUFQX1NQSVxuIFx0c2VsZWN0IFpMMzA3M1hcbiBcdGhlbHBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNcbmluZGV4IDRlYzJjZjUzZGFkNDYuLmJhNGQzMDNkNDFiNDcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uY1xuQEAgLTMsNiArMyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Rldl9wcmludGsuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuIFxuQEAgLTE2Miw4ICsxNjMsOCBAQCBpbnQgemwzMDczeF9jaGFuX25jb19tb2RlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleClcbiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXG4gICogQGluZGV4OiBEUExMIGNoYW5uZWwgaW5kZXggdG8gZmV0Y2ggc3RhdGUgZm9yXG4gICpcbi0gKiBSZWFkcyB0aGUgbW9kZV9yZWZzZWwgcmVnaXN0ZXIgYW5kIHJlZmVyZW5jZSBwcmlvcml0eSByZWdpc3RlcnMgZm9yXG4tICogdGhlIGdpdmVuIERQTEwgY2hhbm5lbCBhbmQgc3RvcmVzIHRoZSByYXcgdmFsdWVzIGZvciBsYXRlciB1c2UuXG4rICogUmVhZHMgdGhlIG1vZGVfcmVmc2VsLCBzdGF0dXMgYW5kIHJlZmVyZW5jZSBwcmlvcml0eSByZWdpc3RlcnMgZm9yXG4rICogdGhlIGdpdmVuIERQTEwgY2hhbm5lbCBhbmQgc3RvcmVzIHRoZSB2YWx1ZXMgZm9yIGxhdGVyIHVzZS5cbiAgKlxuICAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4gICovXG5AQCAtMjM0LDYgKzIzNSwzMjIgQEAgY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqemwzMDczeF9jaGFuX3N0YXRlX2dldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LFxuIFx0cmV0dXJuIFx1MDAyNnpsZGV2LVx1MDAzZWNoYW5baW5kZXhdO1xuIH1cbiBcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQgLSB3YWl0IGZvciBUb0Qgc2VtYXBob3JlIHRvIGNsZWFyXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKlxuKyAqIENoZWNrcyB0aGUgVG9EIGNvbnRyb2wgcmVnaXN0ZXIgc2VtYXBob3JlIGJpdC4gSWYgY2xlYXIsIHJldHVybnNcbisgKiBpbW1lZGlhdGVseS4gT3RoZXJ3aXNlIHBvbGxzIHVudGlsIHRoZSBiaXQgaXMgY2xlYXJlZCBieSB0aGUgZGV2aWNlLlxuKyAqXG4rICogUmV0dXJuOlxuKyAqICogMFx0XHRcdC0gc3VjY2Vzc1xuKyAqICogJS1FQlVTWVx0XHQtIHRpbWVvdXRcbisgKiAqICUtRU9QTk9UU1VQUFx0LSB1bmtub3duIGNvbW1hbmQgZGV0ZWN0ZWRcbisgKiAqIG5lZ2F0aXZlXHRcdC0gb3RoZXIgZXJyb3JcbisgKi9cbitpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKVxuK3tcbitcdHVuc2lnbmVkIGludCB0aW1lb3V0O1xuK1x0dTggdG9kX2N0cmw7XG4rXHRpbnQgcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfcmVhZF91OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLCBcdTAwMjZ0b2RfY3RybCk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdGlmICghKHRvZF9jdHJsIFx1MDAyNiBaTF9EUExMX1RPRF9DVFJMX1NFTSkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0c3dpdGNoIChGSUVMRF9HRVQoWkxfRFBMTF9UT0RfQ1RSTF9DTUQsIHRvZF9jdHJsKSkge1xuK1x0Y2FzZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWjpcbitcdFx0dGltZW91dCA9IFpMX1BPTExfVE9EX1dSX1RJTUVPVVRfVVM7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UOlxuK1x0Y2FzZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9ORVhUXzFIWjpcbitcdFx0dGltZW91dCA9IFpMX1BPTExfVE9EX1JEX1RJTUVPVVRfVVM7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLFxuK1x0XHRcdFx0ICBaTF9EUExMX1RPRF9DVFJMX1NFTSwgdGltZW91dCk7XG4rXG4rXHRyZXR1cm4gcmMgPT0gLUVUSU1FRE9VVCA/IC1FQlVTWSA6IHJjO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwgLSBpc3N1ZSBUb0QgY29tbWFuZFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICogQGNtZDogVG9EIGNvbW1hbmQgdG8gZXhlY3V0ZVxuKyAqXG4rICogV3JpdGVzIHRoZSBzZW1hcGhvcmUgYW5kIGNvbW1hbmQgdG8gZHBsbF90b2RfY3RybC4gVGhlIGNhbGxlciBtdXN0XG4rICogZW5zdXJlIHRoZSBkZXZpY2UgaXMgcmVhZHkgKHNlbWFwaG9yZSBjbGVhcikgYmVmb3JlIGNhbGxpbmcgYW5kXG4rICogbXVzdCB3YWl0IGZvciBjb21wbGV0aW9uIGlmIG5lZWRlZC5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4rc3RhdGljIGludCB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHU4IGNtZClcbit7XG4rXHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLFxuK1x0XHRcdFx0WkxfRFBMTF9UT0RfQ1RSTF9TRU0gfCBjbWQpO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fdG9kX3JlYWQgLSByZWFkIFRvRCByZWdpc3RlcnMgYWZ0ZXIgaXNzdWluZyBhIGNvbW1hbmRcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqIEBuZXh0X2h6OiBpZiB0cnVlLCByZWFkIHByZWRpY3RlZCBUb0QgYXQgbmV4dCAxIEh6OyBvdGhlcndpc2UgcmVhZCBjdXJyZW50XG4rICogQHRzOiB0aW1lc3BlYyB0byBzdG9yZSB0aGUgcmVzdWx0XG4rICogQHN0czogb3B0aW9uYWwgc3lzdGVtIHRpbWVzdGFtcCBwYWlyIGZvciBjcm9zcy10aW1lc3RhbXBpbmdcbisgKlxuKyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuK1x0XHRcdCAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXG4rXHRcdFx0ICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cylcbit7XG4rXHR1MzIgbnNlYztcbitcdHU2NCBzZWM7XG4rXHR1OCBjbWQ7XG4rXHRpbnQgcmM7XG4rXG4rXHRpZiAobmV4dF9oeilcbitcdFx0Y21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFo7XG4rXHRlbHNlXG4rXHRcdGNtZCA9IFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX0NVUlJFTlQ7XG4rXG4rXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVG9EIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xuK1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cHRwX3JlYWRfc3lzdGVtX3ByZXRzKHN0cyk7XG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfY3RybCh6bGRldiwgY2gsIGNtZCk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcdHB0cF9yZWFkX3N5c3RlbV9wb3N0dHMoc3RzKTtcbitcbitcdHJjID0gemwzMDczeF9yZWFkX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIFx1MDAyNnNlYyk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdC8qIEhXIG5hbm9zZWNvbmRzIGFyZSBhbHdheXMgaW4gWzAsIE5TRUNfUEVSX1NFQykgcmFuZ2UgKi9cbitcdHJjID0gemwzMDczeF9yZWFkX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgXHUwMDI2bnNlYyk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHRzLVx1MDAzZXR2X3NlYyA9IHNlYztcbitcdHRzLVx1MDAzZXR2X25zZWMgPSBuc2VjO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUgLSB3cml0ZSBUb0QgcmVnaXN0ZXJzIGFuZCB0cmlnZ2VyIDEgSHogdXBkYXRlXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKiBAdHM6IHRpbWUgdG8gc2V0XG4rICpcbisgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4raW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICAgc3RydWN0IHRpbWVzcGVjNjQgdHMpXG4re1xuK1x0aW50IHJjO1xuK1xuK1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbitcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9TRUMoY2gpLCB0cy50dl9zZWMpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCB0cy50dl9uc2VjKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfY3RybCh6bGRldiwgY2gsXG4rXHRcdFx0XHQgICAgIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaKTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3RvZF9hZGp1c3QgLSBhdG9taWMgVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIHdpdGggcm9sbG92ZXIgZ3VhcmRcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IHRvIGFwcGx5XG4rICpcbisgKiBSZWFkcyB0aGUgbmV4dC1IeiBUb0QgYW5kIGN1cnJlbnQgVG9ELCB0aGVuIGNoZWNrcyB3aGV0aGVyIGVub3VnaCB0aW1lXG4rICogcmVtYWlucyBiZWZvcmUgdGhlIG5leHQgMSBIeiByb2xsb3ZlciB0byBzYWZlbHkgY29tcGxldGUgdGhlIHdyaXRlLlxuKyAqIFJlLXJlYWRzIGlmIHRoZSAxIEh6IHRpY2sgY3Jvc3NlZCBiZXR3ZWVuIHRoZSB0d28gcmVhZHMgb3IgaWYgbGVzc1xuKyAqIHRoYW4gMjAgbXMgcmVtYWlucyBiZWZvcmUgdGhlIG5leHQgcm9sbG92ZXIuIEFwcGxpZXMgQGRlbHRhIGFuZCB3cml0ZXNcbisgKiB0aGUgcmVzdWx0IGJhY2suXG4rICpcbisgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4raW50IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuK1x0XHRcdCAgICBzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YSlcbit7XG4rI2RlZmluZSBaTF9UT0RfTUFYX1JFVFJJRVNcdDIwXG4rXHRzdGF0aWMgY29uc3QgbG9uZyB0aHJlc2hvbGRfbnMgPSAyMCAqIE5TRUNfUEVSX01TRUM7XG4rXHRzdHJ1Y3QgdGltZXNwZWM2NCB0c19uZXh0LCB0c19jdXIsIGRpZmY7XG4rXHRpbnQgcmMsIGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBaTF9UT0RfTUFYX1JFVFJJRVM7IGkrKykge1xuK1x0XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRldiwgY2gsIHRydWUsIFx1MDAyNnRzX25leHQsIE5VTEwpO1xuK1x0XHRpZiAocmMpXG4rXHRcdFx0cmV0dXJuIHJjO1xuK1xuK1x0XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRldiwgY2gsIGZhbHNlLCBcdTAwMjZ0c19jdXIsIE5VTEwpO1xuK1x0XHRpZiAocmMpXG4rXHRcdFx0cmV0dXJuIHJjO1xuK1xuK1x0XHQvKiBFbnN1cmUgdGhlIDEgSHogdGljayBkaWQgbm90IGNyb3NzIGJldHdlZW4gdGhlIHR3byByZWFkc1xuK1x0XHQgKiBhbmQgdGhhdCBlbm91Z2ggbWFyZ2luIHJlbWFpbnMgdG8gY29tcGxldGUgdGhlIHdyaXRlLlxuK1x0XHQgKi9cbitcdFx0ZGlmZiA9IHRpbWVzcGVjNjRfc3ViKHRzX25leHQsIHRzX2N1cik7XG4rXHRcdGlmIChkaWZmLnR2X3NlYyBcdTAwM2UgMCB8fFxuK1x0XHQgICAgKCFkaWZmLnR2X3NlYyBcdTAwMjZcdTAwMjYgZGlmZi50dl9uc2VjIFx1MDAzZT0gdGhyZXNob2xkX25zKSlcbitcdFx0XHRicmVhaztcbitcdH1cbitcdGlmIChpID09IFpMX1RPRF9NQVhfUkVUUklFUykge1xuK1x0XHRkZXZfd2Fybih6bGRldi1cdTAwM2VkZXYsXG4rXHRcdFx0IFwiRFBMTCV1IFRvRCBhZGp1c3QgZmFpbGVkIHRvIGdldCBzdGFibGUgbWFyZ2luXFxuXCIsXG4rXHRcdFx0IGNoKTtcbitcdFx0cmV0dXJuIC1FQlVTWTtcbitcdH1cbitcbitcdC8qIEFwcGx5IGRlbHRhIHRvIHRoZSBuZXh0LUh6IFRvRCAqL1xuK1x0dHNfbmV4dCA9IHRpbWVzcGVjNjRfYWRkKHRzX25leHQsIGRlbHRhKTtcbitcdGlmICghdGltZXNwZWM2NF92YWxpZF9zZXR0b2QoXHUwMDI2dHNfbmV4dCkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkZXYsIGNoLCB0c19uZXh0KTtcbisjdW5kZWYgWkxfVE9EX01BWF9SRVRSSUVTXG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0IC0gd3JpdGUgZGVsdGEgZnJlcXVlbmN5IG9mZnNldCB0byBoYXJkd2FyZVxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICogQG9mZnNldDogZnJlcXVlbmN5IG9mZnNldCBpbiAyXi00OCBzdGVwc1xuKyAqXG4rICogQ29udGV4dDogQ2FsbGVyIG11c3QgaG9sZCB0aGUgcGVyLURQTEwgbG9jay5cbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldClcbit7XG4rXHRpbnQgcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9PRkZTRVQoY2gpLCBvZmZzZXQpO1xuK1x0aWYgKCFyYylcbitcdFx0emxkZXYtXHUwMDNlY2hhbltjaF0uZGZfb2Zmc2V0ID0gb2Zmc2V0O1xuK1xuK1x0cmV0dXJuIHJjO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlIC0gYWRqdXN0IERQTEwgcGhhc2UgdXNpbmcgVElFIHdyaXRlXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKiBAZGVsdGFfbnM6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMgKG11c3QgYmUgaW4gKC0xcywgMXMpKVxuKyAqXG4rICogQ29udmVydHMgbmFub3NlY29uZHMgdG8gVElFIHVuaXRzICgwLjAxIHBzKSBhbmQgd3JpdGVzIFRJRSBkYXRhXG4rICogdG8gdGhlIHNwZWNpZmllZCBjaGFubmVsLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitpbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKVxuK3tcbitcdHM2NCB0aWVfZGF0YTtcbitcdGludCByYztcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRldi1cdTAwM2V0aWVfbG9jayk7XG4rXG4rXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVElFIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xuK1x0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsXG4rXHRcdFx0XHQgIFpMX0RQTExfVElFX0NUUkxfT1AsXG4rXHRcdFx0XHQgIFpMX1BPTExfVElFX1dSX1RJTUVPVVRfVVMpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHQvKiBDb252ZXJ0IG5zIHRvIFRJRSB1bml0cyAoMC4wMSBwcyA9IDEwXi0xNCBzKSAqL1xuK1x0dGllX2RhdGEgPSBkZWx0YV9ucyAqIDEwMDAwMExMO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0RBVEEoY2gpLCB0aWVfZGF0YSk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkxfTUFTSywgQklUKGNoKSk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTCxcbitcdFx0XHRcdFpMX0RQTExfVElFX0NUUkxfT1BfV1IpO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCAtIGV4ZWN1dGUgb25lIG91dHB1dCBwaGFzZSBzdGVwIG9wZXJhdGlvblxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICogQG91dF9tYXNrOiBiaXRtYXNrIG9mIG91dHB1dHMgdG8gc3RlcFxuKyAqIEBzdGVwX2N5Y2xlczogcGhhc2Ugc3RlcCBpbiBzeW50aGVzaXplciBjbG9jayBjeWNsZXNcbisgKiBAdG9kX3N0ZXA6IGFsc28gc3RlcCB0aGUgVG9EIGNvdW50ZXJcbisgKlxuKyAqIEFsbCBtYXNrZWQgb3V0cHV0cyBtdXN0IHVzZSBzeW50aGVzaXplcnMgb2YgdGhlIHNhbWUgZnJlcXVlbmN5IHNpbmNlXG4rICogdGhlIHN0ZXAgdmFsdWUgaXMgaW4gc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitpbnQgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLFxuK1x0XHRcdCAgICBib29sIHRvZF9zdGVwKVxuK3tcbitcdHU4IGN0cmw7XG4rXHRpbnQgcmM7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkZXYtXHUwMDNlcGhhc2Vfc3RlcF9sb2NrKTtcbitcbitcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBwaGFzZSBzdGVwIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xuK1x0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwsXG4rXHRcdFx0XHQgIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AsXG4rXHRcdFx0XHQgIFpMX1BPTExfUEhBU0VfU1RFUF9USU1FT1VUX1VTKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0RBVEEsXG4rXHRcdFx0ICAgICAgIHN0ZXBfY3ljbGVzKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3dyaXRlX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX01BU0ssIG91dF9tYXNrKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTlVNQkVSLCAxKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0Y3RybCA9IEZJRUxEX1BSRVAoWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9EUExMLCBjaCkgfFxuK1x0ICAgICAgIEZJRUxEX1BSRVAoWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCxcbitcdFx0XHQgIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfV1JJVEUpO1xuK1x0aWYgKHRvZF9zdGVwKVxuK1x0XHRjdHJsIHw9IFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVA7XG4rXG4rXHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwsIGN0cmwpO1xuK31cbitcbiAvKipcbiAgKiB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0IC0gY29tbWl0IERQTEwgY2hhbm5lbCBzdGF0ZSBjaGFuZ2VzIHRvIGhhcmR3YXJlXG4gICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3hfZGV2IHN0cnVjdHVyZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaFxuaW5kZXggZGM5YzZkOTViZGVlNy4uOTljM2I3MDg4ZjY3OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXG5AQCAtNSwxMCArNSwxMiBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdGRkZWYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWU2NC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwicmVncy5oXCJcbiBcbitzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXA7XG4gc3RydWN0IHpsMzA3M3hfZGV2O1xuIFxuIC8qKlxuQEAgLTQyLDYgKzQ0LDIxIEBAIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4LFxuIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfdXBkYXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTtcbiBpbnQgemwzMDczeF9jaGFuX25jb19tb2RlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7XG4gXG4raW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCk7XG4raW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgIGJvb2wgbmV4dF9oeiwgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxuK1x0XHRcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpO1xuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuK1x0XHRcdCAgIHN0cnVjdCB0aW1lc3BlYzY0IHRzKTtcbitpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKTtcbitpbnQgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLCBib29sIHRvZF9zdGVwKTtcbitcbitpbnQgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBvZmZzZXQpO1xuK1xuK2ludCB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgZGVsdGFfbnMpO1xuK1xuIC8qKlxuICAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfZ2V0IC0gZ2V0IGNhY2hlZCBkZl9vZmZzZXQgdnMgdHJhY2tlZCByZWZlcmVuY2VcbiAgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG5AQCAtMjAwLDYgKzIxNywyMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgemwzMDczeF9jaGFuX21vZGVfaXNfcmVmbG9jayhjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxuIFx0cmV0dXJuIHpsMzA3M3hfY2hhbl9tb2RlX2dldChjaGFuKSA9PSBaTF9EUExMX01PREVfUkVGU0VMX01PREVfUkVGTE9DSztcbiB9XG4gXG4rLyoqXG4rICogemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllIC0gY2hlY2sgaWYgY2hhbm5lbCBtb2RlIHN1cHBvcnRzIFRJRSB3cml0ZVxuKyAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbisgKlxuKyAqIFRJRSB3cml0ZSBpcyBzdXBwb3J0ZWQgaW4gQVVUTyBhbmQgUkVGTE9DSyBtb2RlcyByZWdhcmRsZXNzIG9mIGxvY2sgc3RhdGUuXG4rICpcbisgKiBSZXR1cm46IHRydWUgaWYgVElFIHdyaXRlIGlzIHN1cHBvcnRlZCwgZmFsc2Ugb3RoZXJ3aXNlXG4rICovXG4rc3RhdGljIGlubGluZSBib29sXG4remwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXG4re1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl9tb2RlX2lzX2F1dG8oY2hhbikgfHxcbitcdFx0emwzMDczeF9jaGFuX21vZGVfaXNfcmVmbG9jayhjaGFuKTtcbit9XG4rXG4gLyoqXG4gICogemwzMDczeF9jaGFuX2lzX2hvX3JlYWR5IC0gY2hlY2sgaWYgaG9sZG92ZXIgaXMgcmVhZHlcbiAgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jXG5pbmRleCA1YjJkNzdmMmMyMjg4Li4yMzBkZjA4ZTI3Y2QxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcbkBAIC0zMjIsNyArMzIyLDcgQEAgaW50IHpsMzA3M3hfd3JpdGVfdTQ4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsIHU2NCB2YWwpXG4gaW50IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsXG4gXHRcdFx0IHU4IG1hc2ssIHVuc2lnbmVkIGludCB0aW1lb3V0X3VzKVxuIHtcbi0jZGVmaW5lIFpMX1BPTExfU0xFRVBfVVMgMTBcbitcdHVuc2lnbmVkIGludCBzbGVlcF91cyA9IHRpbWVvdXRfdXMgLyA1MDtcbiBcdHVuc2lnbmVkIGludCB2YWw7XG4gXG4gXHQvKiBDaGVjayB0aGUgcmVnaXN0ZXIgaXMgOGJpdCAqL1xuQEAgLTMzNiw3ICszMzYsNyBAQCBpbnQgemwzMDczeF9wb2xsX3plcm9fdTgoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IHJlZyxcbiBcdHJlZyA9IFpMX1JFR19BRERSKHJlZykgKyBaTF9SQU5HRV9PRkZTRVQ7XG4gXG4gXHRyZXR1cm4gcmVnbWFwX3JlYWRfcG9sbF90aW1lb3V0KHpsZGV2LVx1MDAzZXJlZ21hcCwgcmVnLCB2YWwsICEodmFsIFx1MDAyNiBtYXNrKSxcbi1cdFx0XHRcdFx0WkxfUE9MTF9TTEVFUF9VUywgdGltZW91dF91cyk7XG4rXHRcdFx0XHRcdHNsZWVwX3VzLCB0aW1lb3V0X3VzKTtcbiB9XG4gXG4gaW50IHpsMzA3M3hfbWJfb3Aoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IG9wX3JlZywgdTggb3BfdmFsLFxuQEAgLTUxMSw2ICs1MTEsMTEgQEAgemwzMDczeF9kZXZfc3RhdGVfZmV0Y2goc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcbiBcdGludCByYztcbiBcdHU4IGk7XG4gXG4rXHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfU1RFUF9USU1FX01BU0ssXG4rXHRcdFx0ICAgICAgXHUwMDI2emxkZXYtXHUwMDNlb3V0X3N0ZXBfdGltZV9tYXNrKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgWkwzMDczWF9OVU1fUkVGUzsgaSsrKSB7XG4gXHRcdHJjID0gemwzMDczeF9yZWZfc3RhdGVfZmV0Y2goemxkZXYsIGkpO1xuIFx0XHRpZiAocmMpIHtcbkBAIC0xMDM0LDYgKzEwMzksMTQgQEAgaW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXG4gXHQgKiBhbmQvb3IgcG9sbHMgYXJlIHJlcXVpcmVkIHRvIGJlIGRvbmUgYXRvbWljYWxseS5cbiBcdCAqL1xuIFx0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2VtdWx0aW9wX2xvY2spO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIHJjLFxuK1x0XHRcdFx0ICAgICBcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxuXCIpO1xuK1x0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2VwaGFzZV9zdGVwX2xvY2spO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIHJjLFxuK1x0XHRcdFx0ICAgICBcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxuXCIpO1xuK1x0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2V0aWVfbG9jayk7XG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgcmMsXG4gXHRcdFx0XHQgICAgIFwiRmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXG5cIik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oXG5pbmRleCA3OGRjMjA4ZjNlZWEyLi42N2MxMGUyNTk1MTE4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcbkBAIC0yNiw2ICsyNiwxMCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsO1xuICNkZWZpbmUgWkxfUE9MTF9IV1JFR19USU1FT1VUX1VTXHQoNTAgKiBVU0VDX1BFUl9NU0VDKVxuICNkZWZpbmUgWkxfUE9MTF9NQl9USU1FT1VUX1VTXHRcdCgzMCAqIFVTRUNfUEVSX01TRUMpXG4gI2RlZmluZSBaTF9QT0xMX1BIQVNFX0VSUl9USU1FT1VUX1VTXHQoNTAgKiBVU0VDX1BFUl9NU0VDKVxuKyNkZWZpbmUgWkxfUE9MTF9QSEFTRV9TVEVQX1RJTUVPVVRfVVNcdCgzMDAwICogVVNFQ19QRVJfTVNFQylcbisjZGVmaW5lIFpMX1BPTExfVElFX1dSX1RJTUVPVVRfVVNcdCgxMDAwICogVVNFQ19QRVJfTVNFQylcbisjZGVmaW5lIFpMX1BPTExfVE9EX1JEX1RJTUVPVVRfVVNcdCgzMCAqIFVTRUNfUEVSX01TRUMpXG4rI2RlZmluZSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTXHQoMTAwMCAqIFVTRUNfUEVSX01TRUMpXG4gXG4gZW51bSB6bDMwNzN4X2ZsYWdzIHtcbiBcdFpMMzA3M1hfRkxBR19SRUZfUEhBU0VfQ09NUF8zMl9CSVQsXG5AQCAtNTUsNiArNTksOCBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8ge1xuICAqIEByZWdtYXA6IHJlZ21hcCB0byBhY2Nlc3MgZGV2aWNlIHJlZ2lzdGVyc1xuICAqIEBpbmZvOiBkZXRlY3RlZCBjaGlwIGluZm9cbiAgKiBAbXVsdGlvcF9sb2NrOiB0byBzZXJpYWxpemUgbXVsdGlwbGUgcmVnaXN0ZXIgb3BlcmF0aW9uc1xuKyAqIEB0aWVfbG9jazogdG8gc2VyaWFsaXplIFRJRSB3cml0ZSBvcGVyYXRpb25zXG4rICogQHBoYXNlX3N0ZXBfbG9jazogdG8gc2VyaWFsaXplIG91dHB1dCBwaGFzZSBzdGVwIG9wZXJhdGlvbnNcbiAgKiBAcmVmOiBhcnJheSBvZiBpbnB1dCByZWZlcmVuY2VzJyBpbnZhcmlhbnRzXG4gICogQG91dDogYXJyYXkgb2Ygb3V0cycgaW52YXJpYW50c1xuICAqIEBzeW50aDogYXJyYXkgb2Ygc3ludGhzJyBpbnZhcmlhbnRzXG5AQCAtNjMsNiArNjksNyBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8ge1xuICAqIEBrd29ya2VyOiB0aHJlYWQgZm9yIHBlcmlvZGljIHdvcmtcbiAgKiBAd29yazogcGVyaW9kaWMgd29ya1xuICAqIEBjbG9ja19pZDogY2xvY2sgaWQgb2YgdGhlIGRldmljZVxuKyAqIEBvdXRfc3RlcF90aW1lX21hc2s6IG91dHB1dCBzdGVwLXRpbWUgbWFzayAoZGV2aWNlLWdsb2JhbClcbiAgKiBAcGhhc2VfYXZnX2ZhY3RvcjogcGhhc2Ugb2Zmc2V0IG1lYXN1cmVtZW50IGF2ZXJhZ2luZyBmYWN0b3JcbiAgKiBAZnJlcV9tb25pdG9yOiBpcyBmcmVxdWVuY3kgbW9uaXRvciBlbmFibGVkXG4gICovXG5AQCAtNzEsNiArNzgsOCBAQCBzdHJ1Y3QgemwzMDczeF9kZXYge1xuIFx0c3RydWN0IHJlZ21hcFx0XHRcdCpyZWdtYXA7XG4gXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm9cdCppbmZvO1xuIFx0c3RydWN0IG11dGV4XHRcdFx0bXVsdGlvcF9sb2NrO1xuK1x0c3RydWN0IG11dGV4XHRcdFx0dGllX2xvY2s7XG4rXHRzdHJ1Y3QgbXV0ZXhcdFx0XHRwaGFzZV9zdGVwX2xvY2s7XG4gXG4gXHQvKiBJbnZhcmlhbnRzICovXG4gXHRzdHJ1Y3QgemwzMDczeF9yZWZcdHJlZltaTDMwNzNYX05VTV9SRUZTXTtcbkBAIC04Nyw2ICs5Niw3IEBAIHN0cnVjdCB6bDMwNzN4X2RldiB7XG4gXG4gXHQvKiBQZXItY2hpcCBwYXJhbWV0ZXJzICovXG4gXHR1NjRcdFx0XHRjbG9ja19pZDtcbitcdHUxNlx0XHRcdG91dF9zdGVwX3RpbWVfbWFzaztcbiBcdHU4XHRcdFx0cGhhc2VfYXZnX2ZhY3RvcjtcbiBcdGJvb2xcdFx0XHRmcmVxX21vbml0b3I7XG4gfTtcbkBAIC0zMDgsNiArMzE4LDE5IEBAIHpsMzA3M3hfZGV2X291dF9pc19lbmFibGVkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxuIFx0cmV0dXJuIHpsMzA3M3hfc3ludGhfaXNfZW5hYmxlZChzeW50aCkgXHUwMDI2XHUwMDI2IHpsMzA3M3hfb3V0X2lzX2VuYWJsZWQob3V0KTtcbiB9XG4gXG4rLyoqXG4rICogemwzMDczeF9kZXZfb3V0X2lzX3N0ZXBwZWQgLSBjaGVjayBpZiBvdXRwdXQgaXMgaW4gc3RlcC10aW1lIG1hc2tcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAaW5kZXg6IG91dHB1dCBpbmRleFxuKyAqXG4rICogUmV0dXJuOiB0cnVlIGlmIG91dHB1dCBpcyBhZmZlY3RlZCBieSBzdGVwLXRpbWUgb3BlcmF0aW9uc1xuKyAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbFxuK3psMzA3M3hfZGV2X291dF9pc19zdGVwcGVkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxuK3tcbitcdHJldHVybiAhISh6bGRldi1cdTAwM2VvdXRfc3RlcF90aW1lX21hc2sgXHUwMDI2IEJJVChpbmRleCkpO1xuK31cbitcbiAvKipcbiAgKiB6bDMwNzN4X2Rldl9vdXRfZHBsbF9nZXQgLSBnZXQgRFBMTCBJRCB0aGUgb3V0cHV0IGlzIGRyaXZlbiBieVxuICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuY1xuaW5kZXggODNiZDMwMjdkYmFhMS4uZjJlMTM3NDc1YjQwZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuY1xuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jXG5AQCAtMiw2ICsyLDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnVnLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jb250YWluZXJfb2YuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Rldl9wcmludGsuaFx1MDAzZVxuQEAgLTEzLDYgKzE0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRsaW5rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zcHJpbnRmLmhcdTAwM2VcbiBcbkBAIC0yMzEzLDQ1ICsyMzE1LDM4NCBAQCB6bDMwNzN4X2RwbGxfaW5pdF9maW5lX3BoYXNlX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxuIFx0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19TWU5USF9QSEFTRV9TSElGVF9DVFJMLCAweDAxKTtcbiB9XG4gXG4rLyogTWF4aW11bSBmcmVxdWVuY3kgYWRqdXN0bWVudDogKy0xJSBvZiBub21pbmFsIGluIHBwYiAqL1xuKyNkZWZpbmUgWkwzMDczWF9EUExMX1BUUF9NQVhfQURKXHQxMDAwMDAwMFxuK1xuIC8qKlxuLSAqIHpsMzA3M3hfZHBsbF9hbGxvYyAtIGFsbG9jYXRlIERQTEwgZGV2aWNlXG4tICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4tICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyXG4rICogemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0IC0gcmVhZCBjdXJyZW50IHRpbWUgZnJvbSBUb0QgY291bnRlcnNcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbisgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIGN1cnJlbnQgdGltZVxuKyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nXG4gICpcbi0gKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKVxuK3tcbitcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxuK1x0XHRcdFx0XHRcdCAgIHB0cF9pbmZvKTtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXG4rXHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCwgZmFsc2UsIHRzLCBzdHMpO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCAtIHNldCBUb0QgY291bnRlcnMgdG8gZ2l2ZW4gdGltZVxuKyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xuKyAqIEB0czogdGltZXNwZWMgd2l0aCB0aW1lIHRvIHNldFxuICAqXG4tICogUmV0dXJuOiBwb2ludGVyIHRvIERQTEwgZGV2aWNlIG9uIHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgb24gZXJyb3JcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuICAqL1xuLXN0cnVjdCB6bDMwNzN4X2RwbGwgKlxuLXpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcbitcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcbiB7XG4tXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4gXG4tXHR6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTtcbi1cdGlmICghemxkcGxsKVxuLVx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4gXG4tXHR6bGRwbGwtXHUwMDNlZGV2ID0gemxkZXY7XG4tXHR6bGRwbGwtXHUwMDNlaWQgPSBjaDtcbi1cdG11dGV4X2luaXQoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2emxkcGxsLVx1MDAzZXBpbnMpO1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkcGxsLVx1MDAzZWRldiwgemxkcGxsLVx1MDAzZWlkLCAqdHMpO1xuK31cbiBcbi1cdHJldHVybiB6bGRwbGw7XG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAgLSBhZGp1c3Qgc3ViLXNlY29uZCB0aW1lIHZpYSBwaGFzZSBzdGVwXG4rICogQHpsZHBsbDogRFBMTCBjaGFubmVsXG4rICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMgKG11c3QgYmUgd2l0aGluICgtTlNFQ19QRVJfU0VDLFxuKyAqICAgICAgICAgTlNFQ19QRVJfU0VDKSlcbisgKlxuKyAqIFVzZXMgdGhlIG91dHB1dCBwaGFzZSBzdGVwIG1lY2hhbmlzbSB3aXRoIHRvZF9zdGVwPTEgdG8gYWRqdXN0IGJvdGhcbisgKiB0aGUgb3V0cHV0IGNsb2NrIHBoYXNlIGFuZCB0aGUgVG9EIGNvdW50ZXIgc2ltdWx0YW5lb3VzbHkuIFRoaXMga2VlcHNcbisgKiBvdXRwdXRzIGFuZCBUb0QgY29oZXJlbnQuIE9ubHkgdmFsaWQgZm9yIE5DTy5cbisgKlxuKyAqIE91dHB1dHMgYXJlIGdyb3VwZWQgYnkgc3ludGhlc2l6ZXIgc2luY2UgdGhlIHBoYXNlIHN0ZXAgdmFsdWUgaXMgaW5cbisgKiBzeW50aGVzaXplciBjbG9jayBjeWNsZXMuIFRoZSBmaXJzdCBzeW50aCBncm91cCB3aXRoIGVuYWJsZWQgb3V0cHV0c1xuKyAqIHVzZXMgdG9kX3N0ZXAgdG8gYWRqdXN0IGJvdGggb3V0cHV0cyBhbmQgdGhlIFRvRCBjb3VudGVyLiBSZW1haW5pbmdcbisgKiBncm91cHMgc3RlcCBvdXRwdXRzIG9ubHkuIElmIG5vIHN5bnRoIGhhcyBlbmFibGVkIG91dHB1dHMsIHRoZSBUb0RcbisgKiBjb3VudGVyIGlzIHN0ZXBwZWQgYWxvbmUgdXNpbmcgYW4gZW1wdHkgb3V0cHV0IG1hc2sgKHRoZSBGVyB1c2VzXG4rICogdGhlIGZpcnN0IGVuYWJsZWQgc3ludGgncyBwZXJpb2QgZm9yIHRoZSBjb252ZXJzaW9uKS5cbisgKlxuKyAqIFJldHVybjpcbisgKiAqICUwXHRcdFx0LSBzdWNjZXNzIChvciBwYXJ0aWFsIHN1Y2Nlc3MgaWYgYSBsYXRlciBzeW50aCBncm91cFxuKyAqXHRcdFx0ICBmYWlsZWQgYWZ0ZXIgdGhlIGZpcnN0IHdhcyBhbHJlYWR5IHN0ZXBwZWQpXG4rICogKiAlLUVPUE5PVFNVUFBcdC0gbm8gc3ludGhzIGF2YWlsYWJsZVxuKyAqICogbmVnYXRpdmVcdFx0LSBlcnJvclxuKyAqL1xuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLFxuK1x0XHRcdFx0XHQgICAgICAgczY0IGRlbHRhKVxuK3tcbitcdHUxNiBzeW50aF9tYXNrW1pMMzA3M1hfTlVNX1NZTlRIU10gPSB7fTtcbitcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuK1x0Y29uc3Qgc3RydWN0IHpsMzA3M3hfc3ludGggKnN5bnRoO1xuK1x0c3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbjtcbitcdHUzMiBmaXJzdF9zeW50aF9mcmVxID0gMDtcbitcdGJvb2wgdG9kX3N0ZXBwZWQgPSBmYWxzZTtcbitcdHMzMiBzdGVwX2N5Y2xlcztcbitcdHUzMiBzeW50aF9mcmVxO1xuK1x0aW50IHJjO1xuK1x0dTggaTtcbitcbitcdC8qIEJ1aWxkIHBlci1zeW50aCBvdXRwdXQgbWFza3MgZnJvbSByZWdpc3RlcmVkIG91dHB1dCBwaW5zICovXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBpbiwgXHUwMDI2emxkcGxsLVx1MDAzZXBpbnMsIGxpc3QpIHtcbitcdFx0dTggb3V0X2lkLCBzeW50aF9pZDtcbitcbitcdFx0aWYgKHpsMzA3M3hfZHBsbF9pc19pbnB1dF9waW4ocGluKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0b3V0X2lkID0gemwzMDczeF9vdXRwdXRfcGluX291dF9nZXQocGluLVx1MDAzZWlkKTtcbitcbitcdFx0aWYgKCF6bDMwNzN4X2Rldl9vdXRfaXNfc3RlcHBlZCh6bGRldiwgb3V0X2lkKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0c3ludGhfaWQgPSB6bDMwNzN4X2Rldl9vdXRfc3ludGhfZ2V0KHpsZGV2LCBvdXRfaWQpO1xuK1x0XHRpZiAoc3ludGhfaWQgXHUwMDNlPSBaTDMwNzNYX05VTV9TWU5USFMpIHtcbitcdFx0XHRkZXZfd2Fybih6bGRldi1cdTAwM2VkZXYsIFwiVW5leHBlY3RlZCBzeW50aCBpZCBmb3IgT1VUJXVcXG5cIixcbitcdFx0XHRcdCBvdXRfaWQpO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXHRcdHN5bnRoX21hc2tbc3ludGhfaWRdIHw9IEJJVChvdXRfaWQpO1xuK1x0fVxuK1xuK1x0LyogUHJvY2VzcyBlYWNoIHN5bnRoIGdyb3VwICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBaTDMwNzNYX05VTV9TWU5USFM7IGkrKykge1xuK1x0XHRzeW50aCA9IHpsMzA3M3hfc3ludGhfc3RhdGVfZ2V0KHpsZGV2LCBpKTtcbitcdFx0aWYgKCF6bDMwNzN4X3N5bnRoX2lzX2VuYWJsZWQoc3ludGgpIHx8XG4rXHRcdCAgICB6bDMwNzN4X3N5bnRoX2RwbGxfZ2V0KHN5bnRoKSAhPSB6bGRwbGwtXHUwMDNlaWQpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHN5bnRoX2ZyZXEgPSB6bDMwNzN4X3N5bnRoX2ZyZXFfZ2V0KHN5bnRoKTtcbitcbitcdFx0LyogUmVtZW1iZXIgZmlyc3QgZW5hYmxlZCBzeW50aCBmcmVxIGZvciBUb0Qtb25seSBmYWxsYmFjayAqL1xuK1x0XHRpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpXG4rXHRcdFx0Zmlyc3Rfc3ludGhfZnJlcSA9IHN5bnRoX2ZyZXE7XG4rXG4rXHRcdGlmICghc3ludGhfbWFza1tpXSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0LyogU2FmZSBmb3IgczMyOiBtYXggc3ludGggZnJlcSBpcyA3NTAgTUh6ICovXG4rXHRcdHN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIHN5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7XG4rXG4rXHRcdHJjID0gemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCxcbitcdFx0XHRcdFx0ICAgICBzeW50aF9tYXNrW2ldLCBzdGVwX2N5Y2xlcyxcbitcdFx0XHRcdFx0ICAgICAhdG9kX3N0ZXBwZWQpO1xuK1x0XHRpZiAocmMpIHtcbitcdFx0XHRpZiAodG9kX3N0ZXBwZWQpIHtcbitcdFx0XHRcdGRldl93YXJuKHpsZGV2LVx1MDAzZWRldixcbitcdFx0XHRcdFx0IFwiUGFydGlhbCBwaGFzZSBzdGVwIGZhaWx1cmVcXG5cIik7XG4rXHRcdFx0XHRyZXR1cm4gMDtcbitcdFx0XHR9XG4rXHRcdFx0cmV0dXJuIHJjO1xuK1x0XHR9XG4rXHRcdHRvZF9zdGVwcGVkID0gdHJ1ZTtcbitcdH1cbitcbitcdGlmICghZmlyc3Rfc3ludGhfZnJlcSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0LyogTm8gZW5hYmxlZCBvdXRwdXRzIGZvdW5kOyBzdGVwIFRvRCBjb3VudGVyIG9ubHkgdXNpbmcgdGhlXG4rXHQgKiBmaXJzdCBlbmFibGVkIHN5bnRoJ3MgcGVyaW9kIChlbXB0eSBvdXRwdXQgbWFzaykuXG4rXHQgKi9cbitcdGlmICghdG9kX3N0ZXBwZWQpIHtcbitcdFx0c3RlcF9jeWNsZXMgPSBkaXZfczY0KGRlbHRhICogZmlyc3Rfc3ludGhfZnJlcSwgTlNFQ19QRVJfU0VDKTtcbitcdFx0cmV0dXJuIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsIDAsXG4rXHRcdFx0XHRcdCAgICAgICBzdGVwX2N5Y2xlcywgdHJ1ZSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gLyoqXG4tICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlXG4tICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lIC0gYWRqdXN0IFBUUCBjbG9jayB0aW1lXG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4rICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHNcbiAgKlxuLSAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuXG4rICogRm9yIE5DTywgbGFyZ2UgZGVsdGFzIChcdTAwM2U9IDEgc2Vjb25kKSBhcmUgc3BsaXQgaW50byBhIFRvRFxuKyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciB0aGUgc2Vjb25kcyBwYXJ0IGFuZCBhbiBvdXRwdXQgcGhhc2Ugc3RlcCBmb3JcbisgKiB0aGUgc3ViLXNlY29uZCByZW1haW5kZXIuIFN1Yi1zZWNvbmQgZGVsdGFzIHVzZSBwaGFzZSBzdGVwIGRpcmVjdGx5LFxuKyAqIGZhbGxpbmcgYmFjayB0byBUb0QgcmVhZC1tb2RpZnktd3JpdGUgaWYgcGhhc2Ugc3RlcCBvciBUSUUgd3JpdGVcbisgKiBmYWlscy4gSW4gQVVUTy9SRUZMT0NLIG1vZGVzLCBsYXJnZSBkZWx0YXMgYXJlIHNwbGl0IGludG8gVG9EXG4rICogcmVhZC1tb2RpZnktd3JpdGUgZm9yIHNlY29uZHMgYW5kIFRJRSB3cml0ZSBmb3IgdGhlIHN1Yi1zZWNvbmRcbisgKiByZW1haW5kZXIuIFN1Yi1zZWNvbmQgZGVsdGFzIHVzZSBUSUUgd3JpdGUgZGlyZWN0bHkuXG4rICpcbisgKiBJZiB0aGUgc2Vjb25kcyBwYXJ0IHdhcyBhbHJlYWR5IGNvbW1pdHRlZCB3aGVuIHRoZSBzdWItc2Vjb25kXG4rICogbWVjaGFuaXNtIGZhaWxzLCByZXR1cm5zIDAgdG8gcHJldmVudCB0aGUgUFRQIHNlcnZvIGZyb20gcmV0cnlpbmdcbisgKiB0aGUgZnVsbCBkZWx0YSBhbmQgYXBwbHlpbmcgc2Vjb25kcyBhZ2Fpbi5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzIChvciBwYXJ0aWFsIHN1Y2Nlc3MpLCBcdTAwM2MwIG9uIGVycm9yXG4gICovXG4tdm9pZFxuLXpsMzA3M3hfZHBsbF9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHM2NCBkZWx0YSlcbiB7XG4tXHRXQVJOKHpsZHBsbC1cdTAwM2VkcGxsX2RldiwgXCJEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXFxuXCIpO1xuK1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXG4rXHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuK1x0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4rXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xuK1x0Ym9vbCBzZWNfYWRqdXN0ZWQgPSBmYWxzZTtcbitcdHN0cnVjdCB0aW1lc3BlYzY0IHRzO1xuK1x0aW50IHJjO1xuIFxuLVx0bXV0ZXhfZGVzdHJveShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4tXHRrZnJlZSh6bGRwbGwpO1xuK1x0aWYgKCFkZWx0YSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuK1x0LyogTW9kZXMgd2l0aG91dCBwaGFzZSBzdGVwIG9yIFRJRSB1c2UgcGxhaW4gVG9EIGFkanVzdCAqL1xuK1x0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCk7XG4rXHRpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKVxuK1x0XHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCxcbitcdFx0XHRcdFx0ICAgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTtcbitcbitcdC8qIFNwbGl0IG9mZiBzZWNvbmRzIHZpYSBUb0QgcmVhZC1tb2RpZnktd3JpdGUgc28gdGhlIHN1Yi1zZWNvbmRcbitcdCAqIHJlbWFpbmRlciBjYW4gYmUgYXBwbGllZCB0aHJvdWdoIHRoZSBvdXRwdXQtY29oZXJlbnQgbWVjaGFuaXNtXG4rXHQgKiAocGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUpLlxuK1x0ICovXG4rXHRpZiAoZGVsdGEgXHUwMDNlPSBOU0VDX1BFUl9TRUMgfHwgZGVsdGEgXHUwMDNjPSAtTlNFQ19QRVJfU0VDKSB7XG4rXHRcdHMzMiByZW1haW5kZXI7XG4rXG4rXHRcdHRzLnR2X3NlYyA9IGRpdl9zNjRfcmVtKGRlbHRhLCBOU0VDX1BFUl9TRUMsIFx1MDAyNnJlbWFpbmRlcik7XG4rXHRcdHRzLnR2X25zZWMgPSAwO1xuK1x0XHRkZWx0YSA9IHJlbWFpbmRlcjtcbitcbitcdFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCB0cyk7XG4rXHRcdGlmIChyYylcbitcdFx0XHRyZXR1cm4gcmM7XG4rXG4rXHRcdC8qIE5vIHN1Yi1zZWNvbmQgcmVtYWluZGVyLCBkb25lICovXG4rXHRcdGlmICghZGVsdGEpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXG4rXHRcdC8qIFdhaXQgZm9yIHRoZSBUb0Qgd3JpdGUgdG8gYmUgYXBwbGllZCBhdCB0aGUgMSBIeiBlZGdlXG4rXHRcdCAqIGJlZm9yZSBpc3N1aW5nIHBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlLCBzbyB0aGUgcGVuZGluZ1xuK1x0XHQgKiBXUl9ORVhUXzFIWiBkb2VzIG5vdCBvdmVyd3JpdGUgdGhlIHN1Yi1zZWNvbmQgYWRqdXN0bWVudC5cbitcdFx0ICovXG4rXHRcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQpO1xuK1x0XHRpZiAocmMpXG4rXHRcdFx0cmV0dXJuIHJjO1xuK1xuK1x0XHRzZWNfYWRqdXN0ZWQgPSB0cnVlO1xuK1x0fVxuK1xuK1x0LyogQXBwbHkgc3ViLXNlY29uZCBkZWx0YSB2aWEgcGhhc2Ugc3RlcCAoTkNPKSBvciBUSUUgd3JpdGUgKi9cbitcdGlmICh6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikpIHtcbitcdFx0cmMgPSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCh6bGRwbGwsIGRlbHRhKTtcbitcdFx0aWYgKCFyYylcbitcdFx0XHRyZXR1cm4gMDtcbitcdH0gZWxzZSB7XG4rXHRcdHJjID0gemwzMDczeF9jaGFuX3RpZV93cml0ZSh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCBkZWx0YSk7XG4rXHRcdGlmICghcmMpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHQvKiBQaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSBmYWlsZWQsIGZhbGwgYmFjayB0byBUb0QgYWRqdXN0ICovXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsXG4rXHRcdFx0XHQgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTtcbitcbitcdC8qIEluIHRoZSB1bmxpa2VseSBldmVudCB0aGF0IGJvdGggcGhhc2Ugc3RlcC9USUUgd3JpdGUgYW5kIGZhbGxiYWNrXG4rXHQgKiBUb0QgYWRqdXN0IGZhaWwgYWZ0ZXIgc2Vjb25kcyB3ZXJlIGFscmVhZHkgY29tbWl0dGVkLCByZXR1cm5cbitcdCAqIHN1Y2Nlc3MgdG8gcHJldmVudCB0aGUgUFRQIHNlcnZvIGZyb20gcmV0cnlpbmcgdGhlIGZ1bGwgZGVsdGEgYW5kXG4rXHQgKiBhcHBseWluZyBzZWNvbmRzIGFnYWluLiBUaGUgc3ViLXNlY29uZCByZXNpZHVhbCB3aWxsIHNlbGYtY29ycmVjdFxuK1x0ICogaW4gdGhlIG5leHQgc2Vydm8gY3ljbGUuXG4rXHQgKi9cbitcdGlmIChyYyBcdTAwMjZcdTAwMjYgc2VjX2FkanVzdGVkKSB7XG4rXHRcdGRldl93YXJuKHpsZGV2LVx1MDAzZWRldixcbitcdFx0XHQgXCJTdWItc2Vjb25kIGFkanVzdG1lbnQgZmFpbGVkIGFmdGVyIHNlY29uZHMgYXBwbGllZFxcblwiKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmM7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSAtIGFkanVzdCBQVFAgY2xvY2sgZnJlcXVlbmN5XG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4rICogQHNjYWxlZF9wcG06IGZyZXF1ZW5jeSBhZGp1c3RtZW50IGluIHNjYWxlZCBwcG0gKHBwbSAqIDJeMTYpXG4rICpcbisgKiBPbmx5IHN1cHBvcnRlZCBmb3IgTkNPLiBXcml0ZXMgdGhlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgcmVnaXN0ZXIuXG4rICpcbisgKiBSZXR1cm46XG4rICogKiAlMFx0XHRcdC0gc3VjY2VzcyBvciBAc2NhbGVkX3BwbSBpcyB6ZXJvIChuby1vcClcbisgKiAqICUtRU9QTk9UU1VQUFx0LSBOQ08gcGluIGlzIG5vdCBjb25uZWN0ZWQgYW5kIEBzY2FsZWRfcHBtIGlzIG5vbi16ZXJvXG4rICogKiBuZWdhdGl2ZVx0XHQtIG90aGVyIGVycm9yXG4rICovXG4rc3RhdGljIGludFxuK3psMzA3M3hfZHBsbF9wdHBfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGxvbmcgc2NhbGVkX3BwbSlcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xuK1x0czY0IG9mZnNldDtcbitcbitcdC8qIENvbnZlcnQgc2NhbGVkX3BwbSB0byBkZl9vZmZzZXQgaW4gMl4tNDggc3RlcHM6XG4rXHQgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDJeMzIpIC8gMTBeNlxuK1x0ICpcbitcdCAqIFNpbXBsaWZ5IHRvIGF2b2lkIG92ZXJmbG93OlxuK1x0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjI2KSAvIDVeNlxuK1x0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiA2NzEwODg2NCkgLyAxNTYyNVxuK1x0ICovXG4rXHRvZmZzZXQgPSAtZGl2X3M2NCgoczY0KXNjYWxlZF9wcG0gKiA2NzEwODg2NExMLCAxNTYyNSk7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuK1x0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkcGxsLVx1MDAzZWRldiwgemxkcGxsLVx1MDAzZWlkKTtcbitcdGlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKVxuK1x0XHRyZXR1cm4gc2NhbGVkX3BwbSA/IC1FT1BOT1RTVVBQIDogMDtcbitcdGlmIChvZmZzZXQgPT0gY2hhbi1cdTAwM2VkZl9vZmZzZXQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCwgb2Zmc2V0KTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSAtIGFkanVzdCBQVFAgY2xvY2sgcGhhc2VcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbisgKiBAZGVsdGE6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHNcbisgKlxuKyAqIE9ubHkgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMuIFVzZXMgVElFIHdyaXRlIGZvclxuKyAqIG5hbm9zZWNvbmQgcmVzb2x1dGlvbiBwaGFzZSBhZGp1c3RtZW50LlxuKyAqXG4rICogUmV0dXJuOlxuKyAqICogJTBcdFx0XHQtIHN1Y2Nlc3Mgb3IgQGRlbHRhIGlzIHplcm8gKG5vLW9wKVxuKyAqICogJS1FT1BOT1RTVVBQXHQtIG1vZGUgZG9lcyBub3Qgc3VwcG9ydCBUSUUgYW5kIEBkZWx0YSBpcyBub24temVyb1xuKyAqICogbmVnYXRpdmVcdFx0LSBvdGhlciBlcnJvclxuKyAqL1xuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHMzMiBkZWx0YSlcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbitcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XG4rXG4rXHRpZiAoIWRlbHRhKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXG4rXHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLVx1MDAzZWlkKTtcbitcbitcdGlmICghemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRyZXR1cm4gemwzMDczeF9jaGFuX3RpZV93cml0ZSh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCBkZWx0YSk7XG4rfVxuK1xuK3N0YXRpYyBzMzJcbit6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyBfX2Fsd2F5c191bnVzZWQpXG4re1xuK1x0LyogSFcgbGltaXRzIFRJRSB3cml0ZSB0byArLTEgc2Vjb25kLiBSZXR1cm4gdGhlIGNvbnN0YW50IEhXXG4rXHQgKiBsaW1pdCBhbmQgbGV0IGFkanBoYXNlIGhhbmRsZSBtb2RlLXNwZWNpZmljIGNoZWNrcy5cbitcdCAqL1xuK1x0cmV0dXJuIE5TRUNfUEVSX1NFQyAtIDE7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvID0ge1xuK1x0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4rXHQubWF4X2Fkalx0PSBaTDMwNzNYX0RQTExfUFRQX01BWF9BREosXG4rXHQuZ2V0dGltZXg2NFx0PSB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQsXG4rXHQuc2V0dGltZTY0XHQ9IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0LFxuK1x0LmFkanRpbWVcdD0gemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lLFxuK1x0LmFkamZpbmVcdD0gemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lLFxuK1x0LmFkanBoYXNlXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2UsXG4rXHQuZ2V0bWF4cGhhc2VcdD0gemwzMDczeF9kcGxsX3B0cF9nZXRtYXhwaGFzZSxcbit9O1xuK1xuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIgLSByZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsXG4rICogQHpsZHBsbDogRFBMTCBjaGFubmVsIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3JcbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbitcdHN0cnVjdCBwdHBfY2xvY2sgKnB0cF9jbG9jaztcbitcbitcdHpsZHBsbC1cdTAwM2VwdHBfaW5mbyA9IHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mbztcbitcdHNucHJpbnRmKHpsZHBsbC1cdTAwM2VwdHBfaW5mby5uYW1lLCBzaXplb2YoemxkcGxsLVx1MDAzZXB0cF9pbmZvLm5hbWUpLFxuK1x0XHQgXCIlcy1kcGxsJXVcIiwgZGV2X25hbWUoemxkZXYtXHUwMDNlZGV2KSwgemxkcGxsLVx1MDAzZWlkKTtcbitcbitcdHB0cF9jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcihcdTAwMjZ6bGRwbGwtXHUwMDNlcHRwX2luZm8sIHpsZGV2LVx1MDAzZWRldik7XG4rXHRpZiAoSVNfRVJSKHB0cF9jbG9jaykpIHtcbitcdFx0ZGV2X2Vycih6bGRldi1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgRFBMTCV1XFxuXCIsXG4rXHRcdFx0emxkcGxsLVx1MDAzZWlkKTtcbitcdFx0cmV0dXJuIFBUUl9FUlIocHRwX2Nsb2NrKTtcbitcdH1cbitcbitcdHpsZHBsbC1cdTAwM2VwdHBfY2xvY2sgPSBwdHBfY2xvY2s7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyIC0gdW5yZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsXG4rICogQHpsZHBsbDogRFBMTCBjaGFubmVsIHRvIHVucmVnaXN0ZXIgUFRQIGNsb2NrIGZvclxuKyAqL1xuK3N0YXRpYyB2b2lkIHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4re1xuK1x0aWYgKCFJU19FUlJfT1JfTlVMTCh6bGRwbGwtXHUwMDNlcHRwX2Nsb2NrKSkge1xuK1x0XHRwdHBfY2xvY2tfdW5yZWdpc3Rlcih6bGRwbGwtXHUwMDNlcHRwX2Nsb2NrKTtcbitcdFx0emxkcGxsLVx1MDAzZXB0cF9jbG9jayA9IE5VTEw7XG4rXHR9XG4gfVxuIFxuIC8qKlxuQEAgLTI0MzYsNiArMjc3Nyw0NyBAQCB6bDMwNzN4X2RwbGxfcmVmX3N5bmNfcGFpcnNfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9hbGxvYyAtIGFsbG9jYXRlIERQTEwgZGV2aWNlXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyXG4rICpcbisgKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuXG4rICpcbisgKiBSZXR1cm46IHBvaW50ZXIgdG8gRFBMTCBkZXZpY2Ugb24gc3VjY2VzcywgZXJyb3IgcG9pbnRlciBvbiBlcnJvclxuKyAqL1xuK3N0cnVjdCB6bDMwNzN4X2RwbGwgKlxuK3psMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7XG4rXG4rXHR6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTtcbitcdGlmICghemxkcGxsKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcbitcdHpsZHBsbC1cdTAwM2VkZXYgPSB6bGRldjtcbitcdHpsZHBsbC1cdTAwM2VpZCA9IGNoO1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXHRJTklUX0xJU1RfSEVBRChcdTAwMjZ6bGRwbGwtXHUwMDNlcGlucyk7XG4rXG4rXHRyZXR1cm4gemxkcGxsO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfZnJlZSAtIGZyZWUgRFBMTCBkZXZpY2VcbisgKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmVcbisgKlxuKyAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuXG4rICovXG4rdm9pZFxuK3psMzA3M3hfZHBsbF9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbit7XG4rXHRXQVJOKHpsZHBsbC1cdTAwM2VkcGxsX2RldiwgXCJEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXFxuXCIpO1xuK1xuK1x0bXV0ZXhfZGVzdHJveShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXHRrZnJlZSh6bGRwbGwpO1xuK31cbitcbiAvKipcbiAgKiB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIgLSByZWdpc3RlciBEUExMIGRldmljZSBhbmQgYWxsIGl0cyBwaW5zXG4gICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXG5AQCAtMjQ2Niw2ICsyODQ4LDEzIEBAIHpsMzA3M3hfZHBsbF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4gXHRcdHJldHVybiByYztcbiBcdH1cbiBcbitcdHJjID0gemwzMDczeF9kcGxsX3B0cF9yZWdpc3Rlcih6bGRwbGwpO1xuK1x0aWYgKHJjKSB7XG4rXHRcdHpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTtcbitcdFx0emwzMDczeF9kcGxsX2RldmljZV91bnJlZ2lzdGVyKHpsZHBsbCk7XG4rXHRcdHJldHVybiByYztcbitcdH1cbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0yNDc5LDcgKzI4NjgsNyBAQCB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIHZvaWRcbiB6bDMwNzN4X2RwbGxfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4ge1xuLVx0LyogVW5yZWdpc3RlciBhbGwgcGlucyBhbmQgZHBsbCAqL1xuK1x0emwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHpsZHBsbCk7XG4gXHR6bDMwNzN4X2RwbGxfcGluc191bnJlZ2lzdGVyKHpsZHBsbCk7XG4gXHR6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXG5pbmRleCBmYWViYzQwMmJhMWI3Li45OTMyMjFkYzYzMjQ5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmhcbkBAIC01LDYgKzUsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RwbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiY29yZS5oXCJcbiBcbkBAIC0yMiw2ICsyMyw4IEBAXG4gICogQHR5cGU6IERQTEwgdHlwZSAoUFBTIG9yIEVFQylcbiAgKiBAbG9ja19zdGF0dXM6IGxhc3Qgc2F2ZWQgRFBMTCBsb2NrIHN0YXR1c1xuICAqIEBwaW5zOiBsaXN0IG9mIHBpbnNcbisgKiBAcHRwX2luZm86IFBUUCBjbG9jayBpbmZvXG4rICogQHB0cF9jbG9jazogcmVnaXN0ZXJlZCBQVFAgY2xvY2sgKG9yIE5VTEwpXG4gICovXG4gc3RydWN0IHpsMzA3M3hfZHBsbCB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRcdGxpc3Q7XG5AQCAtMzYsNiArMzksOCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsIHtcbiBcdGVudW0gZHBsbF90eXBlXHRcdFx0dHlwZTtcbiBcdGVudW0gZHBsbF9sb2NrX3N0YXR1c1x0XHRsb2NrX3N0YXR1cztcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdFx0cGlucztcbitcdHN0cnVjdCBwdHBfY2xvY2tfaW5mb1x0XHRwdHBfaW5mbztcbitcdHN0cnVjdCBwdHBfY2xvY2tcdFx0KnB0cF9jbG9jaztcbiB9O1xuIFxuIHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXG5pbmRleCBiNzBlYWQ3ZDQ0OTViLi5mM2E1ZTEyMTVhYTM2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhcbkBAIC0xNzksNiArMTc5LDIwIEBAXG4gI2RlZmluZSBaTF9EUExMX0RGX1JFQURfQ01EXHRcdFx0R0VOTUFTSygyLCAwKVxuICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRF9BQ0NfSVx0XHQ0XG4gXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTFx0XHRcdFpMX1JFRyg1LCAweDMwLCAxKVxuKyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUFx0XHRcdEdFTk1BU0soMiwgMClcbisjZGVmaW5lIFpMX0RQTExfVElFX0NUUkxfT1BfV1JcdFx0XHQ0XG4rXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTF9NQVNLXHRcdFpMX1JFRyg1LCAweDMxLCAxKVxuK1xuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX0NUUkwoX2lkeClcdFx0XHRcdFx0XFxcbitcdFpMX1JFR19JRFgoX2lkeCwgNSwgMHgzOCwgMSwgWkwzMDczWF9NQVhfQ0hBTk5FTFMsIDEpXG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX1NFTVx0XHRcdEJJVCg0KVxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURcdFx0XHRHRU5NQVNLKDMsIDApXG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWlx0MVxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVFx0XHQ4XG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9ORVhUXzFIWlx0OVxuK1xuICNkZWZpbmUgWkxfUkVHX0RQTExfTUVBU19DVFJMXHRcdFx0WkxfUkVHKDUsIDB4NTAsIDEpXG4gI2RlZmluZSBaTF9EUExMX01FQVNfQ1RSTF9FTlx0XHRcdEJJVCgwKVxuICNkZWZpbmUgWkxfRFBMTF9NRUFTX0NUUkxfQVZHX0ZBQ1RPUlx0XHRHRU5NQVNLKDcsIDQpXG5AQCAtMTkzLDYgKzIwNyw5IEBAXG4gXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgKiBSZWdpc3RlciBQYWdlcyA2LTcsIERQTEwgRGF0YVxuKyAqXG4rICogUGVyLWNoYW5uZWwgcmVnaXN0ZXJzIHdpdGggc3RyaWRlIDB4MjAuIENoYW5uZWxzIDAtMyByZXNpZGUgb24gcGFnZSA2LFxuKyAqIGNoYW5uZWwgNCBvbiBwYWdlIDcuXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gXG4gI2RlZmluZSBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeClcdFx0XHRcdFx0XFxcbkBAIC0yMDIsNiArMjE5LDI0IEBAXG4gXHQoKF9pZHgpIFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfREZfT0ZGU0VUXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfREZfT0ZGU0VUXzQpXG4gI2RlZmluZSBaTF9EUExMX0RGX09GRlNFVF9VTktOT1dOXHRTNjRfTUlOXG4gXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KVx0XHRcdFx0XHRcXFxuK1x0WkxfUkVHX0lEWChfaWR4LCA2LCAweDBDLCA2LCA0LCAweDIwKVxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEFfNFx0XHRcdFpMX1JFRyg3LCAweDBDLCA2KVxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEEoX2lkeClcdFx0XHRcdFx0XFxcbitcdCgoX2lkeCkgXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RJRV9EQVRBXzQpXG4rXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG4rXHRaTF9SRUdfSURYKF9pZHgsIDYsIDB4MTIsIDYsIDQsIDB4MjApXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzRcdFx0XHRaTF9SRUcoNywgMHgxMiwgNilcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUMoX2lkeClcdFx0XHRcdFx0XFxcbitcdCgoX2lkeCkgXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVE9EX1NFQ180KVxuK1xuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG4rXHRaTF9SRUdfSURYKF9pZHgsIDYsIDB4MTgsIDQsIDQsIDB4MjApXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlNfNFx0XHRcdFpMX1JFRyg3LCAweDE4LCA0KVxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TKF9pZHgpXHRcdFx0XHRcdFxcXG4rXHQoKF9pZHgpIFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfVE9EX05TXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVE9EX05TXzQpXG4rXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICogUmVnaXN0ZXIgUGFnZSA5LCBTeW50aCBhbmQgT3V0cHV0XG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuQEAgLTIyMSw2ICsyNTYsMjMgQEBcbiAjZGVmaW5lIFpMX09VVFBVVF9DVFJMX0VOXHRcdFx0QklUKDApXG4gI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9TWU5USF9TRUxcdFx0R0VOTUFTSyg2LCA0KVxuIFxuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTS1x0XHRaTF9SRUcoOSwgMHgzNiwgMilcbitcbisjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMXHRcdFpMX1JFRyg5LCAweDM4LCAxKVxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9EUExMXHRcdEdFTk1BU0soNiwgNClcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVBcdEJJVCgzKVxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUFx0XHRHRU5NQVNLKDEsIDApXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX05PTkVcdDBcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfUkVTRVRcdDFcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfUkVBRFx0MlxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURVx0M1xuK1xuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUlx0XHRaTF9SRUcoOSwgMHgzOSwgMSlcbitcbisjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLXHRcdFpMX1JFRyg5LCAweDNhLCAyKVxuK1xuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0RBVEFcdFx0WkxfUkVHKDksIDB4M2MsIDQpXG4rXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgKiBSZWdpc3RlciBQYWdlIDEwLCBSZWYgTWFpbGJveFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6NDE6MDYuNjcxODM0MDUyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA2Njc2MTQ0NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBaTDMwNzNYIERQTEwgRHJpdmVyIFBhdGNoIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KipcblxuT2theSwgc28gSSBoYXZlIGEgcGF0Y2ggaGVyZSB0aGF0J3MgYWRkaW5nIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBgemwzMDczeGAgRFBMTCBkcml2ZXIuIFRoaXMgaW52b2x2ZXMgY2hhbmdlcyBhY3Jvc3Mgc2V2ZXJhbCBmaWxlczogYEtjb25maWdgLCBgY2hhbi5jYCwgYGNoYW4uaGAsIGBjb3JlLmNgLCBgY29yZS5oYCwgYGRwbGwuY2AsIGBkcGxsLmhgLCBhbmQgYHJlZ3MuaGAuIENydWNpYWxseSwgaXQncyBhZGRpbmcgYSBgUFRQXzE1ODhfQ0xPQ0tgIGRlcGVuZGVuY3kgdG8gYFpMMzA3M1hgLCBgWkwzMDczWF9JMkNgLCBhbmQgYFpMMzA3M1hfU1BJYCwgYW5kIGludHJvZHVjaW5nIG5ldyBQVFAtcmVsYXRlZCBmdW5jdGlvbnMgbGlrZSBgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0YCBhbmQgYHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXJgLiBTZWVtcyBwcmV0dHkgc3RhbmRhcmQgZm9yIFBUUCBjbG9jayBpbnRlZ3JhdGlvbi5cblxuTm93LCB0aGUgcHJvbXB0IGlzIHRocm93aW5nIGEgY3VydmViYWxsLCBhc2tpbmcgaWYgdGhpcyBpcyBmdXp6YWJsZS4gSXQgbWVudGlvbnMgXCJ2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVyc1wiIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBoYXJkd2FyZSBhbmQgY2FuJ3QgYmUgZW11bGF0ZWQuIEJ1dCwgdGhpcyBgemwzMDczeGAgaXMgYSBEUExMIGRyaXZlciBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlcywgc3BlY2lmaWNhbGx5IHVzaW5nIEkyQy9TUEkuIFRoYXQncyBhIGdvb2Qgc2lnbi4gSTJDIGFuZCBTUEkgZGV2aWNlcyBjYW4gb2Z0ZW4gYmUgZW11bGF0ZWQgYW5kIGZ1enplZCBpbiBRRU1VLCByaWdodD8gV2UgY2FuIHR5cGljYWxseSBpbnN0YW50aWF0ZSB0aGVtIHZpYSBkZXZpY2UgdHJlZSBvdmVybGF5cyBvciBzeXNmcywgb3IgZXZlbiBmdXp6IHRoZW0gd2l0aCBzb21ldGhpbmcgbGlrZSBzeXprYWxsZXIuXG5cblN5emthbGxlciwgc3BlY2lmaWNhbGx5LCBoYXMgSTJDIGFuZCBTUEkgc3VwcG9ydDsgaXQgY2FuIGluamVjdCBub2RlcywgdXNlIGBpMmMtc3R1YmAgb3IgYHNwaWAgbG9vcGJhY2tzLCBvciBqdXN0IGluc3RhbnRpYXRlIHRoZW0gYW5kIGZ1enogdGhlaXIgb3BlcmF0aW9ucy4gVGhhdCdzIHRoZSBrZXkuIFRoaXMgZHJpdmVyIHVzZXMgYHJlZ21hcF9pMmNgIGFuZCBgcmVnbWFwX3NwaWAuIFN5emthbGxlciBjYW4gZnV6eiBJMkMgZGV2aWNlcyB2aWEgYC9kZXYvaTJjLSpgIG9yIGJ5IGluc3RhbnRpYXRpbmcgdGhlbSwgc28gdGhhdCdzIGhvcGVmdWwuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGlzIGRyaXZlciBjYW4gYmUgaW5zdGFudGlhdGVkIGluIGEgdmlydHVhbCBlbnZpcm9ubWVudC4gVGhlIHByb21wdCBpcyBzcGVjaWZpY2FsbHkgdGFsa2luZyBhYm91dCBjb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIHNvIHRoYXQncyB3aGF0IEkgaGF2ZSB0byBjaGVjay5cblxuVGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIGNhbiB0aGlzIGJlIGluc3RhbnRpYXRlZCB2aWEsIHNheSwgd3JpdGluZyB0byBgL3N5cy9idXMvaTJjL2RldmljZXMvaTJjLSovbmV3X2RldmljZWA/IFRoYXQgc2hvdWxkIHdvcmsgZm9yIGFueSBJMkMgZHJpdmVyIGlmIHdlIGtub3cgdGhlIGRyaXZlciBuYW1lLiBBbmQgdGhlIGRyaXZlciBuYW1lICpzaG91bGQqIGJlIGB6bDMwNzN4YCwgSSdsbCBkb3VibGUtY2hlY2sgdGhlIHNvdXJjZSB0byBiZSBzdXJlLiBJZiBJIGNhbiBjcmVhdGUgdGhlIEkyQyBkZXZpY2Ugbm9kZSBhbmQgdGhlbiBydW4gdGhpcyBuZXcgY29kZSwgdGhhdCBtZWFucyBJIGNhbiBmdXp6IHRoZSBjb2RlLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIGluc3RhbnRpYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTc4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTE1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6NDE6MTcuMzM5NDUyNjA3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MDcxNDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpsMzA3M3hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9kcGxsL3psMzA3M3gvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNDQ4NiBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZz0zPWNvbmZpZyBaTDMwNzNYXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTE0LVxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWc6MTU6XFx0ICB3aWxsIGJlIGNhbGxlZCB6bDMwNzN4LlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctMTYtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZz0xNz1jb25maWcgWkwzMDczWF9JMkNcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctMjYtXFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnOjI3OlxcdCAgYmUgY2FsbGVkIHpsMzA3M3hfaTJjLlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctMjgtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZz0yOT1jb25maWcgWkwzMDczWF9TUElcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctMzgtXFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnOjM5OlxcdCAgYmUgY2FsbGVkIHpsMzA3M3hfc3BpLlxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvTWFrZWZpbGUtMi1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9NYWtlZmlsZTozOm9iai0kKENPTkZJR19aTDMwNzNYKVxcdFxcdCs9IHpsMzA3M3gub1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L01ha2VmaWxlOjQ6emwzMDczeC1vYmpzXFx0XFx0XFx0Oj0gY2hhbi5vIGNvcmUubyBkZXZsaW5rLm8gZHBsbC5vXFx0XFxcXFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L01ha2VmaWxlLTUtXFx0XFx0XFx0XFx0ICAgZmxhc2gubyBmdy5vIG91dC5vIHByb3AubyByZWYubyBzeW50aC5vXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvTWFrZWZpbGUtNi1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19aTDMwNzNYX0kyQylcXHQrPSB6bDMwNzN4X2kyYy5vXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvTWFrZWZpbGU6ODp6bDMwNzN4X2kyYy1vYmpzXFx0XFx0Oj0gaTJjLm9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9NYWtlZmlsZS05LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19aTDMwNzNYX1NQSSlcXHQrPSB6bDMwNzN4X3NwaS5vXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvTWFrZWZpbGU6MTE6emwzMDczeF9zcGktb2Jqc1xcdFxcdDo9IHNwaS5vXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTMtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE0OiAqIHpsMzA3M3hfY2hhbl9zdGF0ZV91cGRhdGUgLSB1cGRhdGUgRFBMTCBjaGFubmVsIHN0YXR1cyBmcm9tIEhXXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE1OiAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmVcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTYtICogQGluZGV4OiBEUExMIGNoYW5uZWwgaW5kZXhcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xOS0gKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjA6aW50IHpsMzA3M3hfY2hhbl9zdGF0ZV91cGRhdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIxLXtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjI6XFx0c3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiA9IFxcdTAwMjZ6bGRldi1cXHUwMDNlY2hhbltpbmRleF07XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIzLVxcdHU2NCB2YWw7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjUtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI2OlxcdHJjID0gemwzMDczeF9yZWFkX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9NT05fU1RBVFVTKGluZGV4KSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjctXFx0XFx0XFx0ICAgICBcXHUwMDI2Y2hhbi1cXHUwMDNlbW9uX3N0YXR1cyk7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzAtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjMxOlxcdHJjID0gemwzMDczeF9yZWFkX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9SRUZTRUxfU1RBVFVTKGluZGV4KSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzItXFx0XFx0XFx0ICAgICBcXHUwMDI2Y2hhbi1cXHUwMDNlcmVmc2VsX3N0YXR1cyk7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzgtXFx0ICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM5OlxcdGlmICghemwzMDczeF9jaGFuX2lzX2xvY2tlZChjaGFuKSkge1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0MDpcXHRcXHRpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSlcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDEtXFx0XFx0XFx0Y2hhbi1cXHUwMDNlZGZfb2Zmc2V0ID0gWkxfRFBMTF9ERl9PRkZTRVRfVU5LTk9XTjtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00NC1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDU6XFx0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfREZfUkVBRChpbmRleCksXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ2LVxcdFxcdFxcdFxcdCAgWkxfRFBMTF9ERl9SRUFEX1NFTSxcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01MC1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTE6XFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9SRUFEKGluZGV4KSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTItXFx0XFx0XFx0ICAgICAgWkxfRFBMTF9ERl9SRUFEX1NFTSB8IFpMX0RQTExfREZfUkVBRF9SRUZfT0ZTVCk7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTUtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU2OlxcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX0RGX1JFQUQoaW5kZXgpLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01Ny1cXHRcXHRcXHRcXHQgIFpMX0RQTExfREZfUkVBRF9TRU0sXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNjEtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjYyOlxcdHJjID0gemwzMDczeF9yZWFkX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfREZfT0ZGU0VUKGluZGV4KSwgXFx1MDAyNnZhbCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTYzLVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy03MS0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NzI6ICogemwzMDczeF9jaGFuX25jb19tb2RlX3NldCAtIHN3aXRjaCBEUExMIGNoYW5uZWwgdG8gTkNPIG1vZGVcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NzM6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3hfZGV2IHN0cnVjdHVyZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy03NC0gKiBAaW5kZXg6IERQTEwgY2hhbm5lbCBpbmRleFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTgyLSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo4MzppbnQgemwzMDczeF9jaGFuX25jb19tb2RlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleClcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtODQte1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo4NTpcXHRzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuID0gXFx1MDAyNnpsZGV2LVxcdTAwM2VjaGFuW2luZGV4XTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtODYtXFx0dTggcHJldl9tb2RlLCBkZl9yZWFkO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTg5LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo5MDpcXHRwcmV2X21vZGUgPSB6bDMwNzN4X2NoYW5fbW9kZV9nZXQoY2hhbik7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTkxLVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTk2LVxcdGlmIChwcmV2X21vZGUgPT0gWkxfRFBMTF9NT0RFX1JFRlNFTF9NT0RFX0ZSRUVSVU4pIHtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6OTc6XFx0XFx0emwzMDczeF9jaGFuX21vZGVfc2V0KGNoYW4sIFpMX0RQTExfTU9ERV9SRUZTRUxfTU9ERV9OQ08pO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy05OC1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6OTk6XFx0XFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9NT0RFX1JFRlNFTChpbmRleCksXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTEwMC1cXHRcXHRcXHRcXHQgICAgICBjaGFuLVxcdTAwM2Vtb2RlX3JlZnNlbCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTEwMS1cXHRcXHRpZiAocmMpIHtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTAyOlxcdFxcdFxcdHpsMzA3M3hfY2hhbl9tb2RlX3NldChjaGFuLCBwcmV2X21vZGUpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xMDMtXFx0XFx0XFx0cmV0dXJuIHJjO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTEyMC1cXHRcXHQgIEZJRUxEX1BSRVAoWkxfRFBMTF9ERl9SRUFEX0NNRCwgWkxfRFBMTF9ERl9SRUFEX0NNRF9BQ0NfSSk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjEyMTpcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX0RGX1JFQUQoaW5kZXgpLCBkZl9yZWFkKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTIyLVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xMzAtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjEzMTpcXHR6bDMwNzN4X2NoYW5fbW9kZV9zZXQoY2hhbiwgWkxfRFBMTF9NT0RFX1JFRlNFTF9NT0RFX05DTyk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjEzMjpcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX01PREVfUkVGU0VMKGluZGV4KSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTMzLVxcdFxcdFxcdCAgICAgIGNoYW4tXFx1MDAzZW1vZGVfcmVmc2VsKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTM0LVxcdGlmIChyYykge1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxMzU6XFx0XFx0emwzMDczeF9jaGFuX21vZGVfc2V0KGNoYW4sIHByZXZfbW9kZSk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTEzNi1cXHRcXHRyZXR1cm4gcmM7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTQ3LVxcdCAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxNDg6XFx0cmMgPSB6bDMwNzN4X3JlYWRfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9PRkZTRVQoaW5kZXgpLCBcXHUwMDI2dmFsKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTQ5LVxcdGlmIChyYykge1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE2MS0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTYyOiAqIHpsMzA3M3hfY2hhbl9zdGF0ZV9mZXRjaCAtIGZldGNoIERQTEwgY2hhbm5lbCBzdGF0ZSBmcm9tIGhhcmR3YXJlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE2MzogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE2NC0gKiBAaW5kZXg6IERQTEwgY2hhbm5lbCBpbmRleCB0byBmZXRjaCBzdGF0ZSBmb3JcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xNzAtICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE3MTppbnQgemwzMDczeF9jaGFuX3N0YXRlX2ZldGNoKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xNzIte1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxNzM6XFx0c3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiA9IFxcdTAwMjZ6bGRldi1cXHUwMDNlY2hhbltpbmRleF07XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE3NC1cXHRpbnQgcmMsIGk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE3NS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTc2OlxcdHJjID0gemwzMDczeF9yZWFkX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9DVFJMKGluZGV4KSwgXFx1MDAyNmNoYW4tXFx1MDAzZWN0cmwpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xNzctXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE3OS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTgwOlxcdHJjID0gemwzMDczeF9yZWFkX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9NT0RFX1JFRlNFTChpbmRleCksXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE4MS1cXHRcXHRcXHQgICAgIFxcdTAwMjZjaGFuLVxcdTAwM2Vtb2RlX3JlZnNlbCk7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTg1LVxcdGRldl9kYmcoemxkZXYtXFx1MDAzZWRldiwgXFxcIkRQTEwldSBtb2RlOiAldSwgcmVmOiAldVxcXFxuXFxcIiwgaW5kZXgsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE4NjpcXHRcXHR6bDMwNzN4X2NoYW5fbW9kZV9nZXQoY2hhbiksIHpsMzA3M3hfY2hhbl9yZWZfZ2V0KGNoYW4pKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTg3LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxODg6XFx0cmMgPSB6bDMwNzN4X2NoYW5fc3RhdGVfdXBkYXRlKHpsZGV2LCBpbmRleCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE4OS1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTk1LVxcdCAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxOTY6XFx0aWYgKHpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSlcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTk3LVxcdFxcdGNoYW4tXFx1MDAzZWRmX29mZnNldCA9IFpMX0RQTExfREZfT0ZGU0VUX1VOS05PV047XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjAwLVxcdFxcdFxcXCJEUExMJXUgbG9ja19zdGF0ZTogJXUsIGhvOiAldSwgc2VsX3N0YXRlOiAldSwgc2VsX3JlZjogJXVcXFxcblxcXCIsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIwMTpcXHRcXHRpbmRleCwgemwzMDczeF9jaGFuX2xvY2tfc3RhdGVfZ2V0KGNoYW4pLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyMDI6XFx0XFx0emwzMDczeF9jaGFuX2lzX2hvX3JlYWR5KGNoYW4pID8gMSA6IDAsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIwMzpcXHRcXHR6bDMwNzN4X2NoYW5fcmVmc2VsX3N0YXRlX2dldChjaGFuKSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjA0OlxcdFxcdHpsMzA3M3hfY2hhbl9yZWZzZWxfcmVmX2dldChjaGFuKSk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIwNS1cXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMDgtXFx0LyogUmVhZCBEUExMIGNvbmZpZ3VyYXRpb24gZnJvbSBtYWlsYm94ICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIwOTpcXHRyYyA9IHpsMzA3M3hfbWJfb3AoemxkZXYsIFpMX1JFR19EUExMX01CX1NFTSwgWkxfRFBMTF9NQl9TRU1fUkQsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIxMC1cXHRcXHRcXHQgICBaTF9SRUdfRFBMTF9NQl9NQVNLLCBCSVQoaW5kZXgpKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMTUtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoY2hhbi1cXHUwMDNlcmVmX3ByaW8pOyBpKyspIHtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjE2OlxcdFxcdHJjID0gemwzMDczeF9yZWFkX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9SRUZfUFJJTyhpKSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjE3LVxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmNoYW4tXFx1MDAzZXJlZl9wcmlvW2ldKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMjUtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIyNjogKiB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0IC0gZ2V0IGN1cnJlbnQgRFBMTCBjaGFubmVsIHN0YXRlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIyNzogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIyOC0gKiBAaW5kZXg6IERQTEwgY2hhbm5lbCBpbmRleCB0byBnZXQgc3RhdGUgZm9yXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjMxLSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyMzI6Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqemwzMDczeF9jaGFuX3N0YXRlX2dldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMzMtXFx0XFx0XFx0XFx0XFx0XFx0ICB1OCBpbmRleClcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMzgtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIzOTogKiB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQgLSB3YWl0IGZvciBUb0Qgc2VtYXBob3JlIHRvIGNsZWFyXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI0MDogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjQxLSAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjUxLSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyNTI6aW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjUzLXtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNTctXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI1ODpcXHRyYyA9IHpsMzA3M3hfcmVhZF91OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLCBcXHUwMDI2dG9kX2N0cmwpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNTktXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI3Ni1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6Mjc3OlxcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjc4LVxcdFxcdFxcdFxcdCAgWkxfRFBMTF9UT0RfQ1RSTF9TRU0sIHRpbWVvdXQpO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI4My0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6Mjg0OiAqIHpsMzA3M3hfY2hhbl90b2RfY3RybCAtIGlzc3VlIFRvRCBjb21tYW5kXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI4NTogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjg2LSAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjk0LSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyOTU6c3RhdGljIGludCB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHU4IGNtZClcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjk2LXtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6Mjk3OlxcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI5OC1cXHRcXHRcXHRcXHRaTF9EUExMX1RPRF9DVFJMX1NFTSB8IGNtZCk7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzAxLS8qKlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozMDI6ICogemwzMDczeF9jaGFuX3RvZF9yZWFkIC0gcmVhZCBUb0QgcmVnaXN0ZXJzIGFmdGVyIGlzc3VpbmcgYSBjb21tYW5kXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjMwMzogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzA0LSAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzA4LSAqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjMwOTogKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMTAtICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMxMS0gKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzEyOmludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMxMy1cXHRcXHRcXHQgIGJvb2wgbmV4dF9oeiwgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMyNi1cXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVG9EIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozMjc6XFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzI4LVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMzEtXFx0cHRwX3JlYWRfc3lzdGVtX3ByZXRzKHN0cyk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjMzMjpcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfY3RybCh6bGRldiwgY2gsIGNtZCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMzMy1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzM1LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozMzY6XFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzM3LVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNDAtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM0MTpcXHRyYyA9IHpsMzA3M3hfcmVhZF91NDgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9TRUMoY2gpLCBcXHUwMDI2c2VjKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzQyLVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNDUtXFx0LyogSFcgbmFub3NlY29uZHMgYXJlIGFsd2F5cyBpbiBbMCwgTlNFQ19QRVJfU0VDKSByYW5nZSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozNDY6XFx0cmMgPSB6bDMwNzN4X3JlYWRfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCBcXHUwMDI2bnNlYyk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM0Ny1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzU2LS8qKlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozNTc6ICogemwzMDczeF9jaGFuX3RvZF93cml0ZSAtIHdyaXRlIFRvRCByZWdpc3RlcnMgYW5kIHRyaWdnZXIgMSBIeiB1cGRhdGVcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzU4OiAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNTktICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNjEtICpcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzYyOiAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM2My0gKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzY0LSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozNjU6aW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM2Ni1cXHRcXHRcXHQgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNzAtXFx0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzcxOlxcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM3Mi1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzc0LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozNzU6XFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIHRzLnR2X3NlYyk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM3Ni1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzc4LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozNzk6XFx0cmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgdHMudHZfbnNlYyk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM4MC1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzgyLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozODM6XFx0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfY3RybCh6bGRldiwgY2gsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM4NC1cXHRcXHRcXHRcXHQgICAgIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zODctLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM4ODogKiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCAtIGF0b21pYyBUb0QgcmVhZC1tb2RpZnktd3JpdGUgd2l0aCByb2xsb3ZlciBndWFyZFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozODk6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM5MC0gKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM5OC0gKlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozOTk6ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDAwLSAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00MDEtICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQwMjppbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQwMy1cXHRcXHRcXHQgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDEwLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBaTF9UT0RfTUFYX1JFVFJJRVM7IGkrKykge1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0MTE6XFx0XFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCB0cnVlLCBcXHUwMDI2dHNfbmV4dCwgTlVMTCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQxMi1cXHRcXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDE0LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0MTU6XFx0XFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCBmYWxzZSwgXFx1MDAyNnRzX2N1ciwgTlVMTCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQxNi1cXHRcXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDM4LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0Mzk6XFx0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkZXYsIGNoLCB0c19uZXh0KTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDQwLSN1bmRlZiBaTF9UT0RfTUFYX1JFVFJJRVNcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00NDMtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQ0NDogKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCAtIHdyaXRlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgdG8gaGFyZHdhcmVcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDQ1OiAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00NDYtICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00NTEtICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQ1MjppbnQgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBvZmZzZXQpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ1My17XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDU1LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0NTY6XFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfREZfT0ZGU0VUKGNoKSwgb2Zmc2V0KTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDU3LVxcdGlmICghcmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDYzLS8qKlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0NjQ6ICogemwzMDczeF9jaGFuX3RpZV93cml0ZSAtIGFkanVzdCBEUExMIHBoYXNlIHVzaW5nIFRJRSB3cml0ZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0NjU6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ2Ni0gKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ3My0gKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDc0OmludCB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgZGVsdGFfbnMpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ3NS17XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDgxLVxcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUSUUgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQ4MjpcXHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDgzLVxcdFxcdFxcdFxcdCAgWkxfRFBMTF9USUVfQ1RSTF9PUCxcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00OTAtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQ5MTpcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfREFUQShjaCksIHRpZV9kYXRhKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDkyLVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00OTQtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQ5NTpcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0ssIEJJVChjaCkpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00OTYtXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ5OC1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDk5OlxcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTAwLVxcdFxcdFxcdFxcdFpMX0RQTExfVElFX0NUUkxfT1BfV1IpO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUwMy0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTA0OiAqIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwIC0gZXhlY3V0ZSBvbmUgb3V0cHV0IHBoYXNlIHN0ZXAgb3BlcmF0aW9uXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjUwNTogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTA2LSAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTE1LSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1MTY6aW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01MTctXFx0XFx0XFx0ICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUyNS1cXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgcGhhc2Ugc3RlcCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTI2OlxcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01MjctXFx0XFx0XFx0XFx0ICBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUzMS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTMyOlxcdHJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01MzMtXFx0XFx0XFx0ICAgICAgIHN0ZXBfY3ljbGVzKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01MzYtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjUzNzpcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTE2KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTUFTSywgb3V0X21hc2spO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01MzgtXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU0MC1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTQxOlxcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUiwgMSk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU0Mi1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTUwLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1NTE6XFx0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLCBjdHJsKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTUyLX1cXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NTQtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU1NTogKiB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0IC0gY29tbWl0IERQTEwgY2hhbm5lbCBzdGF0ZSBjaGFuZ2VzIHRvIGhhcmR3YXJlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU1NjogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU1Ny0gKiBAaW5kZXg6IERQTEwgY2hhbm5lbCBpbmRleCB0byBzZXQgc3RhdGUgZm9yXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTY2LSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1Njc6aW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU2ODpcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01Njkte1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1NzA6XFx0c3RydWN0IHpsMzA3M3hfY2hhbiAqZGNoYW4gPSBcXHUwMDI2emxkZXYtXFx1MDAzZWNoYW5baW5kZXhdO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NzEtXFx0aW50IHJjLCBpO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU3OC1cXHRpZiAoZGNoYW4tXFx1MDAzZWN0cmwgIT0gY2hhbi1cXHUwMDNlY3RybCkge1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1Nzk6XFx0XFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9DVFJMKGluZGV4KSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTgwLVxcdFxcdFxcdFxcdCAgICAgIGNoYW4tXFx1MDAzZWN0cmwpO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU4Ni1cXHRpZiAoZGNoYW4tXFx1MDAzZW1vZGVfcmVmc2VsICE9IGNoYW4tXFx1MDAzZW1vZGVfcmVmc2VsKSB7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU4NzpcXHRcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX01PREVfUkVGU0VMKGluZGV4KSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTg4LVxcdFxcdFxcdFxcdCAgICAgIGNoYW4tXFx1MDAzZW1vZGVfcmVmc2VsKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy02MDItXFx0LyogUmVhZCBEUExMIGNvbmZpZ3VyYXRpb24gaW50byBtYWlsYm94ICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjYwMzpcXHRyYyA9IHpsMzA3M3hfbWJfb3AoemxkZXYsIFpMX1JFR19EUExMX01CX1NFTSwgWkxfRFBMTF9NQl9TRU1fUkQsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTYwNC1cXHRcXHRcXHQgICBaTF9SRUdfRFBMTF9NQl9NQVNLLCBCSVQoaW5kZXgpKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy02MTAtXFx0XFx0aWYgKGRjaGFuLVxcdTAwM2VyZWZfcHJpb1tpXSAhPSBjaGFuLVxcdTAwM2VyZWZfcHJpb1tpXSkge1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo2MTE6XFx0XFx0XFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy02MTItXFx0XFx0XFx0XFx0XFx0ICAgICAgWkxfUkVHX0RQTExfUkVGX1BSSU8oaSksXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNjE5LVxcdC8qIENvbW1pdCBEUExMIGNvbmZpZ3VyYXRpb24gKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NjIwOlxcdHJjID0gemwzMDczeF9tYl9vcCh6bGRldiwgWkxfUkVHX0RQTExfTUJfU0VNLCBaTF9EUExMX01CX1NFTV9XUixcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNjIxLVxcdFxcdFxcdCAgIFpMX1JFR19EUExMX01CX01BU0ssIEJJVChpbmRleCkpO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oPTEzPXN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcDtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTQ6c3RydWN0IHpsMzA3M3hfZGV2O1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xNS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTYtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjE3OiAqIHN0cnVjdCB6bDMwNzN4X2NoYW4gLSBEUExMIGNoYW5uZWwgc3RhdGVcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTgtICogQGN0cmw6IERQTEwgY29udHJvbCByZWdpc3RlciB2YWx1ZVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTI0LSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoyNTpzdHJ1Y3QgemwzMDczeF9jaGFuIHtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMjYtXFx0c3RydWN0X2dyb3VwKGNmZyxcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0zNy1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6Mzg6aW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9mZXRjaChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjM5OmNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKnpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldixcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNDAtXFx0XFx0XFx0XFx0XFx0XFx0IHU4IGluZGV4KTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NDE6aW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjQyOlxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC00My1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NDQ6aW50IHpsMzA3M3hfY2hhbl9zdGF0ZV91cGRhdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDo0NTppbnQgemwzMDczeF9jaGFuX25jb19tb2RlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTQ2LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDo0NzppbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NDg6aW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNDktXFx0XFx0XFx0ICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNTAtXFx0XFx0XFx0ICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cyk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjUxOmludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC01Mi1cXHRcXHRcXHQgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cyk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjUzOmludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNTQtXFx0XFx0XFx0ICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NTU6aW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC01Ni1cXHRcXHRcXHQgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsIGJvb2wgdG9kX3N0ZXApO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC01Ny1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NTg6aW50IHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgb2Zmc2V0KTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNTktXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjYwOmludCB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgZGVsdGFfbnMpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC02MS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNjItLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjYzOiAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfZ2V0IC0gZ2V0IGNhY2hlZCBkZl9vZmZzZXQgdnMgdHJhY2tlZCByZWZlcmVuY2VcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNjQtICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oPTY4PXN0YXRpYyBpbmxpbmUgczY0XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjY5OnpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfZ2V0KGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTcwLXtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC03NC0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NzU6ICogemwzMDczeF9jaGFuX21vZGVfZ2V0IC0gZ2V0IERQTEwgY2hhbm5lbCBvcGVyYXRpbmcgbW9kZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC03Ni0gKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNzktICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjgwOnN0YXRpYyBpbmxpbmUgdTggemwzMDczeF9jaGFuX21vZGVfZ2V0KGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTgxLXtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC04NS0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6ODY6ICogemwzMDczeF9jaGFuX3JlZl9nZXQgLSBnZXQgbWFudWFsbHkgc2VsZWN0ZWQgcmVmZXJlbmNlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTg3LSAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC05MC0gKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6OTE6c3RhdGljIGlubGluZSB1OCB6bDMwNzN4X2NoYW5fcmVmX2dldChjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC05Mi17XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtOTYtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjk3OiAqIHpsMzA3M3hfY2hhbl9tb2RlX3NldCAtIHNldCBEUExMIGNoYW5uZWwgb3BlcmF0aW5nIG1vZGVcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtOTgtICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTEwMC0gKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTAxOnN0YXRpYyBpbmxpbmUgdm9pZCB6bDMwNzN4X2NoYW5fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiwgdTggbW9kZSlcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTAyLXtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xMDYtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjEwNzogKiB6bDMwNzN4X2NoYW5fcmVmX3NldCAtIHNldCBtYW51YWxseSBzZWxlY3RlZCByZWZlcmVuY2VcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTA4LSAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xMTAtICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjExMTpzdGF0aWMgaW5saW5lIHZvaWQgemwzMDczeF9jaGFuX3JlZl9zZXQoc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiwgdTggcmVmKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xMTIte1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTExNi0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTE3OiAqIHpsMzA3M3hfY2hhbl9yZWZfcHJpb19nZXQgLSBnZXQgcmVmZXJlbmNlIHByaW9yaXR5XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTExOC0gKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg9MTIzPXN0YXRpYyBpbmxpbmUgdThcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTI0OnpsMzA3M3hfY2hhbl9yZWZfcHJpb19nZXQoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiwgdTggcmVmKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xMjUte1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTEzNC0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTM1OiAqIHpsMzA3M3hfY2hhbl9yZWZfcHJpb19zZXQgLSBzZXQgcmVmZXJlbmNlIHByaW9yaXR5XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTEzNi0gKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg9MTQwPXN0YXRpYyBpbmxpbmUgdm9pZFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxNDE6emwzMDczeF9jaGFuX3JlZl9wcmlvX3NldChzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuLCB1OCByZWYsIHU4IHByaW8pXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE0Mi17XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTUxLS8qKlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxNTI6ICogemwzMDczeF9jaGFuX3JlZl9pc19zZWxlY3RhYmxlIC0gY2hlY2sgaWYgcmVmZXJlbmNlIGlzIHNlbGVjdGFibGVcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTUzLSAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaD0xNTg9c3RhdGljIGlubGluZSBib29sXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjE1OTp6bDMwNzN4X2NoYW5fcmVmX2lzX3NlbGVjdGFibGUoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiwgdTggcmVmKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xNjAte1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxNjE6XFx0cmV0dXJuIHpsMzA3M3hfY2hhbl9yZWZfcHJpb19nZXQoY2hhbiwgcmVmKSAhPSBaTF9EUExMX1JFRl9QUklPX05PTkU7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE2Mi19XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTY0LS8qKlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxNjU6ICogemwzMDczeF9jaGFuX2xvY2tfc3RhdGVfZ2V0IC0gZ2V0IERQTEwgY2hhbm5lbCBsb2NrIHN0YXRlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE2Ni0gKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTY5LSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxNzA6c3RhdGljIGlubGluZSB1OCB6bDMwNzN4X2NoYW5fbG9ja19zdGF0ZV9nZXQoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTcxLXtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xNzUtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjE3NjogKiB6bDMwNzN4X2NoYW5faXNfbG9ja2VkIC0gY2hlY2sgaWYgY2hhbm5lbCBpcyBsb2NrZWQgdG8gYSByZWZlcmVuY2VcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTc3LSAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xODAtICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjE4MTpzdGF0aWMgaW5saW5lIGJvb2wgemwzMDczeF9jaGFuX2lzX2xvY2tlZChjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xODIte1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxODM6XFx0dTggbG9ja19zdGF0ZSA9IHpsMzA3M3hfY2hhbl9sb2NrX3N0YXRlX2dldChjaGFuKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTg0LVxcdHJldHVybiBsb2NrX3N0YXRlID09IFpMX0RQTExfTU9OX1NUQVRVU19TVEFURV9MT0NLO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE4Ny0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTg4OiAqIHpsMzA3M3hfY2hhbl9tb2RlX2lzX2F1dG8gLSBjaGVjayBpZiBjaGFubmVsIGlzIGluIGF1dG9tYXRpYyBtb2RlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE4OS0gKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTkyLSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxOTM6c3RhdGljIGlubGluZSBib29sIHpsMzA3M3hfY2hhbl9tb2RlX2lzX2F1dG8oY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTk0LXtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTk1OlxcdHJldHVybiB6bDMwNzN4X2NoYW5fbW9kZV9nZXQoY2hhbikgPT0gWkxfRFBMTF9NT0RFX1JFRlNFTF9NT0RFX0FVVE87XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE5Ni19XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTk4LS8qKlxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODo0MToxNy4zODU1MzAyNTZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzk4ODk1MzE0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFjaGluZyB0aGUgUFRQIEZ1bmN0aW9uYWxpdHkgaW4gdGhlIHpsMzA3M3ggRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBEUExMIGRyaXZlciwgYHpsMzA3M3hgLiBNeSBmaXJzdCB0aG91Z2h0IGlzLCBcIkNhbiBJIHJlYWNoIGl0IHZpYSBzeXNmcz9cIiBJdCByZWdpc3RlcnMgYm90aCBJMkMgYW5kIFNQSSBkcml2ZXJzLCB3aGljaCBpcyBwcm9taXNpbmcuIEkyQyBpcyBlYXN5IGVub3VnaCDigJMgSSBjYW4gaW5zdGFudGlhdGUgYSBkZXZpY2Ugd2l0aCBgZWNobyB6bDMwNzN4IFx1MDAzZSAvc3lzL2J1cy9pMmMvZGV2aWNlcy9pMmMtMC9uZXdfZGV2aWNlYC4gV2l0aCBTUEkgSSBjYW4gdXNlIHN5c2ZzLCBvciBzcGlkZXYsIGJ1dCBhY3R1YWxseSBzeXprYWxsZXIncyBnb3QgbWUgY292ZXJlZCwgYXMgaXQgY2FuIGluamVjdCBJMkMgYW5kIFNQSSBkZXZpY2VzIHRocm91Z2ggaXRzIHBzZXVkby1kZXZpY2VzIG9yIGRldmljZSB0cmVlIG92ZXJsYXlzLlxuXG5BaGEhIEl0J3MgYSBQVFAgY2xvY2ssIHRvby4gVGhhdCBtZWFucyBJIGNhbiBpbnRlcmFjdCB3aXRoIGl0IHRocm91Z2ggYC9kZXYvcHRwWGAgdXNpbmcgYGlvY3RsYHMgbGlrZSBgUFRQX0NMT0NLX0dFVEVYVFRTYCwgYFBUUF9TWVNfT0ZGU0VUYCwgYFBUUF9DTE9DS19BREpUSU1FYCwgYW5kIHNvIG9uLiBUaGlzIHBhdGNoIHNwZWNpZmljYWxseSBhZGRzIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBgemwzMDczeGAgZHJpdmVyLiBJJ3ZlIGdvdCBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIGFkZGVkOiBgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0YCwgYHpsMzA3M3hfY2hhbl90b2RfY3RybGAsIGB6bDMwNzN4X2NoYW5fdG9kX3JlYWRgLCBgemwzMDczeF9jaGFuX3RvZF93cml0ZWAsIGB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdGAsIGB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldGAsIGB6bDMwNzN4X2NoYW5fdGllX3dyaXRlYCwgYHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwYCwgYHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NGAsIGB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NGAsIGB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcGAsIGB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVgLCBgemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lYCwgYHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2VgLCBgemwzMDczeF9kcGxsX3B0cF9nZXRtYXhwaGFzZWAsIGB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyYCwgYW5kIGB6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXJgLlxuXG5SaWdodCwgdGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgaWYgdGhlIGRldmljZSBpcyBpbnN0YW50aWF0ZWQgYW5kIHRoZSBQVFAgY2xvY2sgaXMgcmVnaXN0ZXJlZC4gSXQncyBhbiBJMkMvU1BJIGRldmljZSwgc28gc3l6a2FsbGVyIHNob3VsZCBiZSBhYmxlIHRvIGdldCB0aGlzIGRvbmUgZm9yIG1lLiBOb3csIHRoZSB0cmljayBpcyB0byBmaWd1cmUgb3V0IHdoYXQgdG8gZm9jdXMgb24uXG5cblNvIGxldCdzIGV4dHJhY3QgdGhlIGtleSBmdW5jdGlvbnMgaGVyZTogYHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NGAsIGB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NGAsIGB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcGAsIGB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVgLCBgemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lYCwgYHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2VgLCBgemwzMDczeF9kcGxsX3B0cF9nZXRtYXhwaGFzZWAsIGB6bDMwNzN4X2NoYW5fdG9kX3JlYWRgLCBgemwzMDczeF9jaGFuX3RvZF93cml0ZWAsIGB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdGAsIGB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldGAsIGB6bDMwNzN4X2NoYW5fdGllX3dyaXRlYCwgYHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwYC5cblxuT2theSwgSSBuZWVkIHRvIHNlZSBob3cgdGhleSdyZSBleHBvc2VkLiBXaGlsZSBgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXBgIGlzIHN0YXRpYywgdGhlIHByb21wdCBzYXlzIHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMuIEhvd2V2ZXIsIGl0J3MgYSBzaWduaWZpY2FudCBmdW5jdGlvbiwgYW5kIGl0J3Mgbm90IGlubGluZWQuIEZpbmUsIEknbGwgaW5jbHVkZSBpdC4gQWxzbywgdGhlIGZ1bmN0aW9ucyBmcm9tIGBjaGFuLmNgIHNob3VsZCBiZSBpbmNsdWRlZDogYHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdGAsIGB6bDMwNzN4X2NoYW5fdG9kX3JlYWRgLCBgemwzMDczeF9jaGFuX3RvZF93cml0ZWAsIGB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdGAsIGB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldGAsIGB6bDMwNzN4X2NoYW5fdGllX3dyaXRlYCwgYW5kIGB6bDMwNzN4XG5cbiIsIklucHV0VG9rZW5zIjozNDE5MiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6NDE6MzEuMzc0NDg3NTM5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NzcyODU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBaTDMwNzNYXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZy0yLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWc6Mzpjb25maWcgWkwzMDczWFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctNC1cXHR0cmlzdGF0ZSBcXFwiTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlc1xcXCIgaWYgQ09NUElMRV9URVNUXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTE2LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWc6MTc6Y29uZmlnIFpMMzA3M1hfSTJDXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZy0xOC1cXHR0cmlzdGF0ZSBcXFwiSTJDIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1xcXCJcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctMjgtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZzoyOTpjb25maWcgWkwzMDczWF9TUElcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTMwLVxcdHRyaXN0YXRlIFxcXCJTUEkgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODo0MTozMS40MjEyNjU1NThaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTMzNzQ4MzA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBaTDMwNzNYIEtjb25maWcqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZ2V0IGEgcmVhbGx5IGdvb2QgaGFuZGxlIG9uIGhvdyB0aGUgWkwzMDczWCBpcyBjb25maWd1cmVkLiBTbywgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQncyBwdWxsIHVwIHRoZSBmdWxsIEtjb25maWcgZmlsZS4gSSdtIG5vdCBnb2luZyB0byBza2ltOyBJIG5lZWQgYSBjb21wcmVoZW5zaXZlIG92ZXJ2aWV3LiBJIHdhbnQgdG8gdW5kZXJzdGFuZCAqZXZlcnkqIG9wdGlvbiwgZGVwZW5kZW5jeSwgYW5kIGRlZmF1bHQgc2V0dGluZy4gVGhpcyBpc24ndCBqdXN0IGFib3V0IGZpbmRpbmcgb25lIHNwZWNpZmljIHRoaW5nOyBpdCdzIGFib3V0IGJ1aWxkaW5nIGEgc29saWQsIGhvbGlzdGljIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG1vZHVsZSdzIGNvbmZpZ3VyYWJpbGl0eS4gV2UncmUgZ29pbmcgdG8gdXNlIHRoaXMgYXMgdGhlIGZvdW5kYXRpb24gZm9yIHRoZSBuZXh0IHN0YWdlIG9mIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzA4MywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjQxOjM0LjU1NTAxNzM4M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdFxcbiAgIDM6XFx0Y29uZmlnIFpMMzA3M1hcXG4gICA0OlxcdFxcdHRyaXN0YXRlIFxcXCJNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRSBkZXZpY2VzXFxcIiBpZiBDT01QSUxFX1RFU1RcXG4gICA1OlxcdFxcdGRlcGVuZHMgb24gTkVUIFxcdTAwMjZcXHUwMDI2IFBUUF8xNTg4X0NMT0NLXFxuICAgNjpcXHRcXHRzZWxlY3QgRFBMTFxcbiAgIDc6XFx0XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuICAgODpcXHRcXHRzZWxlY3QgUkVHTUFQXFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIE1pY3JvY2hpcCBBenVyaXRlIGZhbWlseSBEUExML1BUUC9TeW5jRVxcbiAgMTE6XFx0XFx0ICBkZXZpY2VzIHRoYXQgc3VwcG9ydCB1cCB0byA1IGluZGVwZW5kZW50IERQTEwgY2hhbm5lbHMsXFxuICAxMjpcXHRcXHQgIDEwIGlucHV0IHBpbnMgYW5kIHVwIHRvIDIwIG91dHB1dCBwaW5zLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGVcXG4gIDE1OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgemwzMDczeC5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0Y29uZmlnIFpMMzA3M1hfSTJDXFxuICAxODpcXHRcXHR0cmlzdGF0ZSBcXFwiSTJDIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1xcXCJcXG4gIDE5OlxcdFxcdGRlcGVuZHMgb24gSTJDIFxcdTAwMjZcXHUwMDI2IE5FVCBcXHUwMDI2XFx1MDAyNiBQVFBfMTU4OF9DTE9DS1xcbiAgMjA6XFx0XFx0c2VsZWN0IFJFR01BUF9JMkNcXG4gIDIxOlxcdFxcdHNlbGVjdCBaTDMwNzNYXFxuICAyMjpcXHRcXHRoZWxwXFxuICAyMzpcXHRcXHQgIFRoaXMgaXMgSTJDIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0VcXG4gIDI0OlxcdFxcdCAgZGV2aWNlcy5cXG4gIDI1OlxcdFxcbiAgMjY6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcXG4gIDI3OlxcdFxcdCAgYmUgY2FsbGVkIHpsMzA3M3hfaTJjLlxcbiAgMjg6XFx0XFxuICAyOTpcXHRjb25maWcgWkwzMDczWF9TUElcXG4gIDMwOlxcdFxcdHRyaXN0YXRlIFxcXCJTUEkgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzXFxcIlxcbiAgMzE6XFx0XFx0ZGVwZW5kcyBvbiBORVQgXFx1MDAyNlxcdTAwMjYgU1BJIFxcdTAwMjZcXHUwMDI2IFBUUF8xNTg4X0NMT0NLXFxuICAzMjpcXHRcXHRzZWxlY3QgUkVHTUFQX1NQSVxcbiAgMzM6XFx0XFx0c2VsZWN0IFpMMzA3M1hcXG4gIDM0OlxcdFxcdGhlbHBcXG4gIDM1OlxcdFxcdCAgVGhpcyBpcyBTUEkgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRVxcbiAgMzY6XFx0XFx0ICBkZXZpY2VzLlxcbiAgMzc6XFx0XFxuICAzODpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxcbiAgMzk6XFx0XFx0ICBiZSBjYWxsZWQgemwzMDczeF9zcGkuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjQxOjM0LjU1NTA5NTUzM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMzEwMTE5MzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFpMMzA3M1ggRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBoYW5kbGUgb24gdGhpcyBwYXRjaC4gSSdtIHNlZWluZyBjb25maWd1cmF0aW9ucyBmb3IgYFpMMzA3M1hgLCBgWkwzMDczWF9JMkNgLCBhbmQgYFpMMzA3M1hfU1BJYC4gUmlnaHQgYXdheSwgdGhlIGRlcGVuZGVuY2llcyBqdW1wIG91dDogYE5FVGAsIGBQVFBfMTU4OF9DTE9DS2AsIGBJMkNgLCBgU1BJYCwgYERQTExgLCBgTkVUX0RFVkxJTktgLCBhbmQgYFJFR01BUGAuIEJhc2VkIG9uIHRoaXMsIEkgbmVlZCB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIGBaTDMwNzNYX0kyQ2AsIGBaTDMwNzNYX1NQSWAsIHRoZSBQVFAgY2xvY2sgZnVuY3Rpb25hbGl0eSAoYFBUUF8xNTg4X0NMT0NLYCksIHRoZSBEUExMIGZ1bmN0aW9uYWxpdHkgKGBEUExMYCksIGFuZCwgb2YgY291cnNlLCB0aGUgdW5kZXJseWluZyBgSTJDYCBhbmQgYFNQSWAgcHJvdG9jb2xzLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUga2V5IGZ1bmN0aW9ucy4gSSd2ZSBjb21waWxlZCBhIGxpc3QgdGhhdCBJIHdhbnQgdG8ga2VlcCBpbiBtaW5kLCBhbmQgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiBlYWNoOlxuXG4qICAgYHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdGBcbiogICBgemwzMDczeF9jaGFuX3RvZF9yZWFkYFxuKiAgIGB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlYFxuKiAgIGB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdGBcbiogICBgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXRgXG4qICAgYHpsMzA3M3hfY2hhbl90aWVfd3JpdGVgXG4qICAgYHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwYFxuKiAgIGB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjRgXG4qICAgYHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0YFxuKiAgIGB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcGBcbiogICBgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lYFxuKiAgIGB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmVgXG4qICAgYHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2VgXG4qICAgYHpsMzA3M3hfZHBsbF9wdHBfZ2V0bWF4cGhhc2VgXG5cbldhaXQgYSBtaW51dGUsIGB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcGAgaXMgbWFya2VkIGFzIGBzdGF0aWNgLCBidXQgaXQncyBub3QgYW4gQVBJIGVudHJ5cG9pbnQuIFRoYXQgc2FpZCwgaXQncyBjYWxsZWQgYnkgYHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZWAuIEl0J3MgZmluZSB0byBpbmNsdWRlIGl0IGhlcmUsIGFzIGl0J3MgcGFydCBvZiB0aGUgZmxvdy5cblxuVG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZywgbGV0J3MgZG91YmxlIGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciBuZXcgZnVuY3Rpb25zOlxuXG4qICAgYHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXJgXG4qICAgYHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlcmBcblxuQWxyaWdodCwgSSdtIGNvbmZpZGVudCBub3cuIFRoaXMgcGF0Y2ggaXMgKmRlZmluaXRlbHkqIHdvcnRoIGZ1enppbmcuIFRoZSBtYWluIHRha2Vhd2F5IGlzIHRoZSBhZGRpdGlvbiBvZiBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgZHJpdmVyLiBUaGlzIGludHJvZHVjZXMgbmV3IGlvY3RscyB0aGF0IHdpbGwgYmUgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgYC9kZXYvcHRwWGAuIFRoaXMgaXMgd2hlcmUgSSBjYW4gc3RhcnQgbG9va2luZyBmb3IgdnVsbmVyYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzkwOSwiT3V0cHV0VG9rZW5zIjo0MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODo0MTo0NC44NjUyMTkwMzhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzkxMDQ3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWkwzMDczWFwiLFxuICAgIFwiWkwzMDczWF9JMkNcIixcbiAgICBcIlpMMzA3M1hfU1BJXCIsXG4gICAgXCJQVFBfMTU4OF9DTE9DS1wiLFxuICAgIFwiRFBMTFwiLFxuICAgIFwiSTJDXCIsXG4gICAgXCJTUElcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXRcIixcbiAgICBcInpsMzA3M3hfY2hhbl90b2RfcmVhZFwiLFxuICAgIFwiemwzMDczeF9jaGFuX3RvZF93cml0ZVwiLFxuICAgIFwiemwzMDczeF9jaGFuX3RvZF9hZGp1c3RcIixcbiAgICBcInpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0XCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fdGllX3dyaXRlXCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcFwiLFxuICAgIFwiemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0XCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NFwiLFxuICAgIFwiemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXBcIixcbiAgICBcInpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZVwiLFxuICAgIFwiemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lXCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlXCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIgKHpsMzA3M3gpLiBUaGlzIGV4cG9zZXMgbmV3IGZ1bmN0aW9uYWxpdHkgdG8gdXNlcnNwYWNlIHZpYSB0aGUgUFRQIHN1YnN5c3RlbSAoZS5nLiwgL2Rldi9wdHBYIGlvY3RscykuIFRoZSBkcml2ZXIgaXMgYW4gSTJDL1NQSSBkZXZpY2UgZHJpdmVyLCB3aGljaCBjYW4gYmUgaW5zdGFudGlhdGVkIGFuZCBmdXp6ZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaTDMwNzNYXCIsXG4gICAgXCJaTDMwNzNYX0kyQ1wiLFxuICAgIFwiWkwzMDczWF9TUElcIixcbiAgICBcIlBUUF8xNTg4X0NMT0NLXCIsXG4gICAgXCJEUExMXCIsXG4gICAgXCJJMkNcIixcbiAgICBcIlNQSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdFwiLFxuICAgIFwiemwzMDczeF9jaGFuX3RvZF9yZWFkXCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fdG9kX3dyaXRlXCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fdG9kX2FkanVzdFwiLFxuICAgIFwiemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXRcIixcbiAgICBcInpsMzA3M3hfY2hhbl90aWVfd3JpdGVcIixcbiAgICBcInpsMzA3M3hfY2hhbl9waGFzZV9zdGVwXCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjRcIixcbiAgICBcInpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0XCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcFwiLFxuICAgIFwiemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lXCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmVcIixcbiAgICBcInpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2VcIixcbiAgICBcInpsMzA3M3hfZHBsbF9wdHBfZ2V0bWF4cGhhc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciAoemwzMDczeCkuIFRoaXMgZXhwb3NlcyBuZXcgZnVuY3Rpb25hbGl0eSB0byB1c2Vyc3BhY2UgdmlhIHRoZSBQVFAgc3Vic3lzdGVtIChlLmcuLCAvZGV2L3B0cFggaW9jdGxzKS4gVGhlIGRyaXZlciBpcyBhbiBJMkMvU1BJIGRldmljZSBkcml2ZXIsIHdoaWNoIGNhbiBiZSBpbnN0YW50aWF0ZWQgYW5kIGZ1enplZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODo0MTo0NC45NTkxNDAzMzZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxOTM2MzUwNjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6NDE6NDQuOTU5OTk0NzM2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjMxOTM1NDkxMjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlci4gSXQgaW50cm9kdWNlcyBmdW5jdGlvbnMgdG8gcmVhZC93cml0ZSBUaW1lIG9mIERheSAoVG9EKSByZWdpc3RlcnMsIGFkanVzdCBwaGFzZSwgYWRqdXN0IGZyZXF1ZW5jeSwgYW5kIHJlZ2lzdGVycyBhIFBUUCBjbG9jayBkZXZpY2UgdXNpbmcgYHB0cF9jbG9ja19yZWdpc3RlcmAuIEFsbCBuZXcgdmFyaWFibGVzIGFuZCBzdHJ1Y3R1cmVzIChzdWNoIGFzIGBzdHJ1Y3QgdGltZXNwZWM2NGAsIGBzeW50aF9tYXNrYCwgYW5kIGBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm9gKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBvciBwYXNzZWQgdG8gc3RhbmRhcmQga2VybmVsIEFQSXMgdGhhdCBoYW5kbGUgaW5pdGlhbGl6YXRpb24uIFRoZXJlIGFyZSBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGlzIHRoZXJlIGFueSBjb250cm9sIGZsb3cgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgKGxpa2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSkgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDAxMjk4NWQzMTAxYWNkY2EwN2JhOTBiNTVmYTQxZGZlNjZkYWRlN2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAwODo0MTowNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWcgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXG5pbmRleCA1YmJjYTE0MDA1ODEzLi5kYTE3MzFhY2UxNWYwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xuQEAgLTIsNyArMiw3IEBAXG4gXG4gY29uZmlnIFpMMzA3M1hcbiBcdHRyaXN0YXRlIFwiTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlc1wiIGlmIENPTVBJTEVfVEVTVFxuLVx0ZGVwZW5kcyBvbiBORVRcbitcdGRlcGVuZHMgb24gTkVUIFx1MDAyNlx1MDAyNiBQVFBfMTU4OF9DTE9DS1xuIFx0c2VsZWN0IERQTExcbiBcdHNlbGVjdCBORVRfREVWTElOS1xuIFx0c2VsZWN0IFJFR01BUFxuQEAgLTE2LDcgKzE2LDcgQEAgY29uZmlnIFpMMzA3M1hcbiBcbiBjb25maWcgWkwzMDczWF9JMkNcbiBcdHRyaXN0YXRlIFwiSTJDIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1wiXG4tXHRkZXBlbmRzIG9uIEkyQyBcdTAwMjZcdTAwMjYgTkVUXG4rXHRkZXBlbmRzIG9uIEkyQyBcdTAwMjZcdTAwMjYgTkVUIFx1MDAyNlx1MDAyNiBQVFBfMTU4OF9DTE9DS1xuIFx0c2VsZWN0IFJFR01BUF9JMkNcbiBcdHNlbGVjdCBaTDMwNzNYXG4gXHRoZWxwXG5AQCAtMjgsNyArMjgsNyBAQCBjb25maWcgWkwzMDczWF9JMkNcbiBcbiBjb25maWcgWkwzMDczWF9TUElcbiBcdHRyaXN0YXRlIFwiU1BJIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1wiXG4tXHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgU1BJXG4rXHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgU1BJIFx1MDAyNlx1MDAyNiBQVFBfMTU4OF9DTE9DS1xuIFx0c2VsZWN0IFJFR01BUF9TUElcbiBcdHNlbGVjdCBaTDMwNzNYXG4gXHRoZWxwXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXG5pbmRleCA0ZWMyY2Y1M2RhZDQ2Li5iYTRkMzAzZDQxYjQ3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNcbkBAIC0zLDYgKzMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZfcHJpbnRrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiBcbkBAIC0xNjIsOCArMTYzLDggQEAgaW50IHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpXG4gICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3hfZGV2IHN0cnVjdHVyZVxuICAqIEBpbmRleDogRFBMTCBjaGFubmVsIGluZGV4IHRvIGZldGNoIHN0YXRlIGZvclxuICAqXG4tICogUmVhZHMgdGhlIG1vZGVfcmVmc2VsIHJlZ2lzdGVyIGFuZCByZWZlcmVuY2UgcHJpb3JpdHkgcmVnaXN0ZXJzIGZvclxuLSAqIHRoZSBnaXZlbiBEUExMIGNoYW5uZWwgYW5kIHN0b3JlcyB0aGUgcmF3IHZhbHVlcyBmb3IgbGF0ZXIgdXNlLlxuKyAqIFJlYWRzIHRoZSBtb2RlX3JlZnNlbCwgc3RhdHVzIGFuZCByZWZlcmVuY2UgcHJpb3JpdHkgcmVnaXN0ZXJzIGZvclxuKyAqIHRoZSBnaXZlbiBEUExMIGNoYW5uZWwgYW5kIHN0b3JlcyB0aGUgdmFsdWVzIGZvciBsYXRlciB1c2UuXG4gICpcbiAgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuICAqL1xuQEAgLTIzNCw2ICsyMzUsMzIyIEBAIGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKnpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldixcbiBcdHJldHVybiBcdTAwMjZ6bGRldi1cdTAwM2VjaGFuW2luZGV4XTtcbiB9XG4gXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0IC0gd2FpdCBmb3IgVG9EIHNlbWFwaG9yZSB0byBjbGVhclxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICpcbisgKiBDaGVja3MgdGhlIFRvRCBjb250cm9sIHJlZ2lzdGVyIHNlbWFwaG9yZSBiaXQuIElmIGNsZWFyLCByZXR1cm5zXG4rICogaW1tZWRpYXRlbHkuIE90aGVyd2lzZSBwb2xscyB1bnRpbCB0aGUgYml0IGlzIGNsZWFyZWQgYnkgdGhlIGRldmljZS5cbisgKlxuKyAqIFJldHVybjpcbisgKiAqIDBcdFx0XHQtIHN1Y2Nlc3NcbisgKiAqICUtRUJVU1lcdFx0LSB0aW1lb3V0XG4rICogKiAlLUVPUE5PVFNVUFBcdC0gdW5rbm93biBjb21tYW5kIGRldGVjdGVkXG4rICogKiBuZWdhdGl2ZVx0XHQtIG90aGVyIGVycm9yXG4rICovXG4raW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcbit7XG4rXHR1bnNpZ25lZCBpbnQgdGltZW91dDtcbitcdHU4IHRvZF9jdHJsO1xuK1x0aW50IHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSwgXHUwMDI2dG9kX2N0cmwpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRpZiAoISh0b2RfY3RybCBcdTAwMjYgWkxfRFBMTF9UT0RfQ1RSTF9TRU0pKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHN3aXRjaCAoRklFTERfR0VUKFpMX0RQTExfVE9EX0NUUkxfQ01ELCB0b2RfY3RybCkpIHtcbitcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFo6XG4rXHRcdHRpbWVvdXQgPSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTO1xuK1x0XHRicmVhaztcbitcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVDpcbitcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFo6XG4rXHRcdHRpbWVvdXQgPSBaTF9QT0xMX1RPRF9SRF9USU1FT1VUX1VTO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSxcbitcdFx0XHRcdCAgWkxfRFBMTF9UT0RfQ1RSTF9TRU0sIHRpbWVvdXQpO1xuK1xuK1x0cmV0dXJuIHJjID09IC1FVElNRURPVVQgPyAtRUJVU1kgOiByYztcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3RvZF9jdHJsIC0gaXNzdWUgVG9EIGNvbW1hbmRcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqIEBjbWQ6IFRvRCBjb21tYW5kIHRvIGV4ZWN1dGVcbisgKlxuKyAqIFdyaXRlcyB0aGUgc2VtYXBob3JlIGFuZCBjb21tYW5kIHRvIGRwbGxfdG9kX2N0cmwuIFRoZSBjYWxsZXIgbXVzdFxuKyAqIGVuc3VyZSB0aGUgZGV2aWNlIGlzIHJlYWR5IChzZW1hcGhvcmUgY2xlYXIpIGJlZm9yZSBjYWxsaW5nIGFuZFxuKyAqIG11c3Qgd2FpdCBmb3IgY29tcGxldGlvbiBpZiBuZWVkZWQuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK3N0YXRpYyBpbnQgemwzMDczeF9jaGFuX3RvZF9jdHJsKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCB1OCBjbWQpXG4re1xuK1x0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSxcbitcdFx0XHRcdFpMX0RQTExfVE9EX0NUUkxfU0VNIHwgY21kKTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3RvZF9yZWFkIC0gcmVhZCBUb0QgcmVnaXN0ZXJzIGFmdGVyIGlzc3VpbmcgYSBjb21tYW5kXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKiBAbmV4dF9oejogaWYgdHJ1ZSwgcmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIejsgb3RoZXJ3aXNlIHJlYWQgY3VycmVudFxuKyAqIEB0czogdGltZXNwZWMgdG8gc3RvcmUgdGhlIHJlc3VsdFxuKyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nXG4rICpcbisgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4raW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgIGJvb2wgbmV4dF9oeiwgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxuK1x0XHRcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpXG4re1xuK1x0dTMyIG5zZWM7XG4rXHR1NjQgc2VjO1xuK1x0dTggY21kO1xuK1x0aW50IHJjO1xuK1xuK1x0aWYgKG5leHRfaHopXG4rXHRcdGNtZCA9IFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaO1xuK1x0ZWxzZVxuK1x0XHRjbWQgPSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UO1xuK1xuK1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbitcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHB0cF9yZWFkX3N5c3RlbV9wcmV0cyhzdHMpO1xuK1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLCBjbWQpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXHRwdHBfcmVhZF9zeXN0ZW1fcG9zdHRzKHN0cyk7XG4rXG4rXHRyYyA9IHpsMzA3M3hfcmVhZF91NDgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9TRUMoY2gpLCBcdTAwMjZzZWMpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHQvKiBIVyBuYW5vc2Vjb25kcyBhcmUgYWx3YXlzIGluIFswLCBOU0VDX1BFUl9TRUMpIHJhbmdlICovXG4rXHRyYyA9IHpsMzA3M3hfcmVhZF91MzIoemxkZXYsIFpMX1JFR19EUExMX1RPRF9OUyhjaCksIFx1MDAyNm5zZWMpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHR0cy1cdTAwM2V0dl9zZWMgPSBzZWM7XG4rXHR0cy1cdTAwM2V0dl9uc2VjID0gbnNlYztcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlIC0gd3JpdGUgVG9EIHJlZ2lzdGVycyBhbmQgdHJpZ2dlciAxIEh6IHVwZGF0ZVxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICogQHRzOiB0aW1lIHRvIHNldFxuKyAqXG4rICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuK1x0XHRcdCAgIHN0cnVjdCB0aW1lc3BlYzY0IHRzKVxuK3tcbitcdGludCByYztcbitcbitcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfU0VDKGNoKSwgdHMudHZfc2VjKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgdHMudHZfbnNlYyk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLFxuK1x0XHRcdFx0ICAgICBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWik7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0IC0gYXRvbWljIFRvRCByZWFkLW1vZGlmeS13cml0ZSB3aXRoIHJvbGxvdmVyIGd1YXJkXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCB0byBhcHBseVxuKyAqXG4rICogUmVhZHMgdGhlIG5leHQtSHogVG9EIGFuZCBjdXJyZW50IFRvRCwgdGhlbiBjaGVja3Mgd2hldGhlciBlbm91Z2ggdGltZVxuKyAqIHJlbWFpbnMgYmVmb3JlIHRoZSBuZXh0IDEgSHogcm9sbG92ZXIgdG8gc2FmZWx5IGNvbXBsZXRlIHRoZSB3cml0ZS5cbisgKiBSZS1yZWFkcyBpZiB0aGUgMSBIeiB0aWNrIGNyb3NzZWQgYmV0d2VlbiB0aGUgdHdvIHJlYWRzIG9yIGlmIGxlc3NcbisgKiB0aGFuIDIwIG1zIHJlbWFpbnMgYmVmb3JlIHRoZSBuZXh0IHJvbGxvdmVyLiBBcHBsaWVzIEBkZWx0YSBhbmQgd3JpdGVzXG4rICogdGhlIHJlc3VsdCBiYWNrLlxuKyAqXG4rICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK2ludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpXG4re1xuKyNkZWZpbmUgWkxfVE9EX01BWF9SRVRSSUVTXHQyMFxuK1x0c3RhdGljIGNvbnN0IGxvbmcgdGhyZXNob2xkX25zID0gMjAgKiBOU0VDX1BFUl9NU0VDO1xuK1x0c3RydWN0IHRpbWVzcGVjNjQgdHNfbmV4dCwgdHNfY3VyLCBkaWZmO1xuK1x0aW50IHJjLCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgWkxfVE9EX01BWF9SRVRSSUVTOyBpKyspIHtcbitcdFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCB0cnVlLCBcdTAwMjZ0c19uZXh0LCBOVUxMKTtcbitcdFx0aWYgKHJjKVxuK1x0XHRcdHJldHVybiByYztcbitcbitcdFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCBmYWxzZSwgXHUwMDI2dHNfY3VyLCBOVUxMKTtcbitcdFx0aWYgKHJjKVxuK1x0XHRcdHJldHVybiByYztcbitcbitcdFx0LyogRW5zdXJlIHRoZSAxIEh6IHRpY2sgZGlkIG5vdCBjcm9zcyBiZXR3ZWVuIHRoZSB0d28gcmVhZHNcbitcdFx0ICogYW5kIHRoYXQgZW5vdWdoIG1hcmdpbiByZW1haW5zIHRvIGNvbXBsZXRlIHRoZSB3cml0ZS5cbitcdFx0ICovXG4rXHRcdGRpZmYgPSB0aW1lc3BlYzY0X3N1Yih0c19uZXh0LCB0c19jdXIpO1xuK1x0XHRpZiAoZGlmZi50dl9zZWMgXHUwMDNlIDAgfHxcbitcdFx0ICAgICghZGlmZi50dl9zZWMgXHUwMDI2XHUwMDI2IGRpZmYudHZfbnNlYyBcdTAwM2U9IHRocmVzaG9sZF9ucykpXG4rXHRcdFx0YnJlYWs7XG4rXHR9XG4rXHRpZiAoaSA9PSBaTF9UT0RfTUFYX1JFVFJJRVMpIHtcbitcdFx0ZGV2X3dhcm4oemxkZXYtXHUwMDNlZGV2LFxuK1x0XHRcdCBcIkRQTEwldSBUb0QgYWRqdXN0IGZhaWxlZCB0byBnZXQgc3RhYmxlIG1hcmdpblxcblwiLFxuK1x0XHRcdCBjaCk7XG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXHR9XG4rXG4rXHQvKiBBcHBseSBkZWx0YSB0byB0aGUgbmV4dC1IeiBUb0QgKi9cbitcdHRzX25leHQgPSB0aW1lc3BlYzY0X2FkZCh0c19uZXh0LCBkZWx0YSk7XG4rXHRpZiAoIXRpbWVzcGVjNjRfdmFsaWRfc2V0dG9kKFx1MDAyNnRzX25leHQpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZGV2LCBjaCwgdHNfbmV4dCk7XG4rI3VuZGVmIFpMX1RPRF9NQVhfUkVUUklFU1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCAtIHdyaXRlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgdG8gaGFyZHdhcmVcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqIEBvZmZzZXQ6IGZyZXF1ZW5jeSBvZmZzZXQgaW4gMl4tNDggc3RlcHNcbisgKlxuKyAqIENvbnRleHQ6IENhbGxlciBtdXN0IGhvbGQgdGhlIHBlci1EUExMIGxvY2suXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitpbnQgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBvZmZzZXQpXG4re1xuK1x0aW50IHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfREZfT0ZGU0VUKGNoKSwgb2Zmc2V0KTtcbitcdGlmICghcmMpXG4rXHRcdHpsZGV2LVx1MDAzZWNoYW5bY2hdLmRmX29mZnNldCA9IG9mZnNldDtcbitcbitcdHJldHVybiByYztcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3RpZV93cml0ZSAtIGFkanVzdCBEUExMIHBoYXNlIHVzaW5nIFRJRSB3cml0ZVxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICogQGRlbHRhX25zOiBwaGFzZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzIChtdXN0IGJlIGluICgtMXMsIDFzKSlcbisgKlxuKyAqIENvbnZlcnRzIG5hbm9zZWNvbmRzIHRvIFRJRSB1bml0cyAoMC4wMSBwcykgYW5kIHdyaXRlcyBUSUUgZGF0YVxuKyAqIHRvIHRoZSBzcGVjaWZpZWQgY2hhbm5lbC5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4raW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucylcbit7XG4rXHRzNjQgdGllX2RhdGE7XG4rXHRpbnQgcmM7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkZXYtXHUwMDNldGllX2xvY2spO1xuK1xuK1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRJRSBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbitcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLFxuK1x0XHRcdFx0ICBaTF9EUExMX1RJRV9DVFJMX09QLFxuK1x0XHRcdFx0ICBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0LyogQ29udmVydCBucyB0byBUSUUgdW5pdHMgKDAuMDEgcHMgPSAxMF4tMTQgcykgKi9cbitcdHRpZV9kYXRhID0gZGVsdGFfbnMgKiAxMDAwMDBMTDtcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9EQVRBKGNoKSwgdGllX2RhdGEpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0ssIEJJVChjaCkpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsXG4rXHRcdFx0XHRaTF9EUExMX1RJRV9DVFJMX09QX1dSKTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAgLSBleGVjdXRlIG9uZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb25cbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqIEBvdXRfbWFzazogYml0bWFzayBvZiBvdXRwdXRzIHRvIHN0ZXBcbisgKiBAc3RlcF9jeWNsZXM6IHBoYXNlIHN0ZXAgaW4gc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzXG4rICogQHRvZF9zdGVwOiBhbHNvIHN0ZXAgdGhlIFRvRCBjb3VudGVyXG4rICpcbisgKiBBbGwgbWFza2VkIG91dHB1dHMgbXVzdCB1c2Ugc3ludGhlc2l6ZXJzIG9mIHRoZSBzYW1lIGZyZXF1ZW5jeSBzaW5jZVxuKyAqIHRoZSBzdGVwIHZhbHVlIGlzIGluIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcy5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4raW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuK1x0XHRcdCAgICB1MTYgb3V0X21hc2ssIHMzMiBzdGVwX2N5Y2xlcyxcbitcdFx0XHQgICAgYm9vbCB0b2Rfc3RlcClcbit7XG4rXHR1OCBjdHJsO1xuK1x0aW50IHJjO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZGV2LVx1MDAzZXBoYXNlX3N0ZXBfbG9jayk7XG4rXG4rXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgcGhhc2Ugc3RlcCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbitcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLFxuK1x0XHRcdFx0ICBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QLFxuK1x0XHRcdFx0ICBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VUyk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBLFxuK1x0XHRcdCAgICAgICBzdGVwX2N5Y2xlcyk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLLCBvdXRfbWFzayk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUiwgMSk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdGN0cmwgPSBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfRFBMTCwgY2gpIHxcbitcdCAgICAgICBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AsXG4rXHRcdFx0ICBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1dSSVRFKTtcbitcdGlmICh0b2Rfc3RlcClcbitcdFx0Y3RybCB8PSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX1RPRF9TVEVQO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLCBjdHJsKTtcbit9XG4rXG4gLyoqXG4gICogemwzMDczeF9jaGFuX3N0YXRlX3NldCAtIGNvbW1pdCBEUExMIGNoYW5uZWwgc3RhdGUgY2hhbmdlcyB0byBoYXJkd2FyZVxuICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhcbmluZGV4IGRjOWM2ZDk1YmRlZTcuLjk5YzNiNzA4OGY2NzggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaFxuQEAgLTUsMTAgKzUsMTIgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RkZGVmLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC90aW1lNjQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcInJlZ3MuaFwiXG4gXG4rc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wO1xuIHN0cnVjdCB6bDMwNzN4X2RldjtcbiBcbiAvKipcbkBAIC00Miw2ICs0NCwyMSBAQCBpbnQgemwzMDczeF9jaGFuX3N0YXRlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCxcbiBpbnQgemwzMDczeF9jaGFuX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7XG4gaW50IHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpO1xuIFxuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpO1xuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbitcdFx0XHQgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKTtcbitpbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cyk7XG4raW50IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuK1x0XHRcdCAgICBzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YSk7XG4raW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuK1x0XHRcdCAgICB1MTYgb3V0X21hc2ssIHMzMiBzdGVwX2N5Y2xlcywgYm9vbCB0b2Rfc3RlcCk7XG4rXG4raW50IHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgb2Zmc2V0KTtcbitcbitpbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKTtcbitcbiAvKipcbiAgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X2dldCAtIGdldCBjYWNoZWQgZGZfb2Zmc2V0IHZzIHRyYWNrZWQgcmVmZXJlbmNlXG4gICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuQEAgLTIwMCw2ICsyMTcsMjEgQEAgc3RhdGljIGlubGluZSBib29sIHpsMzA3M3hfY2hhbl9tb2RlX2lzX3JlZmxvY2soY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcbiBcdHJldHVybiB6bDMwNzN4X2NoYW5fbW9kZV9nZXQoY2hhbikgPT0gWkxfRFBMTF9NT0RFX1JFRlNFTF9NT0RFX1JFRkxPQ0s7XG4gfVxuIFxuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZSAtIGNoZWNrIGlmIGNoYW5uZWwgbW9kZSBzdXBwb3J0cyBUSUUgd3JpdGVcbisgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG4rICpcbisgKiBUSUUgd3JpdGUgaXMgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMgcmVnYXJkbGVzcyBvZiBsb2NrIHN0YXRlLlxuKyAqXG4rICogUmV0dXJuOiB0cnVlIGlmIFRJRSB3cml0ZSBpcyBzdXBwb3J0ZWQsIGZhbHNlIG90aGVyd2lzZVxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbFxuK3psMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxuK3tcbitcdHJldHVybiB6bDMwNzN4X2NoYW5fbW9kZV9pc19hdXRvKGNoYW4pIHx8XG4rXHRcdHpsMzA3M3hfY2hhbl9tb2RlX2lzX3JlZmxvY2soY2hhbik7XG4rfVxuK1xuIC8qKlxuICAqIHpsMzA3M3hfY2hhbl9pc19ob19yZWFkeSAtIGNoZWNrIGlmIGhvbGRvdmVyIGlzIHJlYWR5XG4gICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1xuaW5kZXggNWIyZDc3ZjJjMjI4OC4uMjMwZGYwOGUyN2NkMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1xuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jXG5AQCAtMzIyLDcgKzMyMiw3IEBAIGludCB6bDMwNzN4X3dyaXRlX3U0OChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLCB1NjQgdmFsKVxuIGludCB6bDMwNzN4X3BvbGxfemVyb191OChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLFxuIFx0XHRcdCB1OCBtYXNrLCB1bnNpZ25lZCBpbnQgdGltZW91dF91cylcbiB7XG4tI2RlZmluZSBaTF9QT0xMX1NMRUVQX1VTIDEwXG4rXHR1bnNpZ25lZCBpbnQgc2xlZXBfdXMgPSB0aW1lb3V0X3VzIC8gNTA7XG4gXHR1bnNpZ25lZCBpbnQgdmFsO1xuIFxuIFx0LyogQ2hlY2sgdGhlIHJlZ2lzdGVyIGlzIDhiaXQgKi9cbkBAIC0zMzYsNyArMzM2LDcgQEAgaW50IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsXG4gXHRyZWcgPSBaTF9SRUdfQUREUihyZWcpICsgWkxfUkFOR0VfT0ZGU0VUO1xuIFxuIFx0cmV0dXJuIHJlZ21hcF9yZWFkX3BvbGxfdGltZW91dCh6bGRldi1cdTAwM2VyZWdtYXAsIHJlZywgdmFsLCAhKHZhbCBcdTAwMjYgbWFzayksXG4tXHRcdFx0XHRcdFpMX1BPTExfU0xFRVBfVVMsIHRpbWVvdXRfdXMpO1xuK1x0XHRcdFx0XHRzbGVlcF91cywgdGltZW91dF91cyk7XG4gfVxuIFxuIGludCB6bDMwNzN4X21iX29wKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCBvcF9yZWcsIHU4IG9wX3ZhbCxcbkBAIC01MTEsNiArNTExLDExIEBAIHpsMzA3M3hfZGV2X3N0YXRlX2ZldGNoKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXG4gXHRpbnQgcmM7XG4gXHR1OCBpO1xuIFxuK1x0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1NURVBfVElNRV9NQVNLLFxuK1x0XHRcdCAgICAgIFx1MDAyNnpsZGV2LVx1MDAzZW91dF9zdGVwX3RpbWVfbWFzayk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFpMMzA3M1hfTlVNX1JFRlM7IGkrKykge1xuIFx0XHRyYyA9IHpsMzA3M3hfcmVmX3N0YXRlX2ZldGNoKHpsZGV2LCBpKTtcbiBcdFx0aWYgKHJjKSB7XG5AQCAtMTAzNCw2ICsxMDM5LDE0IEBAIGludCB6bDMwNzN4X2Rldl9wcm9iZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxuIFx0ICogYW5kL29yIHBvbGxzIGFyZSByZXF1aXJlZCB0byBiZSBkb25lIGF0b21pY2FsbHkuXG4gXHQgKi9cbiBcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVx1MDAzZWRldiwgXHUwMDI2emxkZXYtXHUwMDNlbXVsdGlvcF9sb2NrKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXHUwMDNlZGV2LCByYyxcbitcdFx0XHRcdCAgICAgXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcblwiKTtcbitcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVx1MDAzZWRldiwgXHUwMDI2emxkZXYtXHUwMDNlcGhhc2Vfc3RlcF9sb2NrKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXHUwMDNlZGV2LCByYyxcbitcdFx0XHRcdCAgICAgXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcblwiKTtcbitcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVx1MDAzZWRldiwgXHUwMDI2emxkZXYtXHUwMDNldGllX2xvY2spO1xuIFx0aWYgKHJjKVxuIFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIHJjLFxuIFx0XHRcdFx0ICAgICBcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxuXCIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaFxuaW5kZXggNzhkYzIwOGYzZWVhMi4uNjdjMTBlMjU5NTExOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oXG5AQCAtMjYsNiArMjYsMTAgQEAgc3RydWN0IHpsMzA3M3hfZHBsbDtcbiAjZGVmaW5lIFpMX1BPTExfSFdSRUdfVElNRU9VVF9VU1x0KDUwICogVVNFQ19QRVJfTVNFQylcbiAjZGVmaW5lIFpMX1BPTExfTUJfVElNRU9VVF9VU1x0XHQoMzAgKiBVU0VDX1BFUl9NU0VDKVxuICNkZWZpbmUgWkxfUE9MTF9QSEFTRV9FUlJfVElNRU9VVF9VU1x0KDUwICogVVNFQ19QRVJfTVNFQylcbisjZGVmaW5lIFpMX1BPTExfUEhBU0VfU1RFUF9USU1FT1VUX1VTXHQoMzAwMCAqIFVTRUNfUEVSX01TRUMpXG4rI2RlZmluZSBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTXHQoMTAwMCAqIFVTRUNfUEVSX01TRUMpXG4rI2RlZmluZSBaTF9QT0xMX1RPRF9SRF9USU1FT1VUX1VTXHQoMzAgKiBVU0VDX1BFUl9NU0VDKVxuKyNkZWZpbmUgWkxfUE9MTF9UT0RfV1JfVElNRU9VVF9VU1x0KDEwMDAgKiBVU0VDX1BFUl9NU0VDKVxuIFxuIGVudW0gemwzMDczeF9mbGFncyB7XG4gXHRaTDMwNzNYX0ZMQUdfUkVGX1BIQVNFX0NPTVBfMzJfQklULFxuQEAgLTU1LDYgKzU5LDggQEAgc3RydWN0IHpsMzA3M3hfY2hpcF9pbmZvIHtcbiAgKiBAcmVnbWFwOiByZWdtYXAgdG8gYWNjZXNzIGRldmljZSByZWdpc3RlcnNcbiAgKiBAaW5mbzogZGV0ZWN0ZWQgY2hpcCBpbmZvXG4gICogQG11bHRpb3BfbG9jazogdG8gc2VyaWFsaXplIG11bHRpcGxlIHJlZ2lzdGVyIG9wZXJhdGlvbnNcbisgKiBAdGllX2xvY2s6IHRvIHNlcmlhbGl6ZSBUSUUgd3JpdGUgb3BlcmF0aW9uc1xuKyAqIEBwaGFzZV9zdGVwX2xvY2s6IHRvIHNlcmlhbGl6ZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb25zXG4gICogQHJlZjogYXJyYXkgb2YgaW5wdXQgcmVmZXJlbmNlcycgaW52YXJpYW50c1xuICAqIEBvdXQ6IGFycmF5IG9mIG91dHMnIGludmFyaWFudHNcbiAgKiBAc3ludGg6IGFycmF5IG9mIHN5bnRocycgaW52YXJpYW50c1xuQEAgLTYzLDYgKzY5LDcgQEAgc3RydWN0IHpsMzA3M3hfY2hpcF9pbmZvIHtcbiAgKiBAa3dvcmtlcjogdGhyZWFkIGZvciBwZXJpb2RpYyB3b3JrXG4gICogQHdvcms6IHBlcmlvZGljIHdvcmtcbiAgKiBAY2xvY2tfaWQ6IGNsb2NrIGlkIG9mIHRoZSBkZXZpY2VcbisgKiBAb3V0X3N0ZXBfdGltZV9tYXNrOiBvdXRwdXQgc3RlcC10aW1lIG1hc2sgKGRldmljZS1nbG9iYWwpXG4gICogQHBoYXNlX2F2Z19mYWN0b3I6IHBoYXNlIG9mZnNldCBtZWFzdXJlbWVudCBhdmVyYWdpbmcgZmFjdG9yXG4gICogQGZyZXFfbW9uaXRvcjogaXMgZnJlcXVlbmN5IG1vbml0b3IgZW5hYmxlZFxuICAqL1xuQEAgLTcxLDYgKzc4LDggQEAgc3RydWN0IHpsMzA3M3hfZGV2IHtcbiBcdHN0cnVjdCByZWdtYXBcdFx0XHQqcmVnbWFwO1xuIFx0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hpcF9pbmZvXHQqaW5mbztcbiBcdHN0cnVjdCBtdXRleFx0XHRcdG11bHRpb3BfbG9jaztcbitcdHN0cnVjdCBtdXRleFx0XHRcdHRpZV9sb2NrO1xuK1x0c3RydWN0IG11dGV4XHRcdFx0cGhhc2Vfc3RlcF9sb2NrO1xuIFxuIFx0LyogSW52YXJpYW50cyAqL1xuIFx0c3RydWN0IHpsMzA3M3hfcmVmXHRyZWZbWkwzMDczWF9OVU1fUkVGU107XG5AQCAtODcsNiArOTYsNyBAQCBzdHJ1Y3QgemwzMDczeF9kZXYge1xuIFxuIFx0LyogUGVyLWNoaXAgcGFyYW1ldGVycyAqL1xuIFx0dTY0XHRcdFx0Y2xvY2tfaWQ7XG4rXHR1MTZcdFx0XHRvdXRfc3RlcF90aW1lX21hc2s7XG4gXHR1OFx0XHRcdHBoYXNlX2F2Z19mYWN0b3I7XG4gXHRib29sXHRcdFx0ZnJlcV9tb25pdG9yO1xuIH07XG5AQCAtMzA4LDYgKzMxOCwxOSBAQCB6bDMwNzN4X2Rldl9vdXRfaXNfZW5hYmxlZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleClcbiBcdHJldHVybiB6bDMwNzN4X3N5bnRoX2lzX2VuYWJsZWQoc3ludGgpIFx1MDAyNlx1MDAyNiB6bDMwNzN4X291dF9pc19lbmFibGVkKG91dCk7XG4gfVxuIFxuKy8qKlxuKyAqIHpsMzA3M3hfZGV2X291dF9pc19zdGVwcGVkIC0gY2hlY2sgaWYgb3V0cHV0IGlzIGluIHN0ZXAtdGltZSBtYXNrXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGluZGV4OiBvdXRwdXQgaW5kZXhcbisgKlxuKyAqIFJldHVybjogdHJ1ZSBpZiBvdXRwdXQgaXMgYWZmZWN0ZWQgYnkgc3RlcC10aW1lIG9wZXJhdGlvbnNcbisgKi9cbitzdGF0aWMgaW5saW5lIGJvb2xcbit6bDMwNzN4X2Rldl9vdXRfaXNfc3RlcHBlZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleClcbit7XG4rXHRyZXR1cm4gISEoemxkZXYtXHUwMDNlb3V0X3N0ZXBfdGltZV9tYXNrIFx1MDAyNiBCSVQoaW5kZXgpKTtcbit9XG4rXG4gLyoqXG4gICogemwzMDczeF9kZXZfb3V0X2RwbGxfZ2V0IC0gZ2V0IERQTEwgSUQgdGhlIG91dHB1dCBpcyBkcml2ZW4gYnlcbiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcbmluZGV4IDgzYmQzMDI3ZGJhYTEuLmYyZTEzNzQ3NWI0MGYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuY1xuQEAgLTIsNiArMiw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2J1Zy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29udGFpbmVyX29mLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZfcHJpbnRrLmhcdTAwM2VcbkBAIC0xMyw2ICsxNCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3ByaW50Zi5oXHUwMDNlXG4gXG5AQCAtMjMxMyw0NSArMjMxNSwzODQgQEAgemwzMDczeF9kcGxsX2luaXRfZmluZV9waGFzZV9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcbiBcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfU1lOVEhfUEhBU0VfU0hJRlRfQ1RSTCwgMHgwMSk7XG4gfVxuIFxuKy8qIE1heGltdW0gZnJlcXVlbmN5IGFkanVzdG1lbnQ6ICstMSUgb2Ygbm9taW5hbCBpbiBwcGIgKi9cbisjZGVmaW5lIFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESlx0MTAwMDAwMDBcbitcbiAvKipcbi0gKiB6bDMwNzN4X2RwbGxfYWxsb2MgLSBhbGxvY2F0ZSBEUExMIGRldmljZVxuLSAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuLSAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlclxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCAtIHJlYWQgY3VycmVudCB0aW1lIGZyb20gVG9EIGNvdW50ZXJzXG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4rICogQHRzOiB0aW1lc3BlYyB0byBzdG9yZSBjdXJyZW50IHRpbWVcbisgKiBAc3RzOiBvcHRpb25hbCBzeXN0ZW0gdGltZXN0YW1wIHBhaXIgZm9yIGNyb3NzLXRpbWVzdGFtcGluZ1xuICAqXG4tICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cylcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRwbGwtXHUwMDNlZGV2LCB6bGRwbGwtXHUwMDNlaWQsIGZhbHNlLCB0cywgc3RzKTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQgLSBzZXQgVG9EIGNvdW50ZXJzIHRvIGdpdmVuIHRpbWVcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbisgKiBAdHM6IHRpbWVzcGVjIHdpdGggdGltZSB0byBzZXRcbiAgKlxuLSAqIFJldHVybjogcG9pbnRlciB0byBEUExMIGRldmljZSBvbiBzdWNjZXNzLCBlcnJvciBwb2ludGVyIG9uIGVycm9yXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiAgKi9cbi1zdHJ1Y3QgemwzMDczeF9kcGxsICpcbi16bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXG4rXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpXG4ge1xuLVx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsO1xuK1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXG4rXHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuIFxuLVx0emxkcGxsID0ga3phbGxvY19vYmooKnpsZHBsbCk7XG4tXHRpZiAoIXpsZHBsbClcbi1cdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuIFxuLVx0emxkcGxsLVx1MDAzZWRldiA9IHpsZGV2O1xuLVx0emxkcGxsLVx1MDAzZWlkID0gY2g7XG4tXHRtdXRleF9pbml0KFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbi1cdElOSVRfTElTVF9IRUFEKFx1MDAyNnpsZHBsbC1cdTAwM2VwaW5zKTtcbitcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCwgKnRzKTtcbit9XG4gXG4tXHRyZXR1cm4gemxkcGxsO1xuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwIC0gYWRqdXN0IHN1Yi1zZWNvbmQgdGltZSB2aWEgcGhhc2Ugc3RlcFxuKyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbFxuKyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzIChtdXN0IGJlIHdpdGhpbiAoLU5TRUNfUEVSX1NFQyxcbisgKiAgICAgICAgIE5TRUNfUEVSX1NFQykpXG4rICpcbisgKiBVc2VzIHRoZSBvdXRwdXQgcGhhc2Ugc3RlcCBtZWNoYW5pc20gd2l0aCB0b2Rfc3RlcD0xIHRvIGFkanVzdCBib3RoXG4rICogdGhlIG91dHB1dCBjbG9jayBwaGFzZSBhbmQgdGhlIFRvRCBjb3VudGVyIHNpbXVsdGFuZW91c2x5LiBUaGlzIGtlZXBzXG4rICogb3V0cHV0cyBhbmQgVG9EIGNvaGVyZW50LiBPbmx5IHZhbGlkIGZvciBOQ08uXG4rICpcbisgKiBPdXRwdXRzIGFyZSBncm91cGVkIGJ5IHN5bnRoZXNpemVyIHNpbmNlIHRoZSBwaGFzZSBzdGVwIHZhbHVlIGlzIGluXG4rICogc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzLiBUaGUgZmlyc3Qgc3ludGggZ3JvdXAgd2l0aCBlbmFibGVkIG91dHB1dHNcbisgKiB1c2VzIHRvZF9zdGVwIHRvIGFkanVzdCBib3RoIG91dHB1dHMgYW5kIHRoZSBUb0QgY291bnRlci4gUmVtYWluaW5nXG4rICogZ3JvdXBzIHN0ZXAgb3V0cHV0cyBvbmx5LiBJZiBubyBzeW50aCBoYXMgZW5hYmxlZCBvdXRwdXRzLCB0aGUgVG9EXG4rICogY291bnRlciBpcyBzdGVwcGVkIGFsb25lIHVzaW5nIGFuIGVtcHR5IG91dHB1dCBtYXNrICh0aGUgRlcgdXNlc1xuKyAqIHRoZSBmaXJzdCBlbmFibGVkIHN5bnRoJ3MgcGVyaW9kIGZvciB0aGUgY29udmVyc2lvbikuXG4rICpcbisgKiBSZXR1cm46XG4rICogKiAlMFx0XHRcdC0gc3VjY2VzcyAob3IgcGFydGlhbCBzdWNjZXNzIGlmIGEgbGF0ZXIgc3ludGggZ3JvdXBcbisgKlx0XHRcdCAgZmFpbGVkIGFmdGVyIHRoZSBmaXJzdCB3YXMgYWxyZWFkeSBzdGVwcGVkKVxuKyAqICogJS1FT1BOT1RTVVBQXHQtIG5vIHN5bnRocyBhdmFpbGFibGVcbisgKiAqIG5lZ2F0aXZlXHRcdC0gZXJyb3JcbisgKi9cbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCxcbitcdFx0XHRcdFx0ICAgICAgIHM2NCBkZWx0YSlcbit7XG4rXHR1MTYgc3ludGhfbWFza1taTDMwNzNYX05VTV9TWU5USFNdID0ge307XG4rXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbitcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X3N5bnRoICpzeW50aDtcbitcdHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW47XG4rXHR1MzIgZmlyc3Rfc3ludGhfZnJlcSA9IDA7XG4rXHRib29sIHRvZF9zdGVwcGVkID0gZmFsc2U7XG4rXHRzMzIgc3RlcF9jeWNsZXM7XG4rXHR1MzIgc3ludGhfZnJlcTtcbitcdGludCByYztcbitcdHU4IGk7XG4rXG4rXHQvKiBCdWlsZCBwZXItc3ludGggb3V0cHV0IG1hc2tzIGZyb20gcmVnaXN0ZXJlZCBvdXRwdXQgcGlucyAqL1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeShwaW4sIFx1MDAyNnpsZHBsbC1cdTAwM2VwaW5zLCBsaXN0KSB7XG4rXHRcdHU4IG91dF9pZCwgc3ludGhfaWQ7XG4rXG4rXHRcdGlmICh6bDMwNzN4X2RwbGxfaXNfaW5wdXRfcGluKHBpbikpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdG91dF9pZCA9IHpsMzA3M3hfb3V0cHV0X3Bpbl9vdXRfZ2V0KHBpbi1cdTAwM2VpZCk7XG4rXG4rXHRcdGlmICghemwzMDczeF9kZXZfb3V0X2lzX3N0ZXBwZWQoemxkZXYsIG91dF9pZCkpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHN5bnRoX2lkID0gemwzMDczeF9kZXZfb3V0X3N5bnRoX2dldCh6bGRldiwgb3V0X2lkKTtcbitcdFx0aWYgKHN5bnRoX2lkIFx1MDAzZT0gWkwzMDczWF9OVU1fU1lOVEhTKSB7XG4rXHRcdFx0ZGV2X3dhcm4oemxkZXYtXHUwMDNlZGV2LCBcIlVuZXhwZWN0ZWQgc3ludGggaWQgZm9yIE9VVCV1XFxuXCIsXG4rXHRcdFx0XHQgb3V0X2lkKTtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1x0XHRzeW50aF9tYXNrW3N5bnRoX2lkXSB8PSBCSVQob3V0X2lkKTtcbitcdH1cbitcbitcdC8qIFByb2Nlc3MgZWFjaCBzeW50aCBncm91cCAqL1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgWkwzMDczWF9OVU1fU1lOVEhTOyBpKyspIHtcbitcdFx0c3ludGggPSB6bDMwNzN4X3N5bnRoX3N0YXRlX2dldCh6bGRldiwgaSk7XG4rXHRcdGlmICghemwzMDczeF9zeW50aF9pc19lbmFibGVkKHN5bnRoKSB8fFxuK1x0XHQgICAgemwzMDczeF9zeW50aF9kcGxsX2dldChzeW50aCkgIT0gemxkcGxsLVx1MDAzZWlkKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRzeW50aF9mcmVxID0gemwzMDczeF9zeW50aF9mcmVxX2dldChzeW50aCk7XG4rXG4rXHRcdC8qIFJlbWVtYmVyIGZpcnN0IGVuYWJsZWQgc3ludGggZnJlcSBmb3IgVG9ELW9ubHkgZmFsbGJhY2sgKi9cbitcdFx0aWYgKCFmaXJzdF9zeW50aF9mcmVxKVxuK1x0XHRcdGZpcnN0X3N5bnRoX2ZyZXEgPSBzeW50aF9mcmVxO1xuK1xuK1x0XHRpZiAoIXN5bnRoX21hc2tbaV0pXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdC8qIFNhZmUgZm9yIHMzMjogbWF4IHN5bnRoIGZyZXEgaXMgNzUwIE1IeiAqL1xuK1x0XHRzdGVwX2N5Y2xlcyA9IGRpdl9zNjQoZGVsdGEgKiBzeW50aF9mcmVxLCBOU0VDX1BFUl9TRUMpO1xuK1xuK1x0XHRyYyA9IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsXG4rXHRcdFx0XHRcdCAgICAgc3ludGhfbWFza1tpXSwgc3RlcF9jeWNsZXMsXG4rXHRcdFx0XHRcdCAgICAgIXRvZF9zdGVwcGVkKTtcbitcdFx0aWYgKHJjKSB7XG4rXHRcdFx0aWYgKHRvZF9zdGVwcGVkKSB7XG4rXHRcdFx0XHRkZXZfd2Fybih6bGRldi1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcdCBcIlBhcnRpYWwgcGhhc2Ugc3RlcCBmYWlsdXJlXFxuXCIpO1xuK1x0XHRcdFx0cmV0dXJuIDA7XG4rXHRcdFx0fVxuK1x0XHRcdHJldHVybiByYztcbitcdFx0fVxuK1x0XHR0b2Rfc3RlcHBlZCA9IHRydWU7XG4rXHR9XG4rXG4rXHRpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdC8qIE5vIGVuYWJsZWQgb3V0cHV0cyBmb3VuZDsgc3RlcCBUb0QgY291bnRlciBvbmx5IHVzaW5nIHRoZVxuK1x0ICogZmlyc3QgZW5hYmxlZCBzeW50aCdzIHBlcmlvZCAoZW1wdHkgb3V0cHV0IG1hc2spLlxuK1x0ICovXG4rXHRpZiAoIXRvZF9zdGVwcGVkKSB7XG4rXHRcdHN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIGZpcnN0X3N5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7XG4rXHRcdHJldHVybiB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCAwLFxuK1x0XHRcdFx0XHQgICAgICAgc3RlcF9jeWNsZXMsIHRydWUpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIC8qKlxuLSAqIHpsMzA3M3hfZHBsbF9mcmVlIC0gZnJlZSBEUExMIGRldmljZVxuLSAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZVxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSAtIGFkanVzdCBQVFAgY2xvY2sgdGltZVxuKyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xuKyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzXG4gICpcbi0gKiBEZWFsbG9jYXRlcyBnaXZlbiBEUExMIGRldmljZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBieSBAemwzMDczeF9kcGxsX2FsbG9jLlxuKyAqIEZvciBOQ08sIGxhcmdlIGRlbHRhcyAoXHUwMDNlPSAxIHNlY29uZCkgYXJlIHNwbGl0IGludG8gYSBUb0RcbisgKiByZWFkLW1vZGlmeS13cml0ZSBmb3IgdGhlIHNlY29uZHMgcGFydCBhbmQgYW4gb3V0cHV0IHBoYXNlIHN0ZXAgZm9yXG4rICogdGhlIHN1Yi1zZWNvbmQgcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgcGhhc2Ugc3RlcCBkaXJlY3RseSxcbisgKiBmYWxsaW5nIGJhY2sgdG8gVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIGlmIHBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlXG4rICogZmFpbHMuIEluIEFVVE8vUkVGTE9DSyBtb2RlcywgbGFyZ2UgZGVsdGFzIGFyZSBzcGxpdCBpbnRvIFRvRFxuKyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciBzZWNvbmRzIGFuZCBUSUUgd3JpdGUgZm9yIHRoZSBzdWItc2Vjb25kXG4rICogcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgVElFIHdyaXRlIGRpcmVjdGx5LlxuKyAqXG4rICogSWYgdGhlIHNlY29uZHMgcGFydCB3YXMgYWxyZWFkeSBjb21taXR0ZWQgd2hlbiB0aGUgc3ViLXNlY29uZFxuKyAqIG1lY2hhbmlzbSBmYWlscywgcmV0dXJucyAwIHRvIHByZXZlbnQgdGhlIFBUUCBzZXJ2byBmcm9tIHJldHJ5aW5nXG4rICogdGhlIGZ1bGwgZGVsdGEgYW5kIGFwcGx5aW5nIHNlY29uZHMgYWdhaW4uXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcyAob3IgcGFydGlhbCBzdWNjZXNzKSwgXHUwMDNjMCBvbiBlcnJvclxuICAqL1xuLXZvaWRcbi16bDMwNzN4X2RwbGxfZnJlZShzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBzNjQgZGVsdGEpXG4ge1xuLVx0V0FSTih6bGRwbGwtXHUwMDNlZHBsbF9kZXYsIFwiRFBMTCBkZXZpY2UgaXMgc3RpbGwgcmVnaXN0ZXJlZFxcblwiKTtcbitcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxuK1x0XHRcdFx0XHRcdCAgIHB0cF9pbmZvKTtcbitcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuK1x0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjtcbitcdGJvb2wgc2VjX2FkanVzdGVkID0gZmFsc2U7XG4rXHRzdHJ1Y3QgdGltZXNwZWM2NCB0cztcbitcdGludCByYztcbiBcbi1cdG11dGV4X2Rlc3Ryb3koXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuLVx0a2ZyZWUoemxkcGxsKTtcbitcdGlmICghZGVsdGEpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbitcbitcdC8qIE1vZGVzIHdpdGhvdXQgcGhhc2Ugc3RlcCBvciBUSUUgdXNlIHBsYWluIFRvRCBhZGp1c3QgKi9cbitcdGNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQpO1xuK1x0aWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikgXHUwMDI2XHUwMDI2XG4rXHQgICAgIXpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjaGFuKSlcbitcdFx0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsXG4rXHRcdFx0XHRcdCAgICAgICBuc190b190aW1lc3BlYzY0KGRlbHRhKSk7XG4rXG4rXHQvKiBTcGxpdCBvZmYgc2Vjb25kcyB2aWEgVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIHNvIHRoZSBzdWItc2Vjb25kXG4rXHQgKiByZW1haW5kZXIgY2FuIGJlIGFwcGxpZWQgdGhyb3VnaCB0aGUgb3V0cHV0LWNvaGVyZW50IG1lY2hhbmlzbVxuK1x0ICogKHBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlKS5cbitcdCAqL1xuK1x0aWYgKGRlbHRhIFx1MDAzZT0gTlNFQ19QRVJfU0VDIHx8IGRlbHRhIFx1MDAzYz0gLU5TRUNfUEVSX1NFQykge1xuK1x0XHRzMzIgcmVtYWluZGVyO1xuK1xuK1x0XHR0cy50dl9zZWMgPSBkaXZfczY0X3JlbShkZWx0YSwgTlNFQ19QRVJfU0VDLCBcdTAwMjZyZW1haW5kZXIpO1xuK1x0XHR0cy50dl9uc2VjID0gMDtcbitcdFx0ZGVsdGEgPSByZW1haW5kZXI7XG4rXG4rXHRcdHJjID0gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCwgdHMpO1xuK1x0XHRpZiAocmMpXG4rXHRcdFx0cmV0dXJuIHJjO1xuK1xuK1x0XHQvKiBObyBzdWItc2Vjb25kIHJlbWFpbmRlciwgZG9uZSAqL1xuK1x0XHRpZiAoIWRlbHRhKVxuK1x0XHRcdHJldHVybiAwO1xuK1xuK1x0XHQvKiBXYWl0IGZvciB0aGUgVG9EIHdyaXRlIHRvIGJlIGFwcGxpZWQgYXQgdGhlIDEgSHogZWRnZVxuK1x0XHQgKiBiZWZvcmUgaXNzdWluZyBwaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSwgc28gdGhlIHBlbmRpbmdcbitcdFx0ICogV1JfTkVYVF8xSFogZG9lcyBub3Qgb3ZlcndyaXRlIHRoZSBzdWItc2Vjb25kIGFkanVzdG1lbnQuXG4rXHRcdCAqL1xuK1x0XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgemxkcGxsLVx1MDAzZWlkKTtcbitcdFx0aWYgKHJjKVxuK1x0XHRcdHJldHVybiByYztcbitcbitcdFx0c2VjX2FkanVzdGVkID0gdHJ1ZTtcbitcdH1cbitcbitcdC8qIEFwcGx5IHN1Yi1zZWNvbmQgZGVsdGEgdmlhIHBoYXNlIHN0ZXAgKE5DTykgb3IgVElFIHdyaXRlICovXG4rXHRpZiAoemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKSB7XG4rXHRcdHJjID0gemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoemxkcGxsLCBkZWx0YSk7XG4rXHRcdGlmICghcmMpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXHR9IGVsc2Uge1xuK1x0XHRyYyA9IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCwgZGVsdGEpO1xuK1x0XHRpZiAoIXJjKVxuK1x0XHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0LyogUGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUgZmFpbGVkLCBmYWxsIGJhY2sgdG8gVG9EIGFkanVzdCAqL1xuK1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLFxuK1x0XHRcdFx0ICAgICBuc190b190aW1lc3BlYzY0KGRlbHRhKSk7XG4rXG4rXHQvKiBJbiB0aGUgdW5saWtlbHkgZXZlbnQgdGhhdCBib3RoIHBoYXNlIHN0ZXAvVElFIHdyaXRlIGFuZCBmYWxsYmFja1xuK1x0ICogVG9EIGFkanVzdCBmYWlsIGFmdGVyIHNlY29uZHMgd2VyZSBhbHJlYWR5IGNvbW1pdHRlZCwgcmV0dXJuXG4rXHQgKiBzdWNjZXNzIHRvIHByZXZlbnQgdGhlIFBUUCBzZXJ2byBmcm9tIHJldHJ5aW5nIHRoZSBmdWxsIGRlbHRhIGFuZFxuK1x0ICogYXBwbHlpbmcgc2Vjb25kcyBhZ2Fpbi4gVGhlIHN1Yi1zZWNvbmQgcmVzaWR1YWwgd2lsbCBzZWxmLWNvcnJlY3RcbitcdCAqIGluIHRoZSBuZXh0IHNlcnZvIGN5Y2xlLlxuK1x0ICovXG4rXHRpZiAocmMgXHUwMDI2XHUwMDI2IHNlY19hZGp1c3RlZCkge1xuK1x0XHRkZXZfd2Fybih6bGRldi1cdTAwM2VkZXYsXG4rXHRcdFx0IFwiU3ViLXNlY29uZCBhZGp1c3RtZW50IGZhaWxlZCBhZnRlciBzZWNvbmRzIGFwcGxpZWRcXG5cIik7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHJjO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUgLSBhZGp1c3QgUFRQIGNsb2NrIGZyZXF1ZW5jeVxuKyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xuKyAqIEBzY2FsZWRfcHBtOiBmcmVxdWVuY3kgYWRqdXN0bWVudCBpbiBzY2FsZWQgcHBtIChwcG0gKiAyXjE2KVxuKyAqXG4rICogT25seSBzdXBwb3J0ZWQgZm9yIE5DTy4gV3JpdGVzIHRoZSBkZWx0YSBmcmVxdWVuY3kgb2Zmc2V0IHJlZ2lzdGVyLlxuKyAqXG4rICogUmV0dXJuOlxuKyAqICogJTBcdFx0XHQtIHN1Y2Nlc3Mgb3IgQHNjYWxlZF9wcG0gaXMgemVybyAobm8tb3ApXG4rICogKiAlLUVPUE5PVFNVUFBcdC0gTkNPIHBpbiBpcyBub3QgY29ubmVjdGVkIGFuZCBAc2NhbGVkX3BwbSBpcyBub24temVyb1xuKyAqICogbmVnYXRpdmVcdFx0LSBvdGhlciBlcnJvclxuKyAqL1xuK3N0YXRpYyBpbnRcbit6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBsb25nIHNjYWxlZF9wcG0pXG4re1xuK1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXG4rXHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuK1x0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjtcbitcdHM2NCBvZmZzZXQ7XG4rXG4rXHQvKiBDb252ZXJ0IHNjYWxlZF9wcG0gdG8gZGZfb2Zmc2V0IGluIDJeLTQ4IHN0ZXBzOlxuK1x0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjMyKSAvIDEwXjZcbitcdCAqXG4rXHQgKiBTaW1wbGlmeSB0byBhdm9pZCBvdmVyZmxvdzpcbitcdCAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogMl4yNikgLyA1XjZcbitcdCAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogNjcxMDg4NjQpIC8gMTU2MjVcbitcdCAqL1xuK1x0b2Zmc2V0ID0gLWRpdl9zNjQoKHM2NClzY2FsZWRfcHBtICogNjcxMDg4NjRMTCwgMTU2MjUpO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbitcbitcdGNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCk7XG4rXHRpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSlcbitcdFx0cmV0dXJuIHNjYWxlZF9wcG0gPyAtRU9QTk9UU1VQUCA6IDA7XG4rXHRpZiAob2Zmc2V0ID09IGNoYW4tXHUwMDNlZGZfb2Zmc2V0KVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCh6bGRwbGwtXHUwMDNlZGV2LCB6bGRwbGwtXHUwMDNlaWQsIG9mZnNldCk7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2UgLSBhZGp1c3QgUFRQIGNsb2NrIHBoYXNlXG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4rICogQGRlbHRhOiBwaGFzZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzXG4rICpcbisgKiBPbmx5IHN1cHBvcnRlZCBpbiBBVVRPIGFuZCBSRUZMT0NLIG1vZGVzLiBVc2VzIFRJRSB3cml0ZSBmb3JcbisgKiBuYW5vc2Vjb25kIHJlc29sdXRpb24gcGhhc2UgYWRqdXN0bWVudC5cbisgKlxuKyAqIFJldHVybjpcbisgKiAqICUwXHRcdFx0LSBzdWNjZXNzIG9yIEBkZWx0YSBpcyB6ZXJvIChuby1vcClcbisgKiAqICUtRU9QTk9UU1VQUFx0LSBtb2RlIGRvZXMgbm90IHN1cHBvcnQgVElFIGFuZCBAZGVsdGEgaXMgbm9uLXplcm9cbisgKiAqIG5lZ2F0aXZlXHRcdC0gb3RoZXIgZXJyb3JcbisgKi9cbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2Uoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBzMzIgZGVsdGEpXG4re1xuK1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXG4rXHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuK1x0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4rXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xuK1xuK1x0aWYgKCFkZWx0YSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuK1x0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCk7XG4rXG4rXHRpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjaGFuKSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCwgZGVsdGEpO1xuK31cbitcbitzdGF0aWMgczMyXG4remwzMDczeF9kcGxsX3B0cF9nZXRtYXhwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8gX19hbHdheXNfdW51c2VkKVxuK3tcbitcdC8qIEhXIGxpbWl0cyBUSUUgd3JpdGUgdG8gKy0xIHNlY29uZC4gUmV0dXJuIHRoZSBjb25zdGFudCBIV1xuK1x0ICogbGltaXQgYW5kIGxldCBhZGpwaGFzZSBoYW5kbGUgbW9kZS1zcGVjaWZpYyBjaGVja3MuXG4rXHQgKi9cbitcdHJldHVybiBOU0VDX1BFUl9TRUMgLSAxO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHB0cF9jbG9ja19pbmZvIHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mbyA9IHtcbitcdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuK1x0Lm1heF9hZGpcdD0gWkwzMDczWF9EUExMX1BUUF9NQVhfQURKLFxuK1x0LmdldHRpbWV4NjRcdD0gemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0LFxuK1x0LnNldHRpbWU2NFx0PSB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCxcbitcdC5hZGp0aW1lXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSxcbitcdC5hZGpmaW5lXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSxcbitcdC5hZGpwaGFzZVx0PSB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlLFxuK1x0LmdldG1heHBoYXNlXHQ9IHpsMzA3M3hfZHBsbF9wdHBfZ2V0bWF4cGhhc2UsXG4rfTtcbitcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBhIERQTEwgY2hhbm5lbFxuKyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byByZWdpc3RlciBQVFAgY2xvY2sgZm9yXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4re1xuK1x0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4rXHRzdHJ1Y3QgcHRwX2Nsb2NrICpwdHBfY2xvY2s7XG4rXG4rXHR6bGRwbGwtXHUwMDNlcHRwX2luZm8gPSB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm87XG4rXHRzbnByaW50Zih6bGRwbGwtXHUwMDNlcHRwX2luZm8ubmFtZSwgc2l6ZW9mKHpsZHBsbC1cdTAwM2VwdHBfaW5mby5uYW1lKSxcbitcdFx0IFwiJXMtZHBsbCV1XCIsIGRldl9uYW1lKHpsZGV2LVx1MDAzZWRldiksIHpsZHBsbC1cdTAwM2VpZCk7XG4rXG4rXHRwdHBfY2xvY2sgPSBwdHBfY2xvY2tfcmVnaXN0ZXIoXHUwMDI2emxkcGxsLVx1MDAzZXB0cF9pbmZvLCB6bGRldi1cdTAwM2VkZXYpO1xuK1x0aWYgKElTX0VSUihwdHBfY2xvY2spKSB7XG4rXHRcdGRldl9lcnIoemxkZXYtXHUwMDNlZGV2LCBcIkZhaWxlZCB0byByZWdpc3RlciBQVFAgY2xvY2sgZm9yIERQTEwldVxcblwiLFxuK1x0XHRcdHpsZHBsbC1cdTAwM2VpZCk7XG4rXHRcdHJldHVybiBQVFJfRVJSKHB0cF9jbG9jayk7XG4rXHR9XG4rXG4rXHR6bGRwbGwtXHUwMDNlcHRwX2Nsb2NrID0gcHRwX2Nsb2NrO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlciAtIHVucmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBhIERQTEwgY2hhbm5lbFxuKyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byB1bnJlZ2lzdGVyIFBUUCBjbG9jayBmb3JcbisgKi9cbitzdGF0aWMgdm9pZCB6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuK3tcbitcdGlmICghSVNfRVJSX09SX05VTEwoemxkcGxsLVx1MDAzZXB0cF9jbG9jaykpIHtcbitcdFx0cHRwX2Nsb2NrX3VucmVnaXN0ZXIoemxkcGxsLVx1MDAzZXB0cF9jbG9jayk7XG4rXHRcdHpsZHBsbC1cdTAwM2VwdHBfY2xvY2sgPSBOVUxMO1xuK1x0fVxuIH1cbiBcbiAvKipcbkBAIC0yNDM2LDYgKzI3NzcsNDcgQEAgemwzMDczeF9kcGxsX3JlZl9zeW5jX3BhaXJzX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiBcdHJldHVybiAwO1xuIH1cbiBcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfYWxsb2MgLSBhbGxvY2F0ZSBEUExMIGRldmljZVxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlclxuKyAqXG4rICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLlxuKyAqXG4rICogUmV0dXJuOiBwb2ludGVyIHRvIERQTEwgZGV2aWNlIG9uIHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgb24gZXJyb3JcbisgKi9cbitzdHJ1Y3QgemwzMDczeF9kcGxsICpcbit6bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpXG4re1xuK1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsO1xuK1xuK1x0emxkcGxsID0ga3phbGxvY19vYmooKnpsZHBsbCk7XG4rXHRpZiAoIXpsZHBsbClcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXG4rXHR6bGRwbGwtXHUwMDNlZGV2ID0gemxkZXY7XG4rXHR6bGRwbGwtXHUwMDNlaWQgPSBjaDtcbitcdG11dGV4X2luaXQoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2emxkcGxsLVx1MDAzZXBpbnMpO1xuK1xuK1x0cmV0dXJuIHpsZHBsbDtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlXG4rICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXG4rICpcbisgKiBEZWFsbG9jYXRlcyBnaXZlbiBEUExMIGRldmljZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBieSBAemwzMDczeF9kcGxsX2FsbG9jLlxuKyAqL1xuK3ZvaWRcbit6bDMwNzN4X2RwbGxfZnJlZShzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4re1xuK1x0V0FSTih6bGRwbGwtXHUwMDNlZHBsbF9kZXYsIFwiRFBMTCBkZXZpY2UgaXMgc3RpbGwgcmVnaXN0ZXJlZFxcblwiKTtcbitcbitcdG11dGV4X2Rlc3Ryb3koXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1x0a2ZyZWUoemxkcGxsKTtcbit9XG4rXG4gLyoqXG4gICogemwzMDczeF9kcGxsX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgRFBMTCBkZXZpY2UgYW5kIGFsbCBpdHMgcGluc1xuICAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZVxuQEAgLTI0NjYsNiArMjg0OCwxMyBAQCB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIFx0XHRyZXR1cm4gcmM7XG4gXHR9XG4gXG4rXHRyYyA9IHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIoemxkcGxsKTtcbitcdGlmIChyYykge1xuK1x0XHR6bDMwNzN4X2RwbGxfcGluc191bnJlZ2lzdGVyKHpsZHBsbCk7XG4rXHRcdHpsMzA3M3hfZHBsbF9kZXZpY2VfdW5yZWdpc3Rlcih6bGRwbGwpO1xuK1x0XHRyZXR1cm4gcmM7XG4rXHR9XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMjQ3OSw3ICsyODY4LDcgQEAgemwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiB2b2lkXG4gemwzMDczeF9kcGxsX3VucmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIHtcbi1cdC8qIFVucmVnaXN0ZXIgYWxsIHBpbnMgYW5kIGRwbGwgKi9cbitcdHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3Rlcih6bGRwbGwpO1xuIFx0emwzMDczeF9kcGxsX3BpbnNfdW5yZWdpc3Rlcih6bGRwbGwpO1xuIFx0emwzMDczeF9kcGxsX2RldmljZV91bnJlZ2lzdGVyKHpsZHBsbCk7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaFxuaW5kZXggZmFlYmM0MDJiYTFiNy4uOTkzMjIxZGM2MzI0OSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXG5AQCAtNSw2ICs1LDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kcGxsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImNvcmUuaFwiXG4gXG5AQCAtMjIsNiArMjMsOCBAQFxuICAqIEB0eXBlOiBEUExMIHR5cGUgKFBQUyBvciBFRUMpXG4gICogQGxvY2tfc3RhdHVzOiBsYXN0IHNhdmVkIERQTEwgbG9jayBzdGF0dXNcbiAgKiBAcGluczogbGlzdCBvZiBwaW5zXG4rICogQHB0cF9pbmZvOiBQVFAgY2xvY2sgaW5mb1xuKyAqIEBwdHBfY2xvY2s6IHJlZ2lzdGVyZWQgUFRQIGNsb2NrIChvciBOVUxMKVxuICAqL1xuIHN0cnVjdCB6bDMwNzN4X2RwbGwge1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0XHRsaXN0O1xuQEAgLTM2LDYgKzM5LDggQEAgc3RydWN0IHpsMzA3M3hfZHBsbCB7XG4gXHRlbnVtIGRwbGxfdHlwZVx0XHRcdHR5cGU7XG4gXHRlbnVtIGRwbGxfbG9ja19zdGF0dXNcdFx0bG9ja19zdGF0dXM7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRcdHBpbnM7XG4rXHRzdHJ1Y3QgcHRwX2Nsb2NrX2luZm9cdFx0cHRwX2luZm87XG4rXHRzdHJ1Y3QgcHRwX2Nsb2NrXHRcdCpwdHBfY2xvY2s7XG4gfTtcbiBcbiBzdHJ1Y3QgemwzMDczeF9kcGxsICp6bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaFxuaW5kZXggYjcwZWFkN2Q0NDk1Yi4uZjNhNWUxMjE1YWEzNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXG5AQCAtMTc5LDYgKzE3OSwyMCBAQFxuICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRFx0XHRcdEdFTk1BU0soMiwgMClcbiAjZGVmaW5lIFpMX0RQTExfREZfUkVBRF9DTURfQUNDX0lcdFx0NFxuIFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0NUUkxcdFx0XHRaTF9SRUcoNSwgMHgzMCwgMSlcbisjZGVmaW5lIFpMX0RQTExfVElFX0NUUkxfT1BcdFx0XHRHRU5NQVNLKDIsIDApXG4rI2RlZmluZSBaTF9EUExMX1RJRV9DVFJMX09QX1dSXHRcdFx0NFxuK1xuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0NUUkxfTUFTS1x0XHRaTF9SRUcoNSwgMHgzMSwgMSlcbitcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9DVFJMKF9pZHgpXHRcdFx0XHRcdFxcXG4rXHRaTF9SRUdfSURYKF9pZHgsIDUsIDB4MzgsIDEsIFpMMzA3M1hfTUFYX0NIQU5ORUxTLCAxKVxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9TRU1cdFx0XHRCSVQoNClcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EXHRcdFx0R0VOTUFTSygzLCAwKVxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFpcdDFcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX0NVUlJFTlRcdFx0OFxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFpcdDlcbitcbiAjZGVmaW5lIFpMX1JFR19EUExMX01FQVNfQ1RSTFx0XHRcdFpMX1JFRyg1LCAweDUwLCAxKVxuICNkZWZpbmUgWkxfRFBMTF9NRUFTX0NUUkxfRU5cdFx0XHRCSVQoMClcbiAjZGVmaW5lIFpMX0RQTExfTUVBU19DVFJMX0FWR19GQUNUT1JcdFx0R0VOTUFTSyg3LCA0KVxuQEAgLTE5Myw2ICsyMDcsOSBAQFxuIFxuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICogUmVnaXN0ZXIgUGFnZXMgNi03LCBEUExMIERhdGFcbisgKlxuKyAqIFBlci1jaGFubmVsIHJlZ2lzdGVycyB3aXRoIHN0cmlkZSAweDIwLiBDaGFubmVscyAwLTMgcmVzaWRlIG9uIHBhZ2UgNixcbisgKiBjaGFubmVsIDQgb24gcGFnZSA3LlxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuIFxuICNkZWZpbmUgWkxfUkVHX0RQTExfREZfT0ZGU0VUXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG5AQCAtMjAyLDYgKzIxOSwyNCBAQFxuIFx0KChfaWR4KSBcdTAwM2MgNCA/IFpMX1JFR19EUExMX0RGX09GRlNFVF8wMyhfaWR4KSA6IFpMX1JFR19EUExMX0RGX09GRlNFVF80KVxuICNkZWZpbmUgWkxfRFBMTF9ERl9PRkZTRVRfVU5LTk9XTlx0UzY0X01JTlxuIFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEFfMDMoX2lkeClcdFx0XHRcdFx0XFxcbitcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgwQywgNiwgNCwgMHgyMClcbisjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBXzRcdFx0XHRaTF9SRUcoNywgMHgwQywgNilcbisjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBKF9pZHgpXHRcdFx0XHRcdFxcXG4rXHQoKF9pZHgpIFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfVElFX0RBVEFfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9USUVfREFUQV80KVxuK1xuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQ18wMyhfaWR4KVx0XHRcdFx0XHRcXFxuK1x0WkxfUkVHX0lEWChfaWR4LCA2LCAweDEyLCA2LCA0LCAweDIwKVxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQ180XHRcdFx0WkxfUkVHKDcsIDB4MTIsIDYpXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDKF9pZHgpXHRcdFx0XHRcdFxcXG4rXHQoKF9pZHgpIFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfVE9EX1NFQ18wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RPRF9TRUNfNClcbitcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU18wMyhfaWR4KVx0XHRcdFx0XHRcXFxuK1x0WkxfUkVHX0lEWChfaWR4LCA2LCAweDE4LCA0LCA0LCAweDIwKVxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TXzRcdFx0XHRaTF9SRUcoNywgMHgxOCwgNClcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OUyhfaWR4KVx0XHRcdFx0XHRcXFxuK1x0KChfaWR4KSBcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RPRF9OU18wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RPRF9OU180KVxuK1xuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAqIFJlZ2lzdGVyIFBhZ2UgOSwgU3ludGggYW5kIE91dHB1dFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbkBAIC0yMjEsNiArMjU2LDIzIEBAXG4gI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9FTlx0XHRcdEJJVCgwKVxuICNkZWZpbmUgWkxfT1VUUFVUX0NUUkxfU1lOVEhfU0VMXHRcdEdFTk1BU0soNiwgNClcbiBcbisjZGVmaW5lIFpMX1JFR19PVVRQVVRfU1RFUF9USU1FX01BU0tcdFx0WkxfUkVHKDksIDB4MzYsIDIpXG4rXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTFx0XHRaTF9SRUcoOSwgMHgzOCwgMSlcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfRFBMTFx0XHRHRU5NQVNLKDYsIDQpXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX1RPRF9TVEVQXHRCSVQoMylcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BcdFx0R0VOTUFTSygxLCAwKVxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9OT05FXHQwXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1JFU0VUXHQxXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1JFQURcdDJcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfV1JJVEVcdDNcbitcbisjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9OVU1CRVJcdFx0WkxfUkVHKDksIDB4MzksIDEpXG4rXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTUFTS1x0XHRaTF9SRUcoOSwgMHgzYSwgMilcbitcbisjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBXHRcdFpMX1JFRyg5LCAweDNjLCA0KVxuK1xuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICogUmVnaXN0ZXIgUGFnZSAxMCwgUmVmIE1haWxib3hcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjQxOjQ0Ljk1OTk5NjAzNloiLCJTZXEiOjEzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTkzNTQ2MjcxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQVFAgQ2xvY2sgU3VwcG9ydCBpbiBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIERyaXZlciBSZXZpZXcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggYWRkcyBQcmVjaXNpb24gVGltZSBQcm90b2NvbCAoUFRQKSBjbG9jayBmdW5jdGlvbmFsaXR5IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciwgZXNzZW50aWFsbHkgZW5hYmxpbmcgbW9yZSBwcmVjaXNlIHRpbWUgc3luY2hyb25pemF0aW9uIGNhcGFiaWxpdGllcy4gTXkgaW5pdGlhbCBzY2FuIGZvY3VzZWQgb24gaWRlbnRpZnlpbmcgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcywgYSBjb21tb24gYXJlYSBmb3Igc2VjdXJpdHkgZmxhd3MuXG5cbkZpcnN0LCBJIGV4YW1pbmVkIHRoZSBgcHRwX2Nsb2NrX2luZm9gIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbi4gSXQgbG9va3Mgc291bmQ7IHRoZSBjcml0aWNhbCBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIGFuZCB0aGUgc3RydWN0dXJlIGlzIGNvcGllZCByYXRoZXIgdGhhbiBkaXJlY3RseSB1c2VkLCB3aGljaCBwcmV2ZW50cyBhbnkgZGFuZ2xpbmcgcG9pbnRlcnMgb3IgdW5pbml0aWFsaXplZCBkYXRhIGlzc3Vlcy4gSSBwYWlkIHNwZWNpZmljIGF0dGVudGlvbiB0byB0aGUgYHRpbWVzcGVjNjRgIGFuZCBgcHRwX3N5c3RlbV90aW1lc3RhbXBgIHN0cnVjdHVyZXMsIGVuc3VyaW5nIHRoZXkgYXJlIHByb3Blcmx5IHBvcHVsYXRlZCBieSB0aGUgZnVuY3Rpb25zIHJlYWRpbmcgVGltZSBvZiBEYXkgKFRvRCkgcmVnaXN0ZXJzIGZyb20gdGhlIGhhcmR3YXJlLiBUaGUgcmVhZCBhbmQgYWRqdXN0bWVudCBmdW5jdGlvbnMsIHN1Y2ggYXMgYHpsMzA3M3hfY2hhbl90b2RfcmVhZGAsIGB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjRgLCBhbmQgdmFyaW91cyAqYWRqKiBmdW5jdGlvbnMgd2VyZSBjaGVja2VkIHRvIGVuc3VyZSB0aGV5IGFyZSBwcm9wZXJseSBzZXR0aW5nIGFsbCB2YWx1ZXMuXG5cblRoZSBgemwzMDczeF9kcGxsX2FsbG9jYCBmdW5jdGlvbiBpbml0aWFsbHkgcmFpc2VkIGEgc2xpZ2h0IGNvbmNlcm4gZHVlIHRvIHRoZSB1c2Ugb2YgYSBtYWNybyB0aGF0IHdhc24ndCBpbW1lZGlhdGVseSBmYW1pbGlhci4gQWZ0ZXIgYSBjbG9zZXIgbG9vaywgaXQncyBqdXN0IGEgc3RhbmRhcmQgYGt6YWxsb2NgIG9wZXJhdGlvbiwgd2hpY2ggZ3VhcmFudGVlcyB6ZXJvLWluaXRpYWxpemF0aW9uLlxuXG5UaGVyZSBpc24ndCBtdWNoIG5ldyBoZXJlOiBJJ20gc2VlaW5nIHJlZ2lzdGVyIHJlYWRzLCByZWdpc3RlciB3cml0ZXMsIHNvbWUgYmFzaWMgYXJpdGhtZXRpYyBmb3IgdGltZSBhZGp1c3RtZW50cywgYW5kIHN0YW5kYXJkIFBUUCBmcmFtZXdvcmsgaW50ZXJhY3Rpb25zLiBUaGUgZm9jdXMgb24gbG9ja2luZyB3aXRoIG11dGV4ZXMgaW5kaWNhdGVzIHJvYnVzdCBjb25jdXJyZW5jeSBoYW5kbGluZywgbWluaW1pemluZyBkYXRhIHJhY2Ugcmlza3MuIEFsc28sIHNpbmNlIHRoZXJlIGFyZSBubyBuZXcgaW9jdGxzIG9yIG5ldGxpbmsgYXR0cmlidXRlcywgaW50ZXJhY3Rpb24gd2l0aCB1c2Vyc3BhY2UgaXMgc3RhbmRhcmQgUFRQIGNvcmUgaW1wbGVtZW50YXRpb24uIE5vdGhpbmcgbG9va3MgbGlrZSBpdCBjb3VsZCBsZWFrIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiwgbm9yIGludHJvZHVjZSBhbnkgc2VjdXJpdHkgY29uY2VybnMuIEluIHNob3J0LCB0aGUgcGF0Y2ggYXBwZWFycyB0byBiZSBpbXBsZW1lbnRpbmcgUFRQIGZ1bmN0aW9uYWxpdHkgaW4gYSBzYWZlIG1hbm5lciwgYWRoZXJpbmcgdG8gZXN0YWJsaXNoZWQgTGludXgga2VybmVsIGNvZGluZyBwcmFjdGljZXMgYW5kIFBUUCBmcmFtZXdvcmsgZ3VpZGVsaW5lcy4gSSdtIHJlYXNvbmFibHkgY29uZmlkZW50IGluIHRoaXMgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTc1LCJPdXRwdXRUb2tlbnMiOjIwMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1NzQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODo0MjoxNi44OTU0NjMxMjJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgUFRQIGNsb2NrIHN1cHBvcnQgdG8gdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyLiBJdCBpbnRyb2R1Y2VzIGZ1bmN0aW9ucyB0byByZWFkL3dyaXRlIFRpbWUgb2YgRGF5IChUb0QpIHJlZ2lzdGVycywgYWRqdXN0IHBoYXNlLCBhZGp1c3QgZnJlcXVlbmN5LCBhbmQgcmVnaXN0ZXJzIGEgUFRQIGNsb2NrIGRldmljZSB1c2luZyBgcHRwX2Nsb2NrX3JlZ2lzdGVyYC4gQWxsIG5ldyB2YXJpYWJsZXMgYW5kIHN0cnVjdHVyZXMgKHN1Y2ggYXMgYHN0cnVjdCB0aW1lc3BlYzY0YCwgYHN5bnRoX21hc2tgLCBhbmQgYHN0cnVjdCBwdHBfY2xvY2tfaW5mb2ApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIG9yIHBhc3NlZCB0byBzdGFuZGFyZCBrZXJuZWwgQVBJcyB0aGF0IGhhbmRsZSBpbml0aWFsaXphdGlvbi4gVGhlcmUgYXJlIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgaXMgdGhlcmUgYW55IGNvbnRyb2wgZmxvdyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyAobGlrZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIuIEl0IGludHJvZHVjZXMgZnVuY3Rpb25zIHRvIHJlYWQvd3JpdGUgVGltZSBvZiBEYXkgKFRvRCkgcmVnaXN0ZXJzLCBhZGp1c3QgcGhhc2UsIGFkanVzdCBmcmVxdWVuY3ksIGFuZCByZWdpc3RlcnMgYSBQVFAgY2xvY2sgZGV2aWNlIHVzaW5nIGBwdHBfY2xvY2tfcmVnaXN0ZXJgLiBBbGwgbmV3IHZhcmlhYmxlcyBhbmQgc3RydWN0dXJlcyAoc3VjaCBhcyBgc3RydWN0IHRpbWVzcGVjNjRgLCBgc3ludGhfbWFza2AsIGFuZCBgc3RydWN0IHB0cF9jbG9ja19pbmZvYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2Ugb3IgcGFzc2VkIHRvIHN0YW5kYXJkIGtlcm5lbCBBUElzIHRoYXQgaGFuZGxlIGluaXRpYWxpemF0aW9uLiBUaGVyZSBhcmUgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBpcyB0aGVyZSBhbnkgY29udHJvbCBmbG93IGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBidWdzIChsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowbtlsz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-14 08:39:45 +0000 UTC FinishedAt: 2026-08-14 08:42:18 +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": "4f93b12cf7b25fbf8e73d222722805b049f0a6d3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZL3073X", "ZL3073X_I2C", "ZL3073X_SPI", "PTP_1588_CLOCK", "DPLL", "I2C", "SPI" ], "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": "4f93b12cf7b25fbf8e73d222722805b049f0a6d3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZL3073X", "ZL3073X_I2C", "ZL3073X_SPI", "PTP_1588_CLOCK", "DPLL", "I2C", "SPI" ], "series_id": "9e83a370-9e93-4740-b8b8-aa0de000a486" }, "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", "zl3073x_dpll_ptp_gettimex64", "zl3073x_dpll_ptp_settime64", "zl3073x_dpll_ptp_adjtime_phase_step", "zl3073x_dpll_ptp_adjtime", "zl3073x_dpll_ptp_adjfine", "zl3073x_dpll_ptp_adjphase", "zl3073x_dpll_ptp_getmaxphase" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pMMzA3M1gmIzM0OywKICAgICYjMzQ7WkwzMDczWF9JMkMmIzM0OywKICAgICYjMzQ7WkwzMDczWF9TUEkmIzM0OywKICAgICYjMzQ7UFRQXzE1ODhfQ0xPQ0smIzM0OywKICAgICYjMzQ7RFBMTCYjMzQ7LAogICAgJiMzNDtJMkMmIzM0OywKICAgICYjMzQ7U1BJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7emwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0JiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl90b2RfcmVhZCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fdG9kX3dyaXRlJiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl90b2RfYWRqdXN0JiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0JiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl90aWVfd3JpdGUmIzM0OywKICAgICYjMzQ7emwzMDczeF9jaGFuX3BoYXNlX3N0ZXAmIzM0OywKICAgICYjMzQ7emwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0JiMzNDssCiAgICAmIzM0O3psMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0JiMzNDssCiAgICAmIzM0O3psMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwJiMzNDssCiAgICAmIzM0O3psMzA3M3hfZHBsbF9wdHBfYWRqdGltZSYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUmIzM0OywKICAgICYjMzQ7emwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIuIEl0IGludHJvZHVjZXMgZnVuY3Rpb25zIHRvIHJlYWQvd3JpdGUgVGltZSBvZiBEYXkgKFRvRCkgcmVnaXN0ZXJzLCBhZGp1c3QgcGhhc2UsIGFkanVzdCBmcmVxdWVuY3ksIGFuZCByZWdpc3RlcnMgYSBQVFAgY2xvY2sgZGV2aWNlIHVzaW5nIGBwdHBfY2xvY2tfcmVnaXN0ZXJgLiBBbGwgbmV3IHZhcmlhYmxlcyBhbmQgc3RydWN0dXJlcyAoc3VjaCBhcyBgc3RydWN0IHRpbWVzcGVjNjRgLCBgc3ludGhfbWFza2AsIGFuZCBgc3RydWN0IHB0cF9jbG9ja19pbmZvYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2Ugb3IgcGFzc2VkIHRvIHN0YW5kYXJkIGtlcm5lbCBBUElzIHRoYXQgaGFuZGxlIGluaXRpYWxpemF0aW9uLiBUaGVyZSBhcmUgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBpcyB0aGVyZSBhbnkgY29udHJvbCBmbG93IGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBidWdzIChsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIgKHpsMzA3M3gpLiBUaGlzIGV4cG9zZXMgbmV3IGZ1bmN0aW9uYWxpdHkgdG8gdXNlcnNwYWNlIHZpYSB0aGUgUFRQIHN1YnN5c3RlbSAoZS5nLiwgL2Rldi9wdHBYIGlvY3RscykuIFRoZSBkcml2ZXIgaXMgYW4gSTJDL1NQSSBkZXZpY2UgZHJpdmVyLCB3aGljaCBjYW4gYmUgaW5zdGFudGlhdGVkIGFuZCBmdXp6ZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODo0MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDAxMjk4NWQzMTAxYWNkY2EwN2JhOTBiNTVmYTQxZGZlNjZkYWRlN2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAwODo0MTowNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xuaW5kZXggNWJiY2ExNDAwNTgxMy4uZGExNzMxYWNlMTVmMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdcbkBAIC0yLDcgJiM0MzsyLDcgQEBcbiBcbiBjb25maWcgWkwzMDczWFxuIFx0dHJpc3RhdGUgXCYjMzQ7TWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlc1wmIzM0OyBpZiBDT01QSUxFX1RFU1Rcbi1cdGRlcGVuZHMgb24gTkVUXG4mIzQzO1x0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IFBUUF8xNTg4X0NMT0NLXG4gXHRzZWxlY3QgRFBMTFxuIFx0c2VsZWN0IE5FVF9ERVZMSU5LXG4gXHRzZWxlY3QgUkVHTUFQXG5AQCAtMTYsNyAmIzQzOzE2LDcgQEAgY29uZmlnIFpMMzA3M1hcbiBcbiBjb25maWcgWkwzMDczWF9JMkNcbiBcdHRyaXN0YXRlIFwmIzM0O0kyQyBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcJiMzNDtcbi1cdGRlcGVuZHMgb24gSTJDIFx1MDAyNlx1MDAyNiBORVRcbiYjNDM7XHRkZXBlbmRzIG9uIEkyQyBcdTAwMjZcdTAwMjYgTkVUIFx1MDAyNlx1MDAyNiBQVFBfMTU4OF9DTE9DS1xuIFx0c2VsZWN0IFJFR01BUF9JMkNcbiBcdHNlbGVjdCBaTDMwNzNYXG4gXHRoZWxwXG5AQCAtMjgsNyAmIzQzOzI4LDcgQEAgY29uZmlnIFpMMzA3M1hfSTJDXG4gXG4gY29uZmlnIFpMMzA3M1hfU1BJXG4gXHR0cmlzdGF0ZSBcJiMzNDtTUEkgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzXCYjMzQ7XG4tXHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgU1BJXG4mIzQzO1x0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IFNQSSBcdTAwMjZcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tcbiBcdHNlbGVjdCBSRUdNQVBfU1BJXG4gXHRzZWxlY3QgWkwzMDczWFxuIFx0aGVscFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uY1xuaW5kZXggNGVjMmNmNTNkYWQ0Ni4uYmE0ZDMwM2Q0MWI0NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXG5AQCAtMyw2ICYjNDM7Myw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Rldl9wcmludGsuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiBcbkBAIC0xNjIsOCAmIzQzOzE2Myw4IEBAIGludCB6bDMwNzN4X2NoYW5fbmNvX21vZGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxuICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmVcbiAgKiBAaW5kZXg6IERQTEwgY2hhbm5lbCBpbmRleCB0byBmZXRjaCBzdGF0ZSBmb3JcbiAgKlxuLSAqIFJlYWRzIHRoZSBtb2RlX3JlZnNlbCByZWdpc3RlciBhbmQgcmVmZXJlbmNlIHByaW9yaXR5IHJlZ2lzdGVycyBmb3Jcbi0gKiB0aGUgZ2l2ZW4gRFBMTCBjaGFubmVsIGFuZCBzdG9yZXMgdGhlIHJhdyB2YWx1ZXMgZm9yIGxhdGVyIHVzZS5cbiYjNDM7ICogUmVhZHMgdGhlIG1vZGVfcmVmc2VsLCBzdGF0dXMgYW5kIHJlZmVyZW5jZSBwcmlvcml0eSByZWdpc3RlcnMgZm9yXG4mIzQzOyAqIHRoZSBnaXZlbiBEUExMIGNoYW5uZWwgYW5kIHN0b3JlcyB0aGUgdmFsdWVzIGZvciBsYXRlciB1c2UuXG4gICpcbiAgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuICAqL1xuQEAgLTIzNCw2ICYjNDM7MjM1LDMyMiBAQCBjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICp6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsXG4gXHRyZXR1cm4gXHUwMDI2emxkZXYtXHUwMDNlY2hhbltpbmRleF07XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0IC0gd2FpdCBmb3IgVG9EIHNlbWFwaG9yZSB0byBjbGVhclxuJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbiYjNDM7ICpcbiYjNDM7ICogQ2hlY2tzIHRoZSBUb0QgY29udHJvbCByZWdpc3RlciBzZW1hcGhvcmUgYml0LiBJZiBjbGVhciwgcmV0dXJuc1xuJiM0MzsgKiBpbW1lZGlhdGVseS4gT3RoZXJ3aXNlIHBvbGxzIHVudGlsIHRoZSBiaXQgaXMgY2xlYXJlZCBieSB0aGUgZGV2aWNlLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46XG4mIzQzOyAqICogMFx0XHRcdC0gc3VjY2Vzc1xuJiM0MzsgKiAqICUtRUJVU1lcdFx0LSB0aW1lb3V0XG4mIzQzOyAqICogJS1FT1BOT1RTVVBQXHQtIHVua25vd24gY29tbWFuZCBkZXRlY3RlZFxuJiM0MzsgKiAqIG5lZ2F0aXZlXHRcdC0gb3RoZXIgZXJyb3JcbiYjNDM7ICovXG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgdGltZW91dDtcbiYjNDM7XHR1OCB0b2RfY3RybDtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdHJjID0gemwzMDczeF9yZWFkX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksIFx1MDAyNnRvZF9jdHJsKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdGlmICghKHRvZF9jdHJsIFx1MDAyNiBaTF9EUExMX1RPRF9DVFJMX1NFTSkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChGSUVMRF9HRVQoWkxfRFBMTF9UT0RfQ1RSTF9DTUQsIHRvZF9jdHJsKSkge1xuJiM0MztcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFo6XG4mIzQzO1x0XHR0aW1lb3V0ID0gWkxfUE9MTF9UT0RfV1JfVElNRU9VVF9VUztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVDpcbiYjNDM7XHRjYXNlIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaOlxuJiM0MztcdFx0dGltZW91dCA9IFpMX1BPTExfVE9EX1JEX1RJTUVPVVRfVVM7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLFxuJiM0MztcdFx0XHRcdCAgWkxfRFBMTF9UT0RfQ1RSTF9TRU0sIHRpbWVvdXQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmMgPT0gLUVUSU1FRE9VVCA/IC1FQlVTWSA6IHJjO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9jdHJsIC0gaXNzdWUgVG9EIGNvbW1hbmRcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEBjbWQ6IFRvRCBjb21tYW5kIHRvIGV4ZWN1dGVcbiYjNDM7ICpcbiYjNDM7ICogV3JpdGVzIHRoZSBzZW1hcGhvcmUgYW5kIGNvbW1hbmQgdG8gZHBsbF90b2RfY3RybC4gVGhlIGNhbGxlciBtdXN0XG4mIzQzOyAqIGVuc3VyZSB0aGUgZGV2aWNlIGlzIHJlYWR5IChzZW1hcGhvcmUgY2xlYXIpIGJlZm9yZSBjYWxsaW5nIGFuZFxuJiM0MzsgKiBtdXN0IHdhaXQgZm9yIGNvbXBsZXRpb24gaWYgbmVlZGVkLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHU4IGNtZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksXG4mIzQzO1x0XHRcdFx0WkxfRFBMTF9UT0RfQ1RSTF9TRU0gfCBjbWQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9yZWFkIC0gcmVhZCBUb0QgcmVnaXN0ZXJzIGFmdGVyIGlzc3VpbmcgYSBjb21tYW5kXG4mIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuJiM0MzsgKiBAbmV4dF9oejogaWYgdHJ1ZSwgcmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIejsgb3RoZXJ3aXNlIHJlYWQgY3VycmVudFxuJiM0MzsgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIHRoZSByZXN1bHRcbiYjNDM7ICogQHN0czogb3B0aW9uYWwgc3lzdGVtIHRpbWVzdGFtcCBwYWlyIGZvciBjcm9zcy10aW1lc3RhbXBpbmdcbiYjNDM7ICpcbiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4mIzQzO1x0XHRcdCAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXG4mIzQzO1x0XHRcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpXG4mIzQzO3tcbiYjNDM7XHR1MzIgbnNlYztcbiYjNDM7XHR1NjQgc2VjO1xuJiM0MztcdHU4IGNtZDtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdGlmIChuZXh0X2h6KVxuJiM0MztcdFx0Y21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFo7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0Y21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVDtcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbiYjNDM7XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cHRwX3JlYWRfc3lzdGVtX3ByZXRzKHN0cyk7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLCBjbWQpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1x0cHRwX3JlYWRfc3lzdGVtX3Bvc3R0cyhzdHMpO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfcmVhZF91NDgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9TRUMoY2gpLCBcdTAwMjZzZWMpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0LyogSFcgbmFub3NlY29uZHMgYXJlIGFsd2F5cyBpbiBbMCwgTlNFQ19QRVJfU0VDKSByYW5nZSAqL1xuJiM0MztcdHJjID0gemwzMDczeF9yZWFkX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgXHUwMDI2bnNlYyk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHR0cy1cdTAwM2V0dl9zZWMgPSBzZWM7XG4mIzQzO1x0dHMtXHUwMDNldHZfbnNlYyA9IG5zZWM7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF93cml0ZSAtIHdyaXRlIFRvRCByZWdpc3RlcnMgYW5kIHRyaWdnZXIgMSBIeiB1cGRhdGVcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEB0czogdGltZSB0byBzZXRcbiYjNDM7ICpcbiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuJiM0MztcdFx0XHQgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cylcbiYjNDM7e1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbiYjNDM7XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIHRzLnR2X3NlYyk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCB0cy50dl9uc2VjKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLFxuJiM0MztcdFx0XHRcdCAgICAgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFopO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9hZGp1c3QgLSBhdG9taWMgVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIHdpdGggcm9sbG92ZXIgZ3VhcmRcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IHRvIGFwcGx5XG4mIzQzOyAqXG4mIzQzOyAqIFJlYWRzIHRoZSBuZXh0LUh6IFRvRCBhbmQgY3VycmVudCBUb0QsIHRoZW4gY2hlY2tzIHdoZXRoZXIgZW5vdWdoIHRpbWVcbiYjNDM7ICogcmVtYWlucyBiZWZvcmUgdGhlIG5leHQgMSBIeiByb2xsb3ZlciB0byBzYWZlbHkgY29tcGxldGUgdGhlIHdyaXRlLlxuJiM0MzsgKiBSZS1yZWFkcyBpZiB0aGUgMSBIeiB0aWNrIGNyb3NzZWQgYmV0d2VlbiB0aGUgdHdvIHJlYWRzIG9yIGlmIGxlc3NcbiYjNDM7ICogdGhhbiAyMCBtcyByZW1haW5zIGJlZm9yZSB0aGUgbmV4dCByb2xsb3Zlci4gQXBwbGllcyBAZGVsdGEgYW5kIHdyaXRlc1xuJiM0MzsgKiB0aGUgcmVzdWx0IGJhY2suXG4mIzQzOyAqXG4mIzQzOyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YSlcbiYjNDM7e1xuJiM0MzsjZGVmaW5lIFpMX1RPRF9NQVhfUkVUUklFU1x0MjBcbiYjNDM7XHRzdGF0aWMgY29uc3QgbG9uZyB0aHJlc2hvbGRfbnMgPSAyMCAqIE5TRUNfUEVSX01TRUM7XG4mIzQzO1x0c3RydWN0IHRpbWVzcGVjNjQgdHNfbmV4dCwgdHNfY3VyLCBkaWZmO1xuJiM0MztcdGludCByYywgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgWkxfVE9EX01BWF9SRVRSSUVTOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCB0cnVlLCBcdTAwMjZ0c19uZXh0LCBOVUxMKTtcbiYjNDM7XHRcdGlmIChyYylcbiYjNDM7XHRcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgZmFsc2UsIFx1MDAyNnRzX2N1ciwgTlVMTCk7XG4mIzQzO1x0XHRpZiAocmMpXG4mIzQzO1x0XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0XHQvKiBFbnN1cmUgdGhlIDEgSHogdGljayBkaWQgbm90IGNyb3NzIGJldHdlZW4gdGhlIHR3byByZWFkc1xuJiM0MztcdFx0ICogYW5kIHRoYXQgZW5vdWdoIG1hcmdpbiByZW1haW5zIHRvIGNvbXBsZXRlIHRoZSB3cml0ZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0ZGlmZiA9IHRpbWVzcGVjNjRfc3ViKHRzX25leHQsIHRzX2N1cik7XG4mIzQzO1x0XHRpZiAoZGlmZi50dl9zZWMgXHUwMDNlIDAgfHxcbiYjNDM7XHRcdCAgICAoIWRpZmYudHZfc2VjIFx1MDAyNlx1MDAyNiBkaWZmLnR2X25zZWMgXHUwMDNlPSB0aHJlc2hvbGRfbnMpKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKGkgPT0gWkxfVE9EX01BWF9SRVRSSUVTKSB7XG4mIzQzO1x0XHRkZXZfd2Fybih6bGRldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdCBcJiMzNDtEUExMJXUgVG9EIGFkanVzdCBmYWlsZWQgdG8gZ2V0IHN0YWJsZSBtYXJnaW5cXG5cJiMzNDssXG4mIzQzO1x0XHRcdCBjaCk7XG4mIzQzO1x0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogQXBwbHkgZGVsdGEgdG8gdGhlIG5leHQtSHogVG9EICovXG4mIzQzO1x0dHNfbmV4dCA9IHRpbWVzcGVjNjRfYWRkKHRzX25leHQsIGRlbHRhKTtcbiYjNDM7XHRpZiAoIXRpbWVzcGVjNjRfdmFsaWRfc2V0dG9kKFx1MDAyNnRzX25leHQpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZGV2LCBjaCwgdHNfbmV4dCk7XG4mIzQzOyN1bmRlZiBaTF9UT0RfTUFYX1JFVFJJRVNcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0IC0gd3JpdGUgZGVsdGEgZnJlcXVlbmN5IG9mZnNldCB0byBoYXJkd2FyZVxuJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbiYjNDM7ICogQG9mZnNldDogZnJlcXVlbmN5IG9mZnNldCBpbiAyXi00OCBzdGVwc1xuJiM0MzsgKlxuJiM0MzsgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBob2xkIHRoZSBwZXItRFBMTCBsb2NrLlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7aW50IHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgb2Zmc2V0KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJjO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9PRkZTRVQoY2gpLCBvZmZzZXQpO1xuJiM0MztcdGlmICghcmMpXG4mIzQzO1x0XHR6bGRldi1cdTAwM2VjaGFuW2NoXS5kZl9vZmZzZXQgPSBvZmZzZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiByYztcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfY2hhbl90aWVfd3JpdGUgLSBhZGp1c3QgRFBMTCBwaGFzZSB1c2luZyBUSUUgd3JpdGVcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEBkZWx0YV9uczogcGhhc2UgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcyAobXVzdCBiZSBpbiAoLTFzLCAxcykpXG4mIzQzOyAqXG4mIzQzOyAqIENvbnZlcnRzIG5hbm9zZWNvbmRzIHRvIFRJRSB1bml0cyAoMC4wMSBwcykgYW5kIHdyaXRlcyBUSUUgZGF0YVxuJiM0MzsgKiB0byB0aGUgc3BlY2lmaWVkIGNoYW5uZWwuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MztpbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKVxuJiM0Mzt7XG4mIzQzO1x0czY0IHRpZV9kYXRhO1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZGV2LVx1MDAzZXRpZV9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRJRSBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbiYjNDM7XHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTCxcbiYjNDM7XHRcdFx0XHQgIFpMX0RQTExfVElFX0NUUkxfT1AsXG4mIzQzO1x0XHRcdFx0ICBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdC8qIENvbnZlcnQgbnMgdG8gVElFIHVuaXRzICgwLjAxIHBzID0gMTBeLTE0IHMpICovXG4mIzQzO1x0dGllX2RhdGEgPSBkZWx0YV9ucyAqIDEwMDAwMExMO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfREFUQShjaCksIHRpZV9kYXRhKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkxfTUFTSywgQklUKGNoKSk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsXG4mIzQzO1x0XHRcdFx0WkxfRFBMTF9USUVfQ1RSTF9PUF9XUik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCAtIGV4ZWN1dGUgb25lIG91dHB1dCBwaGFzZSBzdGVwIG9wZXJhdGlvblxuJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbiYjNDM7ICogQG91dF9tYXNrOiBiaXRtYXNrIG9mIG91dHB1dHMgdG8gc3RlcFxuJiM0MzsgKiBAc3RlcF9jeWNsZXM6IHBoYXNlIHN0ZXAgaW4gc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzXG4mIzQzOyAqIEB0b2Rfc3RlcDogYWxzbyBzdGVwIHRoZSBUb0QgY291bnRlclxuJiM0MzsgKlxuJiM0MzsgKiBBbGwgbWFza2VkIG91dHB1dHMgbXVzdCB1c2Ugc3ludGhlc2l6ZXJzIG9mIHRoZSBzYW1lIGZyZXF1ZW5jeSBzaW5jZVxuJiM0MzsgKiB0aGUgc3RlcCB2YWx1ZSBpcyBpbiBzeW50aGVzaXplciBjbG9jayBjeWNsZXMuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MztpbnQgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4mIzQzO1x0XHRcdCAgICB1MTYgb3V0X21hc2ssIHMzMiBzdGVwX2N5Y2xlcyxcbiYjNDM7XHRcdFx0ICAgIGJvb2wgdG9kX3N0ZXApXG4mIzQzO3tcbiYjNDM7XHR1OCBjdHJsO1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZGV2LVx1MDAzZXBoYXNlX3N0ZXBfbG9jayk7XG4mIzQzO1xuJiM0MztcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBwaGFzZSBzdGVwIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xuJiM0MztcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLFxuJiM0MztcdFx0XHRcdCAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCxcbiYjNDM7XHRcdFx0XHQgIFpMX1BPTExfUEhBU0VfU1RFUF9USU1FT1VUX1VTKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBLFxuJiM0MztcdFx0XHQgICAgICAgc3RlcF9jeWNsZXMpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3dyaXRlX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX01BU0ssIG91dF9tYXNrKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUiwgMSk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRjdHJsID0gRklFTERfUFJFUChaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX0RQTEwsIGNoKSB8XG4mIzQzO1x0ICAgICAgIEZJRUxEX1BSRVAoWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCxcbiYjNDM7XHRcdFx0ICBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1dSSVRFKTtcbiYjNDM7XHRpZiAodG9kX3N0ZXApXG4mIzQzO1x0XHRjdHJsIHw9IFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVA7XG4mIzQzO1xuJiM0MztcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTCwgY3RybCk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogemwzMDczeF9jaGFuX3N0YXRlX3NldCAtIGNvbW1pdCBEUExMIGNoYW5uZWwgc3RhdGUgY2hhbmdlcyB0byBoYXJkd2FyZVxuICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhcbmluZGV4IGRjOWM2ZDk1YmRlZTcuLjk5YzNiNzA4OGY2NzggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaFxuQEAgLTUsMTAgJiM0Mzs1LDEyIEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0ZGRlZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWU2NC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O3JlZ3MuaFwmIzM0O1xuIFxuJiM0MztzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXA7XG4gc3RydWN0IHpsMzA3M3hfZGV2O1xuIFxuIC8qKlxuQEAgLTQyLDYgJiM0Mzs0NCwyMSBAQCBpbnQgemwzMDczeF9jaGFuX3N0YXRlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCxcbiBpbnQgemwzMDczeF9jaGFuX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7XG4gaW50IHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpO1xuIFxuJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKTtcbiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbiYjNDM7XHRcdFx0ICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbiYjNDM7XHRcdFx0ICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cyk7XG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuJiM0MztcdFx0XHQgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cyk7XG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKTtcbiYjNDM7aW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuJiM0MztcdFx0XHQgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsIGJvb2wgdG9kX3N0ZXApO1xuJiM0MztcbiYjNDM7aW50IHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgb2Zmc2V0KTtcbiYjNDM7XG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgZGVsdGFfbnMpO1xuJiM0MztcbiAvKipcbiAgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X2dldCAtIGdldCBjYWNoZWQgZGZfb2Zmc2V0IHZzIHRyYWNrZWQgcmVmZXJlbmNlXG4gICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuQEAgLTIwMCw2ICYjNDM7MjE3LDIxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6bDMwNzN4X2NoYW5fbW9kZV9pc19yZWZsb2NrKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXG4gXHRyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfZ2V0KGNoYW4pID09IFpMX0RQTExfTU9ERV9SRUZTRUxfTU9ERV9SRUZMT0NLO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZSAtIGNoZWNrIGlmIGNoYW5uZWwgbW9kZSBzdXBwb3J0cyBUSUUgd3JpdGVcbiYjNDM7ICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuJiM0MzsgKlxuJiM0MzsgKiBUSUUgd3JpdGUgaXMgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMgcmVnYXJkbGVzcyBvZiBsb2NrIHN0YXRlLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgVElFIHdyaXRlIGlzIHN1cHBvcnRlZCwgZmFsc2Ugb3RoZXJ3aXNlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2xcbiYjNDM7emwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfaXNfYXV0byhjaGFuKSB8fFxuJiM0MztcdFx0emwzMDczeF9jaGFuX21vZGVfaXNfcmVmbG9jayhjaGFuKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiB6bDMwNzN4X2NoYW5faXNfaG9fcmVhZHkgLSBjaGVjayBpZiBob2xkb3ZlciBpcyByZWFkeVxuICAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcbmluZGV4IDViMmQ3N2YyYzIyODguLjIzMGRmMDhlMjdjZDEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1xuQEAgLTMyMiw3ICYjNDM7MzIyLDcgQEAgaW50IHpsMzA3M3hfd3JpdGVfdTQ4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsIHU2NCB2YWwpXG4gaW50IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsXG4gXHRcdFx0IHU4IG1hc2ssIHVuc2lnbmVkIGludCB0aW1lb3V0X3VzKVxuIHtcbi0jZGVmaW5lIFpMX1BPTExfU0xFRVBfVVMgMTBcbiYjNDM7XHR1bnNpZ25lZCBpbnQgc2xlZXBfdXMgPSB0aW1lb3V0X3VzIC8gNTA7XG4gXHR1bnNpZ25lZCBpbnQgdmFsO1xuIFxuIFx0LyogQ2hlY2sgdGhlIHJlZ2lzdGVyIGlzIDhiaXQgKi9cbkBAIC0zMzYsNyAmIzQzOzMzNiw3IEBAIGludCB6bDMwNzN4X3BvbGxfemVyb191OChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLFxuIFx0cmVnID0gWkxfUkVHX0FERFIocmVnKSAmIzQzOyBaTF9SQU5HRV9PRkZTRVQ7XG4gXG4gXHRyZXR1cm4gcmVnbWFwX3JlYWRfcG9sbF90aW1lb3V0KHpsZGV2LVx1MDAzZXJlZ21hcCwgcmVnLCB2YWwsICEodmFsIFx1MDAyNiBtYXNrKSxcbi1cdFx0XHRcdFx0WkxfUE9MTF9TTEVFUF9VUywgdGltZW91dF91cyk7XG4mIzQzO1x0XHRcdFx0XHRzbGVlcF91cywgdGltZW91dF91cyk7XG4gfVxuIFxuIGludCB6bDMwNzN4X21iX29wKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCBvcF9yZWcsIHU4IG9wX3ZhbCxcbkBAIC01MTEsNiAmIzQzOzUxMSwxMSBAQCB6bDMwNzN4X2Rldl9zdGF0ZV9mZXRjaChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxuIFx0aW50IHJjO1xuIFx0dTggaTtcbiBcbiYjNDM7XHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfU1RFUF9USU1FX01BU0ssXG4mIzQzO1x0XHRcdCAgICAgIFx1MDAyNnpsZGV2LVx1MDAzZW91dF9zdGVwX3RpbWVfbWFzayk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFpMMzA3M1hfTlVNX1JFRlM7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdHJjID0gemwzMDczeF9yZWZfc3RhdGVfZmV0Y2goemxkZXYsIGkpO1xuIFx0XHRpZiAocmMpIHtcbkBAIC0xMDM0LDYgJiM0MzsxMDM5LDE0IEBAIGludCB6bDMwNzN4X2Rldl9wcm9iZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxuIFx0ICogYW5kL29yIHBvbGxzIGFyZSByZXF1aXJlZCB0byBiZSBkb25lIGF0b21pY2FsbHkuXG4gXHQgKi9cbiBcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVx1MDAzZWRldiwgXHUwMDI2emxkZXYtXHUwMDNlbXVsdGlvcF9sb2NrKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIHJjLFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXG5cJiMzNDspO1xuJiM0MztcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVx1MDAzZWRldiwgXHUwMDI2emxkZXYtXHUwMDNlcGhhc2Vfc3RlcF9sb2NrKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIHJjLFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXG5cJiMzNDspO1xuJiM0MztcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVx1MDAzZWRldiwgXHUwMDI2emxkZXYtXHUwMDNldGllX2xvY2spO1xuIFx0aWYgKHJjKVxuIFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIHJjLFxuIFx0XHRcdFx0ICAgICBcJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcblwmIzM0Oyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oXG5pbmRleCA3OGRjMjA4ZjNlZWEyLi42N2MxMGUyNTk1MTE4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcbkBAIC0yNiw2ICYjNDM7MjYsMTAgQEAgc3RydWN0IHpsMzA3M3hfZHBsbDtcbiAjZGVmaW5lIFpMX1BPTExfSFdSRUdfVElNRU9VVF9VU1x0KDUwICogVVNFQ19QRVJfTVNFQylcbiAjZGVmaW5lIFpMX1BPTExfTUJfVElNRU9VVF9VU1x0XHQoMzAgKiBVU0VDX1BFUl9NU0VDKVxuICNkZWZpbmUgWkxfUE9MTF9QSEFTRV9FUlJfVElNRU9VVF9VU1x0KDUwICogVVNFQ19QRVJfTVNFQylcbiYjNDM7I2RlZmluZSBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VU1x0KDMwMDAgKiBVU0VDX1BFUl9NU0VDKVxuJiM0MzsjZGVmaW5lIFpMX1BPTExfVElFX1dSX1RJTUVPVVRfVVNcdCgxMDAwICogVVNFQ19QRVJfTVNFQylcbiYjNDM7I2RlZmluZSBaTF9QT0xMX1RPRF9SRF9USU1FT1VUX1VTXHQoMzAgKiBVU0VDX1BFUl9NU0VDKVxuJiM0MzsjZGVmaW5lIFpMX1BPTExfVE9EX1dSX1RJTUVPVVRfVVNcdCgxMDAwICogVVNFQ19QRVJfTVNFQylcbiBcbiBlbnVtIHpsMzA3M3hfZmxhZ3Mge1xuIFx0WkwzMDczWF9GTEFHX1JFRl9QSEFTRV9DT01QXzMyX0JJVCxcbkBAIC01NSw2ICYjNDM7NTksOCBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8ge1xuICAqIEByZWdtYXA6IHJlZ21hcCB0byBhY2Nlc3MgZGV2aWNlIHJlZ2lzdGVyc1xuICAqIEBpbmZvOiBkZXRlY3RlZCBjaGlwIGluZm9cbiAgKiBAbXVsdGlvcF9sb2NrOiB0byBzZXJpYWxpemUgbXVsdGlwbGUgcmVnaXN0ZXIgb3BlcmF0aW9uc1xuJiM0MzsgKiBAdGllX2xvY2s6IHRvIHNlcmlhbGl6ZSBUSUUgd3JpdGUgb3BlcmF0aW9uc1xuJiM0MzsgKiBAcGhhc2Vfc3RlcF9sb2NrOiB0byBzZXJpYWxpemUgb3V0cHV0IHBoYXNlIHN0ZXAgb3BlcmF0aW9uc1xuICAqIEByZWY6IGFycmF5IG9mIGlucHV0IHJlZmVyZW5jZXMmIzM5OyBpbnZhcmlhbnRzXG4gICogQG91dDogYXJyYXkgb2Ygb3V0cyYjMzk7IGludmFyaWFudHNcbiAgKiBAc3ludGg6IGFycmF5IG9mIHN5bnRocyYjMzk7IGludmFyaWFudHNcbkBAIC02Myw2ICYjNDM7NjksNyBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8ge1xuICAqIEBrd29ya2VyOiB0aHJlYWQgZm9yIHBlcmlvZGljIHdvcmtcbiAgKiBAd29yazogcGVyaW9kaWMgd29ya1xuICAqIEBjbG9ja19pZDogY2xvY2sgaWQgb2YgdGhlIGRldmljZVxuJiM0MzsgKiBAb3V0X3N0ZXBfdGltZV9tYXNrOiBvdXRwdXQgc3RlcC10aW1lIG1hc2sgKGRldmljZS1nbG9iYWwpXG4gICogQHBoYXNlX2F2Z19mYWN0b3I6IHBoYXNlIG9mZnNldCBtZWFzdXJlbWVudCBhdmVyYWdpbmcgZmFjdG9yXG4gICogQGZyZXFfbW9uaXRvcjogaXMgZnJlcXVlbmN5IG1vbml0b3IgZW5hYmxlZFxuICAqL1xuQEAgLTcxLDYgJiM0Mzs3OCw4IEBAIHN0cnVjdCB6bDMwNzN4X2RldiB7XG4gXHRzdHJ1Y3QgcmVnbWFwXHRcdFx0KnJlZ21hcDtcbiBcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mb1x0KmluZm87XG4gXHRzdHJ1Y3QgbXV0ZXhcdFx0XHRtdWx0aW9wX2xvY2s7XG4mIzQzO1x0c3RydWN0IG11dGV4XHRcdFx0dGllX2xvY2s7XG4mIzQzO1x0c3RydWN0IG11dGV4XHRcdFx0cGhhc2Vfc3RlcF9sb2NrO1xuIFxuIFx0LyogSW52YXJpYW50cyAqL1xuIFx0c3RydWN0IHpsMzA3M3hfcmVmXHRyZWZbWkwzMDczWF9OVU1fUkVGU107XG5AQCAtODcsNiAmIzQzOzk2LDcgQEAgc3RydWN0IHpsMzA3M3hfZGV2IHtcbiBcbiBcdC8qIFBlci1jaGlwIHBhcmFtZXRlcnMgKi9cbiBcdHU2NFx0XHRcdGNsb2NrX2lkO1xuJiM0MztcdHUxNlx0XHRcdG91dF9zdGVwX3RpbWVfbWFzaztcbiBcdHU4XHRcdFx0cGhhc2VfYXZnX2ZhY3RvcjtcbiBcdGJvb2xcdFx0XHRmcmVxX21vbml0b3I7XG4gfTtcbkBAIC0zMDgsNiAmIzQzOzMxOCwxOSBAQCB6bDMwNzN4X2Rldl9vdXRfaXNfZW5hYmxlZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleClcbiBcdHJldHVybiB6bDMwNzN4X3N5bnRoX2lzX2VuYWJsZWQoc3ludGgpIFx1MDAyNlx1MDAyNiB6bDMwNzN4X291dF9pc19lbmFibGVkKG91dCk7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kZXZfb3V0X2lzX3N0ZXBwZWQgLSBjaGVjayBpZiBvdXRwdXQgaXMgaW4gc3RlcC10aW1lIG1hc2tcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBpbmRleDogb3V0cHV0IGluZGV4XG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogdHJ1ZSBpZiBvdXRwdXQgaXMgYWZmZWN0ZWQgYnkgc3RlcC10aW1lIG9wZXJhdGlvbnNcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbFxuJiM0Mzt6bDMwNzN4X2Rldl9vdXRfaXNfc3RlcHBlZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleClcbiYjNDM7e1xuJiM0MztcdHJldHVybiAhISh6bGRldi1cdTAwM2VvdXRfc3RlcF90aW1lX21hc2sgXHUwMDI2IEJJVChpbmRleCkpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIHpsMzA3M3hfZGV2X291dF9kcGxsX2dldCAtIGdldCBEUExMIElEIHRoZSBvdXRwdXQgaXMgZHJpdmVuIGJ5XG4gICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jXG5pbmRleCA4M2JkMzAyN2RiYWExLi5mMmUxMzc0NzViNDBmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcbkBAIC0yLDYgJiM0MzsyLDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2J1Zy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29udGFpbmVyX29mLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZfcHJpbnRrLmhcdTAwM2VcbkBAIC0xMyw2ICYjNDM7MTQsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zcHJpbnRmLmhcdTAwM2VcbiBcbkBAIC0yMzEzLDQ1ICYjNDM7MjMxNSwzODQgQEAgemwzMDczeF9kcGxsX2luaXRfZmluZV9waGFzZV9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcbiBcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfU1lOVEhfUEhBU0VfU0hJRlRfQ1RSTCwgMHgwMSk7XG4gfVxuIFxuJiM0MzsvKiBNYXhpbXVtIGZyZXF1ZW5jeSBhZGp1c3RtZW50OiAmIzQzOy0xJSBvZiBub21pbmFsIGluIHBwYiAqL1xuJiM0MzsjZGVmaW5lIFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESlx0MTAwMDAwMDBcbiYjNDM7XG4gLyoqXG4tICogemwzMDczeF9kcGxsX2FsbG9jIC0gYWxsb2NhdGUgRFBMTCBkZXZpY2Vcbi0gKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2Vcbi0gKiBAY2g6IERQTEwgY2hhbm5lbCBudW1iZXJcbiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0IC0gcmVhZCBjdXJyZW50IHRpbWUgZnJvbSBUb0QgY291bnRlcnNcbiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4mIzQzOyAqIEB0czogdGltZXNwZWMgdG8gc3RvcmUgY3VycmVudCB0aW1lXG4mIzQzOyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nXG4gICpcbi0gKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCwgZmFsc2UsIHRzLCBzdHMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQgLSBzZXQgVG9EIGNvdW50ZXJzIHRvIGdpdmVuIHRpbWVcbiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4mIzQzOyAqIEB0czogdGltZXNwZWMgd2l0aCB0aW1lIHRvIHNldFxuICAqXG4tICogUmV0dXJuOiBwb2ludGVyIHRvIERQTEwgZGV2aWNlIG9uIHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgb24gZXJyb3JcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiAgKi9cbi1zdHJ1Y3QgemwzMDczeF9kcGxsICpcbi16bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpXG4mIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxuJiM0MztcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcbiB7XG4tXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIHB0cF9pbmZvKTtcbiBcbi1cdHpsZHBsbCA9IGt6YWxsb2Nfb2JqKCp6bGRwbGwpO1xuLVx0aWYgKCF6bGRwbGwpXG4tXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4gXG4tXHR6bGRwbGwtXHUwMDNlZGV2ID0gemxkZXY7XG4tXHR6bGRwbGwtXHUwMDNlaWQgPSBjaDtcbi1cdG11dGV4X2luaXQoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2emxkcGxsLVx1MDAzZXBpbnMpO1xuJiM0MztcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCwgKnRzKTtcbiYjNDM7fVxuIFxuLVx0cmV0dXJuIHpsZHBsbDtcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwIC0gYWRqdXN0IHN1Yi1zZWNvbmQgdGltZSB2aWEgcGhhc2Ugc3RlcFxuJiM0MzsgKiBAemxkcGxsOiBEUExMIGNoYW5uZWxcbiYjNDM7ICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMgKG11c3QgYmUgd2l0aGluICgtTlNFQ19QRVJfU0VDLFxuJiM0MzsgKiAgICAgICAgIE5TRUNfUEVSX1NFQykpXG4mIzQzOyAqXG4mIzQzOyAqIFVzZXMgdGhlIG91dHB1dCBwaGFzZSBzdGVwIG1lY2hhbmlzbSB3aXRoIHRvZF9zdGVwPTEgdG8gYWRqdXN0IGJvdGhcbiYjNDM7ICogdGhlIG91dHB1dCBjbG9jayBwaGFzZSBhbmQgdGhlIFRvRCBjb3VudGVyIHNpbXVsdGFuZW91c2x5LiBUaGlzIGtlZXBzXG4mIzQzOyAqIG91dHB1dHMgYW5kIFRvRCBjb2hlcmVudC4gT25seSB2YWxpZCBmb3IgTkNPLlxuJiM0MzsgKlxuJiM0MzsgKiBPdXRwdXRzIGFyZSBncm91cGVkIGJ5IHN5bnRoZXNpemVyIHNpbmNlIHRoZSBwaGFzZSBzdGVwIHZhbHVlIGlzIGluXG4mIzQzOyAqIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcy4gVGhlIGZpcnN0IHN5bnRoIGdyb3VwIHdpdGggZW5hYmxlZCBvdXRwdXRzXG4mIzQzOyAqIHVzZXMgdG9kX3N0ZXAgdG8gYWRqdXN0IGJvdGggb3V0cHV0cyBhbmQgdGhlIFRvRCBjb3VudGVyLiBSZW1haW5pbmdcbiYjNDM7ICogZ3JvdXBzIHN0ZXAgb3V0cHV0cyBvbmx5LiBJZiBubyBzeW50aCBoYXMgZW5hYmxlZCBvdXRwdXRzLCB0aGUgVG9EXG4mIzQzOyAqIGNvdW50ZXIgaXMgc3RlcHBlZCBhbG9uZSB1c2luZyBhbiBlbXB0eSBvdXRwdXQgbWFzayAodGhlIEZXIHVzZXNcbiYjNDM7ICogdGhlIGZpcnN0IGVuYWJsZWQgc3ludGgmIzM5O3MgcGVyaW9kIGZvciB0aGUgY29udmVyc2lvbikuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjpcbiYjNDM7ICogKiAlMFx0XHRcdC0gc3VjY2VzcyAob3IgcGFydGlhbCBzdWNjZXNzIGlmIGEgbGF0ZXIgc3ludGggZ3JvdXBcbiYjNDM7ICpcdFx0XHQgIGZhaWxlZCBhZnRlciB0aGUgZmlyc3Qgd2FzIGFscmVhZHkgc3RlcHBlZClcbiYjNDM7ICogKiAlLUVPUE5PVFNVUFBcdC0gbm8gc3ludGhzIGF2YWlsYWJsZVxuJiM0MzsgKiAqIG5lZ2F0aXZlXHRcdC0gZXJyb3JcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHM2NCBkZWx0YSlcbiYjNDM7e1xuJiM0MztcdHUxNiBzeW50aF9tYXNrW1pMMzA3M1hfTlVNX1NZTlRIU10gPSB7fTtcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgemwzMDczeF9zeW50aCAqc3ludGg7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbjtcbiYjNDM7XHR1MzIgZmlyc3Rfc3ludGhfZnJlcSA9IDA7XG4mIzQzO1x0Ym9vbCB0b2Rfc3RlcHBlZCA9IGZhbHNlO1xuJiM0MztcdHMzMiBzdGVwX2N5Y2xlcztcbiYjNDM7XHR1MzIgc3ludGhfZnJlcTtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1x0dTggaTtcbiYjNDM7XG4mIzQzO1x0LyogQnVpbGQgcGVyLXN5bnRoIG91dHB1dCBtYXNrcyBmcm9tIHJlZ2lzdGVyZWQgb3V0cHV0IHBpbnMgKi9cbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBpbiwgXHUwMDI2emxkcGxsLVx1MDAzZXBpbnMsIGxpc3QpIHtcbiYjNDM7XHRcdHU4IG91dF9pZCwgc3ludGhfaWQ7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHpsMzA3M3hfZHBsbF9pc19pbnB1dF9waW4ocGluKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0b3V0X2lkID0gemwzMDczeF9vdXRwdXRfcGluX291dF9nZXQocGluLVx1MDAzZWlkKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXpsMzA3M3hfZGV2X291dF9pc19zdGVwcGVkKHpsZGV2LCBvdXRfaWQpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRzeW50aF9pZCA9IHpsMzA3M3hfZGV2X291dF9zeW50aF9nZXQoemxkZXYsIG91dF9pZCk7XG4mIzQzO1x0XHRpZiAoc3ludGhfaWQgXHUwMDNlPSBaTDMwNzNYX05VTV9TWU5USFMpIHtcbiYjNDM7XHRcdFx0ZGV2X3dhcm4oemxkZXYtXHUwMDNlZGV2LCBcJiMzNDtVbmV4cGVjdGVkIHN5bnRoIGlkIGZvciBPVVQldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgb3V0X2lkKTtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRzeW50aF9tYXNrW3N5bnRoX2lkXSB8PSBCSVQob3V0X2lkKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFByb2Nlc3MgZWFjaCBzeW50aCBncm91cCAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFpMMzA3M1hfTlVNX1NZTlRIUzsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN5bnRoID0gemwzMDczeF9zeW50aF9zdGF0ZV9nZXQoemxkZXYsIGkpO1xuJiM0MztcdFx0aWYgKCF6bDMwNzN4X3N5bnRoX2lzX2VuYWJsZWQoc3ludGgpIHx8XG4mIzQzO1x0XHQgICAgemwzMDczeF9zeW50aF9kcGxsX2dldChzeW50aCkgIT0gemxkcGxsLVx1MDAzZWlkKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRzeW50aF9mcmVxID0gemwzMDczeF9zeW50aF9mcmVxX2dldChzeW50aCk7XG4mIzQzO1xuJiM0MztcdFx0LyogUmVtZW1iZXIgZmlyc3QgZW5hYmxlZCBzeW50aCBmcmVxIGZvciBUb0Qtb25seSBmYWxsYmFjayAqL1xuJiM0MztcdFx0aWYgKCFmaXJzdF9zeW50aF9mcmVxKVxuJiM0MztcdFx0XHRmaXJzdF9zeW50aF9mcmVxID0gc3ludGhfZnJlcTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXN5bnRoX21hc2tbaV0pXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdC8qIFNhZmUgZm9yIHMzMjogbWF4IHN5bnRoIGZyZXEgaXMgNzUwIE1IeiAqL1xuJiM0MztcdFx0c3RlcF9jeWNsZXMgPSBkaXZfczY0KGRlbHRhICogc3ludGhfZnJlcSwgTlNFQ19QRVJfU0VDKTtcbiYjNDM7XG4mIzQzO1x0XHRyYyA9IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHN5bnRoX21hc2tbaV0sIHN0ZXBfY3ljbGVzLFxuJiM0MztcdFx0XHRcdFx0ICAgICAhdG9kX3N0ZXBwZWQpO1xuJiM0MztcdFx0aWYgKHJjKSB7XG4mIzQzO1x0XHRcdGlmICh0b2Rfc3RlcHBlZCkge1xuJiM0MztcdFx0XHRcdGRldl93YXJuKHpsZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcdCBcJiMzNDtQYXJ0aWFsIHBoYXNlIHN0ZXAgZmFpbHVyZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0cmV0dXJuIHJjO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0dG9kX3N0ZXBwZWQgPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFmaXJzdF9zeW50aF9mcmVxKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHQvKiBObyBlbmFibGVkIG91dHB1dHMgZm91bmQ7IHN0ZXAgVG9EIGNvdW50ZXIgb25seSB1c2luZyB0aGVcbiYjNDM7XHQgKiBmaXJzdCBlbmFibGVkIHN5bnRoJiMzOTtzIHBlcmlvZCAoZW1wdHkgb3V0cHV0IG1hc2spLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghdG9kX3N0ZXBwZWQpIHtcbiYjNDM7XHRcdHN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIGZpcnN0X3N5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7XG4mIzQzO1x0XHRyZXR1cm4gemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCwgMCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBzdGVwX2N5Y2xlcywgdHJ1ZSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gLyoqXG4tICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlXG4tICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXG4mIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSAtIGFkanVzdCBQVFAgY2xvY2sgdGltZVxuJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbiYjNDM7ICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHNcbiAgKlxuLSAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuXG4mIzQzOyAqIEZvciBOQ08sIGxhcmdlIGRlbHRhcyAoXHUwMDNlPSAxIHNlY29uZCkgYXJlIHNwbGl0IGludG8gYSBUb0RcbiYjNDM7ICogcmVhZC1tb2RpZnktd3JpdGUgZm9yIHRoZSBzZWNvbmRzIHBhcnQgYW5kIGFuIG91dHB1dCBwaGFzZSBzdGVwIGZvclxuJiM0MzsgKiB0aGUgc3ViLXNlY29uZCByZW1haW5kZXIuIFN1Yi1zZWNvbmQgZGVsdGFzIHVzZSBwaGFzZSBzdGVwIGRpcmVjdGx5LFxuJiM0MzsgKiBmYWxsaW5nIGJhY2sgdG8gVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIGlmIHBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlXG4mIzQzOyAqIGZhaWxzLiBJbiBBVVRPL1JFRkxPQ0sgbW9kZXMsIGxhcmdlIGRlbHRhcyBhcmUgc3BsaXQgaW50byBUb0RcbiYjNDM7ICogcmVhZC1tb2RpZnktd3JpdGUgZm9yIHNlY29uZHMgYW5kIFRJRSB3cml0ZSBmb3IgdGhlIHN1Yi1zZWNvbmRcbiYjNDM7ICogcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgVElFIHdyaXRlIGRpcmVjdGx5LlxuJiM0MzsgKlxuJiM0MzsgKiBJZiB0aGUgc2Vjb25kcyBwYXJ0IHdhcyBhbHJlYWR5IGNvbW1pdHRlZCB3aGVuIHRoZSBzdWItc2Vjb25kXG4mIzQzOyAqIG1lY2hhbmlzbSBmYWlscywgcmV0dXJucyAwIHRvIHByZXZlbnQgdGhlIFBUUCBzZXJ2byBmcm9tIHJldHJ5aW5nXG4mIzQzOyAqIHRoZSBmdWxsIGRlbHRhIGFuZCBhcHBseWluZyBzZWNvbmRzIGFnYWluLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcyAob3IgcGFydGlhbCBzdWNjZXNzKSwgXHUwMDNjMCBvbiBlcnJvclxuICAqL1xuLXZvaWRcbi16bDMwNzN4X2RwbGxfZnJlZShzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4mIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczY0IGRlbHRhKVxuIHtcbi1cdFdBUk4oemxkcGxsLVx1MDAzZWRwbGxfZGV2LCBcJiMzNDtEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuJiM0MztcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XG4mIzQzO1x0Ym9vbCBzZWNfYWRqdXN0ZWQgPSBmYWxzZTtcbiYjNDM7XHRzdHJ1Y3QgdGltZXNwZWM2NCB0cztcbiYjNDM7XHRpbnQgcmM7XG4gXG4tXHRtdXRleF9kZXN0cm95KFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbi1cdGtmcmVlKHpsZHBsbCk7XG4mIzQzO1x0aWYgKCFkZWx0YSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHQvKiBNb2RlcyB3aXRob3V0IHBoYXNlIHN0ZXAgb3IgVElFIHVzZSBwbGFpbiBUb0QgYWRqdXN0ICovXG4mIzQzO1x0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCk7XG4mIzQzO1x0aWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICF6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY2hhbikpXG4mIzQzO1x0XHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBuc190b190aW1lc3BlYzY0KGRlbHRhKSk7XG4mIzQzO1xuJiM0MztcdC8qIFNwbGl0IG9mZiBzZWNvbmRzIHZpYSBUb0QgcmVhZC1tb2RpZnktd3JpdGUgc28gdGhlIHN1Yi1zZWNvbmRcbiYjNDM7XHQgKiByZW1haW5kZXIgY2FuIGJlIGFwcGxpZWQgdGhyb3VnaCB0aGUgb3V0cHV0LWNvaGVyZW50IG1lY2hhbmlzbVxuJiM0MztcdCAqIChwaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSkuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGRlbHRhIFx1MDAzZT0gTlNFQ19QRVJfU0VDIHx8IGRlbHRhIFx1MDAzYz0gLU5TRUNfUEVSX1NFQykge1xuJiM0MztcdFx0czMyIHJlbWFpbmRlcjtcbiYjNDM7XG4mIzQzO1x0XHR0cy50dl9zZWMgPSBkaXZfczY0X3JlbShkZWx0YSwgTlNFQ19QRVJfU0VDLCBcdTAwMjZyZW1haW5kZXIpO1xuJiM0MztcdFx0dHMudHZfbnNlYyA9IDA7XG4mIzQzO1x0XHRkZWx0YSA9IHJlbWFpbmRlcjtcbiYjNDM7XG4mIzQzO1x0XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsIHRzKTtcbiYjNDM7XHRcdGlmIChyYylcbiYjNDM7XHRcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRcdC8qIE5vIHN1Yi1zZWNvbmQgcmVtYWluZGVyLCBkb25lICovXG4mIzQzO1x0XHRpZiAoIWRlbHRhKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBXYWl0IGZvciB0aGUgVG9EIHdyaXRlIHRvIGJlIGFwcGxpZWQgYXQgdGhlIDEgSHogZWRnZVxuJiM0MztcdFx0ICogYmVmb3JlIGlzc3VpbmcgcGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUsIHNvIHRoZSBwZW5kaW5nXG4mIzQzO1x0XHQgKiBXUl9ORVhUXzFIWiBkb2VzIG5vdCBvdmVyd3JpdGUgdGhlIHN1Yi1zZWNvbmQgYWRqdXN0bWVudC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCk7XG4mIzQzO1x0XHRpZiAocmMpXG4mIzQzO1x0XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0XHRzZWNfYWRqdXN0ZWQgPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogQXBwbHkgc3ViLXNlY29uZCBkZWx0YSB2aWEgcGhhc2Ugc3RlcCAoTkNPKSBvciBUSUUgd3JpdGUgKi9cbiYjNDM7XHRpZiAoemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKSB7XG4mIzQzO1x0XHRyYyA9IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwKHpsZHBsbCwgZGVsdGEpO1xuJiM0MztcdFx0aWYgKCFyYylcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJjID0gemwzMDczeF9jaGFuX3RpZV93cml0ZSh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCBkZWx0YSk7XG4mIzQzO1x0XHRpZiAoIXJjKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlIGZhaWxlZCwgZmFsbCBiYWNrIHRvIFRvRCBhZGp1c3QgKi9cbiYjNDM7XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsXG4mIzQzO1x0XHRcdFx0ICAgICBuc190b190aW1lc3BlYzY0KGRlbHRhKSk7XG4mIzQzO1xuJiM0MztcdC8qIEluIHRoZSB1bmxpa2VseSBldmVudCB0aGF0IGJvdGggcGhhc2Ugc3RlcC9USUUgd3JpdGUgYW5kIGZhbGxiYWNrXG4mIzQzO1x0ICogVG9EIGFkanVzdCBmYWlsIGFmdGVyIHNlY29uZHMgd2VyZSBhbHJlYWR5IGNvbW1pdHRlZCwgcmV0dXJuXG4mIzQzO1x0ICogc3VjY2VzcyB0byBwcmV2ZW50IHRoZSBQVFAgc2Vydm8gZnJvbSByZXRyeWluZyB0aGUgZnVsbCBkZWx0YSBhbmRcbiYjNDM7XHQgKiBhcHBseWluZyBzZWNvbmRzIGFnYWluLiBUaGUgc3ViLXNlY29uZCByZXNpZHVhbCB3aWxsIHNlbGYtY29ycmVjdFxuJiM0MztcdCAqIGluIHRoZSBuZXh0IHNlcnZvIGN5Y2xlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChyYyBcdTAwMjZcdTAwMjYgc2VjX2FkanVzdGVkKSB7XG4mIzQzO1x0XHRkZXZfd2Fybih6bGRldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdCBcJiMzNDtTdWItc2Vjb25kIGFkanVzdG1lbnQgZmFpbGVkIGFmdGVyIHNlY29uZHMgYXBwbGllZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiByYztcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSAtIGFkanVzdCBQVFAgY2xvY2sgZnJlcXVlbmN5XG4mIzQzOyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xuJiM0MzsgKiBAc2NhbGVkX3BwbTogZnJlcXVlbmN5IGFkanVzdG1lbnQgaW4gc2NhbGVkIHBwbSAocHBtICogMl4xNilcbiYjNDM7ICpcbiYjNDM7ICogT25seSBzdXBwb3J0ZWQgZm9yIE5DTy4gV3JpdGVzIHRoZSBkZWx0YSBmcmVxdWVuY3kgb2Zmc2V0IHJlZ2lzdGVyLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46XG4mIzQzOyAqICogJTBcdFx0XHQtIHN1Y2Nlc3Mgb3IgQHNjYWxlZF9wcG0gaXMgemVybyAobm8tb3ApXG4mIzQzOyAqICogJS1FT1BOT1RTVVBQXHQtIE5DTyBwaW4gaXMgbm90IGNvbm5lY3RlZCBhbmQgQHNjYWxlZF9wcG0gaXMgbm9uLXplcm9cbiYjNDM7ICogKiBuZWdhdGl2ZVx0XHQtIG90aGVyIGVycm9yXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3psMzA3M3hfZHBsbF9wdHBfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGxvbmcgc2NhbGVkX3BwbSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxuJiM0MztcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjtcbiYjNDM7XHRzNjQgb2Zmc2V0O1xuJiM0MztcbiYjNDM7XHQvKiBDb252ZXJ0IHNjYWxlZF9wcG0gdG8gZGZfb2Zmc2V0IGluIDJeLTQ4IHN0ZXBzOlxuJiM0MztcdCAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogMl4zMikgLyAxMF42XG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBTaW1wbGlmeSB0byBhdm9pZCBvdmVyZmxvdzpcbiYjNDM7XHQgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDJeMjYpIC8gNV42XG4mIzQzO1x0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiA2NzEwODg2NCkgLyAxNTYyNVxuJiM0MztcdCAqL1xuJiM0MztcdG9mZnNldCA9IC1kaXZfczY0KChzNjQpc2NhbGVkX3BwbSAqIDY3MTA4ODY0TEwsIDE1NjI1KTtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkcGxsLVx1MDAzZWRldiwgemxkcGxsLVx1MDAzZWlkKTtcbiYjNDM7XHRpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSlcbiYjNDM7XHRcdHJldHVybiBzY2FsZWRfcHBtID8gLUVPUE5PVFNVUFAgOiAwO1xuJiM0MztcdGlmIChvZmZzZXQgPT0gY2hhbi1cdTAwM2VkZl9vZmZzZXQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCwgb2Zmc2V0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2UgLSBhZGp1c3QgUFRQIGNsb2NrIHBoYXNlXG4mIzQzOyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xuJiM0MzsgKiBAZGVsdGE6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHNcbiYjNDM7ICpcbiYjNDM7ICogT25seSBzdXBwb3J0ZWQgaW4gQVVUTyBhbmQgUkVGTE9DSyBtb2Rlcy4gVXNlcyBUSUUgd3JpdGUgZm9yXG4mIzQzOyAqIG5hbm9zZWNvbmQgcmVzb2x1dGlvbiBwaGFzZSBhZGp1c3RtZW50LlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46XG4mIzQzOyAqICogJTBcdFx0XHQtIHN1Y2Nlc3Mgb3IgQGRlbHRhIGlzIHplcm8gKG5vLW9wKVxuJiM0MzsgKiAqICUtRU9QTk9UU1VQUFx0LSBtb2RlIGRvZXMgbm90IHN1cHBvcnQgVElFIGFuZCBAZGVsdGEgaXMgbm9uLXplcm9cbiYjNDM7ICogKiBuZWdhdGl2ZVx0XHQtIG90aGVyIGVycm9yXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2Uoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBzMzIgZGVsdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuJiM0MztcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XG4mIzQzO1xuJiM0MztcdGlmICghZGVsdGEpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCk7XG4mIzQzO1xuJiM0MztcdGlmICghemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gemwzMDczeF9jaGFuX3RpZV93cml0ZSh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCBkZWx0YSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzMzJcbiYjNDM7emwzMDczeF9kcGxsX3B0cF9nZXRtYXhwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8gX19hbHdheXNfdW51c2VkKVxuJiM0Mzt7XG4mIzQzO1x0LyogSFcgbGltaXRzIFRJRSB3cml0ZSB0byAmIzQzOy0xIHNlY29uZC4gUmV0dXJuIHRoZSBjb25zdGFudCBIV1xuJiM0MztcdCAqIGxpbWl0IGFuZCBsZXQgYWRqcGhhc2UgaGFuZGxlIG1vZGUtc3BlY2lmaWMgY2hlY2tzLlxuJiM0MztcdCAqL1xuJiM0MztcdHJldHVybiBOU0VDX1BFUl9TRUMgLSAxO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHB0cF9jbG9ja19pbmZvIHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mbyA9IHtcbiYjNDM7XHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbiYjNDM7XHQubWF4X2Fkalx0PSBaTDMwNzNYX0RQTExfUFRQX01BWF9BREosXG4mIzQzO1x0LmdldHRpbWV4NjRcdD0gemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0LFxuJiM0MztcdC5zZXR0aW1lNjRcdD0gemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQsXG4mIzQzO1x0LmFkanRpbWVcdD0gemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lLFxuJiM0MztcdC5hZGpmaW5lXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSxcbiYjNDM7XHQuYWRqcGhhc2VcdD0gemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSxcbiYjNDM7XHQuZ2V0bWF4cGhhc2VcdD0gemwzMDczeF9kcGxsX3B0cF9nZXRtYXhwaGFzZSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBhIERQTEwgY2hhbm5lbFxuJiM0MzsgKiBAemxkcGxsOiBEUExMIGNoYW5uZWwgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvclxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuJiM0MztcdHN0cnVjdCBwdHBfY2xvY2sgKnB0cF9jbG9jaztcbiYjNDM7XG4mIzQzO1x0emxkcGxsLVx1MDAzZXB0cF9pbmZvID0gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvO1xuJiM0MztcdHNucHJpbnRmKHpsZHBsbC1cdTAwM2VwdHBfaW5mby5uYW1lLCBzaXplb2YoemxkcGxsLVx1MDAzZXB0cF9pbmZvLm5hbWUpLFxuJiM0MztcdFx0IFwmIzM0OyVzLWRwbGwldVwmIzM0OywgZGV2X25hbWUoemxkZXYtXHUwMDNlZGV2KSwgemxkcGxsLVx1MDAzZWlkKTtcbiYjNDM7XG4mIzQzO1x0cHRwX2Nsb2NrID0gcHRwX2Nsb2NrX3JlZ2lzdGVyKFx1MDAyNnpsZHBsbC1cdTAwM2VwdHBfaW5mbywgemxkZXYtXHUwMDNlZGV2KTtcbiYjNDM7XHRpZiAoSVNfRVJSKHB0cF9jbG9jaykpIHtcbiYjNDM7XHRcdGRldl9lcnIoemxkZXYtXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBEUExMJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHpsZHBsbC1cdTAwM2VpZCk7XG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihwdHBfY2xvY2spO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0emxkcGxsLVx1MDAzZXB0cF9jbG9jayA9IHB0cF9jbG9jaztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIgLSB1bnJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgYSBEUExMIGNoYW5uZWxcbiYjNDM7ICogQHpsZHBsbDogRFBMTCBjaGFubmVsIHRvIHVucmVnaXN0ZXIgUFRQIGNsb2NrIGZvclxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiYjNDM7e1xuJiM0MztcdGlmICghSVNfRVJSX09SX05VTEwoemxkcGxsLVx1MDAzZXB0cF9jbG9jaykpIHtcbiYjNDM7XHRcdHB0cF9jbG9ja191bnJlZ2lzdGVyKHpsZHBsbC1cdTAwM2VwdHBfY2xvY2spO1xuJiM0MztcdFx0emxkcGxsLVx1MDAzZXB0cF9jbG9jayA9IE5VTEw7XG4mIzQzO1x0fVxuIH1cbiBcbiAvKipcbkBAIC0yNDM2LDYgJiM0MzsyNzc3LDQ3IEBAIHpsMzA3M3hfZHBsbF9yZWZfc3luY19wYWlyc19yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfYWxsb2MgLSBhbGxvY2F0ZSBEUExMIGRldmljZVxuJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyXG4mIzQzOyAqXG4mIzQzOyAqIEFsbG9jYXRlcyBEUExMIGRldmljZSBzdHJ1Y3R1cmUgZm9yIGdpdmVuIERQTEwgY2hhbm5lbC5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiBwb2ludGVyIHRvIERQTEwgZGV2aWNlIG9uIHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCB6bDMwNzN4X2RwbGwgKlxuJiM0Mzt6bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7XG4mIzQzO1xuJiM0MztcdHpsZHBsbCA9IGt6YWxsb2Nfb2JqKCp6bGRwbGwpO1xuJiM0MztcdGlmICghemxkcGxsKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1xuJiM0MztcdHpsZHBsbC1cdTAwM2VkZXYgPSB6bGRldjtcbiYjNDM7XHR6bGRwbGwtXHUwMDNlaWQgPSBjaDtcbiYjNDM7XHRtdXRleF9pbml0KFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRJTklUX0xJU1RfSEVBRChcdTAwMjZ6bGRwbGwtXHUwMDNlcGlucyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiB6bGRwbGw7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfZnJlZSAtIGZyZWUgRFBMTCBkZXZpY2VcbiYjNDM7ICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXG4mIzQzOyAqXG4mIzQzOyAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkXG4mIzQzO3psMzA3M3hfZHBsbF9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiYjNDM7e1xuJiM0MztcdFdBUk4oemxkcGxsLVx1MDAzZWRwbGxfZGV2LCBcJiMzNDtEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfZGVzdHJveShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4mIzQzO1x0a2ZyZWUoemxkcGxsKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIgLSByZWdpc3RlciBEUExMIGRldmljZSBhbmQgYWxsIGl0cyBwaW5zXG4gICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXG5AQCAtMjQ2Niw2ICYjNDM7Mjg0OCwxMyBAQCB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIFx0XHRyZXR1cm4gcmM7XG4gXHR9XG4gXG4mIzQzO1x0cmMgPSB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyKHpsZHBsbCk7XG4mIzQzO1x0aWYgKHJjKSB7XG4mIzQzO1x0XHR6bDMwNzN4X2RwbGxfcGluc191bnJlZ2lzdGVyKHpsZHBsbCk7XG4mIzQzO1x0XHR6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTtcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTI0NzksNyAmIzQzOzI4NjgsNyBAQCB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIHZvaWRcbiB6bDMwNzN4X2RwbGxfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4ge1xuLVx0LyogVW5yZWdpc3RlciBhbGwgcGlucyBhbmQgZHBsbCAqL1xuJiM0MztcdHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3Rlcih6bGRwbGwpO1xuIFx0emwzMDczeF9kcGxsX3BpbnNfdW5yZWdpc3Rlcih6bGRwbGwpO1xuIFx0emwzMDczeF9kcGxsX2RldmljZV91bnJlZ2lzdGVyKHpsZHBsbCk7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaFxuaW5kZXggZmFlYmM0MDJiYTFiNy4uOTkzMjIxZGM2MzI0OSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXG5AQCAtNSw2ICYjNDM7NSw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZHBsbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O2NvcmUuaFwmIzM0O1xuIFxuQEAgLTIyLDYgJiM0MzsyMyw4IEBAXG4gICogQHR5cGU6IERQTEwgdHlwZSAoUFBTIG9yIEVFQylcbiAgKiBAbG9ja19zdGF0dXM6IGxhc3Qgc2F2ZWQgRFBMTCBsb2NrIHN0YXR1c1xuICAqIEBwaW5zOiBsaXN0IG9mIHBpbnNcbiYjNDM7ICogQHB0cF9pbmZvOiBQVFAgY2xvY2sgaW5mb1xuJiM0MzsgKiBAcHRwX2Nsb2NrOiByZWdpc3RlcmVkIFBUUCBjbG9jayAob3IgTlVMTClcbiAgKi9cbiBzdHJ1Y3QgemwzMDczeF9kcGxsIHtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdFx0bGlzdDtcbkBAIC0zNiw2ICYjNDM7MzksOCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsIHtcbiBcdGVudW0gZHBsbF90eXBlXHRcdFx0dHlwZTtcbiBcdGVudW0gZHBsbF9sb2NrX3N0YXR1c1x0XHRsb2NrX3N0YXR1cztcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdFx0cGlucztcbiYjNDM7XHRzdHJ1Y3QgcHRwX2Nsb2NrX2luZm9cdFx0cHRwX2luZm87XG4mIzQzO1x0c3RydWN0IHB0cF9jbG9ja1x0XHQqcHRwX2Nsb2NrO1xuIH07XG4gXG4gc3RydWN0IHpsMzA3M3hfZHBsbCAqemwzMDczeF9kcGxsX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhcbmluZGV4IGI3MGVhZDdkNDQ5NWIuLmYzYTVlMTIxNWFhMzYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaFxuQEAgLTE3OSw2ICYjNDM7MTc5LDIwIEBAXG4gI2RlZmluZSBaTF9EUExMX0RGX1JFQURfQ01EXHRcdFx0R0VOTUFTSygyLCAwKVxuICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRF9BQ0NfSVx0XHQ0XG4gXG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0NUUkxcdFx0XHRaTF9SRUcoNSwgMHgzMCwgMSlcbiYjNDM7I2RlZmluZSBaTF9EUExMX1RJRV9DVFJMX09QXHRcdFx0R0VOTUFTSygyLCAwKVxuJiM0MzsjZGVmaW5lIFpMX0RQTExfVElFX0NUUkxfT1BfV1JcdFx0XHQ0XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0tcdFx0WkxfUkVHKDUsIDB4MzEsIDEpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9DVFJMKF9pZHgpXHRcdFx0XHRcdFxcXG4mIzQzO1x0WkxfUkVHX0lEWChfaWR4LCA1LCAweDM4LCAxLCBaTDMwNzNYX01BWF9DSEFOTkVMUywgMSlcbiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX1NFTVx0XHRcdEJJVCg0KVxuJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EXHRcdFx0R0VOTUFTSygzLCAwKVxuJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaXHQxXG4mIzQzOyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVFx0XHQ4XG4mIzQzOyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFpcdDlcbiYjNDM7XG4gI2RlZmluZSBaTF9SRUdfRFBMTF9NRUFTX0NUUkxcdFx0XHRaTF9SRUcoNSwgMHg1MCwgMSlcbiAjZGVmaW5lIFpMX0RQTExfTUVBU19DVFJMX0VOXHRcdFx0QklUKDApXG4gI2RlZmluZSBaTF9EUExMX01FQVNfQ1RSTF9BVkdfRkFDVE9SXHRcdEdFTk1BU0soNywgNClcbkBAIC0xOTMsNiAmIzQzOzIwNyw5IEBAXG4gXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgKiBSZWdpc3RlciBQYWdlcyA2LTcsIERQTEwgRGF0YVxuJiM0MzsgKlxuJiM0MzsgKiBQZXItY2hhbm5lbCByZWdpc3RlcnMgd2l0aCBzdHJpZGUgMHgyMC4gQ2hhbm5lbHMgMC0zIHJlc2lkZSBvbiBwYWdlIDYsXG4mIzQzOyAqIGNoYW5uZWwgNCBvbiBwYWdlIDcuXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gXG4gI2RlZmluZSBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeClcdFx0XHRcdFx0XFxcbkBAIC0yMDIsNiAmIzQzOzIxOSwyNCBAQFxuIFx0KChfaWR4KSBcdTAwM2MgNCA/IFpMX1JFR19EUExMX0RGX09GRlNFVF8wMyhfaWR4KSA6IFpMX1JFR19EUExMX0RGX09GRlNFVF80KVxuICNkZWZpbmUgWkxfRFBMTF9ERl9PRkZTRVRfVU5LTk9XTlx0UzY0X01JTlxuIFxuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG4mIzQzO1x0WkxfUkVHX0lEWChfaWR4LCA2LCAweDBDLCA2LCA0LCAweDIwKVxuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBXzRcdFx0XHRaTF9SRUcoNywgMHgwQywgNilcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQShfaWR4KVx0XHRcdFx0XHRcXFxuJiM0MztcdCgoX2lkeCkgXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RJRV9EQVRBXzQpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUNfMDMoX2lkeClcdFx0XHRcdFx0XFxcbiYjNDM7XHRaTF9SRUdfSURYKF9pZHgsIDYsIDB4MTIsIDYsIDQsIDB4MjApXG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQ180XHRcdFx0WkxfUkVHKDcsIDB4MTIsIDYpXG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQyhfaWR4KVx0XHRcdFx0XHRcXFxuJiM0MztcdCgoX2lkeCkgXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVE9EX1NFQ180KVxuJiM0MztcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlNfMDMoX2lkeClcdFx0XHRcdFx0XFxcbiYjNDM7XHRaTF9SRUdfSURYKF9pZHgsIDYsIDB4MTgsIDQsIDQsIDB4MjApXG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TXzRcdFx0XHRaTF9SRUcoNywgMHgxOCwgNClcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlMoX2lkeClcdFx0XHRcdFx0XFxcbiYjNDM7XHQoKF9pZHgpIFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfVE9EX05TXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVE9EX05TXzQpXG4mIzQzO1xuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAqIFJlZ2lzdGVyIFBhZ2UgOSwgU3ludGggYW5kIE91dHB1dFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbkBAIC0yMjEsNiAmIzQzOzI1NiwyMyBAQFxuICNkZWZpbmUgWkxfT1VUUFVUX0NUUkxfRU5cdFx0XHRCSVQoMClcbiAjZGVmaW5lIFpMX09VVFBVVF9DVFJMX1NZTlRIX1NFTFx0XHRHRU5NQVNLKDYsIDQpXG4gXG4mIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTS1x0XHRaTF9SRUcoOSwgMHgzNiwgMilcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxcdFx0WkxfUkVHKDksIDB4MzgsIDEpXG4mIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9EUExMXHRcdEdFTk1BU0soNiwgNClcbiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX1RPRF9TVEVQXHRCSVQoMylcbiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QXHRcdEdFTk1BU0soMSwgMClcbiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX05PTkVcdDBcbiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1JFU0VUXHQxXG4mIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9SRUFEXHQyXG4mIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURVx0M1xuJiM0MztcbiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTlVNQkVSXHRcdFpMX1JFRyg5LCAweDM5LCAxKVxuJiM0MztcbiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTUFTS1x0XHRaTF9SRUcoOSwgMHgzYSwgMilcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0RBVEFcdFx0WkxfUkVHKDksIDB4M2MsIDQpXG4mIzQzO1xuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICogUmVnaXN0ZXIgUGFnZSAxMCwgUmVmIE1haWxib3hcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODo0MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WkwzMDczWCYjMzQ7LAogICAgJiMzNDtaTDMwNzNYX0kyQyYjMzQ7LAogICAgJiMzNDtaTDMwNzNYX1NQSSYjMzQ7LAogICAgJiMzNDtQVFBfMTU4OF9DTE9DSyYjMzQ7LAogICAgJiMzNDtEUExMJiMzNDssCiAgICAmIzM0O0kyQyYjMzQ7LAogICAgJiMzNDtTUEkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQmIzM0OywKICAgICYjMzQ7emwzMDczeF9jaGFuX3RvZF9yZWFkJiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl90b2Rfd3JpdGUmIzM0OywKICAgICYjMzQ7emwzMDczeF9jaGFuX3RvZF9hZGp1c3QmIzM0OywKICAgICYjMzQ7emwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQmIzM0OywKICAgICYjMzQ7emwzMDczeF9jaGFuX3RpZV93cml0ZSYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQmIzM0OywKICAgICYjMzQ7emwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQmIzM0OywKICAgICYjMzQ7emwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAmIzM0OywKICAgICYjMzQ7emwzMDczeF9kcGxsX3B0cF9hZGp0aW1lJiMzNDssCiAgICAmIzM0O3psMzA3M3hfZHBsbF9wdHBfYWRqZmluZSYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlJiMzNDssCiAgICAmIzM0O3psMzA3M3hfZHBsbF9wdHBfZ2V0bWF4cGhhc2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIgKHpsMzA3M3gpLiBUaGlzIGV4cG9zZXMgbmV3IGZ1bmN0aW9uYWxpdHkgdG8gdXNlcnNwYWNlIHZpYSB0aGUgUFRQIHN1YnN5c3RlbSAoZS5nLiwgL2Rldi9wdHBYIGlvY3RscykuIFRoZSBkcml2ZXIgaXMgYW4gSTJDL1NQSSBkZXZpY2UgZHJpdmVyLCB3aGljaCBjYW4gYmUgaW5zdGFudGlhdGVkIGFuZCBmdXp6ZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDAxMjk4NWQzMTAxYWNkY2EwN2JhOTBiNTVmYTQxZGZlNjZkYWRlN2YKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAxNCAwODo0MTowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWcgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnCmluZGV4IDViYmNhMTQwMDU4MTMuLmRhMTczMWFjZTE1ZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZwpAQCAtMiw3ICYjNDM7Miw3IEBACiAKIGNvbmZpZyBaTDMwNzNYCiAJdHJpc3RhdGUgJiMzNDtNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRSBkZXZpY2VzJiMzNDsgaWYgQ09NUElMRV9URVNUCi0JZGVwZW5kcyBvbiBORVQKJiM0MzsJZGVwZW5kcyBvbiBORVQgJmFtcDsmYW1wOyBQVFBfMTU4OF9DTE9DSwogCXNlbGVjdCBEUExMCiAJc2VsZWN0IE5FVF9ERVZMSU5LCiAJc2VsZWN0IFJFR01BUApAQCAtMTYsNyAmIzQzOzE2LDcgQEAgY29uZmlnIFpMMzA3M1gKIAogY29uZmlnIFpMMzA3M1hfSTJDCiAJdHJpc3RhdGUgJiMzNDtJMkMgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzJiMzNDsKLQlkZXBlbmRzIG9uIEkyQyAmYW1wOyZhbXA7IE5FVAomIzQzOwlkZXBlbmRzIG9uIEkyQyAmYW1wOyZhbXA7IE5FVCAmYW1wOyZhbXA7IFBUUF8xNTg4X0NMT0NLCiAJc2VsZWN0IFJFR01BUF9JMkMKIAlzZWxlY3QgWkwzMDczWAogCWhlbHAKQEAgLTI4LDcgJiM0MzsyOCw3IEBAIGNvbmZpZyBaTDMwNzNYX0kyQwogCiBjb25maWcgWkwzMDczWF9TUEkKIAl0cmlzdGF0ZSAmIzM0O1NQSSBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXMmIzM0OwotCWRlcGVuZHMgb24gTkVUICZhbXA7JmFtcDsgU1BJCiYjNDM7CWRlcGVuZHMgb24gTkVUICZhbXA7JmFtcDsgU1BJICZhbXA7JmFtcDsgUFRQXzE1ODhfQ0xPQ0sKIAlzZWxlY3QgUkVHTUFQX1NQSQogCXNlbGVjdCBaTDMwNzNYCiAJaGVscApkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jCmluZGV4IDRlYzJjZjUzZGFkNDYuLmJhNGQzMDNkNDFiNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMKQEAgLTMsNiAmIzQzOzMsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2NsZWFudXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZWxheS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2Rldl9wcmludGsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3N0cmluZy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiAKQEAgLTE2Miw4ICYjNDM7MTYzLDggQEAgaW50IHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpCiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlCiAgKiBAaW5kZXg6IERQTEwgY2hhbm5lbCBpbmRleCB0byBmZXRjaCBzdGF0ZSBmb3IKICAqCi0gKiBSZWFkcyB0aGUgbW9kZV9yZWZzZWwgcmVnaXN0ZXIgYW5kIHJlZmVyZW5jZSBwcmlvcml0eSByZWdpc3RlcnMgZm9yCi0gKiB0aGUgZ2l2ZW4gRFBMTCBjaGFubmVsIGFuZCBzdG9yZXMgdGhlIHJhdyB2YWx1ZXMgZm9yIGxhdGVyIHVzZS4KJiM0MzsgKiBSZWFkcyB0aGUgbW9kZV9yZWZzZWwsIHN0YXR1cyBhbmQgcmVmZXJlbmNlIHByaW9yaXR5IHJlZ2lzdGVycyBmb3IKJiM0MzsgKiB0aGUgZ2l2ZW4gRFBMTCBjaGFubmVsIGFuZCBzdG9yZXMgdGhlIHZhbHVlcyBmb3IgbGF0ZXIgdXNlLgogICoKICAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgogICovCkBAIC0yMzQsNiAmIzQzOzIzNSwzMjIgQEAgY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqemwzMDczeF9jaGFuX3N0YXRlX2dldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LAogCXJldHVybiAmYW1wO3psZGV2LSZndDtjaGFuW2luZGV4XTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCAtIHdhaXQgZm9yIFRvRCBzZW1hcGhvcmUgdG8gY2xlYXIKJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleAomIzQzOyAqCiYjNDM7ICogQ2hlY2tzIHRoZSBUb0QgY29udHJvbCByZWdpc3RlciBzZW1hcGhvcmUgYml0LiBJZiBjbGVhciwgcmV0dXJucwomIzQzOyAqIGltbWVkaWF0ZWx5LiBPdGhlcndpc2UgcG9sbHMgdW50aWwgdGhlIGJpdCBpcyBjbGVhcmVkIGJ5IHRoZSBkZXZpY2UuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46CiYjNDM7ICogKiAwCQkJLSBzdWNjZXNzCiYjNDM7ICogKiAlLUVCVVNZCQktIHRpbWVvdXQKJiM0MzsgKiAqICUtRU9QTk9UU1VQUAktIHVua25vd24gY29tbWFuZCBkZXRlY3RlZAomIzQzOyAqICogbmVnYXRpdmUJCS0gb3RoZXIgZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IHRpbWVvdXQ7CiYjNDM7CXU4IHRvZF9jdHJsOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF9yZWFkX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksICZhbXA7dG9kX2N0cmwpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CWlmICghKHRvZF9jdHJsICZhbXA7IFpMX0RQTExfVE9EX0NUUkxfU0VNKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlzd2l0Y2ggKEZJRUxEX0dFVChaTF9EUExMX1RPRF9DVFJMX0NNRCwgdG9kX2N0cmwpKSB7CiYjNDM7CWNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFo6CiYjNDM7CQl0aW1lb3V0ID0gWkxfUE9MTF9UT0RfV1JfVElNRU9VVF9VUzsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX0NVUlJFTlQ6CiYjNDM7CWNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFo6CiYjNDM7CQl0aW1lb3V0ID0gWkxfUE9MTF9UT0RfUkRfVElNRU9VVF9VUzsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSwKJiM0MzsJCQkJICBaTF9EUExMX1RPRF9DVFJMX1NFTSwgdGltZW91dCk7CiYjNDM7CiYjNDM7CXJldHVybiByYyA9PSAtRVRJTUVET1VUID8gLUVCVVNZIDogcmM7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl90b2RfY3RybCAtIGlzc3VlIFRvRCBjb21tYW5kCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAY21kOiBUb0QgY29tbWFuZCB0byBleGVjdXRlCiYjNDM7ICoKJiM0MzsgKiBXcml0ZXMgdGhlIHNlbWFwaG9yZSBhbmQgY29tbWFuZCB0byBkcGxsX3RvZF9jdHJsLiBUaGUgY2FsbGVyIG11c3QKJiM0MzsgKiBlbnN1cmUgdGhlIGRldmljZSBpcyByZWFkeSAoc2VtYXBob3JlIGNsZWFyKSBiZWZvcmUgY2FsbGluZyBhbmQKJiM0MzsgKiBtdXN0IHdhaXQgZm9yIGNvbXBsZXRpb24gaWYgbmVlZGVkLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHU4IGNtZCkKJiM0Mzt7CiYjNDM7CXJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksCiYjNDM7CQkJCVpMX0RQTExfVE9EX0NUUkxfU0VNIHwgY21kKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9yZWFkIC0gcmVhZCBUb0QgcmVnaXN0ZXJzIGFmdGVyIGlzc3VpbmcgYSBjb21tYW5kCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAbmV4dF9oejogaWYgdHJ1ZSwgcmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIejsgb3RoZXJ3aXNlIHJlYWQgY3VycmVudAomIzQzOyAqIEB0czogdGltZXNwZWMgdG8gc3RvcmUgdGhlIHJlc3VsdAomIzQzOyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nCiYjNDM7ICoKJiM0MzsgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cywKJiM0MzsJCQkgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKQomIzQzO3sKJiM0MzsJdTMyIG5zZWM7CiYjNDM7CXU2NCBzZWM7CiYjNDM7CXU4IGNtZDsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlpZiAobmV4dF9oeikKJiM0MzsJCWNtZCA9IFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaOwomIzQzOwllbHNlCiYjNDM7CQljbWQgPSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UOwomIzQzOwomIzQzOwkvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVG9EIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqLwomIzQzOwlyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXB0cF9yZWFkX3N5c3RlbV9wcmV0cyhzdHMpOwomIzQzOwlyYyA9IHpsMzA3M3hfY2hhbl90b2RfY3RybCh6bGRldiwgY2gsIGNtZCk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwlwdHBfcmVhZF9zeXN0ZW1fcG9zdHRzKHN0cyk7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF9yZWFkX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksICZhbXA7c2VjKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwkvKiBIVyBuYW5vc2Vjb25kcyBhcmUgYWx3YXlzIGluIFswLCBOU0VDX1BFUl9TRUMpIHJhbmdlICovCiYjNDM7CXJjID0gemwzMDczeF9yZWFkX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgJmFtcDtuc2VjKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwl0cy0mZ3Q7dHZfc2VjID0gc2VjOwomIzQzOwl0cy0mZ3Q7dHZfbnNlYyA9IG5zZWM7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlIC0gd3JpdGUgVG9EIHJlZ2lzdGVycyBhbmQgdHJpZ2dlciAxIEh6IHVwZGF0ZQomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQHRzOiB0aW1lIHRvIHNldAomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS4KJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cykKJiM0Mzt7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi8KJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfU0VDKGNoKSwgdHMudHZfc2VjKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCB0cy50dl9uc2VjKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9jdHJsKHpsZGV2LCBjaCwKJiM0MzsJCQkJICAgICBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWik7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0IC0gYXRvbWljIFRvRCByZWFkLW1vZGlmeS13cml0ZSB3aXRoIHJvbGxvdmVyIGd1YXJkCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCB0byBhcHBseQomIzQzOyAqCiYjNDM7ICogUmVhZHMgdGhlIG5leHQtSHogVG9EIGFuZCBjdXJyZW50IFRvRCwgdGhlbiBjaGVja3Mgd2hldGhlciBlbm91Z2ggdGltZQomIzQzOyAqIHJlbWFpbnMgYmVmb3JlIHRoZSBuZXh0IDEgSHogcm9sbG92ZXIgdG8gc2FmZWx5IGNvbXBsZXRlIHRoZSB3cml0ZS4KJiM0MzsgKiBSZS1yZWFkcyBpZiB0aGUgMSBIeiB0aWNrIGNyb3NzZWQgYmV0d2VlbiB0aGUgdHdvIHJlYWRzIG9yIGlmIGxlc3MKJiM0MzsgKiB0aGFuIDIwIG1zIHJlbWFpbnMgYmVmb3JlIHRoZSBuZXh0IHJvbGxvdmVyLiBBcHBsaWVzIEBkZWx0YSBhbmQgd3JpdGVzCiYjNDM7ICogdGhlIHJlc3VsdCBiYWNrLgomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS4KJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKQomIzQzO3sKJiM0MzsjZGVmaW5lIFpMX1RPRF9NQVhfUkVUUklFUwkyMAomIzQzOwlzdGF0aWMgY29uc3QgbG9uZyB0aHJlc2hvbGRfbnMgPSAyMCAqIE5TRUNfUEVSX01TRUM7CiYjNDM7CXN0cnVjdCB0aW1lc3BlYzY0IHRzX25leHQsIHRzX2N1ciwgZGlmZjsKJiM0MzsJaW50IHJjLCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgWkxfVE9EX01BWF9SRVRSSUVTOyBpJiM0MzsmIzQzOykgewomIzQzOwkJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCB0cnVlLCAmYW1wO3RzX25leHQsIE5VTEwpOwomIzQzOwkJaWYgKHJjKQomIzQzOwkJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJCXJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgZmFsc2UsICZhbXA7dHNfY3VyLCBOVUxMKTsKJiM0MzsJCWlmIChyYykKJiM0MzsJCQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CQkvKiBFbnN1cmUgdGhlIDEgSHogdGljayBkaWQgbm90IGNyb3NzIGJldHdlZW4gdGhlIHR3byByZWFkcwomIzQzOwkJICogYW5kIHRoYXQgZW5vdWdoIG1hcmdpbiByZW1haW5zIHRvIGNvbXBsZXRlIHRoZSB3cml0ZS4KJiM0MzsJCSAqLwomIzQzOwkJZGlmZiA9IHRpbWVzcGVjNjRfc3ViKHRzX25leHQsIHRzX2N1cik7CiYjNDM7CQlpZiAoZGlmZi50dl9zZWMgJmd0OyAwIHx8CiYjNDM7CQkgICAgKCFkaWZmLnR2X3NlYyAmYW1wOyZhbXA7IGRpZmYudHZfbnNlYyAmZ3Q7PSB0aHJlc2hvbGRfbnMpKQomIzQzOwkJCWJyZWFrOwomIzQzOwl9CiYjNDM7CWlmIChpID09IFpMX1RPRF9NQVhfUkVUUklFUykgewomIzQzOwkJZGV2X3dhcm4oemxkZXYtJmd0O2RldiwKJiM0MzsJCQkgJiMzNDtEUExMJXUgVG9EIGFkanVzdCBmYWlsZWQgdG8gZ2V0IHN0YWJsZSBtYXJnaW5cbiYjMzQ7LAomIzQzOwkJCSBjaCk7CiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEFwcGx5IGRlbHRhIHRvIHRoZSBuZXh0LUh6IFRvRCAqLwomIzQzOwl0c19uZXh0ID0gdGltZXNwZWM2NF9hZGQodHNfbmV4dCwgZGVsdGEpOwomIzQzOwlpZiAoIXRpbWVzcGVjNjRfdmFsaWRfc2V0dG9kKCZhbXA7dHNfbmV4dCkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkZXYsIGNoLCB0c19uZXh0KTsKJiM0MzsjdW5kZWYgWkxfVE9EX01BWF9SRVRSSUVTCiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0IC0gd3JpdGUgZGVsdGEgZnJlcXVlbmN5IG9mZnNldCB0byBoYXJkd2FyZQomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQG9mZnNldDogZnJlcXVlbmN5IG9mZnNldCBpbiAyXi00OCBzdGVwcwomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3QgaG9sZCB0aGUgcGVyLURQTEwgbG9jay4KJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBvZmZzZXQpCiYjNDM7ewomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX0RGX09GRlNFVChjaCksIG9mZnNldCk7CiYjNDM7CWlmICghcmMpCiYjNDM7CQl6bGRldi0mZ3Q7Y2hhbltjaF0uZGZfb2Zmc2V0ID0gb2Zmc2V0OwomIzQzOwomIzQzOwlyZXR1cm4gcmM7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl90aWVfd3JpdGUgLSBhZGp1c3QgRFBMTCBwaGFzZSB1c2luZyBUSUUgd3JpdGUKJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleAomIzQzOyAqIEBkZWx0YV9uczogcGhhc2UgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcyAobXVzdCBiZSBpbiAoLTFzLCAxcykpCiYjNDM7ICoKJiM0MzsgKiBDb252ZXJ0cyBuYW5vc2Vjb25kcyB0byBUSUUgdW5pdHMgKDAuMDEgcHMpIGFuZCB3cml0ZXMgVElFIGRhdGEKJiM0MzsgKiB0byB0aGUgc3BlY2lmaWVkIGNoYW5uZWwuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKQomIzQzO3sKJiM0MzsJczY0IHRpZV9kYXRhOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3psZGV2LSZndDt0aWVfbG9jayk7CiYjNDM7CiYjNDM7CS8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUSUUgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCiYjNDM7CXJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLAomIzQzOwkJCQkgIFpMX0RQTExfVElFX0NUUkxfT1AsCiYjNDM7CQkJCSAgWkxfUE9MTF9USUVfV1JfVElNRU9VVF9VUyk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJLyogQ29udmVydCBucyB0byBUSUUgdW5pdHMgKDAuMDEgcHMgPSAxMF4tMTQgcykgKi8KJiM0MzsJdGllX2RhdGEgPSBkZWx0YV9ucyAqIDEwMDAwMExMOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfREFUQShjaCksIHRpZV9kYXRhKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0ssIEJJVChjaCkpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTCwKJiM0MzsJCQkJWkxfRFBMTF9USUVfQ1RSTF9PUF9XUik7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwIC0gZXhlY3V0ZSBvbmUgb3V0cHV0IHBoYXNlIHN0ZXAgb3BlcmF0aW9uCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAb3V0X21hc2s6IGJpdG1hc2sgb2Ygb3V0cHV0cyB0byBzdGVwCiYjNDM7ICogQHN0ZXBfY3ljbGVzOiBwaGFzZSBzdGVwIGluIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcwomIzQzOyAqIEB0b2Rfc3RlcDogYWxzbyBzdGVwIHRoZSBUb0QgY291bnRlcgomIzQzOyAqCiYjNDM7ICogQWxsIG1hc2tlZCBvdXRwdXRzIG11c3QgdXNlIHN5bnRoZXNpemVycyBvZiB0aGUgc2FtZSBmcmVxdWVuY3kgc2luY2UKJiM0MzsgKiB0aGUgc3RlcCB2YWx1ZSBpcyBpbiBzeW50aGVzaXplciBjbG9jayBjeWNsZXMuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLAomIzQzOwkJCSAgICBib29sIHRvZF9zdGVwKQomIzQzO3sKJiM0MzsJdTggY3RybDsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRldi0mZ3Q7cGhhc2Vfc3RlcF9sb2NrKTsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgYW55IHByZXZpb3VzIHBoYXNlIHN0ZXAgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCiYjNDM7CXJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLAomIzQzOwkJCQkgIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AsCiYjNDM7CQkJCSAgWkxfUE9MTF9QSEFTRV9TVEVQX1RJTUVPVVRfVVMpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBLAomIzQzOwkJCSAgICAgICBzdGVwX2N5Y2xlcyk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3dyaXRlX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX01BU0ssIG91dF9tYXNrKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9OVU1CRVIsIDEpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CWN0cmwgPSBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfRFBMTCwgY2gpIHwKJiM0MzsJICAgICAgIEZJRUxEX1BSRVAoWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCwKJiM0MzsJCQkgIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfV1JJVEUpOwomIzQzOwlpZiAodG9kX3N0ZXApCiYjNDM7CQljdHJsIHw9IFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVA7CiYjNDM7CiYjNDM7CXJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTCwgY3RybCk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0IC0gY29tbWl0IERQTEwgY2hhbm5lbCBzdGF0ZSBjaGFuZ2VzIHRvIGhhcmR3YXJlCiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgKaW5kZXggZGM5YzZkOTViZGVlNy4uOTljM2I3MDg4ZjY3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaApAQCAtNSwxMCAmIzQzOzUsMTIgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3RkZGVmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3RpbWU2NC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7cmVncy5oJiMzNDsKIAomIzQzO3N0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcDsKIHN0cnVjdCB6bDMwNzN4X2RldjsKIAogLyoqCkBAIC00Miw2ICYjNDM7NDQsMjEgQEAgaW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgsCiBpbnQgemwzMDczeF9jaGFuX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7CiBpbnQgemwzMDczeF9jaGFuX25jb19tb2RlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7CiAKJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKTsKJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLAomIzQzOwkJCSAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsCiYjNDM7CQkJICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cyk7CiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICAgc3RydWN0IHRpbWVzcGVjNjQgdHMpOwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpOwomIzQzO2ludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsIGJvb2wgdG9kX3N0ZXApOwomIzQzOwomIzQzO2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldCk7CiYjNDM7CiYjNDM7aW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucyk7CiYjNDM7CiAvKioKICAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfZ2V0IC0gZ2V0IGNhY2hlZCBkZl9vZmZzZXQgdnMgdHJhY2tlZCByZWZlcmVuY2UKICAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGUKQEAgLTIwMCw2ICYjNDM7MjE3LDIxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6bDMwNzN4X2NoYW5fbW9kZV9pc19yZWZsb2NrKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pCiAJcmV0dXJuIHpsMzA3M3hfY2hhbl9tb2RlX2dldChjaGFuKSA9PSBaTF9EUExMX01PREVfUkVGU0VMX01PREVfUkVGTE9DSzsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZSAtIGNoZWNrIGlmIGNoYW5uZWwgbW9kZSBzdXBwb3J0cyBUSUUgd3JpdGUKJiM0MzsgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlCiYjNDM7ICoKJiM0MzsgKiBUSUUgd3JpdGUgaXMgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMgcmVnYXJkbGVzcyBvZiBsb2NrIHN0YXRlLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIFRJRSB3cml0ZSBpcyBzdXBwb3J0ZWQsIGZhbHNlIG90aGVyd2lzZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbAomIzQzO3psMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKQomIzQzO3sKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl9tb2RlX2lzX2F1dG8oY2hhbikgfHwKJiM0MzsJCXpsMzA3M3hfY2hhbl9tb2RlX2lzX3JlZmxvY2soY2hhbik7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB6bDMwNzN4X2NoYW5faXNfaG9fcmVhZHkgLSBjaGVjayBpZiBob2xkb3ZlciBpcyByZWFkeQogICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jCmluZGV4IDViMmQ3N2YyYzIyODguLjIzMGRmMDhlMjdjZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMKQEAgLTMyMiw3ICYjNDM7MzIyLDcgQEAgaW50IHpsMzA3M3hfd3JpdGVfdTQ4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsIHU2NCB2YWwpCiBpbnQgemwzMDczeF9wb2xsX3plcm9fdTgoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IHJlZywKIAkJCSB1OCBtYXNrLCB1bnNpZ25lZCBpbnQgdGltZW91dF91cykKIHsKLSNkZWZpbmUgWkxfUE9MTF9TTEVFUF9VUyAxMAomIzQzOwl1bnNpZ25lZCBpbnQgc2xlZXBfdXMgPSB0aW1lb3V0X3VzIC8gNTA7CiAJdW5zaWduZWQgaW50IHZhbDsKIAogCS8qIENoZWNrIHRoZSByZWdpc3RlciBpcyA4Yml0ICovCkBAIC0zMzYsNyAmIzQzOzMzNiw3IEBAIGludCB6bDMwNzN4X3BvbGxfemVyb191OChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLAogCXJlZyA9IFpMX1JFR19BRERSKHJlZykgJiM0MzsgWkxfUkFOR0VfT0ZGU0VUOwogCiAJcmV0dXJuIHJlZ21hcF9yZWFkX3BvbGxfdGltZW91dCh6bGRldi0mZ3Q7cmVnbWFwLCByZWcsIHZhbCwgISh2YWwgJmFtcDsgbWFzayksCi0JCQkJCVpMX1BPTExfU0xFRVBfVVMsIHRpbWVvdXRfdXMpOwomIzQzOwkJCQkJc2xlZXBfdXMsIHRpbWVvdXRfdXMpOwogfQogCiBpbnQgemwzMDczeF9tYl9vcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgb3BfcmVnLCB1OCBvcF92YWwsCkBAIC01MTEsNiAmIzQzOzUxMSwxMSBAQCB6bDMwNzN4X2Rldl9zdGF0ZV9mZXRjaChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KQogCWludCByYzsKIAl1OCBpOwogCiYjNDM7CXJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTSywKJiM0MzsJCQkgICAgICAmYW1wO3psZGV2LSZndDtvdXRfc3RlcF90aW1lX21hc2spOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiAJZm9yIChpID0gMDsgaSAmbHQ7IFpMMzA3M1hfTlVNX1JFRlM7IGkmIzQzOyYjNDM7KSB7CiAJCXJjID0gemwzMDczeF9yZWZfc3RhdGVfZmV0Y2goemxkZXYsIGkpOwogCQlpZiAocmMpIHsKQEAgLTEwMzQsNiAmIzQzOzEwMzksMTQgQEAgaW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpCiAJICogYW5kL29yIHBvbGxzIGFyZSByZXF1aXJlZCB0byBiZSBkb25lIGF0b21pY2FsbHkuCiAJICovCiAJcmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtJmd0O2RldiwgJmFtcDt6bGRldi0mZ3Q7bXVsdGlvcF9sb2NrKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtJmd0O2RldiwgcmMsCiYjNDM7CQkJCSAgICAgJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxuJiMzNDspOwomIzQzOwlyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi0mZ3Q7ZGV2LCAmYW1wO3psZGV2LSZndDtwaGFzZV9zdGVwX2xvY2spOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi0mZ3Q7ZGV2LCByYywKJiM0MzsJCQkJICAgICAmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XG4mIzM0Oyk7CiYjNDM7CXJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LSZndDtkZXYsICZhbXA7emxkZXYtJmd0O3RpZV9sb2NrKTsKIAlpZiAocmMpCiAJCXJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LSZndDtkZXYsIHJjLAogCQkJCSAgICAgJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxuJiMzNDspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oCmluZGV4IDc4ZGMyMDhmM2VlYTIuLjY3YzEwZTI1OTUxMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmgKQEAgLTI2LDYgJiM0MzsyNiwxMCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsOwogI2RlZmluZSBaTF9QT0xMX0hXUkVHX1RJTUVPVVRfVVMJKDUwICogVVNFQ19QRVJfTVNFQykKICNkZWZpbmUgWkxfUE9MTF9NQl9USU1FT1VUX1VTCQkoMzAgKiBVU0VDX1BFUl9NU0VDKQogI2RlZmluZSBaTF9QT0xMX1BIQVNFX0VSUl9USU1FT1VUX1VTCSg1MCAqIFVTRUNfUEVSX01TRUMpCiYjNDM7I2RlZmluZSBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VUwkoMzAwMCAqIFVTRUNfUEVSX01TRUMpCiYjNDM7I2RlZmluZSBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTCSgxMDAwICogVVNFQ19QRVJfTVNFQykKJiM0MzsjZGVmaW5lIFpMX1BPTExfVE9EX1JEX1RJTUVPVVRfVVMJKDMwICogVVNFQ19QRVJfTVNFQykKJiM0MzsjZGVmaW5lIFpMX1BPTExfVE9EX1dSX1RJTUVPVVRfVVMJKDEwMDAgKiBVU0VDX1BFUl9NU0VDKQogCiBlbnVtIHpsMzA3M3hfZmxhZ3MgewogCVpMMzA3M1hfRkxBR19SRUZfUEhBU0VfQ09NUF8zMl9CSVQsCkBAIC01NSw2ICYjNDM7NTksOCBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8gewogICogQHJlZ21hcDogcmVnbWFwIHRvIGFjY2VzcyBkZXZpY2UgcmVnaXN0ZXJzCiAgKiBAaW5mbzogZGV0ZWN0ZWQgY2hpcCBpbmZvCiAgKiBAbXVsdGlvcF9sb2NrOiB0byBzZXJpYWxpemUgbXVsdGlwbGUgcmVnaXN0ZXIgb3BlcmF0aW9ucwomIzQzOyAqIEB0aWVfbG9jazogdG8gc2VyaWFsaXplIFRJRSB3cml0ZSBvcGVyYXRpb25zCiYjNDM7ICogQHBoYXNlX3N0ZXBfbG9jazogdG8gc2VyaWFsaXplIG91dHB1dCBwaGFzZSBzdGVwIG9wZXJhdGlvbnMKICAqIEByZWY6IGFycmF5IG9mIGlucHV0IHJlZmVyZW5jZXMmIzM5OyBpbnZhcmlhbnRzCiAgKiBAb3V0OiBhcnJheSBvZiBvdXRzJiMzOTsgaW52YXJpYW50cwogICogQHN5bnRoOiBhcnJheSBvZiBzeW50aHMmIzM5OyBpbnZhcmlhbnRzCkBAIC02Myw2ICYjNDM7NjksNyBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8gewogICogQGt3b3JrZXI6IHRocmVhZCBmb3IgcGVyaW9kaWMgd29yawogICogQHdvcms6IHBlcmlvZGljIHdvcmsKICAqIEBjbG9ja19pZDogY2xvY2sgaWQgb2YgdGhlIGRldmljZQomIzQzOyAqIEBvdXRfc3RlcF90aW1lX21hc2s6IG91dHB1dCBzdGVwLXRpbWUgbWFzayAoZGV2aWNlLWdsb2JhbCkKICAqIEBwaGFzZV9hdmdfZmFjdG9yOiBwaGFzZSBvZmZzZXQgbWVhc3VyZW1lbnQgYXZlcmFnaW5nIGZhY3RvcgogICogQGZyZXFfbW9uaXRvcjogaXMgZnJlcXVlbmN5IG1vbml0b3IgZW5hYmxlZAogICovCkBAIC03MSw2ICYjNDM7NzgsOCBAQCBzdHJ1Y3QgemwzMDczeF9kZXYgewogCXN0cnVjdCByZWdtYXAJCQkqcmVnbWFwOwogCWNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mbwkqaW5mbzsKIAlzdHJ1Y3QgbXV0ZXgJCQltdWx0aW9wX2xvY2s7CiYjNDM7CXN0cnVjdCBtdXRleAkJCXRpZV9sb2NrOwomIzQzOwlzdHJ1Y3QgbXV0ZXgJCQlwaGFzZV9zdGVwX2xvY2s7CiAKIAkvKiBJbnZhcmlhbnRzICovCiAJc3RydWN0IHpsMzA3M3hfcmVmCXJlZltaTDMwNzNYX05VTV9SRUZTXTsKQEAgLTg3LDYgJiM0Mzs5Niw3IEBAIHN0cnVjdCB6bDMwNzN4X2RldiB7CiAKIAkvKiBQZXItY2hpcCBwYXJhbWV0ZXJzICovCiAJdTY0CQkJY2xvY2tfaWQ7CiYjNDM7CXUxNgkJCW91dF9zdGVwX3RpbWVfbWFzazsKIAl1OAkJCXBoYXNlX2F2Z19mYWN0b3I7CiAJYm9vbAkJCWZyZXFfbW9uaXRvcjsKIH07CkBAIC0zMDgsNiAmIzQzOzMxOCwxOSBAQCB6bDMwNzN4X2Rldl9vdXRfaXNfZW5hYmxlZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCkKIAlyZXR1cm4gemwzMDczeF9zeW50aF9pc19lbmFibGVkKHN5bnRoKSAmYW1wOyZhbXA7IHpsMzA3M3hfb3V0X2lzX2VuYWJsZWQob3V0KTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZGV2X291dF9pc19zdGVwcGVkIC0gY2hlY2sgaWYgb3V0cHV0IGlzIGluIHN0ZXAtdGltZSBtYXNrCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGluZGV4OiBvdXRwdXQgaW5kZXgKJiM0MzsgKgomIzQzOyAqIFJldHVybjogdHJ1ZSBpZiBvdXRwdXQgaXMgYWZmZWN0ZWQgYnkgc3RlcC10aW1lIG9wZXJhdGlvbnMKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wKJiM0Mzt6bDMwNzN4X2Rldl9vdXRfaXNfc3RlcHBlZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCkKJiM0Mzt7CiYjNDM7CXJldHVybiAhISh6bGRldi0mZ3Q7b3V0X3N0ZXBfdGltZV9tYXNrICZhbXA7IEJJVChpbmRleCkpOwomIzQzO30KJiM0MzsKIC8qKgogICogemwzMDczeF9kZXZfb3V0X2RwbGxfZ2V0IC0gZ2V0IERQTEwgSUQgdGhlIG91dHB1dCBpcyBkcml2ZW4gYnkKICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jCmluZGV4IDgzYmQzMDI3ZGJhYTEuLmYyZTEzNzQ3NWI0MGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMKQEAgLTIsNiAmIzQzOzIsNyBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvYml0cy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NsZWFudXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9idWcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jb250YWluZXJfb2YuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZXZfcHJpbnRrLmgmZ3Q7CkBAIC0xMyw2ICYjNDM7MTQsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L25ldGxpbmsuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wcm9wZXJ0eS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wdHBfY2xvY2tfa2VybmVsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NwcmludGYuaCZndDsKIApAQCAtMjMxMyw0NSAmIzQzOzIzMTUsMzg0IEBAIHpsMzA3M3hfZHBsbF9pbml0X2ZpbmVfcGhhc2VfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpCiAJcmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19TWU5USF9QSEFTRV9TSElGVF9DVFJMLCAweDAxKTsKIH0KIAomIzQzOy8qIE1heGltdW0gZnJlcXVlbmN5IGFkanVzdG1lbnQ6ICYjNDM7LTElIG9mIG5vbWluYWwgaW4gcHBiICovCiYjNDM7I2RlZmluZSBaTDMwNzNYX0RQTExfUFRQX01BWF9BREoJMTAwMDAwMDAKJiM0MzsKIC8qKgotICogemwzMDczeF9kcGxsX2FsbG9jIC0gYWxsb2NhdGUgRFBMTCBkZXZpY2UKLSAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQotICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0IC0gcmVhZCBjdXJyZW50IHRpbWUgZnJvbSBUb0QgY291bnRlcnMKJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm8KJiM0MzsgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIGN1cnJlbnQgdGltZQomIzQzOyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nCiAgKgotICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywKJiM0MzsJCQkJICAgICAgIHN0cnVjdCB0aW1lc3BlYzY0ICp0cywKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKQomIzQzO3sKJiM0MzsJc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsCiYjNDM7CQkJCQkJICAgcHRwX2luZm8pOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZHBsbC0mZ3Q7ZGV2LCB6bGRwbGwtJmd0O2lkLCBmYWxzZSwgdHMsIHN0cyk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0IC0gc2V0IFRvRCBjb3VudGVycyB0byBnaXZlbiB0aW1lCiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvCiYjNDM7ICogQHRzOiB0aW1lc3BlYyB3aXRoIHRpbWUgdG8gc2V0CiAgKgotICogUmV0dXJuOiBwb2ludGVyIHRvIERQTEwgZGV2aWNlIG9uIHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgb24gZXJyb3IKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKICAqLwotc3RydWN0IHpsMzA3M3hfZHBsbCAqCi16bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sCiYjNDM7CQkJCSAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cykKIHsKLQlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLAomIzQzOwkJCQkJCSAgIHB0cF9pbmZvKTsKIAotCXpsZHBsbCA9IGt6YWxsb2Nfb2JqKCp6bGRwbGwpOwotCWlmICghemxkcGxsKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7emxkcGxsLSZndDtsb2NrKTsKIAotCXpsZHBsbC0mZ3Q7ZGV2ID0gemxkZXY7Ci0JemxkcGxsLSZndDtpZCA9IGNoOwotCW11dGV4X2luaXQoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwotCUlOSVRfTElTVF9IRUFEKCZhbXA7emxkcGxsLSZndDtwaW5zKTsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkcGxsLSZndDtkZXYsIHpsZHBsbC0mZ3Q7aWQsICp0cyk7CiYjNDM7fQogCi0JcmV0dXJuIHpsZHBsbDsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCAtIGFkanVzdCBzdWItc2Vjb25kIHRpbWUgdmlhIHBoYXNlIHN0ZXAKJiM0MzsgKiBAemxkcGxsOiBEUExMIGNoYW5uZWwKJiM0MzsgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcyAobXVzdCBiZSB3aXRoaW4gKC1OU0VDX1BFUl9TRUMsCiYjNDM7ICogICAgICAgICBOU0VDX1BFUl9TRUMpKQomIzQzOyAqCiYjNDM7ICogVXNlcyB0aGUgb3V0cHV0IHBoYXNlIHN0ZXAgbWVjaGFuaXNtIHdpdGggdG9kX3N0ZXA9MSB0byBhZGp1c3QgYm90aAomIzQzOyAqIHRoZSBvdXRwdXQgY2xvY2sgcGhhc2UgYW5kIHRoZSBUb0QgY291bnRlciBzaW11bHRhbmVvdXNseS4gVGhpcyBrZWVwcwomIzQzOyAqIG91dHB1dHMgYW5kIFRvRCBjb2hlcmVudC4gT25seSB2YWxpZCBmb3IgTkNPLgomIzQzOyAqCiYjNDM7ICogT3V0cHV0cyBhcmUgZ3JvdXBlZCBieSBzeW50aGVzaXplciBzaW5jZSB0aGUgcGhhc2Ugc3RlcCB2YWx1ZSBpcyBpbgomIzQzOyAqIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcy4gVGhlIGZpcnN0IHN5bnRoIGdyb3VwIHdpdGggZW5hYmxlZCBvdXRwdXRzCiYjNDM7ICogdXNlcyB0b2Rfc3RlcCB0byBhZGp1c3QgYm90aCBvdXRwdXRzIGFuZCB0aGUgVG9EIGNvdW50ZXIuIFJlbWFpbmluZwomIzQzOyAqIGdyb3VwcyBzdGVwIG91dHB1dHMgb25seS4gSWYgbm8gc3ludGggaGFzIGVuYWJsZWQgb3V0cHV0cywgdGhlIFRvRAomIzQzOyAqIGNvdW50ZXIgaXMgc3RlcHBlZCBhbG9uZSB1c2luZyBhbiBlbXB0eSBvdXRwdXQgbWFzayAodGhlIEZXIHVzZXMKJiM0MzsgKiB0aGUgZmlyc3QgZW5hYmxlZCBzeW50aCYjMzk7cyBwZXJpb2QgZm9yIHRoZSBjb252ZXJzaW9uKS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjoKJiM0MzsgKiAqICUwCQkJLSBzdWNjZXNzIChvciBwYXJ0aWFsIHN1Y2Nlc3MgaWYgYSBsYXRlciBzeW50aCBncm91cAomIzQzOyAqCQkJICBmYWlsZWQgYWZ0ZXIgdGhlIGZpcnN0IHdhcyBhbHJlYWR5IHN0ZXBwZWQpCiYjNDM7ICogKiAlLUVPUE5PVFNVUFAJLSBubyBzeW50aHMgYXZhaWxhYmxlCiYjNDM7ICogKiBuZWdhdGl2ZQkJLSBlcnJvcgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLAomIzQzOwkJCQkJICAgICAgIHM2NCBkZWx0YSkKJiM0Mzt7CiYjNDM7CXUxNiBzeW50aF9tYXNrW1pMMzA3M1hfTlVNX1NZTlRIU10gPSB7fTsKJiM0MzsJc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC0mZ3Q7ZGV2OwomIzQzOwljb25zdCBzdHJ1Y3QgemwzMDczeF9zeW50aCAqc3ludGg7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW47CiYjNDM7CXUzMiBmaXJzdF9zeW50aF9mcmVxID0gMDsKJiM0MzsJYm9vbCB0b2Rfc3RlcHBlZCA9IGZhbHNlOwomIzQzOwlzMzIgc3RlcF9jeWNsZXM7CiYjNDM7CXUzMiBzeW50aF9mcmVxOwomIzQzOwlpbnQgcmM7CiYjNDM7CXU4IGk7CiYjNDM7CiYjNDM7CS8qIEJ1aWxkIHBlci1zeW50aCBvdXRwdXQgbWFza3MgZnJvbSByZWdpc3RlcmVkIG91dHB1dCBwaW5zICovCiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkocGluLCAmYW1wO3psZHBsbC0mZ3Q7cGlucywgbGlzdCkgewomIzQzOwkJdTggb3V0X2lkLCBzeW50aF9pZDsKJiM0MzsKJiM0MzsJCWlmICh6bDMwNzN4X2RwbGxfaXNfaW5wdXRfcGluKHBpbikpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlvdXRfaWQgPSB6bDMwNzN4X291dHB1dF9waW5fb3V0X2dldChwaW4tJmd0O2lkKTsKJiM0MzsKJiM0MzsJCWlmICghemwzMDczeF9kZXZfb3V0X2lzX3N0ZXBwZWQoemxkZXYsIG91dF9pZCkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlzeW50aF9pZCA9IHpsMzA3M3hfZGV2X291dF9zeW50aF9nZXQoemxkZXYsIG91dF9pZCk7CiYjNDM7CQlpZiAoc3ludGhfaWQgJmd0Oz0gWkwzMDczWF9OVU1fU1lOVEhTKSB7CiYjNDM7CQkJZGV2X3dhcm4oemxkZXYtJmd0O2RldiwgJiMzNDtVbmV4cGVjdGVkIHN5bnRoIGlkIGZvciBPVVQldVxuJiMzNDssCiYjNDM7CQkJCSBvdXRfaWQpOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwkJc3ludGhfbWFza1tzeW50aF9pZF0gfD0gQklUKG91dF9pZCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogUHJvY2VzcyBlYWNoIHN5bnRoIGdyb3VwICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBaTDMwNzNYX05VTV9TWU5USFM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzeW50aCA9IHpsMzA3M3hfc3ludGhfc3RhdGVfZ2V0KHpsZGV2LCBpKTsKJiM0MzsJCWlmICghemwzMDczeF9zeW50aF9pc19lbmFibGVkKHN5bnRoKSB8fAomIzQzOwkJICAgIHpsMzA3M3hfc3ludGhfZHBsbF9nZXQoc3ludGgpICE9IHpsZHBsbC0mZ3Q7aWQpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlzeW50aF9mcmVxID0gemwzMDczeF9zeW50aF9mcmVxX2dldChzeW50aCk7CiYjNDM7CiYjNDM7CQkvKiBSZW1lbWJlciBmaXJzdCBlbmFibGVkIHN5bnRoIGZyZXEgZm9yIFRvRC1vbmx5IGZhbGxiYWNrICovCiYjNDM7CQlpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpCiYjNDM7CQkJZmlyc3Rfc3ludGhfZnJlcSA9IHN5bnRoX2ZyZXE7CiYjNDM7CiYjNDM7CQlpZiAoIXN5bnRoX21hc2tbaV0pCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkvKiBTYWZlIGZvciBzMzI6IG1heCBzeW50aCBmcmVxIGlzIDc1MCBNSHogKi8KJiM0MzsJCXN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIHN5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7CiYjNDM7CiYjNDM7CQlyYyA9IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtJmd0O2lkLAomIzQzOwkJCQkJICAgICBzeW50aF9tYXNrW2ldLCBzdGVwX2N5Y2xlcywKJiM0MzsJCQkJCSAgICAgIXRvZF9zdGVwcGVkKTsKJiM0MzsJCWlmIChyYykgewomIzQzOwkJCWlmICh0b2Rfc3RlcHBlZCkgewomIzQzOwkJCQlkZXZfd2Fybih6bGRldi0mZ3Q7ZGV2LAomIzQzOwkJCQkJICYjMzQ7UGFydGlhbCBwaGFzZSBzdGVwIGZhaWx1cmVcbiYjMzQ7KTsKJiM0MzsJCQkJcmV0dXJuIDA7CiYjNDM7CQkJfQomIzQzOwkJCXJldHVybiByYzsKJiM0MzsJCX0KJiM0MzsJCXRvZF9zdGVwcGVkID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CS8qIE5vIGVuYWJsZWQgb3V0cHV0cyBmb3VuZDsgc3RlcCBUb0QgY291bnRlciBvbmx5IHVzaW5nIHRoZQomIzQzOwkgKiBmaXJzdCBlbmFibGVkIHN5bnRoJiMzOTtzIHBlcmlvZCAoZW1wdHkgb3V0cHV0IG1hc2spLgomIzQzOwkgKi8KJiM0MzsJaWYgKCF0b2Rfc3RlcHBlZCkgewomIzQzOwkJc3RlcF9jeWNsZXMgPSBkaXZfczY0KGRlbHRhICogZmlyc3Rfc3ludGhfZnJlcSwgTlNFQ19QRVJfU0VDKTsKJiM0MzsJCXJldHVybiB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCh6bGRldiwgemxkcGxsLSZndDtpZCwgMCwKJiM0MzsJCQkJCSAgICAgICBzdGVwX2N5Y2xlcywgdHJ1ZSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIC8qKgotICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlCi0gKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmUKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUgLSBhZGp1c3QgUFRQIGNsb2NrIHRpbWUKJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm8KJiM0MzsgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcwogICoKLSAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuCiYjNDM7ICogRm9yIE5DTywgbGFyZ2UgZGVsdGFzICgmZ3Q7PSAxIHNlY29uZCkgYXJlIHNwbGl0IGludG8gYSBUb0QKJiM0MzsgKiByZWFkLW1vZGlmeS13cml0ZSBmb3IgdGhlIHNlY29uZHMgcGFydCBhbmQgYW4gb3V0cHV0IHBoYXNlIHN0ZXAgZm9yCiYjNDM7ICogdGhlIHN1Yi1zZWNvbmQgcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgcGhhc2Ugc3RlcCBkaXJlY3RseSwKJiM0MzsgKiBmYWxsaW5nIGJhY2sgdG8gVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIGlmIHBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlCiYjNDM7ICogZmFpbHMuIEluIEFVVE8vUkVGTE9DSyBtb2RlcywgbGFyZ2UgZGVsdGFzIGFyZSBzcGxpdCBpbnRvIFRvRAomIzQzOyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciBzZWNvbmRzIGFuZCBUSUUgd3JpdGUgZm9yIHRoZSBzdWItc2Vjb25kCiYjNDM7ICogcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgVElFIHdyaXRlIGRpcmVjdGx5LgomIzQzOyAqCiYjNDM7ICogSWYgdGhlIHNlY29uZHMgcGFydCB3YXMgYWxyZWFkeSBjb21taXR0ZWQgd2hlbiB0aGUgc3ViLXNlY29uZAomIzQzOyAqIG1lY2hhbmlzbSBmYWlscywgcmV0dXJucyAwIHRvIHByZXZlbnQgdGhlIFBUUCBzZXJ2byBmcm9tIHJldHJ5aW5nCiYjNDM7ICogdGhlIGZ1bGwgZGVsdGEgYW5kIGFwcGx5aW5nIHNlY29uZHMgYWdhaW4uCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcyAob3IgcGFydGlhbCBzdWNjZXNzKSwgJmx0OzAgb24gZXJyb3IKICAqLwotdm9pZAotemwzMDczeF9kcGxsX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczY0IGRlbHRhKQogewotCVdBUk4oemxkcGxsLSZndDtkcGxsX2RldiwgJiMzNDtEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXG4mIzM0Oyk7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLAomIzQzOwkJCQkJCSAgIHB0cF9pbmZvKTsKJiM0MzsJc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC0mZ3Q7ZGV2OwomIzQzOwljb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuOwomIzQzOwlib29sIHNlY19hZGp1c3RlZCA9IGZhbHNlOwomIzQzOwlzdHJ1Y3QgdGltZXNwZWM2NCB0czsKJiM0MzsJaW50IHJjOwogCi0JbXV0ZXhfZGVzdHJveSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7Ci0Ja2ZyZWUoemxkcGxsKTsKJiM0MzsJaWYgKCFkZWx0YSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwomIzQzOwkvKiBNb2RlcyB3aXRob3V0IHBoYXNlIHN0ZXAgb3IgVElFIHVzZSBwbGFpbiBUb0QgYWRqdXN0ICovCiYjNDM7CWNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZGV2LCB6bGRwbGwtJmd0O2lkKTsKJiM0MzsJaWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikgJmFtcDsmYW1wOwomIzQzOwkgICAgIXpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjaGFuKSkKJiM0MzsJCXJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLSZndDtpZCwKJiM0MzsJCQkJCSAgICAgICBuc190b190aW1lc3BlYzY0KGRlbHRhKSk7CiYjNDM7CiYjNDM7CS8qIFNwbGl0IG9mZiBzZWNvbmRzIHZpYSBUb0QgcmVhZC1tb2RpZnktd3JpdGUgc28gdGhlIHN1Yi1zZWNvbmQKJiM0MzsJICogcmVtYWluZGVyIGNhbiBiZSBhcHBsaWVkIHRocm91Z2ggdGhlIG91dHB1dC1jb2hlcmVudCBtZWNoYW5pc20KJiM0MzsJICogKHBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlKS4KJiM0MzsJICovCiYjNDM7CWlmIChkZWx0YSAmZ3Q7PSBOU0VDX1BFUl9TRUMgfHwgZGVsdGEgJmx0Oz0gLU5TRUNfUEVSX1NFQykgewomIzQzOwkJczMyIHJlbWFpbmRlcjsKJiM0MzsKJiM0MzsJCXRzLnR2X3NlYyA9IGRpdl9zNjRfcmVtKGRlbHRhLCBOU0VDX1BFUl9TRUMsICZhbXA7cmVtYWluZGVyKTsKJiM0MzsJCXRzLnR2X25zZWMgPSAwOwomIzQzOwkJZGVsdGEgPSByZW1haW5kZXI7CiYjNDM7CiYjNDM7CQlyYyA9IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtJmd0O2lkLCB0cyk7CiYjNDM7CQlpZiAocmMpCiYjNDM7CQkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwkJLyogTm8gc3ViLXNlY29uZCByZW1haW5kZXIsIGRvbmUgKi8KJiM0MzsJCWlmICghZGVsdGEpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CQkvKiBXYWl0IGZvciB0aGUgVG9EIHdyaXRlIHRvIGJlIGFwcGxpZWQgYXQgdGhlIDEgSHogZWRnZQomIzQzOwkJICogYmVmb3JlIGlzc3VpbmcgcGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUsIHNvIHRoZSBwZW5kaW5nCiYjNDM7CQkgKiBXUl9ORVhUXzFIWiBkb2VzIG5vdCBvdmVyd3JpdGUgdGhlIHN1Yi1zZWNvbmQgYWRqdXN0bWVudC4KJiM0MzsJCSAqLwomIzQzOwkJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIHpsZHBsbC0mZ3Q7aWQpOwomIzQzOwkJaWYgKHJjKQomIzQzOwkJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJCXNlY19hZGp1c3RlZCA9IHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQXBwbHkgc3ViLXNlY29uZCBkZWx0YSB2aWEgcGhhc2Ugc3RlcCAoTkNPKSBvciBUSUUgd3JpdGUgKi8KJiM0MzsJaWYgKHpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSkgewomIzQzOwkJcmMgPSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCh6bGRwbGwsIGRlbHRhKTsKJiM0MzsJCWlmICghcmMpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyYyA9IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoemxkZXYsIHpsZHBsbC0mZ3Q7aWQsIGRlbHRhKTsKJiM0MzsJCWlmICghcmMpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogUGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUgZmFpbGVkLCBmYWxsIGJhY2sgdG8gVG9EIGFkanVzdCAqLwomIzQzOwlyYyA9IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtJmd0O2lkLAomIzQzOwkJCQkgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTsKJiM0MzsKJiM0MzsJLyogSW4gdGhlIHVubGlrZWx5IGV2ZW50IHRoYXQgYm90aCBwaGFzZSBzdGVwL1RJRSB3cml0ZSBhbmQgZmFsbGJhY2sKJiM0MzsJICogVG9EIGFkanVzdCBmYWlsIGFmdGVyIHNlY29uZHMgd2VyZSBhbHJlYWR5IGNvbW1pdHRlZCwgcmV0dXJuCiYjNDM7CSAqIHN1Y2Nlc3MgdG8gcHJldmVudCB0aGUgUFRQIHNlcnZvIGZyb20gcmV0cnlpbmcgdGhlIGZ1bGwgZGVsdGEgYW5kCiYjNDM7CSAqIGFwcGx5aW5nIHNlY29uZHMgYWdhaW4uIFRoZSBzdWItc2Vjb25kIHJlc2lkdWFsIHdpbGwgc2VsZi1jb3JyZWN0CiYjNDM7CSAqIGluIHRoZSBuZXh0IHNlcnZvIGN5Y2xlLgomIzQzOwkgKi8KJiM0MzsJaWYgKHJjICZhbXA7JmFtcDsgc2VjX2FkanVzdGVkKSB7CiYjNDM7CQlkZXZfd2Fybih6bGRldi0mZ3Q7ZGV2LAomIzQzOwkJCSAmIzM0O1N1Yi1zZWNvbmQgYWRqdXN0bWVudCBmYWlsZWQgYWZ0ZXIgc2Vjb25kcyBhcHBsaWVkXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcmM7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSAtIGFkanVzdCBQVFAgY2xvY2sgZnJlcXVlbmN5CiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvCiYjNDM7ICogQHNjYWxlZF9wcG06IGZyZXF1ZW5jeSBhZGp1c3RtZW50IGluIHNjYWxlZCBwcG0gKHBwbSAqIDJeMTYpCiYjNDM7ICoKJiM0MzsgKiBPbmx5IHN1cHBvcnRlZCBmb3IgTkNPLiBXcml0ZXMgdGhlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgcmVnaXN0ZXIuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46CiYjNDM7ICogKiAlMAkJCS0gc3VjY2VzcyBvciBAc2NhbGVkX3BwbSBpcyB6ZXJvIChuby1vcCkKJiM0MzsgKiAqICUtRU9QTk9UU1VQUAktIE5DTyBwaW4gaXMgbm90IGNvbm5lY3RlZCBhbmQgQHNjYWxlZF9wcG0gaXMgbm9uLXplcm8KJiM0MzsgKiAqIG5lZ2F0aXZlCQktIG90aGVyIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludAomIzQzO3psMzA3M3hfZHBsbF9wdHBfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGxvbmcgc2NhbGVkX3BwbSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLAomIzQzOwkJCQkJCSAgIHB0cF9pbmZvKTsKJiM0MzsJY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjsKJiM0MzsJczY0IG9mZnNldDsKJiM0MzsKJiM0MzsJLyogQ29udmVydCBzY2FsZWRfcHBtIHRvIGRmX29mZnNldCBpbiAyXi00OCBzdGVwczoKJiM0MzsJICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjMyKSAvIDEwXjYKJiM0MzsJICoKJiM0MzsJICogU2ltcGxpZnkgdG8gYXZvaWQgb3ZlcmZsb3c6CiYjNDM7CSAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogMl4yNikgLyA1XjYKJiM0MzsJICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiA2NzEwODg2NCkgLyAxNTYyNQomIzQzOwkgKi8KJiM0MzsJb2Zmc2V0ID0gLWRpdl9zNjQoKHM2NClzY2FsZWRfcHBtICogNjcxMDg4NjRMTCwgMTU2MjUpOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwomIzQzOwljaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRwbGwtJmd0O2RldiwgemxkcGxsLSZndDtpZCk7CiYjNDM7CWlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKQomIzQzOwkJcmV0dXJuIHNjYWxlZF9wcG0gPyAtRU9QTk9UU1VQUCA6IDA7CiYjNDM7CWlmIChvZmZzZXQgPT0gY2hhbi0mZ3Q7ZGZfb2Zmc2V0KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCh6bGRwbGwtJmd0O2RldiwgemxkcGxsLSZndDtpZCwgb2Zmc2V0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSAtIGFkanVzdCBQVFAgY2xvY2sgcGhhc2UKJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm8KJiM0MzsgKiBAZGVsdGE6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMKJiM0MzsgKgomIzQzOyAqIE9ubHkgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMuIFVzZXMgVElFIHdyaXRlIGZvcgomIzQzOyAqIG5hbm9zZWNvbmQgcmVzb2x1dGlvbiBwaGFzZSBhZGp1c3RtZW50LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOgomIzQzOyAqICogJTAJCQktIHN1Y2Nlc3Mgb3IgQGRlbHRhIGlzIHplcm8gKG5vLW9wKQomIzQzOyAqICogJS1FT1BOT1RTVVBQCS0gbW9kZSBkb2VzIG5vdCBzdXBwb3J0IFRJRSBhbmQgQGRlbHRhIGlzIG5vbi16ZXJvCiYjNDM7ICogKiBuZWdhdGl2ZQkJLSBvdGhlciBlcnJvcgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHMzMiBkZWx0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLAomIzQzOwkJCQkJCSAgIHB0cF9pbmZvKTsKJiM0MzsJc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC0mZ3Q7ZGV2OwomIzQzOwljb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuOwomIzQzOwomIzQzOwlpZiAoIWRlbHRhKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CWNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZGV2LCB6bGRwbGwtJmd0O2lkKTsKJiM0MzsKJiM0MzsJaWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY2hhbikpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJldHVybiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHpsZGV2LCB6bGRwbGwtJmd0O2lkLCBkZWx0YSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzMzIKJiM0Mzt6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyBfX2Fsd2F5c191bnVzZWQpCiYjNDM7ewomIzQzOwkvKiBIVyBsaW1pdHMgVElFIHdyaXRlIHRvICYjNDM7LTEgc2Vjb25kLiBSZXR1cm4gdGhlIGNvbnN0YW50IEhXCiYjNDM7CSAqIGxpbWl0IGFuZCBsZXQgYWRqcGhhc2UgaGFuZGxlIG1vZGUtc3BlY2lmaWMgY2hlY2tzLgomIzQzOwkgKi8KJiM0MzsJcmV0dXJuIE5TRUNfUEVSX1NFQyAtIDE7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvID0gewomIzQzOwkub3duZXIJCT0gVEhJU19NT0RVTEUsCiYjNDM7CS5tYXhfYWRqCT0gWkwzMDczWF9EUExMX1BUUF9NQVhfQURKLAomIzQzOwkuZ2V0dGltZXg2NAk9IHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCwKJiM0MzsJLnNldHRpbWU2NAk9IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0LAomIzQzOwkuYWRqdGltZQk9IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSwKJiM0MzsJLmFkamZpbmUJPSB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUsCiYjNDM7CS5hZGpwaGFzZQk9IHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2UsCiYjNDM7CS5nZXRtYXhwaGFzZQk9IHpsMzA3M3hfZHBsbF9wdHBfZ2V0bWF4cGhhc2UsCiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBhIERQTEwgY2hhbm5lbAomIzQzOyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byByZWdpc3RlciBQVFAgY2xvY2sgZm9yCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQomIzQzO3sKJiM0MzsJc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC0mZ3Q7ZGV2OwomIzQzOwlzdHJ1Y3QgcHRwX2Nsb2NrICpwdHBfY2xvY2s7CiYjNDM7CiYjNDM7CXpsZHBsbC0mZ3Q7cHRwX2luZm8gPSB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm87CiYjNDM7CXNucHJpbnRmKHpsZHBsbC0mZ3Q7cHRwX2luZm8ubmFtZSwgc2l6ZW9mKHpsZHBsbC0mZ3Q7cHRwX2luZm8ubmFtZSksCiYjNDM7CQkgJiMzNDslcy1kcGxsJXUmIzM0OywgZGV2X25hbWUoemxkZXYtJmd0O2RldiksIHpsZHBsbC0mZ3Q7aWQpOwomIzQzOwomIzQzOwlwdHBfY2xvY2sgPSBwdHBfY2xvY2tfcmVnaXN0ZXIoJmFtcDt6bGRwbGwtJmd0O3B0cF9pbmZvLCB6bGRldi0mZ3Q7ZGV2KTsKJiM0MzsJaWYgKElTX0VSUihwdHBfY2xvY2spKSB7CiYjNDM7CQlkZXZfZXJyKHpsZGV2LSZndDtkZXYsICYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgRFBMTCV1XG4mIzM0OywKJiM0MzsJCQl6bGRwbGwtJmd0O2lkKTsKJiM0MzsJCXJldHVybiBQVFJfRVJSKHB0cF9jbG9jayk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJemxkcGxsLSZndDtwdHBfY2xvY2sgPSBwdHBfY2xvY2s7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIgLSB1bnJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgYSBEUExMIGNoYW5uZWwKJiM0MzsgKiBAemxkcGxsOiBEUExMIGNoYW5uZWwgdG8gdW5yZWdpc3RlciBQVFAgY2xvY2sgZm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKJiM0Mzt7CiYjNDM7CWlmICghSVNfRVJSX09SX05VTEwoemxkcGxsLSZndDtwdHBfY2xvY2spKSB7CiYjNDM7CQlwdHBfY2xvY2tfdW5yZWdpc3Rlcih6bGRwbGwtJmd0O3B0cF9jbG9jayk7CiYjNDM7CQl6bGRwbGwtJmd0O3B0cF9jbG9jayA9IE5VTEw7CiYjNDM7CX0KIH0KIAogLyoqCkBAIC0yNDM2LDYgJiM0MzsyNzc3LDQ3IEBAIHpsMzA3M3hfZHBsbF9yZWZfc3luY19wYWlyc19yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfYWxsb2MgLSBhbGxvY2F0ZSBEUExMIGRldmljZQomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlcgomIzQzOyAqCiYjNDM7ICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBwb2ludGVyIHRvIERQTEwgZGV2aWNlIG9uIHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgemwzMDczeF9kcGxsICoKJiM0Mzt6bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7CiYjNDM7CiYjNDM7CXpsZHBsbCA9IGt6YWxsb2Nfb2JqKCp6bGRwbGwpOwomIzQzOwlpZiAoIXpsZHBsbCkKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwomIzQzOwomIzQzOwl6bGRwbGwtJmd0O2RldiA9IHpsZGV2OwomIzQzOwl6bGRwbGwtJmd0O2lkID0gY2g7CiYjNDM7CW11dGV4X2luaXQoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwlJTklUX0xJU1RfSEVBRCgmYW1wO3psZHBsbC0mZ3Q7cGlucyk7CiYjNDM7CiYjNDM7CXJldHVybiB6bGRwbGw7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9mcmVlIC0gZnJlZSBEUExMIGRldmljZQomIzQzOyAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZQomIzQzOyAqCiYjNDM7ICogRGVhbGxvY2F0ZXMgZ2l2ZW4gRFBMTCBkZXZpY2UgcHJldmlvdXNseSBhbGxvY2F0ZWQgYnkgQHpsMzA3M3hfZHBsbF9hbGxvYy4KJiM0MzsgKi8KJiM0Mzt2b2lkCiYjNDM7emwzMDczeF9kcGxsX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQomIzQzO3sKJiM0MzsJV0FSTih6bGRwbGwtJmd0O2RwbGxfZGV2LCAmIzM0O0RQTEwgZGV2aWNlIGlzIHN0aWxsIHJlZ2lzdGVyZWRcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJbXV0ZXhfZGVzdHJveSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiYjNDM7CWtmcmVlKHpsZHBsbCk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIgLSByZWdpc3RlciBEUExMIGRldmljZSBhbmQgYWxsIGl0cyBwaW5zCiAgKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmUKQEAgLTI0NjYsNiAmIzQzOzI4NDgsMTMgQEAgemwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKIAkJcmV0dXJuIHJjOwogCX0KIAomIzQzOwlyYyA9IHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIoemxkcGxsKTsKJiM0MzsJaWYgKHJjKSB7CiYjNDM7CQl6bDMwNzN4X2RwbGxfcGluc191bnJlZ2lzdGVyKHpsZHBsbCk7CiYjNDM7CQl6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTsKJiM0MzsJCXJldHVybiByYzsKJiM0MzsJfQomIzQzOwogCXJldHVybiAwOwogfQogCkBAIC0yNDc5LDcgJiM0MzsyODY4LDcgQEAgemwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKIHZvaWQKIHpsMzA3M3hfZHBsbF91bnJlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKIHsKLQkvKiBVbnJlZ2lzdGVyIGFsbCBwaW5zIGFuZCBkcGxsICovCiYjNDM7CXpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3Rlcih6bGRwbGwpOwogCXpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTsKIAl6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaAppbmRleCBmYWViYzQwMmJhMWI3Li45OTMyMjFkYzYzMjQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oCkBAIC01LDYgJiM0Mzs1LDcgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2RwbGwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9saXN0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtjb3JlLmgmIzM0OwogCkBAIC0yMiw2ICYjNDM7MjMsOCBAQAogICogQHR5cGU6IERQTEwgdHlwZSAoUFBTIG9yIEVFQykKICAqIEBsb2NrX3N0YXR1czogbGFzdCBzYXZlZCBEUExMIGxvY2sgc3RhdHVzCiAgKiBAcGluczogbGlzdCBvZiBwaW5zCiYjNDM7ICogQHB0cF9pbmZvOiBQVFAgY2xvY2sgaW5mbwomIzQzOyAqIEBwdHBfY2xvY2s6IHJlZ2lzdGVyZWQgUFRQIGNsb2NrIChvciBOVUxMKQogICovCiBzdHJ1Y3QgemwzMDczeF9kcGxsIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCQlsaXN0OwpAQCAtMzYsNiAmIzQzOzM5LDggQEAgc3RydWN0IHpsMzA3M3hfZHBsbCB7CiAJZW51bSBkcGxsX3R5cGUJCQl0eXBlOwogCWVudW0gZHBsbF9sb2NrX3N0YXR1cwkJbG9ja19zdGF0dXM7CiAJc3RydWN0IGxpc3RfaGVhZAkJcGluczsKJiM0MzsJc3RydWN0IHB0cF9jbG9ja19pbmZvCQlwdHBfaW5mbzsKJiM0MzsJc3RydWN0IHB0cF9jbG9jawkJKnB0cF9jbG9jazsKIH07CiAKIHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgKaW5kZXggYjcwZWFkN2Q0NDk1Yi4uZjNhNWUxMjE1YWEzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaApAQCAtMTc5LDYgJiM0MzsxNzksMjAgQEAKICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRAkJCUdFTk1BU0soMiwgMCkKICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRF9BQ0NfSQkJNAogCiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTAkJCVpMX1JFRyg1LCAweDMwLCAxKQomIzQzOyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUAkJCUdFTk1BU0soMiwgMCkKJiM0MzsjZGVmaW5lIFpMX0RQTExfVElFX0NUUkxfT1BfV1IJCQk0CiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTF9NQVNLCQlaTF9SRUcoNSwgMHgzMSwgMSkKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9DVFJMKF9pZHgpCQkJCQlcCiYjNDM7CVpMX1JFR19JRFgoX2lkeCwgNSwgMHgzOCwgMSwgWkwzMDczWF9NQVhfQ0hBTk5FTFMsIDEpCiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX1NFTQkJCUJJVCg0KQomIzQzOyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTUQJCQlHRU5NQVNLKDMsIDApCiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWgkxCiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UCQk4CiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9ORVhUXzFIWgk5CiYjNDM7CiAjZGVmaW5lIFpMX1JFR19EUExMX01FQVNfQ1RSTAkJCVpMX1JFRyg1LCAweDUwLCAxKQogI2RlZmluZSBaTF9EUExMX01FQVNfQ1RSTF9FTgkJCUJJVCgwKQogI2RlZmluZSBaTF9EUExMX01FQVNfQ1RSTF9BVkdfRkFDVE9SCQlHRU5NQVNLKDcsIDQpCkBAIC0xOTMsNiAmIzQzOzIwNyw5IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBSZWdpc3RlciBQYWdlcyA2LTcsIERQTEwgRGF0YQomIzQzOyAqCiYjNDM7ICogUGVyLWNoYW5uZWwgcmVnaXN0ZXJzIHdpdGggc3RyaWRlIDB4MjAuIENoYW5uZWxzIDAtMyByZXNpZGUgb24gcGFnZSA2LAomIzQzOyAqIGNoYW5uZWwgNCBvbiBwYWdlIDcuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2RlZmluZSBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeCkJCQkJCVwKQEAgLTIwMiw2ICYjNDM7MjE5LDI0IEBACiAJKChfaWR4KSAmbHQ7IDQgPyBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfNCkKICNkZWZpbmUgWkxfRFBMTF9ERl9PRkZTRVRfVU5LTk9XTglTNjRfTUlOCiAKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBXzAzKF9pZHgpCQkJCQlcCiYjNDM7CVpMX1JFR19JRFgoX2lkeCwgNiwgMHgwQywgNiwgNCwgMHgyMCkKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBXzQJCQlaTF9SRUcoNywgMHgwQywgNikKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBKF9pZHgpCQkJCQlcCiYjNDM7CSgoX2lkeCkgJmx0OyA0ID8gWkxfUkVHX0RQTExfVElFX0RBVEFfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9USUVfREFUQV80KQomIzQzOwomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQ18wMyhfaWR4KQkJCQkJXAomIzQzOwlaTF9SRUdfSURYKF9pZHgsIDYsIDB4MTIsIDYsIDQsIDB4MjApCiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzQJCQlaTF9SRUcoNywgMHgxMiwgNikKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUMoX2lkeCkJCQkJCVwKJiM0MzsJKChfaWR4KSAmbHQ7IDQgPyBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVE9EX1NFQ180KQomIzQzOwomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TXzAzKF9pZHgpCQkJCQlcCiYjNDM7CVpMX1JFR19JRFgoX2lkeCwgNiwgMHgxOCwgNCwgNCwgMHgyMCkKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU180CQkJWkxfUkVHKDcsIDB4MTgsIDQpCiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlMoX2lkeCkJCQkJCVwKJiM0MzsJKChfaWR4KSAmbHQ7IDQgPyBaTF9SRUdfRFBMTF9UT0RfTlNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfTlNfNCkKJiM0MzsKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogUmVnaXN0ZXIgUGFnZSA5LCBTeW50aCBhbmQgT3V0cHV0CiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0yMjEsNiAmIzQzOzI1NiwyMyBAQAogI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9FTgkJCUJJVCgwKQogI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9TWU5USF9TRUwJCUdFTk1BU0soNiwgNCkKIAomIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTSwkJWkxfUkVHKDksIDB4MzYsIDIpCiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTAkJWkxfUkVHKDksIDB4MzgsIDEpCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX0RQTEwJCUdFTk1BU0soNiwgNCkKJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVAJQklUKDMpCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QCQlHRU5NQVNLKDEsIDApCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX05PTkUJMAomIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9SRVNFVAkxCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1JFQUQJMgomIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURQkzCiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTlVNQkVSCQlaTF9SRUcoOSwgMHgzOSwgMSkKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLCQlaTF9SRUcoOSwgMHgzYSwgMikKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBCQlaTF9SRUcoOSwgMHgzYywgNCkKJiM0MzsKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBSZWdpc3RlciBQYWdlIDEwLCBSZWYgTWFpbGJveAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MTc4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogOTE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWkwzMDczWCBEUExMIERyaXZlciBQYXRjaCBmb3IgRnV6emluZyBTdWl0YWJpbGl0eSoqCgpPa2F5LCBzbyBJIGhhdmUgYSBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgYWRkaW5nIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBgemwzMDczeGAgRFBMTCBkcml2ZXIuIFRoaXMgaW52b2x2ZXMgY2hhbmdlcyBhY3Jvc3Mgc2V2ZXJhbCBmaWxlczogYEtjb25maWdgLCBgY2hhbi5jYCwgYGNoYW4uaGAsIGBjb3JlLmNgLCBgY29yZS5oYCwgYGRwbGwuY2AsIGBkcGxsLmhgLCBhbmQgYHJlZ3MuaGAuIENydWNpYWxseSwgaXQmIzM5O3MgYWRkaW5nIGEgYFBUUF8xNTg4X0NMT0NLYCBkZXBlbmRlbmN5IHRvIGBaTDMwNzNYYCwgYFpMMzA3M1hfSTJDYCwgYW5kIGBaTDMwNzNYX1NQSWAsIGFuZCBpbnRyb2R1Y2luZyBuZXcgUFRQLXJlbGF0ZWQgZnVuY3Rpb25zIGxpa2UgYHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdGAgYW5kIGB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyYC4gU2VlbXMgcHJldHR5IHN0YW5kYXJkIGZvciBQVFAgY2xvY2sgaW50ZWdyYXRpb24uCgpOb3csIHRoZSBwcm9tcHQgaXMgdGhyb3dpbmcgYSBjdXJ2ZWJhbGwsIGFza2luZyBpZiB0aGlzIGlzIGZ1enphYmxlLiBJdCBtZW50aW9ucyAmIzM0O3ZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzJiMzNDsgdGhhdCByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlIGFuZCBjYW4mIzM5O3QgYmUgZW11bGF0ZWQuIEJ1dCwgdGhpcyBgemwzMDczeGAgaXMgYSBEUExMIGRyaXZlciBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlcywgc3BlY2lmaWNhbGx5IHVzaW5nIEkyQy9TUEkuIFRoYXQmIzM5O3MgYSBnb29kIHNpZ24uIEkyQyBhbmQgU1BJIGRldmljZXMgY2FuIG9mdGVuIGJlIGVtdWxhdGVkIGFuZCBmdXp6ZWQgaW4gUUVNVSwgcmlnaHQ/IFdlIGNhbiB0eXBpY2FsbHkgaW5zdGFudGlhdGUgdGhlbSB2aWEgZGV2aWNlIHRyZWUgb3ZlcmxheXMgb3Igc3lzZnMsIG9yIGV2ZW4gZnV6eiB0aGVtIHdpdGggc29tZXRoaW5nIGxpa2Ugc3l6a2FsbGVyLgoKU3l6a2FsbGVyLCBzcGVjaWZpY2FsbHksIGhhcyBJMkMgYW5kIFNQSSBzdXBwb3J0OyBpdCBjYW4gaW5qZWN0IG5vZGVzLCB1c2UgYGkyYy1zdHViYCBvciBgc3BpYCBsb29wYmFja3MsIG9yIGp1c3QgaW5zdGFudGlhdGUgdGhlbSBhbmQgZnV6eiB0aGVpciBvcGVyYXRpb25zLiBUaGF0JiMzOTtzIHRoZSBrZXkuIFRoaXMgZHJpdmVyIHVzZXMgYHJlZ21hcF9pMmNgIGFuZCBgcmVnbWFwX3NwaWAuIFN5emthbGxlciBjYW4gZnV6eiBJMkMgZGV2aWNlcyB2aWEgYC9kZXYvaTJjLSpgIG9yIGJ5IGluc3RhbnRpYXRpbmcgdGhlbSwgc28gdGhhdCYjMzk7cyBob3BlZnVsLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhpcyBkcml2ZXIgY2FuIGJlIGluc3RhbnRpYXRlZCBpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQuIFRoZSBwcm9tcHQgaXMgc3BlY2lmaWNhbGx5IHRhbGtpbmcgYWJvdXQgY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBzbyB0aGF0JiMzOTtzIHdoYXQgSSBoYXZlIHRvIGNoZWNrLgoKVGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIGNhbiB0aGlzIGJlIGluc3RhbnRpYXRlZCB2aWEsIHNheSwgd3JpdGluZyB0byBgL3N5cy9idXMvaTJjL2RldmljZXMvaTJjLSovbmV3X2RldmljZWA/IFRoYXQgc2hvdWxkIHdvcmsgZm9yIGFueSBJMkMgZHJpdmVyIGlmIHdlIGtub3cgdGhlIGRyaXZlciBuYW1lLiBBbmQgdGhlIGRyaXZlciBuYW1lICpzaG91bGQqIGJlIGB6bDMwNzN4YCwgSSYjMzk7bGwgZG91YmxlLWNoZWNrIHRoZSBzb3VyY2UgdG8gYmUgc3VyZS4gSWYgSSBjYW4gY3JlYXRlIHRoZSBJMkMgZGV2aWNlIG5vZGUgYW5kIHRoZW4gcnVuIHRoaXMgbmV3IGNvZGUsIHRoYXQgbWVhbnMgSSBjYW4gZnV6eiB0aGUgY29kZS4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBpbnN0YW50aWF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3psMzA3M3gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDQ0ODYgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWc9Mz1jb25maWcgWkwzMDczWFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctMTQtXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGVcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWc6MTU6XHQgIHdpbGwgYmUgY2FsbGVkIHpsMzA3M3guXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTE2LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZz0xNz1jb25maWcgWkwzMDczWF9JMkNcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTI2LVx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWc6Mjc6XHQgIGJlIGNhbGxlZCB6bDMwNzN4X2kyYy5cbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctMjgtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnPTI5PWNvbmZpZyBaTDMwNzNYX1NQSVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctMzgtXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZzozOTpcdCAgYmUgY2FsbGVkIHpsMzA3M3hfc3BpLlxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L01ha2VmaWxlLTItXG5kcml2ZXJzL2RwbGwvemwzMDczeC9NYWtlZmlsZTozOm9iai0kKENPTkZJR19aTDMwNzNYKVx0XHQmIzQzOz0gemwzMDczeC5vXG5kcml2ZXJzL2RwbGwvemwzMDczeC9NYWtlZmlsZTo0OnpsMzA3M3gtb2Jqc1x0XHRcdDo9IGNoYW4ubyBjb3JlLm8gZGV2bGluay5vIGRwbGwub1x0XFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L01ha2VmaWxlLTUtXHRcdFx0XHQgICBmbGFzaC5vIGZ3Lm8gb3V0Lm8gcHJvcC5vIHJlZi5vIHN5bnRoLm9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L01ha2VmaWxlLTYtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19aTDMwNzNYX0kyQylcdCYjNDM7PSB6bDMwNzN4X2kyYy5vXG5kcml2ZXJzL2RwbGwvemwzMDczeC9NYWtlZmlsZTo4OnpsMzA3M3hfaTJjLW9ianNcdFx0Oj0gaTJjLm9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L01ha2VmaWxlLTktXG5kcml2ZXJzL2RwbGwvemwzMDczeC9NYWtlZmlsZToxMDpvYmotJChDT05GSUdfWkwzMDczWF9TUEkpXHQmIzQzOz0gemwzMDczeF9zcGkub1xuZHJpdmVycy9kcGxsL3psMzA3M3gvTWFrZWZpbGU6MTE6emwzMDczeF9zcGktb2Jqc1x0XHQ6PSBzcGkub1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xMy0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxNDogKiB6bDMwNzN4X2NoYW5fc3RhdGVfdXBkYXRlIC0gdXBkYXRlIERQTEwgY2hhbm5lbCBzdGF0dXMgZnJvbSBIV1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE1OiAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmVcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xNi0gKiBAaW5kZXg6IERQTEwgY2hhbm5lbCBpbmRleFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xOS0gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyMDppbnQgemwzMDczeF9jaGFuX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleClcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMS17XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjI6XHRzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuID0gXHUwMDI2emxkZXYtXHUwMDNlY2hhbltpbmRleF07XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjMtXHR1NjQgdmFsO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyNjpcdHJjID0gemwzMDczeF9yZWFkX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9NT05fU1RBVFVTKGluZGV4KSxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNy1cdFx0XHQgICAgIFx1MDAyNmNoYW4tXHUwMDNlbW9uX3N0YXR1cyk7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMwLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjMxOlx0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX1JFRlNFTF9TVEFUVVMoaW5kZXgpLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMyLVx0XHRcdCAgICAgXHUwMDI2Y2hhbi1cdTAwM2VyZWZzZWxfc3RhdHVzKTtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzgtXHQgKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozOTpcdGlmICghemwzMDczeF9jaGFuX2lzX2xvY2tlZChjaGFuKSkge1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQwOlx0XHRpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSlcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00MS1cdFx0XHRjaGFuLVx1MDAzZWRmX29mZnNldCA9IFpMX0RQTExfREZfT0ZGU0VUX1VOS05PV047XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ0LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQ1Olx0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfREZfUkVBRChpbmRleCksXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDYtXHRcdFx0XHQgIFpMX0RQTExfREZfUkVBRF9TRU0sXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUwLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjUxOlx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9SRUFEKGluZGV4KSxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01Mi1cdFx0XHQgICAgICBaTF9EUExMX0RGX1JFQURfU0VNIHwgWkxfRFBMTF9ERl9SRUFEX1JFRl9PRlNUKTtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTUtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTY6XHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9SRUFEKGluZGV4KSxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01Ny1cdFx0XHRcdCAgWkxfRFBMTF9ERl9SRUFEX1NFTSxcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNjEtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NjI6XHRyYyA9IHpsMzA3M3hfcmVhZF91NDgoemxkZXYsIFpMX1JFR19EUExMX0RGX09GRlNFVChpbmRleCksIFx1MDAyNnZhbCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNjMtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTcxLS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjcyOiAqIHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQgLSBzd2l0Y2ggRFBMTCBjaGFubmVsIHRvIE5DTyBtb2RlXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NzM6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3hfZGV2IHN0cnVjdHVyZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTc0LSAqIEBpbmRleDogRFBMTCBjaGFubmVsIGluZGV4XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTgyLSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjgzOmludCB6bDMwNzN4X2NoYW5fbmNvX21vZGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTg0LXtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo4NTpcdHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4gPSBcdTAwMjZ6bGRldi1cdTAwM2VjaGFuW2luZGV4XTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy04Ni1cdHU4IHByZXZfbW9kZSwgZGZfcmVhZDtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtODktXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6OTA6XHRwcmV2X21vZGUgPSB6bDMwNzN4X2NoYW5fbW9kZV9nZXQoY2hhbik7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtOTEtXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTk2LVx0aWYgKHByZXZfbW9kZSA9PSBaTF9EUExMX01PREVfUkVGU0VMX01PREVfRlJFRVJVTikge1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjk3Olx0XHR6bDMwNzN4X2NoYW5fbW9kZV9zZXQoY2hhbiwgWkxfRFBMTF9NT0RFX1JFRlNFTF9NT0RFX05DTyk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtOTgtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6OTk6XHRcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfTU9ERV9SRUZTRUwoaW5kZXgpLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTEwMC1cdFx0XHRcdCAgICAgIGNoYW4tXHUwMDNlbW9kZV9yZWZzZWwpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTEwMS1cdFx0aWYgKHJjKSB7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTAyOlx0XHRcdHpsMzA3M3hfY2hhbl9tb2RlX3NldChjaGFuLCBwcmV2X21vZGUpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTEwMy1cdFx0XHRyZXR1cm4gcmM7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTEyMC1cdFx0ICBGSUVMRF9QUkVQKFpMX0RQTExfREZfUkVBRF9DTUQsIFpMX0RQTExfREZfUkVBRF9DTURfQUNDX0kpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjEyMTpcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfREZfUkVBRChpbmRleCksIGRmX3JlYWQpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTEyMi1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTMwLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjEzMTpcdHpsMzA3M3hfY2hhbl9tb2RlX3NldChjaGFuLCBaTF9EUExMX01PREVfUkVGU0VMX01PREVfTkNPKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxMzI6XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX01PREVfUkVGU0VMKGluZGV4KSxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xMzMtXHRcdFx0ICAgICAgY2hhbi1cdTAwM2Vtb2RlX3JlZnNlbCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTM0LVx0aWYgKHJjKSB7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTM1Olx0XHR6bDMwNzN4X2NoYW5fbW9kZV9zZXQoY2hhbiwgcHJldl9tb2RlKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xMzYtXHRcdHJldHVybiByYztcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTQ3LVx0ICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTQ4Olx0cmMgPSB6bDMwNzN4X3JlYWRfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9PRkZTRVQoaW5kZXgpLCBcdTAwMjZ2YWwpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE0OS1cdGlmIChyYykge1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xNjEtLyoqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTYyOiAqIHpsMzA3M3hfY2hhbl9zdGF0ZV9mZXRjaCAtIGZldGNoIERQTEwgY2hhbm5lbCBzdGF0ZSBmcm9tIGhhcmR3YXJlXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTYzOiAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmVcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xNjQtICogQGluZGV4OiBEUExMIGNoYW5uZWwgaW5kZXggdG8gZmV0Y2ggc3RhdGUgZm9yXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE3MC0gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxNzE6aW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9mZXRjaChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleClcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xNzIte1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE3MzpcdHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4gPSBcdTAwMjZ6bGRldi1cdTAwM2VjaGFuW2luZGV4XTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xNzQtXHRpbnQgcmMsIGk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTc1LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE3NjpcdHJjID0gemwzMDczeF9yZWFkX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9DVFJMKGluZGV4KSwgXHUwMDI2Y2hhbi1cdTAwM2VjdHJsKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xNzctXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE3OS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxODA6XHRyYyA9IHpsMzA3M3hfcmVhZF91OCh6bGRldiwgWkxfUkVHX0RQTExfTU9ERV9SRUZTRUwoaW5kZXgpLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE4MS1cdFx0XHQgICAgIFx1MDAyNmNoYW4tXHUwMDNlbW9kZV9yZWZzZWwpO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xODUtXHRkZXZfZGJnKHpsZGV2LVx1MDAzZWRldiwgXCYjMzQ7RFBMTCV1IG1vZGU6ICV1LCByZWY6ICV1XFxuXCYjMzQ7LCBpbmRleCxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxODY6XHRcdHpsMzA3M3hfY2hhbl9tb2RlX2dldChjaGFuKSwgemwzMDczeF9jaGFuX3JlZl9nZXQoY2hhbikpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE4Ny1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxODg6XHRyYyA9IHpsMzA3M3hfY2hhbl9zdGF0ZV91cGRhdGUoemxkZXYsIGluZGV4KTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xODktXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE5NS1cdCAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE5NjpcdGlmICh6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikpXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTk3LVx0XHRjaGFuLVx1MDAzZWRmX29mZnNldCA9IFpMX0RQTExfREZfT0ZGU0VUX1VOS05PV047XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIwMC1cdFx0XCYjMzQ7RFBMTCV1IGxvY2tfc3RhdGU6ICV1LCBobzogJXUsIHNlbF9zdGF0ZTogJXUsIHNlbF9yZWY6ICV1XFxuXCYjMzQ7LFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIwMTpcdFx0aW5kZXgsIHpsMzA3M3hfY2hhbl9sb2NrX3N0YXRlX2dldChjaGFuKSxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyMDI6XHRcdHpsMzA3M3hfY2hhbl9pc19ob19yZWFkeShjaGFuKSA/IDEgOiAwLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIwMzpcdFx0emwzMDczeF9jaGFuX3JlZnNlbF9zdGF0ZV9nZXQoY2hhbiksXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjA0Olx0XHR6bDMwNzN4X2NoYW5fcmVmc2VsX3JlZl9nZXQoY2hhbikpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIwNS1cbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjA4LVx0LyogUmVhZCBEUExMIGNvbmZpZ3VyYXRpb24gZnJvbSBtYWlsYm94ICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjA5Olx0cmMgPSB6bDMwNzN4X21iX29wKHpsZGV2LCBaTF9SRUdfRFBMTF9NQl9TRU0sIFpMX0RQTExfTUJfU0VNX1JELFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIxMC1cdFx0XHQgICBaTF9SRUdfRFBMTF9NQl9NQVNLLCBCSVQoaW5kZXgpKTtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjE1LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShjaGFuLVx1MDAzZXJlZl9wcmlvKTsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyMTY6XHRcdHJjID0gemwzMDczeF9yZWFkX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9SRUZfUFJJTyhpKSxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMTctXHRcdFx0XHQgICAgIFx1MDAyNmNoYW4tXHUwMDNlcmVmX3ByaW9baV0pO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMjUtLyoqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjI2OiAqIHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQgLSBnZXQgY3VycmVudCBEUExMIGNoYW5uZWwgc3RhdGVcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyMjc6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3hfZGV2IHN0cnVjdHVyZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIyOC0gKiBAaW5kZXg6IERQTEwgY2hhbm5lbCBpbmRleCB0byBnZXQgc3RhdGUgZm9yXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIzMS0gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyMzI6Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqemwzMDczeF9jaGFuX3N0YXRlX2dldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIzMy1cdFx0XHRcdFx0XHQgIHU4IGluZGV4KVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMzgtLyoqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjM5OiAqIHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCAtIHdhaXQgZm9yIFRvRCBzZW1hcGhvcmUgdG8gY2xlYXJcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyNDA6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjQxLSAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI1MS0gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyNTI6aW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNTMte1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNTctXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjU4Olx0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSwgXHUwMDI2dG9kX2N0cmwpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI1OS1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjc2LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI3NzpcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNzgtXHRcdFx0XHQgIFpMX0RQTExfVE9EX0NUUkxfU0VNLCB0aW1lb3V0KTtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjgzLS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI4NDogKiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwgLSBpc3N1ZSBUb0QgY29tbWFuZFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI4NTogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yODYtICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjk0LSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI5NTpzdGF0aWMgaW50IHpsMzA3M3hfY2hhbl90b2RfY3RybChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgdTggY21kKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI5Ni17XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6Mjk3Olx0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yOTgtXHRcdFx0XHRaTF9EUExMX1RPRF9DVFJMX1NFTSB8IGNtZCk7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMwMS0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozMDI6ICogemwzMDczeF9jaGFuX3RvZF9yZWFkIC0gcmVhZCBUb0QgcmVnaXN0ZXJzIGFmdGVyIGlzc3VpbmcgYSBjb21tYW5kXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzAzOiAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMwNC0gKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMDgtICpcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozMDk6ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMTAtICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMTEtICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzEyOmludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzEzLVx0XHRcdCAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMyNi1cdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzI3Olx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMjgtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMzMS1cdHB0cF9yZWFkX3N5c3RlbV9wcmV0cyhzdHMpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjMzMjpcdHJjID0gemwzMDczeF9jaGFuX3RvZF9jdHJsKHpsZGV2LCBjaCwgY21kKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMzMtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMzNS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozMzY6XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMzNy1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzQwLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM0MTpcdHJjID0gemwzMDczeF9yZWFkX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIFx1MDAyNnNlYyk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzQyLVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNDUtXHQvKiBIVyBuYW5vc2Vjb25kcyBhcmUgYWx3YXlzIGluIFswLCBOU0VDX1BFUl9TRUMpIHJhbmdlICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzQ2Olx0cmMgPSB6bDMwNzN4X3JlYWRfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCBcdTAwMjZuc2VjKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNDctXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM1Ni0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozNTc6ICogemwzMDczeF9jaGFuX3RvZF93cml0ZSAtIHdyaXRlIFRvRCByZWdpc3RlcnMgYW5kIHRyaWdnZXIgMSBIeiB1cGRhdGVcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozNTg6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzU5LSAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM2MS0gKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM2MjogKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM2My0gKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM2NC0gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozNjU6aW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzY2LVx0XHRcdCAgIHN0cnVjdCB0aW1lc3BlYzY0IHRzKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNzAtXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVG9EIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM3MTpcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzcyLVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNzQtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6Mzc1Olx0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIHRzLnR2X3NlYyk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzc2LVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNzgtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6Mzc5Olx0cmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgdHMudHZfbnNlYyk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzgwLVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zODItXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzgzOlx0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfY3RybCh6bGRldiwgY2gsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzg0LVx0XHRcdFx0ICAgICBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWik7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM4Ny0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozODg6ICogemwzMDczeF9jaGFuX3RvZF9hZGp1c3QgLSBhdG9taWMgVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIHdpdGggcm9sbG92ZXIgZ3VhcmRcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozODk6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzkwLSAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM5OC0gKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM5OTogKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQwMC0gKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQwMS0gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0MDI6aW50IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQwMy1cdFx0XHQgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQxMC1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIFpMX1RPRF9NQVhfUkVUUklFUzsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0MTE6XHRcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgdHJ1ZSwgXHUwMDI2dHNfbmV4dCwgTlVMTCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDEyLVx0XHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQxNC1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0MTU6XHRcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgZmFsc2UsIFx1MDAyNnRzX2N1ciwgTlVMTCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDE2LVx0XHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQzOC1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0Mzk6XHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF93cml0ZSh6bGRldiwgY2gsIHRzX25leHQpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ0MC0jdW5kZWYgWkxfVE9EX01BWF9SRVRSSUVTXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ0My0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0NDQ6ICogemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQgLSB3cml0ZSBkZWx0YSBmcmVxdWVuY3kgb2Zmc2V0IHRvIGhhcmR3YXJlXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDQ1OiAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ0Ni0gKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00NTEtICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDUyOmludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldClcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00NTMte1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00NTUtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDU2Olx0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfREZfT0ZGU0VUKGNoKSwgb2Zmc2V0KTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00NTctXHRpZiAoIXJjKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00NjMtLyoqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDY0OiAqIHpsMzA3M3hfY2hhbl90aWVfd3JpdGUgLSBhZGp1c3QgRFBMTCBwaGFzZSB1c2luZyBUSUUgd3JpdGVcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0NjU6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDY2LSAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ3My0gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0NzQ6aW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucylcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00NzUte1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00ODEtXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVElFIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQ4MjpcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ4My1cdFx0XHRcdCAgWkxfRFBMTF9USUVfQ1RSTF9PUCxcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDkwLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQ5MTpcdHJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9EQVRBKGNoKSwgdGllX2RhdGEpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ5Mi1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDk0LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQ5NTpcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkxfTUFTSywgQklUKGNoKSk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDk2LVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00OTgtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDk5Olx0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUwMC1cdFx0XHRcdFpMX0RQTExfVElFX0NUUkxfT1BfV1IpO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01MDMtLyoqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTA0OiAqIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwIC0gZXhlY3V0ZSBvbmUgb3V0cHV0IHBoYXNlIHN0ZXAgb3BlcmF0aW9uXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTA1OiAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUwNi0gKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01MTUtICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTE2OmludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01MTctXHRcdFx0ICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01MjUtXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgcGhhc2Ugc3RlcCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1MjY6XHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTCxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01MjctXHRcdFx0XHQgIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AsXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUzMS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1MzI6XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfREFUQSxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01MzMtXHRcdFx0ICAgICAgIHN0ZXBfY3ljbGVzKTtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTM2LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjUzNzpcdHJjID0gemwzMDczeF93cml0ZV91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLLCBvdXRfbWFzayk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTM4LVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NDAtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTQxOlx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTlVNQkVSLCAxKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NDItXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU1MC1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1NTE6XHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwsIGN0cmwpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU1Mi19XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU1NC0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1NTU6ICogemwzMDczeF9jaGFuX3N0YXRlX3NldCAtIGNvbW1pdCBEUExMIGNoYW5uZWwgc3RhdGUgY2hhbmdlcyB0byBoYXJkd2FyZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU1NjogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTU3LSAqIEBpbmRleDogRFBMTCBjaGFubmVsIGluZGV4IHRvIHNldCBzdGF0ZSBmb3Jcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTY2LSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU2NzppbnQgemwzMDczeF9jaGFuX3N0YXRlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1Njg6XHRcdFx0ICAgY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01Njkte1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU3MDpcdHN0cnVjdCB6bDMwNzN4X2NoYW4gKmRjaGFuID0gXHUwMDI2emxkZXYtXHUwMDNlY2hhbltpbmRleF07XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTcxLVx0aW50IHJjLCBpO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NzgtXHRpZiAoZGNoYW4tXHUwMDNlY3RybCAhPSBjaGFuLVx1MDAzZWN0cmwpIHtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1Nzk6XHRcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfQ1RSTChpbmRleCksXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTgwLVx0XHRcdFx0ICAgICAgY2hhbi1cdTAwM2VjdHJsKTtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTg2LVx0aWYgKGRjaGFuLVx1MDAzZW1vZGVfcmVmc2VsICE9IGNoYW4tXHUwMDNlbW9kZV9yZWZzZWwpIHtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1ODc6XHRcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfTU9ERV9SRUZTRUwoaW5kZXgpLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU4OC1cdFx0XHRcdCAgICAgIGNoYW4tXHUwMDNlbW9kZV9yZWZzZWwpO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy02MDItXHQvKiBSZWFkIERQTEwgY29uZmlndXJhdGlvbiBpbnRvIG1haWxib3ggKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo2MDM6XHRyYyA9IHpsMzA3M3hfbWJfb3AoemxkZXYsIFpMX1JFR19EUExMX01CX1NFTSwgWkxfRFBMTF9NQl9TRU1fUkQsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNjA0LVx0XHRcdCAgIFpMX1JFR19EUExMX01CX01BU0ssIEJJVChpbmRleCkpO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy02MTAtXHRcdGlmIChkY2hhbi1cdTAwM2VyZWZfcHJpb1tpXSAhPSBjaGFuLVx1MDAzZXJlZl9wcmlvW2ldKSB7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NjExOlx0XHRcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldixcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy02MTItXHRcdFx0XHRcdCAgICAgIFpMX1JFR19EUExMX1JFRl9QUklPKGkpLFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy02MTktXHQvKiBDb21taXQgRFBMTCBjb25maWd1cmF0aW9uICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NjIwOlx0cmMgPSB6bDMwNzN4X21iX29wKHpsZGV2LCBaTF9SRUdfRFBMTF9NQl9TRU0sIFpMX0RQTExfTUJfU0VNX1dSLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTYyMS1cdFx0XHQgICBaTF9SRUdfRFBMTF9NQl9NQVNLLCBCSVQoaW5kZXgpKTtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg9MTM9c3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjE0OnN0cnVjdCB6bDMwNzN4X2RldjtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xNS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xNi0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxNzogKiBzdHJ1Y3QgemwzMDczeF9jaGFuIC0gRFBMTCBjaGFubmVsIHN0YXRlXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTgtICogQGN0cmw6IERQTEwgY29udHJvbCByZWdpc3RlciB2YWx1ZVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0yNC0gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoyNTpzdHJ1Y3QgemwzMDczeF9jaGFuIHtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0yNi1cdHN0cnVjdF9ncm91cChjZmcsXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTM3LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjM4OmludCB6bDMwNzN4X2NoYW5fc3RhdGVfZmV0Y2goc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjM5OmNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKnpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldixcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC00MC1cdFx0XHRcdFx0XHQgdTggaW5kZXgpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjQxOmludCB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4LFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjQyOlx0XHRcdCAgIGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTQzLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjQ0OmludCB6bDMwNzN4X2NoYW5fc3RhdGVfdXBkYXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDo0NTppbnQgemwzMDczeF9jaGFuX25jb19tb2RlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNDYtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NDc6aW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NDg6aW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC00OS1cdFx0XHQgIGJvb2wgbmV4dF9oeiwgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTUwLVx0XHRcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjUxOmludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTUyLVx0XHRcdCAgIHN0cnVjdCB0aW1lc3BlYzY0IHRzKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDo1MzppbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNTQtXHRcdFx0ICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDo1NTppbnQgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNTYtXHRcdFx0ICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLCBib29sIHRvZF9zdGVwKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC01Ny1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDo1ODppbnQgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBvZmZzZXQpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTU5LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjYwOmludCB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgZGVsdGFfbnMpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTYxLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTYyLS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjYzOiAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfZ2V0IC0gZ2V0IGNhY2hlZCBkZl9vZmZzZXQgdnMgdHJhY2tlZCByZWZlcmVuY2VcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC02NC0gKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oPTY4PXN0YXRpYyBpbmxpbmUgczY0XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6Njk6emwzMDczeF9jaGFuX2RmX29mZnNldF9nZXQoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC03MC17XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTc0LS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjc1OiAqIHpsMzA3M3hfY2hhbl9tb2RlX2dldCAtIGdldCBEUExMIGNoYW5uZWwgb3BlcmF0aW5nIG1vZGVcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC03Ni0gKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTc5LSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjgwOnN0YXRpYyBpbmxpbmUgdTggemwzMDczeF9jaGFuX21vZGVfZ2V0KGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtODEte1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC04NS0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDo4NjogKiB6bDMwNzN4X2NoYW5fcmVmX2dldCAtIGdldCBtYW51YWxseSBzZWxlY3RlZCByZWZlcmVuY2VcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC04Ny0gKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTkwLSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjkxOnN0YXRpYyBpbmxpbmUgdTggemwzMDczeF9jaGFuX3JlZl9nZXQoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC05Mi17XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTk2LS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjk3OiAqIHpsMzA3M3hfY2hhbl9tb2RlX3NldCAtIHNldCBEUExMIGNoYW5uZWwgb3BlcmF0aW5nIG1vZGVcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC05OC0gKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTEwMC0gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxMDE6c3RhdGljIGlubGluZSB2b2lkIHpsMzA3M3hfY2hhbl9tb2RlX3NldChzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuLCB1OCBtb2RlKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTEwMi17XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTEwNi0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxMDc6ICogemwzMDczeF9jaGFuX3JlZl9zZXQgLSBzZXQgbWFudWFsbHkgc2VsZWN0ZWQgcmVmZXJlbmNlXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTA4LSAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTEwLSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjExMTpzdGF0aWMgaW5saW5lIHZvaWQgemwzMDczeF9jaGFuX3JlZl9zZXQoc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiwgdTggcmVmKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTExMi17XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTExNi0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxMTc6ICogemwzMDczeF9jaGFuX3JlZl9wcmlvX2dldCAtIGdldCByZWZlcmVuY2UgcHJpb3JpdHlcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xMTgtICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaD0xMjM9c3RhdGljIGlubGluZSB1OFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjEyNDp6bDMwNzN4X2NoYW5fcmVmX3ByaW9fZ2V0KGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4sIHU4IHJlZilcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xMjUte1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xMzQtLyoqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTM1OiAqIHpsMzA3M3hfY2hhbl9yZWZfcHJpb19zZXQgLSBzZXQgcmVmZXJlbmNlIHByaW9yaXR5XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTM2LSAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg9MTQwPXN0YXRpYyBpbmxpbmUgdm9pZFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjE0MTp6bDMwNzN4X2NoYW5fcmVmX3ByaW9fc2V0KHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4sIHU4IHJlZiwgdTggcHJpbylcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xNDIte1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xNTEtLyoqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTUyOiAqIHpsMzA3M3hfY2hhbl9yZWZfaXNfc2VsZWN0YWJsZSAtIGNoZWNrIGlmIHJlZmVyZW5jZSBpcyBzZWxlY3RhYmxlXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTUzLSAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg9MTU4PXN0YXRpYyBpbmxpbmUgYm9vbFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjE1OTp6bDMwNzN4X2NoYW5fcmVmX2lzX3NlbGVjdGFibGUoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiwgdTggcmVmKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE2MC17XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTYxOlx0cmV0dXJuIHpsMzA3M3hfY2hhbl9yZWZfcHJpb19nZXQoY2hhbiwgcmVmKSAhPSBaTF9EUExMX1JFRl9QUklPX05PTkU7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTYyLX1cbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTY0LS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjE2NTogKiB6bDMwNzN4X2NoYW5fbG9ja19zdGF0ZV9nZXQgLSBnZXQgRFBMTCBjaGFubmVsIGxvY2sgc3RhdGVcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xNjYtICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xNjktICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTcwOnN0YXRpYyBpbmxpbmUgdTggemwzMDczeF9jaGFuX2xvY2tfc3RhdGVfZ2V0KGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTcxLXtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTc1LS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjE3NjogKiB6bDMwNzN4X2NoYW5faXNfbG9ja2VkIC0gY2hlY2sgaWYgY2hhbm5lbCBpcyBsb2NrZWQgdG8gYSByZWZlcmVuY2VcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xNzctICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xODAtICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTgxOnN0YXRpYyBpbmxpbmUgYm9vbCB6bDMwNzN4X2NoYW5faXNfbG9ja2VkKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTgyLXtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxODM6XHR1OCBsb2NrX3N0YXRlID0gemwzMDczeF9jaGFuX2xvY2tfc3RhdGVfZ2V0KGNoYW4pO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE4NC1cdHJldHVybiBsb2NrX3N0YXRlID09IFpMX0RQTExfTU9OX1NUQVRVU19TVEFURV9MT0NLO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xODctLyoqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTg4OiAqIHpsMzA3M3hfY2hhbl9tb2RlX2lzX2F1dG8gLSBjaGVjayBpZiBjaGFubmVsIGlzIGluIGF1dG9tYXRpYyBtb2RlXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTg5LSAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTkyLSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjE5MzpzdGF0aWMgaW5saW5lIGJvb2wgemwzMDczeF9jaGFuX21vZGVfaXNfYXV0byhjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE5NC17XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTk1Olx0cmV0dXJuIHpsMzA3M3hfY2hhbl9tb2RlX2dldChjaGFuKSA9PSBaTF9EUExMX01PREVfUkVGU0VMX01PREVfQVVUTztcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xOTYtfVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xOTgtLyoqXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDE5MgoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDE1NDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhY2hpbmcgdGhlIFBUUCBGdW5jdGlvbmFsaXR5IGluIHRoZSB6bDMwNzN4IERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBEUExMIGRyaXZlciwgYHpsMzA3M3hgLiBNeSBmaXJzdCB0aG91Z2h0IGlzLCAmIzM0O0NhbiBJIHJlYWNoIGl0IHZpYSBzeXNmcz8mIzM0OyBJdCByZWdpc3RlcnMgYm90aCBJMkMgYW5kIFNQSSBkcml2ZXJzLCB3aGljaCBpcyBwcm9taXNpbmcuIEkyQyBpcyBlYXN5IGVub3VnaCDigJMgSSBjYW4gaW5zdGFudGlhdGUgYSBkZXZpY2Ugd2l0aCBgZWNobyB6bDMwNzN4ICZndDsgL3N5cy9idXMvaTJjL2RldmljZXMvaTJjLTAvbmV3X2RldmljZWAuIFdpdGggU1BJIEkgY2FuIHVzZSBzeXNmcywgb3Igc3BpZGV2LCBidXQgYWN0dWFsbHkgc3l6a2FsbGVyJiMzOTtzIGdvdCBtZSBjb3ZlcmVkLCBhcyBpdCBjYW4gaW5qZWN0IEkyQyBhbmQgU1BJIGRldmljZXMgdGhyb3VnaCBpdHMgcHNldWRvLWRldmljZXMgb3IgZGV2aWNlIHRyZWUgb3ZlcmxheXMuCgpBaGEhIEl0JiMzOTtzIGEgUFRQIGNsb2NrLCB0b28uIFRoYXQgbWVhbnMgSSBjYW4gaW50ZXJhY3Qgd2l0aCBpdCB0aHJvdWdoIGAvZGV2L3B0cFhgIHVzaW5nIGBpb2N0bGBzIGxpa2UgYFBUUF9DTE9DS19HRVRFWFRUU2AsIGBQVFBfU1lTX09GRlNFVGAsIGBQVFBfQ0xPQ0tfQURKVElNRWAsIGFuZCBzbyBvbi4gVGhpcyBwYXRjaCBzcGVjaWZpY2FsbHkgYWRkcyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgYHpsMzA3M3hgIGRyaXZlci4gSSYjMzk7dmUgZ290IGEgbGlzdCBvZiBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gYWRkZWQ6IGB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXRgLCBgemwzMDczeF9jaGFuX3RvZF9jdHJsYCwgYHpsMzA3M3hfY2hhbl90b2RfcmVhZGAsIGB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlYCwgYHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0YCwgYHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0YCwgYHpsMzA3M3hfY2hhbl90aWVfd3JpdGVgLCBgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXBgLCBgemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0YCwgYHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0YCwgYHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwYCwgYHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZWAsIGB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmVgLCBgemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZWAsIGB6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlYCwgYHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXJgLCBhbmQgYHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlcmAuCgpSaWdodCwgdGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgaWYgdGhlIGRldmljZSBpcyBpbnN0YW50aWF0ZWQgYW5kIHRoZSBQVFAgY2xvY2sgaXMgcmVnaXN0ZXJlZC4gSXQmIzM5O3MgYW4gSTJDL1NQSSBkZXZpY2UsIHNvIHN5emthbGxlciBzaG91bGQgYmUgYWJsZSB0byBnZXQgdGhpcyBkb25lIGZvciBtZS4gTm93LCB0aGUgdHJpY2sgaXMgdG8gZmlndXJlIG91dCB3aGF0IHRvIGZvY3VzIG9uLgoKU28gbGV0JiMzOTtzIGV4dHJhY3QgdGhlIGtleSBmdW5jdGlvbnMgaGVyZTogYHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NGAsIGB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NGAsIGB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcGAsIGB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVgLCBgemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lYCwgYHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2VgLCBgemwzMDczeF9kcGxsX3B0cF9nZXRtYXhwaGFzZWAsIGB6bDMwNzN4X2NoYW5fdG9kX3JlYWRgLCBgemwzMDczeF9jaGFuX3RvZF93cml0ZWAsIGB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdGAsIGB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldGAsIGB6bDMwNzN4X2NoYW5fdGllX3dyaXRlYCwgYHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwYC4KCk9rYXksIEkgbmVlZCB0byBzZWUgaG93IHRoZXkmIzM5O3JlIGV4cG9zZWQuIFdoaWxlIGB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcGAgaXMgc3RhdGljLCB0aGUgcHJvbXB0IHNheXMgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucy4gSG93ZXZlciwgaXQmIzM5O3MgYSBzaWduaWZpY2FudCBmdW5jdGlvbiwgYW5kIGl0JiMzOTtzIG5vdCBpbmxpbmVkLiBGaW5lLCBJJiMzOTtsbCBpbmNsdWRlIGl0LiBBbHNvLCB0aGUgZnVuY3Rpb25zIGZyb20gYGNoYW4uY2Agc2hvdWxkIGJlIGluY2x1ZGVkOiBgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0YCwgYHpsMzA3M3hfY2hhbl90b2RfcmVhZGAsIGB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlYCwgYHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0YCwgYHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0YCwgYHpsMzA3M3hfY2hhbl90aWVfd3JpdGVgLCBhbmQgYHpsMzA3M3gKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaTDMwNzNYJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTItXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnOjM6Y29uZmlnIFpMMzA3M1hcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctNC1cdHRyaXN0YXRlIFwmIzM0O01pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXNcJiMzNDsgaWYgQ09NUElMRV9URVNUXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZy0xNi1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWc6MTc6Y29uZmlnIFpMMzA3M1hfSTJDXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTE4LVx0dHJpc3RhdGUgXCYjMzQ7STJDIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1wmIzM0O1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctMjgtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnOjI5OmNvbmZpZyBaTDMwNzNYX1NQSVxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZy0zMC1cdHRyaXN0YXRlIFwmIzM0O1NQSSBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzA4MwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIFpMMzA3M1ggS2NvbmZpZyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZ2V0IGEgcmVhbGx5IGdvb2QgaGFuZGxlIG9uIGhvdyB0aGUgWkwzMDczWCBpcyBjb25maWd1cmVkLiBTbywgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQmIzM5O3MgcHVsbCB1cCB0aGUgZnVsbCBLY29uZmlnIGZpbGUuIEkmIzM5O20gbm90IGdvaW5nIHRvIHNraW07IEkgbmVlZCBhIGNvbXByZWhlbnNpdmUgb3ZlcnZpZXcuIEkgd2FudCB0byB1bmRlcnN0YW5kICpldmVyeSogb3B0aW9uLCBkZXBlbmRlbmN5LCBhbmQgZGVmYXVsdCBzZXR0aW5nLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGFib3V0IGZpbmRpbmcgb25lIHNwZWNpZmljIHRoaW5nOyBpdCYjMzk7cyBhYm91dCBidWlsZGluZyBhIHNvbGlkLCBob2xpc3RpYyB1bmRlcnN0YW5kaW5nIG9mIHRoZSBtb2R1bGUmIzM5O3MgY29uZmlndXJhYmlsaXR5LiBXZSYjMzk7cmUgZ29pbmcgdG8gdXNlIHRoaXMgYXMgdGhlIGZvdW5kYXRpb24gZm9yIHRoZSBuZXh0IHN0YWdlIG9mIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdFxuICAgMzpcdGNvbmZpZyBaTDMwNzNYXG4gICA0Olx0XHR0cmlzdGF0ZSBcJiMzNDtNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRSBkZXZpY2VzXCYjMzQ7IGlmIENPTVBJTEVfVEVTVFxuICAgNTpcdFx0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IFBUUF8xNTg4X0NMT0NLXG4gICA2Olx0XHRzZWxlY3QgRFBMTFxuICAgNzpcdFx0c2VsZWN0IE5FVF9ERVZMSU5LXG4gICA4Olx0XHRzZWxlY3QgUkVHTUFQXG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIE1pY3JvY2hpcCBBenVyaXRlIGZhbWlseSBEUExML1BUUC9TeW5jRVxuICAxMTpcdFx0ICBkZXZpY2VzIHRoYXQgc3VwcG9ydCB1cCB0byA1IGluZGVwZW5kZW50IERQTEwgY2hhbm5lbHMsXG4gIDEyOlx0XHQgIDEwIGlucHV0IHBpbnMgYW5kIHVwIHRvIDIwIG91dHB1dCBwaW5zLlxuICAxMzpcdFxuICAxNDpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlXG4gIDE1Olx0XHQgIHdpbGwgYmUgY2FsbGVkIHpsMzA3M3guXG4gIDE2Olx0XG4gIDE3Olx0Y29uZmlnIFpMMzA3M1hfSTJDXG4gIDE4Olx0XHR0cmlzdGF0ZSBcJiMzNDtJMkMgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzXCYjMzQ7XG4gIDE5Olx0XHRkZXBlbmRzIG9uIEkyQyBcdTAwMjZcdTAwMjYgTkVUIFx1MDAyNlx1MDAyNiBQVFBfMTU4OF9DTE9DS1xuICAyMDpcdFx0c2VsZWN0IFJFR01BUF9JMkNcbiAgMjE6XHRcdHNlbGVjdCBaTDMwNzNYXG4gIDIyOlx0XHRoZWxwXG4gIDIzOlx0XHQgIFRoaXMgaXMgSTJDIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0VcbiAgMjQ6XHRcdCAgZGV2aWNlcy5cbiAgMjU6XHRcbiAgMjY6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXG4gIDI3Olx0XHQgIGJlIGNhbGxlZCB6bDMwNzN4X2kyYy5cbiAgMjg6XHRcbiAgMjk6XHRjb25maWcgWkwzMDczWF9TUElcbiAgMzA6XHRcdHRyaXN0YXRlIFwmIzM0O1NQSSBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcJiMzNDtcbiAgMzE6XHRcdGRlcGVuZHMgb24gTkVUIFx1MDAyNlx1MDAyNiBTUEkgXHUwMDI2XHUwMDI2IFBUUF8xNTg4X0NMT0NLXG4gIDMyOlx0XHRzZWxlY3QgUkVHTUFQX1NQSVxuICAzMzpcdFx0c2VsZWN0IFpMMzA3M1hcbiAgMzQ6XHRcdGhlbHBcbiAgMzU6XHRcdCAgVGhpcyBpcyBTUEkgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRVxuICAzNjpcdFx0ICBkZXZpY2VzLlxuICAzNzpcdFxuICAzODpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcbiAgMzk6XHRcdCAgYmUgY2FsbGVkIHpsMzA3M3hfc3BpLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3OTA5CgkJCQkJCQlvdXRwdXQ6IDQxOQoJCQkJCQkJdGhvdWdodHM6IDU0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBaTDMwNzNYIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBoYW5kbGUgb24gdGhpcyBwYXRjaC4gSSYjMzk7bSBzZWVpbmcgY29uZmlndXJhdGlvbnMgZm9yIGBaTDMwNzNYYCwgYFpMMzA3M1hfSTJDYCwgYW5kIGBaTDMwNzNYX1NQSWAuIFJpZ2h0IGF3YXksIHRoZSBkZXBlbmRlbmNpZXMganVtcCBvdXQ6IGBORVRgLCBgUFRQXzE1ODhfQ0xPQ0tgLCBgSTJDYCwgYFNQSWAsIGBEUExMYCwgYE5FVF9ERVZMSU5LYCwgYW5kIGBSRUdNQVBgLiBCYXNlZCBvbiB0aGlzLCBJIG5lZWQgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBgWkwzMDczWF9JMkNgLCBgWkwzMDczWF9TUElgLCB0aGUgUFRQIGNsb2NrIGZ1bmN0aW9uYWxpdHkgKGBQVFBfMTU4OF9DTE9DS2ApLCB0aGUgRFBMTCBmdW5jdGlvbmFsaXR5IChgRFBMTGApLCBhbmQsIG9mIGNvdXJzZSwgdGhlIHVuZGVybHlpbmcgYEkyQ2AgYW5kIGBTUElgIHByb3RvY29scy4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUga2V5IGZ1bmN0aW9ucy4gSSYjMzk7dmUgY29tcGlsZWQgYSBsaXN0IHRoYXQgSSB3YW50IHRvIGtlZXAgaW4gbWluZCwgYW5kIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2Ugb2YgZWFjaDoKCiogICBgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0YAoqICAgYHpsMzA3M3hfY2hhbl90b2RfcmVhZGAKKiAgIGB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlYAoqICAgYHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0YAoqICAgYHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0YAoqICAgYHpsMzA3M3hfY2hhbl90aWVfd3JpdGVgCiogICBgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXBgCiogICBgemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0YAoqICAgYHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0YAoqICAgYHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwYAoqICAgYHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZWAKKiAgIGB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmVgCiogICBgemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZWAKKiAgIGB6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlYAoKV2FpdCBhIG1pbnV0ZSwgYHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwYCBpcyBtYXJrZWQgYXMgYHN0YXRpY2AsIGJ1dCBpdCYjMzk7cyBub3QgYW4gQVBJIGVudHJ5cG9pbnQuIFRoYXQgc2FpZCwgaXQmIzM5O3MgY2FsbGVkIGJ5IGB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVgLiBJdCYjMzk7cyBmaW5lIHRvIGluY2x1ZGUgaXQgaGVyZSwgYXMgaXQmIzM5O3MgcGFydCBvZiB0aGUgZmxvdy4KClRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLCBsZXQmIzM5O3MgZG91YmxlIGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciBuZXcgZnVuY3Rpb25zOgoKKiAgIGB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyYAoqICAgYHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlcmAKCkFscmlnaHQsIEkmIzM5O20gY29uZmlkZW50IG5vdy4gVGhpcyBwYXRjaCBpcyAqZGVmaW5pdGVseSogd29ydGggZnV6emluZy4gVGhlIG1haW4gdGFrZWF3YXkgaXMgdGhlIGFkZGl0aW9uIG9mIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBkcml2ZXIuIFRoaXMgaW50cm9kdWNlcyBuZXcgaW9jdGxzIHRoYXQgd2lsbCBiZSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBgL2Rldi9wdHBYYC4gVGhpcyBpcyB3aGVyZSBJIGNhbiBzdGFydCBsb29raW5nIGZvciB2dWxuZXJhYmlsaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaTDMwNzNYJiMzNDssCiAgICAmIzM0O1pMMzA3M1hfSTJDJiMzNDssCiAgICAmIzM0O1pMMzA3M1hfU1BJJiMzNDssCiAgICAmIzM0O1BUUF8xNTg4X0NMT0NLJiMzNDssCiAgICAmIzM0O0RQTEwmIzM0OywKICAgICYjMzQ7STJDJiMzNDssCiAgICAmIzM0O1NQSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3psMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fdG9kX3JlYWQmIzM0OywKICAgICYjMzQ7emwzMDczeF9jaGFuX3RvZF93cml0ZSYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fdGllX3dyaXRlJiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl9waGFzZV9zdGVwJiMzNDssCiAgICAmIzM0O3psMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUmIzM0OywKICAgICYjMzQ7emwzMDczeF9kcGxsX3B0cF9hZGpmaW5lJiMzNDssCiAgICAmIzM0O3psMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2UmIzM0OywKICAgICYjMzQ7emwzMDczeF9kcGxsX3B0cF9nZXRtYXhwaGFzZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciAoemwzMDczeCkuIFRoaXMgZXhwb3NlcyBuZXcgZnVuY3Rpb25hbGl0eSB0byB1c2Vyc3BhY2UgdmlhIHRoZSBQVFAgc3Vic3lzdGVtIChlLmcuLCAvZGV2L3B0cFggaW9jdGxzKS4gVGhlIGRyaXZlciBpcyBhbiBJMkMvU1BJIGRldmljZSBkcml2ZXIsIHdoaWNoIGNhbiBiZSBpbnN0YW50aWF0ZWQgYW5kIGZ1enplZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaTDMwNzNYJiMzNDssCiAgICAmIzM0O1pMMzA3M1hfSTJDJiMzNDssCiAgICAmIzM0O1pMMzA3M1hfU1BJJiMzNDssCiAgICAmIzM0O1BUUF8xNTg4X0NMT0NLJiMzNDssCiAgICAmIzM0O0RQTEwmIzM0OywKICAgICYjMzQ7STJDJiMzNDssCiAgICAmIzM0O1NQSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3psMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fdG9kX3JlYWQmIzM0OywKICAgICYjMzQ7emwzMDczeF9jaGFuX3RvZF93cml0ZSYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fdGllX3dyaXRlJiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl9waGFzZV9zdGVwJiMzNDssCiAgICAmIzM0O3psMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUmIzM0OywKICAgICYjMzQ7emwzMDczeF9kcGxsX3B0cF9hZGpmaW5lJiMzNDssCiAgICAmIzM0O3psMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2UmIzM0OywKICAgICYjMzQ7emwzMDczeF9kcGxsX3B0cF9nZXRtYXhwaGFzZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciAoemwzMDczeCkuIFRoaXMgZXhwb3NlcyBuZXcgZnVuY3Rpb25hbGl0eSB0byB1c2Vyc3BhY2UgdmlhIHRoZSBQVFAgc3Vic3lzdGVtIChlLmcuLCAvZGV2L3B0cFggaW9jdGxzKS4gVGhlIGRyaXZlciBpcyBhbiBJMkMvU1BJIGRldmljZSBkcml2ZXIsIHdoaWNoIGNhbiBiZSBpbnN0YW50aWF0ZWQgYW5kIGZ1enplZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODo0MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjQxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgUFRQIGNsb2NrIHN1cHBvcnQgdG8gdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyLiBJdCBpbnRyb2R1Y2VzIGZ1bmN0aW9ucyB0byByZWFkL3dyaXRlIFRpbWUgb2YgRGF5IChUb0QpIHJlZ2lzdGVycywgYWRqdXN0IHBoYXNlLCBhZGp1c3QgZnJlcXVlbmN5LCBhbmQgcmVnaXN0ZXJzIGEgUFRQIGNsb2NrIGRldmljZSB1c2luZyBgcHRwX2Nsb2NrX3JlZ2lzdGVyYC4gQWxsIG5ldyB2YXJpYWJsZXMgYW5kIHN0cnVjdHVyZXMgKHN1Y2ggYXMgYHN0cnVjdCB0aW1lc3BlYzY0YCwgYHN5bnRoX21hc2tgLCBhbmQgYHN0cnVjdCBwdHBfY2xvY2tfaW5mb2ApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIG9yIHBhc3NlZCB0byBzdGFuZGFyZCBrZXJuZWwgQVBJcyB0aGF0IGhhbmRsZSBpbml0aWFsaXphdGlvbi4gVGhlcmUgYXJlIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgaXMgdGhlcmUgYW55IGNvbnRyb2wgZmxvdyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyAobGlrZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDAxMjk4NWQzMTAxYWNkY2EwN2JhOTBiNTVmYTQxZGZlNjZkYWRlN2YKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAxNCAwODo0MTowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWcgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnCmluZGV4IDViYmNhMTQwMDU4MTMuLmRhMTczMWFjZTE1ZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZwpAQCAtMiw3ICYjNDM7Miw3IEBACiAKIGNvbmZpZyBaTDMwNzNYCiAJdHJpc3RhdGUgJiMzNDtNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRSBkZXZpY2VzJiMzNDsgaWYgQ09NUElMRV9URVNUCi0JZGVwZW5kcyBvbiBORVQKJiM0MzsJZGVwZW5kcyBvbiBORVQgJmFtcDsmYW1wOyBQVFBfMTU4OF9DTE9DSwogCXNlbGVjdCBEUExMCiAJc2VsZWN0IE5FVF9ERVZMSU5LCiAJc2VsZWN0IFJFR01BUApAQCAtMTYsNyAmIzQzOzE2LDcgQEAgY29uZmlnIFpMMzA3M1gKIAogY29uZmlnIFpMMzA3M1hfSTJDCiAJdHJpc3RhdGUgJiMzNDtJMkMgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzJiMzNDsKLQlkZXBlbmRzIG9uIEkyQyAmYW1wOyZhbXA7IE5FVAomIzQzOwlkZXBlbmRzIG9uIEkyQyAmYW1wOyZhbXA7IE5FVCAmYW1wOyZhbXA7IFBUUF8xNTg4X0NMT0NLCiAJc2VsZWN0IFJFR01BUF9JMkMKIAlzZWxlY3QgWkwzMDczWAogCWhlbHAKQEAgLTI4LDcgJiM0MzsyOCw3IEBAIGNvbmZpZyBaTDMwNzNYX0kyQwogCiBjb25maWcgWkwzMDczWF9TUEkKIAl0cmlzdGF0ZSAmIzM0O1NQSSBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXMmIzM0OwotCWRlcGVuZHMgb24gTkVUICZhbXA7JmFtcDsgU1BJCiYjNDM7CWRlcGVuZHMgb24gTkVUICZhbXA7JmFtcDsgU1BJICZhbXA7JmFtcDsgUFRQXzE1ODhfQ0xPQ0sKIAlzZWxlY3QgUkVHTUFQX1NQSQogCXNlbGVjdCBaTDMwNzNYCiAJaGVscApkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jCmluZGV4IDRlYzJjZjUzZGFkNDYuLmJhNGQzMDNkNDFiNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMKQEAgLTMsNiAmIzQzOzMsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2NsZWFudXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZWxheS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2Rldl9wcmludGsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3N0cmluZy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiAKQEAgLTE2Miw4ICYjNDM7MTYzLDggQEAgaW50IHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpCiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlCiAgKiBAaW5kZXg6IERQTEwgY2hhbm5lbCBpbmRleCB0byBmZXRjaCBzdGF0ZSBmb3IKICAqCi0gKiBSZWFkcyB0aGUgbW9kZV9yZWZzZWwgcmVnaXN0ZXIgYW5kIHJlZmVyZW5jZSBwcmlvcml0eSByZWdpc3RlcnMgZm9yCi0gKiB0aGUgZ2l2ZW4gRFBMTCBjaGFubmVsIGFuZCBzdG9yZXMgdGhlIHJhdyB2YWx1ZXMgZm9yIGxhdGVyIHVzZS4KJiM0MzsgKiBSZWFkcyB0aGUgbW9kZV9yZWZzZWwsIHN0YXR1cyBhbmQgcmVmZXJlbmNlIHByaW9yaXR5IHJlZ2lzdGVycyBmb3IKJiM0MzsgKiB0aGUgZ2l2ZW4gRFBMTCBjaGFubmVsIGFuZCBzdG9yZXMgdGhlIHZhbHVlcyBmb3IgbGF0ZXIgdXNlLgogICoKICAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgogICovCkBAIC0yMzQsNiAmIzQzOzIzNSwzMjIgQEAgY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqemwzMDczeF9jaGFuX3N0YXRlX2dldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LAogCXJldHVybiAmYW1wO3psZGV2LSZndDtjaGFuW2luZGV4XTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCAtIHdhaXQgZm9yIFRvRCBzZW1hcGhvcmUgdG8gY2xlYXIKJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleAomIzQzOyAqCiYjNDM7ICogQ2hlY2tzIHRoZSBUb0QgY29udHJvbCByZWdpc3RlciBzZW1hcGhvcmUgYml0LiBJZiBjbGVhciwgcmV0dXJucwomIzQzOyAqIGltbWVkaWF0ZWx5LiBPdGhlcndpc2UgcG9sbHMgdW50aWwgdGhlIGJpdCBpcyBjbGVhcmVkIGJ5IHRoZSBkZXZpY2UuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46CiYjNDM7ICogKiAwCQkJLSBzdWNjZXNzCiYjNDM7ICogKiAlLUVCVVNZCQktIHRpbWVvdXQKJiM0MzsgKiAqICUtRU9QTk9UU1VQUAktIHVua25vd24gY29tbWFuZCBkZXRlY3RlZAomIzQzOyAqICogbmVnYXRpdmUJCS0gb3RoZXIgZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IHRpbWVvdXQ7CiYjNDM7CXU4IHRvZF9jdHJsOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF9yZWFkX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksICZhbXA7dG9kX2N0cmwpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CWlmICghKHRvZF9jdHJsICZhbXA7IFpMX0RQTExfVE9EX0NUUkxfU0VNKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlzd2l0Y2ggKEZJRUxEX0dFVChaTF9EUExMX1RPRF9DVFJMX0NNRCwgdG9kX2N0cmwpKSB7CiYjNDM7CWNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFo6CiYjNDM7CQl0aW1lb3V0ID0gWkxfUE9MTF9UT0RfV1JfVElNRU9VVF9VUzsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX0NVUlJFTlQ6CiYjNDM7CWNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFo6CiYjNDM7CQl0aW1lb3V0ID0gWkxfUE9MTF9UT0RfUkRfVElNRU9VVF9VUzsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSwKJiM0MzsJCQkJICBaTF9EUExMX1RPRF9DVFJMX1NFTSwgdGltZW91dCk7CiYjNDM7CiYjNDM7CXJldHVybiByYyA9PSAtRVRJTUVET1VUID8gLUVCVVNZIDogcmM7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl90b2RfY3RybCAtIGlzc3VlIFRvRCBjb21tYW5kCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAY21kOiBUb0QgY29tbWFuZCB0byBleGVjdXRlCiYjNDM7ICoKJiM0MzsgKiBXcml0ZXMgdGhlIHNlbWFwaG9yZSBhbmQgY29tbWFuZCB0byBkcGxsX3RvZF9jdHJsLiBUaGUgY2FsbGVyIG11c3QKJiM0MzsgKiBlbnN1cmUgdGhlIGRldmljZSBpcyByZWFkeSAoc2VtYXBob3JlIGNsZWFyKSBiZWZvcmUgY2FsbGluZyBhbmQKJiM0MzsgKiBtdXN0IHdhaXQgZm9yIGNvbXBsZXRpb24gaWYgbmVlZGVkLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHU4IGNtZCkKJiM0Mzt7CiYjNDM7CXJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksCiYjNDM7CQkJCVpMX0RQTExfVE9EX0NUUkxfU0VNIHwgY21kKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9yZWFkIC0gcmVhZCBUb0QgcmVnaXN0ZXJzIGFmdGVyIGlzc3VpbmcgYSBjb21tYW5kCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAbmV4dF9oejogaWYgdHJ1ZSwgcmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIejsgb3RoZXJ3aXNlIHJlYWQgY3VycmVudAomIzQzOyAqIEB0czogdGltZXNwZWMgdG8gc3RvcmUgdGhlIHJlc3VsdAomIzQzOyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nCiYjNDM7ICoKJiM0MzsgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cywKJiM0MzsJCQkgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKQomIzQzO3sKJiM0MzsJdTMyIG5zZWM7CiYjNDM7CXU2NCBzZWM7CiYjNDM7CXU4IGNtZDsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlpZiAobmV4dF9oeikKJiM0MzsJCWNtZCA9IFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaOwomIzQzOwllbHNlCiYjNDM7CQljbWQgPSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UOwomIzQzOwomIzQzOwkvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVG9EIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqLwomIzQzOwlyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXB0cF9yZWFkX3N5c3RlbV9wcmV0cyhzdHMpOwomIzQzOwlyYyA9IHpsMzA3M3hfY2hhbl90b2RfY3RybCh6bGRldiwgY2gsIGNtZCk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwlwdHBfcmVhZF9zeXN0ZW1fcG9zdHRzKHN0cyk7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF9yZWFkX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksICZhbXA7c2VjKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwkvKiBIVyBuYW5vc2Vjb25kcyBhcmUgYWx3YXlzIGluIFswLCBOU0VDX1BFUl9TRUMpIHJhbmdlICovCiYjNDM7CXJjID0gemwzMDczeF9yZWFkX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgJmFtcDtuc2VjKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwl0cy0mZ3Q7dHZfc2VjID0gc2VjOwomIzQzOwl0cy0mZ3Q7dHZfbnNlYyA9IG5zZWM7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlIC0gd3JpdGUgVG9EIHJlZ2lzdGVycyBhbmQgdHJpZ2dlciAxIEh6IHVwZGF0ZQomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQHRzOiB0aW1lIHRvIHNldAomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS4KJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cykKJiM0Mzt7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi8KJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfU0VDKGNoKSwgdHMudHZfc2VjKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCB0cy50dl9uc2VjKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9jdHJsKHpsZGV2LCBjaCwKJiM0MzsJCQkJICAgICBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWik7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0IC0gYXRvbWljIFRvRCByZWFkLW1vZGlmeS13cml0ZSB3aXRoIHJvbGxvdmVyIGd1YXJkCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCB0byBhcHBseQomIzQzOyAqCiYjNDM7ICogUmVhZHMgdGhlIG5leHQtSHogVG9EIGFuZCBjdXJyZW50IFRvRCwgdGhlbiBjaGVja3Mgd2hldGhlciBlbm91Z2ggdGltZQomIzQzOyAqIHJlbWFpbnMgYmVmb3JlIHRoZSBuZXh0IDEgSHogcm9sbG92ZXIgdG8gc2FmZWx5IGNvbXBsZXRlIHRoZSB3cml0ZS4KJiM0MzsgKiBSZS1yZWFkcyBpZiB0aGUgMSBIeiB0aWNrIGNyb3NzZWQgYmV0d2VlbiB0aGUgdHdvIHJlYWRzIG9yIGlmIGxlc3MKJiM0MzsgKiB0aGFuIDIwIG1zIHJlbWFpbnMgYmVmb3JlIHRoZSBuZXh0IHJvbGxvdmVyLiBBcHBsaWVzIEBkZWx0YSBhbmQgd3JpdGVzCiYjNDM7ICogdGhlIHJlc3VsdCBiYWNrLgomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS4KJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKQomIzQzO3sKJiM0MzsjZGVmaW5lIFpMX1RPRF9NQVhfUkVUUklFUwkyMAomIzQzOwlzdGF0aWMgY29uc3QgbG9uZyB0aHJlc2hvbGRfbnMgPSAyMCAqIE5TRUNfUEVSX01TRUM7CiYjNDM7CXN0cnVjdCB0aW1lc3BlYzY0IHRzX25leHQsIHRzX2N1ciwgZGlmZjsKJiM0MzsJaW50IHJjLCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgWkxfVE9EX01BWF9SRVRSSUVTOyBpJiM0MzsmIzQzOykgewomIzQzOwkJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCB0cnVlLCAmYW1wO3RzX25leHQsIE5VTEwpOwomIzQzOwkJaWYgKHJjKQomIzQzOwkJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJCXJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgZmFsc2UsICZhbXA7dHNfY3VyLCBOVUxMKTsKJiM0MzsJCWlmIChyYykKJiM0MzsJCQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CQkvKiBFbnN1cmUgdGhlIDEgSHogdGljayBkaWQgbm90IGNyb3NzIGJldHdlZW4gdGhlIHR3byByZWFkcwomIzQzOwkJICogYW5kIHRoYXQgZW5vdWdoIG1hcmdpbiByZW1haW5zIHRvIGNvbXBsZXRlIHRoZSB3cml0ZS4KJiM0MzsJCSAqLwomIzQzOwkJZGlmZiA9IHRpbWVzcGVjNjRfc3ViKHRzX25leHQsIHRzX2N1cik7CiYjNDM7CQlpZiAoZGlmZi50dl9zZWMgJmd0OyAwIHx8CiYjNDM7CQkgICAgKCFkaWZmLnR2X3NlYyAmYW1wOyZhbXA7IGRpZmYudHZfbnNlYyAmZ3Q7PSB0aHJlc2hvbGRfbnMpKQomIzQzOwkJCWJyZWFrOwomIzQzOwl9CiYjNDM7CWlmIChpID09IFpMX1RPRF9NQVhfUkVUUklFUykgewomIzQzOwkJZGV2X3dhcm4oemxkZXYtJmd0O2RldiwKJiM0MzsJCQkgJiMzNDtEUExMJXUgVG9EIGFkanVzdCBmYWlsZWQgdG8gZ2V0IHN0YWJsZSBtYXJnaW5cbiYjMzQ7LAomIzQzOwkJCSBjaCk7CiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEFwcGx5IGRlbHRhIHRvIHRoZSBuZXh0LUh6IFRvRCAqLwomIzQzOwl0c19uZXh0ID0gdGltZXNwZWM2NF9hZGQodHNfbmV4dCwgZGVsdGEpOwomIzQzOwlpZiAoIXRpbWVzcGVjNjRfdmFsaWRfc2V0dG9kKCZhbXA7dHNfbmV4dCkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkZXYsIGNoLCB0c19uZXh0KTsKJiM0MzsjdW5kZWYgWkxfVE9EX01BWF9SRVRSSUVTCiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0IC0gd3JpdGUgZGVsdGEgZnJlcXVlbmN5IG9mZnNldCB0byBoYXJkd2FyZQomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQG9mZnNldDogZnJlcXVlbmN5IG9mZnNldCBpbiAyXi00OCBzdGVwcwomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3QgaG9sZCB0aGUgcGVyLURQTEwgbG9jay4KJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBvZmZzZXQpCiYjNDM7ewomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX0RGX09GRlNFVChjaCksIG9mZnNldCk7CiYjNDM7CWlmICghcmMpCiYjNDM7CQl6bGRldi0mZ3Q7Y2hhbltjaF0uZGZfb2Zmc2V0ID0gb2Zmc2V0OwomIzQzOwomIzQzOwlyZXR1cm4gcmM7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl90aWVfd3JpdGUgLSBhZGp1c3QgRFBMTCBwaGFzZSB1c2luZyBUSUUgd3JpdGUKJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleAomIzQzOyAqIEBkZWx0YV9uczogcGhhc2UgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcyAobXVzdCBiZSBpbiAoLTFzLCAxcykpCiYjNDM7ICoKJiM0MzsgKiBDb252ZXJ0cyBuYW5vc2Vjb25kcyB0byBUSUUgdW5pdHMgKDAuMDEgcHMpIGFuZCB3cml0ZXMgVElFIGRhdGEKJiM0MzsgKiB0byB0aGUgc3BlY2lmaWVkIGNoYW5uZWwuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKQomIzQzO3sKJiM0MzsJczY0IHRpZV9kYXRhOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3psZGV2LSZndDt0aWVfbG9jayk7CiYjNDM7CiYjNDM7CS8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUSUUgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCiYjNDM7CXJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLAomIzQzOwkJCQkgIFpMX0RQTExfVElFX0NUUkxfT1AsCiYjNDM7CQkJCSAgWkxfUE9MTF9USUVfV1JfVElNRU9VVF9VUyk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJLyogQ29udmVydCBucyB0byBUSUUgdW5pdHMgKDAuMDEgcHMgPSAxMF4tMTQgcykgKi8KJiM0MzsJdGllX2RhdGEgPSBkZWx0YV9ucyAqIDEwMDAwMExMOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfREFUQShjaCksIHRpZV9kYXRhKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0ssIEJJVChjaCkpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTCwKJiM0MzsJCQkJWkxfRFBMTF9USUVfQ1RSTF9PUF9XUik7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwIC0gZXhlY3V0ZSBvbmUgb3V0cHV0IHBoYXNlIHN0ZXAgb3BlcmF0aW9uCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAb3V0X21hc2s6IGJpdG1hc2sgb2Ygb3V0cHV0cyB0byBzdGVwCiYjNDM7ICogQHN0ZXBfY3ljbGVzOiBwaGFzZSBzdGVwIGluIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcwomIzQzOyAqIEB0b2Rfc3RlcDogYWxzbyBzdGVwIHRoZSBUb0QgY291bnRlcgomIzQzOyAqCiYjNDM7ICogQWxsIG1hc2tlZCBvdXRwdXRzIG11c3QgdXNlIHN5bnRoZXNpemVycyBvZiB0aGUgc2FtZSBmcmVxdWVuY3kgc2luY2UKJiM0MzsgKiB0aGUgc3RlcCB2YWx1ZSBpcyBpbiBzeW50aGVzaXplciBjbG9jayBjeWNsZXMuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLAomIzQzOwkJCSAgICBib29sIHRvZF9zdGVwKQomIzQzO3sKJiM0MzsJdTggY3RybDsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRldi0mZ3Q7cGhhc2Vfc3RlcF9sb2NrKTsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgYW55IHByZXZpb3VzIHBoYXNlIHN0ZXAgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCiYjNDM7CXJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLAomIzQzOwkJCQkgIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AsCiYjNDM7CQkJCSAgWkxfUE9MTF9QSEFTRV9TVEVQX1RJTUVPVVRfVVMpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBLAomIzQzOwkJCSAgICAgICBzdGVwX2N5Y2xlcyk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3dyaXRlX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX01BU0ssIG91dF9tYXNrKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9OVU1CRVIsIDEpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CWN0cmwgPSBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfRFBMTCwgY2gpIHwKJiM0MzsJICAgICAgIEZJRUxEX1BSRVAoWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCwKJiM0MzsJCQkgIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfV1JJVEUpOwomIzQzOwlpZiAodG9kX3N0ZXApCiYjNDM7CQljdHJsIHw9IFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVA7CiYjNDM7CiYjNDM7CXJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTCwgY3RybCk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0IC0gY29tbWl0IERQTEwgY2hhbm5lbCBzdGF0ZSBjaGFuZ2VzIHRvIGhhcmR3YXJlCiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgKaW5kZXggZGM5YzZkOTViZGVlNy4uOTljM2I3MDg4ZjY3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaApAQCAtNSwxMCAmIzQzOzUsMTIgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3RkZGVmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3RpbWU2NC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7cmVncy5oJiMzNDsKIAomIzQzO3N0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcDsKIHN0cnVjdCB6bDMwNzN4X2RldjsKIAogLyoqCkBAIC00Miw2ICYjNDM7NDQsMjEgQEAgaW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgsCiBpbnQgemwzMDczeF9jaGFuX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7CiBpbnQgemwzMDczeF9jaGFuX25jb19tb2RlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7CiAKJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKTsKJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLAomIzQzOwkJCSAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsCiYjNDM7CQkJICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cyk7CiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICAgc3RydWN0IHRpbWVzcGVjNjQgdHMpOwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpOwomIzQzO2ludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsIGJvb2wgdG9kX3N0ZXApOwomIzQzOwomIzQzO2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldCk7CiYjNDM7CiYjNDM7aW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucyk7CiYjNDM7CiAvKioKICAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfZ2V0IC0gZ2V0IGNhY2hlZCBkZl9vZmZzZXQgdnMgdHJhY2tlZCByZWZlcmVuY2UKICAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGUKQEAgLTIwMCw2ICYjNDM7MjE3LDIxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6bDMwNzN4X2NoYW5fbW9kZV9pc19yZWZsb2NrKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pCiAJcmV0dXJuIHpsMzA3M3hfY2hhbl9tb2RlX2dldChjaGFuKSA9PSBaTF9EUExMX01PREVfUkVGU0VMX01PREVfUkVGTE9DSzsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZSAtIGNoZWNrIGlmIGNoYW5uZWwgbW9kZSBzdXBwb3J0cyBUSUUgd3JpdGUKJiM0MzsgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlCiYjNDM7ICoKJiM0MzsgKiBUSUUgd3JpdGUgaXMgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMgcmVnYXJkbGVzcyBvZiBsb2NrIHN0YXRlLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIFRJRSB3cml0ZSBpcyBzdXBwb3J0ZWQsIGZhbHNlIG90aGVyd2lzZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbAomIzQzO3psMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKQomIzQzO3sKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl9tb2RlX2lzX2F1dG8oY2hhbikgfHwKJiM0MzsJCXpsMzA3M3hfY2hhbl9tb2RlX2lzX3JlZmxvY2soY2hhbik7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB6bDMwNzN4X2NoYW5faXNfaG9fcmVhZHkgLSBjaGVjayBpZiBob2xkb3ZlciBpcyByZWFkeQogICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jCmluZGV4IDViMmQ3N2YyYzIyODguLjIzMGRmMDhlMjdjZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMKQEAgLTMyMiw3ICYjNDM7MzIyLDcgQEAgaW50IHpsMzA3M3hfd3JpdGVfdTQ4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsIHU2NCB2YWwpCiBpbnQgemwzMDczeF9wb2xsX3plcm9fdTgoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IHJlZywKIAkJCSB1OCBtYXNrLCB1bnNpZ25lZCBpbnQgdGltZW91dF91cykKIHsKLSNkZWZpbmUgWkxfUE9MTF9TTEVFUF9VUyAxMAomIzQzOwl1bnNpZ25lZCBpbnQgc2xlZXBfdXMgPSB0aW1lb3V0X3VzIC8gNTA7CiAJdW5zaWduZWQgaW50IHZhbDsKIAogCS8qIENoZWNrIHRoZSByZWdpc3RlciBpcyA4Yml0ICovCkBAIC0zMzYsNyAmIzQzOzMzNiw3IEBAIGludCB6bDMwNzN4X3BvbGxfemVyb191OChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLAogCXJlZyA9IFpMX1JFR19BRERSKHJlZykgJiM0MzsgWkxfUkFOR0VfT0ZGU0VUOwogCiAJcmV0dXJuIHJlZ21hcF9yZWFkX3BvbGxfdGltZW91dCh6bGRldi0mZ3Q7cmVnbWFwLCByZWcsIHZhbCwgISh2YWwgJmFtcDsgbWFzayksCi0JCQkJCVpMX1BPTExfU0xFRVBfVVMsIHRpbWVvdXRfdXMpOwomIzQzOwkJCQkJc2xlZXBfdXMsIHRpbWVvdXRfdXMpOwogfQogCiBpbnQgemwzMDczeF9tYl9vcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgb3BfcmVnLCB1OCBvcF92YWwsCkBAIC01MTEsNiAmIzQzOzUxMSwxMSBAQCB6bDMwNzN4X2Rldl9zdGF0ZV9mZXRjaChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KQogCWludCByYzsKIAl1OCBpOwogCiYjNDM7CXJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTSywKJiM0MzsJCQkgICAgICAmYW1wO3psZGV2LSZndDtvdXRfc3RlcF90aW1lX21hc2spOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiAJZm9yIChpID0gMDsgaSAmbHQ7IFpMMzA3M1hfTlVNX1JFRlM7IGkmIzQzOyYjNDM7KSB7CiAJCXJjID0gemwzMDczeF9yZWZfc3RhdGVfZmV0Y2goemxkZXYsIGkpOwogCQlpZiAocmMpIHsKQEAgLTEwMzQsNiAmIzQzOzEwMzksMTQgQEAgaW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpCiAJICogYW5kL29yIHBvbGxzIGFyZSByZXF1aXJlZCB0byBiZSBkb25lIGF0b21pY2FsbHkuCiAJICovCiAJcmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtJmd0O2RldiwgJmFtcDt6bGRldi0mZ3Q7bXVsdGlvcF9sb2NrKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtJmd0O2RldiwgcmMsCiYjNDM7CQkJCSAgICAgJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxuJiMzNDspOwomIzQzOwlyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi0mZ3Q7ZGV2LCAmYW1wO3psZGV2LSZndDtwaGFzZV9zdGVwX2xvY2spOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi0mZ3Q7ZGV2LCByYywKJiM0MzsJCQkJICAgICAmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XG4mIzM0Oyk7CiYjNDM7CXJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LSZndDtkZXYsICZhbXA7emxkZXYtJmd0O3RpZV9sb2NrKTsKIAlpZiAocmMpCiAJCXJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LSZndDtkZXYsIHJjLAogCQkJCSAgICAgJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxuJiMzNDspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oCmluZGV4IDc4ZGMyMDhmM2VlYTIuLjY3YzEwZTI1OTUxMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmgKQEAgLTI2LDYgJiM0MzsyNiwxMCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsOwogI2RlZmluZSBaTF9QT0xMX0hXUkVHX1RJTUVPVVRfVVMJKDUwICogVVNFQ19QRVJfTVNFQykKICNkZWZpbmUgWkxfUE9MTF9NQl9USU1FT1VUX1VTCQkoMzAgKiBVU0VDX1BFUl9NU0VDKQogI2RlZmluZSBaTF9QT0xMX1BIQVNFX0VSUl9USU1FT1VUX1VTCSg1MCAqIFVTRUNfUEVSX01TRUMpCiYjNDM7I2RlZmluZSBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VUwkoMzAwMCAqIFVTRUNfUEVSX01TRUMpCiYjNDM7I2RlZmluZSBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTCSgxMDAwICogVVNFQ19QRVJfTVNFQykKJiM0MzsjZGVmaW5lIFpMX1BPTExfVE9EX1JEX1RJTUVPVVRfVVMJKDMwICogVVNFQ19QRVJfTVNFQykKJiM0MzsjZGVmaW5lIFpMX1BPTExfVE9EX1dSX1RJTUVPVVRfVVMJKDEwMDAgKiBVU0VDX1BFUl9NU0VDKQogCiBlbnVtIHpsMzA3M3hfZmxhZ3MgewogCVpMMzA3M1hfRkxBR19SRUZfUEhBU0VfQ09NUF8zMl9CSVQsCkBAIC01NSw2ICYjNDM7NTksOCBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8gewogICogQHJlZ21hcDogcmVnbWFwIHRvIGFjY2VzcyBkZXZpY2UgcmVnaXN0ZXJzCiAgKiBAaW5mbzogZGV0ZWN0ZWQgY2hpcCBpbmZvCiAgKiBAbXVsdGlvcF9sb2NrOiB0byBzZXJpYWxpemUgbXVsdGlwbGUgcmVnaXN0ZXIgb3BlcmF0aW9ucwomIzQzOyAqIEB0aWVfbG9jazogdG8gc2VyaWFsaXplIFRJRSB3cml0ZSBvcGVyYXRpb25zCiYjNDM7ICogQHBoYXNlX3N0ZXBfbG9jazogdG8gc2VyaWFsaXplIG91dHB1dCBwaGFzZSBzdGVwIG9wZXJhdGlvbnMKICAqIEByZWY6IGFycmF5IG9mIGlucHV0IHJlZmVyZW5jZXMmIzM5OyBpbnZhcmlhbnRzCiAgKiBAb3V0OiBhcnJheSBvZiBvdXRzJiMzOTsgaW52YXJpYW50cwogICogQHN5bnRoOiBhcnJheSBvZiBzeW50aHMmIzM5OyBpbnZhcmlhbnRzCkBAIC02Myw2ICYjNDM7NjksNyBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8gewogICogQGt3b3JrZXI6IHRocmVhZCBmb3IgcGVyaW9kaWMgd29yawogICogQHdvcms6IHBlcmlvZGljIHdvcmsKICAqIEBjbG9ja19pZDogY2xvY2sgaWQgb2YgdGhlIGRldmljZQomIzQzOyAqIEBvdXRfc3RlcF90aW1lX21hc2s6IG91dHB1dCBzdGVwLXRpbWUgbWFzayAoZGV2aWNlLWdsb2JhbCkKICAqIEBwaGFzZV9hdmdfZmFjdG9yOiBwaGFzZSBvZmZzZXQgbWVhc3VyZW1lbnQgYXZlcmFnaW5nIGZhY3RvcgogICogQGZyZXFfbW9uaXRvcjogaXMgZnJlcXVlbmN5IG1vbml0b3IgZW5hYmxlZAogICovCkBAIC03MSw2ICYjNDM7NzgsOCBAQCBzdHJ1Y3QgemwzMDczeF9kZXYgewogCXN0cnVjdCByZWdtYXAJCQkqcmVnbWFwOwogCWNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mbwkqaW5mbzsKIAlzdHJ1Y3QgbXV0ZXgJCQltdWx0aW9wX2xvY2s7CiYjNDM7CXN0cnVjdCBtdXRleAkJCXRpZV9sb2NrOwomIzQzOwlzdHJ1Y3QgbXV0ZXgJCQlwaGFzZV9zdGVwX2xvY2s7CiAKIAkvKiBJbnZhcmlhbnRzICovCiAJc3RydWN0IHpsMzA3M3hfcmVmCXJlZltaTDMwNzNYX05VTV9SRUZTXTsKQEAgLTg3LDYgJiM0Mzs5Niw3IEBAIHN0cnVjdCB6bDMwNzN4X2RldiB7CiAKIAkvKiBQZXItY2hpcCBwYXJhbWV0ZXJzICovCiAJdTY0CQkJY2xvY2tfaWQ7CiYjNDM7CXUxNgkJCW91dF9zdGVwX3RpbWVfbWFzazsKIAl1OAkJCXBoYXNlX2F2Z19mYWN0b3I7CiAJYm9vbAkJCWZyZXFfbW9uaXRvcjsKIH07CkBAIC0zMDgsNiAmIzQzOzMxOCwxOSBAQCB6bDMwNzN4X2Rldl9vdXRfaXNfZW5hYmxlZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCkKIAlyZXR1cm4gemwzMDczeF9zeW50aF9pc19lbmFibGVkKHN5bnRoKSAmYW1wOyZhbXA7IHpsMzA3M3hfb3V0X2lzX2VuYWJsZWQob3V0KTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZGV2X291dF9pc19zdGVwcGVkIC0gY2hlY2sgaWYgb3V0cHV0IGlzIGluIHN0ZXAtdGltZSBtYXNrCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGluZGV4OiBvdXRwdXQgaW5kZXgKJiM0MzsgKgomIzQzOyAqIFJldHVybjogdHJ1ZSBpZiBvdXRwdXQgaXMgYWZmZWN0ZWQgYnkgc3RlcC10aW1lIG9wZXJhdGlvbnMKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wKJiM0Mzt6bDMwNzN4X2Rldl9vdXRfaXNfc3RlcHBlZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCkKJiM0Mzt7CiYjNDM7CXJldHVybiAhISh6bGRldi0mZ3Q7b3V0X3N0ZXBfdGltZV9tYXNrICZhbXA7IEJJVChpbmRleCkpOwomIzQzO30KJiM0MzsKIC8qKgogICogemwzMDczeF9kZXZfb3V0X2RwbGxfZ2V0IC0gZ2V0IERQTEwgSUQgdGhlIG91dHB1dCBpcyBkcml2ZW4gYnkKICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jCmluZGV4IDgzYmQzMDI3ZGJhYTEuLmYyZTEzNzQ3NWI0MGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMKQEAgLTIsNiAmIzQzOzIsNyBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvYml0cy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NsZWFudXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9idWcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jb250YWluZXJfb2YuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZXZfcHJpbnRrLmgmZ3Q7CkBAIC0xMyw2ICYjNDM7MTQsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L25ldGxpbmsuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wcm9wZXJ0eS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wdHBfY2xvY2tfa2VybmVsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NwcmludGYuaCZndDsKIApAQCAtMjMxMyw0NSAmIzQzOzIzMTUsMzg0IEBAIHpsMzA3M3hfZHBsbF9pbml0X2ZpbmVfcGhhc2VfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpCiAJcmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19TWU5USF9QSEFTRV9TSElGVF9DVFJMLCAweDAxKTsKIH0KIAomIzQzOy8qIE1heGltdW0gZnJlcXVlbmN5IGFkanVzdG1lbnQ6ICYjNDM7LTElIG9mIG5vbWluYWwgaW4gcHBiICovCiYjNDM7I2RlZmluZSBaTDMwNzNYX0RQTExfUFRQX01BWF9BREoJMTAwMDAwMDAKJiM0MzsKIC8qKgotICogemwzMDczeF9kcGxsX2FsbG9jIC0gYWxsb2NhdGUgRFBMTCBkZXZpY2UKLSAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQotICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0IC0gcmVhZCBjdXJyZW50IHRpbWUgZnJvbSBUb0QgY291bnRlcnMKJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm8KJiM0MzsgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIGN1cnJlbnQgdGltZQomIzQzOyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nCiAgKgotICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywKJiM0MzsJCQkJICAgICAgIHN0cnVjdCB0aW1lc3BlYzY0ICp0cywKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKQomIzQzO3sKJiM0MzsJc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsCiYjNDM7CQkJCQkJICAgcHRwX2luZm8pOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZHBsbC0mZ3Q7ZGV2LCB6bGRwbGwtJmd0O2lkLCBmYWxzZSwgdHMsIHN0cyk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0IC0gc2V0IFRvRCBjb3VudGVycyB0byBnaXZlbiB0aW1lCiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvCiYjNDM7ICogQHRzOiB0aW1lc3BlYyB3aXRoIHRpbWUgdG8gc2V0CiAgKgotICogUmV0dXJuOiBwb2ludGVyIHRvIERQTEwgZGV2aWNlIG9uIHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgb24gZXJyb3IKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKICAqLwotc3RydWN0IHpsMzA3M3hfZHBsbCAqCi16bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sCiYjNDM7CQkJCSAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cykKIHsKLQlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLAomIzQzOwkJCQkJCSAgIHB0cF9pbmZvKTsKIAotCXpsZHBsbCA9IGt6YWxsb2Nfb2JqKCp6bGRwbGwpOwotCWlmICghemxkcGxsKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7emxkcGxsLSZndDtsb2NrKTsKIAotCXpsZHBsbC0mZ3Q7ZGV2ID0gemxkZXY7Ci0JemxkcGxsLSZndDtpZCA9IGNoOwotCW11dGV4X2luaXQoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwotCUlOSVRfTElTVF9IRUFEKCZhbXA7emxkcGxsLSZndDtwaW5zKTsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkcGxsLSZndDtkZXYsIHpsZHBsbC0mZ3Q7aWQsICp0cyk7CiYjNDM7fQogCi0JcmV0dXJuIHpsZHBsbDsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCAtIGFkanVzdCBzdWItc2Vjb25kIHRpbWUgdmlhIHBoYXNlIHN0ZXAKJiM0MzsgKiBAemxkcGxsOiBEUExMIGNoYW5uZWwKJiM0MzsgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcyAobXVzdCBiZSB3aXRoaW4gKC1OU0VDX1BFUl9TRUMsCiYjNDM7ICogICAgICAgICBOU0VDX1BFUl9TRUMpKQomIzQzOyAqCiYjNDM7ICogVXNlcyB0aGUgb3V0cHV0IHBoYXNlIHN0ZXAgbWVjaGFuaXNtIHdpdGggdG9kX3N0ZXA9MSB0byBhZGp1c3QgYm90aAomIzQzOyAqIHRoZSBvdXRwdXQgY2xvY2sgcGhhc2UgYW5kIHRoZSBUb0QgY291bnRlciBzaW11bHRhbmVvdXNseS4gVGhpcyBrZWVwcwomIzQzOyAqIG91dHB1dHMgYW5kIFRvRCBjb2hlcmVudC4gT25seSB2YWxpZCBmb3IgTkNPLgomIzQzOyAqCiYjNDM7ICogT3V0cHV0cyBhcmUgZ3JvdXBlZCBieSBzeW50aGVzaXplciBzaW5jZSB0aGUgcGhhc2Ugc3RlcCB2YWx1ZSBpcyBpbgomIzQzOyAqIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcy4gVGhlIGZpcnN0IHN5bnRoIGdyb3VwIHdpdGggZW5hYmxlZCBvdXRwdXRzCiYjNDM7ICogdXNlcyB0b2Rfc3RlcCB0byBhZGp1c3QgYm90aCBvdXRwdXRzIGFuZCB0aGUgVG9EIGNvdW50ZXIuIFJlbWFpbmluZwomIzQzOyAqIGdyb3VwcyBzdGVwIG91dHB1dHMgb25seS4gSWYgbm8gc3ludGggaGFzIGVuYWJsZWQgb3V0cHV0cywgdGhlIFRvRAomIzQzOyAqIGNvdW50ZXIgaXMgc3RlcHBlZCBhbG9uZSB1c2luZyBhbiBlbXB0eSBvdXRwdXQgbWFzayAodGhlIEZXIHVzZXMKJiM0MzsgKiB0aGUgZmlyc3QgZW5hYmxlZCBzeW50aCYjMzk7cyBwZXJpb2QgZm9yIHRoZSBjb252ZXJzaW9uKS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjoKJiM0MzsgKiAqICUwCQkJLSBzdWNjZXNzIChvciBwYXJ0aWFsIHN1Y2Nlc3MgaWYgYSBsYXRlciBzeW50aCBncm91cAomIzQzOyAqCQkJICBmYWlsZWQgYWZ0ZXIgdGhlIGZpcnN0IHdhcyBhbHJlYWR5IHN0ZXBwZWQpCiYjNDM7ICogKiAlLUVPUE5PVFNVUFAJLSBubyBzeW50aHMgYXZhaWxhYmxlCiYjNDM7ICogKiBuZWdhdGl2ZQkJLSBlcnJvcgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLAomIzQzOwkJCQkJICAgICAgIHM2NCBkZWx0YSkKJiM0Mzt7CiYjNDM7CXUxNiBzeW50aF9tYXNrW1pMMzA3M1hfTlVNX1NZTlRIU10gPSB7fTsKJiM0MzsJc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC0mZ3Q7ZGV2OwomIzQzOwljb25zdCBzdHJ1Y3QgemwzMDczeF9zeW50aCAqc3ludGg7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW47CiYjNDM7CXUzMiBmaXJzdF9zeW50aF9mcmVxID0gMDsKJiM0MzsJYm9vbCB0b2Rfc3RlcHBlZCA9IGZhbHNlOwomIzQzOwlzMzIgc3RlcF9jeWNsZXM7CiYjNDM7CXUzMiBzeW50aF9mcmVxOwomIzQzOwlpbnQgcmM7CiYjNDM7CXU4IGk7CiYjNDM7CiYjNDM7CS8qIEJ1aWxkIHBlci1zeW50aCBvdXRwdXQgbWFza3MgZnJvbSByZWdpc3RlcmVkIG91dHB1dCBwaW5zICovCiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkocGluLCAmYW1wO3psZHBsbC0mZ3Q7cGlucywgbGlzdCkgewomIzQzOwkJdTggb3V0X2lkLCBzeW50aF9pZDsKJiM0MzsKJiM0MzsJCWlmICh6bDMwNzN4X2RwbGxfaXNfaW5wdXRfcGluKHBpbikpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlvdXRfaWQgPSB6bDMwNzN4X291dHB1dF9waW5fb3V0X2dldChwaW4tJmd0O2lkKTsKJiM0MzsKJiM0MzsJCWlmICghemwzMDczeF9kZXZfb3V0X2lzX3N0ZXBwZWQoemxkZXYsIG91dF9pZCkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlzeW50aF9pZCA9IHpsMzA3M3hfZGV2X291dF9zeW50aF9nZXQoemxkZXYsIG91dF9pZCk7CiYjNDM7CQlpZiAoc3ludGhfaWQgJmd0Oz0gWkwzMDczWF9OVU1fU1lOVEhTKSB7CiYjNDM7CQkJZGV2X3dhcm4oemxkZXYtJmd0O2RldiwgJiMzNDtVbmV4cGVjdGVkIHN5bnRoIGlkIGZvciBPVVQldVxuJiMzNDssCiYjNDM7CQkJCSBvdXRfaWQpOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwkJc3ludGhfbWFza1tzeW50aF9pZF0gfD0gQklUKG91dF9pZCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogUHJvY2VzcyBlYWNoIHN5bnRoIGdyb3VwICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBaTDMwNzNYX05VTV9TWU5USFM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzeW50aCA9IHpsMzA3M3hfc3ludGhfc3RhdGVfZ2V0KHpsZGV2LCBpKTsKJiM0MzsJCWlmICghemwzMDczeF9zeW50aF9pc19lbmFibGVkKHN5bnRoKSB8fAomIzQzOwkJICAgIHpsMzA3M3hfc3ludGhfZHBsbF9nZXQoc3ludGgpICE9IHpsZHBsbC0mZ3Q7aWQpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlzeW50aF9mcmVxID0gemwzMDczeF9zeW50aF9mcmVxX2dldChzeW50aCk7CiYjNDM7CiYjNDM7CQkvKiBSZW1lbWJlciBmaXJzdCBlbmFibGVkIHN5bnRoIGZyZXEgZm9yIFRvRC1vbmx5IGZhbGxiYWNrICovCiYjNDM7CQlpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpCiYjNDM7CQkJZmlyc3Rfc3ludGhfZnJlcSA9IHN5bnRoX2ZyZXE7CiYjNDM7CiYjNDM7CQlpZiAoIXN5bnRoX21hc2tbaV0pCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkvKiBTYWZlIGZvciBzMzI6IG1heCBzeW50aCBmcmVxIGlzIDc1MCBNSHogKi8KJiM0MzsJCXN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIHN5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7CiYjNDM7CiYjNDM7CQlyYyA9IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtJmd0O2lkLAomIzQzOwkJCQkJICAgICBzeW50aF9tYXNrW2ldLCBzdGVwX2N5Y2xlcywKJiM0MzsJCQkJCSAgICAgIXRvZF9zdGVwcGVkKTsKJiM0MzsJCWlmIChyYykgewomIzQzOwkJCWlmICh0b2Rfc3RlcHBlZCkgewomIzQzOwkJCQlkZXZfd2Fybih6bGRldi0mZ3Q7ZGV2LAomIzQzOwkJCQkJICYjMzQ7UGFydGlhbCBwaGFzZSBzdGVwIGZhaWx1cmVcbiYjMzQ7KTsKJiM0MzsJCQkJcmV0dXJuIDA7CiYjNDM7CQkJfQomIzQzOwkJCXJldHVybiByYzsKJiM0MzsJCX0KJiM0MzsJCXRvZF9zdGVwcGVkID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CS8qIE5vIGVuYWJsZWQgb3V0cHV0cyBmb3VuZDsgc3RlcCBUb0QgY291bnRlciBvbmx5IHVzaW5nIHRoZQomIzQzOwkgKiBmaXJzdCBlbmFibGVkIHN5bnRoJiMzOTtzIHBlcmlvZCAoZW1wdHkgb3V0cHV0IG1hc2spLgomIzQzOwkgKi8KJiM0MzsJaWYgKCF0b2Rfc3RlcHBlZCkgewomIzQzOwkJc3RlcF9jeWNsZXMgPSBkaXZfczY0KGRlbHRhICogZmlyc3Rfc3ludGhfZnJlcSwgTlNFQ19QRVJfU0VDKTsKJiM0MzsJCXJldHVybiB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCh6bGRldiwgemxkcGxsLSZndDtpZCwgMCwKJiM0MzsJCQkJCSAgICAgICBzdGVwX2N5Y2xlcywgdHJ1ZSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIC8qKgotICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlCi0gKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmUKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUgLSBhZGp1c3QgUFRQIGNsb2NrIHRpbWUKJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm8KJiM0MzsgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcwogICoKLSAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuCiYjNDM7ICogRm9yIE5DTywgbGFyZ2UgZGVsdGFzICgmZ3Q7PSAxIHNlY29uZCkgYXJlIHNwbGl0IGludG8gYSBUb0QKJiM0MzsgKiByZWFkLW1vZGlmeS13cml0ZSBmb3IgdGhlIHNlY29uZHMgcGFydCBhbmQgYW4gb3V0cHV0IHBoYXNlIHN0ZXAgZm9yCiYjNDM7ICogdGhlIHN1Yi1zZWNvbmQgcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgcGhhc2Ugc3RlcCBkaXJlY3RseSwKJiM0MzsgKiBmYWxsaW5nIGJhY2sgdG8gVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIGlmIHBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlCiYjNDM7ICogZmFpbHMuIEluIEFVVE8vUkVGTE9DSyBtb2RlcywgbGFyZ2UgZGVsdGFzIGFyZSBzcGxpdCBpbnRvIFRvRAomIzQzOyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciBzZWNvbmRzIGFuZCBUSUUgd3JpdGUgZm9yIHRoZSBzdWItc2Vjb25kCiYjNDM7ICogcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgVElFIHdyaXRlIGRpcmVjdGx5LgomIzQzOyAqCiYjNDM7ICogSWYgdGhlIHNlY29uZHMgcGFydCB3YXMgYWxyZWFkeSBjb21taXR0ZWQgd2hlbiB0aGUgc3ViLXNlY29uZAomIzQzOyAqIG1lY2hhbmlzbSBmYWlscywgcmV0dXJucyAwIHRvIHByZXZlbnQgdGhlIFBUUCBzZXJ2byBmcm9tIHJldHJ5aW5nCiYjNDM7ICogdGhlIGZ1bGwgZGVsdGEgYW5kIGFwcGx5aW5nIHNlY29uZHMgYWdhaW4uCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcyAob3IgcGFydGlhbCBzdWNjZXNzKSwgJmx0OzAgb24gZXJyb3IKICAqLwotdm9pZAotemwzMDczeF9kcGxsX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczY0IGRlbHRhKQogewotCVdBUk4oemxkcGxsLSZndDtkcGxsX2RldiwgJiMzNDtEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXG4mIzM0Oyk7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLAomIzQzOwkJCQkJCSAgIHB0cF9pbmZvKTsKJiM0MzsJc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC0mZ3Q7ZGV2OwomIzQzOwljb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuOwomIzQzOwlib29sIHNlY19hZGp1c3RlZCA9IGZhbHNlOwomIzQzOwlzdHJ1Y3QgdGltZXNwZWM2NCB0czsKJiM0MzsJaW50IHJjOwogCi0JbXV0ZXhfZGVzdHJveSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7Ci0Ja2ZyZWUoemxkcGxsKTsKJiM0MzsJaWYgKCFkZWx0YSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwomIzQzOwkvKiBNb2RlcyB3aXRob3V0IHBoYXNlIHN0ZXAgb3IgVElFIHVzZSBwbGFpbiBUb0QgYWRqdXN0ICovCiYjNDM7CWNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZGV2LCB6bGRwbGwtJmd0O2lkKTsKJiM0MzsJaWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikgJmFtcDsmYW1wOwomIzQzOwkgICAgIXpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjaGFuKSkKJiM0MzsJCXJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLSZndDtpZCwKJiM0MzsJCQkJCSAgICAgICBuc190b190aW1lc3BlYzY0KGRlbHRhKSk7CiYjNDM7CiYjNDM7CS8qIFNwbGl0IG9mZiBzZWNvbmRzIHZpYSBUb0QgcmVhZC1tb2RpZnktd3JpdGUgc28gdGhlIHN1Yi1zZWNvbmQKJiM0MzsJICogcmVtYWluZGVyIGNhbiBiZSBhcHBsaWVkIHRocm91Z2ggdGhlIG91dHB1dC1jb2hlcmVudCBtZWNoYW5pc20KJiM0MzsJICogKHBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlKS4KJiM0MzsJICovCiYjNDM7CWlmIChkZWx0YSAmZ3Q7PSBOU0VDX1BFUl9TRUMgfHwgZGVsdGEgJmx0Oz0gLU5TRUNfUEVSX1NFQykgewomIzQzOwkJczMyIHJlbWFpbmRlcjsKJiM0MzsKJiM0MzsJCXRzLnR2X3NlYyA9IGRpdl9zNjRfcmVtKGRlbHRhLCBOU0VDX1BFUl9TRUMsICZhbXA7cmVtYWluZGVyKTsKJiM0MzsJCXRzLnR2X25zZWMgPSAwOwomIzQzOwkJZGVsdGEgPSByZW1haW5kZXI7CiYjNDM7CiYjNDM7CQlyYyA9IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtJmd0O2lkLCB0cyk7CiYjNDM7CQlpZiAocmMpCiYjNDM7CQkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwkJLyogTm8gc3ViLXNlY29uZCByZW1haW5kZXIsIGRvbmUgKi8KJiM0MzsJCWlmICghZGVsdGEpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CQkvKiBXYWl0IGZvciB0aGUgVG9EIHdyaXRlIHRvIGJlIGFwcGxpZWQgYXQgdGhlIDEgSHogZWRnZQomIzQzOwkJICogYmVmb3JlIGlzc3VpbmcgcGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUsIHNvIHRoZSBwZW5kaW5nCiYjNDM7CQkgKiBXUl9ORVhUXzFIWiBkb2VzIG5vdCBvdmVyd3JpdGUgdGhlIHN1Yi1zZWNvbmQgYWRqdXN0bWVudC4KJiM0MzsJCSAqLwomIzQzOwkJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIHpsZHBsbC0mZ3Q7aWQpOwomIzQzOwkJaWYgKHJjKQomIzQzOwkJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJCXNlY19hZGp1c3RlZCA9IHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQXBwbHkgc3ViLXNlY29uZCBkZWx0YSB2aWEgcGhhc2Ugc3RlcCAoTkNPKSBvciBUSUUgd3JpdGUgKi8KJiM0MzsJaWYgKHpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSkgewomIzQzOwkJcmMgPSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCh6bGRwbGwsIGRlbHRhKTsKJiM0MzsJCWlmICghcmMpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyYyA9IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoemxkZXYsIHpsZHBsbC0mZ3Q7aWQsIGRlbHRhKTsKJiM0MzsJCWlmICghcmMpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogUGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUgZmFpbGVkLCBmYWxsIGJhY2sgdG8gVG9EIGFkanVzdCAqLwomIzQzOwlyYyA9IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtJmd0O2lkLAomIzQzOwkJCQkgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTsKJiM0MzsKJiM0MzsJLyogSW4gdGhlIHVubGlrZWx5IGV2ZW50IHRoYXQgYm90aCBwaGFzZSBzdGVwL1RJRSB3cml0ZSBhbmQgZmFsbGJhY2sKJiM0MzsJICogVG9EIGFkanVzdCBmYWlsIGFmdGVyIHNlY29uZHMgd2VyZSBhbHJlYWR5IGNvbW1pdHRlZCwgcmV0dXJuCiYjNDM7CSAqIHN1Y2Nlc3MgdG8gcHJldmVudCB0aGUgUFRQIHNlcnZvIGZyb20gcmV0cnlpbmcgdGhlIGZ1bGwgZGVsdGEgYW5kCiYjNDM7CSAqIGFwcGx5aW5nIHNlY29uZHMgYWdhaW4uIFRoZSBzdWItc2Vjb25kIHJlc2lkdWFsIHdpbGwgc2VsZi1jb3JyZWN0CiYjNDM7CSAqIGluIHRoZSBuZXh0IHNlcnZvIGN5Y2xlLgomIzQzOwkgKi8KJiM0MzsJaWYgKHJjICZhbXA7JmFtcDsgc2VjX2FkanVzdGVkKSB7CiYjNDM7CQlkZXZfd2Fybih6bGRldi0mZ3Q7ZGV2LAomIzQzOwkJCSAmIzM0O1N1Yi1zZWNvbmQgYWRqdXN0bWVudCBmYWlsZWQgYWZ0ZXIgc2Vjb25kcyBhcHBsaWVkXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcmM7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSAtIGFkanVzdCBQVFAgY2xvY2sgZnJlcXVlbmN5CiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvCiYjNDM7ICogQHNjYWxlZF9wcG06IGZyZXF1ZW5jeSBhZGp1c3RtZW50IGluIHNjYWxlZCBwcG0gKHBwbSAqIDJeMTYpCiYjNDM7ICoKJiM0MzsgKiBPbmx5IHN1cHBvcnRlZCBmb3IgTkNPLiBXcml0ZXMgdGhlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgcmVnaXN0ZXIuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46CiYjNDM7ICogKiAlMAkJCS0gc3VjY2VzcyBvciBAc2NhbGVkX3BwbSBpcyB6ZXJvIChuby1vcCkKJiM0MzsgKiAqICUtRU9QTk9UU1VQUAktIE5DTyBwaW4gaXMgbm90IGNvbm5lY3RlZCBhbmQgQHNjYWxlZF9wcG0gaXMgbm9uLXplcm8KJiM0MzsgKiAqIG5lZ2F0aXZlCQktIG90aGVyIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludAomIzQzO3psMzA3M3hfZHBsbF9wdHBfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGxvbmcgc2NhbGVkX3BwbSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLAomIzQzOwkJCQkJCSAgIHB0cF9pbmZvKTsKJiM0MzsJY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjsKJiM0MzsJczY0IG9mZnNldDsKJiM0MzsKJiM0MzsJLyogQ29udmVydCBzY2FsZWRfcHBtIHRvIGRmX29mZnNldCBpbiAyXi00OCBzdGVwczoKJiM0MzsJICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjMyKSAvIDEwXjYKJiM0MzsJICoKJiM0MzsJICogU2ltcGxpZnkgdG8gYXZvaWQgb3ZlcmZsb3c6CiYjNDM7CSAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogMl4yNikgLyA1XjYKJiM0MzsJICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiA2NzEwODg2NCkgLyAxNTYyNQomIzQzOwkgKi8KJiM0MzsJb2Zmc2V0ID0gLWRpdl9zNjQoKHM2NClzY2FsZWRfcHBtICogNjcxMDg4NjRMTCwgMTU2MjUpOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwomIzQzOwljaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRwbGwtJmd0O2RldiwgemxkcGxsLSZndDtpZCk7CiYjNDM7CWlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKQomIzQzOwkJcmV0dXJuIHNjYWxlZF9wcG0gPyAtRU9QTk9UU1VQUCA6IDA7CiYjNDM7CWlmIChvZmZzZXQgPT0gY2hhbi0mZ3Q7ZGZfb2Zmc2V0KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCh6bGRwbGwtJmd0O2RldiwgemxkcGxsLSZndDtpZCwgb2Zmc2V0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSAtIGFkanVzdCBQVFAgY2xvY2sgcGhhc2UKJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm8KJiM0MzsgKiBAZGVsdGE6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMKJiM0MzsgKgomIzQzOyAqIE9ubHkgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMuIFVzZXMgVElFIHdyaXRlIGZvcgomIzQzOyAqIG5hbm9zZWNvbmQgcmVzb2x1dGlvbiBwaGFzZSBhZGp1c3RtZW50LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOgomIzQzOyAqICogJTAJCQktIHN1Y2Nlc3Mgb3IgQGRlbHRhIGlzIHplcm8gKG5vLW9wKQomIzQzOyAqICogJS1FT1BOT1RTVVBQCS0gbW9kZSBkb2VzIG5vdCBzdXBwb3J0IFRJRSBhbmQgQGRlbHRhIGlzIG5vbi16ZXJvCiYjNDM7ICogKiBuZWdhdGl2ZQkJLSBvdGhlciBlcnJvcgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHMzMiBkZWx0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLAomIzQzOwkJCQkJCSAgIHB0cF9pbmZvKTsKJiM0MzsJc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC0mZ3Q7ZGV2OwomIzQzOwljb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuOwomIzQzOwomIzQzOwlpZiAoIWRlbHRhKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CWNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZGV2LCB6bGRwbGwtJmd0O2lkKTsKJiM0MzsKJiM0MzsJaWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY2hhbikpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJldHVybiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHpsZGV2LCB6bGRwbGwtJmd0O2lkLCBkZWx0YSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzMzIKJiM0Mzt6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyBfX2Fsd2F5c191bnVzZWQpCiYjNDM7ewomIzQzOwkvKiBIVyBsaW1pdHMgVElFIHdyaXRlIHRvICYjNDM7LTEgc2Vjb25kLiBSZXR1cm4gdGhlIGNvbnN0YW50IEhXCiYjNDM7CSAqIGxpbWl0IGFuZCBsZXQgYWRqcGhhc2UgaGFuZGxlIG1vZGUtc3BlY2lmaWMgY2hlY2tzLgomIzQzOwkgKi8KJiM0MzsJcmV0dXJuIE5TRUNfUEVSX1NFQyAtIDE7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvID0gewomIzQzOwkub3duZXIJCT0gVEhJU19NT0RVTEUsCiYjNDM7CS5tYXhfYWRqCT0gWkwzMDczWF9EUExMX1BUUF9NQVhfQURKLAomIzQzOwkuZ2V0dGltZXg2NAk9IHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCwKJiM0MzsJLnNldHRpbWU2NAk9IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0LAomIzQzOwkuYWRqdGltZQk9IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSwKJiM0MzsJLmFkamZpbmUJPSB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUsCiYjNDM7CS5hZGpwaGFzZQk9IHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2UsCiYjNDM7CS5nZXRtYXhwaGFzZQk9IHpsMzA3M3hfZHBsbF9wdHBfZ2V0bWF4cGhhc2UsCiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBhIERQTEwgY2hhbm5lbAomIzQzOyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byByZWdpc3RlciBQVFAgY2xvY2sgZm9yCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQomIzQzO3sKJiM0MzsJc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC0mZ3Q7ZGV2OwomIzQzOwlzdHJ1Y3QgcHRwX2Nsb2NrICpwdHBfY2xvY2s7CiYjNDM7CiYjNDM7CXpsZHBsbC0mZ3Q7cHRwX2luZm8gPSB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm87CiYjNDM7CXNucHJpbnRmKHpsZHBsbC0mZ3Q7cHRwX2luZm8ubmFtZSwgc2l6ZW9mKHpsZHBsbC0mZ3Q7cHRwX2luZm8ubmFtZSksCiYjNDM7CQkgJiMzNDslcy1kcGxsJXUmIzM0OywgZGV2X25hbWUoemxkZXYtJmd0O2RldiksIHpsZHBsbC0mZ3Q7aWQpOwomIzQzOwomIzQzOwlwdHBfY2xvY2sgPSBwdHBfY2xvY2tfcmVnaXN0ZXIoJmFtcDt6bGRwbGwtJmd0O3B0cF9pbmZvLCB6bGRldi0mZ3Q7ZGV2KTsKJiM0MzsJaWYgKElTX0VSUihwdHBfY2xvY2spKSB7CiYjNDM7CQlkZXZfZXJyKHpsZGV2LSZndDtkZXYsICYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgRFBMTCV1XG4mIzM0OywKJiM0MzsJCQl6bGRwbGwtJmd0O2lkKTsKJiM0MzsJCXJldHVybiBQVFJfRVJSKHB0cF9jbG9jayk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJemxkcGxsLSZndDtwdHBfY2xvY2sgPSBwdHBfY2xvY2s7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIgLSB1bnJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgYSBEUExMIGNoYW5uZWwKJiM0MzsgKiBAemxkcGxsOiBEUExMIGNoYW5uZWwgdG8gdW5yZWdpc3RlciBQVFAgY2xvY2sgZm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKJiM0Mzt7CiYjNDM7CWlmICghSVNfRVJSX09SX05VTEwoemxkcGxsLSZndDtwdHBfY2xvY2spKSB7CiYjNDM7CQlwdHBfY2xvY2tfdW5yZWdpc3Rlcih6bGRwbGwtJmd0O3B0cF9jbG9jayk7CiYjNDM7CQl6bGRwbGwtJmd0O3B0cF9jbG9jayA9IE5VTEw7CiYjNDM7CX0KIH0KIAogLyoqCkBAIC0yNDM2LDYgJiM0MzsyNzc3LDQ3IEBAIHpsMzA3M3hfZHBsbF9yZWZfc3luY19wYWlyc19yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfYWxsb2MgLSBhbGxvY2F0ZSBEUExMIGRldmljZQomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlcgomIzQzOyAqCiYjNDM7ICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBwb2ludGVyIHRvIERQTEwgZGV2aWNlIG9uIHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgemwzMDczeF9kcGxsICoKJiM0Mzt6bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7CiYjNDM7CiYjNDM7CXpsZHBsbCA9IGt6YWxsb2Nfb2JqKCp6bGRwbGwpOwomIzQzOwlpZiAoIXpsZHBsbCkKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwomIzQzOwomIzQzOwl6bGRwbGwtJmd0O2RldiA9IHpsZGV2OwomIzQzOwl6bGRwbGwtJmd0O2lkID0gY2g7CiYjNDM7CW11dGV4X2luaXQoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwlJTklUX0xJU1RfSEVBRCgmYW1wO3psZHBsbC0mZ3Q7cGlucyk7CiYjNDM7CiYjNDM7CXJldHVybiB6bGRwbGw7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9mcmVlIC0gZnJlZSBEUExMIGRldmljZQomIzQzOyAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZQomIzQzOyAqCiYjNDM7ICogRGVhbGxvY2F0ZXMgZ2l2ZW4gRFBMTCBkZXZpY2UgcHJldmlvdXNseSBhbGxvY2F0ZWQgYnkgQHpsMzA3M3hfZHBsbF9hbGxvYy4KJiM0MzsgKi8KJiM0Mzt2b2lkCiYjNDM7emwzMDczeF9kcGxsX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQomIzQzO3sKJiM0MzsJV0FSTih6bGRwbGwtJmd0O2RwbGxfZGV2LCAmIzM0O0RQTEwgZGV2aWNlIGlzIHN0aWxsIHJlZ2lzdGVyZWRcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJbXV0ZXhfZGVzdHJveSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiYjNDM7CWtmcmVlKHpsZHBsbCk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIgLSByZWdpc3RlciBEUExMIGRldmljZSBhbmQgYWxsIGl0cyBwaW5zCiAgKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmUKQEAgLTI0NjYsNiAmIzQzOzI4NDgsMTMgQEAgemwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKIAkJcmV0dXJuIHJjOwogCX0KIAomIzQzOwlyYyA9IHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIoemxkcGxsKTsKJiM0MzsJaWYgKHJjKSB7CiYjNDM7CQl6bDMwNzN4X2RwbGxfcGluc191bnJlZ2lzdGVyKHpsZHBsbCk7CiYjNDM7CQl6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTsKJiM0MzsJCXJldHVybiByYzsKJiM0MzsJfQomIzQzOwogCXJldHVybiAwOwogfQogCkBAIC0yNDc5LDcgJiM0MzsyODY4LDcgQEAgemwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKIHZvaWQKIHpsMzA3M3hfZHBsbF91bnJlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKIHsKLQkvKiBVbnJlZ2lzdGVyIGFsbCBwaW5zIGFuZCBkcGxsICovCiYjNDM7CXpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3Rlcih6bGRwbGwpOwogCXpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTsKIAl6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaAppbmRleCBmYWViYzQwMmJhMWI3Li45OTMyMjFkYzYzMjQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oCkBAIC01LDYgJiM0Mzs1LDcgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2RwbGwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9saXN0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtjb3JlLmgmIzM0OwogCkBAIC0yMiw2ICYjNDM7MjMsOCBAQAogICogQHR5cGU6IERQTEwgdHlwZSAoUFBTIG9yIEVFQykKICAqIEBsb2NrX3N0YXR1czogbGFzdCBzYXZlZCBEUExMIGxvY2sgc3RhdHVzCiAgKiBAcGluczogbGlzdCBvZiBwaW5zCiYjNDM7ICogQHB0cF9pbmZvOiBQVFAgY2xvY2sgaW5mbwomIzQzOyAqIEBwdHBfY2xvY2s6IHJlZ2lzdGVyZWQgUFRQIGNsb2NrIChvciBOVUxMKQogICovCiBzdHJ1Y3QgemwzMDczeF9kcGxsIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCQlsaXN0OwpAQCAtMzYsNiAmIzQzOzM5LDggQEAgc3RydWN0IHpsMzA3M3hfZHBsbCB7CiAJZW51bSBkcGxsX3R5cGUJCQl0eXBlOwogCWVudW0gZHBsbF9sb2NrX3N0YXR1cwkJbG9ja19zdGF0dXM7CiAJc3RydWN0IGxpc3RfaGVhZAkJcGluczsKJiM0MzsJc3RydWN0IHB0cF9jbG9ja19pbmZvCQlwdHBfaW5mbzsKJiM0MzsJc3RydWN0IHB0cF9jbG9jawkJKnB0cF9jbG9jazsKIH07CiAKIHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgKaW5kZXggYjcwZWFkN2Q0NDk1Yi4uZjNhNWUxMjE1YWEzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaApAQCAtMTc5LDYgJiM0MzsxNzksMjAgQEAKICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRAkJCUdFTk1BU0soMiwgMCkKICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRF9BQ0NfSQkJNAogCiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTAkJCVpMX1JFRyg1LCAweDMwLCAxKQomIzQzOyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUAkJCUdFTk1BU0soMiwgMCkKJiM0MzsjZGVmaW5lIFpMX0RQTExfVElFX0NUUkxfT1BfV1IJCQk0CiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTF9NQVNLCQlaTF9SRUcoNSwgMHgzMSwgMSkKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9DVFJMKF9pZHgpCQkJCQlcCiYjNDM7CVpMX1JFR19JRFgoX2lkeCwgNSwgMHgzOCwgMSwgWkwzMDczWF9NQVhfQ0hBTk5FTFMsIDEpCiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX1NFTQkJCUJJVCg0KQomIzQzOyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTUQJCQlHRU5NQVNLKDMsIDApCiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWgkxCiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UCQk4CiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9ORVhUXzFIWgk5CiYjNDM7CiAjZGVmaW5lIFpMX1JFR19EUExMX01FQVNfQ1RSTAkJCVpMX1JFRyg1LCAweDUwLCAxKQogI2RlZmluZSBaTF9EUExMX01FQVNfQ1RSTF9FTgkJCUJJVCgwKQogI2RlZmluZSBaTF9EUExMX01FQVNfQ1RSTF9BVkdfRkFDVE9SCQlHRU5NQVNLKDcsIDQpCkBAIC0xOTMsNiAmIzQzOzIwNyw5IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBSZWdpc3RlciBQYWdlcyA2LTcsIERQTEwgRGF0YQomIzQzOyAqCiYjNDM7ICogUGVyLWNoYW5uZWwgcmVnaXN0ZXJzIHdpdGggc3RyaWRlIDB4MjAuIENoYW5uZWxzIDAtMyByZXNpZGUgb24gcGFnZSA2LAomIzQzOyAqIGNoYW5uZWwgNCBvbiBwYWdlIDcuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2RlZmluZSBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeCkJCQkJCVwKQEAgLTIwMiw2ICYjNDM7MjE5LDI0IEBACiAJKChfaWR4KSAmbHQ7IDQgPyBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfNCkKICNkZWZpbmUgWkxfRFBMTF9ERl9PRkZTRVRfVU5LTk9XTglTNjRfTUlOCiAKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBXzAzKF9pZHgpCQkJCQlcCiYjNDM7CVpMX1JFR19JRFgoX2lkeCwgNiwgMHgwQywgNiwgNCwgMHgyMCkKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBXzQJCQlaTF9SRUcoNywgMHgwQywgNikKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBKF9pZHgpCQkJCQlcCiYjNDM7CSgoX2lkeCkgJmx0OyA0ID8gWkxfUkVHX0RQTExfVElFX0RBVEFfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9USUVfREFUQV80KQomIzQzOwomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQ18wMyhfaWR4KQkJCQkJXAomIzQzOwlaTF9SRUdfSURYKF9pZHgsIDYsIDB4MTIsIDYsIDQsIDB4MjApCiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzQJCQlaTF9SRUcoNywgMHgxMiwgNikKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUMoX2lkeCkJCQkJCVwKJiM0MzsJKChfaWR4KSAmbHQ7IDQgPyBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVE9EX1NFQ180KQomIzQzOwomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TXzAzKF9pZHgpCQkJCQlcCiYjNDM7CVpMX1JFR19JRFgoX2lkeCwgNiwgMHgxOCwgNCwgNCwgMHgyMCkKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU180CQkJWkxfUkVHKDcsIDB4MTgsIDQpCiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlMoX2lkeCkJCQkJCVwKJiM0MzsJKChfaWR4KSAmbHQ7IDQgPyBaTF9SRUdfRFBMTF9UT0RfTlNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfTlNfNCkKJiM0MzsKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogUmVnaXN0ZXIgUGFnZSA5LCBTeW50aCBhbmQgT3V0cHV0CiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0yMjEsNiAmIzQzOzI1NiwyMyBAQAogI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9FTgkJCUJJVCgwKQogI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9TWU5USF9TRUwJCUdFTk1BU0soNiwgNCkKIAomIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTSwkJWkxfUkVHKDksIDB4MzYsIDIpCiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTAkJWkxfUkVHKDksIDB4MzgsIDEpCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX0RQTEwJCUdFTk1BU0soNiwgNCkKJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVAJQklUKDMpCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QCQlHRU5NQVNLKDEsIDApCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX05PTkUJMAomIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9SRVNFVAkxCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1JFQUQJMgomIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURQkzCiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTlVNQkVSCQlaTF9SRUcoOSwgMHgzOSwgMSkKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLCQlaTF9SRUcoOSwgMHgzYSwgMikKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBCQlaTF9SRUcoOSwgMHgzYywgNCkKJiM0MzsKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBSZWdpc3RlciBQYWdlIDEwLCBSZWYgTWFpbGJveAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODE3NQoJCQkJCQkJb3V0cHV0OiAyMDIKCQkJCQkJCXRob3VnaHRzOiA0NTc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBUUCBDbG9jayBTdXBwb3J0IGluIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgRHJpdmVyIFJldmlldyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGFkZHMgUHJlY2lzaW9uIFRpbWUgUHJvdG9jb2wgKFBUUCkgY2xvY2sgZnVuY3Rpb25hbGl0eSB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIsIGVzc2VudGlhbGx5IGVuYWJsaW5nIG1vcmUgcHJlY2lzZSB0aW1lIHN5bmNocm9uaXphdGlvbiBjYXBhYmlsaXRpZXMuIE15IGluaXRpYWwgc2NhbiBmb2N1c2VkIG9uIGlkZW50aWZ5aW5nIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MsIGEgY29tbW9uIGFyZWEgZm9yIHNlY3VyaXR5IGZsYXdzLgoKRmlyc3QsIEkgZXhhbWluZWQgdGhlIGBwdHBfY2xvY2tfaW5mb2Agc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLiBJdCBsb29rcyBzb3VuZDsgdGhlIGNyaXRpY2FsIGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCwgYW5kIHRoZSBzdHJ1Y3R1cmUgaXMgY29waWVkIHJhdGhlciB0aGFuIGRpcmVjdGx5IHVzZWQsIHdoaWNoIHByZXZlbnRzIGFueSBkYW5nbGluZyBwb2ludGVycyBvciB1bmluaXRpYWxpemVkIGRhdGEgaXNzdWVzLiBJIHBhaWQgc3BlY2lmaWMgYXR0ZW50aW9uIHRvIHRoZSBgdGltZXNwZWM2NGAgYW5kIGBwdHBfc3lzdGVtX3RpbWVzdGFtcGAgc3RydWN0dXJlcywgZW5zdXJpbmcgdGhleSBhcmUgcHJvcGVybHkgcG9wdWxhdGVkIGJ5IHRoZSBmdW5jdGlvbnMgcmVhZGluZyBUaW1lIG9mIERheSAoVG9EKSByZWdpc3RlcnMgZnJvbSB0aGUgaGFyZHdhcmUuIFRoZSByZWFkIGFuZCBhZGp1c3RtZW50IGZ1bmN0aW9ucywgc3VjaCBhcyBgemwzMDczeF9jaGFuX3RvZF9yZWFkYCwgYHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NGAsIGFuZCB2YXJpb3VzICphZGoqIGZ1bmN0aW9ucyB3ZXJlIGNoZWNrZWQgdG8gZW5zdXJlIHRoZXkgYXJlIHByb3Blcmx5IHNldHRpbmcgYWxsIHZhbHVlcy4KClRoZSBgemwzMDczeF9kcGxsX2FsbG9jYCBmdW5jdGlvbiBpbml0aWFsbHkgcmFpc2VkIGEgc2xpZ2h0IGNvbmNlcm4gZHVlIHRvIHRoZSB1c2Ugb2YgYSBtYWNybyB0aGF0IHdhc24mIzM5O3QgaW1tZWRpYXRlbHkgZmFtaWxpYXIuIEFmdGVyIGEgY2xvc2VyIGxvb2ssIGl0JiMzOTtzIGp1c3QgYSBzdGFuZGFyZCBga3phbGxvY2Agb3BlcmF0aW9uLCB3aGljaCBndWFyYW50ZWVzIHplcm8taW5pdGlhbGl6YXRpb24uCgpUaGVyZSBpc24mIzM5O3QgbXVjaCBuZXcgaGVyZTogSSYjMzk7bSBzZWVpbmcgcmVnaXN0ZXIgcmVhZHMsIHJlZ2lzdGVyIHdyaXRlcywgc29tZSBiYXNpYyBhcml0aG1ldGljIGZvciB0aW1lIGFkanVzdG1lbnRzLCBhbmQgc3RhbmRhcmQgUFRQIGZyYW1ld29yayBpbnRlcmFjdGlvbnMuIFRoZSBmb2N1cyBvbiBsb2NraW5nIHdpdGggbXV0ZXhlcyBpbmRpY2F0ZXMgcm9idXN0IGNvbmN1cnJlbmN5IGhhbmRsaW5nLCBtaW5pbWl6aW5nIGRhdGEgcmFjZSByaXNrcy4gQWxzbywgc2luY2UgdGhlcmUgYXJlIG5vIG5ldyBpb2N0bHMgb3IgbmV0bGluayBhdHRyaWJ1dGVzLCBpbnRlcmFjdGlvbiB3aXRoIHVzZXJzcGFjZSBpcyBzdGFuZGFyZCBQVFAgY29yZSBpbXBsZW1lbnRhdGlvbi4gTm90aGluZyBsb29rcyBsaWtlIGl0IGNvdWxkIGxlYWsgc2Vuc2l0aXZlIGluZm9ybWF0aW9uLCBub3IgaW50cm9kdWNlIGFueSBzZWN1cml0eSBjb25jZXJucy4gSW4gc2hvcnQsIHRoZSBwYXRjaCBhcHBlYXJzIHRvIGJlIGltcGxlbWVudGluZyBQVFAgZnVuY3Rpb25hbGl0eSBpbiBhIHNhZmUgbWFubmVyLCBhZGhlcmluZyB0byBlc3RhYmxpc2hlZCBMaW51eCBrZXJuZWwgY29kaW5nIHByYWN0aWNlcyBhbmQgUFRQIGZyYW1ld29yayBndWlkZWxpbmVzLiBJJiMzOTttIHJlYXNvbmFibHkgY29uZmlkZW50IGluIHRoaXMgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgUFRQIGNsb2NrIHN1cHBvcnQgdG8gdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyLiBJdCBpbnRyb2R1Y2VzIGZ1bmN0aW9ucyB0byByZWFkL3dyaXRlIFRpbWUgb2YgRGF5IChUb0QpIHJlZ2lzdGVycywgYWRqdXN0IHBoYXNlLCBhZGp1c3QgZnJlcXVlbmN5LCBhbmQgcmVnaXN0ZXJzIGEgUFRQIGNsb2NrIGRldmljZSB1c2luZyBgcHRwX2Nsb2NrX3JlZ2lzdGVyYC4gQWxsIG5ldyB2YXJpYWJsZXMgYW5kIHN0cnVjdHVyZXMgKHN1Y2ggYXMgYHN0cnVjdCB0aW1lc3BlYzY0YCwgYHN5bnRoX21hc2tgLCBhbmQgYHN0cnVjdCBwdHBfY2xvY2tfaW5mb2ApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIG9yIHBhc3NlZCB0byBzdGFuZGFyZCBrZXJuZWwgQVBJcyB0aGF0IGhhbmRsZSBpbml0aWFsaXphdGlvbi4gVGhlcmUgYXJlIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgaXMgdGhlcmUgYW55IGNvbnRyb2wgZmxvdyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyAobGlrZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlci4gSXQgaW50cm9kdWNlcyBmdW5jdGlvbnMgdG8gcmVhZC93cml0ZSBUaW1lIG9mIERheSAoVG9EKSByZWdpc3RlcnMsIGFkanVzdCBwaGFzZSwgYWRqdXN0IGZyZXF1ZW5jeSwgYW5kIHJlZ2lzdGVycyBhIFBUUCBjbG9jayBkZXZpY2UgdXNpbmcgYHB0cF9jbG9ja19yZWdpc3RlcmAuIEFsbCBuZXcgdmFyaWFibGVzIGFuZCBzdHJ1Y3R1cmVzIChzdWNoIGFzIGBzdHJ1Y3QgdGltZXNwZWM2NGAsIGBzeW50aF9tYXNrYCwgYW5kIGBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm9gKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBvciBwYXNzZWQgdG8gc3RhbmRhcmQga2VybmVsIEFQSXMgdGhhdCBoYW5kbGUgaW5pdGlhbGl6YXRpb24uIFRoZXJlIGFyZSBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGlzIHRoZXJlIGFueSBjb250cm9sIGZsb3cgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgKGxpa2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSkgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODo0MTowNi4yMTQ2NjM4OTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDY4MDgzODUxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaTDMwNzNYXCIsXG4gICAgXCJaTDMwNzNYX0kyQ1wiLFxuICAgIFwiWkwzMDczWF9TUElcIixcbiAgICBcIlBUUF8xNTg4X0NMT0NLXCIsXG4gICAgXCJEUExMXCIsXG4gICAgXCJJMkNcIixcbiAgICBcIlNQSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdFwiLFxuICAgIFwiemwzMDczeF9jaGFuX3RvZF9yZWFkXCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fdG9kX3dyaXRlXCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fdG9kX2FkanVzdFwiLFxuICAgIFwiemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXRcIixcbiAgICBcInpsMzA3M3hfY2hhbl90aWVfd3JpdGVcIixcbiAgICBcInpsMzA3M3hfY2hhbl9waGFzZV9zdGVwXCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjRcIixcbiAgICBcInpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0XCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcFwiLFxuICAgIFwiemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lXCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmVcIixcbiAgICBcInpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2VcIixcbiAgICBcInpsMzA3M3hfZHBsbF9wdHBfZ2V0bWF4cGhhc2VcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgUFRQIGNsb2NrIHN1cHBvcnQgdG8gdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyLiBJdCBpbnRyb2R1Y2VzIGZ1bmN0aW9ucyB0byByZWFkL3dyaXRlIFRpbWUgb2YgRGF5IChUb0QpIHJlZ2lzdGVycywgYWRqdXN0IHBoYXNlLCBhZGp1c3QgZnJlcXVlbmN5LCBhbmQgcmVnaXN0ZXJzIGEgUFRQIGNsb2NrIGRldmljZSB1c2luZyBgcHRwX2Nsb2NrX3JlZ2lzdGVyYC4gQWxsIG5ldyB2YXJpYWJsZXMgYW5kIHN0cnVjdHVyZXMgKHN1Y2ggYXMgYHN0cnVjdCB0aW1lc3BlYzY0YCwgYHN5bnRoX21hc2tgLCBhbmQgYHN0cnVjdCBwdHBfY2xvY2tfaW5mb2ApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIG9yIHBhc3NlZCB0byBzdGFuZGFyZCBrZXJuZWwgQVBJcyB0aGF0IGhhbmRsZSBpbml0aWFsaXphdGlvbi4gVGhlcmUgYXJlIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgaXMgdGhlcmUgYW55IGNvbnRyb2wgZmxvdyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyAobGlrZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIgKHpsMzA3M3gpLiBUaGlzIGV4cG9zZXMgbmV3IGZ1bmN0aW9uYWxpdHkgdG8gdXNlcnNwYWNlIHZpYSB0aGUgUFRQIHN1YnN5c3RlbSAoZS5nLiwgL2Rldi9wdHBYIGlvY3RscykuIFRoZSBkcml2ZXIgaXMgYW4gSTJDL1NQSSBkZXZpY2UgZHJpdmVyLCB3aGljaCBjYW4gYmUgaW5zdGFudGlhdGVkIGFuZCBmdXp6ZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6NDE6MDYuMjE0NjcxNTA2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTYyNjM2NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwMTI5ODVkMzEwMWFjZGNhMDdiYTkwYjU1ZmE0MWRmZTY2ZGFkZTdmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDE0IDA4OjQxOjA1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWcgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXFxuaW5kZXggNWJiY2ExNDAwNTgxMy4uZGExNzMxYWNlMTVmMCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xcbkBAIC0yLDcgKzIsNyBAQFxcbiBcXG4gY29uZmlnIFpMMzA3M1hcXG4gXFx0dHJpc3RhdGUgXFxcIk1pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXNcXFwiIGlmIENPTVBJTEVfVEVTVFxcbi1cXHRkZXBlbmRzIG9uIE5FVFxcbitcXHRkZXBlbmRzIG9uIE5FVCBcXHUwMDI2XFx1MDAyNiBQVFBfMTU4OF9DTE9DS1xcbiBcXHRzZWxlY3QgRFBMTFxcbiBcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG4gXFx0c2VsZWN0IFJFR01BUFxcbkBAIC0xNiw3ICsxNiw3IEBAIGNvbmZpZyBaTDMwNzNYXFxuIFxcbiBjb25maWcgWkwzMDczWF9JMkNcXG4gXFx0dHJpc3RhdGUgXFxcIkkyQyBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcXFwiXFxuLVxcdGRlcGVuZHMgb24gSTJDIFxcdTAwMjZcXHUwMDI2IE5FVFxcbitcXHRkZXBlbmRzIG9uIEkyQyBcXHUwMDI2XFx1MDAyNiBORVQgXFx1MDAyNlxcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tcXG4gXFx0c2VsZWN0IFJFR01BUF9JMkNcXG4gXFx0c2VsZWN0IFpMMzA3M1hcXG4gXFx0aGVscFxcbkBAIC0yOCw3ICsyOCw3IEBAIGNvbmZpZyBaTDMwNzNYX0kyQ1xcbiBcXG4gY29uZmlnIFpMMzA3M1hfU1BJXFxuIFxcdHRyaXN0YXRlIFxcXCJTUEkgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzXFxcIlxcbi1cXHRkZXBlbmRzIG9uIE5FVCBcXHUwMDI2XFx1MDAyNiBTUElcXG4rXFx0ZGVwZW5kcyBvbiBORVQgXFx1MDAyNlxcdTAwMjYgU1BJIFxcdTAwMjZcXHUwMDI2IFBUUF8xNTg4X0NMT0NLXFxuIFxcdHNlbGVjdCBSRUdNQVBfU1BJXFxuIFxcdHNlbGVjdCBaTDMwNzNYXFxuIFxcdGhlbHBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXFxuaW5kZXggNGVjMmNmNTNkYWQ0Ni4uYmE0ZDMwM2Q0MWI0NyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNcXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNcXG5AQCAtMyw2ICszLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NsZWFudXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlbGF5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZXZfcHJpbnRrLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdHJpbmcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuIFxcbkBAIC0xNjIsOCArMTYzLDggQEAgaW50IHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpXFxuICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmVcXG4gICogQGluZGV4OiBEUExMIGNoYW5uZWwgaW5kZXggdG8gZmV0Y2ggc3RhdGUgZm9yXFxuICAqXFxuLSAqIFJlYWRzIHRoZSBtb2RlX3JlZnNlbCByZWdpc3RlciBhbmQgcmVmZXJlbmNlIHByaW9yaXR5IHJlZ2lzdGVycyBmb3JcXG4tICogdGhlIGdpdmVuIERQTEwgY2hhbm5lbCBhbmQgc3RvcmVzIHRoZSByYXcgdmFsdWVzIGZvciBsYXRlciB1c2UuXFxuKyAqIFJlYWRzIHRoZSBtb2RlX3JlZnNlbCwgc3RhdHVzIGFuZCByZWZlcmVuY2UgcHJpb3JpdHkgcmVnaXN0ZXJzIGZvclxcbisgKiB0aGUgZ2l2ZW4gRFBMTCBjaGFubmVsIGFuZCBzdG9yZXMgdGhlIHZhbHVlcyBmb3IgbGF0ZXIgdXNlLlxcbiAgKlxcbiAgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4gICovXFxuQEAgLTIzNCw2ICsyMzUsMzIyIEBAIGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKnpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldixcXG4gXFx0cmV0dXJuIFxcdTAwMjZ6bGRldi1cXHUwMDNlY2hhbltpbmRleF07XFxuIH1cXG4gXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQgLSB3YWl0IGZvciBUb0Qgc2VtYXBob3JlIHRvIGNsZWFyXFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxcbisgKlxcbisgKiBDaGVja3MgdGhlIFRvRCBjb250cm9sIHJlZ2lzdGVyIHNlbWFwaG9yZSBiaXQuIElmIGNsZWFyLCByZXR1cm5zXFxuKyAqIGltbWVkaWF0ZWx5LiBPdGhlcndpc2UgcG9sbHMgdW50aWwgdGhlIGJpdCBpcyBjbGVhcmVkIGJ5IHRoZSBkZXZpY2UuXFxuKyAqXFxuKyAqIFJldHVybjpcXG4rICogKiAwXFx0XFx0XFx0LSBzdWNjZXNzXFxuKyAqICogJS1FQlVTWVxcdFxcdC0gdGltZW91dFxcbisgKiAqICUtRU9QTk9UU1VQUFxcdC0gdW5rbm93biBjb21tYW5kIGRldGVjdGVkXFxuKyAqICogbmVnYXRpdmVcXHRcXHQtIG90aGVyIGVycm9yXFxuKyAqL1xcbitpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCB0aW1lb3V0O1xcbitcXHR1OCB0b2RfY3RybDtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSwgXFx1MDAyNnRvZF9jdHJsKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRpZiAoISh0b2RfY3RybCBcXHUwMDI2IFpMX0RQTExfVE9EX0NUUkxfU0VNKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRzd2l0Y2ggKEZJRUxEX0dFVChaTF9EUExMX1RPRF9DVFJMX0NNRCwgdG9kX2N0cmwpKSB7XFxuK1xcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFo6XFxuK1xcdFxcdHRpbWVvdXQgPSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UOlxcbitcXHRjYXNlIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaOlxcbitcXHRcXHR0aW1lb3V0ID0gWkxfUE9MTF9UT0RfUkRfVElNRU9VVF9VUztcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLFxcbitcXHRcXHRcXHRcXHQgIFpMX0RQTExfVE9EX0NUUkxfU0VNLCB0aW1lb3V0KTtcXG4rXFxuK1xcdHJldHVybiByYyA9PSAtRVRJTUVET1VUID8gLUVCVVNZIDogcmM7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwgLSBpc3N1ZSBUb0QgY29tbWFuZFxcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4rICogQGNtZDogVG9EIGNvbW1hbmQgdG8gZXhlY3V0ZVxcbisgKlxcbisgKiBXcml0ZXMgdGhlIHNlbWFwaG9yZSBhbmQgY29tbWFuZCB0byBkcGxsX3RvZF9jdHJsLiBUaGUgY2FsbGVyIG11c3RcXG4rICogZW5zdXJlIHRoZSBkZXZpY2UgaXMgcmVhZHkgKHNlbWFwaG9yZSBjbGVhcikgYmVmb3JlIGNhbGxpbmcgYW5kXFxuKyAqIG11c3Qgd2FpdCBmb3IgY29tcGxldGlvbiBpZiBuZWVkZWQuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4rc3RhdGljIGludCB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHU4IGNtZClcXG4re1xcbitcXHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLFxcbitcXHRcXHRcXHRcXHRaTF9EUExMX1RPRF9DVFJMX1NFTSB8IGNtZCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5fdG9kX3JlYWQgLSByZWFkIFRvRCByZWdpc3RlcnMgYWZ0ZXIgaXNzdWluZyBhIGNvbW1hbmRcXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuKyAqIEBuZXh0X2h6OiBpZiB0cnVlLCByZWFkIHByZWRpY3RlZCBUb0QgYXQgbmV4dCAxIEh6OyBvdGhlcndpc2UgcmVhZCBjdXJyZW50XFxuKyAqIEB0czogdGltZXNwZWMgdG8gc3RvcmUgdGhlIHJlc3VsdFxcbisgKiBAc3RzOiBvcHRpb25hbCBzeXN0ZW0gdGltZXN0YW1wIHBhaXIgZm9yIGNyb3NzLXRpbWVzdGFtcGluZ1xcbisgKlxcbisgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuK1xcdFxcdFxcdCAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXFxuK1xcdFxcdFxcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpXFxuK3tcXG4rXFx0dTMyIG5zZWM7XFxuK1xcdHU2NCBzZWM7XFxuK1xcdHU4IGNtZDtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0aWYgKG5leHRfaHopXFxuK1xcdFxcdGNtZCA9IFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaO1xcbitcXHRlbHNlXFxuK1xcdFxcdGNtZCA9IFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX0NVUlJFTlQ7XFxuK1xcbitcXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVG9EIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xcbitcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHB0cF9yZWFkX3N5c3RlbV9wcmV0cyhzdHMpO1xcbitcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfY3RybCh6bGRldiwgY2gsIGNtZCk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcdHB0cF9yZWFkX3N5c3RlbV9wb3N0dHMoc3RzKTtcXG4rXFxuK1xcdHJjID0gemwzMDczeF9yZWFkX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIFxcdTAwMjZzZWMpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdC8qIEhXIG5hbm9zZWNvbmRzIGFyZSBhbHdheXMgaW4gWzAsIE5TRUNfUEVSX1NFQykgcmFuZ2UgKi9cXG4rXFx0cmMgPSB6bDMwNzN4X3JlYWRfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCBcXHUwMDI2bnNlYyk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0dHMtXFx1MDAzZXR2X3NlYyA9IHNlYztcXG4rXFx0dHMtXFx1MDAzZXR2X25zZWMgPSBuc2VjO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlIC0gd3JpdGUgVG9EIHJlZ2lzdGVycyBhbmQgdHJpZ2dlciAxIEh6IHVwZGF0ZVxcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4rICogQHRzOiB0aW1lIHRvIHNldFxcbisgKlxcbisgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbitcXHRcXHRcXHQgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cylcXG4re1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVG9EIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xcbitcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9TRUMoY2gpLCB0cy50dl9zZWMpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19EUExMX1RPRF9OUyhjaCksIHRzLnR2X25zZWMpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLFxcbitcXHRcXHRcXHRcXHQgICAgIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0IC0gYXRvbWljIFRvRCByZWFkLW1vZGlmeS13cml0ZSB3aXRoIHJvbGxvdmVyIGd1YXJkXFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxcbisgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCB0byBhcHBseVxcbisgKlxcbisgKiBSZWFkcyB0aGUgbmV4dC1IeiBUb0QgYW5kIGN1cnJlbnQgVG9ELCB0aGVuIGNoZWNrcyB3aGV0aGVyIGVub3VnaCB0aW1lXFxuKyAqIHJlbWFpbnMgYmVmb3JlIHRoZSBuZXh0IDEgSHogcm9sbG92ZXIgdG8gc2FmZWx5IGNvbXBsZXRlIHRoZSB3cml0ZS5cXG4rICogUmUtcmVhZHMgaWYgdGhlIDEgSHogdGljayBjcm9zc2VkIGJldHdlZW4gdGhlIHR3byByZWFkcyBvciBpZiBsZXNzXFxuKyAqIHRoYW4gMjAgbXMgcmVtYWlucyBiZWZvcmUgdGhlIG5leHQgcm9sbG92ZXIuIEFwcGxpZXMgQGRlbHRhIGFuZCB3cml0ZXNcXG4rICogdGhlIHJlc3VsdCBiYWNrLlxcbisgKlxcbisgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK2ludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG4rXFx0XFx0XFx0ICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKVxcbit7XFxuKyNkZWZpbmUgWkxfVE9EX01BWF9SRVRSSUVTXFx0MjBcXG4rXFx0c3RhdGljIGNvbnN0IGxvbmcgdGhyZXNob2xkX25zID0gMjAgKiBOU0VDX1BFUl9NU0VDO1xcbitcXHRzdHJ1Y3QgdGltZXNwZWM2NCB0c19uZXh0LCB0c19jdXIsIGRpZmY7XFxuK1xcdGludCByYywgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBaTF9UT0RfTUFYX1JFVFJJRVM7IGkrKykge1xcbitcXHRcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRldiwgY2gsIHRydWUsIFxcdTAwMjZ0c19uZXh0LCBOVUxMKTtcXG4rXFx0XFx0aWYgKHJjKVxcbitcXHRcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRldiwgY2gsIGZhbHNlLCBcXHUwMDI2dHNfY3VyLCBOVUxMKTtcXG4rXFx0XFx0aWYgKHJjKVxcbitcXHRcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRcXHQvKiBFbnN1cmUgdGhlIDEgSHogdGljayBkaWQgbm90IGNyb3NzIGJldHdlZW4gdGhlIHR3byByZWFkc1xcbitcXHRcXHQgKiBhbmQgdGhhdCBlbm91Z2ggbWFyZ2luIHJlbWFpbnMgdG8gY29tcGxldGUgdGhlIHdyaXRlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0ZGlmZiA9IHRpbWVzcGVjNjRfc3ViKHRzX25leHQsIHRzX2N1cik7XFxuK1xcdFxcdGlmIChkaWZmLnR2X3NlYyBcXHUwMDNlIDAgfHxcXG4rXFx0XFx0ICAgICghZGlmZi50dl9zZWMgXFx1MDAyNlxcdTAwMjYgZGlmZi50dl9uc2VjIFxcdTAwM2U9IHRocmVzaG9sZF9ucykpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcdGlmIChpID09IFpMX1RPRF9NQVhfUkVUUklFUykge1xcbitcXHRcXHRkZXZfd2Fybih6bGRldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHQgXFxcIkRQTEwldSBUb0QgYWRqdXN0IGZhaWxlZCB0byBnZXQgc3RhYmxlIG1hcmdpblxcXFxuXFxcIixcXG4rXFx0XFx0XFx0IGNoKTtcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFx0fVxcbitcXG4rXFx0LyogQXBwbHkgZGVsdGEgdG8gdGhlIG5leHQtSHogVG9EICovXFxuK1xcdHRzX25leHQgPSB0aW1lc3BlYzY0X2FkZCh0c19uZXh0LCBkZWx0YSk7XFxuK1xcdGlmICghdGltZXNwZWM2NF92YWxpZF9zZXR0b2QoXFx1MDAyNnRzX25leHQpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZGV2LCBjaCwgdHNfbmV4dCk7XFxuKyN1bmRlZiBaTF9UT0RfTUFYX1JFVFJJRVNcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0IC0gd3JpdGUgZGVsdGEgZnJlcXVlbmN5IG9mZnNldCB0byBoYXJkd2FyZVxcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4rICogQG9mZnNldDogZnJlcXVlbmN5IG9mZnNldCBpbiAyXi00OCBzdGVwc1xcbisgKlxcbisgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBob2xkIHRoZSBwZXItRFBMTCBsb2NrLlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldClcXG4re1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9PRkZTRVQoY2gpLCBvZmZzZXQpO1xcbitcXHRpZiAoIXJjKVxcbitcXHRcXHR6bGRldi1cXHUwMDNlY2hhbltjaF0uZGZfb2Zmc2V0ID0gb2Zmc2V0O1xcbitcXG4rXFx0cmV0dXJuIHJjO1xcbit9XFxuK1xcbisvKipcXG4rICogemwzMDczeF9jaGFuX3RpZV93cml0ZSAtIGFkanVzdCBEUExMIHBoYXNlIHVzaW5nIFRJRSB3cml0ZVxcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4rICogQGRlbHRhX25zOiBwaGFzZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzIChtdXN0IGJlIGluICgtMXMsIDFzKSlcXG4rICpcXG4rICogQ29udmVydHMgbmFub3NlY29uZHMgdG8gVElFIHVuaXRzICgwLjAxIHBzKSBhbmQgd3JpdGVzIFRJRSBkYXRhXFxuKyAqIHRvIHRoZSBzcGVjaWZpZWQgY2hhbm5lbC5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitpbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKVxcbit7XFxuK1xcdHM2NCB0aWVfZGF0YTtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZ6bGRldi1cXHUwMDNldGllX2xvY2spO1xcbitcXG4rXFx0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRJRSBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cXG4rXFx0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsXFxuK1xcdFxcdFxcdFxcdCAgWkxfRFBMTF9USUVfQ1RSTF9PUCxcXG4rXFx0XFx0XFx0XFx0ICBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHQvKiBDb252ZXJ0IG5zIHRvIFRJRSB1bml0cyAoMC4wMSBwcyA9IDEwXi0xNCBzKSAqL1xcbitcXHR0aWVfZGF0YSA9IGRlbHRhX25zICogMTAwMDAwTEw7XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfREFUQShjaCksIHRpZV9kYXRhKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0ssIEJJVChjaCkpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTCxcXG4rXFx0XFx0XFx0XFx0WkxfRFBMTF9USUVfQ1RSTF9PUF9XUik7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCAtIGV4ZWN1dGUgb25lIG91dHB1dCBwaGFzZSBzdGVwIG9wZXJhdGlvblxcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4rICogQG91dF9tYXNrOiBiaXRtYXNrIG9mIG91dHB1dHMgdG8gc3RlcFxcbisgKiBAc3RlcF9jeWNsZXM6IHBoYXNlIHN0ZXAgaW4gc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzXFxuKyAqIEB0b2Rfc3RlcDogYWxzbyBzdGVwIHRoZSBUb0QgY291bnRlclxcbisgKlxcbisgKiBBbGwgbWFza2VkIG91dHB1dHMgbXVzdCB1c2Ugc3ludGhlc2l6ZXJzIG9mIHRoZSBzYW1lIGZyZXF1ZW5jeSBzaW5jZVxcbisgKiB0aGUgc3RlcCB2YWx1ZSBpcyBpbiBzeW50aGVzaXplciBjbG9jayBjeWNsZXMuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4raW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbitcXHRcXHRcXHQgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsXFxuK1xcdFxcdFxcdCAgICBib29sIHRvZF9zdGVwKVxcbit7XFxuK1xcdHU4IGN0cmw7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2emxkZXYtXFx1MDAzZXBoYXNlX3N0ZXBfbG9jayk7XFxuK1xcbitcXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgcGhhc2Ugc3RlcCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cXG4rXFx0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwsXFxuK1xcdFxcdFxcdFxcdCAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCxcXG4rXFx0XFx0XFx0XFx0ICBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VUyk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0RBVEEsXFxuK1xcdFxcdFxcdCAgICAgICBzdGVwX2N5Y2xlcyk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3dyaXRlX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX01BU0ssIG91dF9tYXNrKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9OVU1CRVIsIDEpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdGN0cmwgPSBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfRFBMTCwgY2gpIHxcXG4rXFx0ICAgICAgIEZJRUxEX1BSRVAoWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCxcXG4rXFx0XFx0XFx0ICBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1dSSVRFKTtcXG4rXFx0aWYgKHRvZF9zdGVwKVxcbitcXHRcXHRjdHJsIHw9IFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVA7XFxuK1xcbitcXHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwsIGN0cmwpO1xcbit9XFxuK1xcbiAvKipcXG4gICogemwzMDczeF9jaGFuX3N0YXRlX3NldCAtIGNvbW1pdCBEUExMIGNoYW5uZWwgc3RhdGUgY2hhbmdlcyB0byBoYXJkd2FyZVxcbiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaFxcbmluZGV4IGRjOWM2ZDk1YmRlZTcuLjk5YzNiNzA4OGY2NzggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXFxuQEAgLTUsMTAgKzUsMTIgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RkZGVmLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC90aW1lNjQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwicmVncy5oXFxcIlxcbiBcXG4rc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wO1xcbiBzdHJ1Y3QgemwzMDczeF9kZXY7XFxuIFxcbiAvKipcXG5AQCAtNDIsNiArNDQsMjEgQEAgaW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgsXFxuIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfdXBkYXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTtcXG4gaW50IHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpO1xcbiBcXG4raW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCk7XFxuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuK1xcdFxcdFxcdCAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXFxuK1xcdFxcdFxcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpO1xcbitpbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG4rXFx0XFx0XFx0ICAgc3RydWN0IHRpbWVzcGVjNjQgdHMpO1xcbitpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YSk7XFxuK2ludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG4rXFx0XFx0XFx0ICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLCBib29sIHRvZF9zdGVwKTtcXG4rXFxuK2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldCk7XFxuK1xcbitpbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKTtcXG4rXFxuIC8qKlxcbiAgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X2dldCAtIGdldCBjYWNoZWQgZGZfb2Zmc2V0IHZzIHRyYWNrZWQgcmVmZXJlbmNlXFxuICAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcXG5AQCAtMjAwLDYgKzIxNywyMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgemwzMDczeF9jaGFuX21vZGVfaXNfcmVmbG9jayhjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxcbiBcXHRyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfZ2V0KGNoYW4pID09IFpMX0RQTExfTU9ERV9SRUZTRUxfTU9ERV9SRUZMT0NLO1xcbiB9XFxuIFxcbisvKipcXG4rICogemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllIC0gY2hlY2sgaWYgY2hhbm5lbCBtb2RlIHN1cHBvcnRzIFRJRSB3cml0ZVxcbisgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXFxuKyAqXFxuKyAqIFRJRSB3cml0ZSBpcyBzdXBwb3J0ZWQgaW4gQVVUTyBhbmQgUkVGTE9DSyBtb2RlcyByZWdhcmRsZXNzIG9mIGxvY2sgc3RhdGUuXFxuKyAqXFxuKyAqIFJldHVybjogdHJ1ZSBpZiBUSUUgd3JpdGUgaXMgc3VwcG9ydGVkLCBmYWxzZSBvdGhlcndpc2VcXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgYm9vbFxcbit6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcXG4re1xcbitcXHRyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfaXNfYXV0byhjaGFuKSB8fFxcbitcXHRcXHR6bDMwNzN4X2NoYW5fbW9kZV9pc19yZWZsb2NrKGNoYW4pO1xcbit9XFxuK1xcbiAvKipcXG4gICogemwzMDczeF9jaGFuX2lzX2hvX3JlYWR5IC0gY2hlY2sgaWYgaG9sZG92ZXIgaXMgcmVhZHlcXG4gICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcXG5pbmRleCA1YjJkNzdmMmMyMjg4Li4yMzBkZjA4ZTI3Y2QxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1xcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1xcbkBAIC0zMjIsNyArMzIyLDcgQEAgaW50IHpsMzA3M3hfd3JpdGVfdTQ4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsIHU2NCB2YWwpXFxuIGludCB6bDMwNzN4X3BvbGxfemVyb191OChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLFxcbiBcXHRcXHRcXHQgdTggbWFzaywgdW5zaWduZWQgaW50IHRpbWVvdXRfdXMpXFxuIHtcXG4tI2RlZmluZSBaTF9QT0xMX1NMRUVQX1VTIDEwXFxuK1xcdHVuc2lnbmVkIGludCBzbGVlcF91cyA9IHRpbWVvdXRfdXMgLyA1MDtcXG4gXFx0dW5zaWduZWQgaW50IHZhbDtcXG4gXFxuIFxcdC8qIENoZWNrIHRoZSByZWdpc3RlciBpcyA4Yml0ICovXFxuQEAgLTMzNiw3ICszMzYsNyBAQCBpbnQgemwzMDczeF9wb2xsX3plcm9fdTgoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IHJlZyxcXG4gXFx0cmVnID0gWkxfUkVHX0FERFIocmVnKSArIFpMX1JBTkdFX09GRlNFVDtcXG4gXFxuIFxcdHJldHVybiByZWdtYXBfcmVhZF9wb2xsX3RpbWVvdXQoemxkZXYtXFx1MDAzZXJlZ21hcCwgcmVnLCB2YWwsICEodmFsIFxcdTAwMjYgbWFzayksXFxuLVxcdFxcdFxcdFxcdFxcdFpMX1BPTExfU0xFRVBfVVMsIHRpbWVvdXRfdXMpO1xcbitcXHRcXHRcXHRcXHRcXHRzbGVlcF91cywgdGltZW91dF91cyk7XFxuIH1cXG4gXFxuIGludCB6bDMwNzN4X21iX29wKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCBvcF9yZWcsIHU4IG9wX3ZhbCxcXG5AQCAtNTExLDYgKzUxMSwxMSBAQCB6bDMwNzN4X2Rldl9zdGF0ZV9mZXRjaChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxcbiBcXHRpbnQgcmM7XFxuIFxcdHU4IGk7XFxuIFxcbitcXHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfU1RFUF9USU1FX01BU0ssXFxuK1xcdFxcdFxcdCAgICAgIFxcdTAwMjZ6bGRldi1cXHUwMDNlb3V0X3N0ZXBfdGltZV9tYXNrKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgWkwzMDczWF9OVU1fUkVGUzsgaSsrKSB7XFxuIFxcdFxcdHJjID0gemwzMDczeF9yZWZfc3RhdGVfZmV0Y2goemxkZXYsIGkpO1xcbiBcXHRcXHRpZiAocmMpIHtcXG5AQCAtMTAzNCw2ICsxMDM5LDE0IEBAIGludCB6bDMwNzN4X2Rldl9wcm9iZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxcbiBcXHQgKiBhbmQvb3IgcG9sbHMgYXJlIHJlcXVpcmVkIHRvIGJlIGRvbmUgYXRvbWljYWxseS5cXG4gXFx0ICovXFxuIFxcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVxcdTAwM2VkZXYsIFxcdTAwMjZ6bGRldi1cXHUwMDNlbXVsdGlvcF9sb2NrKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cXHUwMDNlZGV2LCByYyxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiRmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXFxcblxcXCIpO1xcbitcXHRyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi1cXHUwMDNlZGV2LCBcXHUwMDI2emxkZXYtXFx1MDAzZXBoYXNlX3N0ZXBfbG9jayk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXFx1MDAzZWRldiwgcmMsXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxcXG5cXFwiKTtcXG4rXFx0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXFx1MDAzZWRldiwgXFx1MDAyNnpsZGV2LVxcdTAwM2V0aWVfbG9jayk7XFxuIFxcdGlmIChyYylcXG4gXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXFx1MDAzZWRldiwgcmMsXFxuIFxcdFxcdFxcdFxcdCAgICAgXFxcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxcXG5cXFwiKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oXFxuaW5kZXggNzhkYzIwOGYzZWVhMi4uNjdjMTBlMjU5NTExOCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcXG5AQCAtMjYsNiArMjYsMTAgQEAgc3RydWN0IHpsMzA3M3hfZHBsbDtcXG4gI2RlZmluZSBaTF9QT0xMX0hXUkVHX1RJTUVPVVRfVVNcXHQoNTAgKiBVU0VDX1BFUl9NU0VDKVxcbiAjZGVmaW5lIFpMX1BPTExfTUJfVElNRU9VVF9VU1xcdFxcdCgzMCAqIFVTRUNfUEVSX01TRUMpXFxuICNkZWZpbmUgWkxfUE9MTF9QSEFTRV9FUlJfVElNRU9VVF9VU1xcdCg1MCAqIFVTRUNfUEVSX01TRUMpXFxuKyNkZWZpbmUgWkxfUE9MTF9QSEFTRV9TVEVQX1RJTUVPVVRfVVNcXHQoMzAwMCAqIFVTRUNfUEVSX01TRUMpXFxuKyNkZWZpbmUgWkxfUE9MTF9USUVfV1JfVElNRU9VVF9VU1xcdCgxMDAwICogVVNFQ19QRVJfTVNFQylcXG4rI2RlZmluZSBaTF9QT0xMX1RPRF9SRF9USU1FT1VUX1VTXFx0KDMwICogVVNFQ19QRVJfTVNFQylcXG4rI2RlZmluZSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTXFx0KDEwMDAgKiBVU0VDX1BFUl9NU0VDKVxcbiBcXG4gZW51bSB6bDMwNzN4X2ZsYWdzIHtcXG4gXFx0WkwzMDczWF9GTEFHX1JFRl9QSEFTRV9DT01QXzMyX0JJVCxcXG5AQCAtNTUsNiArNTksOCBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8ge1xcbiAgKiBAcmVnbWFwOiByZWdtYXAgdG8gYWNjZXNzIGRldmljZSByZWdpc3RlcnNcXG4gICogQGluZm86IGRldGVjdGVkIGNoaXAgaW5mb1xcbiAgKiBAbXVsdGlvcF9sb2NrOiB0byBzZXJpYWxpemUgbXVsdGlwbGUgcmVnaXN0ZXIgb3BlcmF0aW9uc1xcbisgKiBAdGllX2xvY2s6IHRvIHNlcmlhbGl6ZSBUSUUgd3JpdGUgb3BlcmF0aW9uc1xcbisgKiBAcGhhc2Vfc3RlcF9sb2NrOiB0byBzZXJpYWxpemUgb3V0cHV0IHBoYXNlIHN0ZXAgb3BlcmF0aW9uc1xcbiAgKiBAcmVmOiBhcnJheSBvZiBpbnB1dCByZWZlcmVuY2VzJyBpbnZhcmlhbnRzXFxuICAqIEBvdXQ6IGFycmF5IG9mIG91dHMnIGludmFyaWFudHNcXG4gICogQHN5bnRoOiBhcnJheSBvZiBzeW50aHMnIGludmFyaWFudHNcXG5AQCAtNjMsNiArNjksNyBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8ge1xcbiAgKiBAa3dvcmtlcjogdGhyZWFkIGZvciBwZXJpb2RpYyB3b3JrXFxuICAqIEB3b3JrOiBwZXJpb2RpYyB3b3JrXFxuICAqIEBjbG9ja19pZDogY2xvY2sgaWQgb2YgdGhlIGRldmljZVxcbisgKiBAb3V0X3N0ZXBfdGltZV9tYXNrOiBvdXRwdXQgc3RlcC10aW1lIG1hc2sgKGRldmljZS1nbG9iYWwpXFxuICAqIEBwaGFzZV9hdmdfZmFjdG9yOiBwaGFzZSBvZmZzZXQgbWVhc3VyZW1lbnQgYXZlcmFnaW5nIGZhY3RvclxcbiAgKiBAZnJlcV9tb25pdG9yOiBpcyBmcmVxdWVuY3kgbW9uaXRvciBlbmFibGVkXFxuICAqL1xcbkBAIC03MSw2ICs3OCw4IEBAIHN0cnVjdCB6bDMwNzN4X2RldiB7XFxuIFxcdHN0cnVjdCByZWdtYXBcXHRcXHRcXHQqcmVnbWFwO1xcbiBcXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm9cXHQqaW5mbztcXG4gXFx0c3RydWN0IG11dGV4XFx0XFx0XFx0bXVsdGlvcF9sb2NrO1xcbitcXHRzdHJ1Y3QgbXV0ZXhcXHRcXHRcXHR0aWVfbG9jaztcXG4rXFx0c3RydWN0IG11dGV4XFx0XFx0XFx0cGhhc2Vfc3RlcF9sb2NrO1xcbiBcXG4gXFx0LyogSW52YXJpYW50cyAqL1xcbiBcXHRzdHJ1Y3QgemwzMDczeF9yZWZcXHRyZWZbWkwzMDczWF9OVU1fUkVGU107XFxuQEAgLTg3LDYgKzk2LDcgQEAgc3RydWN0IHpsMzA3M3hfZGV2IHtcXG4gXFxuIFxcdC8qIFBlci1jaGlwIHBhcmFtZXRlcnMgKi9cXG4gXFx0dTY0XFx0XFx0XFx0Y2xvY2tfaWQ7XFxuK1xcdHUxNlxcdFxcdFxcdG91dF9zdGVwX3RpbWVfbWFzaztcXG4gXFx0dThcXHRcXHRcXHRwaGFzZV9hdmdfZmFjdG9yO1xcbiBcXHRib29sXFx0XFx0XFx0ZnJlcV9tb25pdG9yO1xcbiB9O1xcbkBAIC0zMDgsNiArMzE4LDE5IEBAIHpsMzA3M3hfZGV2X291dF9pc19lbmFibGVkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxcbiBcXHRyZXR1cm4gemwzMDczeF9zeW50aF9pc19lbmFibGVkKHN5bnRoKSBcXHUwMDI2XFx1MDAyNiB6bDMwNzN4X291dF9pc19lbmFibGVkKG91dCk7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiB6bDMwNzN4X2Rldl9vdXRfaXNfc3RlcHBlZCAtIGNoZWNrIGlmIG91dHB1dCBpcyBpbiBzdGVwLXRpbWUgbWFza1xcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGluZGV4OiBvdXRwdXQgaW5kZXhcXG4rICpcXG4rICogUmV0dXJuOiB0cnVlIGlmIG91dHB1dCBpcyBhZmZlY3RlZCBieSBzdGVwLXRpbWUgb3BlcmF0aW9uc1xcbisgKi9cXG4rc3RhdGljIGlubGluZSBib29sXFxuK3psMzA3M3hfZGV2X291dF9pc19zdGVwcGVkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxcbit7XFxuK1xcdHJldHVybiAhISh6bGRldi1cXHUwMDNlb3V0X3N0ZXBfdGltZV9tYXNrIFxcdTAwMjYgQklUKGluZGV4KSk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiB6bDMwNzN4X2Rldl9vdXRfZHBsbF9nZXQgLSBnZXQgRFBMTCBJRCB0aGUgb3V0cHV0IGlzIGRyaXZlbiBieVxcbiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jXFxuaW5kZXggODNiZDMwMjdkYmFhMS4uZjJlMTM3NDc1YjQwZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcXG5AQCAtMiw2ICsyLDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY2xlYW51cC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYnVnLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb250YWluZXJfb2YuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Rldl9wcmludGsuaFxcdTAwM2VcXG5AQCAtMTMsNiArMTQsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0bGluay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3ByaW50Zi5oXFx1MDAzZVxcbiBcXG5AQCAtMjMxMyw0NSArMjMxNSwzODQgQEAgemwzMDczeF9kcGxsX2luaXRfZmluZV9waGFzZV9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcXG4gXFx0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19TWU5USF9QSEFTRV9TSElGVF9DVFJMLCAweDAxKTtcXG4gfVxcbiBcXG4rLyogTWF4aW11bSBmcmVxdWVuY3kgYWRqdXN0bWVudDogKy0xJSBvZiBub21pbmFsIGluIHBwYiAqL1xcbisjZGVmaW5lIFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESlxcdDEwMDAwMDAwXFxuK1xcbiAvKipcXG4tICogemwzMDczeF9kcGxsX2FsbG9jIC0gYWxsb2NhdGUgRFBMTCBkZXZpY2VcXG4tICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuLSAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlclxcbisgKiB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQgLSByZWFkIGN1cnJlbnQgdGltZSBmcm9tIFRvRCBjb3VudGVyc1xcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cXG4rICogQHRzOiB0aW1lc3BlYyB0byBzdG9yZSBjdXJyZW50IHRpbWVcXG4rICogQHN0czogb3B0aW9uYWwgc3lzdGVtIHRpbWVzdGFtcCBwYWlyIGZvciBjcm9zcy10aW1lc3RhbXBpbmdcXG4gICpcXG4tICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKVxcbit7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBwdHBfaW5mbyk7XFxuK1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZHBsbC1cXHUwMDNlZGV2LCB6bGRwbGwtXFx1MDAzZWlkLCBmYWxzZSwgdHMsIHN0cyk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCAtIHNldCBUb0QgY291bnRlcnMgdG8gZ2l2ZW4gdGltZVxcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cXG4rICogQHRzOiB0aW1lc3BlYyB3aXRoIHRpbWUgdG8gc2V0XFxuICAqXFxuLSAqIFJldHVybjogcG9pbnRlciB0byBEUExMIGRldmljZSBvbiBzdWNjZXNzLCBlcnJvciBwb2ludGVyIG9uIGVycm9yXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbiAgKi9cXG4tc3RydWN0IHpsMzA3M3hfZHBsbCAqXFxuLXpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXFxuK1xcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcXG4ge1xcbi1cXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBwdHBfaW5mbyk7XFxuIFxcbi1cXHR6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTtcXG4tXFx0aWYgKCF6bGRwbGwpXFxuLVxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuIFxcbi1cXHR6bGRwbGwtXFx1MDAzZWRldiA9IHpsZGV2O1xcbi1cXHR6bGRwbGwtXFx1MDAzZWlkID0gY2g7XFxuLVxcdG11dGV4X2luaXQoXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuLVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZ6bGRwbGwtXFx1MDAzZXBpbnMpO1xcbitcXHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF93cml0ZSh6bGRwbGwtXFx1MDAzZWRldiwgemxkcGxsLVxcdTAwM2VpZCwgKnRzKTtcXG4rfVxcbiBcXG4tXFx0cmV0dXJuIHpsZHBsbDtcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwIC0gYWRqdXN0IHN1Yi1zZWNvbmQgdGltZSB2aWEgcGhhc2Ugc3RlcFxcbisgKiBAemxkcGxsOiBEUExMIGNoYW5uZWxcXG4rICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMgKG11c3QgYmUgd2l0aGluICgtTlNFQ19QRVJfU0VDLFxcbisgKiAgICAgICAgIE5TRUNfUEVSX1NFQykpXFxuKyAqXFxuKyAqIFVzZXMgdGhlIG91dHB1dCBwaGFzZSBzdGVwIG1lY2hhbmlzbSB3aXRoIHRvZF9zdGVwPTEgdG8gYWRqdXN0IGJvdGhcXG4rICogdGhlIG91dHB1dCBjbG9jayBwaGFzZSBhbmQgdGhlIFRvRCBjb3VudGVyIHNpbXVsdGFuZW91c2x5LiBUaGlzIGtlZXBzXFxuKyAqIG91dHB1dHMgYW5kIFRvRCBjb2hlcmVudC4gT25seSB2YWxpZCBmb3IgTkNPLlxcbisgKlxcbisgKiBPdXRwdXRzIGFyZSBncm91cGVkIGJ5IHN5bnRoZXNpemVyIHNpbmNlIHRoZSBwaGFzZSBzdGVwIHZhbHVlIGlzIGluXFxuKyAqIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcy4gVGhlIGZpcnN0IHN5bnRoIGdyb3VwIHdpdGggZW5hYmxlZCBvdXRwdXRzXFxuKyAqIHVzZXMgdG9kX3N0ZXAgdG8gYWRqdXN0IGJvdGggb3V0cHV0cyBhbmQgdGhlIFRvRCBjb3VudGVyLiBSZW1haW5pbmdcXG4rICogZ3JvdXBzIHN0ZXAgb3V0cHV0cyBvbmx5LiBJZiBubyBzeW50aCBoYXMgZW5hYmxlZCBvdXRwdXRzLCB0aGUgVG9EXFxuKyAqIGNvdW50ZXIgaXMgc3RlcHBlZCBhbG9uZSB1c2luZyBhbiBlbXB0eSBvdXRwdXQgbWFzayAodGhlIEZXIHVzZXNcXG4rICogdGhlIGZpcnN0IGVuYWJsZWQgc3ludGgncyBwZXJpb2QgZm9yIHRoZSBjb252ZXJzaW9uKS5cXG4rICpcXG4rICogUmV0dXJuOlxcbisgKiAqICUwXFx0XFx0XFx0LSBzdWNjZXNzIChvciBwYXJ0aWFsIHN1Y2Nlc3MgaWYgYSBsYXRlciBzeW50aCBncm91cFxcbisgKlxcdFxcdFxcdCAgZmFpbGVkIGFmdGVyIHRoZSBmaXJzdCB3YXMgYWxyZWFkeSBzdGVwcGVkKVxcbisgKiAqICUtRU9QTk9UU1VQUFxcdC0gbm8gc3ludGhzIGF2YWlsYWJsZVxcbisgKiAqIG5lZ2F0aXZlXFx0XFx0LSBlcnJvclxcbisgKi9cXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBzNjQgZGVsdGEpXFxuK3tcXG4rXFx0dTE2IHN5bnRoX21hc2tbWkwzMDczWF9OVU1fU1lOVEhTXSA9IHt9O1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVxcdTAwM2VkZXY7XFxuK1xcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X3N5bnRoICpzeW50aDtcXG4rXFx0c3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbjtcXG4rXFx0dTMyIGZpcnN0X3N5bnRoX2ZyZXEgPSAwO1xcbitcXHRib29sIHRvZF9zdGVwcGVkID0gZmFsc2U7XFxuK1xcdHMzMiBzdGVwX2N5Y2xlcztcXG4rXFx0dTMyIHN5bnRoX2ZyZXE7XFxuK1xcdGludCByYztcXG4rXFx0dTggaTtcXG4rXFxuK1xcdC8qIEJ1aWxkIHBlci1zeW50aCBvdXRwdXQgbWFza3MgZnJvbSByZWdpc3RlcmVkIG91dHB1dCBwaW5zICovXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnkocGluLCBcXHUwMDI2emxkcGxsLVxcdTAwM2VwaW5zLCBsaXN0KSB7XFxuK1xcdFxcdHU4IG91dF9pZCwgc3ludGhfaWQ7XFxuK1xcbitcXHRcXHRpZiAoemwzMDczeF9kcGxsX2lzX2lucHV0X3BpbihwaW4pKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdG91dF9pZCA9IHpsMzA3M3hfb3V0cHV0X3Bpbl9vdXRfZ2V0KHBpbi1cXHUwMDNlaWQpO1xcbitcXG4rXFx0XFx0aWYgKCF6bDMwNzN4X2Rldl9vdXRfaXNfc3RlcHBlZCh6bGRldiwgb3V0X2lkKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRzeW50aF9pZCA9IHpsMzA3M3hfZGV2X291dF9zeW50aF9nZXQoemxkZXYsIG91dF9pZCk7XFxuK1xcdFxcdGlmIChzeW50aF9pZCBcXHUwMDNlPSBaTDMwNzNYX05VTV9TWU5USFMpIHtcXG4rXFx0XFx0XFx0ZGV2X3dhcm4oemxkZXYtXFx1MDAzZWRldiwgXFxcIlVuZXhwZWN0ZWQgc3ludGggaWQgZm9yIE9VVCV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgb3V0X2lkKTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFx0XFx0c3ludGhfbWFza1tzeW50aF9pZF0gfD0gQklUKG91dF9pZCk7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFByb2Nlc3MgZWFjaCBzeW50aCBncm91cCAqL1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgWkwzMDczWF9OVU1fU1lOVEhTOyBpKyspIHtcXG4rXFx0XFx0c3ludGggPSB6bDMwNzN4X3N5bnRoX3N0YXRlX2dldCh6bGRldiwgaSk7XFxuK1xcdFxcdGlmICghemwzMDczeF9zeW50aF9pc19lbmFibGVkKHN5bnRoKSB8fFxcbitcXHRcXHQgICAgemwzMDczeF9zeW50aF9kcGxsX2dldChzeW50aCkgIT0gemxkcGxsLVxcdTAwM2VpZClcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRzeW50aF9mcmVxID0gemwzMDczeF9zeW50aF9mcmVxX2dldChzeW50aCk7XFxuK1xcbitcXHRcXHQvKiBSZW1lbWJlciBmaXJzdCBlbmFibGVkIHN5bnRoIGZyZXEgZm9yIFRvRC1vbmx5IGZhbGxiYWNrICovXFxuK1xcdFxcdGlmICghZmlyc3Rfc3ludGhfZnJlcSlcXG4rXFx0XFx0XFx0Zmlyc3Rfc3ludGhfZnJlcSA9IHN5bnRoX2ZyZXE7XFxuK1xcbitcXHRcXHRpZiAoIXN5bnRoX21hc2tbaV0pXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0LyogU2FmZSBmb3IgczMyOiBtYXggc3ludGggZnJlcSBpcyA3NTAgTUh6ICovXFxuK1xcdFxcdHN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIHN5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7XFxuK1xcbitcXHRcXHRyYyA9IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHN5bnRoX21hc2tbaV0sIHN0ZXBfY3ljbGVzLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICF0b2Rfc3RlcHBlZCk7XFxuK1xcdFxcdGlmIChyYykge1xcbitcXHRcXHRcXHRpZiAodG9kX3N0ZXBwZWQpIHtcXG4rXFx0XFx0XFx0XFx0ZGV2X3dhcm4oemxkZXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0XFx0IFxcXCJQYXJ0aWFsIHBoYXNlIHN0ZXAgZmFpbHVyZVxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdHJldHVybiByYztcXG4rXFx0XFx0fVxcbitcXHRcXHR0b2Rfc3RlcHBlZCA9IHRydWU7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghZmlyc3Rfc3ludGhfZnJlcSlcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0LyogTm8gZW5hYmxlZCBvdXRwdXRzIGZvdW5kOyBzdGVwIFRvRCBjb3VudGVyIG9ubHkgdXNpbmcgdGhlXFxuK1xcdCAqIGZpcnN0IGVuYWJsZWQgc3ludGgncyBwZXJpb2QgKGVtcHR5IG91dHB1dCBtYXNrKS5cXG4rXFx0ICovXFxuK1xcdGlmICghdG9kX3N0ZXBwZWQpIHtcXG4rXFx0XFx0c3RlcF9jeWNsZXMgPSBkaXZfczY0KGRlbHRhICogZmlyc3Rfc3ludGhfZnJlcSwgTlNFQ19QRVJfU0VDKTtcXG4rXFx0XFx0cmV0dXJuIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkLCAwLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RlcF9jeWNsZXMsIHRydWUpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gLyoqXFxuLSAqIHpsMzA3M3hfZHBsbF9mcmVlIC0gZnJlZSBEUExMIGRldmljZVxcbi0gKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmVcXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lIC0gYWRqdXN0IFBUUCBjbG9jayB0aW1lXFxuKyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xcbisgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kc1xcbiAgKlxcbi0gKiBEZWFsbG9jYXRlcyBnaXZlbiBEUExMIGRldmljZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBieSBAemwzMDczeF9kcGxsX2FsbG9jLlxcbisgKiBGb3IgTkNPLCBsYXJnZSBkZWx0YXMgKFxcdTAwM2U9IDEgc2Vjb25kKSBhcmUgc3BsaXQgaW50byBhIFRvRFxcbisgKiByZWFkLW1vZGlmeS13cml0ZSBmb3IgdGhlIHNlY29uZHMgcGFydCBhbmQgYW4gb3V0cHV0IHBoYXNlIHN0ZXAgZm9yXFxuKyAqIHRoZSBzdWItc2Vjb25kIHJlbWFpbmRlci4gU3ViLXNlY29uZCBkZWx0YXMgdXNlIHBoYXNlIHN0ZXAgZGlyZWN0bHksXFxuKyAqIGZhbGxpbmcgYmFjayB0byBUb0QgcmVhZC1tb2RpZnktd3JpdGUgaWYgcGhhc2Ugc3RlcCBvciBUSUUgd3JpdGVcXG4rICogZmFpbHMuIEluIEFVVE8vUkVGTE9DSyBtb2RlcywgbGFyZ2UgZGVsdGFzIGFyZSBzcGxpdCBpbnRvIFRvRFxcbisgKiByZWFkLW1vZGlmeS13cml0ZSBmb3Igc2Vjb25kcyBhbmQgVElFIHdyaXRlIGZvciB0aGUgc3ViLXNlY29uZFxcbisgKiByZW1haW5kZXIuIFN1Yi1zZWNvbmQgZGVsdGFzIHVzZSBUSUUgd3JpdGUgZGlyZWN0bHkuXFxuKyAqXFxuKyAqIElmIHRoZSBzZWNvbmRzIHBhcnQgd2FzIGFscmVhZHkgY29tbWl0dGVkIHdoZW4gdGhlIHN1Yi1zZWNvbmRcXG4rICogbWVjaGFuaXNtIGZhaWxzLCByZXR1cm5zIDAgdG8gcHJldmVudCB0aGUgUFRQIHNlcnZvIGZyb20gcmV0cnlpbmdcXG4rICogdGhlIGZ1bGwgZGVsdGEgYW5kIGFwcGx5aW5nIHNlY29uZHMgYWdhaW4uXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzIChvciBwYXJ0aWFsIHN1Y2Nlc3MpLCBcXHUwMDNjMCBvbiBlcnJvclxcbiAgKi9cXG4tdm9pZFxcbi16bDMwNzN4X2RwbGxfZnJlZShzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXFxuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczY0IGRlbHRhKVxcbiB7XFxuLVxcdFdBUk4oemxkcGxsLVxcdTAwM2VkcGxsX2RldiwgXFxcIkRQTEwgZGV2aWNlIGlzIHN0aWxsIHJlZ2lzdGVyZWRcXFxcblxcXCIpO1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgcHRwX2luZm8pO1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVxcdTAwM2VkZXY7XFxuK1xcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XFxuK1xcdGJvb2wgc2VjX2FkanVzdGVkID0gZmFsc2U7XFxuK1xcdHN0cnVjdCB0aW1lc3BlYzY0IHRzO1xcbitcXHRpbnQgcmM7XFxuIFxcbi1cXHRtdXRleF9kZXN0cm95KFxcdTAwMjZ6bGRwbGwtXFx1MDAzZWxvY2spO1xcbi1cXHRrZnJlZSh6bGRwbGwpO1xcbitcXHRpZiAoIWRlbHRhKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdC8qIE1vZGVzIHdpdGhvdXQgcGhhc2Ugc3RlcCBvciBUSUUgdXNlIHBsYWluIFRvRCBhZGp1c3QgKi9cXG4rXFx0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQpO1xcbitcXHRpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIXpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjaGFuKSlcXG4rXFx0XFx0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgbnNfdG9fdGltZXNwZWM2NChkZWx0YSkpO1xcbitcXG4rXFx0LyogU3BsaXQgb2ZmIHNlY29uZHMgdmlhIFRvRCByZWFkLW1vZGlmeS13cml0ZSBzbyB0aGUgc3ViLXNlY29uZFxcbitcXHQgKiByZW1haW5kZXIgY2FuIGJlIGFwcGxpZWQgdGhyb3VnaCB0aGUgb3V0cHV0LWNvaGVyZW50IG1lY2hhbmlzbVxcbitcXHQgKiAocGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUpLlxcbitcXHQgKi9cXG4rXFx0aWYgKGRlbHRhIFxcdTAwM2U9IE5TRUNfUEVSX1NFQyB8fCBkZWx0YSBcXHUwMDNjPSAtTlNFQ19QRVJfU0VDKSB7XFxuK1xcdFxcdHMzMiByZW1haW5kZXI7XFxuK1xcbitcXHRcXHR0cy50dl9zZWMgPSBkaXZfczY0X3JlbShkZWx0YSwgTlNFQ19QRVJfU0VDLCBcXHUwMDI2cmVtYWluZGVyKTtcXG4rXFx0XFx0dHMudHZfbnNlYyA9IDA7XFxuK1xcdFxcdGRlbHRhID0gcmVtYWluZGVyO1xcbitcXG4rXFx0XFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVxcdTAwM2VpZCwgdHMpO1xcbitcXHRcXHRpZiAocmMpXFxuK1xcdFxcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdFxcdC8qIE5vIHN1Yi1zZWNvbmQgcmVtYWluZGVyLCBkb25lICovXFxuK1xcdFxcdGlmICghZGVsdGEpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0XFx0LyogV2FpdCBmb3IgdGhlIFRvRCB3cml0ZSB0byBiZSBhcHBsaWVkIGF0IHRoZSAxIEh6IGVkZ2VcXG4rXFx0XFx0ICogYmVmb3JlIGlzc3VpbmcgcGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUsIHNvIHRoZSBwZW5kaW5nXFxuK1xcdFxcdCAqIFdSX05FWFRfMUhaIGRvZXMgbm90IG92ZXJ3cml0ZSB0aGUgc3ViLXNlY29uZCBhZGp1c3RtZW50LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQpO1xcbitcXHRcXHRpZiAocmMpXFxuK1xcdFxcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdFxcdHNlY19hZGp1c3RlZCA9IHRydWU7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIEFwcGx5IHN1Yi1zZWNvbmQgZGVsdGEgdmlhIHBoYXNlIHN0ZXAgKE5DTykgb3IgVElFIHdyaXRlICovXFxuK1xcdGlmICh6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikpIHtcXG4rXFx0XFx0cmMgPSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCh6bGRwbGwsIGRlbHRhKTtcXG4rXFx0XFx0aWYgKCFyYylcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHJjID0gemwzMDczeF9jaGFuX3RpZV93cml0ZSh6bGRldiwgemxkcGxsLVxcdTAwM2VpZCwgZGVsdGEpO1xcbitcXHRcXHRpZiAoIXJjKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0LyogUGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUgZmFpbGVkLCBmYWxsIGJhY2sgdG8gVG9EIGFkanVzdCAqL1xcbitcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkLFxcbitcXHRcXHRcXHRcXHQgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTtcXG4rXFxuK1xcdC8qIEluIHRoZSB1bmxpa2VseSBldmVudCB0aGF0IGJvdGggcGhhc2Ugc3RlcC9USUUgd3JpdGUgYW5kIGZhbGxiYWNrXFxuK1xcdCAqIFRvRCBhZGp1c3QgZmFpbCBhZnRlciBzZWNvbmRzIHdlcmUgYWxyZWFkeSBjb21taXR0ZWQsIHJldHVyblxcbitcXHQgKiBzdWNjZXNzIHRvIHByZXZlbnQgdGhlIFBUUCBzZXJ2byBmcm9tIHJldHJ5aW5nIHRoZSBmdWxsIGRlbHRhIGFuZFxcbitcXHQgKiBhcHBseWluZyBzZWNvbmRzIGFnYWluLiBUaGUgc3ViLXNlY29uZCByZXNpZHVhbCB3aWxsIHNlbGYtY29ycmVjdFxcbitcXHQgKiBpbiB0aGUgbmV4dCBzZXJ2byBjeWNsZS5cXG4rXFx0ICovXFxuK1xcdGlmIChyYyBcXHUwMDI2XFx1MDAyNiBzZWNfYWRqdXN0ZWQpIHtcXG4rXFx0XFx0ZGV2X3dhcm4oemxkZXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0IFxcXCJTdWItc2Vjb25kIGFkanVzdG1lbnQgZmFpbGVkIGFmdGVyIHNlY29uZHMgYXBwbGllZFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gcmM7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUgLSBhZGp1c3QgUFRQIGNsb2NrIGZyZXF1ZW5jeVxcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cXG4rICogQHNjYWxlZF9wcG06IGZyZXF1ZW5jeSBhZGp1c3RtZW50IGluIHNjYWxlZCBwcG0gKHBwbSAqIDJeMTYpXFxuKyAqXFxuKyAqIE9ubHkgc3VwcG9ydGVkIGZvciBOQ08uIFdyaXRlcyB0aGUgZGVsdGEgZnJlcXVlbmN5IG9mZnNldCByZWdpc3Rlci5cXG4rICpcXG4rICogUmV0dXJuOlxcbisgKiAqICUwXFx0XFx0XFx0LSBzdWNjZXNzIG9yIEBzY2FsZWRfcHBtIGlzIHplcm8gKG5vLW9wKVxcbisgKiAqICUtRU9QTk9UU1VQUFxcdC0gTkNPIHBpbiBpcyBub3QgY29ubmVjdGVkIGFuZCBAc2NhbGVkX3BwbSBpcyBub24temVyb1xcbisgKiAqIG5lZ2F0aXZlXFx0XFx0LSBvdGhlciBlcnJvclxcbisgKi9cXG4rc3RhdGljIGludFxcbit6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBsb25nIHNjYWxlZF9wcG0pXFxuK3tcXG4rXFx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIHB0cF9pbmZvKTtcXG4rXFx0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjtcXG4rXFx0czY0IG9mZnNldDtcXG4rXFxuK1xcdC8qIENvbnZlcnQgc2NhbGVkX3BwbSB0byBkZl9vZmZzZXQgaW4gMl4tNDggc3RlcHM6XFxuK1xcdCAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogMl4zMikgLyAxMF42XFxuK1xcdCAqXFxuK1xcdCAqIFNpbXBsaWZ5IHRvIGF2b2lkIG92ZXJmbG93OlxcbitcXHQgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDJeMjYpIC8gNV42XFxuK1xcdCAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogNjcxMDg4NjQpIC8gMTU2MjVcXG4rXFx0ICovXFxuK1xcdG9mZnNldCA9IC1kaXZfczY0KChzNjQpc2NhbGVkX3BwbSAqIDY3MTA4ODY0TEwsIDE1NjI1KTtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdGNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZHBsbC1cXHUwMDNlZGV2LCB6bGRwbGwtXFx1MDAzZWlkKTtcXG4rXFx0aWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikpXFxuK1xcdFxcdHJldHVybiBzY2FsZWRfcHBtID8gLUVPUE5PVFNVUFAgOiAwO1xcbitcXHRpZiAob2Zmc2V0ID09IGNoYW4tXFx1MDAzZWRmX29mZnNldClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4gemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoemxkcGxsLVxcdTAwM2VkZXYsIHpsZHBsbC1cXHUwMDNlaWQsIG9mZnNldCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlIC0gYWRqdXN0IFBUUCBjbG9jayBwaGFzZVxcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cXG4rICogQGRlbHRhOiBwaGFzZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzXFxuKyAqXFxuKyAqIE9ubHkgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMuIFVzZXMgVElFIHdyaXRlIGZvclxcbisgKiBuYW5vc2Vjb25kIHJlc29sdXRpb24gcGhhc2UgYWRqdXN0bWVudC5cXG4rICpcXG4rICogUmV0dXJuOlxcbisgKiAqICUwXFx0XFx0XFx0LSBzdWNjZXNzIG9yIEBkZWx0YSBpcyB6ZXJvIChuby1vcClcXG4rICogKiAlLUVPUE5PVFNVUFBcXHQtIG1vZGUgZG9lcyBub3Qgc3VwcG9ydCBUSUUgYW5kIEBkZWx0YSBpcyBub24temVyb1xcbisgKiAqIG5lZ2F0aXZlXFx0XFx0LSBvdGhlciBlcnJvclxcbisgKi9cXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczMyIGRlbHRhKVxcbit7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBwdHBfaW5mbyk7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXFx1MDAzZWRldjtcXG4rXFx0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjtcXG4rXFxuK1xcdGlmICghZGVsdGEpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZ6bGRwbGwtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQpO1xcbitcXG4rXFx0aWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY2hhbikpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHJldHVybiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkLCBkZWx0YSk7XFxuK31cXG4rXFxuK3N0YXRpYyBzMzJcXG4remwzMDczeF9kcGxsX3B0cF9nZXRtYXhwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8gX19hbHdheXNfdW51c2VkKVxcbit7XFxuK1xcdC8qIEhXIGxpbWl0cyBUSUUgd3JpdGUgdG8gKy0xIHNlY29uZC4gUmV0dXJuIHRoZSBjb25zdGFudCBIV1xcbitcXHQgKiBsaW1pdCBhbmQgbGV0IGFkanBoYXNlIGhhbmRsZSBtb2RlLXNwZWNpZmljIGNoZWNrcy5cXG4rXFx0ICovXFxuK1xcdHJldHVybiBOU0VDX1BFUl9TRUMgLSAxO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHB0cF9jbG9ja19pbmZvIHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mbyA9IHtcXG4rXFx0Lm93bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG4rXFx0Lm1heF9hZGpcXHQ9IFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESixcXG4rXFx0LmdldHRpbWV4NjRcXHQ9IHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCxcXG4rXFx0LnNldHRpbWU2NFxcdD0gemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQsXFxuK1xcdC5hZGp0aW1lXFx0PSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUsXFxuK1xcdC5hZGpmaW5lXFx0PSB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUsXFxuK1xcdC5hZGpwaGFzZVxcdD0gemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSxcXG4rXFx0LmdldG1heHBoYXNlXFx0PSB6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlLFxcbit9O1xcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIgLSByZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsXFxuKyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byByZWdpc3RlciBQVFAgY2xvY2sgZm9yXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcXG4re1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVxcdTAwM2VkZXY7XFxuK1xcdHN0cnVjdCBwdHBfY2xvY2sgKnB0cF9jbG9jaztcXG4rXFxuK1xcdHpsZHBsbC1cXHUwMDNlcHRwX2luZm8gPSB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm87XFxuK1xcdHNucHJpbnRmKHpsZHBsbC1cXHUwMDNlcHRwX2luZm8ubmFtZSwgc2l6ZW9mKHpsZHBsbC1cXHUwMDNlcHRwX2luZm8ubmFtZSksXFxuK1xcdFxcdCBcXFwiJXMtZHBsbCV1XFxcIiwgZGV2X25hbWUoemxkZXYtXFx1MDAzZWRldiksIHpsZHBsbC1cXHUwMDNlaWQpO1xcbitcXG4rXFx0cHRwX2Nsb2NrID0gcHRwX2Nsb2NrX3JlZ2lzdGVyKFxcdTAwMjZ6bGRwbGwtXFx1MDAzZXB0cF9pbmZvLCB6bGRldi1cXHUwMDNlZGV2KTtcXG4rXFx0aWYgKElTX0VSUihwdHBfY2xvY2spKSB7XFxuK1xcdFxcdGRldl9lcnIoemxkZXYtXFx1MDAzZWRldiwgXFxcIkZhaWxlZCB0byByZWdpc3RlciBQVFAgY2xvY2sgZm9yIERQTEwldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0emxkcGxsLVxcdTAwM2VpZCk7XFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKHB0cF9jbG9jayk7XFxuK1xcdH1cXG4rXFxuK1xcdHpsZHBsbC1cXHUwMDNlcHRwX2Nsb2NrID0gcHRwX2Nsb2NrO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIgLSB1bnJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgYSBEUExMIGNoYW5uZWxcXG4rICogQHpsZHBsbDogRFBMTCBjaGFubmVsIHRvIHVucmVnaXN0ZXIgUFRQIGNsb2NrIGZvclxcbisgKi9cXG4rc3RhdGljIHZvaWQgemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcXG4re1xcbitcXHRpZiAoIUlTX0VSUl9PUl9OVUxMKHpsZHBsbC1cXHUwMDNlcHRwX2Nsb2NrKSkge1xcbitcXHRcXHRwdHBfY2xvY2tfdW5yZWdpc3Rlcih6bGRwbGwtXFx1MDAzZXB0cF9jbG9jayk7XFxuK1xcdFxcdHpsZHBsbC1cXHUwMDNlcHRwX2Nsb2NrID0gTlVMTDtcXG4rXFx0fVxcbiB9XFxuIFxcbiAvKipcXG5AQCAtMjQzNiw2ICsyNzc3LDQ3IEBAIHpsMzA3M3hfZHBsbF9yZWZfc3luY19wYWlyc19yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbisvKipcXG4rICogemwzMDczeF9kcGxsX2FsbG9jIC0gYWxsb2NhdGUgRFBMTCBkZXZpY2VcXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuKyAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlclxcbisgKlxcbisgKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuXFxuKyAqXFxuKyAqIFJldHVybjogcG9pbnRlciB0byBEUExMIGRldmljZSBvbiBzdWNjZXNzLCBlcnJvciBwb2ludGVyIG9uIGVycm9yXFxuKyAqL1xcbitzdHJ1Y3QgemwzMDczeF9kcGxsICpcXG4remwzMDczeF9kcGxsX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKVxcbit7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbDtcXG4rXFxuK1xcdHpsZHBsbCA9IGt6YWxsb2Nfb2JqKCp6bGRwbGwpO1xcbitcXHRpZiAoIXpsZHBsbClcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuK1xcbitcXHR6bGRwbGwtXFx1MDAzZWRldiA9IHpsZGV2O1xcbitcXHR6bGRwbGwtXFx1MDAzZWlkID0gY2g7XFxuK1xcdG11dGV4X2luaXQoXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuK1xcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZ6bGRwbGwtXFx1MDAzZXBpbnMpO1xcbitcXG4rXFx0cmV0dXJuIHpsZHBsbDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9mcmVlIC0gZnJlZSBEUExMIGRldmljZVxcbisgKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmVcXG4rICpcXG4rICogRGVhbGxvY2F0ZXMgZ2l2ZW4gRFBMTCBkZXZpY2UgcHJldmlvdXNseSBhbGxvY2F0ZWQgYnkgQHpsMzA3M3hfZHBsbF9hbGxvYy5cXG4rICovXFxuK3ZvaWRcXG4remwzMDczeF9kcGxsX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxcbit7XFxuK1xcdFdBUk4oemxkcGxsLVxcdTAwM2VkcGxsX2RldiwgXFxcIkRQTEwgZGV2aWNlIGlzIHN0aWxsIHJlZ2lzdGVyZWRcXFxcblxcXCIpO1xcbitcXG4rXFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4rXFx0a2ZyZWUoemxkcGxsKTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIHpsMzA3M3hfZHBsbF9yZWdpc3RlciAtIHJlZ2lzdGVyIERQTEwgZGV2aWNlIGFuZCBhbGwgaXRzIHBpbnNcXG4gICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXFxuQEAgLTI0NjYsNiArMjg0OCwxMyBAQCB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxcbiBcXHRcXHRyZXR1cm4gcmM7XFxuIFxcdH1cXG4gXFxuK1xcdHJjID0gemwzMDczeF9kcGxsX3B0cF9yZWdpc3Rlcih6bGRwbGwpO1xcbitcXHRpZiAocmMpIHtcXG4rXFx0XFx0emwzMDczeF9kcGxsX3BpbnNfdW5yZWdpc3Rlcih6bGRwbGwpO1xcbitcXHRcXHR6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTtcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXHR9XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtMjQ3OSw3ICsyODY4LDcgQEAgemwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcXG4gdm9pZFxcbiB6bDMwNzN4X2RwbGxfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXFxuIHtcXG4tXFx0LyogVW5yZWdpc3RlciBhbGwgcGlucyBhbmQgZHBsbCAqL1xcbitcXHR6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIoemxkcGxsKTtcXG4gXFx0emwzMDczeF9kcGxsX3BpbnNfdW5yZWdpc3Rlcih6bGRwbGwpO1xcbiBcXHR6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmhcXG5pbmRleCBmYWViYzQwMmJhMWI3Li45OTMyMjFkYzYzMjQ5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaFxcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaFxcbkBAIC01LDYgKzUsNyBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RwbGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpc3QuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJjb3JlLmhcXFwiXFxuIFxcbkBAIC0yMiw2ICsyMyw4IEBAXFxuICAqIEB0eXBlOiBEUExMIHR5cGUgKFBQUyBvciBFRUMpXFxuICAqIEBsb2NrX3N0YXR1czogbGFzdCBzYXZlZCBEUExMIGxvY2sgc3RhdHVzXFxuICAqIEBwaW5zOiBsaXN0IG9mIHBpbnNcXG4rICogQHB0cF9pbmZvOiBQVFAgY2xvY2sgaW5mb1xcbisgKiBAcHRwX2Nsb2NrOiByZWdpc3RlcmVkIFBUUCBjbG9jayAob3IgTlVMTClcXG4gICovXFxuIHN0cnVjdCB6bDMwNzN4X2RwbGwge1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0XFx0bGlzdDtcXG5AQCAtMzYsNiArMzksOCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsIHtcXG4gXFx0ZW51bSBkcGxsX3R5cGVcXHRcXHRcXHR0eXBlO1xcbiBcXHRlbnVtIGRwbGxfbG9ja19zdGF0dXNcXHRcXHRsb2NrX3N0YXR1cztcXG4gXFx0c3RydWN0IGxpc3RfaGVhZFxcdFxcdHBpbnM7XFxuK1xcdHN0cnVjdCBwdHBfY2xvY2tfaW5mb1xcdFxcdHB0cF9pbmZvO1xcbitcXHRzdHJ1Y3QgcHRwX2Nsb2NrXFx0XFx0KnB0cF9jbG9jaztcXG4gfTtcXG4gXFxuIHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaFxcbmluZGV4IGI3MGVhZDdkNDQ5NWIuLmYzYTVlMTIxNWFhMzYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXFxuQEAgLTE3OSw2ICsxNzksMjAgQEBcXG4gI2RlZmluZSBaTF9EUExMX0RGX1JFQURfQ01EXFx0XFx0XFx0R0VOTUFTSygyLCAwKVxcbiAjZGVmaW5lIFpMX0RQTExfREZfUkVBRF9DTURfQUNDX0lcXHRcXHQ0XFxuIFxcbisjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9DVFJMXFx0XFx0XFx0WkxfUkVHKDUsIDB4MzAsIDEpXFxuKyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUFxcdFxcdFxcdEdFTk1BU0soMiwgMClcXG4rI2RlZmluZSBaTF9EUExMX1RJRV9DVFJMX09QX1dSXFx0XFx0XFx0NFxcbitcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTF9NQVNLXFx0XFx0WkxfUkVHKDUsIDB4MzEsIDEpXFxuK1xcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9DVFJMKF9pZHgpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRaTF9SRUdfSURYKF9pZHgsIDUsIDB4MzgsIDEsIFpMMzA3M1hfTUFYX0NIQU5ORUxTLCAxKVxcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfU0VNXFx0XFx0XFx0QklUKDQpXFxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURcXHRcXHRcXHRHRU5NQVNLKDMsIDApXFxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFpcXHQxXFxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVFxcdFxcdDhcXG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9ORVhUXzFIWlxcdDlcXG4rXFxuICNkZWZpbmUgWkxfUkVHX0RQTExfTUVBU19DVFJMXFx0XFx0XFx0WkxfUkVHKDUsIDB4NTAsIDEpXFxuICNkZWZpbmUgWkxfRFBMTF9NRUFTX0NUUkxfRU5cXHRcXHRcXHRCSVQoMClcXG4gI2RlZmluZSBaTF9EUExMX01FQVNfQ1RSTF9BVkdfRkFDVE9SXFx0XFx0R0VOTUFTSyg3LCA0KVxcbkBAIC0xOTMsNiArMjA3LDkgQEBcXG4gXFxuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXFxuICAqIFJlZ2lzdGVyIFBhZ2VzIDYtNywgRFBMTCBEYXRhXFxuKyAqXFxuKyAqIFBlci1jaGFubmVsIHJlZ2lzdGVycyB3aXRoIHN0cmlkZSAweDIwLiBDaGFubmVscyAwLTMgcmVzaWRlIG9uIHBhZ2UgNixcXG4rICogY2hhbm5lbCA0IG9uIHBhZ2UgNy5cXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuIFxcbiAjZGVmaW5lIFpMX1JFR19EUExMX0RGX09GRlNFVF8wMyhfaWR4KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5AQCAtMjAyLDYgKzIxOSwyNCBAQFxcbiBcXHQoKF9pZHgpIFxcdTAwM2MgNCA/IFpMX1JFR19EUExMX0RGX09GRlNFVF8wMyhfaWR4KSA6IFpMX1JFR19EUExMX0RGX09GRlNFVF80KVxcbiAjZGVmaW5lIFpMX0RQTExfREZfT0ZGU0VUX1VOS05PV05cXHRTNjRfTUlOXFxuIFxcbisjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBXzAzKF9pZHgpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRaTF9SRUdfSURYKF9pZHgsIDYsIDB4MEMsIDYsIDQsIDB4MjApXFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEFfNFxcdFxcdFxcdFpMX1JFRyg3LCAweDBDLCA2KVxcbisjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBKF9pZHgpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHQoKF9pZHgpIFxcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RJRV9EQVRBXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVElFX0RBVEFfNClcXG4rXFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQ18wMyhfaWR4KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0WkxfUkVHX0lEWChfaWR4LCA2LCAweDEyLCA2LCA0LCAweDIwKVxcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUNfNFxcdFxcdFxcdFpMX1JFRyg3LCAweDEyLCA2KVxcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUMoX2lkeClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdCgoX2lkeCkgXFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfVE9EX1NFQ18wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RPRF9TRUNfNClcXG4rXFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TXzAzKF9pZHgpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRaTF9SRUdfSURYKF9pZHgsIDYsIDB4MTgsIDQsIDQsIDB4MjApXFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TXzRcXHRcXHRcXHRaTF9SRUcoNywgMHgxOCwgNClcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlMoX2lkeClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdCgoX2lkeCkgXFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfVE9EX05TXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVE9EX05TXzQpXFxuK1xcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcXG4gICogUmVnaXN0ZXIgUGFnZSA5LCBTeW50aCBhbmQgT3V0cHV0XFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5AQCAtMjIxLDYgKzI1NiwyMyBAQFxcbiAjZGVmaW5lIFpMX09VVFBVVF9DVFJMX0VOXFx0XFx0XFx0QklUKDApXFxuICNkZWZpbmUgWkxfT1VUUFVUX0NUUkxfU1lOVEhfU0VMXFx0XFx0R0VOTUFTSyg2LCA0KVxcbiBcXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1NURVBfVElNRV9NQVNLXFx0XFx0WkxfUkVHKDksIDB4MzYsIDIpXFxuK1xcbisjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMXFx0XFx0WkxfUkVHKDksIDB4MzgsIDEpXFxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9EUExMXFx0XFx0R0VOTUFTSyg2LCA0KVxcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVBcXHRCSVQoMylcXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QXFx0XFx0R0VOTUFTSygxLCAwKVxcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfTk9ORVxcdDBcXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1JFU0VUXFx0MVxcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfUkVBRFxcdDJcXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1dSSVRFXFx0M1xcbitcXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTlVNQkVSXFx0XFx0WkxfUkVHKDksIDB4MzksIDEpXFxuK1xcbisjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLXFx0XFx0WkxfUkVHKDksIDB4M2EsIDIpXFxuK1xcbisjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBXFx0XFx0WkxfUkVHKDksIDB4M2MsIDQpXFxuK1xcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbiAgKiBSZWdpc3RlciBQYWdlIDEwLCBSZWYgTWFpbGJveFxcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6NDE6MDYuNjcxODMxNjUyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzgyODczMDMwNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWkwzMDczWFwiLFxuICAgIFwiWkwzMDczWF9JMkNcIixcbiAgICBcIlpMMzA3M1hfU1BJXCIsXG4gICAgXCJQVFBfMTU4OF9DTE9DS1wiLFxuICAgIFwiRFBMTFwiLFxuICAgIFwiSTJDXCIsXG4gICAgXCJTUElcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXRcIixcbiAgICBcInpsMzA3M3hfY2hhbl90b2RfcmVhZFwiLFxuICAgIFwiemwzMDczeF9jaGFuX3RvZF93cml0ZVwiLFxuICAgIFwiemwzMDczeF9jaGFuX3RvZF9hZGp1c3RcIixcbiAgICBcInpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0XCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fdGllX3dyaXRlXCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcFwiLFxuICAgIFwiemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0XCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NFwiLFxuICAgIFwiemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXBcIixcbiAgICBcInpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZVwiLFxuICAgIFwiemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lXCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlXCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIgKHpsMzA3M3gpLiBUaGlzIGV4cG9zZXMgbmV3IGZ1bmN0aW9uYWxpdHkgdG8gdXNlcnNwYWNlIHZpYSB0aGUgUFRQIHN1YnN5c3RlbSAoZS5nLiwgL2Rldi9wdHBYIGlvY3RscykuIFRoZSBkcml2ZXIgaXMgYW4gSTJDL1NQSSBkZXZpY2UgZHJpdmVyLCB3aGljaCBjYW4gYmUgaW5zdGFudGlhdGVkIGFuZCBmdXp6ZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDEyOTg1ZDMxMDFhY2RjYTA3YmE5MGI1NWZhNDFkZmU2NmRhZGU3ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDA4OjQxOjA1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdcbmluZGV4IDViYmNhMTQwMDU4MTMuLmRhMTczMWFjZTE1ZjAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXG5AQCAtMiw3ICsyLDcgQEBcbiBcbiBjb25maWcgWkwzMDczWFxuIFx0dHJpc3RhdGUgXCJNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRSBkZXZpY2VzXCIgaWYgQ09NUElMRV9URVNUXG4tXHRkZXBlbmRzIG9uIE5FVFxuK1x0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IFBUUF8xNTg4X0NMT0NLXG4gXHRzZWxlY3QgRFBMTFxuIFx0c2VsZWN0IE5FVF9ERVZMSU5LXG4gXHRzZWxlY3QgUkVHTUFQXG5AQCAtMTYsNyArMTYsNyBAQCBjb25maWcgWkwzMDczWFxuIFxuIGNvbmZpZyBaTDMwNzNYX0kyQ1xuIFx0dHJpc3RhdGUgXCJJMkMgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzXCJcbi1cdGRlcGVuZHMgb24gSTJDIFx1MDAyNlx1MDAyNiBORVRcbitcdGRlcGVuZHMgb24gSTJDIFx1MDAyNlx1MDAyNiBORVQgXHUwMDI2XHUwMDI2IFBUUF8xNTg4X0NMT0NLXG4gXHRzZWxlY3QgUkVHTUFQX0kyQ1xuIFx0c2VsZWN0IFpMMzA3M1hcbiBcdGhlbHBcbkBAIC0yOCw3ICsyOCw3IEBAIGNvbmZpZyBaTDMwNzNYX0kyQ1xuIFxuIGNvbmZpZyBaTDMwNzNYX1NQSVxuIFx0dHJpc3RhdGUgXCJTUEkgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzXCJcbi1cdGRlcGVuZHMgb24gTkVUIFx1MDAyNlx1MDAyNiBTUElcbitcdGRlcGVuZHMgb24gTkVUIFx1MDAyNlx1MDAyNiBTUEkgXHUwMDI2XHUwMDI2IFBUUF8xNTg4X0NMT0NLXG4gXHRzZWxlY3QgUkVHTUFQX1NQSVxuIFx0c2VsZWN0IFpMMzA3M1hcbiBcdGhlbHBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNcbmluZGV4IDRlYzJjZjUzZGFkNDYuLmJhNGQzMDNkNDFiNDcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uY1xuQEAgLTMsNiArMyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Rldl9wcmludGsuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuIFxuQEAgLTE2Miw4ICsxNjMsOCBAQCBpbnQgemwzMDczeF9jaGFuX25jb19tb2RlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleClcbiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXG4gICogQGluZGV4OiBEUExMIGNoYW5uZWwgaW5kZXggdG8gZmV0Y2ggc3RhdGUgZm9yXG4gICpcbi0gKiBSZWFkcyB0aGUgbW9kZV9yZWZzZWwgcmVnaXN0ZXIgYW5kIHJlZmVyZW5jZSBwcmlvcml0eSByZWdpc3RlcnMgZm9yXG4tICogdGhlIGdpdmVuIERQTEwgY2hhbm5lbCBhbmQgc3RvcmVzIHRoZSByYXcgdmFsdWVzIGZvciBsYXRlciB1c2UuXG4rICogUmVhZHMgdGhlIG1vZGVfcmVmc2VsLCBzdGF0dXMgYW5kIHJlZmVyZW5jZSBwcmlvcml0eSByZWdpc3RlcnMgZm9yXG4rICogdGhlIGdpdmVuIERQTEwgY2hhbm5lbCBhbmQgc3RvcmVzIHRoZSB2YWx1ZXMgZm9yIGxhdGVyIHVzZS5cbiAgKlxuICAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4gICovXG5AQCAtMjM0LDYgKzIzNSwzMjIgQEAgY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqemwzMDczeF9jaGFuX3N0YXRlX2dldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LFxuIFx0cmV0dXJuIFx1MDAyNnpsZGV2LVx1MDAzZWNoYW5baW5kZXhdO1xuIH1cbiBcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQgLSB3YWl0IGZvciBUb0Qgc2VtYXBob3JlIHRvIGNsZWFyXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKlxuKyAqIENoZWNrcyB0aGUgVG9EIGNvbnRyb2wgcmVnaXN0ZXIgc2VtYXBob3JlIGJpdC4gSWYgY2xlYXIsIHJldHVybnNcbisgKiBpbW1lZGlhdGVseS4gT3RoZXJ3aXNlIHBvbGxzIHVudGlsIHRoZSBiaXQgaXMgY2xlYXJlZCBieSB0aGUgZGV2aWNlLlxuKyAqXG4rICogUmV0dXJuOlxuKyAqICogMFx0XHRcdC0gc3VjY2Vzc1xuKyAqICogJS1FQlVTWVx0XHQtIHRpbWVvdXRcbisgKiAqICUtRU9QTk9UU1VQUFx0LSB1bmtub3duIGNvbW1hbmQgZGV0ZWN0ZWRcbisgKiAqIG5lZ2F0aXZlXHRcdC0gb3RoZXIgZXJyb3JcbisgKi9cbitpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKVxuK3tcbitcdHVuc2lnbmVkIGludCB0aW1lb3V0O1xuK1x0dTggdG9kX2N0cmw7XG4rXHRpbnQgcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfcmVhZF91OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLCBcdTAwMjZ0b2RfY3RybCk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdGlmICghKHRvZF9jdHJsIFx1MDAyNiBaTF9EUExMX1RPRF9DVFJMX1NFTSkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0c3dpdGNoIChGSUVMRF9HRVQoWkxfRFBMTF9UT0RfQ1RSTF9DTUQsIHRvZF9jdHJsKSkge1xuK1x0Y2FzZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWjpcbitcdFx0dGltZW91dCA9IFpMX1BPTExfVE9EX1dSX1RJTUVPVVRfVVM7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UOlxuK1x0Y2FzZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9ORVhUXzFIWjpcbitcdFx0dGltZW91dCA9IFpMX1BPTExfVE9EX1JEX1RJTUVPVVRfVVM7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLFxuK1x0XHRcdFx0ICBaTF9EUExMX1RPRF9DVFJMX1NFTSwgdGltZW91dCk7XG4rXG4rXHRyZXR1cm4gcmMgPT0gLUVUSU1FRE9VVCA/IC1FQlVTWSA6IHJjO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwgLSBpc3N1ZSBUb0QgY29tbWFuZFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICogQGNtZDogVG9EIGNvbW1hbmQgdG8gZXhlY3V0ZVxuKyAqXG4rICogV3JpdGVzIHRoZSBzZW1hcGhvcmUgYW5kIGNvbW1hbmQgdG8gZHBsbF90b2RfY3RybC4gVGhlIGNhbGxlciBtdXN0XG4rICogZW5zdXJlIHRoZSBkZXZpY2UgaXMgcmVhZHkgKHNlbWFwaG9yZSBjbGVhcikgYmVmb3JlIGNhbGxpbmcgYW5kXG4rICogbXVzdCB3YWl0IGZvciBjb21wbGV0aW9uIGlmIG5lZWRlZC5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4rc3RhdGljIGludCB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHU4IGNtZClcbit7XG4rXHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLFxuK1x0XHRcdFx0WkxfRFBMTF9UT0RfQ1RSTF9TRU0gfCBjbWQpO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fdG9kX3JlYWQgLSByZWFkIFRvRCByZWdpc3RlcnMgYWZ0ZXIgaXNzdWluZyBhIGNvbW1hbmRcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqIEBuZXh0X2h6OiBpZiB0cnVlLCByZWFkIHByZWRpY3RlZCBUb0QgYXQgbmV4dCAxIEh6OyBvdGhlcndpc2UgcmVhZCBjdXJyZW50XG4rICogQHRzOiB0aW1lc3BlYyB0byBzdG9yZSB0aGUgcmVzdWx0XG4rICogQHN0czogb3B0aW9uYWwgc3lzdGVtIHRpbWVzdGFtcCBwYWlyIGZvciBjcm9zcy10aW1lc3RhbXBpbmdcbisgKlxuKyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuK1x0XHRcdCAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXG4rXHRcdFx0ICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cylcbit7XG4rXHR1MzIgbnNlYztcbitcdHU2NCBzZWM7XG4rXHR1OCBjbWQ7XG4rXHRpbnQgcmM7XG4rXG4rXHRpZiAobmV4dF9oeilcbitcdFx0Y21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFo7XG4rXHRlbHNlXG4rXHRcdGNtZCA9IFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX0NVUlJFTlQ7XG4rXG4rXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVG9EIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xuK1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cHRwX3JlYWRfc3lzdGVtX3ByZXRzKHN0cyk7XG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfY3RybCh6bGRldiwgY2gsIGNtZCk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcdHB0cF9yZWFkX3N5c3RlbV9wb3N0dHMoc3RzKTtcbitcbitcdHJjID0gemwzMDczeF9yZWFkX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIFx1MDAyNnNlYyk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdC8qIEhXIG5hbm9zZWNvbmRzIGFyZSBhbHdheXMgaW4gWzAsIE5TRUNfUEVSX1NFQykgcmFuZ2UgKi9cbitcdHJjID0gemwzMDczeF9yZWFkX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgXHUwMDI2bnNlYyk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHRzLVx1MDAzZXR2X3NlYyA9IHNlYztcbitcdHRzLVx1MDAzZXR2X25zZWMgPSBuc2VjO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUgLSB3cml0ZSBUb0QgcmVnaXN0ZXJzIGFuZCB0cmlnZ2VyIDEgSHogdXBkYXRlXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKiBAdHM6IHRpbWUgdG8gc2V0XG4rICpcbisgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4raW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICAgc3RydWN0IHRpbWVzcGVjNjQgdHMpXG4re1xuK1x0aW50IHJjO1xuK1xuK1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbitcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9TRUMoY2gpLCB0cy50dl9zZWMpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCB0cy50dl9uc2VjKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfY3RybCh6bGRldiwgY2gsXG4rXHRcdFx0XHQgICAgIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaKTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3RvZF9hZGp1c3QgLSBhdG9taWMgVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIHdpdGggcm9sbG92ZXIgZ3VhcmRcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IHRvIGFwcGx5XG4rICpcbisgKiBSZWFkcyB0aGUgbmV4dC1IeiBUb0QgYW5kIGN1cnJlbnQgVG9ELCB0aGVuIGNoZWNrcyB3aGV0aGVyIGVub3VnaCB0aW1lXG4rICogcmVtYWlucyBiZWZvcmUgdGhlIG5leHQgMSBIeiByb2xsb3ZlciB0byBzYWZlbHkgY29tcGxldGUgdGhlIHdyaXRlLlxuKyAqIFJlLXJlYWRzIGlmIHRoZSAxIEh6IHRpY2sgY3Jvc3NlZCBiZXR3ZWVuIHRoZSB0d28gcmVhZHMgb3IgaWYgbGVzc1xuKyAqIHRoYW4gMjAgbXMgcmVtYWlucyBiZWZvcmUgdGhlIG5leHQgcm9sbG92ZXIuIEFwcGxpZXMgQGRlbHRhIGFuZCB3cml0ZXNcbisgKiB0aGUgcmVzdWx0IGJhY2suXG4rICpcbisgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4raW50IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuK1x0XHRcdCAgICBzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YSlcbit7XG4rI2RlZmluZSBaTF9UT0RfTUFYX1JFVFJJRVNcdDIwXG4rXHRzdGF0aWMgY29uc3QgbG9uZyB0aHJlc2hvbGRfbnMgPSAyMCAqIE5TRUNfUEVSX01TRUM7XG4rXHRzdHJ1Y3QgdGltZXNwZWM2NCB0c19uZXh0LCB0c19jdXIsIGRpZmY7XG4rXHRpbnQgcmMsIGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBaTF9UT0RfTUFYX1JFVFJJRVM7IGkrKykge1xuK1x0XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRldiwgY2gsIHRydWUsIFx1MDAyNnRzX25leHQsIE5VTEwpO1xuK1x0XHRpZiAocmMpXG4rXHRcdFx0cmV0dXJuIHJjO1xuK1xuK1x0XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRldiwgY2gsIGZhbHNlLCBcdTAwMjZ0c19jdXIsIE5VTEwpO1xuK1x0XHRpZiAocmMpXG4rXHRcdFx0cmV0dXJuIHJjO1xuK1xuK1x0XHQvKiBFbnN1cmUgdGhlIDEgSHogdGljayBkaWQgbm90IGNyb3NzIGJldHdlZW4gdGhlIHR3byByZWFkc1xuK1x0XHQgKiBhbmQgdGhhdCBlbm91Z2ggbWFyZ2luIHJlbWFpbnMgdG8gY29tcGxldGUgdGhlIHdyaXRlLlxuK1x0XHQgKi9cbitcdFx0ZGlmZiA9IHRpbWVzcGVjNjRfc3ViKHRzX25leHQsIHRzX2N1cik7XG4rXHRcdGlmIChkaWZmLnR2X3NlYyBcdTAwM2UgMCB8fFxuK1x0XHQgICAgKCFkaWZmLnR2X3NlYyBcdTAwMjZcdTAwMjYgZGlmZi50dl9uc2VjIFx1MDAzZT0gdGhyZXNob2xkX25zKSlcbitcdFx0XHRicmVhaztcbitcdH1cbitcdGlmIChpID09IFpMX1RPRF9NQVhfUkVUUklFUykge1xuK1x0XHRkZXZfd2Fybih6bGRldi1cdTAwM2VkZXYsXG4rXHRcdFx0IFwiRFBMTCV1IFRvRCBhZGp1c3QgZmFpbGVkIHRvIGdldCBzdGFibGUgbWFyZ2luXFxuXCIsXG4rXHRcdFx0IGNoKTtcbitcdFx0cmV0dXJuIC1FQlVTWTtcbitcdH1cbitcbitcdC8qIEFwcGx5IGRlbHRhIHRvIHRoZSBuZXh0LUh6IFRvRCAqL1xuK1x0dHNfbmV4dCA9IHRpbWVzcGVjNjRfYWRkKHRzX25leHQsIGRlbHRhKTtcbitcdGlmICghdGltZXNwZWM2NF92YWxpZF9zZXR0b2QoXHUwMDI2dHNfbmV4dCkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkZXYsIGNoLCB0c19uZXh0KTtcbisjdW5kZWYgWkxfVE9EX01BWF9SRVRSSUVTXG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0IC0gd3JpdGUgZGVsdGEgZnJlcXVlbmN5IG9mZnNldCB0byBoYXJkd2FyZVxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICogQG9mZnNldDogZnJlcXVlbmN5IG9mZnNldCBpbiAyXi00OCBzdGVwc1xuKyAqXG4rICogQ29udGV4dDogQ2FsbGVyIG11c3QgaG9sZCB0aGUgcGVyLURQTEwgbG9jay5cbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldClcbit7XG4rXHRpbnQgcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9PRkZTRVQoY2gpLCBvZmZzZXQpO1xuK1x0aWYgKCFyYylcbitcdFx0emxkZXYtXHUwMDNlY2hhbltjaF0uZGZfb2Zmc2V0ID0gb2Zmc2V0O1xuK1xuK1x0cmV0dXJuIHJjO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlIC0gYWRqdXN0IERQTEwgcGhhc2UgdXNpbmcgVElFIHdyaXRlXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKiBAZGVsdGFfbnM6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMgKG11c3QgYmUgaW4gKC0xcywgMXMpKVxuKyAqXG4rICogQ29udmVydHMgbmFub3NlY29uZHMgdG8gVElFIHVuaXRzICgwLjAxIHBzKSBhbmQgd3JpdGVzIFRJRSBkYXRhXG4rICogdG8gdGhlIHNwZWNpZmllZCBjaGFubmVsLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitpbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKVxuK3tcbitcdHM2NCB0aWVfZGF0YTtcbitcdGludCByYztcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRldi1cdTAwM2V0aWVfbG9jayk7XG4rXG4rXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVElFIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xuK1x0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsXG4rXHRcdFx0XHQgIFpMX0RQTExfVElFX0NUUkxfT1AsXG4rXHRcdFx0XHQgIFpMX1BPTExfVElFX1dSX1RJTUVPVVRfVVMpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHQvKiBDb252ZXJ0IG5zIHRvIFRJRSB1bml0cyAoMC4wMSBwcyA9IDEwXi0xNCBzKSAqL1xuK1x0dGllX2RhdGEgPSBkZWx0YV9ucyAqIDEwMDAwMExMO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0RBVEEoY2gpLCB0aWVfZGF0YSk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkxfTUFTSywgQklUKGNoKSk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTCxcbitcdFx0XHRcdFpMX0RQTExfVElFX0NUUkxfT1BfV1IpO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCAtIGV4ZWN1dGUgb25lIG91dHB1dCBwaGFzZSBzdGVwIG9wZXJhdGlvblxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICogQG91dF9tYXNrOiBiaXRtYXNrIG9mIG91dHB1dHMgdG8gc3RlcFxuKyAqIEBzdGVwX2N5Y2xlczogcGhhc2Ugc3RlcCBpbiBzeW50aGVzaXplciBjbG9jayBjeWNsZXNcbisgKiBAdG9kX3N0ZXA6IGFsc28gc3RlcCB0aGUgVG9EIGNvdW50ZXJcbisgKlxuKyAqIEFsbCBtYXNrZWQgb3V0cHV0cyBtdXN0IHVzZSBzeW50aGVzaXplcnMgb2YgdGhlIHNhbWUgZnJlcXVlbmN5IHNpbmNlXG4rICogdGhlIHN0ZXAgdmFsdWUgaXMgaW4gc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitpbnQgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLFxuK1x0XHRcdCAgICBib29sIHRvZF9zdGVwKVxuK3tcbitcdHU4IGN0cmw7XG4rXHRpbnQgcmM7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkZXYtXHUwMDNlcGhhc2Vfc3RlcF9sb2NrKTtcbitcbitcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBwaGFzZSBzdGVwIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xuK1x0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwsXG4rXHRcdFx0XHQgIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AsXG4rXHRcdFx0XHQgIFpMX1BPTExfUEhBU0VfU1RFUF9USU1FT1VUX1VTKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0RBVEEsXG4rXHRcdFx0ICAgICAgIHN0ZXBfY3ljbGVzKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3dyaXRlX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX01BU0ssIG91dF9tYXNrKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTlVNQkVSLCAxKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0Y3RybCA9IEZJRUxEX1BSRVAoWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9EUExMLCBjaCkgfFxuK1x0ICAgICAgIEZJRUxEX1BSRVAoWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCxcbitcdFx0XHQgIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfV1JJVEUpO1xuK1x0aWYgKHRvZF9zdGVwKVxuK1x0XHRjdHJsIHw9IFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVA7XG4rXG4rXHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwsIGN0cmwpO1xuK31cbitcbiAvKipcbiAgKiB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0IC0gY29tbWl0IERQTEwgY2hhbm5lbCBzdGF0ZSBjaGFuZ2VzIHRvIGhhcmR3YXJlXG4gICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3hfZGV2IHN0cnVjdHVyZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaFxuaW5kZXggZGM5YzZkOTViZGVlNy4uOTljM2I3MDg4ZjY3OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXG5AQCAtNSwxMCArNSwxMiBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdGRkZWYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWU2NC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwicmVncy5oXCJcbiBcbitzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXA7XG4gc3RydWN0IHpsMzA3M3hfZGV2O1xuIFxuIC8qKlxuQEAgLTQyLDYgKzQ0LDIxIEBAIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4LFxuIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfdXBkYXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTtcbiBpbnQgemwzMDczeF9jaGFuX25jb19tb2RlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7XG4gXG4raW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCk7XG4raW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgIGJvb2wgbmV4dF9oeiwgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxuK1x0XHRcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpO1xuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuK1x0XHRcdCAgIHN0cnVjdCB0aW1lc3BlYzY0IHRzKTtcbitpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKTtcbitpbnQgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLCBib29sIHRvZF9zdGVwKTtcbitcbitpbnQgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBvZmZzZXQpO1xuK1xuK2ludCB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgZGVsdGFfbnMpO1xuK1xuIC8qKlxuICAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfZ2V0IC0gZ2V0IGNhY2hlZCBkZl9vZmZzZXQgdnMgdHJhY2tlZCByZWZlcmVuY2VcbiAgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG5AQCAtMjAwLDYgKzIxNywyMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgemwzMDczeF9jaGFuX21vZGVfaXNfcmVmbG9jayhjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxuIFx0cmV0dXJuIHpsMzA3M3hfY2hhbl9tb2RlX2dldChjaGFuKSA9PSBaTF9EUExMX01PREVfUkVGU0VMX01PREVfUkVGTE9DSztcbiB9XG4gXG4rLyoqXG4rICogemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllIC0gY2hlY2sgaWYgY2hhbm5lbCBtb2RlIHN1cHBvcnRzIFRJRSB3cml0ZVxuKyAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbisgKlxuKyAqIFRJRSB3cml0ZSBpcyBzdXBwb3J0ZWQgaW4gQVVUTyBhbmQgUkVGTE9DSyBtb2RlcyByZWdhcmRsZXNzIG9mIGxvY2sgc3RhdGUuXG4rICpcbisgKiBSZXR1cm46IHRydWUgaWYgVElFIHdyaXRlIGlzIHN1cHBvcnRlZCwgZmFsc2Ugb3RoZXJ3aXNlXG4rICovXG4rc3RhdGljIGlubGluZSBib29sXG4remwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXG4re1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl9tb2RlX2lzX2F1dG8oY2hhbikgfHxcbitcdFx0emwzMDczeF9jaGFuX21vZGVfaXNfcmVmbG9jayhjaGFuKTtcbit9XG4rXG4gLyoqXG4gICogemwzMDczeF9jaGFuX2lzX2hvX3JlYWR5IC0gY2hlY2sgaWYgaG9sZG92ZXIgaXMgcmVhZHlcbiAgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jXG5pbmRleCA1YjJkNzdmMmMyMjg4Li4yMzBkZjA4ZTI3Y2QxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcbkBAIC0zMjIsNyArMzIyLDcgQEAgaW50IHpsMzA3M3hfd3JpdGVfdTQ4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsIHU2NCB2YWwpXG4gaW50IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsXG4gXHRcdFx0IHU4IG1hc2ssIHVuc2lnbmVkIGludCB0aW1lb3V0X3VzKVxuIHtcbi0jZGVmaW5lIFpMX1BPTExfU0xFRVBfVVMgMTBcbitcdHVuc2lnbmVkIGludCBzbGVlcF91cyA9IHRpbWVvdXRfdXMgLyA1MDtcbiBcdHVuc2lnbmVkIGludCB2YWw7XG4gXG4gXHQvKiBDaGVjayB0aGUgcmVnaXN0ZXIgaXMgOGJpdCAqL1xuQEAgLTMzNiw3ICszMzYsNyBAQCBpbnQgemwzMDczeF9wb2xsX3plcm9fdTgoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IHJlZyxcbiBcdHJlZyA9IFpMX1JFR19BRERSKHJlZykgKyBaTF9SQU5HRV9PRkZTRVQ7XG4gXG4gXHRyZXR1cm4gcmVnbWFwX3JlYWRfcG9sbF90aW1lb3V0KHpsZGV2LVx1MDAzZXJlZ21hcCwgcmVnLCB2YWwsICEodmFsIFx1MDAyNiBtYXNrKSxcbi1cdFx0XHRcdFx0WkxfUE9MTF9TTEVFUF9VUywgdGltZW91dF91cyk7XG4rXHRcdFx0XHRcdHNsZWVwX3VzLCB0aW1lb3V0X3VzKTtcbiB9XG4gXG4gaW50IHpsMzA3M3hfbWJfb3Aoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IG9wX3JlZywgdTggb3BfdmFsLFxuQEAgLTUxMSw2ICs1MTEsMTEgQEAgemwzMDczeF9kZXZfc3RhdGVfZmV0Y2goc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcbiBcdGludCByYztcbiBcdHU4IGk7XG4gXG4rXHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfU1RFUF9USU1FX01BU0ssXG4rXHRcdFx0ICAgICAgXHUwMDI2emxkZXYtXHUwMDNlb3V0X3N0ZXBfdGltZV9tYXNrKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgWkwzMDczWF9OVU1fUkVGUzsgaSsrKSB7XG4gXHRcdHJjID0gemwzMDczeF9yZWZfc3RhdGVfZmV0Y2goemxkZXYsIGkpO1xuIFx0XHRpZiAocmMpIHtcbkBAIC0xMDM0LDYgKzEwMzksMTQgQEAgaW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXG4gXHQgKiBhbmQvb3IgcG9sbHMgYXJlIHJlcXVpcmVkIHRvIGJlIGRvbmUgYXRvbWljYWxseS5cbiBcdCAqL1xuIFx0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2VtdWx0aW9wX2xvY2spO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIHJjLFxuK1x0XHRcdFx0ICAgICBcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxuXCIpO1xuK1x0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2VwaGFzZV9zdGVwX2xvY2spO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIHJjLFxuK1x0XHRcdFx0ICAgICBcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxuXCIpO1xuK1x0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2V0aWVfbG9jayk7XG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgcmMsXG4gXHRcdFx0XHQgICAgIFwiRmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXG5cIik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oXG5pbmRleCA3OGRjMjA4ZjNlZWEyLi42N2MxMGUyNTk1MTE4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcbkBAIC0yNiw2ICsyNiwxMCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsO1xuICNkZWZpbmUgWkxfUE9MTF9IV1JFR19USU1FT1VUX1VTXHQoNTAgKiBVU0VDX1BFUl9NU0VDKVxuICNkZWZpbmUgWkxfUE9MTF9NQl9USU1FT1VUX1VTXHRcdCgzMCAqIFVTRUNfUEVSX01TRUMpXG4gI2RlZmluZSBaTF9QT0xMX1BIQVNFX0VSUl9USU1FT1VUX1VTXHQoNTAgKiBVU0VDX1BFUl9NU0VDKVxuKyNkZWZpbmUgWkxfUE9MTF9QSEFTRV9TVEVQX1RJTUVPVVRfVVNcdCgzMDAwICogVVNFQ19QRVJfTVNFQylcbisjZGVmaW5lIFpMX1BPTExfVElFX1dSX1RJTUVPVVRfVVNcdCgxMDAwICogVVNFQ19QRVJfTVNFQylcbisjZGVmaW5lIFpMX1BPTExfVE9EX1JEX1RJTUVPVVRfVVNcdCgzMCAqIFVTRUNfUEVSX01TRUMpXG4rI2RlZmluZSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTXHQoMTAwMCAqIFVTRUNfUEVSX01TRUMpXG4gXG4gZW51bSB6bDMwNzN4X2ZsYWdzIHtcbiBcdFpMMzA3M1hfRkxBR19SRUZfUEhBU0VfQ09NUF8zMl9CSVQsXG5AQCAtNTUsNiArNTksOCBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8ge1xuICAqIEByZWdtYXA6IHJlZ21hcCB0byBhY2Nlc3MgZGV2aWNlIHJlZ2lzdGVyc1xuICAqIEBpbmZvOiBkZXRlY3RlZCBjaGlwIGluZm9cbiAgKiBAbXVsdGlvcF9sb2NrOiB0byBzZXJpYWxpemUgbXVsdGlwbGUgcmVnaXN0ZXIgb3BlcmF0aW9uc1xuKyAqIEB0aWVfbG9jazogdG8gc2VyaWFsaXplIFRJRSB3cml0ZSBvcGVyYXRpb25zXG4rICogQHBoYXNlX3N0ZXBfbG9jazogdG8gc2VyaWFsaXplIG91dHB1dCBwaGFzZSBzdGVwIG9wZXJhdGlvbnNcbiAgKiBAcmVmOiBhcnJheSBvZiBpbnB1dCByZWZlcmVuY2VzJyBpbnZhcmlhbnRzXG4gICogQG91dDogYXJyYXkgb2Ygb3V0cycgaW52YXJpYW50c1xuICAqIEBzeW50aDogYXJyYXkgb2Ygc3ludGhzJyBpbnZhcmlhbnRzXG5AQCAtNjMsNiArNjksNyBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8ge1xuICAqIEBrd29ya2VyOiB0aHJlYWQgZm9yIHBlcmlvZGljIHdvcmtcbiAgKiBAd29yazogcGVyaW9kaWMgd29ya1xuICAqIEBjbG9ja19pZDogY2xvY2sgaWQgb2YgdGhlIGRldmljZVxuKyAqIEBvdXRfc3RlcF90aW1lX21hc2s6IG91dHB1dCBzdGVwLXRpbWUgbWFzayAoZGV2aWNlLWdsb2JhbClcbiAgKiBAcGhhc2VfYXZnX2ZhY3RvcjogcGhhc2Ugb2Zmc2V0IG1lYXN1cmVtZW50IGF2ZXJhZ2luZyBmYWN0b3JcbiAgKiBAZnJlcV9tb25pdG9yOiBpcyBmcmVxdWVuY3kgbW9uaXRvciBlbmFibGVkXG4gICovXG5AQCAtNzEsNiArNzgsOCBAQCBzdHJ1Y3QgemwzMDczeF9kZXYge1xuIFx0c3RydWN0IHJlZ21hcFx0XHRcdCpyZWdtYXA7XG4gXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm9cdCppbmZvO1xuIFx0c3RydWN0IG11dGV4XHRcdFx0bXVsdGlvcF9sb2NrO1xuK1x0c3RydWN0IG11dGV4XHRcdFx0dGllX2xvY2s7XG4rXHRzdHJ1Y3QgbXV0ZXhcdFx0XHRwaGFzZV9zdGVwX2xvY2s7XG4gXG4gXHQvKiBJbnZhcmlhbnRzICovXG4gXHRzdHJ1Y3QgemwzMDczeF9yZWZcdHJlZltaTDMwNzNYX05VTV9SRUZTXTtcbkBAIC04Nyw2ICs5Niw3IEBAIHN0cnVjdCB6bDMwNzN4X2RldiB7XG4gXG4gXHQvKiBQZXItY2hpcCBwYXJhbWV0ZXJzICovXG4gXHR1NjRcdFx0XHRjbG9ja19pZDtcbitcdHUxNlx0XHRcdG91dF9zdGVwX3RpbWVfbWFzaztcbiBcdHU4XHRcdFx0cGhhc2VfYXZnX2ZhY3RvcjtcbiBcdGJvb2xcdFx0XHRmcmVxX21vbml0b3I7XG4gfTtcbkBAIC0zMDgsNiArMzE4LDE5IEBAIHpsMzA3M3hfZGV2X291dF9pc19lbmFibGVkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxuIFx0cmV0dXJuIHpsMzA3M3hfc3ludGhfaXNfZW5hYmxlZChzeW50aCkgXHUwMDI2XHUwMDI2IHpsMzA3M3hfb3V0X2lzX2VuYWJsZWQob3V0KTtcbiB9XG4gXG4rLyoqXG4rICogemwzMDczeF9kZXZfb3V0X2lzX3N0ZXBwZWQgLSBjaGVjayBpZiBvdXRwdXQgaXMgaW4gc3RlcC10aW1lIG1hc2tcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAaW5kZXg6IG91dHB1dCBpbmRleFxuKyAqXG4rICogUmV0dXJuOiB0cnVlIGlmIG91dHB1dCBpcyBhZmZlY3RlZCBieSBzdGVwLXRpbWUgb3BlcmF0aW9uc1xuKyAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbFxuK3psMzA3M3hfZGV2X291dF9pc19zdGVwcGVkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxuK3tcbitcdHJldHVybiAhISh6bGRldi1cdTAwM2VvdXRfc3RlcF90aW1lX21hc2sgXHUwMDI2IEJJVChpbmRleCkpO1xuK31cbitcbiAvKipcbiAgKiB6bDMwNzN4X2Rldl9vdXRfZHBsbF9nZXQgLSBnZXQgRFBMTCBJRCB0aGUgb3V0cHV0IGlzIGRyaXZlbiBieVxuICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuY1xuaW5kZXggODNiZDMwMjdkYmFhMS4uZjJlMTM3NDc1YjQwZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuY1xuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jXG5AQCAtMiw2ICsyLDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnVnLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jb250YWluZXJfb2YuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Rldl9wcmludGsuaFx1MDAzZVxuQEAgLTEzLDYgKzE0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRsaW5rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zcHJpbnRmLmhcdTAwM2VcbiBcbkBAIC0yMzEzLDQ1ICsyMzE1LDM4NCBAQCB6bDMwNzN4X2RwbGxfaW5pdF9maW5lX3BoYXNlX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxuIFx0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19TWU5USF9QSEFTRV9TSElGVF9DVFJMLCAweDAxKTtcbiB9XG4gXG4rLyogTWF4aW11bSBmcmVxdWVuY3kgYWRqdXN0bWVudDogKy0xJSBvZiBub21pbmFsIGluIHBwYiAqL1xuKyNkZWZpbmUgWkwzMDczWF9EUExMX1BUUF9NQVhfQURKXHQxMDAwMDAwMFxuK1xuIC8qKlxuLSAqIHpsMzA3M3hfZHBsbF9hbGxvYyAtIGFsbG9jYXRlIERQTEwgZGV2aWNlXG4tICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4tICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyXG4rICogemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0IC0gcmVhZCBjdXJyZW50IHRpbWUgZnJvbSBUb0QgY291bnRlcnNcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbisgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIGN1cnJlbnQgdGltZVxuKyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nXG4gICpcbi0gKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKVxuK3tcbitcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxuK1x0XHRcdFx0XHRcdCAgIHB0cF9pbmZvKTtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXG4rXHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCwgZmFsc2UsIHRzLCBzdHMpO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCAtIHNldCBUb0QgY291bnRlcnMgdG8gZ2l2ZW4gdGltZVxuKyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xuKyAqIEB0czogdGltZXNwZWMgd2l0aCB0aW1lIHRvIHNldFxuICAqXG4tICogUmV0dXJuOiBwb2ludGVyIHRvIERQTEwgZGV2aWNlIG9uIHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgb24gZXJyb3JcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuICAqL1xuLXN0cnVjdCB6bDMwNzN4X2RwbGwgKlxuLXpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcbitcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcbiB7XG4tXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4gXG4tXHR6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTtcbi1cdGlmICghemxkcGxsKVxuLVx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4gXG4tXHR6bGRwbGwtXHUwMDNlZGV2ID0gemxkZXY7XG4tXHR6bGRwbGwtXHUwMDNlaWQgPSBjaDtcbi1cdG11dGV4X2luaXQoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2emxkcGxsLVx1MDAzZXBpbnMpO1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkcGxsLVx1MDAzZWRldiwgemxkcGxsLVx1MDAzZWlkLCAqdHMpO1xuK31cbiBcbi1cdHJldHVybiB6bGRwbGw7XG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAgLSBhZGp1c3Qgc3ViLXNlY29uZCB0aW1lIHZpYSBwaGFzZSBzdGVwXG4rICogQHpsZHBsbDogRFBMTCBjaGFubmVsXG4rICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMgKG11c3QgYmUgd2l0aGluICgtTlNFQ19QRVJfU0VDLFxuKyAqICAgICAgICAgTlNFQ19QRVJfU0VDKSlcbisgKlxuKyAqIFVzZXMgdGhlIG91dHB1dCBwaGFzZSBzdGVwIG1lY2hhbmlzbSB3aXRoIHRvZF9zdGVwPTEgdG8gYWRqdXN0IGJvdGhcbisgKiB0aGUgb3V0cHV0IGNsb2NrIHBoYXNlIGFuZCB0aGUgVG9EIGNvdW50ZXIgc2ltdWx0YW5lb3VzbHkuIFRoaXMga2VlcHNcbisgKiBvdXRwdXRzIGFuZCBUb0QgY29oZXJlbnQuIE9ubHkgdmFsaWQgZm9yIE5DTy5cbisgKlxuKyAqIE91dHB1dHMgYXJlIGdyb3VwZWQgYnkgc3ludGhlc2l6ZXIgc2luY2UgdGhlIHBoYXNlIHN0ZXAgdmFsdWUgaXMgaW5cbisgKiBzeW50aGVzaXplciBjbG9jayBjeWNsZXMuIFRoZSBmaXJzdCBzeW50aCBncm91cCB3aXRoIGVuYWJsZWQgb3V0cHV0c1xuKyAqIHVzZXMgdG9kX3N0ZXAgdG8gYWRqdXN0IGJvdGggb3V0cHV0cyBhbmQgdGhlIFRvRCBjb3VudGVyLiBSZW1haW5pbmdcbisgKiBncm91cHMgc3RlcCBvdXRwdXRzIG9ubHkuIElmIG5vIHN5bnRoIGhhcyBlbmFibGVkIG91dHB1dHMsIHRoZSBUb0RcbisgKiBjb3VudGVyIGlzIHN0ZXBwZWQgYWxvbmUgdXNpbmcgYW4gZW1wdHkgb3V0cHV0IG1hc2sgKHRoZSBGVyB1c2VzXG4rICogdGhlIGZpcnN0IGVuYWJsZWQgc3ludGgncyBwZXJpb2QgZm9yIHRoZSBjb252ZXJzaW9uKS5cbisgKlxuKyAqIFJldHVybjpcbisgKiAqICUwXHRcdFx0LSBzdWNjZXNzIChvciBwYXJ0aWFsIHN1Y2Nlc3MgaWYgYSBsYXRlciBzeW50aCBncm91cFxuKyAqXHRcdFx0ICBmYWlsZWQgYWZ0ZXIgdGhlIGZpcnN0IHdhcyBhbHJlYWR5IHN0ZXBwZWQpXG4rICogKiAlLUVPUE5PVFNVUFBcdC0gbm8gc3ludGhzIGF2YWlsYWJsZVxuKyAqICogbmVnYXRpdmVcdFx0LSBlcnJvclxuKyAqL1xuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLFxuK1x0XHRcdFx0XHQgICAgICAgczY0IGRlbHRhKVxuK3tcbitcdHUxNiBzeW50aF9tYXNrW1pMMzA3M1hfTlVNX1NZTlRIU10gPSB7fTtcbitcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuK1x0Y29uc3Qgc3RydWN0IHpsMzA3M3hfc3ludGggKnN5bnRoO1xuK1x0c3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbjtcbitcdHUzMiBmaXJzdF9zeW50aF9mcmVxID0gMDtcbitcdGJvb2wgdG9kX3N0ZXBwZWQgPSBmYWxzZTtcbitcdHMzMiBzdGVwX2N5Y2xlcztcbitcdHUzMiBzeW50aF9mcmVxO1xuK1x0aW50IHJjO1xuK1x0dTggaTtcbitcbitcdC8qIEJ1aWxkIHBlci1zeW50aCBvdXRwdXQgbWFza3MgZnJvbSByZWdpc3RlcmVkIG91dHB1dCBwaW5zICovXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBpbiwgXHUwMDI2emxkcGxsLVx1MDAzZXBpbnMsIGxpc3QpIHtcbitcdFx0dTggb3V0X2lkLCBzeW50aF9pZDtcbitcbitcdFx0aWYgKHpsMzA3M3hfZHBsbF9pc19pbnB1dF9waW4ocGluKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0b3V0X2lkID0gemwzMDczeF9vdXRwdXRfcGluX291dF9nZXQocGluLVx1MDAzZWlkKTtcbitcbitcdFx0aWYgKCF6bDMwNzN4X2Rldl9vdXRfaXNfc3RlcHBlZCh6bGRldiwgb3V0X2lkKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0c3ludGhfaWQgPSB6bDMwNzN4X2Rldl9vdXRfc3ludGhfZ2V0KHpsZGV2LCBvdXRfaWQpO1xuK1x0XHRpZiAoc3ludGhfaWQgXHUwMDNlPSBaTDMwNzNYX05VTV9TWU5USFMpIHtcbitcdFx0XHRkZXZfd2Fybih6bGRldi1cdTAwM2VkZXYsIFwiVW5leHBlY3RlZCBzeW50aCBpZCBmb3IgT1VUJXVcXG5cIixcbitcdFx0XHRcdCBvdXRfaWQpO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXHRcdHN5bnRoX21hc2tbc3ludGhfaWRdIHw9IEJJVChvdXRfaWQpO1xuK1x0fVxuK1xuK1x0LyogUHJvY2VzcyBlYWNoIHN5bnRoIGdyb3VwICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBaTDMwNzNYX05VTV9TWU5USFM7IGkrKykge1xuK1x0XHRzeW50aCA9IHpsMzA3M3hfc3ludGhfc3RhdGVfZ2V0KHpsZGV2LCBpKTtcbitcdFx0aWYgKCF6bDMwNzN4X3N5bnRoX2lzX2VuYWJsZWQoc3ludGgpIHx8XG4rXHRcdCAgICB6bDMwNzN4X3N5bnRoX2RwbGxfZ2V0KHN5bnRoKSAhPSB6bGRwbGwtXHUwMDNlaWQpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHN5bnRoX2ZyZXEgPSB6bDMwNzN4X3N5bnRoX2ZyZXFfZ2V0KHN5bnRoKTtcbitcbitcdFx0LyogUmVtZW1iZXIgZmlyc3QgZW5hYmxlZCBzeW50aCBmcmVxIGZvciBUb0Qtb25seSBmYWxsYmFjayAqL1xuK1x0XHRpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpXG4rXHRcdFx0Zmlyc3Rfc3ludGhfZnJlcSA9IHN5bnRoX2ZyZXE7XG4rXG4rXHRcdGlmICghc3ludGhfbWFza1tpXSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0LyogU2FmZSBmb3IgczMyOiBtYXggc3ludGggZnJlcSBpcyA3NTAgTUh6ICovXG4rXHRcdHN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIHN5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7XG4rXG4rXHRcdHJjID0gemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCxcbitcdFx0XHRcdFx0ICAgICBzeW50aF9tYXNrW2ldLCBzdGVwX2N5Y2xlcyxcbitcdFx0XHRcdFx0ICAgICAhdG9kX3N0ZXBwZWQpO1xuK1x0XHRpZiAocmMpIHtcbitcdFx0XHRpZiAodG9kX3N0ZXBwZWQpIHtcbitcdFx0XHRcdGRldl93YXJuKHpsZGV2LVx1MDAzZWRldixcbitcdFx0XHRcdFx0IFwiUGFydGlhbCBwaGFzZSBzdGVwIGZhaWx1cmVcXG5cIik7XG4rXHRcdFx0XHRyZXR1cm4gMDtcbitcdFx0XHR9XG4rXHRcdFx0cmV0dXJuIHJjO1xuK1x0XHR9XG4rXHRcdHRvZF9zdGVwcGVkID0gdHJ1ZTtcbitcdH1cbitcbitcdGlmICghZmlyc3Rfc3ludGhfZnJlcSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0LyogTm8gZW5hYmxlZCBvdXRwdXRzIGZvdW5kOyBzdGVwIFRvRCBjb3VudGVyIG9ubHkgdXNpbmcgdGhlXG4rXHQgKiBmaXJzdCBlbmFibGVkIHN5bnRoJ3MgcGVyaW9kIChlbXB0eSBvdXRwdXQgbWFzaykuXG4rXHQgKi9cbitcdGlmICghdG9kX3N0ZXBwZWQpIHtcbitcdFx0c3RlcF9jeWNsZXMgPSBkaXZfczY0KGRlbHRhICogZmlyc3Rfc3ludGhfZnJlcSwgTlNFQ19QRVJfU0VDKTtcbitcdFx0cmV0dXJuIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsIDAsXG4rXHRcdFx0XHRcdCAgICAgICBzdGVwX2N5Y2xlcywgdHJ1ZSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gLyoqXG4tICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlXG4tICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lIC0gYWRqdXN0IFBUUCBjbG9jayB0aW1lXG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4rICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHNcbiAgKlxuLSAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuXG4rICogRm9yIE5DTywgbGFyZ2UgZGVsdGFzIChcdTAwM2U9IDEgc2Vjb25kKSBhcmUgc3BsaXQgaW50byBhIFRvRFxuKyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciB0aGUgc2Vjb25kcyBwYXJ0IGFuZCBhbiBvdXRwdXQgcGhhc2Ugc3RlcCBmb3JcbisgKiB0aGUgc3ViLXNlY29uZCByZW1haW5kZXIuIFN1Yi1zZWNvbmQgZGVsdGFzIHVzZSBwaGFzZSBzdGVwIGRpcmVjdGx5LFxuKyAqIGZhbGxpbmcgYmFjayB0byBUb0QgcmVhZC1tb2RpZnktd3JpdGUgaWYgcGhhc2Ugc3RlcCBvciBUSUUgd3JpdGVcbisgKiBmYWlscy4gSW4gQVVUTy9SRUZMT0NLIG1vZGVzLCBsYXJnZSBkZWx0YXMgYXJlIHNwbGl0IGludG8gVG9EXG4rICogcmVhZC1tb2RpZnktd3JpdGUgZm9yIHNlY29uZHMgYW5kIFRJRSB3cml0ZSBmb3IgdGhlIHN1Yi1zZWNvbmRcbisgKiByZW1haW5kZXIuIFN1Yi1zZWNvbmQgZGVsdGFzIHVzZSBUSUUgd3JpdGUgZGlyZWN0bHkuXG4rICpcbisgKiBJZiB0aGUgc2Vjb25kcyBwYXJ0IHdhcyBhbHJlYWR5IGNvbW1pdHRlZCB3aGVuIHRoZSBzdWItc2Vjb25kXG4rICogbWVjaGFuaXNtIGZhaWxzLCByZXR1cm5zIDAgdG8gcHJldmVudCB0aGUgUFRQIHNlcnZvIGZyb20gcmV0cnlpbmdcbisgKiB0aGUgZnVsbCBkZWx0YSBhbmQgYXBwbHlpbmcgc2Vjb25kcyBhZ2Fpbi5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzIChvciBwYXJ0aWFsIHN1Y2Nlc3MpLCBcdTAwM2MwIG9uIGVycm9yXG4gICovXG4tdm9pZFxuLXpsMzA3M3hfZHBsbF9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHM2NCBkZWx0YSlcbiB7XG4tXHRXQVJOKHpsZHBsbC1cdTAwM2VkcGxsX2RldiwgXCJEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXFxuXCIpO1xuK1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXG4rXHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuK1x0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4rXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xuK1x0Ym9vbCBzZWNfYWRqdXN0ZWQgPSBmYWxzZTtcbitcdHN0cnVjdCB0aW1lc3BlYzY0IHRzO1xuK1x0aW50IHJjO1xuIFxuLVx0bXV0ZXhfZGVzdHJveShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4tXHRrZnJlZSh6bGRwbGwpO1xuK1x0aWYgKCFkZWx0YSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuK1x0LyogTW9kZXMgd2l0aG91dCBwaGFzZSBzdGVwIG9yIFRJRSB1c2UgcGxhaW4gVG9EIGFkanVzdCAqL1xuK1x0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCk7XG4rXHRpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKVxuK1x0XHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCxcbitcdFx0XHRcdFx0ICAgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTtcbitcbitcdC8qIFNwbGl0IG9mZiBzZWNvbmRzIHZpYSBUb0QgcmVhZC1tb2RpZnktd3JpdGUgc28gdGhlIHN1Yi1zZWNvbmRcbitcdCAqIHJlbWFpbmRlciBjYW4gYmUgYXBwbGllZCB0aHJvdWdoIHRoZSBvdXRwdXQtY29oZXJlbnQgbWVjaGFuaXNtXG4rXHQgKiAocGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUpLlxuK1x0ICovXG4rXHRpZiAoZGVsdGEgXHUwMDNlPSBOU0VDX1BFUl9TRUMgfHwgZGVsdGEgXHUwMDNjPSAtTlNFQ19QRVJfU0VDKSB7XG4rXHRcdHMzMiByZW1haW5kZXI7XG4rXG4rXHRcdHRzLnR2X3NlYyA9IGRpdl9zNjRfcmVtKGRlbHRhLCBOU0VDX1BFUl9TRUMsIFx1MDAyNnJlbWFpbmRlcik7XG4rXHRcdHRzLnR2X25zZWMgPSAwO1xuK1x0XHRkZWx0YSA9IHJlbWFpbmRlcjtcbitcbitcdFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCB0cyk7XG4rXHRcdGlmIChyYylcbitcdFx0XHRyZXR1cm4gcmM7XG4rXG4rXHRcdC8qIE5vIHN1Yi1zZWNvbmQgcmVtYWluZGVyLCBkb25lICovXG4rXHRcdGlmICghZGVsdGEpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXG4rXHRcdC8qIFdhaXQgZm9yIHRoZSBUb0Qgd3JpdGUgdG8gYmUgYXBwbGllZCBhdCB0aGUgMSBIeiBlZGdlXG4rXHRcdCAqIGJlZm9yZSBpc3N1aW5nIHBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlLCBzbyB0aGUgcGVuZGluZ1xuK1x0XHQgKiBXUl9ORVhUXzFIWiBkb2VzIG5vdCBvdmVyd3JpdGUgdGhlIHN1Yi1zZWNvbmQgYWRqdXN0bWVudC5cbitcdFx0ICovXG4rXHRcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQpO1xuK1x0XHRpZiAocmMpXG4rXHRcdFx0cmV0dXJuIHJjO1xuK1xuK1x0XHRzZWNfYWRqdXN0ZWQgPSB0cnVlO1xuK1x0fVxuK1xuK1x0LyogQXBwbHkgc3ViLXNlY29uZCBkZWx0YSB2aWEgcGhhc2Ugc3RlcCAoTkNPKSBvciBUSUUgd3JpdGUgKi9cbitcdGlmICh6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikpIHtcbitcdFx0cmMgPSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCh6bGRwbGwsIGRlbHRhKTtcbitcdFx0aWYgKCFyYylcbitcdFx0XHRyZXR1cm4gMDtcbitcdH0gZWxzZSB7XG4rXHRcdHJjID0gemwzMDczeF9jaGFuX3RpZV93cml0ZSh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCBkZWx0YSk7XG4rXHRcdGlmICghcmMpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHQvKiBQaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSBmYWlsZWQsIGZhbGwgYmFjayB0byBUb0QgYWRqdXN0ICovXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsXG4rXHRcdFx0XHQgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTtcbitcbitcdC8qIEluIHRoZSB1bmxpa2VseSBldmVudCB0aGF0IGJvdGggcGhhc2Ugc3RlcC9USUUgd3JpdGUgYW5kIGZhbGxiYWNrXG4rXHQgKiBUb0QgYWRqdXN0IGZhaWwgYWZ0ZXIgc2Vjb25kcyB3ZXJlIGFscmVhZHkgY29tbWl0dGVkLCByZXR1cm5cbitcdCAqIHN1Y2Nlc3MgdG8gcHJldmVudCB0aGUgUFRQIHNlcnZvIGZyb20gcmV0cnlpbmcgdGhlIGZ1bGwgZGVsdGEgYW5kXG4rXHQgKiBhcHBseWluZyBzZWNvbmRzIGFnYWluLiBUaGUgc3ViLXNlY29uZCByZXNpZHVhbCB3aWxsIHNlbGYtY29ycmVjdFxuK1x0ICogaW4gdGhlIG5leHQgc2Vydm8gY3ljbGUuXG4rXHQgKi9cbitcdGlmIChyYyBcdTAwMjZcdTAwMjYgc2VjX2FkanVzdGVkKSB7XG4rXHRcdGRldl93YXJuKHpsZGV2LVx1MDAzZWRldixcbitcdFx0XHQgXCJTdWItc2Vjb25kIGFkanVzdG1lbnQgZmFpbGVkIGFmdGVyIHNlY29uZHMgYXBwbGllZFxcblwiKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmM7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSAtIGFkanVzdCBQVFAgY2xvY2sgZnJlcXVlbmN5XG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4rICogQHNjYWxlZF9wcG06IGZyZXF1ZW5jeSBhZGp1c3RtZW50IGluIHNjYWxlZCBwcG0gKHBwbSAqIDJeMTYpXG4rICpcbisgKiBPbmx5IHN1cHBvcnRlZCBmb3IgTkNPLiBXcml0ZXMgdGhlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgcmVnaXN0ZXIuXG4rICpcbisgKiBSZXR1cm46XG4rICogKiAlMFx0XHRcdC0gc3VjY2VzcyBvciBAc2NhbGVkX3BwbSBpcyB6ZXJvIChuby1vcClcbisgKiAqICUtRU9QTk9UU1VQUFx0LSBOQ08gcGluIGlzIG5vdCBjb25uZWN0ZWQgYW5kIEBzY2FsZWRfcHBtIGlzIG5vbi16ZXJvXG4rICogKiBuZWdhdGl2ZVx0XHQtIG90aGVyIGVycm9yXG4rICovXG4rc3RhdGljIGludFxuK3psMzA3M3hfZHBsbF9wdHBfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGxvbmcgc2NhbGVkX3BwbSlcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xuK1x0czY0IG9mZnNldDtcbitcbitcdC8qIENvbnZlcnQgc2NhbGVkX3BwbSB0byBkZl9vZmZzZXQgaW4gMl4tNDggc3RlcHM6XG4rXHQgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDJeMzIpIC8gMTBeNlxuK1x0ICpcbitcdCAqIFNpbXBsaWZ5IHRvIGF2b2lkIG92ZXJmbG93OlxuK1x0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjI2KSAvIDVeNlxuK1x0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiA2NzEwODg2NCkgLyAxNTYyNVxuK1x0ICovXG4rXHRvZmZzZXQgPSAtZGl2X3M2NCgoczY0KXNjYWxlZF9wcG0gKiA2NzEwODg2NExMLCAxNTYyNSk7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuK1x0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkcGxsLVx1MDAzZWRldiwgemxkcGxsLVx1MDAzZWlkKTtcbitcdGlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKVxuK1x0XHRyZXR1cm4gc2NhbGVkX3BwbSA/IC1FT1BOT1RTVVBQIDogMDtcbitcdGlmIChvZmZzZXQgPT0gY2hhbi1cdTAwM2VkZl9vZmZzZXQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCwgb2Zmc2V0KTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSAtIGFkanVzdCBQVFAgY2xvY2sgcGhhc2VcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbisgKiBAZGVsdGE6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHNcbisgKlxuKyAqIE9ubHkgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMuIFVzZXMgVElFIHdyaXRlIGZvclxuKyAqIG5hbm9zZWNvbmQgcmVzb2x1dGlvbiBwaGFzZSBhZGp1c3RtZW50LlxuKyAqXG4rICogUmV0dXJuOlxuKyAqICogJTBcdFx0XHQtIHN1Y2Nlc3Mgb3IgQGRlbHRhIGlzIHplcm8gKG5vLW9wKVxuKyAqICogJS1FT1BOT1RTVVBQXHQtIG1vZGUgZG9lcyBub3Qgc3VwcG9ydCBUSUUgYW5kIEBkZWx0YSBpcyBub24temVyb1xuKyAqICogbmVnYXRpdmVcdFx0LSBvdGhlciBlcnJvclxuKyAqL1xuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHMzMiBkZWx0YSlcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbitcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XG4rXG4rXHRpZiAoIWRlbHRhKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXG4rXHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLVx1MDAzZWlkKTtcbitcbitcdGlmICghemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRyZXR1cm4gemwzMDczeF9jaGFuX3RpZV93cml0ZSh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCBkZWx0YSk7XG4rfVxuK1xuK3N0YXRpYyBzMzJcbit6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyBfX2Fsd2F5c191bnVzZWQpXG4re1xuK1x0LyogSFcgbGltaXRzIFRJRSB3cml0ZSB0byArLTEgc2Vjb25kLiBSZXR1cm4gdGhlIGNvbnN0YW50IEhXXG4rXHQgKiBsaW1pdCBhbmQgbGV0IGFkanBoYXNlIGhhbmRsZSBtb2RlLXNwZWNpZmljIGNoZWNrcy5cbitcdCAqL1xuK1x0cmV0dXJuIE5TRUNfUEVSX1NFQyAtIDE7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvID0ge1xuK1x0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4rXHQubWF4X2Fkalx0PSBaTDMwNzNYX0RQTExfUFRQX01BWF9BREosXG4rXHQuZ2V0dGltZXg2NFx0PSB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQsXG4rXHQuc2V0dGltZTY0XHQ9IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0LFxuK1x0LmFkanRpbWVcdD0gemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lLFxuK1x0LmFkamZpbmVcdD0gemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lLFxuK1x0LmFkanBoYXNlXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2UsXG4rXHQuZ2V0bWF4cGhhc2VcdD0gemwzMDczeF9kcGxsX3B0cF9nZXRtYXhwaGFzZSxcbit9O1xuK1xuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIgLSByZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsXG4rICogQHpsZHBsbDogRFBMTCBjaGFubmVsIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3JcbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbitcdHN0cnVjdCBwdHBfY2xvY2sgKnB0cF9jbG9jaztcbitcbitcdHpsZHBsbC1cdTAwM2VwdHBfaW5mbyA9IHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mbztcbitcdHNucHJpbnRmKHpsZHBsbC1cdTAwM2VwdHBfaW5mby5uYW1lLCBzaXplb2YoemxkcGxsLVx1MDAzZXB0cF9pbmZvLm5hbWUpLFxuK1x0XHQgXCIlcy1kcGxsJXVcIiwgZGV2X25hbWUoemxkZXYtXHUwMDNlZGV2KSwgemxkcGxsLVx1MDAzZWlkKTtcbitcbitcdHB0cF9jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcihcdTAwMjZ6bGRwbGwtXHUwMDNlcHRwX2luZm8sIHpsZGV2LVx1MDAzZWRldik7XG4rXHRpZiAoSVNfRVJSKHB0cF9jbG9jaykpIHtcbitcdFx0ZGV2X2Vycih6bGRldi1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgRFBMTCV1XFxuXCIsXG4rXHRcdFx0emxkcGxsLVx1MDAzZWlkKTtcbitcdFx0cmV0dXJuIFBUUl9FUlIocHRwX2Nsb2NrKTtcbitcdH1cbitcbitcdHpsZHBsbC1cdTAwM2VwdHBfY2xvY2sgPSBwdHBfY2xvY2s7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyIC0gdW5yZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsXG4rICogQHpsZHBsbDogRFBMTCBjaGFubmVsIHRvIHVucmVnaXN0ZXIgUFRQIGNsb2NrIGZvclxuKyAqL1xuK3N0YXRpYyB2b2lkIHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4re1xuK1x0aWYgKCFJU19FUlJfT1JfTlVMTCh6bGRwbGwtXHUwMDNlcHRwX2Nsb2NrKSkge1xuK1x0XHRwdHBfY2xvY2tfdW5yZWdpc3Rlcih6bGRwbGwtXHUwMDNlcHRwX2Nsb2NrKTtcbitcdFx0emxkcGxsLVx1MDAzZXB0cF9jbG9jayA9IE5VTEw7XG4rXHR9XG4gfVxuIFxuIC8qKlxuQEAgLTI0MzYsNiArMjc3Nyw0NyBAQCB6bDMwNzN4X2RwbGxfcmVmX3N5bmNfcGFpcnNfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9hbGxvYyAtIGFsbG9jYXRlIERQTEwgZGV2aWNlXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyXG4rICpcbisgKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuXG4rICpcbisgKiBSZXR1cm46IHBvaW50ZXIgdG8gRFBMTCBkZXZpY2Ugb24gc3VjY2VzcywgZXJyb3IgcG9pbnRlciBvbiBlcnJvclxuKyAqL1xuK3N0cnVjdCB6bDMwNzN4X2RwbGwgKlxuK3psMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7XG4rXG4rXHR6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTtcbitcdGlmICghemxkcGxsKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcbitcdHpsZHBsbC1cdTAwM2VkZXYgPSB6bGRldjtcbitcdHpsZHBsbC1cdTAwM2VpZCA9IGNoO1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXHRJTklUX0xJU1RfSEVBRChcdTAwMjZ6bGRwbGwtXHUwMDNlcGlucyk7XG4rXG4rXHRyZXR1cm4gemxkcGxsO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfZnJlZSAtIGZyZWUgRFBMTCBkZXZpY2VcbisgKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmVcbisgKlxuKyAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuXG4rICovXG4rdm9pZFxuK3psMzA3M3hfZHBsbF9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbit7XG4rXHRXQVJOKHpsZHBsbC1cdTAwM2VkcGxsX2RldiwgXCJEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXFxuXCIpO1xuK1xuK1x0bXV0ZXhfZGVzdHJveShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXHRrZnJlZSh6bGRwbGwpO1xuK31cbitcbiAvKipcbiAgKiB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIgLSByZWdpc3RlciBEUExMIGRldmljZSBhbmQgYWxsIGl0cyBwaW5zXG4gICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXG5AQCAtMjQ2Niw2ICsyODQ4LDEzIEBAIHpsMzA3M3hfZHBsbF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4gXHRcdHJldHVybiByYztcbiBcdH1cbiBcbitcdHJjID0gemwzMDczeF9kcGxsX3B0cF9yZWdpc3Rlcih6bGRwbGwpO1xuK1x0aWYgKHJjKSB7XG4rXHRcdHpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTtcbitcdFx0emwzMDczeF9kcGxsX2RldmljZV91bnJlZ2lzdGVyKHpsZHBsbCk7XG4rXHRcdHJldHVybiByYztcbitcdH1cbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0yNDc5LDcgKzI4NjgsNyBAQCB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIHZvaWRcbiB6bDMwNzN4X2RwbGxfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4ge1xuLVx0LyogVW5yZWdpc3RlciBhbGwgcGlucyBhbmQgZHBsbCAqL1xuK1x0emwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHpsZHBsbCk7XG4gXHR6bDMwNzN4X2RwbGxfcGluc191bnJlZ2lzdGVyKHpsZHBsbCk7XG4gXHR6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXG5pbmRleCBmYWViYzQwMmJhMWI3Li45OTMyMjFkYzYzMjQ5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmhcbkBAIC01LDYgKzUsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RwbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiY29yZS5oXCJcbiBcbkBAIC0yMiw2ICsyMyw4IEBAXG4gICogQHR5cGU6IERQTEwgdHlwZSAoUFBTIG9yIEVFQylcbiAgKiBAbG9ja19zdGF0dXM6IGxhc3Qgc2F2ZWQgRFBMTCBsb2NrIHN0YXR1c1xuICAqIEBwaW5zOiBsaXN0IG9mIHBpbnNcbisgKiBAcHRwX2luZm86IFBUUCBjbG9jayBpbmZvXG4rICogQHB0cF9jbG9jazogcmVnaXN0ZXJlZCBQVFAgY2xvY2sgKG9yIE5VTEwpXG4gICovXG4gc3RydWN0IHpsMzA3M3hfZHBsbCB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRcdGxpc3Q7XG5AQCAtMzYsNiArMzksOCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsIHtcbiBcdGVudW0gZHBsbF90eXBlXHRcdFx0dHlwZTtcbiBcdGVudW0gZHBsbF9sb2NrX3N0YXR1c1x0XHRsb2NrX3N0YXR1cztcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdFx0cGlucztcbitcdHN0cnVjdCBwdHBfY2xvY2tfaW5mb1x0XHRwdHBfaW5mbztcbitcdHN0cnVjdCBwdHBfY2xvY2tcdFx0KnB0cF9jbG9jaztcbiB9O1xuIFxuIHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXG5pbmRleCBiNzBlYWQ3ZDQ0OTViLi5mM2E1ZTEyMTVhYTM2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhcbkBAIC0xNzksNiArMTc5LDIwIEBAXG4gI2RlZmluZSBaTF9EUExMX0RGX1JFQURfQ01EXHRcdFx0R0VOTUFTSygyLCAwKVxuICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRF9BQ0NfSVx0XHQ0XG4gXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTFx0XHRcdFpMX1JFRyg1LCAweDMwLCAxKVxuKyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUFx0XHRcdEdFTk1BU0soMiwgMClcbisjZGVmaW5lIFpMX0RQTExfVElFX0NUUkxfT1BfV1JcdFx0XHQ0XG4rXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTF9NQVNLXHRcdFpMX1JFRyg1LCAweDMxLCAxKVxuK1xuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX0NUUkwoX2lkeClcdFx0XHRcdFx0XFxcbitcdFpMX1JFR19JRFgoX2lkeCwgNSwgMHgzOCwgMSwgWkwzMDczWF9NQVhfQ0hBTk5FTFMsIDEpXG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX1NFTVx0XHRcdEJJVCg0KVxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURcdFx0XHRHRU5NQVNLKDMsIDApXG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWlx0MVxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVFx0XHQ4XG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9ORVhUXzFIWlx0OVxuK1xuICNkZWZpbmUgWkxfUkVHX0RQTExfTUVBU19DVFJMXHRcdFx0WkxfUkVHKDUsIDB4NTAsIDEpXG4gI2RlZmluZSBaTF9EUExMX01FQVNfQ1RSTF9FTlx0XHRcdEJJVCgwKVxuICNkZWZpbmUgWkxfRFBMTF9NRUFTX0NUUkxfQVZHX0ZBQ1RPUlx0XHRHRU5NQVNLKDcsIDQpXG5AQCAtMTkzLDYgKzIwNyw5IEBAXG4gXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgKiBSZWdpc3RlciBQYWdlcyA2LTcsIERQTEwgRGF0YVxuKyAqXG4rICogUGVyLWNoYW5uZWwgcmVnaXN0ZXJzIHdpdGggc3RyaWRlIDB4MjAuIENoYW5uZWxzIDAtMyByZXNpZGUgb24gcGFnZSA2LFxuKyAqIGNoYW5uZWwgNCBvbiBwYWdlIDcuXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gXG4gI2RlZmluZSBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeClcdFx0XHRcdFx0XFxcbkBAIC0yMDIsNiArMjE5LDI0IEBAXG4gXHQoKF9pZHgpIFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfREZfT0ZGU0VUXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfREZfT0ZGU0VUXzQpXG4gI2RlZmluZSBaTF9EUExMX0RGX09GRlNFVF9VTktOT1dOXHRTNjRfTUlOXG4gXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KVx0XHRcdFx0XHRcXFxuK1x0WkxfUkVHX0lEWChfaWR4LCA2LCAweDBDLCA2LCA0LCAweDIwKVxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEFfNFx0XHRcdFpMX1JFRyg3LCAweDBDLCA2KVxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEEoX2lkeClcdFx0XHRcdFx0XFxcbitcdCgoX2lkeCkgXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RJRV9EQVRBXzQpXG4rXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG4rXHRaTF9SRUdfSURYKF9pZHgsIDYsIDB4MTIsIDYsIDQsIDB4MjApXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzRcdFx0XHRaTF9SRUcoNywgMHgxMiwgNilcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUMoX2lkeClcdFx0XHRcdFx0XFxcbitcdCgoX2lkeCkgXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVE9EX1NFQ180KVxuK1xuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG4rXHRaTF9SRUdfSURYKF9pZHgsIDYsIDB4MTgsIDQsIDQsIDB4MjApXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlNfNFx0XHRcdFpMX1JFRyg3LCAweDE4LCA0KVxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TKF9pZHgpXHRcdFx0XHRcdFxcXG4rXHQoKF9pZHgpIFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfVE9EX05TXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVE9EX05TXzQpXG4rXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICogUmVnaXN0ZXIgUGFnZSA5LCBTeW50aCBhbmQgT3V0cHV0XG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuQEAgLTIyMSw2ICsyNTYsMjMgQEBcbiAjZGVmaW5lIFpMX09VVFBVVF9DVFJMX0VOXHRcdFx0QklUKDApXG4gI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9TWU5USF9TRUxcdFx0R0VOTUFTSyg2LCA0KVxuIFxuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTS1x0XHRaTF9SRUcoOSwgMHgzNiwgMilcbitcbisjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMXHRcdFpMX1JFRyg5LCAweDM4LCAxKVxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9EUExMXHRcdEdFTk1BU0soNiwgNClcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVBcdEJJVCgzKVxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUFx0XHRHRU5NQVNLKDEsIDApXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX05PTkVcdDBcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfUkVTRVRcdDFcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfUkVBRFx0MlxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURVx0M1xuK1xuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUlx0XHRaTF9SRUcoOSwgMHgzOSwgMSlcbitcbisjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLXHRcdFpMX1JFRyg5LCAweDNhLCAyKVxuK1xuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0RBVEFcdFx0WkxfUkVHKDksIDB4M2MsIDQpXG4rXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgKiBSZWdpc3RlciBQYWdlIDEwLCBSZWYgTWFpbGJveFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6NDE6MDYuNjcxODM0MDUyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA2Njc2MTQ0NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBaTDMwNzNYIERQTEwgRHJpdmVyIFBhdGNoIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KipcblxuT2theSwgc28gSSBoYXZlIGEgcGF0Y2ggaGVyZSB0aGF0J3MgYWRkaW5nIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBgemwzMDczeGAgRFBMTCBkcml2ZXIuIFRoaXMgaW52b2x2ZXMgY2hhbmdlcyBhY3Jvc3Mgc2V2ZXJhbCBmaWxlczogYEtjb25maWdgLCBgY2hhbi5jYCwgYGNoYW4uaGAsIGBjb3JlLmNgLCBgY29yZS5oYCwgYGRwbGwuY2AsIGBkcGxsLmhgLCBhbmQgYHJlZ3MuaGAuIENydWNpYWxseSwgaXQncyBhZGRpbmcgYSBgUFRQXzE1ODhfQ0xPQ0tgIGRlcGVuZGVuY3kgdG8gYFpMMzA3M1hgLCBgWkwzMDczWF9JMkNgLCBhbmQgYFpMMzA3M1hfU1BJYCwgYW5kIGludHJvZHVjaW5nIG5ldyBQVFAtcmVsYXRlZCBmdW5jdGlvbnMgbGlrZSBgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0YCBhbmQgYHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXJgLiBTZWVtcyBwcmV0dHkgc3RhbmRhcmQgZm9yIFBUUCBjbG9jayBpbnRlZ3JhdGlvbi5cblxuTm93LCB0aGUgcHJvbXB0IGlzIHRocm93aW5nIGEgY3VydmViYWxsLCBhc2tpbmcgaWYgdGhpcyBpcyBmdXp6YWJsZS4gSXQgbWVudGlvbnMgXCJ2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVyc1wiIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBoYXJkd2FyZSBhbmQgY2FuJ3QgYmUgZW11bGF0ZWQuIEJ1dCwgdGhpcyBgemwzMDczeGAgaXMgYSBEUExMIGRyaXZlciBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlcywgc3BlY2lmaWNhbGx5IHVzaW5nIEkyQy9TUEkuIFRoYXQncyBhIGdvb2Qgc2lnbi4gSTJDIGFuZCBTUEkgZGV2aWNlcyBjYW4gb2Z0ZW4gYmUgZW11bGF0ZWQgYW5kIGZ1enplZCBpbiBRRU1VLCByaWdodD8gV2UgY2FuIHR5cGljYWxseSBpbnN0YW50aWF0ZSB0aGVtIHZpYSBkZXZpY2UgdHJlZSBvdmVybGF5cyBvciBzeXNmcywgb3IgZXZlbiBmdXp6IHRoZW0gd2l0aCBzb21ldGhpbmcgbGlrZSBzeXprYWxsZXIuXG5cblN5emthbGxlciwgc3BlY2lmaWNhbGx5LCBoYXMgSTJDIGFuZCBTUEkgc3VwcG9ydDsgaXQgY2FuIGluamVjdCBub2RlcywgdXNlIGBpMmMtc3R1YmAgb3IgYHNwaWAgbG9vcGJhY2tzLCBvciBqdXN0IGluc3RhbnRpYXRlIHRoZW0gYW5kIGZ1enogdGhlaXIgb3BlcmF0aW9ucy4gVGhhdCdzIHRoZSBrZXkuIFRoaXMgZHJpdmVyIHVzZXMgYHJlZ21hcF9pMmNgIGFuZCBgcmVnbWFwX3NwaWAuIFN5emthbGxlciBjYW4gZnV6eiBJMkMgZGV2aWNlcyB2aWEgYC9kZXYvaTJjLSpgIG9yIGJ5IGluc3RhbnRpYXRpbmcgdGhlbSwgc28gdGhhdCdzIGhvcGVmdWwuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGlzIGRyaXZlciBjYW4gYmUgaW5zdGFudGlhdGVkIGluIGEgdmlydHVhbCBlbnZpcm9ubWVudC4gVGhlIHByb21wdCBpcyBzcGVjaWZpY2FsbHkgdGFsa2luZyBhYm91dCBjb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIHNvIHRoYXQncyB3aGF0IEkgaGF2ZSB0byBjaGVjay5cblxuVGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIGNhbiB0aGlzIGJlIGluc3RhbnRpYXRlZCB2aWEsIHNheSwgd3JpdGluZyB0byBgL3N5cy9idXMvaTJjL2RldmljZXMvaTJjLSovbmV3X2RldmljZWA/IFRoYXQgc2hvdWxkIHdvcmsgZm9yIGFueSBJMkMgZHJpdmVyIGlmIHdlIGtub3cgdGhlIGRyaXZlciBuYW1lLiBBbmQgdGhlIGRyaXZlciBuYW1lICpzaG91bGQqIGJlIGB6bDMwNzN4YCwgSSdsbCBkb3VibGUtY2hlY2sgdGhlIHNvdXJjZSB0byBiZSBzdXJlLiBJZiBJIGNhbiBjcmVhdGUgdGhlIEkyQyBkZXZpY2Ugbm9kZSBhbmQgdGhlbiBydW4gdGhpcyBuZXcgY29kZSwgdGhhdCBtZWFucyBJIGNhbiBmdXp6IHRoZSBjb2RlLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIGluc3RhbnRpYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTc4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTE1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6NDE6MTcuMzM5NDUyNjA3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MDcxNDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpsMzA3M3hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9kcGxsL3psMzA3M3gvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNDQ4NiBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZz0zPWNvbmZpZyBaTDMwNzNYXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTE0LVxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWc6MTU6XFx0ICB3aWxsIGJlIGNhbGxlZCB6bDMwNzN4LlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctMTYtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZz0xNz1jb25maWcgWkwzMDczWF9JMkNcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctMjYtXFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnOjI3OlxcdCAgYmUgY2FsbGVkIHpsMzA3M3hfaTJjLlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctMjgtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZz0yOT1jb25maWcgWkwzMDczWF9TUElcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctMzgtXFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnOjM5OlxcdCAgYmUgY2FsbGVkIHpsMzA3M3hfc3BpLlxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvTWFrZWZpbGUtMi1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9NYWtlZmlsZTozOm9iai0kKENPTkZJR19aTDMwNzNYKVxcdFxcdCs9IHpsMzA3M3gub1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L01ha2VmaWxlOjQ6emwzMDczeC1vYmpzXFx0XFx0XFx0Oj0gY2hhbi5vIGNvcmUubyBkZXZsaW5rLm8gZHBsbC5vXFx0XFxcXFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L01ha2VmaWxlLTUtXFx0XFx0XFx0XFx0ICAgZmxhc2gubyBmdy5vIG91dC5vIHByb3AubyByZWYubyBzeW50aC5vXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvTWFrZWZpbGUtNi1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19aTDMwNzNYX0kyQylcXHQrPSB6bDMwNzN4X2kyYy5vXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvTWFrZWZpbGU6ODp6bDMwNzN4X2kyYy1vYmpzXFx0XFx0Oj0gaTJjLm9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9NYWtlZmlsZS05LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19aTDMwNzNYX1NQSSlcXHQrPSB6bDMwNzN4X3NwaS5vXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvTWFrZWZpbGU6MTE6emwzMDczeF9zcGktb2Jqc1xcdFxcdDo9IHNwaS5vXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTMtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE0OiAqIHpsMzA3M3hfY2hhbl9zdGF0ZV91cGRhdGUgLSB1cGRhdGUgRFBMTCBjaGFubmVsIHN0YXR1cyBmcm9tIEhXXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE1OiAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmVcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTYtICogQGluZGV4OiBEUExMIGNoYW5uZWwgaW5kZXhcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xOS0gKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjA6aW50IHpsMzA3M3hfY2hhbl9zdGF0ZV91cGRhdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIxLXtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjI6XFx0c3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiA9IFxcdTAwMjZ6bGRldi1cXHUwMDNlY2hhbltpbmRleF07XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIzLVxcdHU2NCB2YWw7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjUtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI2OlxcdHJjID0gemwzMDczeF9yZWFkX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9NT05fU1RBVFVTKGluZGV4KSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjctXFx0XFx0XFx0ICAgICBcXHUwMDI2Y2hhbi1cXHUwMDNlbW9uX3N0YXR1cyk7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzAtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjMxOlxcdHJjID0gemwzMDczeF9yZWFkX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9SRUZTRUxfU1RBVFVTKGluZGV4KSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzItXFx0XFx0XFx0ICAgICBcXHUwMDI2Y2hhbi1cXHUwMDNlcmVmc2VsX3N0YXR1cyk7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzgtXFx0ICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM5OlxcdGlmICghemwzMDczeF9jaGFuX2lzX2xvY2tlZChjaGFuKSkge1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0MDpcXHRcXHRpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSlcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDEtXFx0XFx0XFx0Y2hhbi1cXHUwMDNlZGZfb2Zmc2V0ID0gWkxfRFBMTF9ERl9PRkZTRVRfVU5LTk9XTjtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00NC1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDU6XFx0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfREZfUkVBRChpbmRleCksXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ2LVxcdFxcdFxcdFxcdCAgWkxfRFBMTF9ERl9SRUFEX1NFTSxcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01MC1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTE6XFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9SRUFEKGluZGV4KSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTItXFx0XFx0XFx0ICAgICAgWkxfRFBMTF9ERl9SRUFEX1NFTSB8IFpMX0RQTExfREZfUkVBRF9SRUZfT0ZTVCk7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTUtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU2OlxcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX0RGX1JFQUQoaW5kZXgpLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01Ny1cXHRcXHRcXHRcXHQgIFpMX0RQTExfREZfUkVBRF9TRU0sXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNjEtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjYyOlxcdHJjID0gemwzMDczeF9yZWFkX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfREZfT0ZGU0VUKGluZGV4KSwgXFx1MDAyNnZhbCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTYzLVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy03MS0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NzI6ICogemwzMDczeF9jaGFuX25jb19tb2RlX3NldCAtIHN3aXRjaCBEUExMIGNoYW5uZWwgdG8gTkNPIG1vZGVcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NzM6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3hfZGV2IHN0cnVjdHVyZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy03NC0gKiBAaW5kZXg6IERQTEwgY2hhbm5lbCBpbmRleFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTgyLSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo4MzppbnQgemwzMDczeF9jaGFuX25jb19tb2RlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleClcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtODQte1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo4NTpcXHRzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuID0gXFx1MDAyNnpsZGV2LVxcdTAwM2VjaGFuW2luZGV4XTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtODYtXFx0dTggcHJldl9tb2RlLCBkZl9yZWFkO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTg5LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo5MDpcXHRwcmV2X21vZGUgPSB6bDMwNzN4X2NoYW5fbW9kZV9nZXQoY2hhbik7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTkxLVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTk2LVxcdGlmIChwcmV2X21vZGUgPT0gWkxfRFBMTF9NT0RFX1JFRlNFTF9NT0RFX0ZSRUVSVU4pIHtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6OTc6XFx0XFx0emwzMDczeF9jaGFuX21vZGVfc2V0KGNoYW4sIFpMX0RQTExfTU9ERV9SRUZTRUxfTU9ERV9OQ08pO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy05OC1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6OTk6XFx0XFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9NT0RFX1JFRlNFTChpbmRleCksXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTEwMC1cXHRcXHRcXHRcXHQgICAgICBjaGFuLVxcdTAwM2Vtb2RlX3JlZnNlbCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTEwMS1cXHRcXHRpZiAocmMpIHtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTAyOlxcdFxcdFxcdHpsMzA3M3hfY2hhbl9tb2RlX3NldChjaGFuLCBwcmV2X21vZGUpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xMDMtXFx0XFx0XFx0cmV0dXJuIHJjO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTEyMC1cXHRcXHQgIEZJRUxEX1BSRVAoWkxfRFBMTF9ERl9SRUFEX0NNRCwgWkxfRFBMTF9ERl9SRUFEX0NNRF9BQ0NfSSk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjEyMTpcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX0RGX1JFQUQoaW5kZXgpLCBkZl9yZWFkKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTIyLVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xMzAtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjEzMTpcXHR6bDMwNzN4X2NoYW5fbW9kZV9zZXQoY2hhbiwgWkxfRFBMTF9NT0RFX1JFRlNFTF9NT0RFX05DTyk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjEzMjpcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX01PREVfUkVGU0VMKGluZGV4KSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTMzLVxcdFxcdFxcdCAgICAgIGNoYW4tXFx1MDAzZW1vZGVfcmVmc2VsKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTM0LVxcdGlmIChyYykge1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxMzU6XFx0XFx0emwzMDczeF9jaGFuX21vZGVfc2V0KGNoYW4sIHByZXZfbW9kZSk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTEzNi1cXHRcXHRyZXR1cm4gcmM7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTQ3LVxcdCAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxNDg6XFx0cmMgPSB6bDMwNzN4X3JlYWRfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9PRkZTRVQoaW5kZXgpLCBcXHUwMDI2dmFsKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTQ5LVxcdGlmIChyYykge1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE2MS0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTYyOiAqIHpsMzA3M3hfY2hhbl9zdGF0ZV9mZXRjaCAtIGZldGNoIERQTEwgY2hhbm5lbCBzdGF0ZSBmcm9tIGhhcmR3YXJlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE2MzogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE2NC0gKiBAaW5kZXg6IERQTEwgY2hhbm5lbCBpbmRleCB0byBmZXRjaCBzdGF0ZSBmb3JcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xNzAtICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE3MTppbnQgemwzMDczeF9jaGFuX3N0YXRlX2ZldGNoKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xNzIte1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxNzM6XFx0c3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiA9IFxcdTAwMjZ6bGRldi1cXHUwMDNlY2hhbltpbmRleF07XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE3NC1cXHRpbnQgcmMsIGk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE3NS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTc2OlxcdHJjID0gemwzMDczeF9yZWFkX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9DVFJMKGluZGV4KSwgXFx1MDAyNmNoYW4tXFx1MDAzZWN0cmwpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xNzctXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE3OS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTgwOlxcdHJjID0gemwzMDczeF9yZWFkX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9NT0RFX1JFRlNFTChpbmRleCksXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE4MS1cXHRcXHRcXHQgICAgIFxcdTAwMjZjaGFuLVxcdTAwM2Vtb2RlX3JlZnNlbCk7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTg1LVxcdGRldl9kYmcoemxkZXYtXFx1MDAzZWRldiwgXFxcIkRQTEwldSBtb2RlOiAldSwgcmVmOiAldVxcXFxuXFxcIiwgaW5kZXgsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE4NjpcXHRcXHR6bDMwNzN4X2NoYW5fbW9kZV9nZXQoY2hhbiksIHpsMzA3M3hfY2hhbl9yZWZfZ2V0KGNoYW4pKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTg3LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxODg6XFx0cmMgPSB6bDMwNzN4X2NoYW5fc3RhdGVfdXBkYXRlKHpsZGV2LCBpbmRleCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE4OS1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTk1LVxcdCAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxOTY6XFx0aWYgKHpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSlcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTk3LVxcdFxcdGNoYW4tXFx1MDAzZWRmX29mZnNldCA9IFpMX0RQTExfREZfT0ZGU0VUX1VOS05PV047XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjAwLVxcdFxcdFxcXCJEUExMJXUgbG9ja19zdGF0ZTogJXUsIGhvOiAldSwgc2VsX3N0YXRlOiAldSwgc2VsX3JlZjogJXVcXFxcblxcXCIsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIwMTpcXHRcXHRpbmRleCwgemwzMDczeF9jaGFuX2xvY2tfc3RhdGVfZ2V0KGNoYW4pLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyMDI6XFx0XFx0emwzMDczeF9jaGFuX2lzX2hvX3JlYWR5KGNoYW4pID8gMSA6IDAsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIwMzpcXHRcXHR6bDMwNzN4X2NoYW5fcmVmc2VsX3N0YXRlX2dldChjaGFuKSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjA0OlxcdFxcdHpsMzA3M3hfY2hhbl9yZWZzZWxfcmVmX2dldChjaGFuKSk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIwNS1cXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMDgtXFx0LyogUmVhZCBEUExMIGNvbmZpZ3VyYXRpb24gZnJvbSBtYWlsYm94ICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIwOTpcXHRyYyA9IHpsMzA3M3hfbWJfb3AoemxkZXYsIFpMX1JFR19EUExMX01CX1NFTSwgWkxfRFBMTF9NQl9TRU1fUkQsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIxMC1cXHRcXHRcXHQgICBaTF9SRUdfRFBMTF9NQl9NQVNLLCBCSVQoaW5kZXgpKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMTUtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoY2hhbi1cXHUwMDNlcmVmX3ByaW8pOyBpKyspIHtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjE2OlxcdFxcdHJjID0gemwzMDczeF9yZWFkX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9SRUZfUFJJTyhpKSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjE3LVxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmNoYW4tXFx1MDAzZXJlZl9wcmlvW2ldKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMjUtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIyNjogKiB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0IC0gZ2V0IGN1cnJlbnQgRFBMTCBjaGFubmVsIHN0YXRlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIyNzogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIyOC0gKiBAaW5kZXg6IERQTEwgY2hhbm5lbCBpbmRleCB0byBnZXQgc3RhdGUgZm9yXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjMxLSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyMzI6Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqemwzMDczeF9jaGFuX3N0YXRlX2dldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMzMtXFx0XFx0XFx0XFx0XFx0XFx0ICB1OCBpbmRleClcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMzgtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIzOTogKiB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQgLSB3YWl0IGZvciBUb0Qgc2VtYXBob3JlIHRvIGNsZWFyXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI0MDogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjQxLSAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjUxLSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyNTI6aW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjUzLXtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNTctXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI1ODpcXHRyYyA9IHpsMzA3M3hfcmVhZF91OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLCBcXHUwMDI2dG9kX2N0cmwpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNTktXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI3Ni1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6Mjc3OlxcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjc4LVxcdFxcdFxcdFxcdCAgWkxfRFBMTF9UT0RfQ1RSTF9TRU0sIHRpbWVvdXQpO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI4My0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6Mjg0OiAqIHpsMzA3M3hfY2hhbl90b2RfY3RybCAtIGlzc3VlIFRvRCBjb21tYW5kXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI4NTogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjg2LSAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjk0LSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyOTU6c3RhdGljIGludCB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHU4IGNtZClcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjk2LXtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6Mjk3OlxcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI5OC1cXHRcXHRcXHRcXHRaTF9EUExMX1RPRF9DVFJMX1NFTSB8IGNtZCk7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzAxLS8qKlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozMDI6ICogemwzMDczeF9jaGFuX3RvZF9yZWFkIC0gcmVhZCBUb0QgcmVnaXN0ZXJzIGFmdGVyIGlzc3VpbmcgYSBjb21tYW5kXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjMwMzogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzA0LSAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzA4LSAqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjMwOTogKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMTAtICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMxMS0gKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzEyOmludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMxMy1cXHRcXHRcXHQgIGJvb2wgbmV4dF9oeiwgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMyNi1cXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVG9EIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozMjc6XFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzI4LVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMzEtXFx0cHRwX3JlYWRfc3lzdGVtX3ByZXRzKHN0cyk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjMzMjpcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfY3RybCh6bGRldiwgY2gsIGNtZCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMzMy1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzM1LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozMzY6XFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzM3LVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNDAtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM0MTpcXHRyYyA9IHpsMzA3M3hfcmVhZF91NDgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9TRUMoY2gpLCBcXHUwMDI2c2VjKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzQyLVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNDUtXFx0LyogSFcgbmFub3NlY29uZHMgYXJlIGFsd2F5cyBpbiBbMCwgTlNFQ19QRVJfU0VDKSByYW5nZSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozNDY6XFx0cmMgPSB6bDMwNzN4X3JlYWRfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCBcXHUwMDI2bnNlYyk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM0Ny1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzU2LS8qKlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozNTc6ICogemwzMDczeF9jaGFuX3RvZF93cml0ZSAtIHdyaXRlIFRvRCByZWdpc3RlcnMgYW5kIHRyaWdnZXIgMSBIeiB1cGRhdGVcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzU4OiAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNTktICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNjEtICpcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzYyOiAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM2My0gKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzY0LSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozNjU6aW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM2Ni1cXHRcXHRcXHQgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNzAtXFx0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzcxOlxcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM3Mi1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzc0LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozNzU6XFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIHRzLnR2X3NlYyk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM3Ni1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzc4LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozNzk6XFx0cmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgdHMudHZfbnNlYyk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM4MC1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzgyLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozODM6XFx0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfY3RybCh6bGRldiwgY2gsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM4NC1cXHRcXHRcXHRcXHQgICAgIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zODctLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM4ODogKiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCAtIGF0b21pYyBUb0QgcmVhZC1tb2RpZnktd3JpdGUgd2l0aCByb2xsb3ZlciBndWFyZFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozODk6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM5MC0gKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM5OC0gKlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozOTk6ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDAwLSAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00MDEtICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQwMjppbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQwMy1cXHRcXHRcXHQgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDEwLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBaTF9UT0RfTUFYX1JFVFJJRVM7IGkrKykge1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0MTE6XFx0XFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCB0cnVlLCBcXHUwMDI2dHNfbmV4dCwgTlVMTCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQxMi1cXHRcXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDE0LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0MTU6XFx0XFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCBmYWxzZSwgXFx1MDAyNnRzX2N1ciwgTlVMTCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQxNi1cXHRcXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDM4LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0Mzk6XFx0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkZXYsIGNoLCB0c19uZXh0KTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDQwLSN1bmRlZiBaTF9UT0RfTUFYX1JFVFJJRVNcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00NDMtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQ0NDogKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCAtIHdyaXRlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgdG8gaGFyZHdhcmVcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDQ1OiAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00NDYtICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00NTEtICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQ1MjppbnQgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBvZmZzZXQpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ1My17XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDU1LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0NTY6XFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfREZfT0ZGU0VUKGNoKSwgb2Zmc2V0KTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDU3LVxcdGlmICghcmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDYzLS8qKlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0NjQ6ICogemwzMDczeF9jaGFuX3RpZV93cml0ZSAtIGFkanVzdCBEUExMIHBoYXNlIHVzaW5nIFRJRSB3cml0ZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0NjU6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ2Ni0gKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ3My0gKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDc0OmludCB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgZGVsdGFfbnMpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ3NS17XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDgxLVxcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUSUUgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQ4MjpcXHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDgzLVxcdFxcdFxcdFxcdCAgWkxfRFBMTF9USUVfQ1RSTF9PUCxcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00OTAtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQ5MTpcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfREFUQShjaCksIHRpZV9kYXRhKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDkyLVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00OTQtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQ5NTpcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0ssIEJJVChjaCkpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00OTYtXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ5OC1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDk5OlxcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTAwLVxcdFxcdFxcdFxcdFpMX0RQTExfVElFX0NUUkxfT1BfV1IpO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUwMy0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTA0OiAqIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwIC0gZXhlY3V0ZSBvbmUgb3V0cHV0IHBoYXNlIHN0ZXAgb3BlcmF0aW9uXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjUwNTogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTA2LSAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTE1LSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1MTY6aW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01MTctXFx0XFx0XFx0ICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUyNS1cXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgcGhhc2Ugc3RlcCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTI2OlxcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01MjctXFx0XFx0XFx0XFx0ICBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUzMS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTMyOlxcdHJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01MzMtXFx0XFx0XFx0ICAgICAgIHN0ZXBfY3ljbGVzKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01MzYtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjUzNzpcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTE2KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTUFTSywgb3V0X21hc2spO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01MzgtXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU0MC1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTQxOlxcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUiwgMSk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU0Mi1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTUwLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1NTE6XFx0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLCBjdHJsKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTUyLX1cXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NTQtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU1NTogKiB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0IC0gY29tbWl0IERQTEwgY2hhbm5lbCBzdGF0ZSBjaGFuZ2VzIHRvIGhhcmR3YXJlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU1NjogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU1Ny0gKiBAaW5kZXg6IERQTEwgY2hhbm5lbCBpbmRleCB0byBzZXQgc3RhdGUgZm9yXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTY2LSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1Njc6aW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU2ODpcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01Njkte1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1NzA6XFx0c3RydWN0IHpsMzA3M3hfY2hhbiAqZGNoYW4gPSBcXHUwMDI2emxkZXYtXFx1MDAzZWNoYW5baW5kZXhdO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NzEtXFx0aW50IHJjLCBpO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU3OC1cXHRpZiAoZGNoYW4tXFx1MDAzZWN0cmwgIT0gY2hhbi1cXHUwMDNlY3RybCkge1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1Nzk6XFx0XFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9DVFJMKGluZGV4KSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTgwLVxcdFxcdFxcdFxcdCAgICAgIGNoYW4tXFx1MDAzZWN0cmwpO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU4Ni1cXHRpZiAoZGNoYW4tXFx1MDAzZW1vZGVfcmVmc2VsICE9IGNoYW4tXFx1MDAzZW1vZGVfcmVmc2VsKSB7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU4NzpcXHRcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX01PREVfUkVGU0VMKGluZGV4KSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTg4LVxcdFxcdFxcdFxcdCAgICAgIGNoYW4tXFx1MDAzZW1vZGVfcmVmc2VsKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy02MDItXFx0LyogUmVhZCBEUExMIGNvbmZpZ3VyYXRpb24gaW50byBtYWlsYm94ICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjYwMzpcXHRyYyA9IHpsMzA3M3hfbWJfb3AoemxkZXYsIFpMX1JFR19EUExMX01CX1NFTSwgWkxfRFBMTF9NQl9TRU1fUkQsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTYwNC1cXHRcXHRcXHQgICBaTF9SRUdfRFBMTF9NQl9NQVNLLCBCSVQoaW5kZXgpKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy02MTAtXFx0XFx0aWYgKGRjaGFuLVxcdTAwM2VyZWZfcHJpb1tpXSAhPSBjaGFuLVxcdTAwM2VyZWZfcHJpb1tpXSkge1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo2MTE6XFx0XFx0XFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy02MTItXFx0XFx0XFx0XFx0XFx0ICAgICAgWkxfUkVHX0RQTExfUkVGX1BSSU8oaSksXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNjE5LVxcdC8qIENvbW1pdCBEUExMIGNvbmZpZ3VyYXRpb24gKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NjIwOlxcdHJjID0gemwzMDczeF9tYl9vcCh6bGRldiwgWkxfUkVHX0RQTExfTUJfU0VNLCBaTF9EUExMX01CX1NFTV9XUixcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNjIxLVxcdFxcdFxcdCAgIFpMX1JFR19EUExMX01CX01BU0ssIEJJVChpbmRleCkpO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oPTEzPXN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcDtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTQ6c3RydWN0IHpsMzA3M3hfZGV2O1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xNS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTYtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjE3OiAqIHN0cnVjdCB6bDMwNzN4X2NoYW4gLSBEUExMIGNoYW5uZWwgc3RhdGVcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTgtICogQGN0cmw6IERQTEwgY29udHJvbCByZWdpc3RlciB2YWx1ZVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTI0LSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoyNTpzdHJ1Y3QgemwzMDczeF9jaGFuIHtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMjYtXFx0c3RydWN0X2dyb3VwKGNmZyxcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0zNy1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6Mzg6aW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9mZXRjaChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjM5OmNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKnpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldixcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNDAtXFx0XFx0XFx0XFx0XFx0XFx0IHU4IGluZGV4KTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NDE6aW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjQyOlxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC00My1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NDQ6aW50IHpsMzA3M3hfY2hhbl9zdGF0ZV91cGRhdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDo0NTppbnQgemwzMDczeF9jaGFuX25jb19tb2RlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTQ2LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDo0NzppbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NDg6aW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNDktXFx0XFx0XFx0ICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNTAtXFx0XFx0XFx0ICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cyk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjUxOmludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC01Mi1cXHRcXHRcXHQgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cyk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjUzOmludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNTQtXFx0XFx0XFx0ICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NTU6aW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC01Ni1cXHRcXHRcXHQgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsIGJvb2wgdG9kX3N0ZXApO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC01Ny1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NTg6aW50IHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgb2Zmc2V0KTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNTktXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjYwOmludCB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgZGVsdGFfbnMpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC02MS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNjItLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjYzOiAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfZ2V0IC0gZ2V0IGNhY2hlZCBkZl9vZmZzZXQgdnMgdHJhY2tlZCByZWZlcmVuY2VcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNjQtICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oPTY4PXN0YXRpYyBpbmxpbmUgczY0XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjY5OnpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfZ2V0KGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTcwLXtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC03NC0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NzU6ICogemwzMDczeF9jaGFuX21vZGVfZ2V0IC0gZ2V0IERQTEwgY2hhbm5lbCBvcGVyYXRpbmcgbW9kZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC03Ni0gKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNzktICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjgwOnN0YXRpYyBpbmxpbmUgdTggemwzMDczeF9jaGFuX21vZGVfZ2V0KGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTgxLXtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC04NS0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6ODY6ICogemwzMDczeF9jaGFuX3JlZl9nZXQgLSBnZXQgbWFudWFsbHkgc2VsZWN0ZWQgcmVmZXJlbmNlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTg3LSAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC05MC0gKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6OTE6c3RhdGljIGlubGluZSB1OCB6bDMwNzN4X2NoYW5fcmVmX2dldChjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC05Mi17XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtOTYtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjk3OiAqIHpsMzA3M3hfY2hhbl9tb2RlX3NldCAtIHNldCBEUExMIGNoYW5uZWwgb3BlcmF0aW5nIG1vZGVcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtOTgtICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTEwMC0gKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTAxOnN0YXRpYyBpbmxpbmUgdm9pZCB6bDMwNzN4X2NoYW5fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiwgdTggbW9kZSlcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTAyLXtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xMDYtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjEwNzogKiB6bDMwNzN4X2NoYW5fcmVmX3NldCAtIHNldCBtYW51YWxseSBzZWxlY3RlZCByZWZlcmVuY2VcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTA4LSAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xMTAtICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjExMTpzdGF0aWMgaW5saW5lIHZvaWQgemwzMDczeF9jaGFuX3JlZl9zZXQoc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiwgdTggcmVmKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xMTIte1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTExNi0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTE3OiAqIHpsMzA3M3hfY2hhbl9yZWZfcHJpb19nZXQgLSBnZXQgcmVmZXJlbmNlIHByaW9yaXR5XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTExOC0gKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg9MTIzPXN0YXRpYyBpbmxpbmUgdThcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTI0OnpsMzA3M3hfY2hhbl9yZWZfcHJpb19nZXQoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiwgdTggcmVmKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xMjUte1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTEzNC0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTM1OiAqIHpsMzA3M3hfY2hhbl9yZWZfcHJpb19zZXQgLSBzZXQgcmVmZXJlbmNlIHByaW9yaXR5XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTEzNi0gKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg9MTQwPXN0YXRpYyBpbmxpbmUgdm9pZFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxNDE6emwzMDczeF9jaGFuX3JlZl9wcmlvX3NldChzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuLCB1OCByZWYsIHU4IHByaW8pXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE0Mi17XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTUxLS8qKlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxNTI6ICogemwzMDczeF9jaGFuX3JlZl9pc19zZWxlY3RhYmxlIC0gY2hlY2sgaWYgcmVmZXJlbmNlIGlzIHNlbGVjdGFibGVcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTUzLSAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaD0xNTg9c3RhdGljIGlubGluZSBib29sXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjE1OTp6bDMwNzN4X2NoYW5fcmVmX2lzX3NlbGVjdGFibGUoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiwgdTggcmVmKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xNjAte1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxNjE6XFx0cmV0dXJuIHpsMzA3M3hfY2hhbl9yZWZfcHJpb19nZXQoY2hhbiwgcmVmKSAhPSBaTF9EUExMX1JFRl9QUklPX05PTkU7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE2Mi19XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTY0LS8qKlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxNjU6ICogemwzMDczeF9jaGFuX2xvY2tfc3RhdGVfZ2V0IC0gZ2V0IERQTEwgY2hhbm5lbCBsb2NrIHN0YXRlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE2Ni0gKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTY5LSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxNzA6c3RhdGljIGlubGluZSB1OCB6bDMwNzN4X2NoYW5fbG9ja19zdGF0ZV9nZXQoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTcxLXtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xNzUtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjE3NjogKiB6bDMwNzN4X2NoYW5faXNfbG9ja2VkIC0gY2hlY2sgaWYgY2hhbm5lbCBpcyBsb2NrZWQgdG8gYSByZWZlcmVuY2VcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTc3LSAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xODAtICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjE4MTpzdGF0aWMgaW5saW5lIGJvb2wgemwzMDczeF9jaGFuX2lzX2xvY2tlZChjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xODIte1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxODM6XFx0dTggbG9ja19zdGF0ZSA9IHpsMzA3M3hfY2hhbl9sb2NrX3N0YXRlX2dldChjaGFuKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTg0LVxcdHJldHVybiBsb2NrX3N0YXRlID09IFpMX0RQTExfTU9OX1NUQVRVU19TVEFURV9MT0NLO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE4Ny0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTg4OiAqIHpsMzA3M3hfY2hhbl9tb2RlX2lzX2F1dG8gLSBjaGVjayBpZiBjaGFubmVsIGlzIGluIGF1dG9tYXRpYyBtb2RlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE4OS0gKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTkyLSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxOTM6c3RhdGljIGlubGluZSBib29sIHpsMzA3M3hfY2hhbl9tb2RlX2lzX2F1dG8oY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTk0LXtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTk1OlxcdHJldHVybiB6bDMwNzN4X2NoYW5fbW9kZV9nZXQoY2hhbikgPT0gWkxfRFBMTF9NT0RFX1JFRlNFTF9NT0RFX0FVVE87XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE5Ni19XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTk4LS8qKlxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODo0MToxNy4zODU1MzAyNTZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzk4ODk1MzE0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFjaGluZyB0aGUgUFRQIEZ1bmN0aW9uYWxpdHkgaW4gdGhlIHpsMzA3M3ggRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBEUExMIGRyaXZlciwgYHpsMzA3M3hgLiBNeSBmaXJzdCB0aG91Z2h0IGlzLCBcIkNhbiBJIHJlYWNoIGl0IHZpYSBzeXNmcz9cIiBJdCByZWdpc3RlcnMgYm90aCBJMkMgYW5kIFNQSSBkcml2ZXJzLCB3aGljaCBpcyBwcm9taXNpbmcuIEkyQyBpcyBlYXN5IGVub3VnaCDigJMgSSBjYW4gaW5zdGFudGlhdGUgYSBkZXZpY2Ugd2l0aCBgZWNobyB6bDMwNzN4IFx1MDAzZSAvc3lzL2J1cy9pMmMvZGV2aWNlcy9pMmMtMC9uZXdfZGV2aWNlYC4gV2l0aCBTUEkgSSBjYW4gdXNlIHN5c2ZzLCBvciBzcGlkZXYsIGJ1dCBhY3R1YWxseSBzeXprYWxsZXIncyBnb3QgbWUgY292ZXJlZCwgYXMgaXQgY2FuIGluamVjdCBJMkMgYW5kIFNQSSBkZXZpY2VzIHRocm91Z2ggaXRzIHBzZXVkby1kZXZpY2VzIG9yIGRldmljZSB0cmVlIG92ZXJsYXlzLlxuXG5BaGEhIEl0J3MgYSBQVFAgY2xvY2ssIHRvby4gVGhhdCBtZWFucyBJIGNhbiBpbnRlcmFjdCB3aXRoIGl0IHRocm91Z2ggYC9kZXYvcHRwWGAgdXNpbmcgYGlvY3RsYHMgbGlrZSBgUFRQX0NMT0NLX0dFVEVYVFRTYCwgYFBUUF9TWVNfT0ZGU0VUYCwgYFBUUF9DTE9DS19BREpUSU1FYCwgYW5kIHNvIG9uLiBUaGlzIHBhdGNoIHNwZWNpZmljYWxseSBhZGRzIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBgemwzMDczeGAgZHJpdmVyLiBJJ3ZlIGdvdCBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIGFkZGVkOiBgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0YCwgYHpsMzA3M3hfY2hhbl90b2RfY3RybGAsIGB6bDMwNzN4X2NoYW5fdG9kX3JlYWRgLCBgemwzMDczeF9jaGFuX3RvZF93cml0ZWAsIGB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdGAsIGB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldGAsIGB6bDMwNzN4X2NoYW5fdGllX3dyaXRlYCwgYHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwYCwgYHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NGAsIGB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NGAsIGB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcGAsIGB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVgLCBgemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lYCwgYHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2VgLCBgemwzMDczeF9kcGxsX3B0cF9nZXRtYXhwaGFzZWAsIGB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyYCwgYW5kIGB6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXJgLlxuXG5SaWdodCwgdGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgaWYgdGhlIGRldmljZSBpcyBpbnN0YW50aWF0ZWQgYW5kIHRoZSBQVFAgY2xvY2sgaXMgcmVnaXN0ZXJlZC4gSXQncyBhbiBJMkMvU1BJIGRldmljZSwgc28gc3l6a2FsbGVyIHNob3VsZCBiZSBhYmxlIHRvIGdldCB0aGlzIGRvbmUgZm9yIG1lLiBOb3csIHRoZSB0cmljayBpcyB0byBmaWd1cmUgb3V0IHdoYXQgdG8gZm9jdXMgb24uXG5cblNvIGxldCdzIGV4dHJhY3QgdGhlIGtleSBmdW5jdGlvbnMgaGVyZTogYHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NGAsIGB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NGAsIGB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcGAsIGB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVgLCBgemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lYCwgYHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2VgLCBgemwzMDczeF9kcGxsX3B0cF9nZXRtYXhwaGFzZWAsIGB6bDMwNzN4X2NoYW5fdG9kX3JlYWRgLCBgemwzMDczeF9jaGFuX3RvZF93cml0ZWAsIGB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdGAsIGB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldGAsIGB6bDMwNzN4X2NoYW5fdGllX3dyaXRlYCwgYHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwYC5cblxuT2theSwgSSBuZWVkIHRvIHNlZSBob3cgdGhleSdyZSBleHBvc2VkLiBXaGlsZSBgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXBgIGlzIHN0YXRpYywgdGhlIHByb21wdCBzYXlzIHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMuIEhvd2V2ZXIsIGl0J3MgYSBzaWduaWZpY2FudCBmdW5jdGlvbiwgYW5kIGl0J3Mgbm90IGlubGluZWQuIEZpbmUsIEknbGwgaW5jbHVkZSBpdC4gQWxzbywgdGhlIGZ1bmN0aW9ucyBmcm9tIGBjaGFuLmNgIHNob3VsZCBiZSBpbmNsdWRlZDogYHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdGAsIGB6bDMwNzN4X2NoYW5fdG9kX3JlYWRgLCBgemwzMDczeF9jaGFuX3RvZF93cml0ZWAsIGB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdGAsIGB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldGAsIGB6bDMwNzN4X2NoYW5fdGllX3dyaXRlYCwgYW5kIGB6bDMwNzN4XG5cbiIsIklucHV0VG9rZW5zIjozNDE5MiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6NDE6MzEuMzc0NDg3NTM5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NzcyODU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBaTDMwNzNYXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZy0yLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWc6Mzpjb25maWcgWkwzMDczWFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctNC1cXHR0cmlzdGF0ZSBcXFwiTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlc1xcXCIgaWYgQ09NUElMRV9URVNUXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTE2LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWc6MTc6Y29uZmlnIFpMMzA3M1hfSTJDXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZy0xOC1cXHR0cmlzdGF0ZSBcXFwiSTJDIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1xcXCJcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctMjgtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZzoyOTpjb25maWcgWkwzMDczWF9TUElcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTMwLVxcdHRyaXN0YXRlIFxcXCJTUEkgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODo0MTozMS40MjEyNjU1NThaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTMzNzQ4MzA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBaTDMwNzNYIEtjb25maWcqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZ2V0IGEgcmVhbGx5IGdvb2QgaGFuZGxlIG9uIGhvdyB0aGUgWkwzMDczWCBpcyBjb25maWd1cmVkLiBTbywgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQncyBwdWxsIHVwIHRoZSBmdWxsIEtjb25maWcgZmlsZS4gSSdtIG5vdCBnb2luZyB0byBza2ltOyBJIG5lZWQgYSBjb21wcmVoZW5zaXZlIG92ZXJ2aWV3LiBJIHdhbnQgdG8gdW5kZXJzdGFuZCAqZXZlcnkqIG9wdGlvbiwgZGVwZW5kZW5jeSwgYW5kIGRlZmF1bHQgc2V0dGluZy4gVGhpcyBpc24ndCBqdXN0IGFib3V0IGZpbmRpbmcgb25lIHNwZWNpZmljIHRoaW5nOyBpdCdzIGFib3V0IGJ1aWxkaW5nIGEgc29saWQsIGhvbGlzdGljIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG1vZHVsZSdzIGNvbmZpZ3VyYWJpbGl0eS4gV2UncmUgZ29pbmcgdG8gdXNlIHRoaXMgYXMgdGhlIGZvdW5kYXRpb24gZm9yIHRoZSBuZXh0IHN0YWdlIG9mIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzA4MywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjQxOjM0LjU1NTAxNzM4M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdFxcbiAgIDM6XFx0Y29uZmlnIFpMMzA3M1hcXG4gICA0OlxcdFxcdHRyaXN0YXRlIFxcXCJNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRSBkZXZpY2VzXFxcIiBpZiBDT01QSUxFX1RFU1RcXG4gICA1OlxcdFxcdGRlcGVuZHMgb24gTkVUIFxcdTAwMjZcXHUwMDI2IFBUUF8xNTg4X0NMT0NLXFxuICAgNjpcXHRcXHRzZWxlY3QgRFBMTFxcbiAgIDc6XFx0XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuICAgODpcXHRcXHRzZWxlY3QgUkVHTUFQXFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIE1pY3JvY2hpcCBBenVyaXRlIGZhbWlseSBEUExML1BUUC9TeW5jRVxcbiAgMTE6XFx0XFx0ICBkZXZpY2VzIHRoYXQgc3VwcG9ydCB1cCB0byA1IGluZGVwZW5kZW50IERQTEwgY2hhbm5lbHMsXFxuICAxMjpcXHRcXHQgIDEwIGlucHV0IHBpbnMgYW5kIHVwIHRvIDIwIG91dHB1dCBwaW5zLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGVcXG4gIDE1OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgemwzMDczeC5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0Y29uZmlnIFpMMzA3M1hfSTJDXFxuICAxODpcXHRcXHR0cmlzdGF0ZSBcXFwiSTJDIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1xcXCJcXG4gIDE5OlxcdFxcdGRlcGVuZHMgb24gSTJDIFxcdTAwMjZcXHUwMDI2IE5FVCBcXHUwMDI2XFx1MDAyNiBQVFBfMTU4OF9DTE9DS1xcbiAgMjA6XFx0XFx0c2VsZWN0IFJFR01BUF9JMkNcXG4gIDIxOlxcdFxcdHNlbGVjdCBaTDMwNzNYXFxuICAyMjpcXHRcXHRoZWxwXFxuICAyMzpcXHRcXHQgIFRoaXMgaXMgSTJDIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0VcXG4gIDI0OlxcdFxcdCAgZGV2aWNlcy5cXG4gIDI1OlxcdFxcbiAgMjY6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcXG4gIDI3OlxcdFxcdCAgYmUgY2FsbGVkIHpsMzA3M3hfaTJjLlxcbiAgMjg6XFx0XFxuICAyOTpcXHRjb25maWcgWkwzMDczWF9TUElcXG4gIDMwOlxcdFxcdHRyaXN0YXRlIFxcXCJTUEkgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzXFxcIlxcbiAgMzE6XFx0XFx0ZGVwZW5kcyBvbiBORVQgXFx1MDAyNlxcdTAwMjYgU1BJIFxcdTAwMjZcXHUwMDI2IFBUUF8xNTg4X0NMT0NLXFxuICAzMjpcXHRcXHRzZWxlY3QgUkVHTUFQX1NQSVxcbiAgMzM6XFx0XFx0c2VsZWN0IFpMMzA3M1hcXG4gIDM0OlxcdFxcdGhlbHBcXG4gIDM1OlxcdFxcdCAgVGhpcyBpcyBTUEkgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRVxcbiAgMzY6XFx0XFx0ICBkZXZpY2VzLlxcbiAgMzc6XFx0XFxuICAzODpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxcbiAgMzk6XFx0XFx0ICBiZSBjYWxsZWQgemwzMDczeF9zcGkuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjQxOjM0LjU1NTA5NTUzM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMzEwMTE5MzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFpMMzA3M1ggRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBoYW5kbGUgb24gdGhpcyBwYXRjaC4gSSdtIHNlZWluZyBjb25maWd1cmF0aW9ucyBmb3IgYFpMMzA3M1hgLCBgWkwzMDczWF9JMkNgLCBhbmQgYFpMMzA3M1hfU1BJYC4gUmlnaHQgYXdheSwgdGhlIGRlcGVuZGVuY2llcyBqdW1wIG91dDogYE5FVGAsIGBQVFBfMTU4OF9DTE9DS2AsIGBJMkNgLCBgU1BJYCwgYERQTExgLCBgTkVUX0RFVkxJTktgLCBhbmQgYFJFR01BUGAuIEJhc2VkIG9uIHRoaXMsIEkgbmVlZCB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIGBaTDMwNzNYX0kyQ2AsIGBaTDMwNzNYX1NQSWAsIHRoZSBQVFAgY2xvY2sgZnVuY3Rpb25hbGl0eSAoYFBUUF8xNTg4X0NMT0NLYCksIHRoZSBEUExMIGZ1bmN0aW9uYWxpdHkgKGBEUExMYCksIGFuZCwgb2YgY291cnNlLCB0aGUgdW5kZXJseWluZyBgSTJDYCBhbmQgYFNQSWAgcHJvdG9jb2xzLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUga2V5IGZ1bmN0aW9ucy4gSSd2ZSBjb21waWxlZCBhIGxpc3QgdGhhdCBJIHdhbnQgdG8ga2VlcCBpbiBtaW5kLCBhbmQgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiBlYWNoOlxuXG4qICAgYHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdGBcbiogICBgemwzMDczeF9jaGFuX3RvZF9yZWFkYFxuKiAgIGB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlYFxuKiAgIGB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdGBcbiogICBgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXRgXG4qICAgYHpsMzA3M3hfY2hhbl90aWVfd3JpdGVgXG4qICAgYHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwYFxuKiAgIGB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjRgXG4qICAgYHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0YFxuKiAgIGB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcGBcbiogICBgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lYFxuKiAgIGB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmVgXG4qICAgYHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2VgXG4qICAgYHpsMzA3M3hfZHBsbF9wdHBfZ2V0bWF4cGhhc2VgXG5cbldhaXQgYSBtaW51dGUsIGB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcGAgaXMgbWFya2VkIGFzIGBzdGF0aWNgLCBidXQgaXQncyBub3QgYW4gQVBJIGVudHJ5cG9pbnQuIFRoYXQgc2FpZCwgaXQncyBjYWxsZWQgYnkgYHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZWAuIEl0J3MgZmluZSB0byBpbmNsdWRlIGl0IGhlcmUsIGFzIGl0J3MgcGFydCBvZiB0aGUgZmxvdy5cblxuVG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZywgbGV0J3MgZG91YmxlIGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciBuZXcgZnVuY3Rpb25zOlxuXG4qICAgYHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXJgXG4qICAgYHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlcmBcblxuQWxyaWdodCwgSSdtIGNvbmZpZGVudCBub3cuIFRoaXMgcGF0Y2ggaXMgKmRlZmluaXRlbHkqIHdvcnRoIGZ1enppbmcuIFRoZSBtYWluIHRha2Vhd2F5IGlzIHRoZSBhZGRpdGlvbiBvZiBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgZHJpdmVyLiBUaGlzIGludHJvZHVjZXMgbmV3IGlvY3RscyB0aGF0IHdpbGwgYmUgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgYC9kZXYvcHRwWGAuIFRoaXMgaXMgd2hlcmUgSSBjYW4gc3RhcnQgbG9va2luZyBmb3IgdnVsbmVyYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzkwOSwiT3V0cHV0VG9rZW5zIjo0MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODo0MTo0NC44NjUyMTkwMzhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzkxMDQ3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWkwzMDczWFwiLFxuICAgIFwiWkwzMDczWF9JMkNcIixcbiAgICBcIlpMMzA3M1hfU1BJXCIsXG4gICAgXCJQVFBfMTU4OF9DTE9DS1wiLFxuICAgIFwiRFBMTFwiLFxuICAgIFwiSTJDXCIsXG4gICAgXCJTUElcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXRcIixcbiAgICBcInpsMzA3M3hfY2hhbl90b2RfcmVhZFwiLFxuICAgIFwiemwzMDczeF9jaGFuX3RvZF93cml0ZVwiLFxuICAgIFwiemwzMDczeF9jaGFuX3RvZF9hZGp1c3RcIixcbiAgICBcInpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0XCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fdGllX3dyaXRlXCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcFwiLFxuICAgIFwiemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0XCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NFwiLFxuICAgIFwiemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXBcIixcbiAgICBcInpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZVwiLFxuICAgIFwiemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lXCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlXCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIgKHpsMzA3M3gpLiBUaGlzIGV4cG9zZXMgbmV3IGZ1bmN0aW9uYWxpdHkgdG8gdXNlcnNwYWNlIHZpYSB0aGUgUFRQIHN1YnN5c3RlbSAoZS5nLiwgL2Rldi9wdHBYIGlvY3RscykuIFRoZSBkcml2ZXIgaXMgYW4gSTJDL1NQSSBkZXZpY2UgZHJpdmVyLCB3aGljaCBjYW4gYmUgaW5zdGFudGlhdGVkIGFuZCBmdXp6ZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaTDMwNzNYXCIsXG4gICAgXCJaTDMwNzNYX0kyQ1wiLFxuICAgIFwiWkwzMDczWF9TUElcIixcbiAgICBcIlBUUF8xNTg4X0NMT0NLXCIsXG4gICAgXCJEUExMXCIsXG4gICAgXCJJMkNcIixcbiAgICBcIlNQSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdFwiLFxuICAgIFwiemwzMDczeF9jaGFuX3RvZF9yZWFkXCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fdG9kX3dyaXRlXCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fdG9kX2FkanVzdFwiLFxuICAgIFwiemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXRcIixcbiAgICBcInpsMzA3M3hfY2hhbl90aWVfd3JpdGVcIixcbiAgICBcInpsMzA3M3hfY2hhbl9waGFzZV9zdGVwXCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjRcIixcbiAgICBcInpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0XCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcFwiLFxuICAgIFwiemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lXCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmVcIixcbiAgICBcInpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2VcIixcbiAgICBcInpsMzA3M3hfZHBsbF9wdHBfZ2V0bWF4cGhhc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciAoemwzMDczeCkuIFRoaXMgZXhwb3NlcyBuZXcgZnVuY3Rpb25hbGl0eSB0byB1c2Vyc3BhY2UgdmlhIHRoZSBQVFAgc3Vic3lzdGVtIChlLmcuLCAvZGV2L3B0cFggaW9jdGxzKS4gVGhlIGRyaXZlciBpcyBhbiBJMkMvU1BJIGRldmljZSBkcml2ZXIsIHdoaWNoIGNhbiBiZSBpbnN0YW50aWF0ZWQgYW5kIGZ1enplZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODo0MTo0NC45NTkxNDAzMzZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxOTM2MzUwNjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6NDE6NDQuOTU5OTk0NzM2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjMxOTM1NDkxMjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlci4gSXQgaW50cm9kdWNlcyBmdW5jdGlvbnMgdG8gcmVhZC93cml0ZSBUaW1lIG9mIERheSAoVG9EKSByZWdpc3RlcnMsIGFkanVzdCBwaGFzZSwgYWRqdXN0IGZyZXF1ZW5jeSwgYW5kIHJlZ2lzdGVycyBhIFBUUCBjbG9jayBkZXZpY2UgdXNpbmcgYHB0cF9jbG9ja19yZWdpc3RlcmAuIEFsbCBuZXcgdmFyaWFibGVzIGFuZCBzdHJ1Y3R1cmVzIChzdWNoIGFzIGBzdHJ1Y3QgdGltZXNwZWM2NGAsIGBzeW50aF9tYXNrYCwgYW5kIGBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm9gKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBvciBwYXNzZWQgdG8gc3RhbmRhcmQga2VybmVsIEFQSXMgdGhhdCBoYW5kbGUgaW5pdGlhbGl6YXRpb24uIFRoZXJlIGFyZSBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGlzIHRoZXJlIGFueSBjb250cm9sIGZsb3cgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgKGxpa2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSkgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDAxMjk4NWQzMTAxYWNkY2EwN2JhOTBiNTVmYTQxZGZlNjZkYWRlN2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAwODo0MTowNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWcgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXG5pbmRleCA1YmJjYTE0MDA1ODEzLi5kYTE3MzFhY2UxNWYwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xuQEAgLTIsNyArMiw3IEBAXG4gXG4gY29uZmlnIFpMMzA3M1hcbiBcdHRyaXN0YXRlIFwiTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlc1wiIGlmIENPTVBJTEVfVEVTVFxuLVx0ZGVwZW5kcyBvbiBORVRcbitcdGRlcGVuZHMgb24gTkVUIFx1MDAyNlx1MDAyNiBQVFBfMTU4OF9DTE9DS1xuIFx0c2VsZWN0IERQTExcbiBcdHNlbGVjdCBORVRfREVWTElOS1xuIFx0c2VsZWN0IFJFR01BUFxuQEAgLTE2LDcgKzE2LDcgQEAgY29uZmlnIFpMMzA3M1hcbiBcbiBjb25maWcgWkwzMDczWF9JMkNcbiBcdHRyaXN0YXRlIFwiSTJDIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1wiXG4tXHRkZXBlbmRzIG9uIEkyQyBcdTAwMjZcdTAwMjYgTkVUXG4rXHRkZXBlbmRzIG9uIEkyQyBcdTAwMjZcdTAwMjYgTkVUIFx1MDAyNlx1MDAyNiBQVFBfMTU4OF9DTE9DS1xuIFx0c2VsZWN0IFJFR01BUF9JMkNcbiBcdHNlbGVjdCBaTDMwNzNYXG4gXHRoZWxwXG5AQCAtMjgsNyArMjgsNyBAQCBjb25maWcgWkwzMDczWF9JMkNcbiBcbiBjb25maWcgWkwzMDczWF9TUElcbiBcdHRyaXN0YXRlIFwiU1BJIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1wiXG4tXHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgU1BJXG4rXHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgU1BJIFx1MDAyNlx1MDAyNiBQVFBfMTU4OF9DTE9DS1xuIFx0c2VsZWN0IFJFR01BUF9TUElcbiBcdHNlbGVjdCBaTDMwNzNYXG4gXHRoZWxwXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXG5pbmRleCA0ZWMyY2Y1M2RhZDQ2Li5iYTRkMzAzZDQxYjQ3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNcbkBAIC0zLDYgKzMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZfcHJpbnRrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiBcbkBAIC0xNjIsOCArMTYzLDggQEAgaW50IHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpXG4gICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3hfZGV2IHN0cnVjdHVyZVxuICAqIEBpbmRleDogRFBMTCBjaGFubmVsIGluZGV4IHRvIGZldGNoIHN0YXRlIGZvclxuICAqXG4tICogUmVhZHMgdGhlIG1vZGVfcmVmc2VsIHJlZ2lzdGVyIGFuZCByZWZlcmVuY2UgcHJpb3JpdHkgcmVnaXN0ZXJzIGZvclxuLSAqIHRoZSBnaXZlbiBEUExMIGNoYW5uZWwgYW5kIHN0b3JlcyB0aGUgcmF3IHZhbHVlcyBmb3IgbGF0ZXIgdXNlLlxuKyAqIFJlYWRzIHRoZSBtb2RlX3JlZnNlbCwgc3RhdHVzIGFuZCByZWZlcmVuY2UgcHJpb3JpdHkgcmVnaXN0ZXJzIGZvclxuKyAqIHRoZSBnaXZlbiBEUExMIGNoYW5uZWwgYW5kIHN0b3JlcyB0aGUgdmFsdWVzIGZvciBsYXRlciB1c2UuXG4gICpcbiAgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuICAqL1xuQEAgLTIzNCw2ICsyMzUsMzIyIEBAIGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKnpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldixcbiBcdHJldHVybiBcdTAwMjZ6bGRldi1cdTAwM2VjaGFuW2luZGV4XTtcbiB9XG4gXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0IC0gd2FpdCBmb3IgVG9EIHNlbWFwaG9yZSB0byBjbGVhclxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICpcbisgKiBDaGVja3MgdGhlIFRvRCBjb250cm9sIHJlZ2lzdGVyIHNlbWFwaG9yZSBiaXQuIElmIGNsZWFyLCByZXR1cm5zXG4rICogaW1tZWRpYXRlbHkuIE90aGVyd2lzZSBwb2xscyB1bnRpbCB0aGUgYml0IGlzIGNsZWFyZWQgYnkgdGhlIGRldmljZS5cbisgKlxuKyAqIFJldHVybjpcbisgKiAqIDBcdFx0XHQtIHN1Y2Nlc3NcbisgKiAqICUtRUJVU1lcdFx0LSB0aW1lb3V0XG4rICogKiAlLUVPUE5PVFNVUFBcdC0gdW5rbm93biBjb21tYW5kIGRldGVjdGVkXG4rICogKiBuZWdhdGl2ZVx0XHQtIG90aGVyIGVycm9yXG4rICovXG4raW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcbit7XG4rXHR1bnNpZ25lZCBpbnQgdGltZW91dDtcbitcdHU4IHRvZF9jdHJsO1xuK1x0aW50IHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSwgXHUwMDI2dG9kX2N0cmwpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRpZiAoISh0b2RfY3RybCBcdTAwMjYgWkxfRFBMTF9UT0RfQ1RSTF9TRU0pKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHN3aXRjaCAoRklFTERfR0VUKFpMX0RQTExfVE9EX0NUUkxfQ01ELCB0b2RfY3RybCkpIHtcbitcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFo6XG4rXHRcdHRpbWVvdXQgPSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTO1xuK1x0XHRicmVhaztcbitcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVDpcbitcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFo6XG4rXHRcdHRpbWVvdXQgPSBaTF9QT0xMX1RPRF9SRF9USU1FT1VUX1VTO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSxcbitcdFx0XHRcdCAgWkxfRFBMTF9UT0RfQ1RSTF9TRU0sIHRpbWVvdXQpO1xuK1xuK1x0cmV0dXJuIHJjID09IC1FVElNRURPVVQgPyAtRUJVU1kgOiByYztcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3RvZF9jdHJsIC0gaXNzdWUgVG9EIGNvbW1hbmRcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqIEBjbWQ6IFRvRCBjb21tYW5kIHRvIGV4ZWN1dGVcbisgKlxuKyAqIFdyaXRlcyB0aGUgc2VtYXBob3JlIGFuZCBjb21tYW5kIHRvIGRwbGxfdG9kX2N0cmwuIFRoZSBjYWxsZXIgbXVzdFxuKyAqIGVuc3VyZSB0aGUgZGV2aWNlIGlzIHJlYWR5IChzZW1hcGhvcmUgY2xlYXIpIGJlZm9yZSBjYWxsaW5nIGFuZFxuKyAqIG11c3Qgd2FpdCBmb3IgY29tcGxldGlvbiBpZiBuZWVkZWQuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK3N0YXRpYyBpbnQgemwzMDczeF9jaGFuX3RvZF9jdHJsKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCB1OCBjbWQpXG4re1xuK1x0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSxcbitcdFx0XHRcdFpMX0RQTExfVE9EX0NUUkxfU0VNIHwgY21kKTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3RvZF9yZWFkIC0gcmVhZCBUb0QgcmVnaXN0ZXJzIGFmdGVyIGlzc3VpbmcgYSBjb21tYW5kXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKiBAbmV4dF9oejogaWYgdHJ1ZSwgcmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIejsgb3RoZXJ3aXNlIHJlYWQgY3VycmVudFxuKyAqIEB0czogdGltZXNwZWMgdG8gc3RvcmUgdGhlIHJlc3VsdFxuKyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nXG4rICpcbisgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4raW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgIGJvb2wgbmV4dF9oeiwgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxuK1x0XHRcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpXG4re1xuK1x0dTMyIG5zZWM7XG4rXHR1NjQgc2VjO1xuK1x0dTggY21kO1xuK1x0aW50IHJjO1xuK1xuK1x0aWYgKG5leHRfaHopXG4rXHRcdGNtZCA9IFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaO1xuK1x0ZWxzZVxuK1x0XHRjbWQgPSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UO1xuK1xuK1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbitcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHB0cF9yZWFkX3N5c3RlbV9wcmV0cyhzdHMpO1xuK1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLCBjbWQpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXHRwdHBfcmVhZF9zeXN0ZW1fcG9zdHRzKHN0cyk7XG4rXG4rXHRyYyA9IHpsMzA3M3hfcmVhZF91NDgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9TRUMoY2gpLCBcdTAwMjZzZWMpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHQvKiBIVyBuYW5vc2Vjb25kcyBhcmUgYWx3YXlzIGluIFswLCBOU0VDX1BFUl9TRUMpIHJhbmdlICovXG4rXHRyYyA9IHpsMzA3M3hfcmVhZF91MzIoemxkZXYsIFpMX1JFR19EUExMX1RPRF9OUyhjaCksIFx1MDAyNm5zZWMpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHR0cy1cdTAwM2V0dl9zZWMgPSBzZWM7XG4rXHR0cy1cdTAwM2V0dl9uc2VjID0gbnNlYztcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlIC0gd3JpdGUgVG9EIHJlZ2lzdGVycyBhbmQgdHJpZ2dlciAxIEh6IHVwZGF0ZVxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICogQHRzOiB0aW1lIHRvIHNldFxuKyAqXG4rICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuK1x0XHRcdCAgIHN0cnVjdCB0aW1lc3BlYzY0IHRzKVxuK3tcbitcdGludCByYztcbitcbitcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfU0VDKGNoKSwgdHMudHZfc2VjKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgdHMudHZfbnNlYyk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLFxuK1x0XHRcdFx0ICAgICBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWik7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0IC0gYXRvbWljIFRvRCByZWFkLW1vZGlmeS13cml0ZSB3aXRoIHJvbGxvdmVyIGd1YXJkXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCB0byBhcHBseVxuKyAqXG4rICogUmVhZHMgdGhlIG5leHQtSHogVG9EIGFuZCBjdXJyZW50IFRvRCwgdGhlbiBjaGVja3Mgd2hldGhlciBlbm91Z2ggdGltZVxuKyAqIHJlbWFpbnMgYmVmb3JlIHRoZSBuZXh0IDEgSHogcm9sbG92ZXIgdG8gc2FmZWx5IGNvbXBsZXRlIHRoZSB3cml0ZS5cbisgKiBSZS1yZWFkcyBpZiB0aGUgMSBIeiB0aWNrIGNyb3NzZWQgYmV0d2VlbiB0aGUgdHdvIHJlYWRzIG9yIGlmIGxlc3NcbisgKiB0aGFuIDIwIG1zIHJlbWFpbnMgYmVmb3JlIHRoZSBuZXh0IHJvbGxvdmVyLiBBcHBsaWVzIEBkZWx0YSBhbmQgd3JpdGVzXG4rICogdGhlIHJlc3VsdCBiYWNrLlxuKyAqXG4rICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK2ludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpXG4re1xuKyNkZWZpbmUgWkxfVE9EX01BWF9SRVRSSUVTXHQyMFxuK1x0c3RhdGljIGNvbnN0IGxvbmcgdGhyZXNob2xkX25zID0gMjAgKiBOU0VDX1BFUl9NU0VDO1xuK1x0c3RydWN0IHRpbWVzcGVjNjQgdHNfbmV4dCwgdHNfY3VyLCBkaWZmO1xuK1x0aW50IHJjLCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgWkxfVE9EX01BWF9SRVRSSUVTOyBpKyspIHtcbitcdFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCB0cnVlLCBcdTAwMjZ0c19uZXh0LCBOVUxMKTtcbitcdFx0aWYgKHJjKVxuK1x0XHRcdHJldHVybiByYztcbitcbitcdFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCBmYWxzZSwgXHUwMDI2dHNfY3VyLCBOVUxMKTtcbitcdFx0aWYgKHJjKVxuK1x0XHRcdHJldHVybiByYztcbitcbitcdFx0LyogRW5zdXJlIHRoZSAxIEh6IHRpY2sgZGlkIG5vdCBjcm9zcyBiZXR3ZWVuIHRoZSB0d28gcmVhZHNcbitcdFx0ICogYW5kIHRoYXQgZW5vdWdoIG1hcmdpbiByZW1haW5zIHRvIGNvbXBsZXRlIHRoZSB3cml0ZS5cbitcdFx0ICovXG4rXHRcdGRpZmYgPSB0aW1lc3BlYzY0X3N1Yih0c19uZXh0LCB0c19jdXIpO1xuK1x0XHRpZiAoZGlmZi50dl9zZWMgXHUwMDNlIDAgfHxcbitcdFx0ICAgICghZGlmZi50dl9zZWMgXHUwMDI2XHUwMDI2IGRpZmYudHZfbnNlYyBcdTAwM2U9IHRocmVzaG9sZF9ucykpXG4rXHRcdFx0YnJlYWs7XG4rXHR9XG4rXHRpZiAoaSA9PSBaTF9UT0RfTUFYX1JFVFJJRVMpIHtcbitcdFx0ZGV2X3dhcm4oemxkZXYtXHUwMDNlZGV2LFxuK1x0XHRcdCBcIkRQTEwldSBUb0QgYWRqdXN0IGZhaWxlZCB0byBnZXQgc3RhYmxlIG1hcmdpblxcblwiLFxuK1x0XHRcdCBjaCk7XG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXHR9XG4rXG4rXHQvKiBBcHBseSBkZWx0YSB0byB0aGUgbmV4dC1IeiBUb0QgKi9cbitcdHRzX25leHQgPSB0aW1lc3BlYzY0X2FkZCh0c19uZXh0LCBkZWx0YSk7XG4rXHRpZiAoIXRpbWVzcGVjNjRfdmFsaWRfc2V0dG9kKFx1MDAyNnRzX25leHQpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZGV2LCBjaCwgdHNfbmV4dCk7XG4rI3VuZGVmIFpMX1RPRF9NQVhfUkVUUklFU1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCAtIHdyaXRlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgdG8gaGFyZHdhcmVcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqIEBvZmZzZXQ6IGZyZXF1ZW5jeSBvZmZzZXQgaW4gMl4tNDggc3RlcHNcbisgKlxuKyAqIENvbnRleHQ6IENhbGxlciBtdXN0IGhvbGQgdGhlIHBlci1EUExMIGxvY2suXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitpbnQgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBvZmZzZXQpXG4re1xuK1x0aW50IHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfREZfT0ZGU0VUKGNoKSwgb2Zmc2V0KTtcbitcdGlmICghcmMpXG4rXHRcdHpsZGV2LVx1MDAzZWNoYW5bY2hdLmRmX29mZnNldCA9IG9mZnNldDtcbitcbitcdHJldHVybiByYztcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3RpZV93cml0ZSAtIGFkanVzdCBEUExMIHBoYXNlIHVzaW5nIFRJRSB3cml0ZVxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICogQGRlbHRhX25zOiBwaGFzZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzIChtdXN0IGJlIGluICgtMXMsIDFzKSlcbisgKlxuKyAqIENvbnZlcnRzIG5hbm9zZWNvbmRzIHRvIFRJRSB1bml0cyAoMC4wMSBwcykgYW5kIHdyaXRlcyBUSUUgZGF0YVxuKyAqIHRvIHRoZSBzcGVjaWZpZWQgY2hhbm5lbC5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4raW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucylcbit7XG4rXHRzNjQgdGllX2RhdGE7XG4rXHRpbnQgcmM7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkZXYtXHUwMDNldGllX2xvY2spO1xuK1xuK1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRJRSBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbitcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLFxuK1x0XHRcdFx0ICBaTF9EUExMX1RJRV9DVFJMX09QLFxuK1x0XHRcdFx0ICBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0LyogQ29udmVydCBucyB0byBUSUUgdW5pdHMgKDAuMDEgcHMgPSAxMF4tMTQgcykgKi9cbitcdHRpZV9kYXRhID0gZGVsdGFfbnMgKiAxMDAwMDBMTDtcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9EQVRBKGNoKSwgdGllX2RhdGEpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0ssIEJJVChjaCkpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsXG4rXHRcdFx0XHRaTF9EUExMX1RJRV9DVFJMX09QX1dSKTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAgLSBleGVjdXRlIG9uZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb25cbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqIEBvdXRfbWFzazogYml0bWFzayBvZiBvdXRwdXRzIHRvIHN0ZXBcbisgKiBAc3RlcF9jeWNsZXM6IHBoYXNlIHN0ZXAgaW4gc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzXG4rICogQHRvZF9zdGVwOiBhbHNvIHN0ZXAgdGhlIFRvRCBjb3VudGVyXG4rICpcbisgKiBBbGwgbWFza2VkIG91dHB1dHMgbXVzdCB1c2Ugc3ludGhlc2l6ZXJzIG9mIHRoZSBzYW1lIGZyZXF1ZW5jeSBzaW5jZVxuKyAqIHRoZSBzdGVwIHZhbHVlIGlzIGluIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcy5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4raW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuK1x0XHRcdCAgICB1MTYgb3V0X21hc2ssIHMzMiBzdGVwX2N5Y2xlcyxcbitcdFx0XHQgICAgYm9vbCB0b2Rfc3RlcClcbit7XG4rXHR1OCBjdHJsO1xuK1x0aW50IHJjO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZGV2LVx1MDAzZXBoYXNlX3N0ZXBfbG9jayk7XG4rXG4rXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgcGhhc2Ugc3RlcCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbitcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLFxuK1x0XHRcdFx0ICBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QLFxuK1x0XHRcdFx0ICBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VUyk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBLFxuK1x0XHRcdCAgICAgICBzdGVwX2N5Y2xlcyk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLLCBvdXRfbWFzayk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUiwgMSk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdGN0cmwgPSBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfRFBMTCwgY2gpIHxcbitcdCAgICAgICBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AsXG4rXHRcdFx0ICBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1dSSVRFKTtcbitcdGlmICh0b2Rfc3RlcClcbitcdFx0Y3RybCB8PSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX1RPRF9TVEVQO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLCBjdHJsKTtcbit9XG4rXG4gLyoqXG4gICogemwzMDczeF9jaGFuX3N0YXRlX3NldCAtIGNvbW1pdCBEUExMIGNoYW5uZWwgc3RhdGUgY2hhbmdlcyB0byBoYXJkd2FyZVxuICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhcbmluZGV4IGRjOWM2ZDk1YmRlZTcuLjk5YzNiNzA4OGY2NzggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaFxuQEAgLTUsMTAgKzUsMTIgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RkZGVmLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC90aW1lNjQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcInJlZ3MuaFwiXG4gXG4rc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wO1xuIHN0cnVjdCB6bDMwNzN4X2RldjtcbiBcbiAvKipcbkBAIC00Miw2ICs0NCwyMSBAQCBpbnQgemwzMDczeF9jaGFuX3N0YXRlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCxcbiBpbnQgemwzMDczeF9jaGFuX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7XG4gaW50IHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpO1xuIFxuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpO1xuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbitcdFx0XHQgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKTtcbitpbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cyk7XG4raW50IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuK1x0XHRcdCAgICBzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YSk7XG4raW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuK1x0XHRcdCAgICB1MTYgb3V0X21hc2ssIHMzMiBzdGVwX2N5Y2xlcywgYm9vbCB0b2Rfc3RlcCk7XG4rXG4raW50IHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgb2Zmc2V0KTtcbitcbitpbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKTtcbitcbiAvKipcbiAgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X2dldCAtIGdldCBjYWNoZWQgZGZfb2Zmc2V0IHZzIHRyYWNrZWQgcmVmZXJlbmNlXG4gICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuQEAgLTIwMCw2ICsyMTcsMjEgQEAgc3RhdGljIGlubGluZSBib29sIHpsMzA3M3hfY2hhbl9tb2RlX2lzX3JlZmxvY2soY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcbiBcdHJldHVybiB6bDMwNzN4X2NoYW5fbW9kZV9nZXQoY2hhbikgPT0gWkxfRFBMTF9NT0RFX1JFRlNFTF9NT0RFX1JFRkxPQ0s7XG4gfVxuIFxuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZSAtIGNoZWNrIGlmIGNoYW5uZWwgbW9kZSBzdXBwb3J0cyBUSUUgd3JpdGVcbisgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG4rICpcbisgKiBUSUUgd3JpdGUgaXMgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMgcmVnYXJkbGVzcyBvZiBsb2NrIHN0YXRlLlxuKyAqXG4rICogUmV0dXJuOiB0cnVlIGlmIFRJRSB3cml0ZSBpcyBzdXBwb3J0ZWQsIGZhbHNlIG90aGVyd2lzZVxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbFxuK3psMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxuK3tcbitcdHJldHVybiB6bDMwNzN4X2NoYW5fbW9kZV9pc19hdXRvKGNoYW4pIHx8XG4rXHRcdHpsMzA3M3hfY2hhbl9tb2RlX2lzX3JlZmxvY2soY2hhbik7XG4rfVxuK1xuIC8qKlxuICAqIHpsMzA3M3hfY2hhbl9pc19ob19yZWFkeSAtIGNoZWNrIGlmIGhvbGRvdmVyIGlzIHJlYWR5XG4gICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1xuaW5kZXggNWIyZDc3ZjJjMjI4OC4uMjMwZGYwOGUyN2NkMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1xuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jXG5AQCAtMzIyLDcgKzMyMiw3IEBAIGludCB6bDMwNzN4X3dyaXRlX3U0OChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLCB1NjQgdmFsKVxuIGludCB6bDMwNzN4X3BvbGxfemVyb191OChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLFxuIFx0XHRcdCB1OCBtYXNrLCB1bnNpZ25lZCBpbnQgdGltZW91dF91cylcbiB7XG4tI2RlZmluZSBaTF9QT0xMX1NMRUVQX1VTIDEwXG4rXHR1bnNpZ25lZCBpbnQgc2xlZXBfdXMgPSB0aW1lb3V0X3VzIC8gNTA7XG4gXHR1bnNpZ25lZCBpbnQgdmFsO1xuIFxuIFx0LyogQ2hlY2sgdGhlIHJlZ2lzdGVyIGlzIDhiaXQgKi9cbkBAIC0zMzYsNyArMzM2LDcgQEAgaW50IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsXG4gXHRyZWcgPSBaTF9SRUdfQUREUihyZWcpICsgWkxfUkFOR0VfT0ZGU0VUO1xuIFxuIFx0cmV0dXJuIHJlZ21hcF9yZWFkX3BvbGxfdGltZW91dCh6bGRldi1cdTAwM2VyZWdtYXAsIHJlZywgdmFsLCAhKHZhbCBcdTAwMjYgbWFzayksXG4tXHRcdFx0XHRcdFpMX1BPTExfU0xFRVBfVVMsIHRpbWVvdXRfdXMpO1xuK1x0XHRcdFx0XHRzbGVlcF91cywgdGltZW91dF91cyk7XG4gfVxuIFxuIGludCB6bDMwNzN4X21iX29wKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCBvcF9yZWcsIHU4IG9wX3ZhbCxcbkBAIC01MTEsNiArNTExLDExIEBAIHpsMzA3M3hfZGV2X3N0YXRlX2ZldGNoKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXG4gXHRpbnQgcmM7XG4gXHR1OCBpO1xuIFxuK1x0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1NURVBfVElNRV9NQVNLLFxuK1x0XHRcdCAgICAgIFx1MDAyNnpsZGV2LVx1MDAzZW91dF9zdGVwX3RpbWVfbWFzayk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFpMMzA3M1hfTlVNX1JFRlM7IGkrKykge1xuIFx0XHRyYyA9IHpsMzA3M3hfcmVmX3N0YXRlX2ZldGNoKHpsZGV2LCBpKTtcbiBcdFx0aWYgKHJjKSB7XG5AQCAtMTAzNCw2ICsxMDM5LDE0IEBAIGludCB6bDMwNzN4X2Rldl9wcm9iZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxuIFx0ICogYW5kL29yIHBvbGxzIGFyZSByZXF1aXJlZCB0byBiZSBkb25lIGF0b21pY2FsbHkuXG4gXHQgKi9cbiBcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVx1MDAzZWRldiwgXHUwMDI2emxkZXYtXHUwMDNlbXVsdGlvcF9sb2NrKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXHUwMDNlZGV2LCByYyxcbitcdFx0XHRcdCAgICAgXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcblwiKTtcbitcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVx1MDAzZWRldiwgXHUwMDI2emxkZXYtXHUwMDNlcGhhc2Vfc3RlcF9sb2NrKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXHUwMDNlZGV2LCByYyxcbitcdFx0XHRcdCAgICAgXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcblwiKTtcbitcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVx1MDAzZWRldiwgXHUwMDI2emxkZXYtXHUwMDNldGllX2xvY2spO1xuIFx0aWYgKHJjKVxuIFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIHJjLFxuIFx0XHRcdFx0ICAgICBcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxuXCIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaFxuaW5kZXggNzhkYzIwOGYzZWVhMi4uNjdjMTBlMjU5NTExOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oXG5AQCAtMjYsNiArMjYsMTAgQEAgc3RydWN0IHpsMzA3M3hfZHBsbDtcbiAjZGVmaW5lIFpMX1BPTExfSFdSRUdfVElNRU9VVF9VU1x0KDUwICogVVNFQ19QRVJfTVNFQylcbiAjZGVmaW5lIFpMX1BPTExfTUJfVElNRU9VVF9VU1x0XHQoMzAgKiBVU0VDX1BFUl9NU0VDKVxuICNkZWZpbmUgWkxfUE9MTF9QSEFTRV9FUlJfVElNRU9VVF9VU1x0KDUwICogVVNFQ19QRVJfTVNFQylcbisjZGVmaW5lIFpMX1BPTExfUEhBU0VfU1RFUF9USU1FT1VUX1VTXHQoMzAwMCAqIFVTRUNfUEVSX01TRUMpXG4rI2RlZmluZSBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTXHQoMTAwMCAqIFVTRUNfUEVSX01TRUMpXG4rI2RlZmluZSBaTF9QT0xMX1RPRF9SRF9USU1FT1VUX1VTXHQoMzAgKiBVU0VDX1BFUl9NU0VDKVxuKyNkZWZpbmUgWkxfUE9MTF9UT0RfV1JfVElNRU9VVF9VU1x0KDEwMDAgKiBVU0VDX1BFUl9NU0VDKVxuIFxuIGVudW0gemwzMDczeF9mbGFncyB7XG4gXHRaTDMwNzNYX0ZMQUdfUkVGX1BIQVNFX0NPTVBfMzJfQklULFxuQEAgLTU1LDYgKzU5LDggQEAgc3RydWN0IHpsMzA3M3hfY2hpcF9pbmZvIHtcbiAgKiBAcmVnbWFwOiByZWdtYXAgdG8gYWNjZXNzIGRldmljZSByZWdpc3RlcnNcbiAgKiBAaW5mbzogZGV0ZWN0ZWQgY2hpcCBpbmZvXG4gICogQG11bHRpb3BfbG9jazogdG8gc2VyaWFsaXplIG11bHRpcGxlIHJlZ2lzdGVyIG9wZXJhdGlvbnNcbisgKiBAdGllX2xvY2s6IHRvIHNlcmlhbGl6ZSBUSUUgd3JpdGUgb3BlcmF0aW9uc1xuKyAqIEBwaGFzZV9zdGVwX2xvY2s6IHRvIHNlcmlhbGl6ZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb25zXG4gICogQHJlZjogYXJyYXkgb2YgaW5wdXQgcmVmZXJlbmNlcycgaW52YXJpYW50c1xuICAqIEBvdXQ6IGFycmF5IG9mIG91dHMnIGludmFyaWFudHNcbiAgKiBAc3ludGg6IGFycmF5IG9mIHN5bnRocycgaW52YXJpYW50c1xuQEAgLTYzLDYgKzY5LDcgQEAgc3RydWN0IHpsMzA3M3hfY2hpcF9pbmZvIHtcbiAgKiBAa3dvcmtlcjogdGhyZWFkIGZvciBwZXJpb2RpYyB3b3JrXG4gICogQHdvcms6IHBlcmlvZGljIHdvcmtcbiAgKiBAY2xvY2tfaWQ6IGNsb2NrIGlkIG9mIHRoZSBkZXZpY2VcbisgKiBAb3V0X3N0ZXBfdGltZV9tYXNrOiBvdXRwdXQgc3RlcC10aW1lIG1hc2sgKGRldmljZS1nbG9iYWwpXG4gICogQHBoYXNlX2F2Z19mYWN0b3I6IHBoYXNlIG9mZnNldCBtZWFzdXJlbWVudCBhdmVyYWdpbmcgZmFjdG9yXG4gICogQGZyZXFfbW9uaXRvcjogaXMgZnJlcXVlbmN5IG1vbml0b3IgZW5hYmxlZFxuICAqL1xuQEAgLTcxLDYgKzc4LDggQEAgc3RydWN0IHpsMzA3M3hfZGV2IHtcbiBcdHN0cnVjdCByZWdtYXBcdFx0XHQqcmVnbWFwO1xuIFx0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hpcF9pbmZvXHQqaW5mbztcbiBcdHN0cnVjdCBtdXRleFx0XHRcdG11bHRpb3BfbG9jaztcbitcdHN0cnVjdCBtdXRleFx0XHRcdHRpZV9sb2NrO1xuK1x0c3RydWN0IG11dGV4XHRcdFx0cGhhc2Vfc3RlcF9sb2NrO1xuIFxuIFx0LyogSW52YXJpYW50cyAqL1xuIFx0c3RydWN0IHpsMzA3M3hfcmVmXHRyZWZbWkwzMDczWF9OVU1fUkVGU107XG5AQCAtODcsNiArOTYsNyBAQCBzdHJ1Y3QgemwzMDczeF9kZXYge1xuIFxuIFx0LyogUGVyLWNoaXAgcGFyYW1ldGVycyAqL1xuIFx0dTY0XHRcdFx0Y2xvY2tfaWQ7XG4rXHR1MTZcdFx0XHRvdXRfc3RlcF90aW1lX21hc2s7XG4gXHR1OFx0XHRcdHBoYXNlX2F2Z19mYWN0b3I7XG4gXHRib29sXHRcdFx0ZnJlcV9tb25pdG9yO1xuIH07XG5AQCAtMzA4LDYgKzMxOCwxOSBAQCB6bDMwNzN4X2Rldl9vdXRfaXNfZW5hYmxlZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleClcbiBcdHJldHVybiB6bDMwNzN4X3N5bnRoX2lzX2VuYWJsZWQoc3ludGgpIFx1MDAyNlx1MDAyNiB6bDMwNzN4X291dF9pc19lbmFibGVkKG91dCk7XG4gfVxuIFxuKy8qKlxuKyAqIHpsMzA3M3hfZGV2X291dF9pc19zdGVwcGVkIC0gY2hlY2sgaWYgb3V0cHV0IGlzIGluIHN0ZXAtdGltZSBtYXNrXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGluZGV4OiBvdXRwdXQgaW5kZXhcbisgKlxuKyAqIFJldHVybjogdHJ1ZSBpZiBvdXRwdXQgaXMgYWZmZWN0ZWQgYnkgc3RlcC10aW1lIG9wZXJhdGlvbnNcbisgKi9cbitzdGF0aWMgaW5saW5lIGJvb2xcbit6bDMwNzN4X2Rldl9vdXRfaXNfc3RlcHBlZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleClcbit7XG4rXHRyZXR1cm4gISEoemxkZXYtXHUwMDNlb3V0X3N0ZXBfdGltZV9tYXNrIFx1MDAyNiBCSVQoaW5kZXgpKTtcbit9XG4rXG4gLyoqXG4gICogemwzMDczeF9kZXZfb3V0X2RwbGxfZ2V0IC0gZ2V0IERQTEwgSUQgdGhlIG91dHB1dCBpcyBkcml2ZW4gYnlcbiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcbmluZGV4IDgzYmQzMDI3ZGJhYTEuLmYyZTEzNzQ3NWI0MGYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuY1xuQEAgLTIsNiArMiw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2J1Zy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29udGFpbmVyX29mLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZfcHJpbnRrLmhcdTAwM2VcbkBAIC0xMyw2ICsxNCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3ByaW50Zi5oXHUwMDNlXG4gXG5AQCAtMjMxMyw0NSArMjMxNSwzODQgQEAgemwzMDczeF9kcGxsX2luaXRfZmluZV9waGFzZV9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcbiBcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfU1lOVEhfUEhBU0VfU0hJRlRfQ1RSTCwgMHgwMSk7XG4gfVxuIFxuKy8qIE1heGltdW0gZnJlcXVlbmN5IGFkanVzdG1lbnQ6ICstMSUgb2Ygbm9taW5hbCBpbiBwcGIgKi9cbisjZGVmaW5lIFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESlx0MTAwMDAwMDBcbitcbiAvKipcbi0gKiB6bDMwNzN4X2RwbGxfYWxsb2MgLSBhbGxvY2F0ZSBEUExMIGRldmljZVxuLSAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuLSAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlclxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCAtIHJlYWQgY3VycmVudCB0aW1lIGZyb20gVG9EIGNvdW50ZXJzXG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4rICogQHRzOiB0aW1lc3BlYyB0byBzdG9yZSBjdXJyZW50IHRpbWVcbisgKiBAc3RzOiBvcHRpb25hbCBzeXN0ZW0gdGltZXN0YW1wIHBhaXIgZm9yIGNyb3NzLXRpbWVzdGFtcGluZ1xuICAqXG4tICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cylcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRwbGwtXHUwMDNlZGV2LCB6bGRwbGwtXHUwMDNlaWQsIGZhbHNlLCB0cywgc3RzKTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQgLSBzZXQgVG9EIGNvdW50ZXJzIHRvIGdpdmVuIHRpbWVcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbisgKiBAdHM6IHRpbWVzcGVjIHdpdGggdGltZSB0byBzZXRcbiAgKlxuLSAqIFJldHVybjogcG9pbnRlciB0byBEUExMIGRldmljZSBvbiBzdWNjZXNzLCBlcnJvciBwb2ludGVyIG9uIGVycm9yXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiAgKi9cbi1zdHJ1Y3QgemwzMDczeF9kcGxsICpcbi16bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXG4rXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpXG4ge1xuLVx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsO1xuK1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXG4rXHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuIFxuLVx0emxkcGxsID0ga3phbGxvY19vYmooKnpsZHBsbCk7XG4tXHRpZiAoIXpsZHBsbClcbi1cdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuIFxuLVx0emxkcGxsLVx1MDAzZWRldiA9IHpsZGV2O1xuLVx0emxkcGxsLVx1MDAzZWlkID0gY2g7XG4tXHRtdXRleF9pbml0KFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbi1cdElOSVRfTElTVF9IRUFEKFx1MDAyNnpsZHBsbC1cdTAwM2VwaW5zKTtcbitcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCwgKnRzKTtcbit9XG4gXG4tXHRyZXR1cm4gemxkcGxsO1xuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwIC0gYWRqdXN0IHN1Yi1zZWNvbmQgdGltZSB2aWEgcGhhc2Ugc3RlcFxuKyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbFxuKyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzIChtdXN0IGJlIHdpdGhpbiAoLU5TRUNfUEVSX1NFQyxcbisgKiAgICAgICAgIE5TRUNfUEVSX1NFQykpXG4rICpcbisgKiBVc2VzIHRoZSBvdXRwdXQgcGhhc2Ugc3RlcCBtZWNoYW5pc20gd2l0aCB0b2Rfc3RlcD0xIHRvIGFkanVzdCBib3RoXG4rICogdGhlIG91dHB1dCBjbG9jayBwaGFzZSBhbmQgdGhlIFRvRCBjb3VudGVyIHNpbXVsdGFuZW91c2x5LiBUaGlzIGtlZXBzXG4rICogb3V0cHV0cyBhbmQgVG9EIGNvaGVyZW50LiBPbmx5IHZhbGlkIGZvciBOQ08uXG4rICpcbisgKiBPdXRwdXRzIGFyZSBncm91cGVkIGJ5IHN5bnRoZXNpemVyIHNpbmNlIHRoZSBwaGFzZSBzdGVwIHZhbHVlIGlzIGluXG4rICogc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzLiBUaGUgZmlyc3Qgc3ludGggZ3JvdXAgd2l0aCBlbmFibGVkIG91dHB1dHNcbisgKiB1c2VzIHRvZF9zdGVwIHRvIGFkanVzdCBib3RoIG91dHB1dHMgYW5kIHRoZSBUb0QgY291bnRlci4gUmVtYWluaW5nXG4rICogZ3JvdXBzIHN0ZXAgb3V0cHV0cyBvbmx5LiBJZiBubyBzeW50aCBoYXMgZW5hYmxlZCBvdXRwdXRzLCB0aGUgVG9EXG4rICogY291bnRlciBpcyBzdGVwcGVkIGFsb25lIHVzaW5nIGFuIGVtcHR5IG91dHB1dCBtYXNrICh0aGUgRlcgdXNlc1xuKyAqIHRoZSBmaXJzdCBlbmFibGVkIHN5bnRoJ3MgcGVyaW9kIGZvciB0aGUgY29udmVyc2lvbikuXG4rICpcbisgKiBSZXR1cm46XG4rICogKiAlMFx0XHRcdC0gc3VjY2VzcyAob3IgcGFydGlhbCBzdWNjZXNzIGlmIGEgbGF0ZXIgc3ludGggZ3JvdXBcbisgKlx0XHRcdCAgZmFpbGVkIGFmdGVyIHRoZSBmaXJzdCB3YXMgYWxyZWFkeSBzdGVwcGVkKVxuKyAqICogJS1FT1BOT1RTVVBQXHQtIG5vIHN5bnRocyBhdmFpbGFibGVcbisgKiAqIG5lZ2F0aXZlXHRcdC0gZXJyb3JcbisgKi9cbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCxcbitcdFx0XHRcdFx0ICAgICAgIHM2NCBkZWx0YSlcbit7XG4rXHR1MTYgc3ludGhfbWFza1taTDMwNzNYX05VTV9TWU5USFNdID0ge307XG4rXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbitcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X3N5bnRoICpzeW50aDtcbitcdHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW47XG4rXHR1MzIgZmlyc3Rfc3ludGhfZnJlcSA9IDA7XG4rXHRib29sIHRvZF9zdGVwcGVkID0gZmFsc2U7XG4rXHRzMzIgc3RlcF9jeWNsZXM7XG4rXHR1MzIgc3ludGhfZnJlcTtcbitcdGludCByYztcbitcdHU4IGk7XG4rXG4rXHQvKiBCdWlsZCBwZXItc3ludGggb3V0cHV0IG1hc2tzIGZyb20gcmVnaXN0ZXJlZCBvdXRwdXQgcGlucyAqL1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeShwaW4sIFx1MDAyNnpsZHBsbC1cdTAwM2VwaW5zLCBsaXN0KSB7XG4rXHRcdHU4IG91dF9pZCwgc3ludGhfaWQ7XG4rXG4rXHRcdGlmICh6bDMwNzN4X2RwbGxfaXNfaW5wdXRfcGluKHBpbikpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdG91dF9pZCA9IHpsMzA3M3hfb3V0cHV0X3Bpbl9vdXRfZ2V0KHBpbi1cdTAwM2VpZCk7XG4rXG4rXHRcdGlmICghemwzMDczeF9kZXZfb3V0X2lzX3N0ZXBwZWQoemxkZXYsIG91dF9pZCkpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHN5bnRoX2lkID0gemwzMDczeF9kZXZfb3V0X3N5bnRoX2dldCh6bGRldiwgb3V0X2lkKTtcbitcdFx0aWYgKHN5bnRoX2lkIFx1MDAzZT0gWkwzMDczWF9OVU1fU1lOVEhTKSB7XG4rXHRcdFx0ZGV2X3dhcm4oemxkZXYtXHUwMDNlZGV2LCBcIlVuZXhwZWN0ZWQgc3ludGggaWQgZm9yIE9VVCV1XFxuXCIsXG4rXHRcdFx0XHQgb3V0X2lkKTtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1x0XHRzeW50aF9tYXNrW3N5bnRoX2lkXSB8PSBCSVQob3V0X2lkKTtcbitcdH1cbitcbitcdC8qIFByb2Nlc3MgZWFjaCBzeW50aCBncm91cCAqL1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgWkwzMDczWF9OVU1fU1lOVEhTOyBpKyspIHtcbitcdFx0c3ludGggPSB6bDMwNzN4X3N5bnRoX3N0YXRlX2dldCh6bGRldiwgaSk7XG4rXHRcdGlmICghemwzMDczeF9zeW50aF9pc19lbmFibGVkKHN5bnRoKSB8fFxuK1x0XHQgICAgemwzMDczeF9zeW50aF9kcGxsX2dldChzeW50aCkgIT0gemxkcGxsLVx1MDAzZWlkKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRzeW50aF9mcmVxID0gemwzMDczeF9zeW50aF9mcmVxX2dldChzeW50aCk7XG4rXG4rXHRcdC8qIFJlbWVtYmVyIGZpcnN0IGVuYWJsZWQgc3ludGggZnJlcSBmb3IgVG9ELW9ubHkgZmFsbGJhY2sgKi9cbitcdFx0aWYgKCFmaXJzdF9zeW50aF9mcmVxKVxuK1x0XHRcdGZpcnN0X3N5bnRoX2ZyZXEgPSBzeW50aF9mcmVxO1xuK1xuK1x0XHRpZiAoIXN5bnRoX21hc2tbaV0pXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdC8qIFNhZmUgZm9yIHMzMjogbWF4IHN5bnRoIGZyZXEgaXMgNzUwIE1IeiAqL1xuK1x0XHRzdGVwX2N5Y2xlcyA9IGRpdl9zNjQoZGVsdGEgKiBzeW50aF9mcmVxLCBOU0VDX1BFUl9TRUMpO1xuK1xuK1x0XHRyYyA9IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsXG4rXHRcdFx0XHRcdCAgICAgc3ludGhfbWFza1tpXSwgc3RlcF9jeWNsZXMsXG4rXHRcdFx0XHRcdCAgICAgIXRvZF9zdGVwcGVkKTtcbitcdFx0aWYgKHJjKSB7XG4rXHRcdFx0aWYgKHRvZF9zdGVwcGVkKSB7XG4rXHRcdFx0XHRkZXZfd2Fybih6bGRldi1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcdCBcIlBhcnRpYWwgcGhhc2Ugc3RlcCBmYWlsdXJlXFxuXCIpO1xuK1x0XHRcdFx0cmV0dXJuIDA7XG4rXHRcdFx0fVxuK1x0XHRcdHJldHVybiByYztcbitcdFx0fVxuK1x0XHR0b2Rfc3RlcHBlZCA9IHRydWU7XG4rXHR9XG4rXG4rXHRpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdC8qIE5vIGVuYWJsZWQgb3V0cHV0cyBmb3VuZDsgc3RlcCBUb0QgY291bnRlciBvbmx5IHVzaW5nIHRoZVxuK1x0ICogZmlyc3QgZW5hYmxlZCBzeW50aCdzIHBlcmlvZCAoZW1wdHkgb3V0cHV0IG1hc2spLlxuK1x0ICovXG4rXHRpZiAoIXRvZF9zdGVwcGVkKSB7XG4rXHRcdHN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIGZpcnN0X3N5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7XG4rXHRcdHJldHVybiB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCAwLFxuK1x0XHRcdFx0XHQgICAgICAgc3RlcF9jeWNsZXMsIHRydWUpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIC8qKlxuLSAqIHpsMzA3M3hfZHBsbF9mcmVlIC0gZnJlZSBEUExMIGRldmljZVxuLSAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZVxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSAtIGFkanVzdCBQVFAgY2xvY2sgdGltZVxuKyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xuKyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzXG4gICpcbi0gKiBEZWFsbG9jYXRlcyBnaXZlbiBEUExMIGRldmljZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBieSBAemwzMDczeF9kcGxsX2FsbG9jLlxuKyAqIEZvciBOQ08sIGxhcmdlIGRlbHRhcyAoXHUwMDNlPSAxIHNlY29uZCkgYXJlIHNwbGl0IGludG8gYSBUb0RcbisgKiByZWFkLW1vZGlmeS13cml0ZSBmb3IgdGhlIHNlY29uZHMgcGFydCBhbmQgYW4gb3V0cHV0IHBoYXNlIHN0ZXAgZm9yXG4rICogdGhlIHN1Yi1zZWNvbmQgcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgcGhhc2Ugc3RlcCBkaXJlY3RseSxcbisgKiBmYWxsaW5nIGJhY2sgdG8gVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIGlmIHBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlXG4rICogZmFpbHMuIEluIEFVVE8vUkVGTE9DSyBtb2RlcywgbGFyZ2UgZGVsdGFzIGFyZSBzcGxpdCBpbnRvIFRvRFxuKyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciBzZWNvbmRzIGFuZCBUSUUgd3JpdGUgZm9yIHRoZSBzdWItc2Vjb25kXG4rICogcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgVElFIHdyaXRlIGRpcmVjdGx5LlxuKyAqXG4rICogSWYgdGhlIHNlY29uZHMgcGFydCB3YXMgYWxyZWFkeSBjb21taXR0ZWQgd2hlbiB0aGUgc3ViLXNlY29uZFxuKyAqIG1lY2hhbmlzbSBmYWlscywgcmV0dXJucyAwIHRvIHByZXZlbnQgdGhlIFBUUCBzZXJ2byBmcm9tIHJldHJ5aW5nXG4rICogdGhlIGZ1bGwgZGVsdGEgYW5kIGFwcGx5aW5nIHNlY29uZHMgYWdhaW4uXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcyAob3IgcGFydGlhbCBzdWNjZXNzKSwgXHUwMDNjMCBvbiBlcnJvclxuICAqL1xuLXZvaWRcbi16bDMwNzN4X2RwbGxfZnJlZShzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBzNjQgZGVsdGEpXG4ge1xuLVx0V0FSTih6bGRwbGwtXHUwMDNlZHBsbF9kZXYsIFwiRFBMTCBkZXZpY2UgaXMgc3RpbGwgcmVnaXN0ZXJlZFxcblwiKTtcbitcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxuK1x0XHRcdFx0XHRcdCAgIHB0cF9pbmZvKTtcbitcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuK1x0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjtcbitcdGJvb2wgc2VjX2FkanVzdGVkID0gZmFsc2U7XG4rXHRzdHJ1Y3QgdGltZXNwZWM2NCB0cztcbitcdGludCByYztcbiBcbi1cdG11dGV4X2Rlc3Ryb3koXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuLVx0a2ZyZWUoemxkcGxsKTtcbitcdGlmICghZGVsdGEpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbitcbitcdC8qIE1vZGVzIHdpdGhvdXQgcGhhc2Ugc3RlcCBvciBUSUUgdXNlIHBsYWluIFRvRCBhZGp1c3QgKi9cbitcdGNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQpO1xuK1x0aWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikgXHUwMDI2XHUwMDI2XG4rXHQgICAgIXpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjaGFuKSlcbitcdFx0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsXG4rXHRcdFx0XHRcdCAgICAgICBuc190b190aW1lc3BlYzY0KGRlbHRhKSk7XG4rXG4rXHQvKiBTcGxpdCBvZmYgc2Vjb25kcyB2aWEgVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIHNvIHRoZSBzdWItc2Vjb25kXG4rXHQgKiByZW1haW5kZXIgY2FuIGJlIGFwcGxpZWQgdGhyb3VnaCB0aGUgb3V0cHV0LWNvaGVyZW50IG1lY2hhbmlzbVxuK1x0ICogKHBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlKS5cbitcdCAqL1xuK1x0aWYgKGRlbHRhIFx1MDAzZT0gTlNFQ19QRVJfU0VDIHx8IGRlbHRhIFx1MDAzYz0gLU5TRUNfUEVSX1NFQykge1xuK1x0XHRzMzIgcmVtYWluZGVyO1xuK1xuK1x0XHR0cy50dl9zZWMgPSBkaXZfczY0X3JlbShkZWx0YSwgTlNFQ19QRVJfU0VDLCBcdTAwMjZyZW1haW5kZXIpO1xuK1x0XHR0cy50dl9uc2VjID0gMDtcbitcdFx0ZGVsdGEgPSByZW1haW5kZXI7XG4rXG4rXHRcdHJjID0gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCwgdHMpO1xuK1x0XHRpZiAocmMpXG4rXHRcdFx0cmV0dXJuIHJjO1xuK1xuK1x0XHQvKiBObyBzdWItc2Vjb25kIHJlbWFpbmRlciwgZG9uZSAqL1xuK1x0XHRpZiAoIWRlbHRhKVxuK1x0XHRcdHJldHVybiAwO1xuK1xuK1x0XHQvKiBXYWl0IGZvciB0aGUgVG9EIHdyaXRlIHRvIGJlIGFwcGxpZWQgYXQgdGhlIDEgSHogZWRnZVxuK1x0XHQgKiBiZWZvcmUgaXNzdWluZyBwaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSwgc28gdGhlIHBlbmRpbmdcbitcdFx0ICogV1JfTkVYVF8xSFogZG9lcyBub3Qgb3ZlcndyaXRlIHRoZSBzdWItc2Vjb25kIGFkanVzdG1lbnQuXG4rXHRcdCAqL1xuK1x0XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgemxkcGxsLVx1MDAzZWlkKTtcbitcdFx0aWYgKHJjKVxuK1x0XHRcdHJldHVybiByYztcbitcbitcdFx0c2VjX2FkanVzdGVkID0gdHJ1ZTtcbitcdH1cbitcbitcdC8qIEFwcGx5IHN1Yi1zZWNvbmQgZGVsdGEgdmlhIHBoYXNlIHN0ZXAgKE5DTykgb3IgVElFIHdyaXRlICovXG4rXHRpZiAoemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKSB7XG4rXHRcdHJjID0gemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoemxkcGxsLCBkZWx0YSk7XG4rXHRcdGlmICghcmMpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXHR9IGVsc2Uge1xuK1x0XHRyYyA9IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCwgZGVsdGEpO1xuK1x0XHRpZiAoIXJjKVxuK1x0XHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0LyogUGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUgZmFpbGVkLCBmYWxsIGJhY2sgdG8gVG9EIGFkanVzdCAqL1xuK1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLFxuK1x0XHRcdFx0ICAgICBuc190b190aW1lc3BlYzY0KGRlbHRhKSk7XG4rXG4rXHQvKiBJbiB0aGUgdW5saWtlbHkgZXZlbnQgdGhhdCBib3RoIHBoYXNlIHN0ZXAvVElFIHdyaXRlIGFuZCBmYWxsYmFja1xuK1x0ICogVG9EIGFkanVzdCBmYWlsIGFmdGVyIHNlY29uZHMgd2VyZSBhbHJlYWR5IGNvbW1pdHRlZCwgcmV0dXJuXG4rXHQgKiBzdWNjZXNzIHRvIHByZXZlbnQgdGhlIFBUUCBzZXJ2byBmcm9tIHJldHJ5aW5nIHRoZSBmdWxsIGRlbHRhIGFuZFxuK1x0ICogYXBwbHlpbmcgc2Vjb25kcyBhZ2Fpbi4gVGhlIHN1Yi1zZWNvbmQgcmVzaWR1YWwgd2lsbCBzZWxmLWNvcnJlY3RcbitcdCAqIGluIHRoZSBuZXh0IHNlcnZvIGN5Y2xlLlxuK1x0ICovXG4rXHRpZiAocmMgXHUwMDI2XHUwMDI2IHNlY19hZGp1c3RlZCkge1xuK1x0XHRkZXZfd2Fybih6bGRldi1cdTAwM2VkZXYsXG4rXHRcdFx0IFwiU3ViLXNlY29uZCBhZGp1c3RtZW50IGZhaWxlZCBhZnRlciBzZWNvbmRzIGFwcGxpZWRcXG5cIik7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHJjO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUgLSBhZGp1c3QgUFRQIGNsb2NrIGZyZXF1ZW5jeVxuKyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xuKyAqIEBzY2FsZWRfcHBtOiBmcmVxdWVuY3kgYWRqdXN0bWVudCBpbiBzY2FsZWQgcHBtIChwcG0gKiAyXjE2KVxuKyAqXG4rICogT25seSBzdXBwb3J0ZWQgZm9yIE5DTy4gV3JpdGVzIHRoZSBkZWx0YSBmcmVxdWVuY3kgb2Zmc2V0IHJlZ2lzdGVyLlxuKyAqXG4rICogUmV0dXJuOlxuKyAqICogJTBcdFx0XHQtIHN1Y2Nlc3Mgb3IgQHNjYWxlZF9wcG0gaXMgemVybyAobm8tb3ApXG4rICogKiAlLUVPUE5PVFNVUFBcdC0gTkNPIHBpbiBpcyBub3QgY29ubmVjdGVkIGFuZCBAc2NhbGVkX3BwbSBpcyBub24temVyb1xuKyAqICogbmVnYXRpdmVcdFx0LSBvdGhlciBlcnJvclxuKyAqL1xuK3N0YXRpYyBpbnRcbit6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBsb25nIHNjYWxlZF9wcG0pXG4re1xuK1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXG4rXHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuK1x0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjtcbitcdHM2NCBvZmZzZXQ7XG4rXG4rXHQvKiBDb252ZXJ0IHNjYWxlZF9wcG0gdG8gZGZfb2Zmc2V0IGluIDJeLTQ4IHN0ZXBzOlxuK1x0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjMyKSAvIDEwXjZcbitcdCAqXG4rXHQgKiBTaW1wbGlmeSB0byBhdm9pZCBvdmVyZmxvdzpcbitcdCAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogMl4yNikgLyA1XjZcbitcdCAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogNjcxMDg4NjQpIC8gMTU2MjVcbitcdCAqL1xuK1x0b2Zmc2V0ID0gLWRpdl9zNjQoKHM2NClzY2FsZWRfcHBtICogNjcxMDg4NjRMTCwgMTU2MjUpO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbitcbitcdGNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCk7XG4rXHRpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSlcbitcdFx0cmV0dXJuIHNjYWxlZF9wcG0gPyAtRU9QTk9UU1VQUCA6IDA7XG4rXHRpZiAob2Zmc2V0ID09IGNoYW4tXHUwMDNlZGZfb2Zmc2V0KVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCh6bGRwbGwtXHUwMDNlZGV2LCB6bGRwbGwtXHUwMDNlaWQsIG9mZnNldCk7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2UgLSBhZGp1c3QgUFRQIGNsb2NrIHBoYXNlXG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4rICogQGRlbHRhOiBwaGFzZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzXG4rICpcbisgKiBPbmx5IHN1cHBvcnRlZCBpbiBBVVRPIGFuZCBSRUZMT0NLIG1vZGVzLiBVc2VzIFRJRSB3cml0ZSBmb3JcbisgKiBuYW5vc2Vjb25kIHJlc29sdXRpb24gcGhhc2UgYWRqdXN0bWVudC5cbisgKlxuKyAqIFJldHVybjpcbisgKiAqICUwXHRcdFx0LSBzdWNjZXNzIG9yIEBkZWx0YSBpcyB6ZXJvIChuby1vcClcbisgKiAqICUtRU9QTk9UU1VQUFx0LSBtb2RlIGRvZXMgbm90IHN1cHBvcnQgVElFIGFuZCBAZGVsdGEgaXMgbm9uLXplcm9cbisgKiAqIG5lZ2F0aXZlXHRcdC0gb3RoZXIgZXJyb3JcbisgKi9cbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2Uoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBzMzIgZGVsdGEpXG4re1xuK1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXG4rXHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuK1x0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4rXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xuK1xuK1x0aWYgKCFkZWx0YSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuK1x0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCk7XG4rXG4rXHRpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjaGFuKSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCwgZGVsdGEpO1xuK31cbitcbitzdGF0aWMgczMyXG4remwzMDczeF9kcGxsX3B0cF9nZXRtYXhwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8gX19hbHdheXNfdW51c2VkKVxuK3tcbitcdC8qIEhXIGxpbWl0cyBUSUUgd3JpdGUgdG8gKy0xIHNlY29uZC4gUmV0dXJuIHRoZSBjb25zdGFudCBIV1xuK1x0ICogbGltaXQgYW5kIGxldCBhZGpwaGFzZSBoYW5kbGUgbW9kZS1zcGVjaWZpYyBjaGVja3MuXG4rXHQgKi9cbitcdHJldHVybiBOU0VDX1BFUl9TRUMgLSAxO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHB0cF9jbG9ja19pbmZvIHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mbyA9IHtcbitcdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuK1x0Lm1heF9hZGpcdD0gWkwzMDczWF9EUExMX1BUUF9NQVhfQURKLFxuK1x0LmdldHRpbWV4NjRcdD0gemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0LFxuK1x0LnNldHRpbWU2NFx0PSB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCxcbitcdC5hZGp0aW1lXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSxcbitcdC5hZGpmaW5lXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSxcbitcdC5hZGpwaGFzZVx0PSB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlLFxuK1x0LmdldG1heHBoYXNlXHQ9IHpsMzA3M3hfZHBsbF9wdHBfZ2V0bWF4cGhhc2UsXG4rfTtcbitcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBhIERQTEwgY2hhbm5lbFxuKyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byByZWdpc3RlciBQVFAgY2xvY2sgZm9yXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4re1xuK1x0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4rXHRzdHJ1Y3QgcHRwX2Nsb2NrICpwdHBfY2xvY2s7XG4rXG4rXHR6bGRwbGwtXHUwMDNlcHRwX2luZm8gPSB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm87XG4rXHRzbnByaW50Zih6bGRwbGwtXHUwMDNlcHRwX2luZm8ubmFtZSwgc2l6ZW9mKHpsZHBsbC1cdTAwM2VwdHBfaW5mby5uYW1lKSxcbitcdFx0IFwiJXMtZHBsbCV1XCIsIGRldl9uYW1lKHpsZGV2LVx1MDAzZWRldiksIHpsZHBsbC1cdTAwM2VpZCk7XG4rXG4rXHRwdHBfY2xvY2sgPSBwdHBfY2xvY2tfcmVnaXN0ZXIoXHUwMDI2emxkcGxsLVx1MDAzZXB0cF9pbmZvLCB6bGRldi1cdTAwM2VkZXYpO1xuK1x0aWYgKElTX0VSUihwdHBfY2xvY2spKSB7XG4rXHRcdGRldl9lcnIoemxkZXYtXHUwMDNlZGV2LCBcIkZhaWxlZCB0byByZWdpc3RlciBQVFAgY2xvY2sgZm9yIERQTEwldVxcblwiLFxuK1x0XHRcdHpsZHBsbC1cdTAwM2VpZCk7XG4rXHRcdHJldHVybiBQVFJfRVJSKHB0cF9jbG9jayk7XG4rXHR9XG4rXG4rXHR6bGRwbGwtXHUwMDNlcHRwX2Nsb2NrID0gcHRwX2Nsb2NrO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlciAtIHVucmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBhIERQTEwgY2hhbm5lbFxuKyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byB1bnJlZ2lzdGVyIFBUUCBjbG9jayBmb3JcbisgKi9cbitzdGF0aWMgdm9pZCB6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuK3tcbitcdGlmICghSVNfRVJSX09SX05VTEwoemxkcGxsLVx1MDAzZXB0cF9jbG9jaykpIHtcbitcdFx0cHRwX2Nsb2NrX3VucmVnaXN0ZXIoemxkcGxsLVx1MDAzZXB0cF9jbG9jayk7XG4rXHRcdHpsZHBsbC1cdTAwM2VwdHBfY2xvY2sgPSBOVUxMO1xuK1x0fVxuIH1cbiBcbiAvKipcbkBAIC0yNDM2LDYgKzI3NzcsNDcgQEAgemwzMDczeF9kcGxsX3JlZl9zeW5jX3BhaXJzX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiBcdHJldHVybiAwO1xuIH1cbiBcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfYWxsb2MgLSBhbGxvY2F0ZSBEUExMIGRldmljZVxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlclxuKyAqXG4rICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLlxuKyAqXG4rICogUmV0dXJuOiBwb2ludGVyIHRvIERQTEwgZGV2aWNlIG9uIHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgb24gZXJyb3JcbisgKi9cbitzdHJ1Y3QgemwzMDczeF9kcGxsICpcbit6bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpXG4re1xuK1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsO1xuK1xuK1x0emxkcGxsID0ga3phbGxvY19vYmooKnpsZHBsbCk7XG4rXHRpZiAoIXpsZHBsbClcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXG4rXHR6bGRwbGwtXHUwMDNlZGV2ID0gemxkZXY7XG4rXHR6bGRwbGwtXHUwMDNlaWQgPSBjaDtcbitcdG11dGV4X2luaXQoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2emxkcGxsLVx1MDAzZXBpbnMpO1xuK1xuK1x0cmV0dXJuIHpsZHBsbDtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlXG4rICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXG4rICpcbisgKiBEZWFsbG9jYXRlcyBnaXZlbiBEUExMIGRldmljZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBieSBAemwzMDczeF9kcGxsX2FsbG9jLlxuKyAqL1xuK3ZvaWRcbit6bDMwNzN4X2RwbGxfZnJlZShzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4re1xuK1x0V0FSTih6bGRwbGwtXHUwMDNlZHBsbF9kZXYsIFwiRFBMTCBkZXZpY2UgaXMgc3RpbGwgcmVnaXN0ZXJlZFxcblwiKTtcbitcbitcdG11dGV4X2Rlc3Ryb3koXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1x0a2ZyZWUoemxkcGxsKTtcbit9XG4rXG4gLyoqXG4gICogemwzMDczeF9kcGxsX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgRFBMTCBkZXZpY2UgYW5kIGFsbCBpdHMgcGluc1xuICAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZVxuQEAgLTI0NjYsNiArMjg0OCwxMyBAQCB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIFx0XHRyZXR1cm4gcmM7XG4gXHR9XG4gXG4rXHRyYyA9IHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIoemxkcGxsKTtcbitcdGlmIChyYykge1xuK1x0XHR6bDMwNzN4X2RwbGxfcGluc191bnJlZ2lzdGVyKHpsZHBsbCk7XG4rXHRcdHpsMzA3M3hfZHBsbF9kZXZpY2VfdW5yZWdpc3Rlcih6bGRwbGwpO1xuK1x0XHRyZXR1cm4gcmM7XG4rXHR9XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMjQ3OSw3ICsyODY4LDcgQEAgemwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiB2b2lkXG4gemwzMDczeF9kcGxsX3VucmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIHtcbi1cdC8qIFVucmVnaXN0ZXIgYWxsIHBpbnMgYW5kIGRwbGwgKi9cbitcdHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3Rlcih6bGRwbGwpO1xuIFx0emwzMDczeF9kcGxsX3BpbnNfdW5yZWdpc3Rlcih6bGRwbGwpO1xuIFx0emwzMDczeF9kcGxsX2RldmljZV91bnJlZ2lzdGVyKHpsZHBsbCk7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaFxuaW5kZXggZmFlYmM0MDJiYTFiNy4uOTkzMjIxZGM2MzI0OSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXG5AQCAtNSw2ICs1LDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kcGxsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImNvcmUuaFwiXG4gXG5AQCAtMjIsNiArMjMsOCBAQFxuICAqIEB0eXBlOiBEUExMIHR5cGUgKFBQUyBvciBFRUMpXG4gICogQGxvY2tfc3RhdHVzOiBsYXN0IHNhdmVkIERQTEwgbG9jayBzdGF0dXNcbiAgKiBAcGluczogbGlzdCBvZiBwaW5zXG4rICogQHB0cF9pbmZvOiBQVFAgY2xvY2sgaW5mb1xuKyAqIEBwdHBfY2xvY2s6IHJlZ2lzdGVyZWQgUFRQIGNsb2NrIChvciBOVUxMKVxuICAqL1xuIHN0cnVjdCB6bDMwNzN4X2RwbGwge1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0XHRsaXN0O1xuQEAgLTM2LDYgKzM5LDggQEAgc3RydWN0IHpsMzA3M3hfZHBsbCB7XG4gXHRlbnVtIGRwbGxfdHlwZVx0XHRcdHR5cGU7XG4gXHRlbnVtIGRwbGxfbG9ja19zdGF0dXNcdFx0bG9ja19zdGF0dXM7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRcdHBpbnM7XG4rXHRzdHJ1Y3QgcHRwX2Nsb2NrX2luZm9cdFx0cHRwX2luZm87XG4rXHRzdHJ1Y3QgcHRwX2Nsb2NrXHRcdCpwdHBfY2xvY2s7XG4gfTtcbiBcbiBzdHJ1Y3QgemwzMDczeF9kcGxsICp6bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaFxuaW5kZXggYjcwZWFkN2Q0NDk1Yi4uZjNhNWUxMjE1YWEzNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXG5AQCAtMTc5LDYgKzE3OSwyMCBAQFxuICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRFx0XHRcdEdFTk1BU0soMiwgMClcbiAjZGVmaW5lIFpMX0RQTExfREZfUkVBRF9DTURfQUNDX0lcdFx0NFxuIFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0NUUkxcdFx0XHRaTF9SRUcoNSwgMHgzMCwgMSlcbisjZGVmaW5lIFpMX0RQTExfVElFX0NUUkxfT1BcdFx0XHRHRU5NQVNLKDIsIDApXG4rI2RlZmluZSBaTF9EUExMX1RJRV9DVFJMX09QX1dSXHRcdFx0NFxuK1xuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0NUUkxfTUFTS1x0XHRaTF9SRUcoNSwgMHgzMSwgMSlcbitcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9DVFJMKF9pZHgpXHRcdFx0XHRcdFxcXG4rXHRaTF9SRUdfSURYKF9pZHgsIDUsIDB4MzgsIDEsIFpMMzA3M1hfTUFYX0NIQU5ORUxTLCAxKVxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9TRU1cdFx0XHRCSVQoNClcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EXHRcdFx0R0VOTUFTSygzLCAwKVxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFpcdDFcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX0NVUlJFTlRcdFx0OFxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFpcdDlcbitcbiAjZGVmaW5lIFpMX1JFR19EUExMX01FQVNfQ1RSTFx0XHRcdFpMX1JFRyg1LCAweDUwLCAxKVxuICNkZWZpbmUgWkxfRFBMTF9NRUFTX0NUUkxfRU5cdFx0XHRCSVQoMClcbiAjZGVmaW5lIFpMX0RQTExfTUVBU19DVFJMX0FWR19GQUNUT1JcdFx0R0VOTUFTSyg3LCA0KVxuQEAgLTE5Myw2ICsyMDcsOSBAQFxuIFxuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICogUmVnaXN0ZXIgUGFnZXMgNi03LCBEUExMIERhdGFcbisgKlxuKyAqIFBlci1jaGFubmVsIHJlZ2lzdGVycyB3aXRoIHN0cmlkZSAweDIwLiBDaGFubmVscyAwLTMgcmVzaWRlIG9uIHBhZ2UgNixcbisgKiBjaGFubmVsIDQgb24gcGFnZSA3LlxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuIFxuICNkZWZpbmUgWkxfUkVHX0RQTExfREZfT0ZGU0VUXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG5AQCAtMjAyLDYgKzIxOSwyNCBAQFxuIFx0KChfaWR4KSBcdTAwM2MgNCA/IFpMX1JFR19EUExMX0RGX09GRlNFVF8wMyhfaWR4KSA6IFpMX1JFR19EUExMX0RGX09GRlNFVF80KVxuICNkZWZpbmUgWkxfRFBMTF9ERl9PRkZTRVRfVU5LTk9XTlx0UzY0X01JTlxuIFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEFfMDMoX2lkeClcdFx0XHRcdFx0XFxcbitcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgwQywgNiwgNCwgMHgyMClcbisjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBXzRcdFx0XHRaTF9SRUcoNywgMHgwQywgNilcbisjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBKF9pZHgpXHRcdFx0XHRcdFxcXG4rXHQoKF9pZHgpIFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfVElFX0RBVEFfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9USUVfREFUQV80KVxuK1xuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQ18wMyhfaWR4KVx0XHRcdFx0XHRcXFxuK1x0WkxfUkVHX0lEWChfaWR4LCA2LCAweDEyLCA2LCA0LCAweDIwKVxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQ180XHRcdFx0WkxfUkVHKDcsIDB4MTIsIDYpXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDKF9pZHgpXHRcdFx0XHRcdFxcXG4rXHQoKF9pZHgpIFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfVE9EX1NFQ18wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RPRF9TRUNfNClcbitcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU18wMyhfaWR4KVx0XHRcdFx0XHRcXFxuK1x0WkxfUkVHX0lEWChfaWR4LCA2LCAweDE4LCA0LCA0LCAweDIwKVxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TXzRcdFx0XHRaTF9SRUcoNywgMHgxOCwgNClcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OUyhfaWR4KVx0XHRcdFx0XHRcXFxuK1x0KChfaWR4KSBcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RPRF9OU18wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RPRF9OU180KVxuK1xuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAqIFJlZ2lzdGVyIFBhZ2UgOSwgU3ludGggYW5kIE91dHB1dFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbkBAIC0yMjEsNiArMjU2LDIzIEBAXG4gI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9FTlx0XHRcdEJJVCgwKVxuICNkZWZpbmUgWkxfT1VUUFVUX0NUUkxfU1lOVEhfU0VMXHRcdEdFTk1BU0soNiwgNClcbiBcbisjZGVmaW5lIFpMX1JFR19PVVRQVVRfU1RFUF9USU1FX01BU0tcdFx0WkxfUkVHKDksIDB4MzYsIDIpXG4rXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTFx0XHRaTF9SRUcoOSwgMHgzOCwgMSlcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfRFBMTFx0XHRHRU5NQVNLKDYsIDQpXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX1RPRF9TVEVQXHRCSVQoMylcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BcdFx0R0VOTUFTSygxLCAwKVxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9OT05FXHQwXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1JFU0VUXHQxXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1JFQURcdDJcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfV1JJVEVcdDNcbitcbisjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9OVU1CRVJcdFx0WkxfUkVHKDksIDB4MzksIDEpXG4rXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTUFTS1x0XHRaTF9SRUcoOSwgMHgzYSwgMilcbitcbisjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBXHRcdFpMX1JFRyg5LCAweDNjLCA0KVxuK1xuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICogUmVnaXN0ZXIgUGFnZSAxMCwgUmVmIE1haWxib3hcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjQxOjQ0Ljk1OTk5NjAzNloiLCJTZXEiOjEzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTkzNTQ2MjcxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQVFAgQ2xvY2sgU3VwcG9ydCBpbiBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIERyaXZlciBSZXZpZXcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggYWRkcyBQcmVjaXNpb24gVGltZSBQcm90b2NvbCAoUFRQKSBjbG9jayBmdW5jdGlvbmFsaXR5IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciwgZXNzZW50aWFsbHkgZW5hYmxpbmcgbW9yZSBwcmVjaXNlIHRpbWUgc3luY2hyb25pemF0aW9uIGNhcGFiaWxpdGllcy4gTXkgaW5pdGlhbCBzY2FuIGZvY3VzZWQgb24gaWRlbnRpZnlpbmcgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcywgYSBjb21tb24gYXJlYSBmb3Igc2VjdXJpdHkgZmxhd3MuXG5cbkZpcnN0LCBJIGV4YW1pbmVkIHRoZSBgcHRwX2Nsb2NrX2luZm9gIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbi4gSXQgbG9va3Mgc291bmQ7IHRoZSBjcml0aWNhbCBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIGFuZCB0aGUgc3RydWN0dXJlIGlzIGNvcGllZCByYXRoZXIgdGhhbiBkaXJlY3RseSB1c2VkLCB3aGljaCBwcmV2ZW50cyBhbnkgZGFuZ2xpbmcgcG9pbnRlcnMgb3IgdW5pbml0aWFsaXplZCBkYXRhIGlzc3Vlcy4gSSBwYWlkIHNwZWNpZmljIGF0dGVudGlvbiB0byB0aGUgYHRpbWVzcGVjNjRgIGFuZCBgcHRwX3N5c3RlbV90aW1lc3RhbXBgIHN0cnVjdHVyZXMsIGVuc3VyaW5nIHRoZXkgYXJlIHByb3Blcmx5IHBvcHVsYXRlZCBieSB0aGUgZnVuY3Rpb25zIHJlYWRpbmcgVGltZSBvZiBEYXkgKFRvRCkgcmVnaXN0ZXJzIGZyb20gdGhlIGhhcmR3YXJlLiBUaGUgcmVhZCBhbmQgYWRqdXN0bWVudCBmdW5jdGlvbnMsIHN1Y2ggYXMgYHpsMzA3M3hfY2hhbl90b2RfcmVhZGAsIGB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjRgLCBhbmQgdmFyaW91cyAqYWRqKiBmdW5jdGlvbnMgd2VyZSBjaGVja2VkIHRvIGVuc3VyZSB0aGV5IGFyZSBwcm9wZXJseSBzZXR0aW5nIGFsbCB2YWx1ZXMuXG5cblRoZSBgemwzMDczeF9kcGxsX2FsbG9jYCBmdW5jdGlvbiBpbml0aWFsbHkgcmFpc2VkIGEgc2xpZ2h0IGNvbmNlcm4gZHVlIHRvIHRoZSB1c2Ugb2YgYSBtYWNybyB0aGF0IHdhc24ndCBpbW1lZGlhdGVseSBmYW1pbGlhci4gQWZ0ZXIgYSBjbG9zZXIgbG9vaywgaXQncyBqdXN0IGEgc3RhbmRhcmQgYGt6YWxsb2NgIG9wZXJhdGlvbiwgd2hpY2ggZ3VhcmFudGVlcyB6ZXJvLWluaXRpYWxpemF0aW9uLlxuXG5UaGVyZSBpc24ndCBtdWNoIG5ldyBoZXJlOiBJJ20gc2VlaW5nIHJlZ2lzdGVyIHJlYWRzLCByZWdpc3RlciB3cml0ZXMsIHNvbWUgYmFzaWMgYXJpdGhtZXRpYyBmb3IgdGltZSBhZGp1c3RtZW50cywgYW5kIHN0YW5kYXJkIFBUUCBmcmFtZXdvcmsgaW50ZXJhY3Rpb25zLiBUaGUgZm9jdXMgb24gbG9ja2luZyB3aXRoIG11dGV4ZXMgaW5kaWNhdGVzIHJvYnVzdCBjb25jdXJyZW5jeSBoYW5kbGluZywgbWluaW1pemluZyBkYXRhIHJhY2Ugcmlza3MuIEFsc28sIHNpbmNlIHRoZXJlIGFyZSBubyBuZXcgaW9jdGxzIG9yIG5ldGxpbmsgYXR0cmlidXRlcywgaW50ZXJhY3Rpb24gd2l0aCB1c2Vyc3BhY2UgaXMgc3RhbmRhcmQgUFRQIGNvcmUgaW1wbGVtZW50YXRpb24uIE5vdGhpbmcgbG9va3MgbGlrZSBpdCBjb3VsZCBsZWFrIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiwgbm9yIGludHJvZHVjZSBhbnkgc2VjdXJpdHkgY29uY2VybnMuIEluIHNob3J0LCB0aGUgcGF0Y2ggYXBwZWFycyB0byBiZSBpbXBsZW1lbnRpbmcgUFRQIGZ1bmN0aW9uYWxpdHkgaW4gYSBzYWZlIG1hbm5lciwgYWRoZXJpbmcgdG8gZXN0YWJsaXNoZWQgTGludXgga2VybmVsIGNvZGluZyBwcmFjdGljZXMgYW5kIFBUUCBmcmFtZXdvcmsgZ3VpZGVsaW5lcy4gSSdtIHJlYXNvbmFibHkgY29uZmlkZW50IGluIHRoaXMgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTc1LCJPdXRwdXRUb2tlbnMiOjIwMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1NzQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODo0MjoxNi44OTU0NjMxMjJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgUFRQIGNsb2NrIHN1cHBvcnQgdG8gdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyLiBJdCBpbnRyb2R1Y2VzIGZ1bmN0aW9ucyB0byByZWFkL3dyaXRlIFRpbWUgb2YgRGF5IChUb0QpIHJlZ2lzdGVycywgYWRqdXN0IHBoYXNlLCBhZGp1c3QgZnJlcXVlbmN5LCBhbmQgcmVnaXN0ZXJzIGEgUFRQIGNsb2NrIGRldmljZSB1c2luZyBgcHRwX2Nsb2NrX3JlZ2lzdGVyYC4gQWxsIG5ldyB2YXJpYWJsZXMgYW5kIHN0cnVjdHVyZXMgKHN1Y2ggYXMgYHN0cnVjdCB0aW1lc3BlYzY0YCwgYHN5bnRoX21hc2tgLCBhbmQgYHN0cnVjdCBwdHBfY2xvY2tfaW5mb2ApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIG9yIHBhc3NlZCB0byBzdGFuZGFyZCBrZXJuZWwgQVBJcyB0aGF0IGhhbmRsZSBpbml0aWFsaXphdGlvbi4gVGhlcmUgYXJlIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgaXMgdGhlcmUgYW55IGNvbnRyb2wgZmxvdyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyAobGlrZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIuIEl0IGludHJvZHVjZXMgZnVuY3Rpb25zIHRvIHJlYWQvd3JpdGUgVGltZSBvZiBEYXkgKFRvRCkgcmVnaXN0ZXJzLCBhZGp1c3QgcGhhc2UsIGFkanVzdCBmcmVxdWVuY3ksIGFuZCByZWdpc3RlcnMgYSBQVFAgY2xvY2sgZGV2aWNlIHVzaW5nIGBwdHBfY2xvY2tfcmVnaXN0ZXJgLiBBbGwgbmV3IHZhcmlhYmxlcyBhbmQgc3RydWN0dXJlcyAoc3VjaCBhcyBgc3RydWN0IHRpbWVzcGVjNjRgLCBgc3ludGhfbWFza2AsIGFuZCBgc3RydWN0IHB0cF9jbG9ja19pbmZvYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2Ugb3IgcGFzc2VkIHRvIHN0YW5kYXJkIGtlcm5lbCBBUElzIHRoYXQgaGFuZGxlIGluaXRpYWxpemF0aW9uLiBUaGVyZSBhcmUgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBpcyB0aGVyZSBhbnkgY29udHJvbCBmbG93IGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBidWdzIChsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowbtlsz[1] Phase: Succeeded StartedAt: 2026-08-14 08:42:23 +0000 UTC FinishedAt: 2026-08-14 08:42:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbtlsz[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-14 08:42:23 +0000 UTC FinishedAt: 2026-08-14 08:42:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbtlsz[2] Phase: Running StartedAt: 2026-08-14 08:42:23 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbtlsz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4f93b12cf7b25fbf8e73d222722805b049f0a6d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK","DPLL","I2C","SPI"],"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","zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime_phase_step","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase","zl3073x_dpll_ptp_getmaxphase"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4f93b12cf7b25fbf8e73d222722805b049f0a6d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK","DPLL","I2C","SPI"],"series_id":"9e83a370-9e93-4740-b8b8-aa0de000a486","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Running StartedAt: 2026-08-14 08:42:23 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"4f93b12cf7b25fbf8e73d222722805b049f0a6d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK","DPLL","I2C","SPI"],"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","zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime_phase_step","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase","zl3073x_dpll_ptp_getmaxphase"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"4f93b12cf7b25fbf8e73d222722805b049f0a6d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK","DPLL","I2C","SPI"],"series_id":"9e83a370-9e93-4740-b8b8-aa0de000a486","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-workflowbtlsz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4f93b12cf7b25fbf8e73d222722805b049f0a6d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK","DPLL","I2C","SPI"],"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","zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime_phase_step","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase","zl3073x_dpll_ptp_getmaxphase"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4f93b12cf7b25fbf8e73d222722805b049f0a6d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK","DPLL","I2C","SPI"],"series_id":"9e83a370-9e93-4740-b8b8-aa0de000a486","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-14 08:42:23 +0000 UTC FinishedAt: 2026-08-14 08:42:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbtlsz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4f93b12cf7b25fbf8e73d222722805b049f0a6d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK","DPLL","I2C","SPI"],"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","zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime_phase_step","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase","zl3073x_dpll_ptp_getmaxphase"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4f93b12cf7b25fbf8e73d222722805b049f0a6d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK","DPLL","I2C","SPI"],"series_id":"9e83a370-9e93-4740-b8b8-aa0de000a486","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-14 08:42:23 +0000 UTC FinishedAt: 2026-08-14 08:42:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4f93b12cf7b25fbf8e73d222722805b049f0a6d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK","DPLL","I2C","SPI"],"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-workflowbtlsz/series-workflowbtlsz-convert-artifact-3316980181/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbtlsz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4f93b12cf7b25fbf8e73d222722805b049f0a6d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK","DPLL","I2C","SPI"],"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","zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime_phase_step","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase","zl3073x_dpll_ptp_getmaxphase"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4f93b12cf7b25fbf8e73d222722805b049f0a6d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK","DPLL","I2C","SPI"],"series_id":"9e83a370-9e93-4740-b8b8-aa0de000a486","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-14 08:42:47 +0000 UTC FinishedAt: 2026-08-14 09:10:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbtlsz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4f93b12cf7b25fbf8e73d222722805b049f0a6d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK","DPLL","I2C","SPI"],"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","zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime_phase_step","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase","zl3073x_dpll_ptp_getmaxphase"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4f93b12cf7b25fbf8e73d222722805b049f0a6d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK","DPLL","I2C","SPI"],"series_id":"9e83a370-9e93-4740-b8b8-aa0de000a486","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-14 08:42:47 +0000 UTC FinishedAt: 2026-08-14 09:10:49 +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:*15a60a99-32bc-4c9d-aecc-ff1d8bdc214a,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-workflowbtlsz/series-workflowbtlsz-convert-artifact-3316980181/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": "d96e97b4-e33a-4de6-9a21-d6f3419c951f", "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-workflowbtlsz/series-workflowbtlsz-build-action-2410726459/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbtlsz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4f93b12cf7b25fbf8e73d222722805b049f0a6d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK","DPLL","I2C","SPI"],"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","zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime_phase_step","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase","zl3073x_dpll_ptp_getmaxphase"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4f93b12cf7b25fbf8e73d222722805b049f0a6d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK","DPLL","I2C","SPI"],"series_id":"9e83a370-9e93-4740-b8b8-aa0de000a486","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-14 08:42:47 +0000 UTC FinishedAt: 2026-08-14 09:10:18 +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:*15a60a99-32bc-4c9d-aecc-ff1d8bdc214a,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-workflowbtlsz/series-workflowbtlsz-convert-artifact-3316980181/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": "d96e97b4-e33a-4de6-9a21-d6f3419c951f", "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-workflowbtlsz/series-workflowbtlsz-build-action-2410726459/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbtlsz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4f93b12cf7b25fbf8e73d222722805b049f0a6d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK","DPLL","I2C","SPI"],"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","zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime_phase_step","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase","zl3073x_dpll_ptp_getmaxphase"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4f93b12cf7b25fbf8e73d222722805b049f0a6d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK","DPLL","I2C","SPI"],"series_id":"9e83a370-9e93-4740-b8b8-aa0de000a486","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-14 09:10:49 +0000 UTC FinishedAt: 2026-08-14 09:10:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbtlsz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4f93b12cf7b25fbf8e73d222722805b049f0a6d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK","DPLL","I2C","SPI"],"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","zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime_phase_step","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase","zl3073x_dpll_ptp_getmaxphase"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4f93b12cf7b25fbf8e73d222722805b049f0a6d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK","DPLL","I2C","SPI"],"series_id":"9e83a370-9e93-4740-b8b8-aa0de000a486","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-14 09:10:49 +0000 UTC FinishedAt: 2026-08-14 09:10:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbtlsz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4f93b12cf7b25fbf8e73d222722805b049f0a6d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK","DPLL","I2C","SPI"],"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","zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime_phase_step","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase","zl3073x_dpll_ptp_getmaxphase"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4f93b12cf7b25fbf8e73d222722805b049f0a6d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK","DPLL","I2C","SPI"],"series_id":"9e83a370-9e93-4740-b8b8-aa0de000a486","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-14 09:10:49 +0000 UTC FinishedAt: 2026-08-14 09:11:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbtlsz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4f93b12cf7b25fbf8e73d222722805b049f0a6d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK","DPLL","I2C","SPI"],"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","zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime_phase_step","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase","zl3073x_dpll_ptp_getmaxphase"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4f93b12cf7b25fbf8e73d222722805b049f0a6d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK","DPLL","I2C","SPI"],"series_id":"9e83a370-9e93-4740-b8b8-aa0de000a486","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-14 09:10:49 +0000 UTC FinishedAt: 2026-08-14 09:11:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4f93b12cf7b25fbf8e73d222722805b049f0a6d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK","DPLL","I2C","SPI"],"series_id":"9e83a370-9e93-4740-b8b8-aa0de000a486","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-workflowbtlsz/series-workflowbtlsz-convert-artifact-3970684336/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbtlsz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4f93b12cf7b25fbf8e73d222722805b049f0a6d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK","DPLL","I2C","SPI"],"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","zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime_phase_step","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase","zl3073x_dpll_ptp_getmaxphase"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4f93b12cf7b25fbf8e73d222722805b049f0a6d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK","DPLL","I2C","SPI"],"series_id":"9e83a370-9e93-4740-b8b8-aa0de000a486","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Running StartedAt: 2026-08-14 09:11:10 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbtlsz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4f93b12cf7b25fbf8e73d222722805b049f0a6d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK","DPLL","I2C","SPI"],"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","zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime_phase_step","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase","zl3073x_dpll_ptp_getmaxphase"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4f93b12cf7b25fbf8e73d222722805b049f0a6d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X","ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK","DPLL","I2C","SPI"],"series_id":"9e83a370-9e93-4740-b8b8-aa0de000a486","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Running StartedAt: 2026-08-14 09:11:10 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d96e97b4-e33a-4de6-9a21-d6f3419c951f,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-workflowbtlsz/series-workflowbtlsz-build-action-2410726459/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil