Name: series-workflow9gs8l Phase: Succeeded StartedAt: 2026-07-14 18:14:44 +0000 UTC FinishedAt: 2026-07-14 20:10:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9gs8l[0] Phase: Succeeded StartedAt: 2026-07-14 18:14:44 +0000 UTC FinishedAt: 2026-07-14 18:40:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9gs8l[0].run-triage Phase: Succeeded StartedAt: 2026-07-14 18:14:44 +0000 UTC FinishedAt: 2026-07-14 18:40:12 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "ceb57c6bb70f552030509b3858b0d7091211ec9a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_RNBD_SERVER", "BLK_DEV_RNBD_CLIENT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "ceb57c6bb70f552030509b3858b0d7091211ec9a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_RNBD_SERVER", "BLK_DEV_RNBD_CLIENT" ], "series_id": "dd7b64aa-5afb-4640-b43b-157120e75d41" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "process_msg_open", "rnbd_srv_create_dev_session_sysfs", "rnbd_destroy_sess_dev" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE4OjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfUk5CRF9TRVJWRVImIzM0OywKICAgICYjMzQ7QkxLX0RFVl9STkJEX0NMSUVOVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Byb2Nlc3NfbXNnX29wZW4mIzM0OywKICAgICYjMzQ7cm5iZF9zcnZfY3JlYXRlX2Rldl9zZXNzaW9uX3N5c2ZzJiMzNDssCiAgICAmIzM0O3JuYmRfZGVzdHJveV9zZXNzX2RldiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGRvdWJsZSBmcmVlIGFuZCBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvbiB0aGUgZXJyb3IgcGF0aCBvZiBgcHJvY2Vzc19tc2dfb3BlbmAgaW4gdGhlIFJOQkQgc2VydmVyLiBJZiBgcm5iZF9zcnZfY3JlYXRlX2Rldl9zZXNzaW9uX3N5c2ZzYCBmYWlscywgaXQgY2FsbHMgYGtvYmplY3RfcHV0YCwgd2hpY2ggaW52b2tlcyB0aGUgcmVsZWFzZSBjYWxsYmFjayBgcm5iZF9kZXN0cm95X3Nlc3NfZGV2YC4gVGhpcyBjYWxsYmFjayBmcmVlcyB0aGUgc2Vzc2lvbiBkZXZpY2UgYW5kIHJlbW92ZXMgaXQgZnJvbSB0aGUgYHNlc3NfZGV2X2xpc3RgLiBCZWZvcmUgdGhlIHBhdGNoLCB0aGUgZGV2aWNlIHdhcyBub3QgYWRkZWQgdG8gdGhlIGxpc3QgYmVmb3JlIHN5c2ZzIGNyZWF0aW9uLCBjYXVzaW5nIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBsaXN0X2RlbGAsIGFuZCB0aGUgZXJyb3IgaGFuZGxpbmcganVtcGVkIHRvIGBmcmVlX3Nydl9zZXNzX2RldmAgd2hpY2ggZnJlZWQgdGhlIG9iamVjdCBhZ2Fpbi4gRnV6emluZyB0aGlzIGVycm9yIHBhdGggaXMgaW1wb3J0YW50IHRvIGVuc3VyZSBubyBvdGhlciB1c2UtYWZ0ZXItZnJlZSBvciBsaXN0IGNvcnJ1cHRpb25zIGV4aXN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE4OjM1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNjExNzk2ZGJlMjBjOGFkZWUyN2RhY2RjNzE0OGJkZjI5MTEwNjczZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDE0IDE4OjM1OjQ0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jIGIvZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmNcbmluZGV4IDEwZThjNDM4YmI0Mzk3Li41YTk5MWJmYmYzYWQ1OSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuY1xuQEAgLTc3OCwxOCAmIzQzOzc3OCwyMiBAQCBzdGF0aWMgaW50IHByb2Nlc3NfbXNnX29wZW4oc3RydWN0IHJuYmRfc3J2X3Nlc3Npb24gKnNydl9zZXNzLFxuIFx0XHR9XG4gXHR9XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBZGQgdGhlIHNlc3Npb24gZGV2aWNlIHRvIHRoZSBsaXN0IGJlZm9yZSBpbml0aWFsaXppbmcgaXRzXG4mIzQzO1x0ICoga29iamVjdC4gSWYgc3lzZnMgY3JlYXRpb24gZmFpbHMsIGtvYmplY3RfcHV0KCkgaW52b2tlcyB0aGVcbiYjNDM7XHQgKiByZWxlYXNlIGNhbGxiYWNrLCB3aGljaCByZW1vdmVzIHRoZSBvYmplY3QgZnJvbSB0aGlzIGxpc3QgYW5kXG4mIzQzO1x0ICogcmVsZWFzZXMgYWxsIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHNlc3Npb24gZGV2aWNlLlxuJiM0MztcdCAqL1xuJiM0MztcdGxpc3RfYWRkKFx1MDAyNnNydl9zZXNzX2Rldi1cdTAwM2VkZXZfbGlzdCwgXHUwMDI2c3J2X2Rldi1cdTAwM2VzZXNzX2Rldl9saXN0KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2c3J2X2Rldi1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4gXHRyZXQgPSBybmJkX3Nydl9jcmVhdGVfZGV2X3Nlc3Npb25fc3lzZnMoc3J2X3Nlc3NfZGV2KTtcbiBcdGlmIChyZXQpIHtcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnNydl9kZXYtXHUwMDNlbG9jayk7XG4tXHRcdHJuYmRfc3J2X2VycihzcnZfc2Vzc19kZXYsXG4tXHRcdFx0ICAgICAgXCYjMzQ7T3BlbmluZyBkZXZpY2UgZmFpbGVkLCBmYWlsZWQgdG8gY3JlYXRlIGRldiBjbGllbnQgc3lzZnMgZmlsZXMsIGVycjogJWRcXG5cJiMzNDssXG4tXHRcdFx0ICAgICAgcmV0KTtcbi1cdFx0Z290byBmcmVlX3Nydl9zZXNzX2RldjtcbiYjNDM7XHRcdHByX2VycihcJiMzNDtPcGVuaW5nIGRldmljZSAmIzM5OyVzJiMzOTsgb24gc2Vzc2lvbiAlcyBmYWlsZWQsIGZhaWxlZCB0byBjcmVhdGUgZGV2IGNsaWVudCBzeXNmcyBmaWxlcywgZXJyOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdCAgICAgICBmdWxsX3BhdGgsIHNydl9zZXNzLVx1MDAzZXNlc3NuYW1lLCByZXQpO1xuJiM0MztcdFx0Z290byBmcmVlX3BhdGg7XG4gXHR9XG4gXG4tXHRsaXN0X2FkZChcdTAwMjZzcnZfc2Vzc19kZXYtXHUwMDNlZGV2X2xpc3QsIFx1MDAyNnNydl9kZXYtXHUwMDNlc2Vzc19kZXZfbGlzdCk7XG4tXHRtdXRleF91bmxvY2soXHUwMDI2c3J2X2Rldi1cdTAwM2Vsb2NrKTtcbi1cbiBcdHJuYmRfc3J2X2luZm8oc3J2X3Nlc3NfZGV2LCBcJiMzNDtPcGVuZWQgZGV2aWNlICYjMzk7JXMmIzM5O1xcblwmIzM0Oywgc3J2X2Rldi1cdTAwM2VuYW1lKTtcbiBcbiBcdGtmcmVlKGZ1bGxfcGF0aCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTg6MzU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9STkJEX1NFUlZFUiYjMzQ7LAogICAgJiMzNDtCTEtfREVWX1JOQkRfQ0xJRU5UJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cHJvY2Vzc19tc2dfb3BlbiYjMzQ7LAogICAgJiMzNDtybmJkX3Nydl9jcmVhdGVfZGV2X3Nlc3Npb25fc3lzZnMmIzM0OywKICAgICYjMzQ7cm5iZF9kZXN0cm95X3Nlc3NfZGV2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZG91YmxlIGZyZWUgYW5kIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9uIHRoZSBlcnJvciBwYXRoIG9mIGBwcm9jZXNzX21zZ19vcGVuYCBpbiB0aGUgUk5CRCBzZXJ2ZXIuIElmIGBybmJkX3Nydl9jcmVhdGVfZGV2X3Nlc3Npb25fc3lzZnNgIGZhaWxzLCBpdCBjYWxscyBga29iamVjdF9wdXRgLCB3aGljaCBpbnZva2VzIHRoZSByZWxlYXNlIGNhbGxiYWNrIGBybmJkX2Rlc3Ryb3lfc2Vzc19kZXZgLiBUaGlzIGNhbGxiYWNrIGZyZWVzIHRoZSBzZXNzaW9uIGRldmljZSBhbmQgcmVtb3ZlcyBpdCBmcm9tIHRoZSBgc2Vzc19kZXZfbGlzdGAuIEJlZm9yZSB0aGUgcGF0Y2gsIHRoZSBkZXZpY2Ugd2FzIG5vdCBhZGRlZCB0byB0aGUgbGlzdCBiZWZvcmUgc3lzZnMgY3JlYXRpb24sIGNhdXNpbmcgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYGxpc3RfZGVsYCwgYW5kIHRoZSBlcnJvciBoYW5kbGluZyBqdW1wZWQgdG8gYGZyZWVfc3J2X3Nlc3NfZGV2YCB3aGljaCBmcmVlZCB0aGUgb2JqZWN0IGFnYWluLiBGdXp6aW5nIHRoaXMgZXJyb3IgcGF0aCBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIG5vIG90aGVyIHVzZS1hZnRlci1mcmVlIG9yIGxpc3QgY29ycnVwdGlvbnMgZXhpc3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDYxMTc5NmRiZTIwYzhhZGVlMjdkYWNkYzcxNDhiZGYyOTExMDY3M2QKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1bCAxNCAxODozNTo0NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jIGIvZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmMKaW5kZXggMTBlOGM0MzhiYjQzOTcuLjVhOTkxYmZiZjNhZDU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYwpAQCAtNzc4LDE4ICYjNDM7Nzc4LDIyIEBAIHN0YXRpYyBpbnQgcHJvY2Vzc19tc2dfb3BlbihzdHJ1Y3Qgcm5iZF9zcnZfc2Vzc2lvbiAqc3J2X3Nlc3MsCiAJCX0KIAl9CiAKJiM0MzsJLyoKJiM0MzsJICogQWRkIHRoZSBzZXNzaW9uIGRldmljZSB0byB0aGUgbGlzdCBiZWZvcmUgaW5pdGlhbGl6aW5nIGl0cwomIzQzOwkgKiBrb2JqZWN0LiBJZiBzeXNmcyBjcmVhdGlvbiBmYWlscywga29iamVjdF9wdXQoKSBpbnZva2VzIHRoZQomIzQzOwkgKiByZWxlYXNlIGNhbGxiYWNrLCB3aGljaCByZW1vdmVzIHRoZSBvYmplY3QgZnJvbSB0aGlzIGxpc3QgYW5kCiYjNDM7CSAqIHJlbGVhc2VzIGFsbCByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzZXNzaW9uIGRldmljZS4KJiM0MzsJICovCiYjNDM7CWxpc3RfYWRkKCZhbXA7c3J2X3Nlc3NfZGV2LSZndDtkZXZfbGlzdCwgJmFtcDtzcnZfZGV2LSZndDtzZXNzX2Rldl9saXN0KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7c3J2X2Rldi0mZ3Q7bG9jayk7CiYjNDM7CiAJcmV0ID0gcm5iZF9zcnZfY3JlYXRlX2Rldl9zZXNzaW9uX3N5c2ZzKHNydl9zZXNzX2Rldik7CiAJaWYgKHJldCkgewotCQltdXRleF91bmxvY2soJmFtcDtzcnZfZGV2LSZndDtsb2NrKTsKLQkJcm5iZF9zcnZfZXJyKHNydl9zZXNzX2RldiwKLQkJCSAgICAgICYjMzQ7T3BlbmluZyBkZXZpY2UgZmFpbGVkLCBmYWlsZWQgdG8gY3JlYXRlIGRldiBjbGllbnQgc3lzZnMgZmlsZXMsIGVycjogJWRcbiYjMzQ7LAotCQkJICAgICAgcmV0KTsKLQkJZ290byBmcmVlX3Nydl9zZXNzX2RldjsKJiM0MzsJCXByX2VycigmIzM0O09wZW5pbmcgZGV2aWNlICYjMzk7JXMmIzM5OyBvbiBzZXNzaW9uICVzIGZhaWxlZCwgZmFpbGVkIHRvIGNyZWF0ZSBkZXYgY2xpZW50IHN5c2ZzIGZpbGVzLCBlcnI6ICVkXG4mIzM0OywKJiM0MzsJCSAgICAgICBmdWxsX3BhdGgsIHNydl9zZXNzLSZndDtzZXNzbmFtZSwgcmV0KTsKJiM0MzsJCWdvdG8gZnJlZV9wYXRoOwogCX0KIAotCWxpc3RfYWRkKCZhbXA7c3J2X3Nlc3NfZGV2LSZndDtkZXZfbGlzdCwgJmFtcDtzcnZfZGV2LSZndDtzZXNzX2Rldl9saXN0KTsKLQltdXRleF91bmxvY2soJmFtcDtzcnZfZGV2LSZndDtsb2NrKTsKLQogCXJuYmRfc3J2X2luZm8oc3J2X3Nlc3NfZGV2LCAmIzM0O09wZW5lZCBkZXZpY2UgJiMzOTslcyYjMzk7XG4mIzM0Oywgc3J2X2Rldi0mZ3Q7bmFtZSk7CiAKIAlrZnJlZShmdWxsX3BhdGgpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxODozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTUwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUk5CRCBTZXJ2ZXImIzM5O3MgRGV2aWNlIFNlc3Npb24gSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IGFwcGVhcnMgdG8gdGFyZ2V0IHRoZSBgcHJvY2Vzc19tc2dfb3BlbmAgZnVuY3Rpb24gd2l0aGluIGBkcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYSBzdWJ0bGUgYWRqdXN0bWVudCBpbiB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyB3aGVuIGhhbmRsaW5nIGEgbmV3IGRldmljZSBzZXNzaW9uLiBQcmV2aW91c2x5LCBpdCBsb29rZWQgbGlrZSBgcm5iZF9zcnZfY3JlYXRlX2Rldl9zZXNzaW9uX3N5c2ZzYCB3YXMgY2FsbGVkICpiZWZvcmUqIGFkZGluZyB0aGUgc2Vzc2lvbiBkZXZpY2UgKGBzcnZfc2Vzc19kZXZgKSB0byB0aGUgc2VydmVyJiMzOTtzIHNlc3Npb24gZGV2aWNlIGxpc3QgKGBzcnZfZGV2LSZndDtzZXNzX2Rldl9saXN0YCkuIE5vdywgdGhlIHBhdGNoIGNvcnJlY3RseSBhZGRzIGl0IHRvIHRoZSBsaXN0ICpmaXJzdCouCgpUaGUgY3JpdGljYWwgc2hpZnQgaXMgdGhpczogSWYgYHJuYmRfc3J2X2NyZWF0ZV9kZXZfc2Vzc2lvbl9zeXNmc2AgZmFpbHMg4oCTIGFuZCBieSAmIzM0O2ZhaWxzJiMzNDsgSSYjMzk7bSBhc3N1bWluZyB0aGF0IG1lYW5zIGl0IGVuY291bnRlcnMgYW4gZXJyb3IgaW4gY3JlYXRpbmcgdGhlIHN5c2ZzIGVudHJpZXMgZm9yIHRoZSBkZXZpY2Ugc2Vzc2lvbiDigJMgdGhlIGNvZGUgbm93IGp1bXBzIGRpcmVjdGx5IHRvIGBmcmVlX3BhdGhgIGluc3RlYWQgb2YgYGZyZWVfc3J2X3Nlc3NfZGV2YC4gVGhpcyBpcyBpbXBvcnRhbnQsIGFzIGl0IHNpZ25hbHMgYSBjaGFuZ2UgaW4gaG93IHdlIHdhbnQgdG8gaGFuZGxlIGNsZWFudXAuCgpUaGUgY29tbWVudCBpcyBrZXkgaGVyZS4gSXQgZXNzZW50aWFsbHkgaGlnaGxpZ2h0cyB0aGUgcmF0aW9uYWxlOiBieSBhZGRpbmcgdGhlIHNlc3Npb24gZGV2aWNlIHRvIHRoZSBsaXN0ICpiZWZvcmUqIGluaXRpYWxpemluZyBpdHMga29iamVjdCAod2hpY2ggaXMgd2hhdCBJIGFzc3VtZSBpcyBoYXBwZW5pbmcgaW4gdGhlIHN5c2ZzIGNyZWF0aW9uIHBoYXNlKSwgdGhlIGNvZGUgZW5zdXJlcyB0aGF0IGlmIHN5c2ZzIGNyZWF0aW9uIGZhaWxzLCBga29iamVjdF9wdXQoKWAgZ2V0cyBjYWxsZWQuIFRoaXMgYGtvYmplY3RfcHV0KClgIHRoZW4gdHJpZ2dlcnMgdGhlIHJlbGVhc2UgY2FsbGJhY2ssIHdoaWNoIGlzIHdoYXQgKnJlbW92ZXMqIHRoZSBvYmplY3QgZnJvbSB0aGUgbGlzdC4gRWZmZWN0aXZlbHksIGl0IGhhbmRsZXMgdGhlIGZyZWVpbmcgb2YgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2Vzc2lvbiBkZXZpY2UgaW4gYSBjb250cm9sbGVkIHdheSwgcmVnYXJkbGVzcyBvZiB0aGUgZXJyb3IgY29uZGl0aW9uLiBUaGlzIHNvdW5kcyBsaWtlIGFuIGVmZm9ydCB0byBhdm9pZCByZXNvdXJjZSBsZWFrcyBkdXJpbmcgZGV2aWNlIHNlc3Npb24gY3JlYXRpb24uIE5vdywgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGBmcmVlX3BhdGhgIGZ1bmN0aW9uIHRvIHZlcmlmeSB0aGUgY2xlYW51cCBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxODozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcm9jZXNzX21zZ19vcGVuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM9MzUwPXN0YXRpYyB2b2lkIHByb2Nlc3NfbXNnX2Nsb3NlKHN0cnVjdCBybmJkX3Nydl9zZXNzaW9uICpzcnZfc2Vzcyxcbi0tXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy0zNjktXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYzozNzA6c3RhdGljIGludCBwcm9jZXNzX21zZ19vcGVuKHN0cnVjdCBybmJkX3Nydl9zZXNzaW9uICpzcnZfc2VzcyxcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jLTM3MS1cdFx0XHQgICAgY29uc3Qgdm9pZCAqbXNnLCBzaXplX3QgbGVuLFxuLS1cbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jPTM3OD1zdGF0aWMgaW50IHJuYmRfc3J2X3JkbWFfZXYodm9pZCAqcHJpdiwgc3RydWN0IHJ0cnNfc3J2X29wICppZCxcbi0tXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy0zOTgtXHRjYXNlIFJOQkRfTVNHX09QRU46XG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYzozOTk6XHRcdHJldCA9IHByb2Nlc3NfbXNnX29wZW4oc3J2X3Nlc3MsIHVzciwgdXNybGVuLCBkYXRhLCBkYXRhbGVuKTtcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jLTQwMC1cdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM9Njc2PWZpbmRfc3J2X3Nlc3NfZGV2KHN0cnVjdCBybmJkX3Nydl9zZXNzaW9uICpzcnZfc2VzcywgY29uc3QgY2hhciAqZGV2X25hbWUpXG4tLVxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmMtNjkwLVxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM6NjkxOnN0YXRpYyBpbnQgcHJvY2Vzc19tc2dfb3BlbihzdHJ1Y3Qgcm5iZF9zcnZfc2Vzc2lvbiAqc3J2X3Nlc3MsXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy02OTItXHRcdFx0ICAgIGNvbnN0IHZvaWQgKm1zZywgc2l6ZV90IGxlbixcbi0tXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy03MDMtXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYzo3MDQ6XHR0cmFjZV9wcm9jZXNzX21zZ19vcGVuKHNydl9zZXNzLCBvcGVuX21zZyk7XG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy03MDUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTg6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMwNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSTkJEIGFuZCBTeXprYWxsZXI6IEEgUXVpY2sgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMgYHByb2Nlc3NfbXNnX29wZW5gIGZ1bmN0aW9uIGFuZCB3aGVyZSBpdCBnZXRzIGNhbGxlZCBmcm9tLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHRyaWdnZXJlZCBieSBgcm5iZF9zcnZfcmRtYV9ldmAsIHdoaWNoIGhhbmRsZXMgUkRNQSBldmVudHMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBjYW4gd2UgYWN0dWFsbHkgdGVzdCBSTkJEIOKAkyB0aGUgUmVsaWFibGUgTmV0d29yayBCbG9jayBEZXZpY2Ug4oCTIGVmZmVjdGl2ZWx5IHdpdGhpbiBzeXprYWxsZXI/IEl0JiMzOTtzIGEga2V5IHF1ZXN0aW9uLgoKVGhlIG5hdHVyZSBvZiBSRE1BIGRyaXZlcnMgb2Z0ZW4gbmVjZXNzaXRhdGVzIHNwZWNpZmljIGhhcmR3YXJlIG9yIHNvZnR3YXJlIFJETUEgaW1wbGVtZW50YXRpb25zIGxpa2UgcnhlLCBhbmQgdGhhdCB0ZW5kcyB0byBjcmVhdGUgYSBib3R0bGVuZWNrIGZvciBmdXppbmcuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBSTkJEIGhhcyB0aGUgc2FtZSBsaW1pdGF0aW9ucy4gTGV0JiMzOTtzIHNlZSBpZiB3ZSBjYW4gZnV6eiBSTkJELgoKSSByZW1lbWJlciBSTkJEIGlzIGJ1aWx0IG9uIFJUUlMgKFJlbGlhYmxlIFRyYW5zcG9ydCBSb3V0aW5nIFNlcnZpY2UpLCBhbmQgdGhhdCByZWxpZXMgb24gUkRNQSwgd2hpY2ggcmVpbmZvcmNlcyB0aGUgbmVlZCB0byBkaWcgZGVlcGVyLiBGaXJzdCwgSSB0aGluayBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgUk5CRCB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLiBUaGlzIHdpbGwgcHJvdmlkZSBzb21lIG5lY2Vzc2FyeSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE4OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfREVWX1JOQkQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZy0yLVxuZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWc6Mzpjb25maWcgQkxLX0RFVl9STkJEXG5kcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZy00LVx0Ym9vbFxuZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWctNS1cbmRyaXZlcnMvYmxvY2svcm5iZC9LY29uZmlnOjY6Y29uZmlnIEJMS19ERVZfUk5CRF9DTElFTlRcbmRyaXZlcnMvYmxvY2svcm5iZC9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtSRE1BIE5ldHdvcmsgQmxvY2sgRGV2aWNlIGRyaXZlciBjbGllbnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZy0xOC1cbmRyaXZlcnMvYmxvY2svcm5iZC9LY29uZmlnOjE5OmNvbmZpZyBCTEtfREVWX1JOQkRfU0VSVkVSXG5kcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZy0yMC1cdHRyaXN0YXRlIFwmIzM0O1JETUEgTmV0d29yayBCbG9jayBEZXZpY2UgZHJpdmVyIHNlcnZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE4OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4NzAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBSTkJEIFNlcnZlcioqCgpPa2F5LCBzbyB0aGUgY29uZmlnIG9wdGlvbiB3ZSYjMzk7cmUgbG9va2luZyBhdCBoZXJlIGlzIGBCTEtfREVWX1JOQkRfU0VSVkVSYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O2NhbiB3ZSBmdXp6IHRoaXMgdGhpbmc/JiMzNDsgQWJzb2x1dGVseSwgdGhlIHBvdGVudGlhbCBpcyB0aGVyZSwgYW5kIGVuYWJsaW5nIGBCTEtfREVWX1JOQkRfU0VSVkVSYCBzaG91bGQgb3BlbiB0aGUgZG9vci4KCkhvbGQgb24gYSBzZWNvbmQsIHRob3VnaC4uLiBJIHJlbWVtYmVyIHNvbWV0aGluZyBhYm91dCBSRE1BLiBSaWdodCwgaXQgbG9va3MgbGlrZSB0aGlzIGlzIGRlcGVuZGVudCBvbiBgSU5GSU5JQkFORGAuIEkmIzM5O2QgYmV0dGVyIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBmaWxlIGluIGBkcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZ2AganVzdCB0byBiZSBzdXJlLCBhbmQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aG9zZSBkZXBlbmRlbmNpZXMgYXJlIHNldCB1cC4gTmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbnRleHQgYmVmb3JlIGRpdmluZyBpbnRvIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTg6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbiAgIDI6XHRcbiAgIDM6XHRjb25maWcgQkxLX0RFVl9STkJEXG4gICA0Olx0XHRib29sXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIEJMS19ERVZfUk5CRF9DTElFTlRcbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O1JETUEgTmV0d29yayBCbG9jayBEZXZpY2UgZHJpdmVyIGNsaWVudFwmIzM0O1xuICAgODpcdFx0ZGVwZW5kcyBvbiBJTkZJTklCQU5EX1JUUlNfQ0xJRU5UXG4gICA5Olx0XHRzZWxlY3QgQkxLX0RFVl9STkJEXG4gIDEwOlx0XHRzZWxlY3QgU0dfUE9PTFxuICAxMTpcdFx0aGVscFxuICAxMjpcdFx0ICBSTkJEIGNsaWVudCBpcyBhIG5ldHdvcmsgYmxvY2sgZGV2aWNlIGRyaXZlciB1c2luZyByZG1hIHRyYW5zcG9ydC5cbiAgMTM6XHRcbiAgMTQ6XHRcdCAgUk5CRCBjbGllbnQgYWxsb3dzIGZvciBtYXBwaW5nIG9mIGEgcmVtb3RlIGJsb2NrIGRldmljZXMgb3ZlclxuICAxNTpcdFx0ICBSVFJTIHByb3RvY29sIGZyb20gYSB0YXJnZXQgc3lzdGVtIHdoZXJlIFJOQkQgc2VydmVyIGlzIHJ1bm5pbmcuXG4gIDE2Olx0XG4gIDE3Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDE4Olx0XG4gIDE5Olx0Y29uZmlnIEJMS19ERVZfUk5CRF9TRVJWRVJcbiAgMjA6XHRcdHRyaXN0YXRlIFwmIzM0O1JETUEgTmV0d29yayBCbG9jayBEZXZpY2UgZHJpdmVyIHNlcnZlclwmIzM0O1xuICAyMTpcdFx0ZGVwZW5kcyBvbiBJTkZJTklCQU5EX1JUUlNfU0VSVkVSXG4gIDIyOlx0XHRzZWxlY3QgQkxLX0RFVl9STkJEXG4gIDIzOlx0XHRoZWxwXG4gIDI0Olx0XHQgIFJOQkQgc2VydmVyIGlzIHRoZSBzZXJ2ZXIgc2lkZSBvZiBSTkJEIHVzaW5nIHJkbWEgdHJhbnNwb3J0LlxuICAyNTpcdFxuICAyNjpcdFx0ICBSTkJEIHNlcnZlciBhbGxvd3MgZm9yIGV4cG9ydGluZyBsb2NhbCBibG9jayBkZXZpY2VzIHRvIGEgcmVtb3RlIGNsaWVudFxuICAyNzpcdFx0ICBvdmVyIFJUUlMgcHJvdG9jb2wuXG4gIDI4Olx0XG4gIDI5Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTg6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDUyMQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDEzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBSTkJEIFNlcnZlcjogQSBRdWljayBBc3Nlc3NtZW50KioKCk9rYXksIHNvIHRoZSBmdXp6aW5nIHN0cmF0ZWd5IGhpbmdlcyBvbiB0aGF0IGBJTkZJTklCQU5EX1JUUlNfU0VSVkVSYCBzZXR0aW5nLiBDYW4gc3l6a2FsbGVyIGFjdHVhbGx5IHRhcmdldCB0aGUgUk5CRCBzZXJ2ZXIgZGlyZWN0bHk/IEkga25vdyBpdCBjYW4gaGFuZGxlIFJETUEgcHJvdG9jb2xzIGxpa2UgYHJ4ZWAgYW5kIGBzaXdgLCBidXQgdGhlIHNwZWNpZmljcyBoZXJlIGFyZSBrZXkuIEhhbmcgb24uLi4gdGhlIHZ1bG5lcmFiaWxpdHkgb3IgcG90ZW50aWFsIGlzc3VlIGlzIHRyaWdnZXJlZCB3aXRoaW4gYHByb2Nlc3NfbXNnX29wZW5gLiBBaCwgdGhhdCBmdW5jdGlvbiBpcyBoaXQgd2hlbiBhbiBSTkJEIGNsaWVudCBjb25uZWN0cyBhbmQgc2VuZHMgYW4gT1BFTiBtZXNzYWdlLiBJbnRlcmVzdGluZy4KCklzIHRoaXMgd29ydGggdGhlIGVmZm9ydCBvZiBzZXR0aW5nIHVwIGZ1enppbmcgZm9yPyBBYnNvbHV0ZWx5LCB5ZXMuIEl0JiMzOTtzIG5vdCBqdXN0IGEgY29zbWV0aWMgY2hhbmdlOyBpdCBsb29rcyBsaWtlIGEgcmVhbCBmdW5jdGlvbmFsIGZpeCwgcG90ZW50aWFsbHkgYWRkcmVzc2luZyBhIHVzZS1hZnRlci1mcmVlLCBhIG1lbW9yeSBsZWFrLCBvciBtYXliZSBldmVuIGEgY3JpdGljYWwgbGlzdCBjb3JydXB0aW9uIG9uIGFuIGVycm9yIHBhdGguIE5vdywgbGV0JiMzOTtzIGRpdmUgaW50byBgcHJvY2Vzc19tc2dfb3BlbmAgaXRzZWxmIGFuZCB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIHRoYXQgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE4OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Byb2Nlc3NfbXNnX29wZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYz0zNTA9c3RhdGljIHZvaWQgcHJvY2Vzc19tc2dfY2xvc2Uoc3RydWN0IHJuYmRfc3J2X3Nlc3Npb24gKnNydl9zZXNzLFxuLS1cbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jLTM2OS1cbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jOjM3MDpzdGF0aWMgaW50IHByb2Nlc3NfbXNnX29wZW4oc3RydWN0IHJuYmRfc3J2X3Nlc3Npb24gKnNydl9zZXNzLFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmMtMzcxLVx0XHRcdCAgICBjb25zdCB2b2lkICptc2csIHNpemVfdCBsZW4sXG4tLVxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM9Mzc4PXN0YXRpYyBpbnQgcm5iZF9zcnZfcmRtYV9ldih2b2lkICpwcml2LCBzdHJ1Y3QgcnRyc19zcnZfb3AgKmlkLFxuLS1cbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jLTM5OC1cdGNhc2UgUk5CRF9NU0dfT1BFTjpcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jOjM5OTpcdFx0cmV0ID0gcHJvY2Vzc19tc2dfb3BlbihzcnZfc2VzcywgdXNyLCB1c3JsZW4sIGRhdGEsIGRhdGFsZW4pO1xuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmMtNDAwLVx0XHRicmVhaztcbi0tXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYz02NzY9ZmluZF9zcnZfc2Vzc19kZXYoc3RydWN0IHJuYmRfc3J2X3Nlc3Npb24gKnNydl9zZXNzLCBjb25zdCBjaGFyICpkZXZfbmFtZSlcbi0tXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy02OTAtXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYzo2OTE6c3RhdGljIGludCBwcm9jZXNzX21zZ19vcGVuKHN0cnVjdCBybmJkX3Nydl9zZXNzaW9uICpzcnZfc2VzcyxcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jLTY5Mi1cdFx0XHQgICAgY29uc3Qgdm9pZCAqbXNnLCBzaXplX3QgbGVuLFxuLS1cbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jLTcwMy1cbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jOjcwNDpcdHRyYWNlX3Byb2Nlc3NfbXNnX29wZW4oc3J2X3Nlc3MsIG9wZW5fbXNnKTtcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jLTcwNS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTg6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQxOAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGVidWdnaW5nIGEgUG90ZW50aWFsIFJlZGVmaW5pdGlvbioqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLi4uIGlzIGBwcm9jZXNzX21zZ19vcGVuYCBkZWZpbmVkIHR3aWNlPyBUaGF0JiMzOTtzLi4uIHVudXN1YWwsIGFuZCBhIHBvdGVudGlhbCByZWNpcGUgZm9yIGRpc2FzdGVyLiBUaGUgY29tcGlsZXIgKnNob3VsZCogYmUgeWVsbGluZyBhdCBtZSwgYnV0IG1heWJlIHRoZXJlJiMzOTtzIHNvbWUgc2NvcGluZyB0cmlja2VyeSBhdCBwbGF5LCBvciBhIG1pc3BsYWNlZCBgI2luY2x1ZGVgLiBMZXQmIzM5O3MgYXNzdW1lIHRoZXJlIGlzIHNvbWV0aGluZyBzdHJhbmdlIGdvaW5nIG9uLgoKTGluZSAzNzAuLi4gb2theSwgdGhhdCBmZWVscyBsaWtlIHRoZSBsaWtlbHkgY3VscHJpdCBmb3IgdGhlIGluaXRpYWwgZGVmaW5pdGlvbiwgdGhlIGZvcndhcmQgZGVjbGFyYXRpb24sIG9yIHBvc3NpYmxlIGluc3RhbnRpYXRpb24gb2YgdGhlIGZ1bmN0aW9uLiBMZXQgbWUgZ28gdGFrZSBhIGxvb2sgYXQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXQgdGhhdCBsaW5lLiBQcm9iYWJseSBpdCYjMzk7cyBhbiBleHRlcm4gZGVmaW5pdGlvbiwgb3IgcGVyaGFwcyBhIGRlY2xhcmF0aW9uIGluIGEgaGVhZGVyIHRoYXQmIzM5O3MgdGhlbiBhY2NpZGVudGFsbHkgaW5jbHVkZWQgbXVsdGlwbGUgdGltZXMuIExldCYjMzk7cyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgdGhlIHNpdHVhdGlvbi4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxODozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNjU6XHRcdG11dGV4X2xvY2soXHUwMDI2c3J2X3Nlc3MtXHUwMDNlbG9jayk7XG4gMzY2Olx0XHRybmJkX3Nydl9kZXN0cm95X2Rldl9zZXNzaW9uX3N5c2ZzKHNlc3NfZGV2KTtcbiAzNjc6XHRcdG11dGV4X3VubG9jayhcdTAwMjZzcnZfc2Vzcy1cdTAwM2Vsb2NrKTtcbiAzNjg6XHR9XG4gMzY5Olx0XG4gMzcwOlx0c3RhdGljIGludCBwcm9jZXNzX21zZ19vcGVuKHN0cnVjdCBybmJkX3Nydl9zZXNzaW9uICpzcnZfc2VzcyxcbiAzNzE6XHRcdFx0XHQgICAgY29uc3Qgdm9pZCAqbXNnLCBzaXplX3QgbGVuLFxuIDM3MjpcdFx0XHRcdCAgICB2b2lkICpkYXRhLCBzaXplX3QgZGF0YWxlbik7XG4gMzczOlx0XG4gMzc0Olx0c3RhdGljIHZvaWQgcHJvY2Vzc19tc2dfc2Vzc19pbmZvKHN0cnVjdCBybmJkX3Nydl9zZXNzaW9uICpzcnZfc2VzcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTg6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg2MQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKk5hdmlnYXRpbmcgdGhlIENvZGViYXNlKioKCkFscmlnaHQsIGZvcndhcmQgZGVjbGFyYXRpb24sIGdvdCBpdC4gQWx3YXlzIGdvb2QgdG8gc2VlIHRoYXQgdXBmcm9udCB0byBhdm9pZCBhbnkgbmFzdHkgc3VycHJpc2VzIGxhdGVyLiBOb3csIHdoZXJlIGlzIHRoZSBhY3R1YWwgZGVmaW5pdGlvbiBvZiB0aGlzIHRoaW5nPyBBaCwgbGluZSA2OTEuIE9rYXksIGxldCYjMzk7cyBqdW1wIGRvd24gdGhlcmUgYW5kIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGFzIEkgZXhwZWN0IGl0IHRvIGJlLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBmdW5jdGlvbiBgcHJvY2Vzc19tc2dfb3BlbmAuIEkgd2FudCB0byBzZWUgaG93IHRoYXQmIzM5O3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGlzIGZvcndhcmQgZGVjbGFyZWQgaXRlbS4gVGhhdCYjMzk7cyBhIGtleSBwYXJ0IG9mIHRoaXMgd2hvbGUgZmxvdywgc28gSSYjMzk7bGwgc2VlIHdoYXQgaXQmIzM5O3MgZG9pbmcgd2l0aCBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTg6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzYwOlx0XHRcdCAgICAgICBmdWxsX3BhdGgsIHNydl9zZXNzLVx1MDAzZXNlc3NuYW1lLCBzcnZfc2Vzc19kZXYpO1xuIDc2MTpcdFx0XHRyZXQgPSBQVFJfRVJSKHNydl9zZXNzX2Rldik7XG4gNzYyOlx0XHRcdGdvdG8gc3J2X2Rldl9wdXQ7XG4gNzYzOlx0XHR9XG4gNzY0Olx0XG4gNzY1Olx0XHQvKiBDcmVhdGUgdGhlIHNydl9kZXYgc3lzZnMgZmlsZXMgaWYgdGhleSBoYXZlbiYjMzk7dCBiZWVuIGNyZWF0ZWQgeWV0LiBUaGVcbiA3NjY6XHRcdCAqIHJlYXNvbiB0byBkZWxheSB0aGUgY3JlYXRpb24gaXMgbm90IHRvIGNyZWF0ZSB0aGUgc3lzZnMgZmlsZXMgYmVmb3JlXG4gNzY3Olx0XHQgKiB3ZSBhcmUgc3VyZSB0aGUgZGV2aWNlIGNhbiBiZSBvcGVuZWQuXG4gNzY4Olx0XHQgKi9cbiA3Njk6XHRcdG11dGV4X2xvY2soXHUwMDI2c3J2X2Rldi1cdTAwM2Vsb2NrKTtcbiA3NzA6XHRcdGlmICghc3J2X2Rldi1cdTAwM2VkZXZfa29iai5zdGF0ZV9pbl9zeXNmcykge1xuIDc3MTpcdFx0XHRyZXQgPSBybmJkX3Nydl9jcmVhdGVfZGV2X3N5c2ZzKHNydl9kZXYsIGZpbGVfYmRldihiZGV2X2ZpbGUpKTtcbiA3NzI6XHRcdFx0aWYgKHJldCkge1xuIDc3MzpcdFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZzcnZfZGV2LVx1MDAzZWxvY2spO1xuIDc3NDpcdFx0XHRcdHJuYmRfc3J2X2VycihzcnZfc2Vzc19kZXYsXG4gNzc1Olx0XHRcdFx0XHQgICAgICBcJiMzNDtPcGVuaW5nIGRldmljZSBmYWlsZWQsIGZhaWxlZCB0byBjcmVhdGUgZGV2aWNlIHN5c2ZzIGZpbGVzLCBlcnI6ICVkXFxuXCYjMzQ7LFxuIDc3NjpcdFx0XHRcdFx0ICAgICAgcmV0KTtcbiA3Nzc6XHRcdFx0XHRnb3RvIGZyZWVfc3J2X3Nlc3NfZGV2O1xuIDc3ODpcdFx0XHR9XG4gNzc5Olx0XHR9XG4gNzgwOlx0XG4gNzgxOlx0XHQvKlxuIDc4MjpcdFx0ICogQWRkIHRoZSBzZXNzaW9uIGRldmljZSB0byB0aGUgbGlzdCBiZWZvcmUgaW5pdGlhbGl6aW5nIGl0c1xuIDc4MzpcdFx0ICoga29iamVjdC4gSWYgc3lzZnMgY3JlYXRpb24gZmFpbHMsIGtvYmplY3RfcHV0KCkgaW52b2tlcyB0aGVcbiA3ODQ6XHRcdCAqIHJlbGVhc2UgY2FsbGJhY2ssIHdoaWNoIHJlbW92ZXMgdGhlIG9iamVjdCBmcm9tIHRoaXMgbGlzdCBhbmRcbiA3ODU6XHRcdCAqIHJlbGVhc2VzIGFsbCByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzZXNzaW9uIGRldmljZS5cbiA3ODY6XHRcdCAqL1xuIDc4NzpcdFx0bGlzdF9hZGQoXHUwMDI2c3J2X3Nlc3NfZGV2LVx1MDAzZWRldl9saXN0LCBcdTAwMjZzcnZfZGV2LVx1MDAzZXNlc3NfZGV2X2xpc3QpO1xuIDc4ODpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnNydl9kZXYtXHUwMDNlbG9jayk7XG4gNzg5Olx0XG4gNzkwOlx0XHRyZXQgPSBybmJkX3Nydl9jcmVhdGVfZGV2X3Nlc3Npb25fc3lzZnMoc3J2X3Nlc3NfZGV2KTtcbiA3OTE6XHRcdGlmIChyZXQpIHtcbiA3OTI6XHRcdFx0cHJfZXJyKFwmIzM0O09wZW5pbmcgZGV2aWNlICYjMzk7JXMmIzM5OyBvbiBzZXNzaW9uICVzIGZhaWxlZCwgZmFpbGVkIHRvIGNyZWF0ZSBkZXYgY2xpZW50IHN5c2ZzIGZpbGVzLCBlcnI6ICVkXFxuXCYjMzQ7LFxuIDc5MzpcdFx0XHQgICAgICAgZnVsbF9wYXRoLCBzcnZfc2Vzcy1cdTAwM2VzZXNzbmFtZSwgcmV0KTtcbiA3OTQ6XHRcdFx0Z290byBmcmVlX3BhdGg7XG4gNzk1Olx0XHR9XG4gNzk2Olx0XG4gNzk3Olx0XHRybmJkX3Nydl9pbmZvKHNydl9zZXNzX2RldiwgXCYjMzQ7T3BlbmVkIGRldmljZSAmIzM5OyVzJiMzOTtcXG5cJiMzNDssIHNydl9kZXYtXHUwMDNlbmFtZSk7XG4gNzk4Olx0XG4gNzk5Olx0XHRrZnJlZShmdWxsX3BhdGgpO1xuIDgwMDpcdFxuIDgwMTpcdGZpbGxfcmVzcG9uc2U6XG4gODAyOlx0XHRybmJkX3Nydl9maWxsX21zZ19vcGVuX3JzcChyc3AsIHNydl9zZXNzX2Rldik7XG4gODAzOlx0XHRtdXRleF91bmxvY2soXHUwMDI2c3J2X3Nlc3MtXHUwMDNlbG9jayk7XG4gODA0Olx0XHRyZXR1cm4gMDtcbiA4MDU6XHRcbiA4MDY6XHRmcmVlX3Nydl9zZXNzX2RldjpcbiA4MDc6XHRcdHhhX2VyYXNlKFx1MDAyNnNydl9zZXNzLVx1MDAzZWluZGV4X2lkciwgc3J2X3Nlc3NfZGV2LVx1MDAzZWRldmljZV9pZCk7XG4gODA4Olx0XHRzeW5jaHJvbml6ZV9yY3UoKTtcbiA4MDk6XHRcdGtmcmVlKHNydl9zZXNzX2Rldik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE4OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5MzYKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDcml0aWNhbCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBwcmV0dHkgc3BlY2lmaWMgYnVnIGluIGBybmJkX3Nydl9jcmVhdGVfZGV2X3Nlc3Npb25fc3lzZnNgLiBBcHBhcmVudGx5LCB0aGUgb2xkIGNvZGUgaGFkIGEgbmFzdHkgaGFiaXQgb2YgZ29pbmcgZGlyZWN0bHkgdG8gYGZyZWVfc3J2X3Nlc3NfZGV2YCB3aGVuIGl0IGZhaWxlZC4gTm93LCBpdCYjMzk7cyBqdW1waW5nIHRvIGBmcmVlX3BhdGhgIGluc3RlYWQsIHdoaWNoICpzaG91bGQqIGJlIGEgYmV0dGVyIGFwcHJvYWNoLiAKCkJ1dCBob2xkIG9uIGEgc2Vjb25kLi4uIGBmcmVlX3BhdGhgIGlzbiYjMzk7dCBzaG93aW5nIHVwIGluIHRoZSByZWFkLWZpbGUgb3V0cHV0LiBUaGF0JiMzOTtzIHN0cmFuZ2UsIGFuZCB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggYGZyZWVfcGF0aGAgYW5kIHdoeSBpdCYjMzk7cyBub3QgaW1tZWRpYXRlbHkgdmlzaWJsZS4gVGhpcyBmZWVscyBsaWtlIHRoZXJlJiMzOTtzIGEgbWlzc2luZyBwaWVjZSB0byB0aGUgcHV6emxlLCBhbmQgSSBuZWVkIHRvIGZpbmQgaXQuIFRpbWUgdG8ga2VlcCByZWFkaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxODozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MDA6XHRcbiA4MDE6XHRmaWxsX3Jlc3BvbnNlOlxuIDgwMjpcdFx0cm5iZF9zcnZfZmlsbF9tc2dfb3Blbl9yc3AocnNwLCBzcnZfc2Vzc19kZXYpO1xuIDgwMzpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnNydl9zZXNzLVx1MDAzZWxvY2spO1xuIDgwNDpcdFx0cmV0dXJuIDA7XG4gODA1Olx0XG4gODA2Olx0ZnJlZV9zcnZfc2Vzc19kZXY6XG4gODA3Olx0XHR4YV9lcmFzZShcdTAwMjZzcnZfc2Vzcy1cdTAwM2VpbmRleF9pZHIsIHNydl9zZXNzX2Rldi1cdTAwM2VkZXZpY2VfaWQpO1xuIDgwODpcdFx0c3luY2hyb25pemVfcmN1KCk7XG4gODA5Olx0XHRrZnJlZShzcnZfc2Vzc19kZXYpO1xuIDgxMDpcdHNydl9kZXZfcHV0OlxuIDgxMTpcdFx0aWYgKG9wZW5fbXNnLVx1MDAzZWFjY2Vzc19tb2RlICE9IFJOQkRfQUNDRVNTX1JPKSB7XG4gODEyOlx0XHRcdG11dGV4X2xvY2soXHUwMDI2c3J2X2Rldi1cdTAwM2Vsb2NrKTtcbiA4MTM6XHRcdFx0c3J2X2Rldi1cdTAwM2VvcGVuX3dyaXRlX2NudC0tO1xuIDgxNDpcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2c3J2X2Rldi1cdTAwM2Vsb2NrKTtcbiA4MTU6XHRcdH1cbiA4MTY6XHRcdHJuYmRfcHV0X3Nydl9kZXYoc3J2X2Rldik7XG4gODE3Olx0YmxrZGV2X3B1dDpcbiA4MTg6XHRcdGZwdXQoYmRldl9maWxlKTtcbiA4MTk6XHRmcmVlX3BhdGg6XG4gODIwOlx0XHRrZnJlZShmdWxsX3BhdGgpO1xuIDgyMTpcdHJlamVjdDpcbiA4MjI6XHRcdG11dGV4X3VubG9jayhcdTAwMjZzcnZfc2Vzcy1cdTAwM2Vsb2NrKTtcbiA4MjM6XHRcdHJldHVybiByZXQ7XG4gODI0Olx0fVxuIDgyNTpcdFxuIDgyNjpcdHN0YXRpYyBzdHJ1Y3QgcnRyc19zcnZfY3R4ICpydHJzX2N0eDtcbiA4Mjc6XHRcbiA4Mjg6XHRzdGF0aWMgc3RydWN0IHJ0cnNfc3J2X29wcyBydHJzX29wcztcbiA4Mjk6XHRzdGF0aWMgaW50IF9faW5pdCBybmJkX3Nydl9pbml0X21vZHVsZSh2b2lkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxODozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjkwCgkJCQkJCQlvdXRwdXQ6IDUyCgkJCQkJCQl0aG91Z2h0czogMTM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVzb3VyY2UgQ2xlYW51cCBQYXRoKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBgZnJlZV9wYXRoYCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBmdW5jdGlvbjogaXQgZnJlZXMgYGZ1bGxfcGF0aGAgYW5kIHRoZW4gcmV0dXJucyBgcmV0YC4gQnV0IHdhaXQsIHNvbWV0aGluZyBzZWVtcyBvZmYuIElmIHRoZSBleGVjdXRpb24ganVtcHMgZGlyZWN0bHkgdG8gYGZyZWVfcGF0aGAsIGl0IG1lYW5zIHRoZSBjb2RlIGlzIHNraXBwaW5nIHRoZSBjYWxscyB0byBgZnJlZV9zcnZfc2Vzc19kZXZgLCBgc3J2X2Rldl9wdXRgLCBhbmQgYGJsa2Rldl9wdXRgLgoKVGhlIHF1ZXN0aW9uIHRoYXQgaW1tZWRpYXRlbHkgcG9wcyBpbnRvIG15IGhlYWQgaXMgKndoeSo/IFdoeSBhcmUgdGhvc2UgY2xlYW51cCBmdW5jdGlvbnMgYmVpbmcgYnlwYXNzZWQ/IE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGlzIHJlbGF0ZXMgdG8gdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBrb2JqZWN0IHdpdGhpbiBgcm5iZF9zcnZfY3JlYXRlX2Rldl9zZXNzaW9uX3N5c2ZzYC4gSWYgdGhhdCBpbml0aWFsaXphdGlvbiBmYWlscywgYSBga29iamVjdF9wdXRgICpzaG91bGQqIGJlIGNhbGxlZCwgYnV0IGlzIHRoYXQgaGFuZGxlZCBpbnRlcm5hbGx5IHdpdGhpbiBgcm5iZF9zcnZfY3JlYXRlX2Rldl9zZXNzaW9uX3N5c2ZzYCBvciBieSB0aGUgY2FsbGluZyBmdW5jdGlvbj8gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHZlcmlmeSBob3cgYHJuYmRfc3J2X2NyZWF0ZV9kZXZfc2Vzc2lvbl9zeXNmc2AgaGFuZGxlcyBmYWlsdXJlcyB0byBjbGVhciB1cCB0aGUgY29uZnVzaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxODozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtybmJkX3Nydl9jcmVhdGVfZGV2X3Nlc3Npb25fc3lzZnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYtc3lzZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYtc3lzZnMuYz0xODc9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgcm5iZF9zcnZfc2Vzc19kZXZfa3R5cGUgPSB7XG4tLVxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LXN5c2ZzLmMtMTkxLVxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LXN5c2ZzLmM6MTkyOmludCBybmJkX3Nydl9jcmVhdGVfZGV2X3Nlc3Npb25fc3lzZnMoc3RydWN0IHJuYmRfc3J2X3Nlc3NfZGV2ICpzZXNzX2RldilcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi1zeXNmcy5jLTE5My17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE4OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyNTcKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBEaXZpbmcgaW50byBgcm5iZF9zcnZfY3JlYXRlX2Rldl9zZXNzaW9uX3N5c2ZzYCoqCgpSaWdodCwgbGV0JiMzOTtzIGRpc3NlY3QgYHJuYmRfc3J2X2NyZWF0ZV9kZXZfc2Vzc2lvbl9zeXNmc2AuIEkmIzM5O20gaW1tZWRpYXRlbHkgaW50ZXJlc3RlZCBpbiB0aGlzIGZ1bmN0aW9uJiMzOTtzIHNjb3BlLCBnaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24uIFRoZSAmIzM0O3JuYmQmIzM0OyBwcmVmaXggb2J2aW91c2x5IHRpZXMgaXQgdG8gdGhlIFJlbGlhYmxlIE5ldHdvcmsgQmxvY2sgRGV2aWNlIGRyaXZlciwgYW5kICYjMzQ7c3J2JiMzNDsgc3VnZ2VzdHMgc2VydmVyLXNpZGUgZnVuY3Rpb25hbGl0eS4gJiMzNDtjcmVhdGVfZGV2X3Nlc3Npb24mIzM0OyBpcyBhIGZhaXJseSBjbGVhciBpbmRpY2F0b3I7IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIGNyZWF0aW9uIG9mIGEgZGV2aWNlIHNlc3Npb24sIGxpa2VseSB0aWVkIHRvIGEgc3BlY2lmaWMgYmxvY2sgZGV2aWNlIGFic3RyYWN0aW9uLiBUaGUgJiMzNDtzeXNmcyYjMzQ7IHN1ZmZpeCBpcyB0aGUga2V5IGdpdmVhd2F5IGhlcmUg4oCTIGl0IGltcGxpZXMgYSBoZWF2eSByZWxpYW5jZSBvbiB0aGUgc3lzZnMgZmlsZXN5c3RlbSBpbnRlcmZhY2UgZm9yIGNvbmZpZ3VyYXRpb24sIG1hbmFnZW1lbnQsIG9yIHBlcmhhcHMgZXZlbiBjb250cm9sIG9mIHRoaXMgc2Vzc2lvbi4KCkkmIzM5O20gYWxyZWFkeSBtZW50YWxseSBjaGFydGluZyBvdXQgdGhlIHBvdGVudGlhbCBhcmVhcyBvZiBpbnRlcmVzdC4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQ6CgoqICAgKipEZXZpY2UgQ29udGV4dDoqKiBIb3cgdGhlIGJsb2NrIGRldmljZSBpbmZvcm1hdGlvbiBpcyBwYXNzZWQgaW4sIHByZXN1bWFibHkgZWl0aGVyIHRocm91Z2ggYSBzdHJ1Y3R1cmUgb3IgcGVyaGFwcyBieSBzb21lIGdsb2JhbCBjb250ZXh0LiBXZSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIG9uIGhvdyB0aGUgZGV2aWNlIGlzIHNlbGVjdGVkIChieSBkZXZpY2UgbmFtZSwgcGF0aCwgVVVJRCwgZXRjLikuCiogICAqKlNlc3Npb24gU3RydWN0dXJlOioqIFdoYXQgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBhbGxvY2F0ZWQgb3IgaW5pdGlhbGl6ZWQgaGVyZT8gV2UgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3csIGhvdyB0aGUgaW5mb3JtYXRpb24gaXMgYmVpbmcgZ2F0aGVyZWQsIHdoaWNoIG1pZ2h0IGJlIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgZGV2aWNlIHNlc3Npb24gaXMgc3RydWN0dXJlZC4KKiAgICoqc3lzZnMgSW50ZWdyYXRpb246KiogVGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIhIEkgZXhwZWN0IGEgbG90IG9mIGludGVyYWN0aW9uIHdpdGggc3lzZnMgZW50cmllcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaG93IHRoZSBmdW5jdGlvbiBjcmVhdGVzIG9yIHJlZ2lzdGVycyBzeXNmcyBmaWxlcyBhbmQgZGlyZWN0b3JpZXMuIFRoZSBrZXkgZWxlbWVudHMgd2lsbCBiZSB0aGUgYXR0cmlidXRlcywgYWNjZXNzIHBlcm1pc3Npb25zLCBhbmQgd2hhdCBrZXJuZWwgb2JqZWN0cyB0aGVzZSBlbnRyaWVzIGFyZSBleHBvc2luZyB0byB1c2VyIHNwYWNlLiBBcmUgd2UgdGFsa2luZyBhYm91dCBiYXNpYyBkZXZpY2UgYXR0cmlidXRlcyAobGlrZSBzaXplKSwgb3IgbW9yZSBjb21wbGV4IGNvbnRyb2wgaW50ZXJmYWNlcyAobGlrZSByZWFkL3dyaXRlIHRpbWVvdXRzIG9yIGNhY2hpbmcgY29uZmlndXJhdGlvbnMpPyBXZSB3aWxsIG5lZWQgdG8gaW52ZXN0aWdhdGUgYWxsIHRoZSBzeXNmcyBjYWxscyB0byBkZXRlcm1pbmUgdGhlaXIgb3ZlcmFsbCBmdW5jdGlvbi4KKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogR2l2ZW4gdGhhdCBzeXNmcyBvcGVyYXRpb25zIGNhbiBiZSBwcm9uZSB0byBlcnJvcnMsIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUgcm9idXN0IGVycm9yIGhhbmRsaW5nLiBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSByZXR1cm4gY29kZXMgYW5kIGVycm9yIHByb3BhZ2F0aW9uLgoqICAgKipDb25jdXJyZW5jeSBDb25jZXJuczoqKiBJcyB0aGVyZSBhbnl0aGluZyBoZXJlIHRoYXQgc3VnZ2VzdHMgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3Vlcz8gSSBleHBlY3QgdGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzLiBBcmUgbG9ja3MgZW1wbG95ZWQgb3Igb3RoZXIgbWVjaGFuaXNtcyB0byBzYWZlZ3VhcmQgYWdhaW5zdCByYWNlIGNvbmRpdGlvbnM/IEdpdmVuIHRoYXQgYHN5c2ZzYCBjYWxscyBjYW4gYmUgYmxvY2tpbmcgb3BlcmF0aW9ucywgaG93IGlzIHRoZSBzZXNzaW9uIGxpZmV0aW1lIG1hbmFnZWQ/CgpJbiBzaG9ydCwgSSYjMzk7bSBhbnRpY2lwYXRpbmcgYSBkZWVwIGRpdmUgaW50byB0aGUgc2VydmVyLXNpZGUgZXN0YWJsaXNobWVudCBhbmQgc3lzZnMgcmVwcmVzZW50YXRpb24gb2YgYW4gUk5CRCBkZXZpY2Ugc2Vzc2lvbi4gSXQmIzM5O2xsIGJlIGludGVyZXN0aW5nIHRvIHNlZSBob3cgdGhlIGtlcm5lbCBleHBvc2VzIHRoaXMgY29udHJvbCBwbGFuZSB0byB1c2VyIHNwYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxODozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi1zeXNmcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTkyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxOTI6XHRpbnQgcm5iZF9zcnZfY3JlYXRlX2Rldl9zZXNzaW9uX3N5c2ZzKHN0cnVjdCBybmJkX3Nydl9zZXNzX2RldiAqc2Vzc19kZXYpXG4gMTkzOlx0e1xuIDE5NDpcdFx0aW50IHJldDtcbiAxOTU6XHRcbiAxOTY6XHRcdHJldCA9IGtvYmplY3RfaW5pdF9hbmRfYWRkKFx1MDAyNnNlc3NfZGV2LVx1MDAzZWtvYmosIFx1MDAyNnJuYmRfc3J2X3Nlc3NfZGV2X2t0eXBlLFxuIDE5NzpcdFx0XHRcdFx0ICAgc2Vzc19kZXYtXHUwMDNlZGV2LVx1MDAzZWRldl9zZXNzaW9uc19rb2JqLCBcJiMzNDslc1wmIzM0OyxcbiAxOTg6XHRcdFx0XHRcdCAgIHNlc3NfZGV2LVx1MDAzZXNlc3MtXHUwMDNlc2Vzc25hbWUpO1xuIDE5OTpcdFx0aWYgKHJldCkge1xuIDIwMDpcdFx0XHRrb2JqZWN0X3B1dChcdTAwMjZzZXNzX2Rldi1cdTAwM2Vrb2JqKTtcbiAyMDE6XHRcdFx0cmV0dXJuIHJldDtcbiAyMDI6XHRcdH1cbiAyMDM6XHRcbiAyMDQ6XHRcdHJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cChcdTAwMjZzZXNzX2Rldi1cdTAwM2Vrb2JqLFxuIDIwNTpcdFx0XHRcdFx0IFx1MDAyNnJuYmRfc3J2X2RlZmF1bHRfZGV2X3Nlc3Npb25fYXR0cl9ncm91cCk7XG4gMjA2Olx0XHRpZiAocmV0KSB7XG4gMjA3Olx0XHRcdGtvYmplY3RfZGVsKFx1MDAyNnNlc3NfZGV2LVx1MDAzZWtvYmopO1xuIDIwODpcdFx0XHRrb2JqZWN0X3B1dChcdTAwMjZzZXNzX2Rldi1cdTAwM2Vrb2JqKTtcbiAyMDk6XHRcdH1cbiAyMTA6XHRcbiAyMTE6XHRcdHJldHVybiByZXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE4OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyMTgKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBEZWVwIGludG8gRGV2aWNlIFNlc3Npb24gQ3JlYXRpb24gYW5kIFJlc291cmNlIE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSBzZWUgYHJuYmRfc3J2X2NyZWF0ZV9kZXZfc2Vzc2lvbl9zeXNmc2AgaGFuZGxlcyBmYWlsdXJlIGJ5IGNhbGxpbmcgYGtvYmplY3RfcHV0KCZhbXA7c2Vzc19kZXYtJmd0O2tvYmopYC4gVGhhdCYjMzk7cyBnb29kLiBJdCBzdWdnZXN0cyB3ZSYjMzk7cmUgbGlrZWx5IG1hbmFnaW5nIHRoZSBkZXZpY2Ugc2Vzc2lvbiYjMzk7cyBsaWZlY3ljbGUsIGFuZCBzcGVjaWZpY2FsbHksIGl0cyBrZXJuZWwgb2JqZWN0LCB3aXRoIHNvbWUgY2FyZS4gTm93LCB0aGUga2V5IGlzIHRvIHVuZGVyc3RhbmQgKmhvdyogdGhhdCBvYmplY3QgaXMgbWFuYWdlZC4gVGhlIHVzZSBvZiBga29iamVjdF9wdXRgIGhpbnRzIGF0IGEgcmVmZXJlbmNlIGNvdW50aW5nIHNjaGVtZSwgd2hpY2ggaXMgcHJldHR5IHN0YW5kYXJkIGluIHRoZSBrZXJuZWwuIEJ1dCwgYmVmb3JlIEkgZ2V0IGFoZWFkIG9mIG15c2VsZiwgSSB3YW50IHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVzb3VyY2UgcmVsZWFzZSBwcm9jZXNzLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQgYHJuYmRfc3J2X3Nlc3NfZGV2X2t0eXBlYCBkZWZpbmVzIGEgcHJvcGVyIHJlbGVhc2UgZnVuY3Rpb24uIFRoYXQmIzM5O3MgdGhlIHZpdGFsIHBpZWNlIHRvIHZlcmlmeSB0aGUgcHJvcGVyIGNsZWFudXAgb2YgdGhpcyBwYXJ0aWN1bGFyIG9iamVjdC4gSSBuZWVkIHRvIGNoZWNrIHRoZSByZWxlYXNlIGZ1bmN0aW9uIHRvIGtub3cgaWYgaXRzIHJlZmVyZW5jZSBjb3VudGluZyBpcyB3b3JraW5nIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTg6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYtc3lzZnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTcwOlx0dm9pZCBybmJkX3Nydl9kZXN0cm95X2Rldl9zZXNzaW9uX3N5c2ZzKHN0cnVjdCBybmJkX3Nydl9zZXNzX2RldiAqc2Vzc19kZXYpXG4gMTcxOlx0e1xuIDE3MjpcdFx0c3lzZnNfcmVtb3ZlX2dyb3VwKFx1MDAyNnNlc3NfZGV2LVx1MDAzZWtvYmosXG4gMTczOlx0XHRcdFx0ICAgXHUwMDI2cm5iZF9zcnZfZGVmYXVsdF9kZXZfc2Vzc2lvbl9hdHRyX2dyb3VwKTtcbiAxNzQ6XHRcbiAxNzU6XHRcdGtvYmplY3RfZGVsKFx1MDAyNnNlc3NfZGV2LVx1MDAzZWtvYmopO1xuIDE3NjpcdFx0a29iamVjdF9wdXQoXHUwMDI2c2Vzc19kZXYtXHUwMDNla29iaik7XG4gMTc3Olx0fVxuIDE3ODpcdFxuIDE3OTpcdHN0YXRpYyB2b2lkIHJuYmRfc3J2X3Nlc3NfZGV2X3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopXG4gMTgwOlx0e1xuIDE4MTpcdFx0c3RydWN0IHJuYmRfc3J2X3Nlc3NfZGV2ICpzZXNzX2RldjtcbiAxODI6XHRcbiAxODM6XHRcdHNlc3NfZGV2ID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBybmJkX3Nydl9zZXNzX2Rldiwga29iaik7XG4gMTg0Olx0XHRybmJkX2Rlc3Ryb3lfc2Vzc19kZXYoc2Vzc19kZXYsIHNlc3NfZGV2LVx1MDAzZWtlZXBfaWQpO1xuIDE4NTpcdH1cbiAxODY6XHRcbiAxODc6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBybmJkX3Nydl9zZXNzX2Rldl9rdHlwZSA9IHtcbiAxODg6XHRcdC5zeXNmc19vcHNcdD0gXHUwMDI2a29ial9zeXNmc19vcHMsXG4gMTg5Olx0XHQucmVsZWFzZVx0PSBybmJkX3Nydl9zZXNzX2Rldl9yZWxlYXNlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxODozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTEyCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyB0aGUgU2Vzc2lvbiBSZWxlYXNlIFByb2Nlc3MqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IHRoZXNlIG5ldHdvcmsgYmxvY2sgZGV2aWNlIHNlc3Npb25zIGFyZSBoYW5kbGVkLiBJIHNlZSB0aGF0IGBybmJkX3Nydl9zZXNzX2Rldl9yZWxlYXNlYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGNhbGxlZCB3aGVuIGEgc2Vzc2lvbiBpcyBiZWluZyByZWxlYXNlZC4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHdoYXQmIzM5O3MgaGFwcGVuaW5nICppbnNpZGUqIHRoYXQgZnVuY3Rpb24sIHRvIGZpZ3VyZSBvdXQgaG93IGl0JiMzOTtzIGFjdHVhbGx5IGNsZWFuaW5nIHVwIHRoZSByZXNvdXJjZXMuIFJpZ2h0LCBsZXQmIzM5O3MgbG9vayBhdCBgcm5iZF9kZXN0cm95X3Nlc3NfZGV2YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiBob3cgdGhlIHNlc3Npb24gZGV2aWNlIGlzIGRlc3Ryb3llZCB0byBlbnN1cmUgbm8gbGVha3Mgb3IgZGFuZ2xpbmcgcG9pbnRlcnMuIFRoaXMgZmVlbHMgbGlrZSBpdCYjMzk7cyB0aGUgY29yZSBvZiB0aGUgY2xlYW51cCBwYXRoLCBhbmQgdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJuYWxzIG9mIGBybmJkX2Rlc3Ryb3lfc2Vzc19kZXZgIGlzIGNyaXRpY2FsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxODozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtybmJkX2Rlc3Ryb3lfc2Vzc19kZXYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYz0yMTQ9c3RhdGljIHZvaWQgcm5iZF9wdXRfc3J2X2RldihzdHJ1Y3Qgcm5iZF9zcnZfZGV2ICpkZXYpXG4tLVxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmMtMjE4LVxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM6MjE5OnZvaWQgcm5iZF9kZXN0cm95X3Nlc3NfZGV2KHN0cnVjdCBybmJkX3Nydl9zZXNzX2RldiAqc2Vzc19kZXYsIGJvb2wga2VlcF9pZClcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jLTIyMC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE4OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzE0CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIGBybmJkX2Rlc3Ryb3lfc2Vzc19kZXZgLCBicm9rZW4gZG93biBhcyBpZiBJJiMzOTttIG5hdmlnYXRpbmcgdGhlIGNvZGUgbXlzZWxmOgoKKipVbmRlcnN0YW5kaW5nIHRoZSBGdW5jdGlvbjogcm5iZF9kZXN0cm95X3Nlc3NfZGV2KioKCkFscmlnaHQsIHRoZSBuYW1lIHRlbGxzIG1lIGV4YWN0bHkgd2hhdCB0aGlzIGZ1bmN0aW9uICpzaG91bGQqIGRvOiBkZXN0cm95IGEgc2Vzc2lvbiBhbmQgaXRzIGFzc29jaWF0ZWQgZGV2aWNlIGluIGFuIFJEQiAoUmVtb3RlIEJsb2NrIERldmljZSkgY29udGV4dC4gVGhhdCBpbXBsaWVzIGNsZWFudXAsIHJlc291cmNlIHJlbGVhc2UsIGFuZCBwb3RlbnRpYWxseSBkaXNjb25uZWN0aW5nIGZyb20gYSByZW1vdGUgc3RvcmFnZSBlbmRwb2ludC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIG9wZXJhdGlvbnMgdGhhdCBhcmUgY3JpdGljYWwgZm9yIGRhdGEgaW50ZWdyaXR5IGFuZCBzeXN0ZW0gc3RhYmlsaXR5LiBMZXQmIzM5O3Mgc2VlIGhvdyBpdCBnb2VzIGFib3V0IHRoaXMgdGFzay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQ6IFdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/IFdoYXQgcmVzb3VyY2VzIGFyZSBiZWluZyBoYW5kbGVkPyBBbmQsIG9mIGNvdXJzZSwgd2hhdCYjMzk7cyB0aGUgZXJyb3IgaGFuZGxpbmcgbGlrZT8gVGhpcyBpcyBhbHdheXMgYSBjcml0aWNhbCBwb2ludCBpbiB0aGVzZSB0eXBlcyBvZiBmdW5jdGlvbnMsIGFzIGJhZCBlcnJvciBoYW5kbGluZyBjYW4gbGVhZCB0byBhbGwgc29ydHMgb2YgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxODozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMTk6XHR2b2lkIHJuYmRfZGVzdHJveV9zZXNzX2RldihzdHJ1Y3Qgcm5iZF9zcnZfc2Vzc19kZXYgKnNlc3NfZGV2LCBib29sIGtlZXBfaWQpXG4gMjIwOlx0e1xuIDIyMTpcdFx0REVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0soZGMpO1xuIDIyMjpcdFxuIDIyMzpcdFx0aWYgKGtlZXBfaWQpXG4gMjI0Olx0XHRcdC8qIGZyZWUgdGhlIHJlc291cmNlcyBmb3IgdGhlIGlkIGJ1dCBkb24mIzM5O3QgICovXG4gMjI1Olx0XHRcdC8qIGFsbG93IHRvIHJlLXVzZSB0aGUgaWQgaXRzZWxmIGJlY2F1c2UgaXQgKi9cbiAyMjY6XHRcdFx0LyogaXMgc3RpbGwgdXNlZCBieSB0aGUgY2xpZW50ICAgICAgICAgICAgICAqL1xuIDIyNzpcdFx0XHR4YV9jbXB4Y2hnKFx1MDAyNnNlc3NfZGV2LVx1MDAzZXNlc3MtXHUwMDNlaW5kZXhfaWRyLCBzZXNzX2Rldi1cdTAwM2VkZXZpY2VfaWQsXG4gMjI4Olx0XHRcdFx0ICAgc2Vzc19kZXYsIE5VTEwsIDApO1xuIDIyOTpcdFx0ZWxzZVxuIDIzMDpcdFx0XHR4YV9lcmFzZShcdTAwMjZzZXNzX2Rldi1cdTAwM2VzZXNzLVx1MDAzZWluZGV4X2lkciwgc2Vzc19kZXYtXHUwMDNlZGV2aWNlX2lkKTtcbiAyMzE6XHRcdHN5bmNocm9uaXplX3JjdSgpO1xuIDIzMjpcdFxuIDIzMzpcdFx0c2Vzc19kZXYtXHUwMDNlZGVzdHJveV9jb21wID0gXHUwMDI2ZGM7XG4gMjM0Olx0XHRybmJkX3B1dF9zZXNzX2RldihzZXNzX2Rldik7XG4gMjM1Olx0XHR3YWl0X2Zvcl9jb21wbGV0aW9uKFx1MDAyNmRjKTsgLyogd2FpdCBmb3IgaW5mbGlnaHRzIHRvIGRyb3AgdG8gemVybyAqL1xuIDIzNjpcdFxuIDIzNzpcdFx0ZnB1dChzZXNzX2Rldi1cdTAwM2ViZGV2X2ZpbGUpO1xuIDIzODpcdFx0bXV0ZXhfbG9jayhcdTAwMjZzZXNzX2Rldi1cdTAwM2VkZXYtXHUwMDNlbG9jayk7XG4gMjM5Olx0XHRsaXN0X2RlbChcdTAwMjZzZXNzX2Rldi1cdTAwM2VkZXZfbGlzdCk7XG4gMjQwOlx0XHRpZiAoIXNlc3NfZGV2LVx1MDAzZXJlYWRvbmx5KVxuIDI0MTpcdFx0XHRzZXNzX2Rldi1cdTAwM2VkZXYtXHUwMDNlb3Blbl93cml0ZV9jbnQtLTtcbiAyNDI6XHRcdG11dGV4X3VubG9jayhcdTAwMjZzZXNzX2Rldi1cdTAwM2VkZXYtXHUwMDNlbG9jayk7XG4gMjQzOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE4OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDAzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvbmNlcm4gUmVnYXJkaW5nIGBybmJkX2Rlc3Ryb3lfc2Vzc19kZXZgIGFuZCBMaXN0IENvcnJ1cHRpb24qKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gVGhpcyBgcm5iZF9kZXN0cm95X3Nlc3NfZGV2YCBmdW5jdGlvbuKApiBpdCYjMzk7cyBjYWxsaW5nIGBsaXN0X2RlbCgmYW1wO3Nlc3NfZGV2LSZndDtkZXZfbGlzdClgLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGZsYWdzIGEgcG90ZW50aWFsIGlzc3VlIGhlcmUuIElmLCBhbmQgdGhhdCYjMzk7cyBhICpiaWcqIGlmLCB0aGUgYHNlc3NfZGV2YCBzdHJ1Y3R1cmUgd2FzICpuZXZlciogYWRkZWQgdG8gdGhlIGBzZXNzX2Rldi0mZ3Q7ZGV2LSZndDtzZXNzX2Rldl9saXN0YCBiZWZvcmUgYHJuYmRfc3J2X2NyZWF0ZV9kZXZfc2Vzc2lvbl9zeXNmc2AgZmFpbGVkLCB0aGVuIHRoYXQgYGxpc3RfZGVsYCBjYWxsIGlzIGdvaW5nIHRvIGNhdXNlIGEgY3Jhc2gsIG9yIGF0IHRoZSB2ZXJ5IGxlYXN0LCBjb3JydXB0IHRoZSBsaXN0LiBUaGUgYGRldl9saXN0YCB3b3VsZCBiZSBlaXRoZXIgdW5pbml0aWFsaXplZCBvciBhbiBlbXB0eSBjb250YWluZXIsIGFuZCBhdHRlbXB0aW5nIHRvIHJlbW92ZSBhbiBlbGVtZW50IHRoYXQgaXNuJiMzOTt0IHBhcnQgb2YgaXQgaXMgYSBkaXNhc3RlciB3YWl0aW5nIHRvIGhhcHBlbi4gV2UmIzM5O3ZlIHNlZW4gdGhpcyBwYXR0ZXJuIGJlZm9yZSwgYW5kIEkmIzM5O20gZ2V0dGluZyBhIGJhZCBmZWVsaW5nLiBSaWdodCwgdGltZSB0byBkaWcgZGVlcGVyLiBXaGVyZSBleGFjdGx5IGlzIGBkZXZfbGlzdGAgaW5pdGlhbGl6ZWQ/IE5lZWQgdG8gdHJhY2UgYmFjayBhbmQgdmVyaWZ5IHRoYXQgaXQmIzM5O3MgYmVpbmcgcHJvcGVybHkgbWFuYWdlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTg6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2X2xpc3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYz02Nj1zdGF0aWMgTElTVF9IRUFEKHNlc3NfbGlzdCk7XG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYzo2NzpzdGF0aWMgTElTVF9IRUFEKGRldl9saXN0KTtcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jLTY4LVxuLS1cbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jPTE5Mj1zdGF0aWMgdm9pZCBkZXN0cm95X2RldmljZShzdHJ1Y3Qga3JlZiAqa3JlZilcbi0tXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy0xOTUtXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYzoxOTY6XHRXQVJOX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2ZGV2LVx1MDAzZXNlc3NfZGV2X2xpc3QpLFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmMtMTk3LVx0XHQgIFwmIzM0O0RldmljZSAlcyBpcyBiZWluZyBkZXN0cm95ZWQgYnV0IHN0aWxsIGluIHVzZSFcXG5cJiMzNDssXG4tLVxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM9MjE5PXZvaWQgcm5iZF9kZXN0cm95X3Nlc3NfZGV2KHN0cnVjdCBybmJkX3Nydl9zZXNzX2RldiAqc2Vzc19kZXYsIGJvb2wga2VlcF9pZClcbi0tXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy0yMzgtXHRtdXRleF9sb2NrKFx1MDAyNnNlc3NfZGV2LVx1MDAzZWRldi1cdTAwM2Vsb2NrKTtcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jOjIzOTpcdGxpc3RfZGVsKFx1MDAyNnNlc3NfZGV2LVx1MDAzZWRldl9saXN0KTtcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jLTI0MC1cdGlmICghc2Vzc19kZXYtXHUwMDNlcmVhZG9ubHkpXG4tLVxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM9NDQwPXN0YXRpYyBzdHJ1Y3Qgcm5iZF9zcnZfZGV2ICpybmJkX3Nydl9pbml0X3Nydl9kZXYoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcbi0tXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy00NDktXHRrcmVmX2luaXQoXHUwMDI2ZGV2LVx1MDAzZWtyZWYpO1xuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM6NDUwOlx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZGV2LVx1MDAzZXNlc3NfZGV2X2xpc3QpO1xuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmMtNDUxLVx0bXV0ZXhfaW5pdChcdTAwMjZkZXYtXHUwMDNlbG9jayk7XG4tLVxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM9NDU3PXJuYmRfc3J2X2ZpbmRfb3JfYWRkX3Nydl9kZXYoc3RydWN0IHJuYmRfc3J2X2RldiAqbmV3X2Rldilcbi0tXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy00NjEtXHRzcGluX2xvY2soXHUwMDI2ZGV2X2xvY2spO1xuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM6NDYyOlx0bGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsIFx1MDAyNmRldl9saXN0LCBsaXN0KSB7XG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy00NjMtXHRcdGlmICghc3RybmNtcChkZXYtXHUwMDNlbmFtZSwgbmV3X2Rldi1cdTAwM2VuYW1lLCBzaXplb2YoZGV2LVx1MDAzZW5hbWUpKSkge1xuLS1cbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jLTQ3My1cdH1cbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jOjQ3NDpcdGxpc3RfYWRkKFx1MDAyNm5ld19kZXYtXHUwMDNlbGlzdCwgXHUwMDI2ZGV2X2xpc3QpO1xuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmMtNDc1LVx0c3Bpbl91bmxvY2soXHUwMDI2ZGV2X2xvY2spO1xuLS1cbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jPTY5MT1zdGF0aWMgaW50IHByb2Nlc3NfbXNnX29wZW4oc3RydWN0IHJuYmRfc3J2X3Nlc3Npb24gKnNydl9zZXNzLFxuLS1cbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jLTc4Ni1cdCAqL1xuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM6Nzg3Olx0bGlzdF9hZGQoXHUwMDI2c3J2X3Nlc3NfZGV2LVx1MDAzZWRldl9saXN0LCBcdTAwMjZzcnZfZGV2LVx1MDAzZXNlc3NfZGV2X2xpc3QpO1xuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmMtNzg4LVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnNydl9kZXYtXHUwMDNlbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE4OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzI4CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkluaXRpYWwgQXNzZXNzbWVudCBvZiBgc3J2X3Nlc3NfZGV2YCBBbGxvY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgbXkgZmlyc3QgdGhvdWdodCBpcywgaGFuZyBvbiBhIHNlY29uZC4gSSBzZWUgdGhhdCBgc3J2X3Nlc3NfZGV2YCwgdGhhdCBjcnVjaWFsIHN0cnVjdHVyZSwgaXMgYmVpbmcgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jYCBpbnNpZGUgYHByb2Nlc3NfbXNnX29wZW5gLiBBbHJpZ2h0LCB0aGF0JiMzOTtzIGltcG9ydGFudCB0byByZW1lbWJlci4gYGt6YWxsb2NgIGlzIHRoZSBrZXl3b3JkIGhlcmUgLSB6ZXJvLWluaXRpYWxpemVkIGFsbG9jYXRpb24uIFRoYXQgbWVhbnMgd2UmIzM5O3JlIHN0YXJ0aW5nIHdpdGggYSBjbGVhbiBzbGF0ZSwgZXZlcnl0aGluZyBpbiB0aGF0IGFsbG9jYXRlZCBtZW1vcnkgaXMgZ3VhcmFudGVlZCB0byBiZSB6ZXJvLiBObyBnYXJiYWdlIHZhbHVlcy4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHByZWRpY3RhYmxlIGJlaGF2aW9yLCBlc3BlY2lhbGx5IGlmIHNvbWUgcGFydHMgb2YgdGhlIHN0cnVjdHVyZSBhcmUgaW50ZW5kZWQgdG8gc3RvcmUgZmxhZ3MsIGNvdW50ZXJzLCBvciBwb2ludGVycyB0aGF0IHdpbGwgYmUgY2hlY2tlZCBpbW1lZGlhdGVseSBhZnRlciBhbGxvY2F0aW9uLiBUaGlzIGlzIGEgdmVyeSBiYXNpYyBidXQgdmVyeSBpbXBvcnRhbnQgdGhpbmcgdG8ga25vdywgYW5kIEkgbmVlZCB0byBrZWVwIGl0IGluIG1pbmQgYXMgSSBsb29rIGF0IHdoYXQgZm9sbG93cyB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxODozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MTA6XHRcbiA3MTE6XHRcdHNydl9zZXNzX2RldiA9IGZpbmRfc3J2X3Nlc3NfZGV2KHNydl9zZXNzLCBvcGVuX21zZy1cdTAwM2VkZXZfbmFtZSk7XG4gNzEyOlx0XHRpZiAoc3J2X3Nlc3NfZGV2KVxuIDcxMzpcdFx0XHRnb3RvIGZpbGxfcmVzcG9uc2U7XG4gNzE0Olx0XG4gNzE1Olx0XHRpZiAoKHN0cmxlbihkZXZfc2VhcmNoX3BhdGgpICYjNDM7IHN0cmxlbihvcGVuX21zZy1cdTAwM2VkZXZfbmFtZSkpXG4gNzE2Olx0XHQgICAgXHUwMDNlPSBQQVRIX01BWCkge1xuIDcxNzpcdFx0XHRwcl9lcnIoXCYjMzQ7T3BlbmluZyBkZXZpY2UgZm9yIHNlc3Npb24gJXMgZmFpbGVkLCBkZXZpY2UgcGF0aCB0b28gbG9uZy4gJiMzOTslcy8lcyYjMzk7IGlzIGxvbmdlciB0aGFuIFBBVEhfTUFYICglZClcXG5cJiMzNDssXG4gNzE4Olx0XHRcdCAgICAgICBzcnZfc2Vzcy1cdTAwM2VzZXNzbmFtZSwgZGV2X3NlYXJjaF9wYXRoLCBvcGVuX21zZy1cdTAwM2VkZXZfbmFtZSxcbiA3MTk6XHRcdFx0ICAgICAgIFBBVEhfTUFYKTtcbiA3MjA6XHRcdFx0cmV0ID0gLUVJTlZBTDtcbiA3MjE6XHRcdFx0Z290byByZWplY3Q7XG4gNzIyOlx0XHR9XG4gNzIzOlx0XHRpZiAoc3Ryc3RyKG9wZW5fbXNnLVx1MDAzZWRldl9uYW1lLCBcJiMzNDsuLlwmIzM0OykpIHtcbiA3MjQ6XHRcdFx0cHJfZXJyKFwmIzM0O09wZW5pbmcgZGV2aWNlIGZvciBzZXNzaW9uICVzIGZhaWxlZCwgZGV2aWNlIHBhdGggJXMgY29udGFpbnMgcmVsYXRpdmUgcGF0aCAuLlxcblwmIzM0OyxcbiA3MjU6XHRcdFx0ICAgICAgIHNydl9zZXNzLVx1MDAzZXNlc3NuYW1lLCBvcGVuX21zZy1cdTAwM2VkZXZfbmFtZSk7XG4gNzI2Olx0XHRcdHJldCA9IC1FSU5WQUw7XG4gNzI3Olx0XHRcdGdvdG8gcmVqZWN0O1xuIDcyODpcdFx0fVxuIDcyOTpcdFx0ZnVsbF9wYXRoID0gcm5iZF9zcnZfZ2V0X2Z1bGxfcGF0aChzcnZfc2Vzcywgb3Blbl9tc2ctXHUwMDNlZGV2X25hbWUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxODozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk2NAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIEkmIzM5O20gcmVhZHkuIExldCYjMzk7cyBzZWUgd2hhdCB5b3UmIzM5O3ZlIGdvdC4gSSYjMzk7bGwgYXBwcm9hY2ggdGhpcyBsaWtlIEkmIzM5O20gZGlzc2VjdGluZyBhIHJlc2VhcmNoIHBhcGVyLCBicmVha2luZyBkb3duIHRoZSBhdXRob3ImIzM5O3MgbG9naWMgYW5kIGZyYW1pbmcgaXQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2Vzcy4KCioqQW5hbHl6aW5nIHRoZSBUZXh0OiBBIERlZXBlciBEaXZlKioKCkFscmlnaHQsIHRoZSBpbnN0cnVjdGlvbiBpcyB0byByZWFkIHRoZSB0ZXh0LiBPa2F5LCBzaW1wbGUgZW5vdWdoLCBidXQgd2hlcmUgZG9lcyBpdCBsZWFkPyBXaGF0IHF1ZXN0aW9uIHdpbGwgYmUgYW5zd2VyZWQ/IFdoYXQgcHJvYmxlbSB3aWxsIGJlIHNvbHZlZD8gVGhpcyBpbml0aWFsIGRpcmVjdGl2ZSBzZXRzIHRoZSBzdGFnZS4gTm93LCBJIGhhdmUgdG8gYXNzdW1lIHRoZSBhdXRob3Igd2FudHMgbWUgdG8gcmVhZCB3aXRoIGEgcHVycG9zZSwgdG8gZXh0cmFjdCBpbmZvcm1hdGlvbi4gSSYjMzk7bGwgdHJ5IHRvIGZpbmQgdGhlIGhpZGRlbiBudWdnZXRzIG9mIHRob3VnaHQgYW5kIGludGVycHJldGF0aW9uIGhlcmUuIEZyb20gdGhlIGJlZ2lubmluZyBpdCBzZWVtcyBhcyB0aG91Z2ggdGhpcyBpcyBnb2luZyB0byBiZSBhYm91dCBnYWluaW5nIGEgd2lkZXIgdW5kZXJzdGFuZGluZyBvZiBhIHRvcGljLiBUaGlzIGlzIGp1c3QgYSBwcmVsaW1pbmFyeSBzdGVwLCB0aG91Z2guCgpJIGhhdmUgdG8gcmVhZCBmdXJ0aGVyIGRvd24gdG8gc2VlIHdoYXQgaW5zaWdodHMgSSBhbSBtZWFudCB0byBnbGVhbi4gSSBoYXZlIHRvIHJlbWFpbiBvcGVuLW1pbmRlZCwgcmVhZHkgdG8gYWRqdXN0IG15IGV4aXN0aW5nIGFzc3VtcHRpb25zIGFuZCBleHBlcnRpc2UgdG8gYWNjb21tb2RhdGUgbmV3IHBlcnNwZWN0aXZlcy4gVGhlIG5leHQgdGV4dCBzaG91bGQgc3RhcnQgdG8gYnVpbGQgdXBvbiB0aGUgZmlyc3Qgc28gdGhhdCBJIGNhbiBnZXQgYSBiZXR0ZXIgaWRlYSBvZiB0aGUgYXV0aG9yJiMzOTtzIHRyYWluIG9mIHRob3VnaHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE4OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDczMDpcdFx0aWYgKElTX0VSUihmdWxsX3BhdGgpKSB7XG4gNzMxOlx0XHRcdHJldCA9IFBUUl9FUlIoZnVsbF9wYXRoKTtcbiA3MzI6XHRcdFx0cHJfZXJyKFwmIzM0O09wZW5pbmcgZGV2aWNlICYjMzk7JXMmIzM5OyBmb3IgY2xpZW50ICVzIGZhaWxlZCwgZmFpbGVkIHRvIGdldCBkZXZpY2UgZnVsbCBwYXRoLCBlcnI6ICVwZVxcblwmIzM0OyxcbiA3MzM6XHRcdFx0ICAgICAgIG9wZW5fbXNnLVx1MDAzZWRldl9uYW1lLCBzcnZfc2Vzcy1cdTAwM2VzZXNzbmFtZSwgZnVsbF9wYXRoKTtcbiA3MzQ6XHRcdFx0Z290byByZWplY3Q7XG4gNzM1Olx0XHR9XG4gNzM2Olx0XG4gNzM3Olx0XHRiZGV2X2ZpbGUgPSBiZGV2X2ZpbGVfb3Blbl9ieV9wYXRoKGZ1bGxfcGF0aCwgb3Blbl9mbGFncywgTlVMTCwgTlVMTCk7XG4gNzM4Olx0XHRpZiAoSVNfRVJSKGJkZXZfZmlsZSkpIHtcbiA3Mzk6XHRcdFx0cmV0ID0gUFRSX0VSUihiZGV2X2ZpbGUpO1xuIDc0MDpcdFx0XHRwcl9lcnIoXCYjMzQ7T3BlbmluZyBkZXZpY2UgJiMzOTslcyYjMzk7IG9uIHNlc3Npb24gJXMgZmFpbGVkLCBmYWlsZWQgdG8gb3BlbiB0aGUgYmxvY2sgZGV2aWNlLCBlcnI6ICVwZVxcblwmIzM0OyxcbiA3NDE6XHRcdFx0ICAgICAgIGZ1bGxfcGF0aCwgc3J2X3Nlc3MtXHUwMDNlc2Vzc25hbWUsIGJkZXZfZmlsZSk7XG4gNzQyOlx0XHRcdGdvdG8gZnJlZV9wYXRoO1xuIDc0MzpcdFx0fVxuIDc0NDpcdFxuIDc0NTpcdFx0c3J2X2RldiA9IHJuYmRfc3J2X2dldF9vcl9jcmVhdGVfc3J2X2RldihmaWxlX2JkZXYoYmRldl9maWxlKSwgc3J2X3Nlc3MsXG4gNzQ2Olx0XHRcdFx0XHRcdFx0ICBvcGVuX21zZy1cdTAwM2VhY2Nlc3NfbW9kZSk7XG4gNzQ3Olx0XHRpZiAoSVNfRVJSKHNydl9kZXYpKSB7XG4gNzQ4Olx0XHRcdHByX2VycihcJiMzNDtPcGVuaW5nIGRldmljZSAmIzM5OyVzJiMzOTsgb24gc2Vzc2lvbiAlcyBmYWlsZWQsIGNyZWF0aW5nIHNydl9kZXYgZmFpbGVkLCBlcnI6ICVwZVxcblwmIzM0OyxcbiA3NDk6XHRcdFx0ICAgICAgIGZ1bGxfcGF0aCwgc3J2X3Nlc3MtXHUwMDNlc2Vzc25hbWUsIHNydl9kZXYpO1xuIDc1MDpcdFx0XHRyZXQgPSBQVFJfRVJSKHNydl9kZXYpO1xuIDc1MTpcdFx0XHRnb3RvIGJsa2Rldl9wdXQ7XG4gNzUyOlx0XHR9XG4gNzUzOlx0XG4gNzU0Olx0XHRzcnZfc2Vzc19kZXYgPSBybmJkX3Nydl9jcmVhdGVfc2V0X3Nlc3NfZGV2KHNydl9zZXNzLCBvcGVuX21zZyxcbiA3NTU6XHRcdFx0XHRcdGJkZXZfZmlsZSxcbiA3NTY6XHRcdFx0XHRcdG9wZW5fbXNnLVx1MDAzZWFjY2Vzc19tb2RlID09IFJOQkRfQUNDRVNTX1JPLFxuIDc1NzpcdFx0XHRcdFx0c3J2X2Rldik7XG4gNzU4Olx0XHRpZiAoSVNfRVJSKHNydl9zZXNzX2RldikpIHtcbiA3NTk6XHRcdFx0cHJfZXJyKFwmIzM0O09wZW5pbmcgZGV2aWNlICYjMzk7JXMmIzM5OyBvbiBzZXNzaW9uICVzIGZhaWxlZCwgY3JlYXRpbmcgc2Vzc19kZXYgZmFpbGVkLCBlcnI6ICVwZVxcblwmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTg6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4NTkKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqRGVlcCBEaXZlIGludG8gYHJuYmRfc3J2X2NyZWF0ZV9zZXRfc2Vzc19kZXZgKioKCkFscmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoaXMgYHJuYmRfc3J2X2NyZWF0ZV9zZXRfc2Vzc19kZXZgIGZ1bmN0aW9uLiBUaGUga2V5IGhlcmUgaXMgaXRzIHJvbGUgaW4gYWxsb2NhdGluZyBhIGBzcnZfc2Vzc19kZXZgIHN0cnVjdHVyZS4gVGhhdCYjMzk7cyB0aGUgY29yZSBvZiBob3cgdGhpcyBzZXJ2aWNlIG1hbmFnZXMgZGV2aWNlIHNlc3Npb25zLCBzbyB1bmRlcnN0YW5kaW5nIGl0cyBpbml0aWFsaXphdGlvbiBpcyBwYXJhbW91bnQuIEkgbmVlZCB0byBjb25maXJtIHRoZSBjb3JyZWN0IGluc3RhbnRpYXRpb24gb2YgdGhhdCBzdHJ1Y3R1cmUuIEkga25vdyB0aGUgaW50cmljYWNpZXMgb2YgbWVtb3J5IG1hbmFnZW1lbnQgaW4gdGhpcyBjb250ZXh0LCBhbmQgd2FudCB0byBjb25maXJtIGl0cyBwcm9wZXIgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbCBzZXR0aW5ncy4gQW55IG1pc3N0ZXBzIGhlcmUgY2FuIHByb3BhZ2F0ZSBzZXJpb3VzIGVycm9ycywgc28gbGV0JiMzOTtzIGRpZyBkZWVwZXIgYW5kIHZlcmlmeSB0aGF0IGV2ZXJ5dGhpbmcgaXMgbGluaW5nIHVwIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTg6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cm5iZF9zcnZfY3JlYXRlX3NldF9zZXNzX2RldiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jPTU3Nz1zdGF0aWMgc3RydWN0IHJuYmRfc3J2X3Nlc3NfZGV2ICpcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jOjU3ODpybmJkX3Nydl9jcmVhdGVfc2V0X3Nlc3NfZGV2KHN0cnVjdCBybmJkX3Nydl9zZXNzaW9uICpzcnZfc2VzcyxcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jLTU3OS1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qgcm5iZF9tc2dfb3BlbiAqb3Blbl9tc2csXG4tLVxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM9NjkxPXN0YXRpYyBpbnQgcHJvY2Vzc19tc2dfb3BlbihzdHJ1Y3Qgcm5iZF9zcnZfc2Vzc2lvbiAqc3J2X3Nlc3MsXG4tLVxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmMtNzUzLVxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM6NzU0Olx0c3J2X3Nlc3NfZGV2ID0gcm5iZF9zcnZfY3JlYXRlX3NldF9zZXNzX2RldihzcnZfc2Vzcywgb3Blbl9tc2csXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy03NTUtXHRcdFx0XHRiZGV2X2ZpbGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE4OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzY5CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIGBybmJkX3Nydl9jcmVhdGVfc2V0X3Nlc3NfZGV2YDoKCioqVW5kZXJzdGFuZGluZyBgcm5iZF9zcnZfY3JlYXRlX3NldF9zZXNzX2RldmAqKgoKQWxyaWdodCwgSSBzZWUgdGhpcyBmdW5jdGlvbiBuYW1lIOKAkyBgcm5iZF9zcnZfY3JlYXRlX3NldF9zZXNzX2RldmAuIEZyb20gdGhlIG5hbWluZyBjb252ZW50aW9uLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhpcyBpcyByZWxhdGVkIHRvIHRoZSBSREJOIChSZWxpYWJsZSBOZXR3b3JrIEJsb2NrIERldmljZSkgc2VydmVyIHNpZGUuIFRoZSAmIzM0O2NyZWF0ZSYjMzQ7IHN1Z2dlc3RzIGl0JiMzOTtzIGludm9sdmVkIGluIHNlc3Npb24gb3IgZGV2aWNlIHNldHVwLiAmIzM0O1NldCYjMzQ7IGltcGxpZXMgc29tZSBjb25maWd1cmF0aW9uIG9yIGFzc2lnbm1lbnQgaXMgaW52b2x2ZWQsIGFuZCAmIzM0O3Nlc3NfZGV2JiMzNDsgbmljZWx5IG5hcnJvd3MgaXQgZG93biB0byBzb21ldGhpbmcgc3BlY2lmaWMgdG8gdGhlIHNlc3Npb24gYW5kIGRldmljZSBjb250ZXh0IHdpdGhpbiB0aGUgUkRCTiBzZXJ2ZXIuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBzdWNoIGEgZnVuY3Rpb24gd291bGQgcHJvYmFibHkgYmUgY3JpdGljYWwgaW4gaW5pdGlhbGl6aW5nIGEgY2xpZW50IGNvbm5lY3Rpb24gb3IgY29uZmlndXJpbmcgaG93IGEgZGV2aWNlIGdldHMgcHJlc2VudGVkIHRvIHRoZSByZXF1ZXN0aW5nIGNsaWVudC4gSSBiZXQgdGhlIGRldGFpbHMgaW5zaWRlIHRoYXQgZnVuY3Rpb24gd291bGQgZ2l2ZSBtZSBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgc2VydmVyIG1hbmFnZXMgcmVzb3VyY2VzIGR1cmluZyBibG9jayBJL08gb3BlcmF0aW9ucy4gTGV0JiMzOTtzIHNlZSBpZiBteSBpbml0aWFsIHRob3VnaHQgaXMgY29ycmVjdCwgYW5kIHdoYXQgSSBjYW4gbGVhcm4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE4OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NzcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU3NzpcdHN0YXRpYyBzdHJ1Y3Qgcm5iZF9zcnZfc2Vzc19kZXYgKlxuIDU3ODpcdHJuYmRfc3J2X2NyZWF0ZV9zZXRfc2Vzc19kZXYoc3RydWN0IHJuYmRfc3J2X3Nlc3Npb24gKnNydl9zZXNzLFxuIDU3OTpcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBybmJkX21zZ19vcGVuICpvcGVuX21zZyxcbiA1ODA6XHRcdFx0XHQgICAgICBzdHJ1Y3QgZmlsZSAqYmRldl9maWxlLCBib29sIHJlYWRvbmx5LFxuIDU4MTpcdFx0XHRcdCAgICAgIHN0cnVjdCBybmJkX3Nydl9kZXYgKnNydl9kZXYpXG4gNTgyOlx0e1xuIDU4MzpcdFx0c3RydWN0IHJuYmRfc3J2X3Nlc3NfZGV2ICpzZGV2ID0gcm5iZF9zZXNzX2Rldl9hbGxvYyhzcnZfc2Vzcyk7XG4gNTg0Olx0XG4gNTg1Olx0XHRpZiAoSVNfRVJSKHNkZXYpKVxuIDU4NjpcdFx0XHRyZXR1cm4gc2RldjtcbiA1ODc6XHRcbiA1ODg6XHRcdGtyZWZfaW5pdChcdTAwMjZzZGV2LVx1MDAzZWtyZWYpO1xuIDU4OTpcdFxuIDU5MDpcdFx0c3Ryc2NweShzZGV2LVx1MDAzZXBhdGhuYW1lLCBvcGVuX21zZy1cdTAwM2VkZXZfbmFtZSwgc2l6ZW9mKHNkZXYtXHUwMDNlcGF0aG5hbWUpKTtcbiA1OTE6XHRcbiA1OTI6XHRcdHNkZXYtXHUwMDNlYmRldl9maWxlXHRcdD0gYmRldl9maWxlO1xuIDU5MzpcdFx0c2Rldi1cdTAwM2VzZXNzXHRcdD0gc3J2X3Nlc3M7XG4gNTk0Olx0XHRzZGV2LVx1MDAzZWRldlx0XHQ9IHNydl9kZXY7XG4gNTk1Olx0XHRzZGV2LVx1MDAzZXJlYWRvbmx5XHRcdD0gcmVhZG9ubHk7XG4gNTk2Olx0XHRzZGV2LVx1MDAzZWFjY2Vzc19tb2RlXHQ9IG9wZW5fbXNnLVx1MDAzZWFjY2Vzc19tb2RlO1xuIDU5NzpcdFxuIDU5ODpcdFx0cmV0dXJuIHNkZXY7XG4gNTk5Olx0fVxuIDYwMDpcdFxuIDYwMTpcdHN0YXRpYyBjaGFyICpybmJkX3Nydl9nZXRfZnVsbF9wYXRoKHN0cnVjdCBybmJkX3Nydl9zZXNzaW9uICpzcnZfc2VzcyxcbiA2MDI6XHRcdFx0XHRcdCAgICAgY29uc3QgY2hhciAqZGV2X25hbWUpXG4gNjAzOlx0e1xuIDYwNDpcdFx0Y2hhciAqZnVsbF9wYXRoO1xuIDYwNTpcdFx0Y2hhciAqYSwgKmI7XG4gNjA2Olx0XHRpbnQgbGVuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxODozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTE0OAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBybmJkX3Nlc3NfZGV2X2FsbG9jYCoqCgpPa2F5LCBzbyBgcm5iZF9zZXNzX2Rldl9hbGxvY2AgaXMgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcgYHNkZXZgLiBUaW1lIHRvIGRyaWxsIGRvd24gaW50byB0aGF0IGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IsIGVzcGVjaWFsbHkgaXRzIHJlc291cmNlIG1hbmFnZW1lbnQgYW5kIGVycm9yIGhhbmRsaW5nLCBpbiByZWxhdGlvbiB0byB0aGUgYHNkZXZgIHN0cnVjdHVyZS4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mIGRldmljZSBhbGxvY2F0aW9uIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgb3ZlcmFsbCByTkJEIHNlc3Npb24gbGlmZWN5Y2xlLiBBcmUgdGhlcmUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBJIHNob3VsZCBiZSBsb29raW5nIG91dCBmb3I/IFdoYXQmIzM5O3MgdGhlIGltcGFjdCBpZiB0aGUgYWxsb2NhdGlvbiBmYWlscyDigJMgZG9lcyBpdCBoYW5kbGUgZXJyb3JzIGdyYWNlZnVsbHksIG9yIGNvdWxkIHdlIGhhdmUgcmVzb3VyY2UgbGVha3M/IEkmIzM5O20gZ29pbmcgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIHRvIGdldCBhIGZ1bGwgcGljdHVyZS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGdvaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxODozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtybmJkX3Nlc3NfZGV2X2FsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM9NDE5PXN0YXRpYyBzdHJ1Y3Qgcm5iZF9zcnZfc2Vzc19kZXZcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jOjQyMDoqcm5iZF9zZXNzX2Rldl9hbGxvYyhzdHJ1Y3Qgcm5iZF9zcnZfc2Vzc2lvbiAqc3J2X3Nlc3MpXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy00MjEte1xuLS1cbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jPTU3OD1ybmJkX3Nydl9jcmVhdGVfc2V0X3Nlc3NfZGV2KHN0cnVjdCBybmJkX3Nydl9zZXNzaW9uICpzcnZfc2Vzcyxcbi0tXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy01ODIte1xuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM6NTgzOlx0c3RydWN0IHJuYmRfc3J2X3Nlc3NfZGV2ICpzZGV2ID0gcm5iZF9zZXNzX2Rldl9hbGxvYyhzcnZfc2Vzcyk7XG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy01ODQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE4OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NjM4CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MgYXMgSSBhcHByb2FjaCByZWFkaW5nIGBybmJkX3Nlc3NfZGV2X2FsbG9jYDoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBEZWNvZGluZyB0aGUgTmFtZSoqCgpGaXJzdCwgSSYjMzk7bSBhbHJlYWR5IG1lbnRhbGx5IHBhcnNpbmcgdGhlIG5hbWUuIGBybmJkYCBzY3JlYW1zICYjMzQ7bmV0d29yayBibG9jayBkZXZpY2UsJiMzNDsgc28gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBzb21ldGhpbmcgcmVsYXRlZCB0byBleHBvcnRpbmcgYSBibG9jayBkZXZpY2Ugb3ZlciBhIG5ldHdvcmsuIFRoZSBgc2Vzc2AgcGFydCBwcm9iYWJseSBtZWFucyAmIzM0O3Nlc3Npb24sJiMzNDsgYW5kIEkgZXhwZWN0IHRoaXMgd2lsbCBiZSBhYm91dCBhbGxvY2F0aW5nIHJlc291cmNlcyBmb3IgYSBuZXR3b3JrIGJsb2NrIGRldmljZSAqc2Vzc2lvbiouIEZpbmFsbHksIGBkZXZfYWxsb2NgLi4uIHRoYXQgaGFzIHRvIGJlIGEgZGV2aWNlIGFsbG9jYXRpb24gZnVuY3Rpb24uIFNvLCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGlzIGNvZGUgdGhhdCBoYW5kbGVzIHNldHRpbmcgdXAgYSBibG9jayBkZXZpY2UgZm9yIGEgcmVtb3RlIGNsaWVudCB0byB1c2UuIEl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiB0aGUgaW5pdGlhbCBoYW5kc2hha2Ugb3IgbmVnb3RpYXRpb24gb2YgcmVzb3VyY2VzLgoKSSYjMzk7bSBtZW50YWxseSBwcmVwYXJpbmcgZm9yIGEgZmFpcmx5IGxvdy1sZXZlbCB2aWV3IG9mIHRoaW5ncywgcHJvYmFibHkgZGVhbGluZyB3aXRoIGRhdGEgc3RydWN0dXJlcyByZWxhdGVkIHRvIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24sIHBlcmhhcHMgc29tZSBkZXZpY2Utc3BlY2lmaWMgaW5mb3JtYXRpb24sIGFuZCBsaWtlbHkgc29tZSBzb3J0IG9mIG1lbW9yeSBhbGxvY2F0aW9uIG9yIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBtdXRleGVzIG9yIHNwaW5sb2NrcyDigJMgdGhlIHVzdWFsIHN1c3BlY3RzIHdoZW4gZGVhbGluZyB3aXRoIHNoYXJlZCByZXNvdXJjZXMgYW5kIGNvbmN1cnJlbnQgYWNjZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxODozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDE5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MTk6XHRzdGF0aWMgc3RydWN0IHJuYmRfc3J2X3Nlc3NfZGV2XG4gNDIwOlx0KnJuYmRfc2Vzc19kZXZfYWxsb2Moc3RydWN0IHJuYmRfc3J2X3Nlc3Npb24gKnNydl9zZXNzKVxuIDQyMTpcdHtcbiA0MjI6XHRcdHN0cnVjdCBybmJkX3Nydl9zZXNzX2RldiAqc2Vzc19kZXY7XG4gNDIzOlx0XHRpbnQgZXJyb3I7XG4gNDI0Olx0XG4gNDI1Olx0XHRzZXNzX2RldiA9IGt6YWxsb2Nfb2JqKCpzZXNzX2Rldik7XG4gNDI2Olx0XHRpZiAoIXNlc3NfZGV2KVxuIDQyNzpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiA0Mjg6XHRcbiA0Mjk6XHRcdGVycm9yID0geGFfYWxsb2MoXHUwMDI2c3J2X3Nlc3MtXHUwMDNlaW5kZXhfaWRyLCBcdTAwMjZzZXNzX2Rldi1cdTAwM2VkZXZpY2VfaWQsIHNlc3NfZGV2LFxuIDQzMDpcdFx0XHRcdCB4YV9saW1pdF8zMmIsIEdGUF9OT1dBSVQpO1xuIDQzMTpcdFx0aWYgKGVycm9yIFx1MDAzYyAwKSB7XG4gNDMyOlx0XHRcdHByX3dhcm4oXCYjMzQ7QWxsb2NhdGluZyBpZHIgZmFpbGVkLCBlcnI6ICVkXFxuXCYjMzQ7LCBlcnJvcik7XG4gNDMzOlx0XHRcdGtmcmVlKHNlc3NfZGV2KTtcbiA0MzQ6XHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyb3IpO1xuIDQzNTpcdFx0fVxuIDQzNjpcdFxuIDQzNzpcdFx0cmV0dXJuIHNlc3NfZGV2O1xuIDQzODpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTg6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYyNTEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA4MTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU3VidGxlIFJOQkQgU2VydmVyIEJ1ZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzLCBgcm5iZF9zZXNzX2Rldl9hbGxvY2AgYWxsb2NhdGVzIHRoZSBgc2Vzc19kZXZgIGFuZCBpbnNlcnRzIGl0IGludG8gdGhlIGBzcnZfc2Vzcy0mZ3Q7aW5kZXhfaWRyYC4gUHJpb3IgdG8gdGhpcyBwYXRjaCwgaWYgYHJuYmRfc3J2X2NyZWF0ZV9kZXZfc2Vzc2lvbl9zeXNmc2AgZmFpbGVkLCBpdCB3b3VsZCBqdW1wIHN0cmFpZ2h0IHRvIGBmcmVlX3Nydl9zZXNzX2RldmAuIE5vdywgYGZyZWVfc3J2X3Nlc3NfZGV2YCBkb2VzIGEgc2ltcGxlIGB4YV9lcmFzZWAsIGBzeW5jaHJvbml6ZV9yY3VgLCBhbmQgdGhlbiBga2ZyZWVgIG9mIHRoZSBgc3J2X3Nlc3NfZGV2YC4gSG93ZXZlciwgaGVyZSYjMzk7cyB0aGUga2lja2VyOiBgcm5iZF9zcnZfY3JlYXRlX2Rldl9zZXNzaW9uX3N5c2ZzYCAqYWxzbyogY2FsbHMgYGtvYmplY3RfcHV0KCZhbXA7c2Vzc19kZXYtJmd0O2tvYmopYCBvbiBmYWlsdXJlLgoKSGFuZyBvbiBhIHNlY29uZOKApiBga29iamVjdF9wdXRgIHRyaWdnZXJzIGBybmJkX3Nydl9zZXNzX2Rldl9yZWxlYXNlYCwgYW5kICp0aGF0KiBjYWxscyBgcm5iZF9kZXN0cm95X3Nlc3NfZGV2YC4gTm93LCBgcm5iZF9kZXN0cm95X3Nlc3NfZGV2YCBpdHNlbGYgZG9lcyBhbiBgeGFfZXJhc2VgLCBgc3luY2hyb25pemVfcmN1YCwgc2V0cyB1cCBhIGBkZXN0cm95X2NvbXBgLCBjYWxscyBgcm5iZF9wdXRfc2Vzc19kZXZgLCBhbmQgdGhlbiBgd2FpdF9mb3JfY29tcGxldGlvbmAsIGBmcHV0YCwgYW5kIHNvIG9uLCBjbGVhbmluZyB1cCB0aGUgcmVzb3VyY2VzLiBCdXQsIGlmIGBybmJkX3Nydl9jcmVhdGVfZGV2X3Nlc3Npb25fc3lzZnNgIGZhaWxzLCBjYWxscyBga29iamVjdF9wdXRgLCB3aGljaCBjYWxscyBgcm5iZF9kZXN0cm95X3Nlc3NfZGV2YCwgdGhlbiBgcm5iZF9kZXN0cm95X3Nlc3NfZGV2YCB0cmllcyB0byBjYWxsIGBsaXN0X2RlbCgmYW1wO3Nlc3NfZGV2LSZndDtkZXZfbGlzdClgLgoKVGhhdCYjMzk7cyB3aGVuIGl0IGNsaWNrZWQhIElmIGBzZXNzX2RldmAgd2FzICpub3QqIGFkZGVkIHRvIGBzZXNzX2Rldi0mZ3Q7ZGV2LSZndDtzZXNzX2Rldl9saXN0YCBiZWZvcmUgYHJuYmRfc3J2X2NyZWF0ZV9kZXZfc2Vzc2lvbl9zeXNmc2AgZmFpbGVkICh3aGljaCBpcyBsaWtlbHkgaW4gdGhlIGZhaWx1cmUgcGF0aCksIHRoZSBgbGlzdF9kZWwoJmFtcDtzZXNzX2Rldi0mZ3Q7ZGV2X2xpc3QpYCBpcyBnb2luZyB0byBjYXVzZSBhIGNyYXNoIG9yIGxpc3QgY29ycnVwdGlvbiBiZWNhdXNlIGBkZXZfbGlzdGAgaXMgZWl0aGVyIHVuaW5pdGlhbGl6ZWQgb3IgYW4gZW1wdHkgbGlzdCEgV2FpdCwgYW5kIEkganVzdCBjaGVja2VkIGBkZXZfbGlzdGAgaXNuJiMzOTt0IGluaXRpYWxpemVkIHdpdGggYElOSVRfTElTVF9IRUFEYCBpbiBgcm5iZF9zZXNzX2Rldl9hbGxvY2AsIGluc3RlYWQgaXQgaXMgemVyb2VkIGJ5IGBremFsbG9jX29iamAsIHdoaWNoIHdvdWxkIGNhdXNlIGBsaXN0X2RlbGAgdG8gY3Jhc2ggZnJvbSBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4gRGFtbiwgdGhpcyBpcyBhIHJlYWwsIGxpdmUgYnVnLgoKQW5kIHRoYXQmIzM5O3Mgbm90IGFsbC4gYHJuYmRfZGVzdHJveV9zZXNzX2RldmAgKmFsc28qIGZyZWVzIHRoZSBvYmplY3QgdXNpbmcgYHJuYmRfcHV0X3Nlc3NfZGV2YCwgYW5kIHRoZW4gdGhlIGNvZGUganVtcHMgdG8gYGZyZWVfc3J2X3Nlc3NfZGV2YCB3aGljaCBhbHNvIGRvZXMgYHhhX2VyYXNlYCBhbmQgYGtmcmVlKHNydl9zZXNzX2RldilgISBXZSBoYXZlIGEgY2xhc3NpYyBkb3VibGUtZnJlZSBzaXR1YXRpb24gaGVyZSwgYW5kIGV2ZW4gYW4gZWFybGllciBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UuIFNvLCB0aGUgcGF0Y2ggZml4ZXMgKmJvdGgqIGEgZG91YmxlIGZyZWUgKmFuZCogYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIEV4Y2VsbGVudCBjYXRjaCEKClRpbWUgdG8gZmlndXJlIG91dCB3aGVyZSB0byBmb2N1cyBvdXIgZnV6emluZyBlZmZvcnRzLiBCYXNlZCBvbiB0aGUgY2FsbCBzdGFjaywgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbjogYHByb2Nlc3NfbXNnX29wZW5gLCBgcm5iZF9zcnZfY3JlYXRlX2Rldl9zZXNzaW9uX3N5c2ZzYCwgYW5kIGBybmJkX2Rlc3Ryb3lfc2Vzc19kZXZgLiBOb3cgdG8gbG9vayBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uc+KApiBJIG5lZWQgYEJMS19ERVZfUk5CRF9TRVJWRVJgLCBidXQgZG9lcyBpdCBkZXBlbmQgb24gYElORklOSUJBTkRfUlRSU19TRVJWRVJgPyBZZXMsIGl0IGRvZXMuIExldCBtZSBqdXN0IGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciBjb25maWdzLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE4OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfREVWX1JOQkQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZy0yLVxuZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWc6Mzpjb25maWcgQkxLX0RFVl9STkJEXG5kcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZy00LVx0Ym9vbFxuZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWctNS1cbmRyaXZlcnMvYmxvY2svcm5iZC9LY29uZmlnOjY6Y29uZmlnIEJMS19ERVZfUk5CRF9DTElFTlRcbmRyaXZlcnMvYmxvY2svcm5iZC9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtSRE1BIE5ldHdvcmsgQmxvY2sgRGV2aWNlIGRyaXZlciBjbGllbnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZy0xOC1cbmRyaXZlcnMvYmxvY2svcm5iZC9LY29uZmlnOjE5OmNvbmZpZyBCTEtfREVWX1JOQkRfU0VSVkVSXG5kcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZy0yMC1cdHRyaXN0YXRlIFwmIzM0O1JETUEgTmV0d29yayBCbG9jayBEZXZpY2UgZHJpdmVyIHNlcnZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxODozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODA2MwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDExOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSTkJEIFRlc3RpbmcgU3RyYXRlZ3kqKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiB0ZXN0aW5nIHRoZSBSTkJEIGZ1bmN0aW9uYWxpdHksIHNwZWNpZmljYWxseSwgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGNsaWVudCBhbmQgc2VydmVyIGNvbXBvbmVudHMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBCTEtfREVWX1JOQkRfU0VSVkVSYCBpcyB0aGUgcHJpbWFyeSBwb2ludCBvZiBpbnRlcmVzdC4gSG93ZXZlciwgb24gZnVydGhlciByZWZsZWN0aW9uLCBJIHJlYWxpemUgdGhhdCB0byAqYWN0dWFsbHkqIHRlc3QgaXQsIEkmIzM5O2xsIG5lZWQgdG8gY29uc2lkZXIgYEJMS19ERVZfUk5CRF9DTElFTlRgIGFzIHdlbGwsIHNpbmNlIHRoZSBjbGllbnQgaXMgcmVzcG9uc2libGUgZm9yIGluaXRpYXRpbmcgY29ubmVjdGlvbnMgYW5kIHNlbmRpbmcgdGhlIGBSTkJEX01TR19PUEVOYCBtZXNzYWdlIHRvIHRoZSBzZXJ2ZXIuCgpUaGUgY29yZSBvZiB0aGlzIGlzIHRoZSBjbGllbnQtc2VydmVyIGludGVyYWN0aW9uLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGNvbnNpZGVyIGhvdyBzeXprYWxsZXIgZml0cyBpbnRvIHRoZSBwaWN0dXJlLiBDYW4gSSBsZXZlcmFnZSBgc3l6X3JuYmRfY2xpZW50X29wZW5gIG9yIGEgc2ltaWxhciBzeXprYWxsZXIgcHJpbWl0aXZlPyBQcm9iYWJseSBub3QgZGlyZWN0bHkuIFN5emthbGxlciwgZ2l2ZW4gaXRzIGZ1enppbmcgYXBwcm9hY2gsIGxpa2VseSBoYW5kbGVzIFJOQkQgYnkgZWl0aGVyIHNldHRpbmcgdXAgY2xpZW50IGFuZCBzZXJ2ZXIgaW5zdGFuY2VzIHdpdGhpbiB0aGUgZnV6emluZyBlbnZpcm9ubWVudCBpdHNlbGYsIG9yIHBvdGVudGlhbGx5IGJ5IGRpcmVjdGx5IGZ1enppbmcgdGhlIHVuZGVybHlpbmcgUkRNQSBjb25uZWN0aW9uIGlmIHRoYXQmIzM5O3MgdGhlIGRhdGEgcGxhbmUuIEl0IGlzIGltcG9ydGFudCB0byBrbm93IHRoaXMuCgpUaGVyZWZvcmUsIGl0JiMzOTtzIHdvcnRoIGNoZWNraW5nIGlmIHN5emthbGxlciBhbHJlYWR5IGhhcyBkZXNjcmlwdGlvbnMsIGRlZmluaXRpb25zLCBvciBjb3ZlcmFnZSBzcGVjaWZpY2FsbHkgZm9yIFJOQkQuIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0IGRpZ2dpbmcgdG8gc2VlIGlmIGFueW9uZSBoYXMgYWxyZWFkeSBkb25lIHRoZSBoZWF2eSBsaWZ0aW5nIGFuZCBpZiBJIGNhbiBidWlsZCBvbiBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTg6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtybmJkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE4OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NDk2CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTmF2aWdhdGluZyB0aGUgTGFuZHNjYXBlIG9mIFN5emthbGxlciBhbmQgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gU29tZXRoaW5nIGlzbiYjMzk7dCBxdWl0ZSBjbGlja2luZy4gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gdGhhdCB0aGUgZGVzY3JpcHRpb25zIGdlbmVyYXRlZCBieSBzeXprYWxsZXIgd2VyZSBkaXJlY3RseSBpbnRlZ3JhdGVkIHdpdGhpbiB0aGUga2VybmVsIHRyZWUuIEJ1dCB0aGF0IGRvZXNuJiMzOTt0IHNlZW0gdG8gYmUgdGhlIGNhc2UuIFNvLCB3ZSBuZWVkIHRvIGZpbmQgYW5vdGhlciB3YXkgdG8gaGFuZGxlIHRoaXMuCgpBaGEhIEluc3RlYWQgb2YgYXR0ZW1wdGluZyB0byBmaW5kIHRoZSBzeXprYWxsZXIgZGVzY3JpcHRpb25zIGRpcmVjdGx5LCB3ZSBjYW4gbGV2ZXJhZ2UgdGhlIGV4aXN0aW5nIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIElmIHdlIGNhbiBwcm92aWRlIHRoZSBjb3JyZWN0IGZsYWdzLCB0aGUgaW50ZWdyYXRpb24gc2hvdWxkIHdvcmsuIExldCYjMzk7cyBzZWUgaWYgd2UgY2FuIHVzZSB0aGUgYEJMS19ERVZfUk5CRF9TRVJWRVJgIGFuZCBgQkxLX0RFVl9STkJEX0NMSUVOVGAgb3B0aW9ucy4gVGhleSBzaG91bGQgZG8gdGhlIHRyaWNrLgoKVG8gYmUgZXh0cmEgY2VydGFpbiB3ZSBhcmUgb24gdGhlIHJpZ2h0IHRyYWNrLCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgc2ltaWxhciBtb2R1bGVzLiBDaGVja2luZyBvdXQgaG93IGBJTkZJTklCQU5EX1JUUlNfU0VSVkVSYCBhbmQgYElORklOSUJBTkRfUlRSU19DTElFTlRgIGFyZSBoYW5kbGVkIHdpbGwgZ2l2ZSB1cyBhIGdvb2QgcG9pbnQgb2YgY29tcGFyaXNvbiBhbmQgY29uZmlybSB0aGlzIGxpbmUgb2YgdGhpbmtpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE4OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJTkZJTklCQU5EX1JUUlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2luZmluaWJhbmQvdWxwL3J0cnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2luZmluaWJhbmQvdWxwL3J0cnMvS2NvbmZpZy0yLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWc6Mzpjb25maWcgSU5GSU5JQkFORF9SVFJTXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3J0cnMvS2NvbmZpZy00LVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3J0cnMvS2NvbmZpZy02LVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWc6Nzpjb25maWcgSU5GSU5JQkFORF9SVFJTX0NMSUVOVFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctOC1cdHRyaXN0YXRlIFwmIzM0O1JUUlMgY2xpZW50IG1vZHVsZVwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnLTE3LVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWc6MTg6Y29uZmlnIElORklOSUJBTkRfUlRSU19TRVJWRVJcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnLTE5LVx0dHJpc3RhdGUgXCYjMzQ7UlRSUyBzZXJ2ZXIgbW9kdWxlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE4OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDQ1CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGRldmljZSBjb25maWd1cmF0aW9ucyBhbmQsIHllcywgdGhlc2UgZGVmaW5pdGVseSBleGlzdCBhbmQgbmVlZCB0byBiZSBhZGRyZXNzZWQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gaW5jbHVkZSBgQkxLX0RFVl9STkJEX1NFUlZFUmAgYW5kIGBCTEtfREVWX1JOQkRfQ0xJRU5UYC4gSSBzaG91bGQgYWxzbyBjb25zaWRlciBgSU5GSU5JQkFORF9SVFJTX1NFUlZFUmAgYW5kIGBJTkZJTklCQU5EX1JUUlNfQ0xJRU5UYC4gSG93ZXZlciwgd2FpdCBhIHNlY29uZC4gSSByZW1lbWJlciB0aGF0IGBCTEtfREVWX1JOQkRfU0VSVkVSYCBhY3R1YWxseSAqc2VsZWN0cyogYEJMS19ERVZfUk5CRGAgYW5kIGFsc28gKmRlcGVuZHMqIG9uIGBJTkZJTklCQU5EX1JUUlNfU0VSVkVSYC4KClRoaXMgbWVhbnMgdGhhdCBlbmFibGluZyBgQkxLX0RFVl9STkJEX1NFUlZFUmAgYW5kIGBCTEtfREVWX1JOQkRfQ0xJRU5UYCBzaG91bGQgdGVjaG5pY2FsbHkgcHVsbCBpbiB0aGUgb3RoZXJzIGF1dG9tYXRpY2FsbHksIGdpdmVuIHRoZSBkZXBlbmRlbmNpZXMuIEl0IGlzLCBob3dldmVyLCBwcm9iYWJseSBzYWZlciB0byBiZSBleHBsaWNpdCBhbmQgbGlzdCBgSU5GSU5JQkFORF9SVFJTX1NFUlZFUmAgYW5kIGBJTkZJTklCQU5EX1JUUlNfQ0xJRU5UYCBhbnl3YXksIG9yIG1heWJlIGp1c3Qgc3RpY2sgd2l0aCB0aGUgUk5CRCBvbmVzIGZvciB0aGUgc2FrZSBvZiBzaW1wbGljaXR5LiBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zIGludm9sdmVkIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE4OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfREVWX1JOQkQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWctMi1cbmRyaXZlcnMvYmxvY2svcm5iZC9LY29uZmlnOjM6Y29uZmlnIEJMS19ERVZfUk5CRFxuZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWctNC1cdGJvb2xcbmRyaXZlcnMvYmxvY2svcm5iZC9LY29uZmlnLTUtXG5kcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZzo2OmNvbmZpZyBCTEtfREVWX1JOQkRfQ0xJRU5UXG5kcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7UkRNQSBOZXR3b3JrIEJsb2NrIERldmljZSBkcml2ZXIgY2xpZW50XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWctMTgtXG5kcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZzoxOTpjb25maWcgQkxLX0RFVl9STkJEX1NFUlZFUlxuZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWctMjAtXHR0cmlzdGF0ZSBcJiMzNDtSRE1BIE5ldHdvcmsgQmxvY2sgRGV2aWNlIGRyaXZlciBzZXJ2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTg6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk2NzAKCQkJCQkJCW91dHB1dDogMjUyCgkJCQkJCQl0aG91Z2h0czogNDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUk5CRCBTZXJ2ZXIgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gbGlzdCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6IGBCTEtfREVWX1JOQkRfU0VSVkVSYCBhbmQgYEJMS19ERVZfUk5CRF9DTElFTlRgLiBUaG9zZSBhcmUgdGhlIGJhc2VsaW5lIHJlcXVpcmVtZW50cy4gTm93LCBmb2N1c2luZyBvbiB0aGUgY29yZSBzeW1ib2xzIHRvdWNoZWQgYnkgdGhpcyBwYXRjaDogYHByb2Nlc3NfbXNnX29wZW5gLCBgcm5iZF9zcnZfY3JlYXRlX2Rldl9zZXNzaW9uX3N5c2ZzYCwgYW5kIGBybmJkX2Rlc3Ryb3lfc2Vzc19kZXZgLiBBcmUgdGhlcmUgb3RoZXIgY2xvc2VseSByZWxhdGVkIGZ1bmN0aW9ucyBpbXBhY3RlZD8gWWVzLCBzcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBpcyBjaGFuZ2luZyBgcHJvY2Vzc19tc2dfb3BlbmAuIExldCYjMzk7cyBpbmNsdWRlIHRoYXQuCgpOb3csIGEgcXVpY2sgdmVyaWZpY2F0aW9uIOKAkyBpcyBgcHJvY2Vzc19tc2dfb3BlbmAgYWN0dWFsbHkgcmVhY2hhYmxlPyBZZXMsIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBybmJkX3Nydl9yZG1hX2V2YCB3aGVuIHRoZSBtZXNzYWdlIElEIGlzIGBSTkJEX01TR19PUEVOYC4gVGhhdCYjMzk7cyB0cmlnZ2VyZWQgd2hlbiBhIGNsaWVudCBjb25uZWN0cywgc28gd2UmIzM5O3JlIGdvb2QgdGhlcmUuCgpPa2F5LCBkaXZpbmcgaW50byB0aGUgaGVhcnQgb2YgdGhlIGlzc3VlOiB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIGRvdWJsZSBmcmVlIGFuZCBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiB0aGUgUk5CRCBzZXJ2ZXImIzM5O3MgZXJyb3IgcGF0aCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgcHJvY2Vzc19tc2dfb3BlbmAuIElmIGBybmJkX3Nydl9jcmVhdGVfZGV2X3Nlc3Npb25fc3lzZnNgIGZhaWxzLCBpdCBjYWxscyBga29iamVjdF9wdXRgLCB3aGljaCB0cmlnZ2VycyB0aGUgYHJuYmRfZGVzdHJveV9zZXNzX2RldmAgcmVsZWFzZSBjYWxsYmFjay4gVGhpcyBjYWxsYmFjayBpcyBzdXBwb3NlZCB0byBmcmVlIHRoZSBzZXNzaW9uIGRldmljZSBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlIHNlc3Npb24gZGV2aWNlIGxpc3QgKGBzZXNzX2Rldl9saXN0YCkuIFRoZSBwcm9ibGVtIGlzLCBiZWZvcmUgdGhlIHBhdGNoLCB0aGUgZGV2aWNlIHdhc24mIzM5O3QgYWRkZWQgdG8gdGhlIGxpc3QgKmJlZm9yZSogc3lzZnMgY3JlYXRpb24uIFRoaXMgbGVhZHMgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYGxpc3RfZGVsYCwgZm9sbG93ZWQgYnkgYW4gZXJyb3IgaGFuZGxpbmcgcGF0aCB0aGF0IGNhbGxzIGBmcmVlX3Nydl9zZXNzX2RldmAsIGF0dGVtcHRpbmcgdG8gZnJlZSB0aGUgb2JqZWN0IGEgc2Vjb25kIHRpbWUuCgpUaGUga2V5IGlzIGluIHRoZSBlcnJvciBwYXRoIGZvciBgcHJvY2Vzc19tc2dfb3BlbmAuIFRoZSBkb3VibGUgZnJlZSBhbmQgTlVMTCBwb2ludGVyIGlzc3VlcyBtZWFuIHRoaXMgaXMgcHJpbWUgdGVycml0b3J5IGZvciBmdXp6aW5nLiBUaGUgZ29hbCB3aWxsIGJlIHRvIHVuY292ZXIgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgb3IgbGlzdCBjb3JydXB0aW9uIHdpdGhpbiB0aGUgc2VydmVyLiBJdCBpcyBjbGVhciB0aGF0IHRoaXMgbmVlZHMgdG8gYmUgZnV6emVkLCBzbyBJJiMzOTttIHNldHRpbmcgYFdvcnRoRnV6emluZ2AgdG8gdHJ1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTg6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfUk5CRF9TRVJWRVImIzM0OywKICAgICYjMzQ7QkxLX0RFVl9STkJEX0NMSUVOVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Byb2Nlc3NfbXNnX29wZW4mIzM0OywKICAgICYjMzQ7cm5iZF9zcnZfY3JlYXRlX2Rldl9zZXNzaW9uX3N5c2ZzJiMzNDssCiAgICAmIzM0O3JuYmRfZGVzdHJveV9zZXNzX2RldiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGRvdWJsZSBmcmVlIGFuZCBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvbiB0aGUgZXJyb3IgcGF0aCBvZiBgcHJvY2Vzc19tc2dfb3BlbmAgaW4gdGhlIFJOQkQgc2VydmVyLiBJZiBgcm5iZF9zcnZfY3JlYXRlX2Rldl9zZXNzaW9uX3N5c2ZzYCBmYWlscywgaXQgY2FsbHMgYGtvYmplY3RfcHV0YCwgd2hpY2ggaW52b2tlcyB0aGUgcmVsZWFzZSBjYWxsYmFjayBgcm5iZF9kZXN0cm95X3Nlc3NfZGV2YC4gVGhpcyBjYWxsYmFjayBmcmVlcyB0aGUgc2Vzc2lvbiBkZXZpY2UgYW5kIHJlbW92ZXMgaXQgZnJvbSB0aGUgYHNlc3NfZGV2X2xpc3RgLiBCZWZvcmUgdGhlIHBhdGNoLCB0aGUgZGV2aWNlIHdhcyBub3QgYWRkZWQgdG8gdGhlIGxpc3QgYmVmb3JlIHN5c2ZzIGNyZWF0aW9uLCBjYXVzaW5nIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBsaXN0X2RlbGAsIGFuZCB0aGUgZXJyb3IgaGFuZGxpbmcganVtcGVkIHRvIGBmcmVlX3Nydl9zZXNzX2RldmAgd2hpY2ggZnJlZWQgdGhlIG9iamVjdCBhZ2Fpbi4gRnV6emluZyB0aGlzIGVycm9yIHBhdGggaXMgaW1wb3J0YW50IHRvIGVuc3VyZSBubyBvdGhlciB1c2UtYWZ0ZXItZnJlZSBvciBsaXN0IGNvcnJ1cHRpb25zIGV4aXN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX1JOQkRfU0VSVkVSJiMzNDssCiAgICAmIzM0O0JMS19ERVZfUk5CRF9DTElFTlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwcm9jZXNzX21zZ19vcGVuJiMzNDssCiAgICAmIzM0O3JuYmRfc3J2X2NyZWF0ZV9kZXZfc2Vzc2lvbl9zeXNmcyYjMzQ7LAogICAgJiMzNDtybmJkX2Rlc3Ryb3lfc2Vzc19kZXYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBkb3VibGUgZnJlZSBhbmQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb24gdGhlIGVycm9yIHBhdGggb2YgYHByb2Nlc3NfbXNnX29wZW5gIGluIHRoZSBSTkJEIHNlcnZlci4gSWYgYHJuYmRfc3J2X2NyZWF0ZV9kZXZfc2Vzc2lvbl9zeXNmc2AgZmFpbHMsIGl0IGNhbGxzIGBrb2JqZWN0X3B1dGAsIHdoaWNoIGludm9rZXMgdGhlIHJlbGVhc2UgY2FsbGJhY2sgYHJuYmRfZGVzdHJveV9zZXNzX2RldmAuIFRoaXMgY2FsbGJhY2sgZnJlZXMgdGhlIHNlc3Npb24gZGV2aWNlIGFuZCByZW1vdmVzIGl0IGZyb20gdGhlIGBzZXNzX2Rldl9saXN0YC4gQmVmb3JlIHRoZSBwYXRjaCwgdGhlIGRldmljZSB3YXMgbm90IGFkZGVkIHRvIHRoZSBsaXN0IGJlZm9yZSBzeXNmcyBjcmVhdGlvbiwgY2F1c2luZyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgbGlzdF9kZWxgLCBhbmQgdGhlIGVycm9yIGhhbmRsaW5nIGp1bXBlZCB0byBgZnJlZV9zcnZfc2Vzc19kZXZgIHdoaWNoIGZyZWVkIHRoZSBvYmplY3QgYWdhaW4uIEZ1enppbmcgdGhpcyBlcnJvciBwYXRoIGlzIGltcG9ydGFudCB0byBlbnN1cmUgbm8gb3RoZXIgdXNlLWFmdGVyLWZyZWUgb3IgbGlzdCBjb3JydXB0aW9ucyBleGlzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE4OjM1OjQ1Ljc2NjYwMTczNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NDA5MDQzODg0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX1JOQkRfU0VSVkVSXCIsXG4gICAgXCJCTEtfREVWX1JOQkRfQ0xJRU5UXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHJvY2Vzc19tc2dfb3BlblwiLFxuICAgIFwicm5iZF9zcnZfY3JlYXRlX2Rldl9zZXNzaW9uX3N5c2ZzXCIsXG4gICAgXCJybmJkX2Rlc3Ryb3lfc2Vzc19kZXZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGRvdWJsZSBmcmVlIGFuZCBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvbiB0aGUgZXJyb3IgcGF0aCBvZiBgcHJvY2Vzc19tc2dfb3BlbmAgaW4gdGhlIFJOQkQgc2VydmVyLiBJZiBgcm5iZF9zcnZfY3JlYXRlX2Rldl9zZXNzaW9uX3N5c2ZzYCBmYWlscywgaXQgY2FsbHMgYGtvYmplY3RfcHV0YCwgd2hpY2ggaW52b2tlcyB0aGUgcmVsZWFzZSBjYWxsYmFjayBgcm5iZF9kZXN0cm95X3Nlc3NfZGV2YC4gVGhpcyBjYWxsYmFjayBmcmVlcyB0aGUgc2Vzc2lvbiBkZXZpY2UgYW5kIHJlbW92ZXMgaXQgZnJvbSB0aGUgYHNlc3NfZGV2X2xpc3RgLiBCZWZvcmUgdGhlIHBhdGNoLCB0aGUgZGV2aWNlIHdhcyBub3QgYWRkZWQgdG8gdGhlIGxpc3QgYmVmb3JlIHN5c2ZzIGNyZWF0aW9uLCBjYXVzaW5nIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBsaXN0X2RlbGAsIGFuZCB0aGUgZXJyb3IgaGFuZGxpbmcganVtcGVkIHRvIGBmcmVlX3Nydl9zZXNzX2RldmAgd2hpY2ggZnJlZWQgdGhlIG9iamVjdCBhZ2Fpbi4gRnV6emluZyB0aGlzIGVycm9yIHBhdGggaXMgaW1wb3J0YW50IHRvIGVuc3VyZSBubyBvdGhlciB1c2UtYWZ0ZXItZnJlZSBvciBsaXN0IGNvcnJ1cHRpb25zIGV4aXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxODozNTo0NS43NjY2MDYyMTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4NDY2MDI5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDYxMTc5NmRiZTIwYzhhZGVlMjdkYWNkYzcxNDhiZGYyOTExMDY3M2RcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdWwgMTQgMTg6MzU6NDQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmMgYi9kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuY1xcbmluZGV4IDEwZThjNDM4YmI0Mzk3Li41YTk5MWJmYmYzYWQ1OSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuY1xcbisrKyBiL2RyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jXFxuQEAgLTc3OCwxOCArNzc4LDIyIEBAIHN0YXRpYyBpbnQgcHJvY2Vzc19tc2dfb3BlbihzdHJ1Y3Qgcm5iZF9zcnZfc2Vzc2lvbiAqc3J2X3Nlc3MsXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4rXFx0LypcXG4rXFx0ICogQWRkIHRoZSBzZXNzaW9uIGRldmljZSB0byB0aGUgbGlzdCBiZWZvcmUgaW5pdGlhbGl6aW5nIGl0c1xcbitcXHQgKiBrb2JqZWN0LiBJZiBzeXNmcyBjcmVhdGlvbiBmYWlscywga29iamVjdF9wdXQoKSBpbnZva2VzIHRoZVxcbitcXHQgKiByZWxlYXNlIGNhbGxiYWNrLCB3aGljaCByZW1vdmVzIHRoZSBvYmplY3QgZnJvbSB0aGlzIGxpc3QgYW5kXFxuK1xcdCAqIHJlbGVhc2VzIGFsbCByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzZXNzaW9uIGRldmljZS5cXG4rXFx0ICovXFxuK1xcdGxpc3RfYWRkKFxcdTAwMjZzcnZfc2Vzc19kZXYtXFx1MDAzZWRldl9saXN0LCBcXHUwMDI2c3J2X2Rldi1cXHUwMDNlc2Vzc19kZXZfbGlzdCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2c3J2X2Rldi1cXHUwMDNlbG9jayk7XFxuK1xcbiBcXHRyZXQgPSBybmJkX3Nydl9jcmVhdGVfZGV2X3Nlc3Npb25fc3lzZnMoc3J2X3Nlc3NfZGV2KTtcXG4gXFx0aWYgKHJldCkge1xcbi1cXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnNydl9kZXYtXFx1MDAzZWxvY2spO1xcbi1cXHRcXHRybmJkX3Nydl9lcnIoc3J2X3Nlc3NfZGV2LFxcbi1cXHRcXHRcXHQgICAgICBcXFwiT3BlbmluZyBkZXZpY2UgZmFpbGVkLCBmYWlsZWQgdG8gY3JlYXRlIGRldiBjbGllbnQgc3lzZnMgZmlsZXMsIGVycjogJWRcXFxcblxcXCIsXFxuLVxcdFxcdFxcdCAgICAgIHJldCk7XFxuLVxcdFxcdGdvdG8gZnJlZV9zcnZfc2Vzc19kZXY7XFxuK1xcdFxcdHByX2VycihcXFwiT3BlbmluZyBkZXZpY2UgJyVzJyBvbiBzZXNzaW9uICVzIGZhaWxlZCwgZmFpbGVkIHRvIGNyZWF0ZSBkZXYgY2xpZW50IHN5c2ZzIGZpbGVzLCBlcnI6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHQgICAgICAgZnVsbF9wYXRoLCBzcnZfc2Vzcy1cXHUwMDNlc2Vzc25hbWUsIHJldCk7XFxuK1xcdFxcdGdvdG8gZnJlZV9wYXRoO1xcbiBcXHR9XFxuIFxcbi1cXHRsaXN0X2FkZChcXHUwMDI2c3J2X3Nlc3NfZGV2LVxcdTAwM2VkZXZfbGlzdCwgXFx1MDAyNnNydl9kZXYtXFx1MDAzZXNlc3NfZGV2X2xpc3QpO1xcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNnNydl9kZXYtXFx1MDAzZWxvY2spO1xcbi1cXG4gXFx0cm5iZF9zcnZfaW5mbyhzcnZfc2Vzc19kZXYsIFxcXCJPcGVuZWQgZGV2aWNlICclcydcXFxcblxcXCIsIHNydl9kZXYtXFx1MDAzZW5hbWUpO1xcbiBcXG4gXFx0a2ZyZWUoZnVsbF9wYXRoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTg6MzU6NDYuMTUxOTAwODI3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNTM3MDUxMzA1MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9STkJEX1NFUlZFUlwiLFxuICAgIFwiQkxLX0RFVl9STkJEX0NMSUVOVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInByb2Nlc3NfbXNnX29wZW5cIixcbiAgICBcInJuYmRfc3J2X2NyZWF0ZV9kZXZfc2Vzc2lvbl9zeXNmc1wiLFxuICAgIFwicm5iZF9kZXN0cm95X3Nlc3NfZGV2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBkb3VibGUgZnJlZSBhbmQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb24gdGhlIGVycm9yIHBhdGggb2YgYHByb2Nlc3NfbXNnX29wZW5gIGluIHRoZSBSTkJEIHNlcnZlci4gSWYgYHJuYmRfc3J2X2NyZWF0ZV9kZXZfc2Vzc2lvbl9zeXNmc2AgZmFpbHMsIGl0IGNhbGxzIGBrb2JqZWN0X3B1dGAsIHdoaWNoIGludm9rZXMgdGhlIHJlbGVhc2UgY2FsbGJhY2sgYHJuYmRfZGVzdHJveV9zZXNzX2RldmAuIFRoaXMgY2FsbGJhY2sgZnJlZXMgdGhlIHNlc3Npb24gZGV2aWNlIGFuZCByZW1vdmVzIGl0IGZyb20gdGhlIGBzZXNzX2Rldl9saXN0YC4gQmVmb3JlIHRoZSBwYXRjaCwgdGhlIGRldmljZSB3YXMgbm90IGFkZGVkIHRvIHRoZSBsaXN0IGJlZm9yZSBzeXNmcyBjcmVhdGlvbiwgY2F1c2luZyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgbGlzdF9kZWxgLCBhbmQgdGhlIGVycm9yIGhhbmRsaW5nIGp1bXBlZCB0byBgZnJlZV9zcnZfc2Vzc19kZXZgIHdoaWNoIGZyZWVkIHRoZSBvYmplY3QgYWdhaW4uIEZ1enppbmcgdGhpcyBlcnJvciBwYXRoIGlzIGltcG9ydGFudCB0byBlbnN1cmUgbm8gb3RoZXIgdXNlLWFmdGVyLWZyZWUgb3IgbGlzdCBjb3JydXB0aW9ucyBleGlzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2MTE3OTZkYmUyMGM4YWRlZTI3ZGFjZGM3MTQ4YmRmMjkxMTA2NzNkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMTQgMTg6MzU6NDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYyBiL2RyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jXG5pbmRleCAxMGU4YzQzOGJiNDM5Ny4uNWE5OTFiZmJmM2FkNTkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuY1xuKysrIGIvZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmNcbkBAIC03NzgsMTggKzc3OCwyMiBAQCBzdGF0aWMgaW50IHByb2Nlc3NfbXNnX29wZW4oc3RydWN0IHJuYmRfc3J2X3Nlc3Npb24gKnNydl9zZXNzLFxuIFx0XHR9XG4gXHR9XG4gXG4rXHQvKlxuK1x0ICogQWRkIHRoZSBzZXNzaW9uIGRldmljZSB0byB0aGUgbGlzdCBiZWZvcmUgaW5pdGlhbGl6aW5nIGl0c1xuK1x0ICoga29iamVjdC4gSWYgc3lzZnMgY3JlYXRpb24gZmFpbHMsIGtvYmplY3RfcHV0KCkgaW52b2tlcyB0aGVcbitcdCAqIHJlbGVhc2UgY2FsbGJhY2ssIHdoaWNoIHJlbW92ZXMgdGhlIG9iamVjdCBmcm9tIHRoaXMgbGlzdCBhbmRcbitcdCAqIHJlbGVhc2VzIGFsbCByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzZXNzaW9uIGRldmljZS5cbitcdCAqL1xuK1x0bGlzdF9hZGQoXHUwMDI2c3J2X3Nlc3NfZGV2LVx1MDAzZWRldl9saXN0LCBcdTAwMjZzcnZfZGV2LVx1MDAzZXNlc3NfZGV2X2xpc3QpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnNydl9kZXYtXHUwMDNlbG9jayk7XG4rXG4gXHRyZXQgPSBybmJkX3Nydl9jcmVhdGVfZGV2X3Nlc3Npb25fc3lzZnMoc3J2X3Nlc3NfZGV2KTtcbiBcdGlmIChyZXQpIHtcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnNydl9kZXYtXHUwMDNlbG9jayk7XG4tXHRcdHJuYmRfc3J2X2VycihzcnZfc2Vzc19kZXYsXG4tXHRcdFx0ICAgICAgXCJPcGVuaW5nIGRldmljZSBmYWlsZWQsIGZhaWxlZCB0byBjcmVhdGUgZGV2IGNsaWVudCBzeXNmcyBmaWxlcywgZXJyOiAlZFxcblwiLFxuLVx0XHRcdCAgICAgIHJldCk7XG4tXHRcdGdvdG8gZnJlZV9zcnZfc2Vzc19kZXY7XG4rXHRcdHByX2VycihcIk9wZW5pbmcgZGV2aWNlICclcycgb24gc2Vzc2lvbiAlcyBmYWlsZWQsIGZhaWxlZCB0byBjcmVhdGUgZGV2IGNsaWVudCBzeXNmcyBmaWxlcywgZXJyOiAlZFxcblwiLFxuK1x0XHQgICAgICAgZnVsbF9wYXRoLCBzcnZfc2Vzcy1cdTAwM2VzZXNzbmFtZSwgcmV0KTtcbitcdFx0Z290byBmcmVlX3BhdGg7XG4gXHR9XG4gXG4tXHRsaXN0X2FkZChcdTAwMjZzcnZfc2Vzc19kZXYtXHUwMDNlZGV2X2xpc3QsIFx1MDAyNnNydl9kZXYtXHUwMDNlc2Vzc19kZXZfbGlzdCk7XG4tXHRtdXRleF91bmxvY2soXHUwMDI2c3J2X2Rldi1cdTAwM2Vsb2NrKTtcbi1cbiBcdHJuYmRfc3J2X2luZm8oc3J2X3Nlc3NfZGV2LCBcIk9wZW5lZCBkZXZpY2UgJyVzJ1xcblwiLCBzcnZfZGV2LVx1MDAzZW5hbWUpO1xuIFxuIFx0a2ZyZWUoZnVsbF9wYXRoKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE4OjM1OjQ2LjE1MTkwMjQwN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4ODI1MDI5MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSTkJEIFNlcnZlcidzIERldmljZSBTZXNzaW9uIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgYXBwZWFycyB0byB0YXJnZXQgdGhlIGBwcm9jZXNzX21zZ19vcGVuYCBmdW5jdGlvbiB3aXRoaW4gYGRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhIHN1YnRsZSBhZGp1c3RtZW50IGluIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIHdoZW4gaGFuZGxpbmcgYSBuZXcgZGV2aWNlIHNlc3Npb24uIFByZXZpb3VzbHksIGl0IGxvb2tlZCBsaWtlIGBybmJkX3Nydl9jcmVhdGVfZGV2X3Nlc3Npb25fc3lzZnNgIHdhcyBjYWxsZWQgKmJlZm9yZSogYWRkaW5nIHRoZSBzZXNzaW9uIGRldmljZSAoYHNydl9zZXNzX2RldmApIHRvIHRoZSBzZXJ2ZXIncyBzZXNzaW9uIGRldmljZSBsaXN0IChgc3J2X2Rldi1cdTAwM2VzZXNzX2Rldl9saXN0YCkuIE5vdywgdGhlIHBhdGNoIGNvcnJlY3RseSBhZGRzIGl0IHRvIHRoZSBsaXN0ICpmaXJzdCouXG5cblRoZSBjcml0aWNhbCBzaGlmdCBpcyB0aGlzOiBJZiBgcm5iZF9zcnZfY3JlYXRlX2Rldl9zZXNzaW9uX3N5c2ZzYCBmYWlscyDigJMgYW5kIGJ5IFwiZmFpbHNcIiBJJ20gYXNzdW1pbmcgdGhhdCBtZWFucyBpdCBlbmNvdW50ZXJzIGFuIGVycm9yIGluIGNyZWF0aW5nIHRoZSBzeXNmcyBlbnRyaWVzIGZvciB0aGUgZGV2aWNlIHNlc3Npb24g4oCTIHRoZSBjb2RlIG5vdyBqdW1wcyBkaXJlY3RseSB0byBgZnJlZV9wYXRoYCBpbnN0ZWFkIG9mIGBmcmVlX3Nydl9zZXNzX2RldmAuIFRoaXMgaXMgaW1wb3J0YW50LCBhcyBpdCBzaWduYWxzIGEgY2hhbmdlIGluIGhvdyB3ZSB3YW50IHRvIGhhbmRsZSBjbGVhbnVwLlxuXG5UaGUgY29tbWVudCBpcyBrZXkgaGVyZS4gSXQgZXNzZW50aWFsbHkgaGlnaGxpZ2h0cyB0aGUgcmF0aW9uYWxlOiBieSBhZGRpbmcgdGhlIHNlc3Npb24gZGV2aWNlIHRvIHRoZSBsaXN0ICpiZWZvcmUqIGluaXRpYWxpemluZyBpdHMga29iamVjdCAod2hpY2ggaXMgd2hhdCBJIGFzc3VtZSBpcyBoYXBwZW5pbmcgaW4gdGhlIHN5c2ZzIGNyZWF0aW9uIHBoYXNlKSwgdGhlIGNvZGUgZW5zdXJlcyB0aGF0IGlmIHN5c2ZzIGNyZWF0aW9uIGZhaWxzLCBga29iamVjdF9wdXQoKWAgZ2V0cyBjYWxsZWQuIFRoaXMgYGtvYmplY3RfcHV0KClgIHRoZW4gdHJpZ2dlcnMgdGhlIHJlbGVhc2UgY2FsbGJhY2ssIHdoaWNoIGlzIHdoYXQgKnJlbW92ZXMqIHRoZSBvYmplY3QgZnJvbSB0aGUgbGlzdC4gRWZmZWN0aXZlbHksIGl0IGhhbmRsZXMgdGhlIGZyZWVpbmcgb2YgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2Vzc2lvbiBkZXZpY2UgaW4gYSBjb250cm9sbGVkIHdheSwgcmVnYXJkbGVzcyBvZiB0aGUgZXJyb3IgY29uZGl0aW9uLiBUaGlzIHNvdW5kcyBsaWtlIGFuIGVmZm9ydCB0byBhdm9pZCByZXNvdXJjZSBsZWFrcyBkdXJpbmcgZGV2aWNlIHNlc3Npb24gY3JlYXRpb24uIE5vdywgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGBmcmVlX3BhdGhgIGZ1bmN0aW9uIHRvIHZlcmlmeSB0aGUgY2xlYW51cCBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE1MCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE4OjM1OjUxLjAzNDQwNzIwMVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDc2MDI2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcm9jZXNzX21zZ19vcGVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jPTM1MD1zdGF0aWMgdm9pZCBwcm9jZXNzX21zZ19jbG9zZShzdHJ1Y3Qgcm5iZF9zcnZfc2Vzc2lvbiAqc3J2X3Nlc3MsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy0zNjktXFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM6MzcwOnN0YXRpYyBpbnQgcHJvY2Vzc19tc2dfb3BlbihzdHJ1Y3Qgcm5iZF9zcnZfc2Vzc2lvbiAqc3J2X3Nlc3MsXFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmMtMzcxLVxcdFxcdFxcdCAgICBjb25zdCB2b2lkICptc2csIHNpemVfdCBsZW4sXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYz0zNzg9c3RhdGljIGludCBybmJkX3Nydl9yZG1hX2V2KHZvaWQgKnByaXYsIHN0cnVjdCBydHJzX3Nydl9vcCAqaWQsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy0zOTgtXFx0Y2FzZSBSTkJEX01TR19PUEVOOlxcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jOjM5OTpcXHRcXHRyZXQgPSBwcm9jZXNzX21zZ19vcGVuKHNydl9zZXNzLCB1c3IsIHVzcmxlbiwgZGF0YSwgZGF0YWxlbik7XFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmMtNDAwLVxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM9Njc2PWZpbmRfc3J2X3Nlc3NfZGV2KHN0cnVjdCBybmJkX3Nydl9zZXNzaW9uICpzcnZfc2VzcywgY29uc3QgY2hhciAqZGV2X25hbWUpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy02OTAtXFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM6NjkxOnN0YXRpYyBpbnQgcHJvY2Vzc19tc2dfb3BlbihzdHJ1Y3Qgcm5iZF9zcnZfc2Vzc2lvbiAqc3J2X3Nlc3MsXFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmMtNjkyLVxcdFxcdFxcdCAgICBjb25zdCB2b2lkICptc2csIHNpemVfdCBsZW4sXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy03MDMtXFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM6NzA0OlxcdHRyYWNlX3Byb2Nlc3NfbXNnX29wZW4oc3J2X3Nlc3MsIG9wZW5fbXNnKTtcXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy03MDUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE4OjM1OjUxLjA5NTE3MjY4NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNDUzMDc0NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUk5CRCBhbmQgU3l6a2FsbGVyOiBBIFF1aWNrIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpcyBgcHJvY2Vzc19tc2dfb3BlbmAgZnVuY3Rpb24gYW5kIHdoZXJlIGl0IGdldHMgY2FsbGVkIGZyb20uIEl0IGxvb2tzIGxpa2UgaXQncyB0cmlnZ2VyZWQgYnkgYHJuYmRfc3J2X3JkbWFfZXZgLCB3aGljaCBoYW5kbGVzIFJETUEgZXZlbnRzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgY2FuIHdlIGFjdHVhbGx5IHRlc3QgUk5CRCDigJMgdGhlIFJlbGlhYmxlIE5ldHdvcmsgQmxvY2sgRGV2aWNlIOKAkyBlZmZlY3RpdmVseSB3aXRoaW4gc3l6a2FsbGVyPyBJdCdzIGEga2V5IHF1ZXN0aW9uLlxuXG5UaGUgbmF0dXJlIG9mIFJETUEgZHJpdmVycyBvZnRlbiBuZWNlc3NpdGF0ZXMgc3BlY2lmaWMgaGFyZHdhcmUgb3Igc29mdHdhcmUgUkRNQSBpbXBsZW1lbnRhdGlvbnMgbGlrZSByeGUsIGFuZCB0aGF0IHRlbmRzIHRvIGNyZWF0ZSBhIGJvdHRsZW5lY2sgZm9yIGZ1emluZy4gU28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIFJOQkQgaGFzIHRoZSBzYW1lIGxpbWl0YXRpb25zLiBMZXQncyBzZWUgaWYgd2UgY2FuIGZ1enogUk5CRC5cblxuSSByZW1lbWJlciBSTkJEIGlzIGJ1aWx0IG9uIFJUUlMgKFJlbGlhYmxlIFRyYW5zcG9ydCBSb3V0aW5nIFNlcnZpY2UpLCBhbmQgdGhhdCByZWxpZXMgb24gUkRNQSwgd2hpY2ggcmVpbmZvcmNlcyB0aGUgbmVlZCB0byBkaWcgZGVlcGVyLiBGaXJzdCwgSSB0aGluayBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgUk5CRCB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLiBUaGlzIHdpbGwgcHJvdmlkZSBzb21lIG5lY2Vzc2FyeSBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzA3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE4OjM1OjU1LjM0MDQ4MTcwOFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mjk1ODAyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0RFVl9STkJEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svcm5iZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svcm5iZC9LY29uZmlnLTItXFxuZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWc6Mzpjb25maWcgQkxLX0RFVl9STkJEXFxuZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWctNC1cXHRib29sXFxuZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWctNS1cXG5kcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZzo2OmNvbmZpZyBCTEtfREVWX1JOQkRfQ0xJRU5UXFxuZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiUkRNQSBOZXR3b3JrIEJsb2NrIERldmljZSBkcml2ZXIgY2xpZW50XFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWctMTgtXFxuZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWc6MTk6Y29uZmlnIEJMS19ERVZfUk5CRF9TRVJWRVJcXG5kcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZy0yMC1cXHR0cmlzdGF0ZSBcXFwiUkRNQSBOZXR3b3JrIEJsb2NrIERldmljZSBkcml2ZXIgc2VydmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxODozNTo1NS40MDM0NDQzNjNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTc4ODgzNjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIFJOQkQgU2VydmVyKipcblxuT2theSwgc28gdGhlIGNvbmZpZyBvcHRpb24gd2UncmUgbG9va2luZyBhdCBoZXJlIGlzIGBCTEtfREVWX1JOQkRfU0VSVkVSYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcImNhbiB3ZSBmdXp6IHRoaXMgdGhpbmc/XCIgQWJzb2x1dGVseSwgdGhlIHBvdGVudGlhbCBpcyB0aGVyZSwgYW5kIGVuYWJsaW5nIGBCTEtfREVWX1JOQkRfU0VSVkVSYCBzaG91bGQgb3BlbiB0aGUgZG9vci5cblxuSG9sZCBvbiBhIHNlY29uZCwgdGhvdWdoLi4uIEkgcmVtZW1iZXIgc29tZXRoaW5nIGFib3V0IFJETUEuIFJpZ2h0LCBpdCBsb29rcyBsaWtlIHRoaXMgaXMgZGVwZW5kZW50IG9uIGBJTkZJTklCQU5EYC4gSSdkIGJldHRlciBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZmlsZSBpbiBgZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWdgIGp1c3QgdG8gYmUgc3VyZSwgYW5kIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhvc2UgZGVwZW5kZW5jaWVzIGFyZSBzZXQgdXAuIE5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0IGJlZm9yZSBkaXZpbmcgaW50byBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODcwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTg6MzU6NTkuMzgyMzI5Nzg1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXFxuICAgMjpcXHRcXG4gICAzOlxcdGNvbmZpZyBCTEtfREVWX1JOQkRcXG4gICA0OlxcdFxcdGJvb2xcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIEJMS19ERVZfUk5CRF9DTElFTlRcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCJSRE1BIE5ldHdvcmsgQmxvY2sgRGV2aWNlIGRyaXZlciBjbGllbnRcXFwiXFxuICAgODpcXHRcXHRkZXBlbmRzIG9uIElORklOSUJBTkRfUlRSU19DTElFTlRcXG4gICA5OlxcdFxcdHNlbGVjdCBCTEtfREVWX1JOQkRcXG4gIDEwOlxcdFxcdHNlbGVjdCBTR19QT09MXFxuICAxMTpcXHRcXHRoZWxwXFxuICAxMjpcXHRcXHQgIFJOQkQgY2xpZW50IGlzIGEgbmV0d29yayBibG9jayBkZXZpY2UgZHJpdmVyIHVzaW5nIHJkbWEgdHJhbnNwb3J0LlxcbiAgMTM6XFx0XFxuICAxNDpcXHRcXHQgIFJOQkQgY2xpZW50IGFsbG93cyBmb3IgbWFwcGluZyBvZiBhIHJlbW90ZSBibG9jayBkZXZpY2VzIG92ZXJcXG4gIDE1OlxcdFxcdCAgUlRSUyBwcm90b2NvbCBmcm9tIGEgdGFyZ2V0IHN5c3RlbSB3aGVyZSBSTkJEIHNlcnZlciBpcyBydW5uaW5nLlxcbiAgMTY6XFx0XFxuICAxNzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAxODpcXHRcXG4gIDE5OlxcdGNvbmZpZyBCTEtfREVWX1JOQkRfU0VSVkVSXFxuICAyMDpcXHRcXHR0cmlzdGF0ZSBcXFwiUkRNQSBOZXR3b3JrIEJsb2NrIERldmljZSBkcml2ZXIgc2VydmVyXFxcIlxcbiAgMjE6XFx0XFx0ZGVwZW5kcyBvbiBJTkZJTklCQU5EX1JUUlNfU0VSVkVSXFxuICAyMjpcXHRcXHRzZWxlY3QgQkxLX0RFVl9STkJEXFxuICAyMzpcXHRcXHRoZWxwXFxuICAyNDpcXHRcXHQgIFJOQkQgc2VydmVyIGlzIHRoZSBzZXJ2ZXIgc2lkZSBvZiBSTkJEIHVzaW5nIHJkbWEgdHJhbnNwb3J0LlxcbiAgMjU6XFx0XFxuICAyNjpcXHRcXHQgIFJOQkQgc2VydmVyIGFsbG93cyBmb3IgZXhwb3J0aW5nIGxvY2FsIGJsb2NrIGRldmljZXMgdG8gYSByZW1vdGUgY2xpZW50XFxuICAyNzpcXHRcXHQgIG92ZXIgUlRSUyBwcm90b2NvbC5cXG4gIDI4OlxcdFxcbiAgMjk6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxODozNTo1OS4zODI0MDk3MTZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTQ1NTcyNDM1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBSTkJEIFNlcnZlcjogQSBRdWljayBBc3Nlc3NtZW50KipcblxuT2theSwgc28gdGhlIGZ1enppbmcgc3RyYXRlZ3kgaGluZ2VzIG9uIHRoYXQgYElORklOSUJBTkRfUlRSU19TRVJWRVJgIHNldHRpbmcuIENhbiBzeXprYWxsZXIgYWN0dWFsbHkgdGFyZ2V0IHRoZSBSTkJEIHNlcnZlciBkaXJlY3RseT8gSSBrbm93IGl0IGNhbiBoYW5kbGUgUkRNQSBwcm90b2NvbHMgbGlrZSBgcnhlYCBhbmQgYHNpd2AsIGJ1dCB0aGUgc3BlY2lmaWNzIGhlcmUgYXJlIGtleS4gSGFuZyBvbi4uLiB0aGUgdnVsbmVyYWJpbGl0eSBvciBwb3RlbnRpYWwgaXNzdWUgaXMgdHJpZ2dlcmVkIHdpdGhpbiBgcHJvY2Vzc19tc2dfb3BlbmAuIEFoLCB0aGF0IGZ1bmN0aW9uIGlzIGhpdCB3aGVuIGFuIFJOQkQgY2xpZW50IGNvbm5lY3RzIGFuZCBzZW5kcyBhbiBPUEVOIG1lc3NhZ2UuIEludGVyZXN0aW5nLlxuXG5JcyB0aGlzIHdvcnRoIHRoZSBlZmZvcnQgb2Ygc2V0dGluZyB1cCBmdXp6aW5nIGZvcj8gQWJzb2x1dGVseSwgeWVzLiBJdCdzIG5vdCBqdXN0IGEgY29zbWV0aWMgY2hhbmdlOyBpdCBsb29rcyBsaWtlIGEgcmVhbCBmdW5jdGlvbmFsIGZpeCwgcG90ZW50aWFsbHkgYWRkcmVzc2luZyBhIHVzZS1hZnRlci1mcmVlLCBhIG1lbW9yeSBsZWFrLCBvciBtYXliZSBldmVuIGEgY3JpdGljYWwgbGlzdCBjb3JydXB0aW9uIG9uIGFuIGVycm9yIHBhdGguIE5vdywgbGV0J3MgZGl2ZSBpbnRvIGBwcm9jZXNzX21zZ19vcGVuYCBpdHNlbGYgYW5kIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0J3MgaGFwcGVuaW5nIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTIxLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTg6Mzc6MTAuODM4MTM1OTAyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjQwMTQyNzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJvY2Vzc19tc2dfb3BlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYz0zNTA9c3RhdGljIHZvaWQgcHJvY2Vzc19tc2dfY2xvc2Uoc3RydWN0IHJuYmRfc3J2X3Nlc3Npb24gKnNydl9zZXNzLFxcbi0tXFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmMtMzY5LVxcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jOjM3MDpzdGF0aWMgaW50IHByb2Nlc3NfbXNnX29wZW4oc3RydWN0IHJuYmRfc3J2X3Nlc3Npb24gKnNydl9zZXNzLFxcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jLTM3MS1cXHRcXHRcXHQgICAgY29uc3Qgdm9pZCAqbXNnLCBzaXplX3QgbGVuLFxcbi0tXFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM9Mzc4PXN0YXRpYyBpbnQgcm5iZF9zcnZfcmRtYV9ldih2b2lkICpwcml2LCBzdHJ1Y3QgcnRyc19zcnZfb3AgKmlkLFxcbi0tXFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmMtMzk4LVxcdGNhc2UgUk5CRF9NU0dfT1BFTjpcXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYzozOTk6XFx0XFx0cmV0ID0gcHJvY2Vzc19tc2dfb3BlbihzcnZfc2VzcywgdXNyLCB1c3JsZW4sIGRhdGEsIGRhdGFsZW4pO1xcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jLTQwMC1cXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jPTY3Nj1maW5kX3Nydl9zZXNzX2RldihzdHJ1Y3Qgcm5iZF9zcnZfc2Vzc2lvbiAqc3J2X3Nlc3MsIGNvbnN0IGNoYXIgKmRldl9uYW1lKVxcbi0tXFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmMtNjkwLVxcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jOjY5MTpzdGF0aWMgaW50IHByb2Nlc3NfbXNnX29wZW4oc3RydWN0IHJuYmRfc3J2X3Nlc3Npb24gKnNydl9zZXNzLFxcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jLTY5Mi1cXHRcXHRcXHQgICAgY29uc3Qgdm9pZCAqbXNnLCBzaXplX3QgbGVuLFxcbi0tXFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmMtNzAzLVxcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jOjcwNDpcXHR0cmFjZV9wcm9jZXNzX21zZ19vcGVuKHNydl9zZXNzLCBvcGVuX21zZyk7XFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmMtNzA1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxODozNzoxMS4xNjIxNTgyMzdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc4ODI4MjM0NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGVidWdnaW5nIGEgUG90ZW50aWFsIFJlZGVmaW5pdGlvbioqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuLi4gaXMgYHByb2Nlc3NfbXNnX29wZW5gIGRlZmluZWQgdHdpY2U/IFRoYXQncy4uLiB1bnVzdWFsLCBhbmQgYSBwb3RlbnRpYWwgcmVjaXBlIGZvciBkaXNhc3Rlci4gVGhlIGNvbXBpbGVyICpzaG91bGQqIGJlIHllbGxpbmcgYXQgbWUsIGJ1dCBtYXliZSB0aGVyZSdzIHNvbWUgc2NvcGluZyB0cmlja2VyeSBhdCBwbGF5LCBvciBhIG1pc3BsYWNlZCBgI2luY2x1ZGVgLiBMZXQncyBhc3N1bWUgdGhlcmUgaXMgc29tZXRoaW5nIHN0cmFuZ2UgZ29pbmcgb24uXG5cbkxpbmUgMzcwLi4uIG9rYXksIHRoYXQgZmVlbHMgbGlrZSB0aGUgbGlrZWx5IGN1bHByaXQgZm9yIHRoZSBpbml0aWFsIGRlZmluaXRpb24sIHRoZSBmb3J3YXJkIGRlY2xhcmF0aW9uLCBvciBwb3NzaWJsZSBpbnN0YW50aWF0aW9uIG9mIHRoZSBmdW5jdGlvbi4gTGV0IG1lIGdvIHRha2UgYSBsb29rIGF0IHdoYXQncyBoYXBwZW5pbmcgYXQgdGhhdCBsaW5lLiBQcm9iYWJseSBpdCdzIGFuIGV4dGVybiBkZWZpbml0aW9uLCBvciBwZXJoYXBzIGEgZGVjbGFyYXRpb24gaW4gYSBoZWFkZXIgdGhhdCdzIHRoZW4gYWNjaWRlbnRhbGx5IGluY2x1ZGVkIG11bHRpcGxlIHRpbWVzLiBMZXQncyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgdGhlIHNpdHVhdGlvbi4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDE4LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTg6Mzg6MDkuMDQ0OTgzNTMyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM2NSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM2NTpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZzcnZfc2Vzcy1cXHUwMDNlbG9jayk7XFxuIDM2NjpcXHRcXHRybmJkX3Nydl9kZXN0cm95X2Rldl9zZXNzaW9uX3N5c2ZzKHNlc3NfZGV2KTtcXG4gMzY3OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2c3J2X3Nlc3MtXFx1MDAzZWxvY2spO1xcbiAzNjg6XFx0fVxcbiAzNjk6XFx0XFxuIDM3MDpcXHRzdGF0aWMgaW50IHByb2Nlc3NfbXNnX29wZW4oc3RydWN0IHJuYmRfc3J2X3Nlc3Npb24gKnNydl9zZXNzLFxcbiAzNzE6XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHZvaWQgKm1zZywgc2l6ZV90IGxlbixcXG4gMzcyOlxcdFxcdFxcdFxcdCAgICB2b2lkICpkYXRhLCBzaXplX3QgZGF0YWxlbik7XFxuIDM3MzpcXHRcXG4gMzc0OlxcdHN0YXRpYyB2b2lkIHByb2Nlc3NfbXNnX3Nlc3NfaW5mbyhzdHJ1Y3Qgcm5iZF9zcnZfc2Vzc2lvbiAqc3J2X3Nlc3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE4OjM4OjA5LjA0NTA4Mjc5MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDczNjkxNzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipOYXZpZ2F0aW5nIHRoZSBDb2RlYmFzZSoqXG5cbkFscmlnaHQsIGZvcndhcmQgZGVjbGFyYXRpb24sIGdvdCBpdC4gQWx3YXlzIGdvb2QgdG8gc2VlIHRoYXQgdXBmcm9udCB0byBhdm9pZCBhbnkgbmFzdHkgc3VycHJpc2VzIGxhdGVyLiBOb3csIHdoZXJlIGlzIHRoZSBhY3R1YWwgZGVmaW5pdGlvbiBvZiB0aGlzIHRoaW5nPyBBaCwgbGluZSA2OTEuIE9rYXksIGxldCdzIGp1bXAgZG93biB0aGVyZSBhbmQgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgYXMgSSBleHBlY3QgaXQgdG8gYmUuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGZ1bmN0aW9uIGBwcm9jZXNzX21zZ19vcGVuYC4gSSB3YW50IHRvIHNlZSBob3cgdGhhdCdzIGludGVyYWN0aW5nIHdpdGggdGhpcyBmb3J3YXJkIGRlY2xhcmVkIGl0ZW0uIFRoYXQncyBhIGtleSBwYXJ0IG9mIHRoaXMgd2hvbGUgZmxvdywgc28gSSdsbCBzZWUgd2hhdCBpdCdzIGRvaW5nIHdpdGggaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4NjEsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE4OjM4OjEyLjExODc3NjI3MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDU1MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzYwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzYwOlxcdFxcdFxcdCAgICAgICBmdWxsX3BhdGgsIHNydl9zZXNzLVxcdTAwM2VzZXNzbmFtZSwgc3J2X3Nlc3NfZGV2KTtcXG4gNzYxOlxcdFxcdFxcdHJldCA9IFBUUl9FUlIoc3J2X3Nlc3NfZGV2KTtcXG4gNzYyOlxcdFxcdFxcdGdvdG8gc3J2X2Rldl9wdXQ7XFxuIDc2MzpcXHRcXHR9XFxuIDc2NDpcXHRcXG4gNzY1OlxcdFxcdC8qIENyZWF0ZSB0aGUgc3J2X2RldiBzeXNmcyBmaWxlcyBpZiB0aGV5IGhhdmVuJ3QgYmVlbiBjcmVhdGVkIHlldC4gVGhlXFxuIDc2NjpcXHRcXHQgKiByZWFzb24gdG8gZGVsYXkgdGhlIGNyZWF0aW9uIGlzIG5vdCB0byBjcmVhdGUgdGhlIHN5c2ZzIGZpbGVzIGJlZm9yZVxcbiA3Njc6XFx0XFx0ICogd2UgYXJlIHN1cmUgdGhlIGRldmljZSBjYW4gYmUgb3BlbmVkLlxcbiA3Njg6XFx0XFx0ICovXFxuIDc2OTpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZzcnZfZGV2LVxcdTAwM2Vsb2NrKTtcXG4gNzcwOlxcdFxcdGlmICghc3J2X2Rldi1cXHUwMDNlZGV2X2tvYmouc3RhdGVfaW5fc3lzZnMpIHtcXG4gNzcxOlxcdFxcdFxcdHJldCA9IHJuYmRfc3J2X2NyZWF0ZV9kZXZfc3lzZnMoc3J2X2RldiwgZmlsZV9iZGV2KGJkZXZfZmlsZSkpO1xcbiA3NzI6XFx0XFx0XFx0aWYgKHJldCkge1xcbiA3NzM6XFx0XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZzcnZfZGV2LVxcdTAwM2Vsb2NrKTtcXG4gNzc0OlxcdFxcdFxcdFxcdHJuYmRfc3J2X2VycihzcnZfc2Vzc19kZXYsXFxuIDc3NTpcXHRcXHRcXHRcXHRcXHQgICAgICBcXFwiT3BlbmluZyBkZXZpY2UgZmFpbGVkLCBmYWlsZWQgdG8gY3JlYXRlIGRldmljZSBzeXNmcyBmaWxlcywgZXJyOiAlZFxcXFxuXFxcIixcXG4gNzc2OlxcdFxcdFxcdFxcdFxcdCAgICAgIHJldCk7XFxuIDc3NzpcXHRcXHRcXHRcXHRnb3RvIGZyZWVfc3J2X3Nlc3NfZGV2O1xcbiA3Nzg6XFx0XFx0XFx0fVxcbiA3Nzk6XFx0XFx0fVxcbiA3ODA6XFx0XFxuIDc4MTpcXHRcXHQvKlxcbiA3ODI6XFx0XFx0ICogQWRkIHRoZSBzZXNzaW9uIGRldmljZSB0byB0aGUgbGlzdCBiZWZvcmUgaW5pdGlhbGl6aW5nIGl0c1xcbiA3ODM6XFx0XFx0ICoga29iamVjdC4gSWYgc3lzZnMgY3JlYXRpb24gZmFpbHMsIGtvYmplY3RfcHV0KCkgaW52b2tlcyB0aGVcXG4gNzg0OlxcdFxcdCAqIHJlbGVhc2UgY2FsbGJhY2ssIHdoaWNoIHJlbW92ZXMgdGhlIG9iamVjdCBmcm9tIHRoaXMgbGlzdCBhbmRcXG4gNzg1OlxcdFxcdCAqIHJlbGVhc2VzIGFsbCByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzZXNzaW9uIGRldmljZS5cXG4gNzg2OlxcdFxcdCAqL1xcbiA3ODc6XFx0XFx0bGlzdF9hZGQoXFx1MDAyNnNydl9zZXNzX2Rldi1cXHUwMDNlZGV2X2xpc3QsIFxcdTAwMjZzcnZfZGV2LVxcdTAwM2VzZXNzX2Rldl9saXN0KTtcXG4gNzg4OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2c3J2X2Rldi1cXHUwMDNlbG9jayk7XFxuIDc4OTpcXHRcXG4gNzkwOlxcdFxcdHJldCA9IHJuYmRfc3J2X2NyZWF0ZV9kZXZfc2Vzc2lvbl9zeXNmcyhzcnZfc2Vzc19kZXYpO1xcbiA3OTE6XFx0XFx0aWYgKHJldCkge1xcbiA3OTI6XFx0XFx0XFx0cHJfZXJyKFxcXCJPcGVuaW5nIGRldmljZSAnJXMnIG9uIHNlc3Npb24gJXMgZmFpbGVkLCBmYWlsZWQgdG8gY3JlYXRlIGRldiBjbGllbnQgc3lzZnMgZmlsZXMsIGVycjogJWRcXFxcblxcXCIsXFxuIDc5MzpcXHRcXHRcXHQgICAgICAgZnVsbF9wYXRoLCBzcnZfc2Vzcy1cXHUwMDNlc2Vzc25hbWUsIHJldCk7XFxuIDc5NDpcXHRcXHRcXHRnb3RvIGZyZWVfcGF0aDtcXG4gNzk1OlxcdFxcdH1cXG4gNzk2OlxcdFxcbiA3OTc6XFx0XFx0cm5iZF9zcnZfaW5mbyhzcnZfc2Vzc19kZXYsIFxcXCJPcGVuZWQgZGV2aWNlICclcydcXFxcblxcXCIsIHNydl9kZXYtXFx1MDAzZW5hbWUpO1xcbiA3OTg6XFx0XFxuIDc5OTpcXHRcXHRrZnJlZShmdWxsX3BhdGgpO1xcbiA4MDA6XFx0XFxuIDgwMTpcXHRmaWxsX3Jlc3BvbnNlOlxcbiA4MDI6XFx0XFx0cm5iZF9zcnZfZmlsbF9tc2dfb3Blbl9yc3AocnNwLCBzcnZfc2Vzc19kZXYpO1xcbiA4MDM6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZzcnZfc2Vzcy1cXHUwMDNlbG9jayk7XFxuIDgwNDpcXHRcXHRyZXR1cm4gMDtcXG4gODA1OlxcdFxcbiA4MDY6XFx0ZnJlZV9zcnZfc2Vzc19kZXY6XFxuIDgwNzpcXHRcXHR4YV9lcmFzZShcXHUwMDI2c3J2X3Nlc3MtXFx1MDAzZWluZGV4X2lkciwgc3J2X3Nlc3NfZGV2LVxcdTAwM2VkZXZpY2VfaWQpO1xcbiA4MDg6XFx0XFx0c3luY2hyb25pemVfcmN1KCk7XFxuIDgwOTpcXHRcXHRrZnJlZShzcnZfc2Vzc19kZXYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxODozODoxMi4xMTg4ODMyMDFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI4NzYzNTg2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBDcml0aWNhbCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHByZXR0eSBzcGVjaWZpYyBidWcgaW4gYHJuYmRfc3J2X2NyZWF0ZV9kZXZfc2Vzc2lvbl9zeXNmc2AuIEFwcGFyZW50bHksIHRoZSBvbGQgY29kZSBoYWQgYSBuYXN0eSBoYWJpdCBvZiBnb2luZyBkaXJlY3RseSB0byBgZnJlZV9zcnZfc2Vzc19kZXZgIHdoZW4gaXQgZmFpbGVkLiBOb3csIGl0J3MganVtcGluZyB0byBgZnJlZV9wYXRoYCBpbnN0ZWFkLCB3aGljaCAqc2hvdWxkKiBiZSBhIGJldHRlciBhcHByb2FjaC4gXG5cbkJ1dCBob2xkIG9uIGEgc2Vjb25kLi4uIGBmcmVlX3BhdGhgIGlzbid0IHNob3dpbmcgdXAgaW4gdGhlIHJlYWQtZmlsZSBvdXRwdXQuIFRoYXQncyBzdHJhbmdlLCBhbmQgd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGdvaW5nIG9uIHdpdGggYGZyZWVfcGF0aGAgYW5kIHdoeSBpdCdzIG5vdCBpbW1lZGlhdGVseSB2aXNpYmxlLiBUaGlzIGZlZWxzIGxpa2UgdGhlcmUncyBhIG1pc3NpbmcgcGllY2UgdG8gdGhlIHB1enpsZSwgYW5kIEkgbmVlZCB0byBmaW5kIGl0LiBUaW1lIHRvIGtlZXAgcmVhZGluZyFcblxuXG4iLCJJbnB1dFRva2VucyI6NjkzNiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTg6Mzg6MTUuNDA2NTIwNjI1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgwMDpcXHRcXG4gODAxOlxcdGZpbGxfcmVzcG9uc2U6XFxuIDgwMjpcXHRcXHRybmJkX3Nydl9maWxsX21zZ19vcGVuX3JzcChyc3AsIHNydl9zZXNzX2Rldik7XFxuIDgwMzpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnNydl9zZXNzLVxcdTAwM2Vsb2NrKTtcXG4gODA0OlxcdFxcdHJldHVybiAwO1xcbiA4MDU6XFx0XFxuIDgwNjpcXHRmcmVlX3Nydl9zZXNzX2RldjpcXG4gODA3OlxcdFxcdHhhX2VyYXNlKFxcdTAwMjZzcnZfc2Vzcy1cXHUwMDNlaW5kZXhfaWRyLCBzcnZfc2Vzc19kZXYtXFx1MDAzZWRldmljZV9pZCk7XFxuIDgwODpcXHRcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4gODA5OlxcdFxcdGtmcmVlKHNydl9zZXNzX2Rldik7XFxuIDgxMDpcXHRzcnZfZGV2X3B1dDpcXG4gODExOlxcdFxcdGlmIChvcGVuX21zZy1cXHUwMDNlYWNjZXNzX21vZGUgIT0gUk5CRF9BQ0NFU1NfUk8pIHtcXG4gODEyOlxcdFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnNydl9kZXYtXFx1MDAzZWxvY2spO1xcbiA4MTM6XFx0XFx0XFx0c3J2X2Rldi1cXHUwMDNlb3Blbl93cml0ZV9jbnQtLTtcXG4gODE0OlxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2c3J2X2Rldi1cXHUwMDNlbG9jayk7XFxuIDgxNTpcXHRcXHR9XFxuIDgxNjpcXHRcXHRybmJkX3B1dF9zcnZfZGV2KHNydl9kZXYpO1xcbiA4MTc6XFx0YmxrZGV2X3B1dDpcXG4gODE4OlxcdFxcdGZwdXQoYmRldl9maWxlKTtcXG4gODE5OlxcdGZyZWVfcGF0aDpcXG4gODIwOlxcdFxcdGtmcmVlKGZ1bGxfcGF0aCk7XFxuIDgyMTpcXHRyZWplY3Q6XFxuIDgyMjpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnNydl9zZXNzLVxcdTAwM2Vsb2NrKTtcXG4gODIzOlxcdFxcdHJldHVybiByZXQ7XFxuIDgyNDpcXHR9XFxuIDgyNTpcXHRcXG4gODI2OlxcdHN0YXRpYyBzdHJ1Y3QgcnRyc19zcnZfY3R4ICpydHJzX2N0eDtcXG4gODI3OlxcdFxcbiA4Mjg6XFx0c3RhdGljIHN0cnVjdCBydHJzX3Nydl9vcHMgcnRyc19vcHM7XFxuIDgyOTpcXHRzdGF0aWMgaW50IF9faW5pdCBybmJkX3Nydl9pbml0X21vZHVsZSh2b2lkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxODozODoxNS40MDY2MjExNTVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk2MTgyMDc0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlc291cmNlIENsZWFudXAgUGF0aCoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBgZnJlZV9wYXRoYCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBmdW5jdGlvbjogaXQgZnJlZXMgYGZ1bGxfcGF0aGAgYW5kIHRoZW4gcmV0dXJucyBgcmV0YC4gQnV0IHdhaXQsIHNvbWV0aGluZyBzZWVtcyBvZmYuIElmIHRoZSBleGVjdXRpb24ganVtcHMgZGlyZWN0bHkgdG8gYGZyZWVfcGF0aGAsIGl0IG1lYW5zIHRoZSBjb2RlIGlzIHNraXBwaW5nIHRoZSBjYWxscyB0byBgZnJlZV9zcnZfc2Vzc19kZXZgLCBgc3J2X2Rldl9wdXRgLCBhbmQgYGJsa2Rldl9wdXRgLlxuXG5UaGUgcXVlc3Rpb24gdGhhdCBpbW1lZGlhdGVseSBwb3BzIGludG8gbXkgaGVhZCBpcyAqd2h5Kj8gV2h5IGFyZSB0aG9zZSBjbGVhbnVwIGZ1bmN0aW9ucyBiZWluZyBieXBhc3NlZD8gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoaXMgcmVsYXRlcyB0byB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGtvYmplY3Qgd2l0aGluIGBybmJkX3Nydl9jcmVhdGVfZGV2X3Nlc3Npb25fc3lzZnNgLiBJZiB0aGF0IGluaXRpYWxpemF0aW9uIGZhaWxzLCBhIGBrb2JqZWN0X3B1dGAgKnNob3VsZCogYmUgY2FsbGVkLCBidXQgaXMgdGhhdCBoYW5kbGVkIGludGVybmFsbHkgd2l0aGluIGBybmJkX3Nydl9jcmVhdGVfZGV2X3Nlc3Npb25fc3lzZnNgIG9yIGJ5IHRoZSBjYWxsaW5nIGZ1bmN0aW9uPyBJJ20gZ29pbmcgdG8gcXVpY2tseSB2ZXJpZnkgaG93IGBybmJkX3Nydl9jcmVhdGVfZGV2X3Nlc3Npb25fc3lzZnNgIGhhbmRsZXMgZmFpbHVyZXMgdG8gY2xlYXIgdXAgdGhlIGNvbmZ1c2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY5MCwiT3V0cHV0VG9rZW5zIjo1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE4OjM4OjE5LjM2ODQ0Mzc3OFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMyMTQ1ODE1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJybmJkX3Nydl9jcmVhdGVfZGV2X3Nlc3Npb25fc3lzZnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LXN5c2ZzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LXN5c2ZzLmM9MTg3PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIHJuYmRfc3J2X3Nlc3NfZGV2X2t0eXBlID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LXN5c2ZzLmMtMTkxLVxcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi1zeXNmcy5jOjE5MjppbnQgcm5iZF9zcnZfY3JlYXRlX2Rldl9zZXNzaW9uX3N5c2ZzKHN0cnVjdCBybmJkX3Nydl9zZXNzX2RldiAqc2Vzc19kZXYpXFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LXN5c2ZzLmMtMTkzLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTg6Mzg6MjAuNjg5OTA3ODc5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NjY1NDg1MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IERpdmluZyBpbnRvIGBybmJkX3Nydl9jcmVhdGVfZGV2X3Nlc3Npb25fc3lzZnNgKipcblxuUmlnaHQsIGxldCdzIGRpc3NlY3QgYHJuYmRfc3J2X2NyZWF0ZV9kZXZfc2Vzc2lvbl9zeXNmc2AuIEknbSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIHRoaXMgZnVuY3Rpb24ncyBzY29wZSwgZ2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uLiBUaGUgXCJybmJkXCIgcHJlZml4IG9idmlvdXNseSB0aWVzIGl0IHRvIHRoZSBSZWxpYWJsZSBOZXR3b3JrIEJsb2NrIERldmljZSBkcml2ZXIsIGFuZCBcInNydlwiIHN1Z2dlc3RzIHNlcnZlci1zaWRlIGZ1bmN0aW9uYWxpdHkuIFwiY3JlYXRlX2Rldl9zZXNzaW9uXCIgaXMgYSBmYWlybHkgY2xlYXIgaW5kaWNhdG9yOyB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGNyZWF0aW9uIG9mIGEgZGV2aWNlIHNlc3Npb24sIGxpa2VseSB0aWVkIHRvIGEgc3BlY2lmaWMgYmxvY2sgZGV2aWNlIGFic3RyYWN0aW9uLiBUaGUgXCJzeXNmc1wiIHN1ZmZpeCBpcyB0aGUga2V5IGdpdmVhd2F5IGhlcmUg4oCTIGl0IGltcGxpZXMgYSBoZWF2eSByZWxpYW5jZSBvbiB0aGUgc3lzZnMgZmlsZXN5c3RlbSBpbnRlcmZhY2UgZm9yIGNvbmZpZ3VyYXRpb24sIG1hbmFnZW1lbnQsIG9yIHBlcmhhcHMgZXZlbiBjb250cm9sIG9mIHRoaXMgc2Vzc2lvbi5cblxuSSdtIGFscmVhZHkgbWVudGFsbHkgY2hhcnRpbmcgb3V0IHRoZSBwb3RlbnRpYWwgYXJlYXMgb2YgaW50ZXJlc3QuIEknbGwgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQ6XG5cbiogICAqKkRldmljZSBDb250ZXh0OioqIEhvdyB0aGUgYmxvY2sgZGV2aWNlIGluZm9ybWF0aW9uIGlzIHBhc3NlZCBpbiwgcHJlc3VtYWJseSBlaXRoZXIgdGhyb3VnaCBhIHN0cnVjdHVyZSBvciBwZXJoYXBzIGJ5IHNvbWUgZ2xvYmFsIGNvbnRleHQuIFdlJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBvbiBob3cgdGhlIGRldmljZSBpcyBzZWxlY3RlZCAoYnkgZGV2aWNlIG5hbWUsIHBhdGgsIFVVSUQsIGV0Yy4pLlxuKiAgICoqU2Vzc2lvbiBTdHJ1Y3R1cmU6KiogV2hhdCBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGFsbG9jYXRlZCBvciBpbml0aWFsaXplZCBoZXJlPyBXZSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdywgaG93IHRoZSBpbmZvcm1hdGlvbiBpcyBiZWluZyBnYXRoZXJlZCwgd2hpY2ggbWlnaHQgYmUgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBkZXZpY2Ugc2Vzc2lvbiBpcyBzdHJ1Y3R1cmVkLlxuKiAgICoqc3lzZnMgSW50ZWdyYXRpb246KiogVGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIhIEkgZXhwZWN0IGEgbG90IG9mIGludGVyYWN0aW9uIHdpdGggc3lzZnMgZW50cmllcy4gSSdsbCBiZSBsb29raW5nIGZvciBob3cgdGhlIGZ1bmN0aW9uIGNyZWF0ZXMgb3IgcmVnaXN0ZXJzIHN5c2ZzIGZpbGVzIGFuZCBkaXJlY3Rvcmllcy4gVGhlIGtleSBlbGVtZW50cyB3aWxsIGJlIHRoZSBhdHRyaWJ1dGVzLCBhY2Nlc3MgcGVybWlzc2lvbnMsIGFuZCB3aGF0IGtlcm5lbCBvYmplY3RzIHRoZXNlIGVudHJpZXMgYXJlIGV4cG9zaW5nIHRvIHVzZXIgc3BhY2UuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGJhc2ljIGRldmljZSBhdHRyaWJ1dGVzIChsaWtlIHNpemUpLCBvciBtb3JlIGNvbXBsZXggY29udHJvbCBpbnRlcmZhY2VzIChsaWtlIHJlYWQvd3JpdGUgdGltZW91dHMgb3IgY2FjaGluZyBjb25maWd1cmF0aW9ucyk/IFdlIHdpbGwgbmVlZCB0byBpbnZlc3RpZ2F0ZSBhbGwgdGhlIHN5c2ZzIGNhbGxzIHRvIGRldGVybWluZSB0aGVpciBvdmVyYWxsIGZ1bmN0aW9uLlxuKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogR2l2ZW4gdGhhdCBzeXNmcyBvcGVyYXRpb25zIGNhbiBiZSBwcm9uZSB0byBlcnJvcnMsIEknbSBleHBlY3Rpbmcgc29tZSByb2J1c3QgZXJyb3IgaGFuZGxpbmcuIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgcmV0dXJuIGNvZGVzIGFuZCBlcnJvciBwcm9wYWdhdGlvbi5cbiogICAqKkNvbmN1cnJlbmN5IENvbmNlcm5zOioqIElzIHRoZXJlIGFueXRoaW5nIGhlcmUgdGhhdCBzdWdnZXN0cyBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzPyBJIGV4cGVjdCB0aGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMuIEFyZSBsb2NrcyBlbXBsb3llZCBvciBvdGhlciBtZWNoYW5pc21zIHRvIHNhZmVndWFyZCBhZ2FpbnN0IHJhY2UgY29uZGl0aW9ucz8gR2l2ZW4gdGhhdCBgc3lzZnNgIGNhbGxzIGNhbiBiZSBibG9ja2luZyBvcGVyYXRpb25zLCBob3cgaXMgdGhlIHNlc3Npb24gbGlmZXRpbWUgbWFuYWdlZD9cblxuSW4gc2hvcnQsIEknbSBhbnRpY2lwYXRpbmcgYSBkZWVwIGRpdmUgaW50byB0aGUgc2VydmVyLXNpZGUgZXN0YWJsaXNobWVudCBhbmQgc3lzZnMgcmVwcmVzZW50YXRpb24gb2YgYW4gUk5CRCBkZXZpY2Ugc2Vzc2lvbi4gSXQnbGwgYmUgaW50ZXJlc3RpbmcgdG8gc2VlIGhvdyB0aGUga2VybmVsIGV4cG9zZXMgdGhpcyBjb250cm9sIHBsYW5lIHRvIHVzZXIgc3BhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNTcsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxODozODoyNS4zNTY0NTgxMzlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ1NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LXN5c2ZzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTkyLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTkyOlxcdGludCBybmJkX3Nydl9jcmVhdGVfZGV2X3Nlc3Npb25fc3lzZnMoc3RydWN0IHJuYmRfc3J2X3Nlc3NfZGV2ICpzZXNzX2RldilcXG4gMTkzOlxcdHtcXG4gMTk0OlxcdFxcdGludCByZXQ7XFxuIDE5NTpcXHRcXG4gMTk2OlxcdFxcdHJldCA9IGtvYmplY3RfaW5pdF9hbmRfYWRkKFxcdTAwMjZzZXNzX2Rldi1cXHUwMDNla29iaiwgXFx1MDAyNnJuYmRfc3J2X3Nlc3NfZGV2X2t0eXBlLFxcbiAxOTc6XFx0XFx0XFx0XFx0XFx0ICAgc2Vzc19kZXYtXFx1MDAzZWRldi1cXHUwMDNlZGV2X3Nlc3Npb25zX2tvYmosIFxcXCIlc1xcXCIsXFxuIDE5ODpcXHRcXHRcXHRcXHRcXHQgICBzZXNzX2Rldi1cXHUwMDNlc2Vzcy1cXHUwMDNlc2Vzc25hbWUpO1xcbiAxOTk6XFx0XFx0aWYgKHJldCkge1xcbiAyMDA6XFx0XFx0XFx0a29iamVjdF9wdXQoXFx1MDAyNnNlc3NfZGV2LVxcdTAwM2Vrb2JqKTtcXG4gMjAxOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDIwMjpcXHRcXHR9XFxuIDIwMzpcXHRcXG4gMjA0OlxcdFxcdHJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cChcXHUwMDI2c2Vzc19kZXYtXFx1MDAzZWtvYmosXFxuIDIwNTpcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNnJuYmRfc3J2X2RlZmF1bHRfZGV2X3Nlc3Npb25fYXR0cl9ncm91cCk7XFxuIDIwNjpcXHRcXHRpZiAocmV0KSB7XFxuIDIwNzpcXHRcXHRcXHRrb2JqZWN0X2RlbChcXHUwMDI2c2Vzc19kZXYtXFx1MDAzZWtvYmopO1xcbiAyMDg6XFx0XFx0XFx0a29iamVjdF9wdXQoXFx1MDAyNnNlc3NfZGV2LVxcdTAwM2Vrb2JqKTtcXG4gMjA5OlxcdFxcdH1cXG4gMjEwOlxcdFxcbiAyMTE6XFx0XFx0cmV0dXJuIHJldDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTg6Mzg6MjUuMzU2NTM0MTU5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzOTU4MjE5MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIERlZXAgaW50byBEZXZpY2UgU2Vzc2lvbiBDcmVhdGlvbiBhbmQgUmVzb3VyY2UgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEkgc2VlIGBybmJkX3Nydl9jcmVhdGVfZGV2X3Nlc3Npb25fc3lzZnNgIGhhbmRsZXMgZmFpbHVyZSBieSBjYWxsaW5nIGBrb2JqZWN0X3B1dChcdTAwMjZzZXNzX2Rldi1cdTAwM2Vrb2JqKWAuIFRoYXQncyBnb29kLiBJdCBzdWdnZXN0cyB3ZSdyZSBsaWtlbHkgbWFuYWdpbmcgdGhlIGRldmljZSBzZXNzaW9uJ3MgbGlmZWN5Y2xlLCBhbmQgc3BlY2lmaWNhbGx5LCBpdHMga2VybmVsIG9iamVjdCwgd2l0aCBzb21lIGNhcmUuIE5vdywgdGhlIGtleSBpcyB0byB1bmRlcnN0YW5kICpob3cqIHRoYXQgb2JqZWN0IGlzIG1hbmFnZWQuIFRoZSB1c2Ugb2YgYGtvYmplY3RfcHV0YCBoaW50cyBhdCBhIHJlZmVyZW5jZSBjb3VudGluZyBzY2hlbWUsIHdoaWNoIGlzIHByZXR0eSBzdGFuZGFyZCBpbiB0aGUga2VybmVsLiBCdXQsIGJlZm9yZSBJIGdldCBhaGVhZCBvZiBteXNlbGYsIEkgd2FudCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlc291cmNlIHJlbGVhc2UgcHJvY2Vzcy4gTGV0J3MgbWFrZSBzdXJlIHRoYXQgYHJuYmRfc3J2X3Nlc3NfZGV2X2t0eXBlYCBkZWZpbmVzIGEgcHJvcGVyIHJlbGVhc2UgZnVuY3Rpb24uIFRoYXQncyB0aGUgdml0YWwgcGllY2UgdG8gdmVyaWZ5IHRoZSBwcm9wZXIgY2xlYW51cCBvZiB0aGlzIHBhcnRpY3VsYXIgb2JqZWN0LiBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGVhc2UgZnVuY3Rpb24gdG8ga25vdyBpZiBpdHMgcmVmZXJlbmNlIGNvdW50aW5nIGlzIHdvcmtpbmcgY29ycmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjE4LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxODozODoyOC43NTIzNzIzNzVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg1NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LXN5c2ZzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTcwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTcwOlxcdHZvaWQgcm5iZF9zcnZfZGVzdHJveV9kZXZfc2Vzc2lvbl9zeXNmcyhzdHJ1Y3Qgcm5iZF9zcnZfc2Vzc19kZXYgKnNlc3NfZGV2KVxcbiAxNzE6XFx0e1xcbiAxNzI6XFx0XFx0c3lzZnNfcmVtb3ZlX2dyb3VwKFxcdTAwMjZzZXNzX2Rldi1cXHUwMDNla29iaixcXG4gMTczOlxcdFxcdFxcdFxcdCAgIFxcdTAwMjZybmJkX3Nydl9kZWZhdWx0X2Rldl9zZXNzaW9uX2F0dHJfZ3JvdXApO1xcbiAxNzQ6XFx0XFxuIDE3NTpcXHRcXHRrb2JqZWN0X2RlbChcXHUwMDI2c2Vzc19kZXYtXFx1MDAzZWtvYmopO1xcbiAxNzY6XFx0XFx0a29iamVjdF9wdXQoXFx1MDAyNnNlc3NfZGV2LVxcdTAwM2Vrb2JqKTtcXG4gMTc3OlxcdH1cXG4gMTc4OlxcdFxcbiAxNzk6XFx0c3RhdGljIHZvaWQgcm5iZF9zcnZfc2Vzc19kZXZfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcXG4gMTgwOlxcdHtcXG4gMTgxOlxcdFxcdHN0cnVjdCBybmJkX3Nydl9zZXNzX2RldiAqc2Vzc19kZXY7XFxuIDE4MjpcXHRcXG4gMTgzOlxcdFxcdHNlc3NfZGV2ID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBybmJkX3Nydl9zZXNzX2Rldiwga29iaik7XFxuIDE4NDpcXHRcXHRybmJkX2Rlc3Ryb3lfc2Vzc19kZXYoc2Vzc19kZXYsIHNlc3NfZGV2LVxcdTAwM2VrZWVwX2lkKTtcXG4gMTg1OlxcdH1cXG4gMTg2OlxcdFxcbiAxODc6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgcm5iZF9zcnZfc2Vzc19kZXZfa3R5cGUgPSB7XFxuIDE4ODpcXHRcXHQuc3lzZnNfb3BzXFx0PSBcXHUwMDI2a29ial9zeXNmc19vcHMsXFxuIDE4OTpcXHRcXHQucmVsZWFzZVxcdD0gcm5iZF9zcnZfc2Vzc19kZXZfcmVsZWFzZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTg6Mzg6MjguNzUyNDUyNDA1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5OTY4MzY5NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgdGhlIFNlc3Npb24gUmVsZWFzZSBQcm9jZXNzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgdGhlc2UgbmV0d29yayBibG9jayBkZXZpY2Ugc2Vzc2lvbnMgYXJlIGhhbmRsZWQuIEkgc2VlIHRoYXQgYHJuYmRfc3J2X3Nlc3NfZGV2X3JlbGVhc2VgIGlzIHRoZSBrZXkgZnVuY3Rpb24gY2FsbGVkIHdoZW4gYSBzZXNzaW9uIGlzIGJlaW5nIHJlbGVhc2VkLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgd2hhdCdzIGhhcHBlbmluZyAqaW5zaWRlKiB0aGF0IGZ1bmN0aW9uLCB0byBmaWd1cmUgb3V0IGhvdyBpdCdzIGFjdHVhbGx5IGNsZWFuaW5nIHVwIHRoZSByZXNvdXJjZXMuIFJpZ2h0LCBsZXQncyBsb29rIGF0IGBybmJkX2Rlc3Ryb3lfc2Vzc19kZXZgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGUgc2Vzc2lvbiBkZXZpY2UgaXMgZGVzdHJveWVkIHRvIGVuc3VyZSBubyBsZWFrcyBvciBkYW5nbGluZyBwb2ludGVycy4gVGhpcyBmZWVscyBsaWtlIGl0J3MgdGhlIGNvcmUgb2YgdGhlIGNsZWFudXAgcGF0aCwgYW5kIHVuZGVyc3RhbmRpbmcgdGhlIGludGVybmFscyBvZiBgcm5iZF9kZXN0cm95X3Nlc3NfZGV2YCBpcyBjcml0aWNhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTkxMiwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTg6Mzg6MzEuNzQ5MjkxMDkxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjQyNjU4NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicm5iZF9kZXN0cm95X3Nlc3NfZGV2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jPTIxND1zdGF0aWMgdm9pZCBybmJkX3B1dF9zcnZfZGV2KHN0cnVjdCBybmJkX3Nydl9kZXYgKmRldilcXG4tLVxcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jLTIxOC1cXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYzoyMTk6dm9pZCBybmJkX2Rlc3Ryb3lfc2Vzc19kZXYoc3RydWN0IHJuYmRfc3J2X3Nlc3NfZGV2ICpzZXNzX2RldiwgYm9vbCBrZWVwX2lkKVxcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jLTIyMC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE4OjM4OjMyLjExMzU2MTM2M1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDcwMDM5ODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gYHJuYmRfZGVzdHJveV9zZXNzX2RldmAsIGJyb2tlbiBkb3duIGFzIGlmIEknbSBuYXZpZ2F0aW5nIHRoZSBjb2RlIG15c2VsZjpcblxuKipVbmRlcnN0YW5kaW5nIHRoZSBGdW5jdGlvbjogcm5iZF9kZXN0cm95X3Nlc3NfZGV2KipcblxuQWxyaWdodCwgdGhlIG5hbWUgdGVsbHMgbWUgZXhhY3RseSB3aGF0IHRoaXMgZnVuY3Rpb24gKnNob3VsZCogZG86IGRlc3Ryb3kgYSBzZXNzaW9uIGFuZCBpdHMgYXNzb2NpYXRlZCBkZXZpY2UgaW4gYW4gUkRCIChSZW1vdGUgQmxvY2sgRGV2aWNlKSBjb250ZXh0LiBUaGF0IGltcGxpZXMgY2xlYW51cCwgcmVzb3VyY2UgcmVsZWFzZSwgYW5kIHBvdGVudGlhbGx5IGRpc2Nvbm5lY3RpbmcgZnJvbSBhIHJlbW90ZSBzdG9yYWdlIGVuZHBvaW50LiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBvcGVyYXRpb25zIHRoYXQgYXJlIGNyaXRpY2FsIGZvciBkYXRhIGludGVncml0eSBhbmQgc3lzdGVtIHN0YWJpbGl0eS4gTGV0J3Mgc2VlIGhvdyBpdCBnb2VzIGFib3V0IHRoaXMgdGFzay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQ6IFdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/IFdoYXQgcmVzb3VyY2VzIGFyZSBiZWluZyBoYW5kbGVkPyBBbmQsIG9mIGNvdXJzZSwgd2hhdCdzIHRoZSBlcnJvciBoYW5kbGluZyBsaWtlPyBUaGlzIGlzIGFsd2F5cyBhIGNyaXRpY2FsIHBvaW50IGluIHRoZXNlIHR5cGVzIG9mIGZ1bmN0aW9ucywgYXMgYmFkIGVycm9yIGhhbmRsaW5nIGNhbiBsZWFkIHRvIGFsbCBzb3J0cyBvZiBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzE0LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTg6Mzg6MzUuMTgzNjAyOTQzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTksXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMTk6XFx0dm9pZCBybmJkX2Rlc3Ryb3lfc2Vzc19kZXYoc3RydWN0IHJuYmRfc3J2X3Nlc3NfZGV2ICpzZXNzX2RldiwgYm9vbCBrZWVwX2lkKVxcbiAyMjA6XFx0e1xcbiAyMjE6XFx0XFx0REVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0soZGMpO1xcbiAyMjI6XFx0XFxuIDIyMzpcXHRcXHRpZiAoa2VlcF9pZClcXG4gMjI0OlxcdFxcdFxcdC8qIGZyZWUgdGhlIHJlc291cmNlcyBmb3IgdGhlIGlkIGJ1dCBkb24ndCAgKi9cXG4gMjI1OlxcdFxcdFxcdC8qIGFsbG93IHRvIHJlLXVzZSB0aGUgaWQgaXRzZWxmIGJlY2F1c2UgaXQgKi9cXG4gMjI2OlxcdFxcdFxcdC8qIGlzIHN0aWxsIHVzZWQgYnkgdGhlIGNsaWVudCAgICAgICAgICAgICAgKi9cXG4gMjI3OlxcdFxcdFxcdHhhX2NtcHhjaGcoXFx1MDAyNnNlc3NfZGV2LVxcdTAwM2VzZXNzLVxcdTAwM2VpbmRleF9pZHIsIHNlc3NfZGV2LVxcdTAwM2VkZXZpY2VfaWQsXFxuIDIyODpcXHRcXHRcXHRcXHQgICBzZXNzX2RldiwgTlVMTCwgMCk7XFxuIDIyOTpcXHRcXHRlbHNlXFxuIDIzMDpcXHRcXHRcXHR4YV9lcmFzZShcXHUwMDI2c2Vzc19kZXYtXFx1MDAzZXNlc3MtXFx1MDAzZWluZGV4X2lkciwgc2Vzc19kZXYtXFx1MDAzZWRldmljZV9pZCk7XFxuIDIzMTpcXHRcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4gMjMyOlxcdFxcbiAyMzM6XFx0XFx0c2Vzc19kZXYtXFx1MDAzZWRlc3Ryb3lfY29tcCA9IFxcdTAwMjZkYztcXG4gMjM0OlxcdFxcdHJuYmRfcHV0X3Nlc3NfZGV2KHNlc3NfZGV2KTtcXG4gMjM1OlxcdFxcdHdhaXRfZm9yX2NvbXBsZXRpb24oXFx1MDAyNmRjKTsgLyogd2FpdCBmb3IgaW5mbGlnaHRzIHRvIGRyb3AgdG8gemVybyAqL1xcbiAyMzY6XFx0XFxuIDIzNzpcXHRcXHRmcHV0KHNlc3NfZGV2LVxcdTAwM2ViZGV2X2ZpbGUpO1xcbiAyMzg6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2c2Vzc19kZXYtXFx1MDAzZWRldi1cXHUwMDNlbG9jayk7XFxuIDIzOTpcXHRcXHRsaXN0X2RlbChcXHUwMDI2c2Vzc19kZXYtXFx1MDAzZWRldl9saXN0KTtcXG4gMjQwOlxcdFxcdGlmICghc2Vzc19kZXYtXFx1MDAzZXJlYWRvbmx5KVxcbiAyNDE6XFx0XFx0XFx0c2Vzc19kZXYtXFx1MDAzZWRldi1cXHUwMDNlb3Blbl93cml0ZV9jbnQtLTtcXG4gMjQyOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2c2Vzc19kZXYtXFx1MDAzZWRldi1cXHUwMDNlbG9jayk7XFxuIDI0MzpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTg6Mzg6MzUuMTgzNzA1MzEzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMzk4MDcwNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uY2VybiBSZWdhcmRpbmcgYHJuYmRfZGVzdHJveV9zZXNzX2RldmAgYW5kIExpc3QgQ29ycnVwdGlvbioqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIFRoaXMgYHJuYmRfZGVzdHJveV9zZXNzX2RldmAgZnVuY3Rpb27igKYgaXQncyBjYWxsaW5nIGBsaXN0X2RlbChcdTAwMjZzZXNzX2Rldi1cdTAwM2VkZXZfbGlzdClgLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGZsYWdzIGEgcG90ZW50aWFsIGlzc3VlIGhlcmUuIElmLCBhbmQgdGhhdCdzIGEgKmJpZyogaWYsIHRoZSBgc2Vzc19kZXZgIHN0cnVjdHVyZSB3YXMgKm5ldmVyKiBhZGRlZCB0byB0aGUgYHNlc3NfZGV2LVx1MDAzZWRldi1cdTAwM2VzZXNzX2Rldl9saXN0YCBiZWZvcmUgYHJuYmRfc3J2X2NyZWF0ZV9kZXZfc2Vzc2lvbl9zeXNmc2AgZmFpbGVkLCB0aGVuIHRoYXQgYGxpc3RfZGVsYCBjYWxsIGlzIGdvaW5nIHRvIGNhdXNlIGEgY3Jhc2gsIG9yIGF0IHRoZSB2ZXJ5IGxlYXN0LCBjb3JydXB0IHRoZSBsaXN0LiBUaGUgYGRldl9saXN0YCB3b3VsZCBiZSBlaXRoZXIgdW5pbml0aWFsaXplZCBvciBhbiBlbXB0eSBjb250YWluZXIsIGFuZCBhdHRlbXB0aW5nIHRvIHJlbW92ZSBhbiBlbGVtZW50IHRoYXQgaXNuJ3QgcGFydCBvZiBpdCBpcyBhIGRpc2FzdGVyIHdhaXRpbmcgdG8gaGFwcGVuLiBXZSd2ZSBzZWVuIHRoaXMgcGF0dGVybiBiZWZvcmUsIGFuZCBJJ20gZ2V0dGluZyBhIGJhZCBmZWVsaW5nLiBSaWdodCwgdGltZSB0byBkaWcgZGVlcGVyLiBXaGVyZSBleGFjdGx5IGlzIGBkZXZfbGlzdGAgaW5pdGlhbGl6ZWQ/IE5lZWQgdG8gdHJhY2UgYmFjayBhbmQgdmVyaWZ5IHRoYXQgaXQncyBiZWluZyBwcm9wZXJseSBtYW5hZ2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTAwMywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE4OjM4OjM5LjMyMzUxNDI0MloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2MDM2MjY3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXZfbGlzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYz02Nj1zdGF0aWMgTElTVF9IRUFEKHNlc3NfbGlzdCk7XFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM6Njc6c3RhdGljIExJU1RfSEVBRChkZXZfbGlzdCk7XFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmMtNjgtXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYz0xOTI9c3RhdGljIHZvaWQgZGVzdHJveV9kZXZpY2Uoc3RydWN0IGtyZWYgKmtyZWYpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy0xOTUtXFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM6MTk2OlxcdFdBUk5fT05DRSghbGlzdF9lbXB0eShcXHUwMDI2ZGV2LVxcdTAwM2VzZXNzX2Rldl9saXN0KSxcXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy0xOTctXFx0XFx0ICBcXFwiRGV2aWNlICVzIGlzIGJlaW5nIGRlc3Ryb3llZCBidXQgc3RpbGwgaW4gdXNlIVxcXFxuXFxcIixcXG4tLVxcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jPTIxOT12b2lkIHJuYmRfZGVzdHJveV9zZXNzX2RldihzdHJ1Y3Qgcm5iZF9zcnZfc2Vzc19kZXYgKnNlc3NfZGV2LCBib29sIGtlZXBfaWQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy0yMzgtXFx0bXV0ZXhfbG9jayhcXHUwMDI2c2Vzc19kZXYtXFx1MDAzZWRldi1cXHUwMDNlbG9jayk7XFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM6MjM5OlxcdGxpc3RfZGVsKFxcdTAwMjZzZXNzX2Rldi1cXHUwMDNlZGV2X2xpc3QpO1xcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jLTI0MC1cXHRpZiAoIXNlc3NfZGV2LVxcdTAwM2VyZWFkb25seSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jPTQ0MD1zdGF0aWMgc3RydWN0IHJuYmRfc3J2X2RldiAqcm5iZF9zcnZfaW5pdF9zcnZfZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy00NDktXFx0a3JlZl9pbml0KFxcdTAwMjZkZXYtXFx1MDAzZWtyZWYpO1xcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jOjQ1MDpcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2ZGV2LVxcdTAwM2VzZXNzX2Rldl9saXN0KTtcXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy00NTEtXFx0bXV0ZXhfaW5pdChcXHUwMDI2ZGV2LVxcdTAwM2Vsb2NrKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jPTQ1Nz1ybmJkX3Nydl9maW5kX29yX2FkZF9zcnZfZGV2KHN0cnVjdCBybmJkX3Nydl9kZXYgKm5ld19kZXYpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy00NjEtXFx0c3Bpbl9sb2NrKFxcdTAwMjZkZXZfbG9jayk7XFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM6NDYyOlxcdGxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCBcXHUwMDI2ZGV2X2xpc3QsIGxpc3QpIHtcXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy00NjMtXFx0XFx0aWYgKCFzdHJuY21wKGRldi1cXHUwMDNlbmFtZSwgbmV3X2Rldi1cXHUwMDNlbmFtZSwgc2l6ZW9mKGRldi1cXHUwMDNlbmFtZSkpKSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy00NzMtXFx0fVxcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jOjQ3NDpcXHRsaXN0X2FkZChcXHUwMDI2bmV3X2Rldi1cXHUwMDNlbGlzdCwgXFx1MDAyNmRldl9saXN0KTtcXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy00NzUtXFx0c3Bpbl91bmxvY2soXFx1MDAyNmRldl9sb2NrKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jPTY5MT1zdGF0aWMgaW50IHByb2Nlc3NfbXNnX29wZW4oc3RydWN0IHJuYmRfc3J2X3Nlc3Npb24gKnNydl9zZXNzLFxcbi0tXFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmMtNzg2LVxcdCAqL1xcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jOjc4NzpcXHRsaXN0X2FkZChcXHUwMDI2c3J2X3Nlc3NfZGV2LVxcdTAwM2VkZXZfbGlzdCwgXFx1MDAyNnNydl9kZXYtXFx1MDAzZXNlc3NfZGV2X2xpc3QpO1xcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jLTc4OC1cXHRtdXRleF91bmxvY2soXFx1MDAyNnNydl9kZXYtXFx1MDAzZWxvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxODozODo0MC41ODM4ODI0NThaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ0OTkyNDM5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiBgc3J2X3Nlc3NfZGV2YCBBbGxvY2F0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kIG15IGZpcnN0IHRob3VnaHQgaXMsIGhhbmcgb24gYSBzZWNvbmQuIEkgc2VlIHRoYXQgYHNydl9zZXNzX2RldmAsIHRoYXQgY3J1Y2lhbCBzdHJ1Y3R1cmUsIGlzIGJlaW5nIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY2AgaW5zaWRlIGBwcm9jZXNzX21zZ19vcGVuYC4gQWxyaWdodCwgdGhhdCdzIGltcG9ydGFudCB0byByZW1lbWJlci4gYGt6YWxsb2NgIGlzIHRoZSBrZXl3b3JkIGhlcmUgLSB6ZXJvLWluaXRpYWxpemVkIGFsbG9jYXRpb24uIFRoYXQgbWVhbnMgd2UncmUgc3RhcnRpbmcgd2l0aCBhIGNsZWFuIHNsYXRlLCBldmVyeXRoaW5nIGluIHRoYXQgYWxsb2NhdGVkIG1lbW9yeSBpcyBndWFyYW50ZWVkIHRvIGJlIHplcm8uIE5vIGdhcmJhZ2UgdmFsdWVzLiBUaGlzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgcHJlZGljdGFibGUgYmVoYXZpb3IsIGVzcGVjaWFsbHkgaWYgc29tZSBwYXJ0cyBvZiB0aGUgc3RydWN0dXJlIGFyZSBpbnRlbmRlZCB0byBzdG9yZSBmbGFncywgY291bnRlcnMsIG9yIHBvaW50ZXJzIHRoYXQgd2lsbCBiZSBjaGVja2VkIGltbWVkaWF0ZWx5IGFmdGVyIGFsbG9jYXRpb24uIFRoaXMgaXMgYSB2ZXJ5IGJhc2ljIGJ1dCB2ZXJ5IGltcG9ydGFudCB0aGluZyB0byBrbm93LCBhbmQgSSBuZWVkIHRvIGtlZXAgaXQgaW4gbWluZCBhcyBJIGxvb2sgYXQgd2hhdCBmb2xsb3dzIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzI4LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTg6Mzg6NDUuMDMzODA4NjA1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3NzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcxMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDcxMDpcXHRcXG4gNzExOlxcdFxcdHNydl9zZXNzX2RldiA9IGZpbmRfc3J2X3Nlc3NfZGV2KHNydl9zZXNzLCBvcGVuX21zZy1cXHUwMDNlZGV2X25hbWUpO1xcbiA3MTI6XFx0XFx0aWYgKHNydl9zZXNzX2RldilcXG4gNzEzOlxcdFxcdFxcdGdvdG8gZmlsbF9yZXNwb25zZTtcXG4gNzE0OlxcdFxcbiA3MTU6XFx0XFx0aWYgKChzdHJsZW4oZGV2X3NlYXJjaF9wYXRoKSArIHN0cmxlbihvcGVuX21zZy1cXHUwMDNlZGV2X25hbWUpKVxcbiA3MTY6XFx0XFx0ICAgIFxcdTAwM2U9IFBBVEhfTUFYKSB7XFxuIDcxNzpcXHRcXHRcXHRwcl9lcnIoXFxcIk9wZW5pbmcgZGV2aWNlIGZvciBzZXNzaW9uICVzIGZhaWxlZCwgZGV2aWNlIHBhdGggdG9vIGxvbmcuICclcy8lcycgaXMgbG9uZ2VyIHRoYW4gUEFUSF9NQVggKCVkKVxcXFxuXFxcIixcXG4gNzE4OlxcdFxcdFxcdCAgICAgICBzcnZfc2Vzcy1cXHUwMDNlc2Vzc25hbWUsIGRldl9zZWFyY2hfcGF0aCwgb3Blbl9tc2ctXFx1MDAzZWRldl9uYW1lLFxcbiA3MTk6XFx0XFx0XFx0ICAgICAgIFBBVEhfTUFYKTtcXG4gNzIwOlxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuIDcyMTpcXHRcXHRcXHRnb3RvIHJlamVjdDtcXG4gNzIyOlxcdFxcdH1cXG4gNzIzOlxcdFxcdGlmIChzdHJzdHIob3Blbl9tc2ctXFx1MDAzZWRldl9uYW1lLCBcXFwiLi5cXFwiKSkge1xcbiA3MjQ6XFx0XFx0XFx0cHJfZXJyKFxcXCJPcGVuaW5nIGRldmljZSBmb3Igc2Vzc2lvbiAlcyBmYWlsZWQsIGRldmljZSBwYXRoICVzIGNvbnRhaW5zIHJlbGF0aXZlIHBhdGggLi5cXFxcblxcXCIsXFxuIDcyNTpcXHRcXHRcXHQgICAgICAgc3J2X3Nlc3MtXFx1MDAzZXNlc3NuYW1lLCBvcGVuX21zZy1cXHUwMDNlZGV2X25hbWUpO1xcbiA3MjY6XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4gNzI3OlxcdFxcdFxcdGdvdG8gcmVqZWN0O1xcbiA3Mjg6XFx0XFx0fVxcbiA3Mjk6XFx0XFx0ZnVsbF9wYXRoID0gcm5iZF9zcnZfZ2V0X2Z1bGxfcGF0aChzcnZfc2Vzcywgb3Blbl9tc2ctXFx1MDAzZWRldl9uYW1lKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTg6Mzg6NDUuMDMzODk3NzA1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyOTk3MTQ3ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIEknbSByZWFkeS4gTGV0J3Mgc2VlIHdoYXQgeW91J3ZlIGdvdC4gSSdsbCBhcHByb2FjaCB0aGlzIGxpa2UgSSdtIGRpc3NlY3RpbmcgYSByZXNlYXJjaCBwYXBlciwgYnJlYWtpbmcgZG93biB0aGUgYXV0aG9yJ3MgbG9naWMgYW5kIGZyYW1pbmcgaXQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2Vzcy5cblxuKipBbmFseXppbmcgdGhlIFRleHQ6IEEgRGVlcGVyIERpdmUqKlxuXG5BbHJpZ2h0LCB0aGUgaW5zdHJ1Y3Rpb24gaXMgdG8gcmVhZCB0aGUgdGV4dC4gT2theSwgc2ltcGxlIGVub3VnaCwgYnV0IHdoZXJlIGRvZXMgaXQgbGVhZD8gV2hhdCBxdWVzdGlvbiB3aWxsIGJlIGFuc3dlcmVkPyBXaGF0IHByb2JsZW0gd2lsbCBiZSBzb2x2ZWQ/IFRoaXMgaW5pdGlhbCBkaXJlY3RpdmUgc2V0cyB0aGUgc3RhZ2UuIE5vdywgSSBoYXZlIHRvIGFzc3VtZSB0aGUgYXV0aG9yIHdhbnRzIG1lIHRvIHJlYWQgd2l0aCBhIHB1cnBvc2UsIHRvIGV4dHJhY3QgaW5mb3JtYXRpb24uIEknbGwgdHJ5IHRvIGZpbmQgdGhlIGhpZGRlbiBudWdnZXRzIG9mIHRob3VnaHQgYW5kIGludGVycHJldGF0aW9uIGhlcmUuIEZyb20gdGhlIGJlZ2lubmluZyBpdCBzZWVtcyBhcyB0aG91Z2ggdGhpcyBpcyBnb2luZyB0byBiZSBhYm91dCBnYWluaW5nIGEgd2lkZXIgdW5kZXJzdGFuZGluZyBvZiBhIHRvcGljLiBUaGlzIGlzIGp1c3QgYSBwcmVsaW1pbmFyeSBzdGVwLCB0aG91Z2guXG5cbkkgaGF2ZSB0byByZWFkIGZ1cnRoZXIgZG93biB0byBzZWUgd2hhdCBpbnNpZ2h0cyBJIGFtIG1lYW50IHRvIGdsZWFuLiBJIGhhdmUgdG8gcmVtYWluIG9wZW4tbWluZGVkLCByZWFkeSB0byBhZGp1c3QgbXkgZXhpc3RpbmcgYXNzdW1wdGlvbnMgYW5kIGV4cGVydGlzZSB0byBhY2NvbW1vZGF0ZSBuZXcgcGVyc3BlY3RpdmVzLiBUaGUgbmV4dCB0ZXh0IHNob3VsZCBzdGFydCB0byBidWlsZCB1cG9uIHRoZSBmaXJzdCBzbyB0aGF0IEkgY2FuIGdldCBhIGJldHRlciBpZGVhIG9mIHRoZSBhdXRob3IncyB0cmFpbiBvZiB0aG91Z2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjk2NCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxODozODo0OC4zMzM2MTUxNjdaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzMwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzMwOlxcdFxcdGlmIChJU19FUlIoZnVsbF9wYXRoKSkge1xcbiA3MzE6XFx0XFx0XFx0cmV0ID0gUFRSX0VSUihmdWxsX3BhdGgpO1xcbiA3MzI6XFx0XFx0XFx0cHJfZXJyKFxcXCJPcGVuaW5nIGRldmljZSAnJXMnIGZvciBjbGllbnQgJXMgZmFpbGVkLCBmYWlsZWQgdG8gZ2V0IGRldmljZSBmdWxsIHBhdGgsIGVycjogJXBlXFxcXG5cXFwiLFxcbiA3MzM6XFx0XFx0XFx0ICAgICAgIG9wZW5fbXNnLVxcdTAwM2VkZXZfbmFtZSwgc3J2X3Nlc3MtXFx1MDAzZXNlc3NuYW1lLCBmdWxsX3BhdGgpO1xcbiA3MzQ6XFx0XFx0XFx0Z290byByZWplY3Q7XFxuIDczNTpcXHRcXHR9XFxuIDczNjpcXHRcXG4gNzM3OlxcdFxcdGJkZXZfZmlsZSA9IGJkZXZfZmlsZV9vcGVuX2J5X3BhdGgoZnVsbF9wYXRoLCBvcGVuX2ZsYWdzLCBOVUxMLCBOVUxMKTtcXG4gNzM4OlxcdFxcdGlmIChJU19FUlIoYmRldl9maWxlKSkge1xcbiA3Mzk6XFx0XFx0XFx0cmV0ID0gUFRSX0VSUihiZGV2X2ZpbGUpO1xcbiA3NDA6XFx0XFx0XFx0cHJfZXJyKFxcXCJPcGVuaW5nIGRldmljZSAnJXMnIG9uIHNlc3Npb24gJXMgZmFpbGVkLCBmYWlsZWQgdG8gb3BlbiB0aGUgYmxvY2sgZGV2aWNlLCBlcnI6ICVwZVxcXFxuXFxcIixcXG4gNzQxOlxcdFxcdFxcdCAgICAgICBmdWxsX3BhdGgsIHNydl9zZXNzLVxcdTAwM2VzZXNzbmFtZSwgYmRldl9maWxlKTtcXG4gNzQyOlxcdFxcdFxcdGdvdG8gZnJlZV9wYXRoO1xcbiA3NDM6XFx0XFx0fVxcbiA3NDQ6XFx0XFxuIDc0NTpcXHRcXHRzcnZfZGV2ID0gcm5iZF9zcnZfZ2V0X29yX2NyZWF0ZV9zcnZfZGV2KGZpbGVfYmRldihiZGV2X2ZpbGUpLCBzcnZfc2VzcyxcXG4gNzQ2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgb3Blbl9tc2ctXFx1MDAzZWFjY2Vzc19tb2RlKTtcXG4gNzQ3OlxcdFxcdGlmIChJU19FUlIoc3J2X2RldikpIHtcXG4gNzQ4OlxcdFxcdFxcdHByX2VycihcXFwiT3BlbmluZyBkZXZpY2UgJyVzJyBvbiBzZXNzaW9uICVzIGZhaWxlZCwgY3JlYXRpbmcgc3J2X2RldiBmYWlsZWQsIGVycjogJXBlXFxcXG5cXFwiLFxcbiA3NDk6XFx0XFx0XFx0ICAgICAgIGZ1bGxfcGF0aCwgc3J2X3Nlc3MtXFx1MDAzZXNlc3NuYW1lLCBzcnZfZGV2KTtcXG4gNzUwOlxcdFxcdFxcdHJldCA9IFBUUl9FUlIoc3J2X2Rldik7XFxuIDc1MTpcXHRcXHRcXHRnb3RvIGJsa2Rldl9wdXQ7XFxuIDc1MjpcXHRcXHR9XFxuIDc1MzpcXHRcXG4gNzU0OlxcdFxcdHNydl9zZXNzX2RldiA9IHJuYmRfc3J2X2NyZWF0ZV9zZXRfc2Vzc19kZXYoc3J2X3Nlc3MsIG9wZW5fbXNnLFxcbiA3NTU6XFx0XFx0XFx0XFx0XFx0YmRldl9maWxlLFxcbiA3NTY6XFx0XFx0XFx0XFx0XFx0b3Blbl9tc2ctXFx1MDAzZWFjY2Vzc19tb2RlID09IFJOQkRfQUNDRVNTX1JPLFxcbiA3NTc6XFx0XFx0XFx0XFx0XFx0c3J2X2Rldik7XFxuIDc1ODpcXHRcXHRpZiAoSVNfRVJSKHNydl9zZXNzX2RldikpIHtcXG4gNzU5OlxcdFxcdFxcdHByX2VycihcXFwiT3BlbmluZyBkZXZpY2UgJyVzJyBvbiBzZXNzaW9uICVzIGZhaWxlZCwgY3JlYXRpbmcgc2Vzc19kZXYgZmFpbGVkLCBlcnI6ICVwZVxcXFxuXFxcIixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTg6Mzg6NDguMzMzNzA5MTk3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMTQ5NjY0MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRlZXAgRGl2ZSBpbnRvIGBybmJkX3Nydl9jcmVhdGVfc2V0X3Nlc3NfZGV2YCoqXG5cbkFscmlnaHQsIGxldCdzIHplcm8gaW4gb24gdGhpcyBgcm5iZF9zcnZfY3JlYXRlX3NldF9zZXNzX2RldmAgZnVuY3Rpb24uIFRoZSBrZXkgaGVyZSBpcyBpdHMgcm9sZSBpbiBhbGxvY2F0aW5nIGEgYHNydl9zZXNzX2RldmAgc3RydWN0dXJlLiBUaGF0J3MgdGhlIGNvcmUgb2YgaG93IHRoaXMgc2VydmljZSBtYW5hZ2VzIGRldmljZSBzZXNzaW9ucywgc28gdW5kZXJzdGFuZGluZyBpdHMgaW5pdGlhbGl6YXRpb24gaXMgcGFyYW1vdW50LiBJIG5lZWQgdG8gY29uZmlybSB0aGUgY29ycmVjdCBpbnN0YW50aWF0aW9uIG9mIHRoYXQgc3RydWN0dXJlLiBJIGtub3cgdGhlIGludHJpY2FjaWVzIG9mIG1lbW9yeSBtYW5hZ2VtZW50IGluIHRoaXMgY29udGV4dCwgYW5kIHdhbnQgdG8gY29uZmlybSBpdHMgcHJvcGVyIGFsbG9jYXRpb24gYW5kIGluaXRpYWwgc2V0dGluZ3MuIEFueSBtaXNzdGVwcyBoZXJlIGNhbiBwcm9wYWdhdGUgc2VyaW91cyBlcnJvcnMsIHNvIGxldCdzIGRpZyBkZWVwZXIgYW5kIHZlcmlmeSB0aGF0IGV2ZXJ5dGhpbmcgaXMgbGluaW5nIHVwIGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4NTksIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE4OjM4OjUxLjM0ODY3Nzg1MVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzUzMjY5MzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJuYmRfc3J2X2NyZWF0ZV9zZXRfc2Vzc19kZXZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM9NTc3PXN0YXRpYyBzdHJ1Y3Qgcm5iZF9zcnZfc2Vzc19kZXYgKlxcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jOjU3ODpybmJkX3Nydl9jcmVhdGVfc2V0X3Nlc3NfZGV2KHN0cnVjdCBybmJkX3Nydl9zZXNzaW9uICpzcnZfc2VzcyxcXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy01NzktXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IHJuYmRfbXNnX29wZW4gKm9wZW5fbXNnLFxcbi0tXFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM9NjkxPXN0YXRpYyBpbnQgcHJvY2Vzc19tc2dfb3BlbihzdHJ1Y3Qgcm5iZF9zcnZfc2Vzc2lvbiAqc3J2X3Nlc3MsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy03NTMtXFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM6NzU0OlxcdHNydl9zZXNzX2RldiA9IHJuYmRfc3J2X2NyZWF0ZV9zZXRfc2Vzc19kZXYoc3J2X3Nlc3MsIG9wZW5fbXNnLFxcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jLTc1NS1cXHRcXHRcXHRcXHRiZGV2X2ZpbGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE4OjM4OjUxLjcwMTk1MjY1NVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzI0NTQ5MTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gYHJuYmRfc3J2X2NyZWF0ZV9zZXRfc2Vzc19kZXZgOlxuXG4qKlVuZGVyc3RhbmRpbmcgYHJuYmRfc3J2X2NyZWF0ZV9zZXRfc2Vzc19kZXZgKipcblxuQWxyaWdodCwgSSBzZWUgdGhpcyBmdW5jdGlvbiBuYW1lIOKAkyBgcm5iZF9zcnZfY3JlYXRlX3NldF9zZXNzX2RldmAuIEZyb20gdGhlIG5hbWluZyBjb252ZW50aW9uLCBpdCdzIHByZXR0eSBjbGVhciB0aGlzIGlzIHJlbGF0ZWQgdG8gdGhlIFJEQk4gKFJlbGlhYmxlIE5ldHdvcmsgQmxvY2sgRGV2aWNlKSBzZXJ2ZXIgc2lkZS4gVGhlIFwiY3JlYXRlXCIgc3VnZ2VzdHMgaXQncyBpbnZvbHZlZCBpbiBzZXNzaW9uIG9yIGRldmljZSBzZXR1cC4gXCJTZXRcIiBpbXBsaWVzIHNvbWUgY29uZmlndXJhdGlvbiBvciBhc3NpZ25tZW50IGlzIGludm9sdmVkLCBhbmQgXCJzZXNzX2RldlwiIG5pY2VseSBuYXJyb3dzIGl0IGRvd24gdG8gc29tZXRoaW5nIHNwZWNpZmljIHRvIHRoZSBzZXNzaW9uIGFuZCBkZXZpY2UgY29udGV4dCB3aXRoaW4gdGhlIFJEQk4gc2VydmVyLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgc3VjaCBhIGZ1bmN0aW9uIHdvdWxkIHByb2JhYmx5IGJlIGNyaXRpY2FsIGluIGluaXRpYWxpemluZyBhIGNsaWVudCBjb25uZWN0aW9uIG9yIGNvbmZpZ3VyaW5nIGhvdyBhIGRldmljZSBnZXRzIHByZXNlbnRlZCB0byB0aGUgcmVxdWVzdGluZyBjbGllbnQuIEkgYmV0IHRoZSBkZXRhaWxzIGluc2lkZSB0aGF0IGZ1bmN0aW9uIHdvdWxkIGdpdmUgbWUgYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIHNlcnZlciBtYW5hZ2VzIHJlc291cmNlcyBkdXJpbmcgYmxvY2sgSS9PIG9wZXJhdGlvbnMuIExldCdzIHNlZSBpZiBteSBpbml0aWFsIHRob3VnaHQgaXMgY29ycmVjdCwgYW5kIHdoYXQgSSBjYW4gbGVhcm4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzY5LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTg6Mzg6NTguMDI2NTAzODgxWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTM1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NzcsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1Nzc6XFx0c3RhdGljIHN0cnVjdCBybmJkX3Nydl9zZXNzX2RldiAqXFxuIDU3ODpcXHRybmJkX3Nydl9jcmVhdGVfc2V0X3Nlc3NfZGV2KHN0cnVjdCBybmJkX3Nydl9zZXNzaW9uICpzcnZfc2VzcyxcXG4gNTc5OlxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBybmJkX21zZ19vcGVuICpvcGVuX21zZyxcXG4gNTgwOlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBmaWxlICpiZGV2X2ZpbGUsIGJvb2wgcmVhZG9ubHksXFxuIDU4MTpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgcm5iZF9zcnZfZGV2ICpzcnZfZGV2KVxcbiA1ODI6XFx0e1xcbiA1ODM6XFx0XFx0c3RydWN0IHJuYmRfc3J2X3Nlc3NfZGV2ICpzZGV2ID0gcm5iZF9zZXNzX2Rldl9hbGxvYyhzcnZfc2Vzcyk7XFxuIDU4NDpcXHRcXG4gNTg1OlxcdFxcdGlmIChJU19FUlIoc2RldikpXFxuIDU4NjpcXHRcXHRcXHRyZXR1cm4gc2RldjtcXG4gNTg3OlxcdFxcbiA1ODg6XFx0XFx0a3JlZl9pbml0KFxcdTAwMjZzZGV2LVxcdTAwM2VrcmVmKTtcXG4gNTg5OlxcdFxcbiA1OTA6XFx0XFx0c3Ryc2NweShzZGV2LVxcdTAwM2VwYXRobmFtZSwgb3Blbl9tc2ctXFx1MDAzZWRldl9uYW1lLCBzaXplb2Yoc2Rldi1cXHUwMDNlcGF0aG5hbWUpKTtcXG4gNTkxOlxcdFxcbiA1OTI6XFx0XFx0c2Rldi1cXHUwMDNlYmRldl9maWxlXFx0XFx0PSBiZGV2X2ZpbGU7XFxuIDU5MzpcXHRcXHRzZGV2LVxcdTAwM2VzZXNzXFx0XFx0PSBzcnZfc2VzcztcXG4gNTk0OlxcdFxcdHNkZXYtXFx1MDAzZWRldlxcdFxcdD0gc3J2X2RldjtcXG4gNTk1OlxcdFxcdHNkZXYtXFx1MDAzZXJlYWRvbmx5XFx0XFx0PSByZWFkb25seTtcXG4gNTk2OlxcdFxcdHNkZXYtXFx1MDAzZWFjY2Vzc19tb2RlXFx0PSBvcGVuX21zZy1cXHUwMDNlYWNjZXNzX21vZGU7XFxuIDU5NzpcXHRcXG4gNTk4OlxcdFxcdHJldHVybiBzZGV2O1xcbiA1OTk6XFx0fVxcbiA2MDA6XFx0XFxuIDYwMTpcXHRzdGF0aWMgY2hhciAqcm5iZF9zcnZfZ2V0X2Z1bGxfcGF0aChzdHJ1Y3Qgcm5iZF9zcnZfc2Vzc2lvbiAqc3J2X3Nlc3MsXFxuIDYwMjpcXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKmRldl9uYW1lKVxcbiA2MDM6XFx0e1xcbiA2MDQ6XFx0XFx0Y2hhciAqZnVsbF9wYXRoO1xcbiA2MDU6XFx0XFx0Y2hhciAqYSwgKmI7XFxuIDYwNjpcXHRcXHRpbnQgbGVuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxODozODo1OC4wMjY2MzczNjFaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEyNTUyNTI3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYHJuYmRfc2Vzc19kZXZfYWxsb2NgKipcblxuT2theSwgc28gYHJuYmRfc2Vzc19kZXZfYWxsb2NgIGlzIHJlc3BvbnNpYmxlIGZvciBhbGxvY2F0aW5nIGBzZGV2YC4gVGltZSB0byBkcmlsbCBkb3duIGludG8gdGhhdCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yLCBlc3BlY2lhbGx5IGl0cyByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBlcnJvciBoYW5kbGluZywgaW4gcmVsYXRpb24gdG8gdGhlIGBzZGV2YCBzdHJ1Y3R1cmUuIEknbSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mIGRldmljZSBhbGxvY2F0aW9uIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgb3ZlcmFsbCByTkJEIHNlc3Npb24gbGlmZWN5Y2xlLiBBcmUgdGhlcmUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBJIHNob3VsZCBiZSBsb29raW5nIG91dCBmb3I/IFdoYXQncyB0aGUgaW1wYWN0IGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxzIOKAkyBkb2VzIGl0IGhhbmRsZSBlcnJvcnMgZ3JhY2VmdWxseSwgb3IgY291bGQgd2UgaGF2ZSByZXNvdXJjZSBsZWFrcz8gSSdtIGdvaW5nIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCB0byBnZXQgYSBmdWxsIHBpY3R1cmUuIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTQ4LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxODozOTowMS4xNTIxNjQzNzRaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NTM3NzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJuYmRfc2Vzc19kZXZfYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM9NDE5PXN0YXRpYyBzdHJ1Y3Qgcm5iZF9zcnZfc2Vzc19kZXZcXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYzo0MjA6KnJuYmRfc2Vzc19kZXZfYWxsb2Moc3RydWN0IHJuYmRfc3J2X3Nlc3Npb24gKnNydl9zZXNzKVxcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jLTQyMS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYz01Nzg9cm5iZF9zcnZfY3JlYXRlX3NldF9zZXNzX2RldihzdHJ1Y3Qgcm5iZF9zcnZfc2Vzc2lvbiAqc3J2X3Nlc3MsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy01ODIte1xcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jOjU4MzpcXHRzdHJ1Y3Qgcm5iZF9zcnZfc2Vzc19kZXYgKnNkZXYgPSBybmJkX3Nlc3NfZGV2X2FsbG9jKHNydl9zZXNzKTtcXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy01ODQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE4OjM5OjAxLjIxMDcwNzE3WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMjk2NDAxNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIGFzIEkgYXBwcm9hY2ggcmVhZGluZyBgcm5iZF9zZXNzX2Rldl9hbGxvY2A6XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBEZWNvZGluZyB0aGUgTmFtZSoqXG5cbkZpcnN0LCBJJ20gYWxyZWFkeSBtZW50YWxseSBwYXJzaW5nIHRoZSBuYW1lLiBgcm5iZGAgc2NyZWFtcyBcIm5ldHdvcmsgYmxvY2sgZGV2aWNlLFwiIHNvIEknbSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBzb21ldGhpbmcgcmVsYXRlZCB0byBleHBvcnRpbmcgYSBibG9jayBkZXZpY2Ugb3ZlciBhIG5ldHdvcmsuIFRoZSBgc2Vzc2AgcGFydCBwcm9iYWJseSBtZWFucyBcInNlc3Npb24sXCIgYW5kIEkgZXhwZWN0IHRoaXMgd2lsbCBiZSBhYm91dCBhbGxvY2F0aW5nIHJlc291cmNlcyBmb3IgYSBuZXR3b3JrIGJsb2NrIGRldmljZSAqc2Vzc2lvbiouIEZpbmFsbHksIGBkZXZfYWxsb2NgLi4uIHRoYXQgaGFzIHRvIGJlIGEgZGV2aWNlIGFsbG9jYXRpb24gZnVuY3Rpb24uIFNvLCBJJ20gZXhwZWN0aW5nIHRoaXMgaXMgY29kZSB0aGF0IGhhbmRsZXMgc2V0dGluZyB1cCBhIGJsb2NrIGRldmljZSBmb3IgYSByZW1vdGUgY2xpZW50IHRvIHVzZS4gSXQncyBsaWtlbHkgaW52b2x2ZWQgaW4gdGhlIGluaXRpYWwgaGFuZHNoYWtlIG9yIG5lZ290aWF0aW9uIG9mIHJlc291cmNlcy5cblxuSSdtIG1lbnRhbGx5IHByZXBhcmluZyBmb3IgYSBmYWlybHkgbG93LWxldmVsIHZpZXcgb2YgdGhpbmdzLCBwcm9iYWJseSBkZWFsaW5nIHdpdGggZGF0YSBzdHJ1Y3R1cmVzIHJlbGF0ZWQgdG8gdGhlIG5ldHdvcmsgY29ubmVjdGlvbiwgcGVyaGFwcyBzb21lIGRldmljZS1zcGVjaWZpYyBpbmZvcm1hdGlvbiwgYW5kIGxpa2VseSBzb21lIHNvcnQgb2YgbWVtb3J5IGFsbG9jYXRpb24gb3IgcmVnaXN0cmF0aW9uIHByb2Nlc3MuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgbXV0ZXhlcyBvciBzcGlubG9ja3Mg4oCTIHRoZSB1c3VhbCBzdXNwZWN0cyB3aGVuIGRlYWxpbmcgd2l0aCBzaGFyZWQgcmVzb3VyY2VzIGFuZCBjb25jdXJyZW50IGFjY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2MzgsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxODozOTowNC41NDAzNDg5NTNaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODUwNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDE5LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDE5OlxcdHN0YXRpYyBzdHJ1Y3Qgcm5iZF9zcnZfc2Vzc19kZXZcXG4gNDIwOlxcdCpybmJkX3Nlc3NfZGV2X2FsbG9jKHN0cnVjdCBybmJkX3Nydl9zZXNzaW9uICpzcnZfc2VzcylcXG4gNDIxOlxcdHtcXG4gNDIyOlxcdFxcdHN0cnVjdCBybmJkX3Nydl9zZXNzX2RldiAqc2Vzc19kZXY7XFxuIDQyMzpcXHRcXHRpbnQgZXJyb3I7XFxuIDQyNDpcXHRcXG4gNDI1OlxcdFxcdHNlc3NfZGV2ID0ga3phbGxvY19vYmooKnNlc3NfZGV2KTtcXG4gNDI2OlxcdFxcdGlmICghc2Vzc19kZXYpXFxuIDQyNzpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4gNDI4OlxcdFxcbiA0Mjk6XFx0XFx0ZXJyb3IgPSB4YV9hbGxvYyhcXHUwMDI2c3J2X3Nlc3MtXFx1MDAzZWluZGV4X2lkciwgXFx1MDAyNnNlc3NfZGV2LVxcdTAwM2VkZXZpY2VfaWQsIHNlc3NfZGV2LFxcbiA0MzA6XFx0XFx0XFx0XFx0IHhhX2xpbWl0XzMyYiwgR0ZQX05PV0FJVCk7XFxuIDQzMTpcXHRcXHRpZiAoZXJyb3IgXFx1MDAzYyAwKSB7XFxuIDQzMjpcXHRcXHRcXHRwcl93YXJuKFxcXCJBbGxvY2F0aW5nIGlkciBmYWlsZWQsIGVycjogJWRcXFxcblxcXCIsIGVycm9yKTtcXG4gNDMzOlxcdFxcdFxcdGtmcmVlKHNlc3NfZGV2KTtcXG4gNDM0OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKGVycm9yKTtcXG4gNDM1OlxcdFxcdH1cXG4gNDM2OlxcdFxcbiA0Mzc6XFx0XFx0cmV0dXJuIHNlc3NfZGV2O1xcbiA0Mzg6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxODozOTowNC41NDA0MzU2NTNaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAzNzkzMDUwNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgU3VidGxlIFJOQkQgU2VydmVyIEJ1ZyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgYHJuYmRfc2Vzc19kZXZfYWxsb2NgIGFsbG9jYXRlcyB0aGUgYHNlc3NfZGV2YCBhbmQgaW5zZXJ0cyBpdCBpbnRvIHRoZSBgc3J2X3Nlc3MtXHUwMDNlaW5kZXhfaWRyYC4gUHJpb3IgdG8gdGhpcyBwYXRjaCwgaWYgYHJuYmRfc3J2X2NyZWF0ZV9kZXZfc2Vzc2lvbl9zeXNmc2AgZmFpbGVkLCBpdCB3b3VsZCBqdW1wIHN0cmFpZ2h0IHRvIGBmcmVlX3Nydl9zZXNzX2RldmAuIE5vdywgYGZyZWVfc3J2X3Nlc3NfZGV2YCBkb2VzIGEgc2ltcGxlIGB4YV9lcmFzZWAsIGBzeW5jaHJvbml6ZV9yY3VgLCBhbmQgdGhlbiBga2ZyZWVgIG9mIHRoZSBgc3J2X3Nlc3NfZGV2YC4gSG93ZXZlciwgaGVyZSdzIHRoZSBraWNrZXI6IGBybmJkX3Nydl9jcmVhdGVfZGV2X3Nlc3Npb25fc3lzZnNgICphbHNvKiBjYWxscyBga29iamVjdF9wdXQoXHUwMDI2c2Vzc19kZXYtXHUwMDNla29iailgIG9uIGZhaWx1cmUuXG5cbkhhbmcgb24gYSBzZWNvbmTigKYgYGtvYmplY3RfcHV0YCB0cmlnZ2VycyBgcm5iZF9zcnZfc2Vzc19kZXZfcmVsZWFzZWAsIGFuZCAqdGhhdCogY2FsbHMgYHJuYmRfZGVzdHJveV9zZXNzX2RldmAuIE5vdywgYHJuYmRfZGVzdHJveV9zZXNzX2RldmAgaXRzZWxmIGRvZXMgYW4gYHhhX2VyYXNlYCwgYHN5bmNocm9uaXplX3JjdWAsIHNldHMgdXAgYSBgZGVzdHJveV9jb21wYCwgY2FsbHMgYHJuYmRfcHV0X3Nlc3NfZGV2YCwgYW5kIHRoZW4gYHdhaXRfZm9yX2NvbXBsZXRpb25gLCBgZnB1dGAsIGFuZCBzbyBvbiwgY2xlYW5pbmcgdXAgdGhlIHJlc291cmNlcy4gQnV0LCBpZiBgcm5iZF9zcnZfY3JlYXRlX2Rldl9zZXNzaW9uX3N5c2ZzYCBmYWlscywgY2FsbHMgYGtvYmplY3RfcHV0YCwgd2hpY2ggY2FsbHMgYHJuYmRfZGVzdHJveV9zZXNzX2RldmAsIHRoZW4gYHJuYmRfZGVzdHJveV9zZXNzX2RldmAgdHJpZXMgdG8gY2FsbCBgbGlzdF9kZWwoXHUwMDI2c2Vzc19kZXYtXHUwMDNlZGV2X2xpc3QpYC5cblxuVGhhdCdzIHdoZW4gaXQgY2xpY2tlZCEgSWYgYHNlc3NfZGV2YCB3YXMgKm5vdCogYWRkZWQgdG8gYHNlc3NfZGV2LVx1MDAzZWRldi1cdTAwM2VzZXNzX2Rldl9saXN0YCBiZWZvcmUgYHJuYmRfc3J2X2NyZWF0ZV9kZXZfc2Vzc2lvbl9zeXNmc2AgZmFpbGVkICh3aGljaCBpcyBsaWtlbHkgaW4gdGhlIGZhaWx1cmUgcGF0aCksIHRoZSBgbGlzdF9kZWwoXHUwMDI2c2Vzc19kZXYtXHUwMDNlZGV2X2xpc3QpYCBpcyBnb2luZyB0byBjYXVzZSBhIGNyYXNoIG9yIGxpc3QgY29ycnVwdGlvbiBiZWNhdXNlIGBkZXZfbGlzdGAgaXMgZWl0aGVyIHVuaW5pdGlhbGl6ZWQgb3IgYW4gZW1wdHkgbGlzdCEgV2FpdCwgYW5kIEkganVzdCBjaGVja2VkIGBkZXZfbGlzdGAgaXNuJ3QgaW5pdGlhbGl6ZWQgd2l0aCBgSU5JVF9MSVNUX0hFQURgIGluIGBybmJkX3Nlc3NfZGV2X2FsbG9jYCwgaW5zdGVhZCBpdCBpcyB6ZXJvZWQgYnkgYGt6YWxsb2Nfb2JqYCwgd2hpY2ggd291bGQgY2F1c2UgYGxpc3RfZGVsYCB0byBjcmFzaCBmcm9tIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBEYW1uLCB0aGlzIGlzIGEgcmVhbCwgbGl2ZSBidWcuXG5cbkFuZCB0aGF0J3Mgbm90IGFsbC4gYHJuYmRfZGVzdHJveV9zZXNzX2RldmAgKmFsc28qIGZyZWVzIHRoZSBvYmplY3QgdXNpbmcgYHJuYmRfcHV0X3Nlc3NfZGV2YCwgYW5kIHRoZW4gdGhlIGNvZGUganVtcHMgdG8gYGZyZWVfc3J2X3Nlc3NfZGV2YCB3aGljaCBhbHNvIGRvZXMgYHhhX2VyYXNlYCBhbmQgYGtmcmVlKHNydl9zZXNzX2RldilgISBXZSBoYXZlIGEgY2xhc3NpYyBkb3VibGUtZnJlZSBzaXR1YXRpb24gaGVyZSwgYW5kIGV2ZW4gYW4gZWFybGllciBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UuIFNvLCB0aGUgcGF0Y2ggZml4ZXMgKmJvdGgqIGEgZG91YmxlIGZyZWUgKmFuZCogYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIEV4Y2VsbGVudCBjYXRjaCFcblxuVGltZSB0byBmaWd1cmUgb3V0IHdoZXJlIHRvIGZvY3VzIG91ciBmdXp6aW5nIGVmZm9ydHMuIEJhc2VkIG9uIHRoZSBjYWxsIHN0YWNrLCBJJ20gZ29pbmcgdG8gZm9jdXMgb246IGBwcm9jZXNzX21zZ19vcGVuYCwgYHJuYmRfc3J2X2NyZWF0ZV9kZXZfc2Vzc2lvbl9zeXNmc2AsIGFuZCBgcm5iZF9kZXN0cm95X3Nlc3NfZGV2YC4gTm93IHRvIGxvb2sgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnPigKYgSSBuZWVkIGBCTEtfREVWX1JOQkRfU0VSVkVSYCwgYnV0IGRvZXMgaXQgZGVwZW5kIG9uIGBJTkZJTklCQU5EX1JUUlNfU0VSVkVSYD8gWWVzLCBpdCBkb2VzLiBMZXQgbWUganVzdCBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgY29uZmlncy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjI1MSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE4OjM5OjE0LjkxOTc0MzU0NloiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzUyNzI2NjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX1JOQkRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWctMi1cXG5kcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZzozOmNvbmZpZyBCTEtfREVWX1JOQkRcXG5kcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZy00LVxcdGJvb2xcXG5kcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZy01LVxcbmRyaXZlcnMvYmxvY2svcm5iZC9LY29uZmlnOjY6Y29uZmlnIEJMS19ERVZfUk5CRF9DTElFTlRcXG5kcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJSRE1BIE5ldHdvcmsgQmxvY2sgRGV2aWNlIGRyaXZlciBjbGllbnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZy0xOC1cXG5kcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZzoxOTpjb25maWcgQkxLX0RFVl9STkJEX1NFUlZFUlxcbmRyaXZlcnMvYmxvY2svcm5iZC9LY29uZmlnLTIwLVxcdHRyaXN0YXRlIFxcXCJSRE1BIE5ldHdvcmsgQmxvY2sgRGV2aWNlIGRyaXZlciBzZXJ2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE4OjM5OjE1LjI3MjQ3NjIxNloiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjQ5OTI2NzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJOQkQgVGVzdGluZyBTdHJhdGVneSoqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBvbiB0ZXN0aW5nIHRoZSBSTkJEIGZ1bmN0aW9uYWxpdHksIHNwZWNpZmljYWxseSwgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGNsaWVudCBhbmQgc2VydmVyIGNvbXBvbmVudHMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBCTEtfREVWX1JOQkRfU0VSVkVSYCBpcyB0aGUgcHJpbWFyeSBwb2ludCBvZiBpbnRlcmVzdC4gSG93ZXZlciwgb24gZnVydGhlciByZWZsZWN0aW9uLCBJIHJlYWxpemUgdGhhdCB0byAqYWN0dWFsbHkqIHRlc3QgaXQsIEknbGwgbmVlZCB0byBjb25zaWRlciBgQkxLX0RFVl9STkJEX0NMSUVOVGAgYXMgd2VsbCwgc2luY2UgdGhlIGNsaWVudCBpcyByZXNwb25zaWJsZSBmb3IgaW5pdGlhdGluZyBjb25uZWN0aW9ucyBhbmQgc2VuZGluZyB0aGUgYFJOQkRfTVNHX09QRU5gIG1lc3NhZ2UgdG8gdGhlIHNlcnZlci5cblxuVGhlIGNvcmUgb2YgdGhpcyBpcyB0aGUgY2xpZW50LXNlcnZlciBpbnRlcmFjdGlvbi5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGNvbnNpZGVyIGhvdyBzeXprYWxsZXIgZml0cyBpbnRvIHRoZSBwaWN0dXJlLiBDYW4gSSBsZXZlcmFnZSBgc3l6X3JuYmRfY2xpZW50X29wZW5gIG9yIGEgc2ltaWxhciBzeXprYWxsZXIgcHJpbWl0aXZlPyBQcm9iYWJseSBub3QgZGlyZWN0bHkuIFN5emthbGxlciwgZ2l2ZW4gaXRzIGZ1enppbmcgYXBwcm9hY2gsIGxpa2VseSBoYW5kbGVzIFJOQkQgYnkgZWl0aGVyIHNldHRpbmcgdXAgY2xpZW50IGFuZCBzZXJ2ZXIgaW5zdGFuY2VzIHdpdGhpbiB0aGUgZnV6emluZyBlbnZpcm9ubWVudCBpdHNlbGYsIG9yIHBvdGVudGlhbGx5IGJ5IGRpcmVjdGx5IGZ1enppbmcgdGhlIHVuZGVybHlpbmcgUkRNQSBjb25uZWN0aW9uIGlmIHRoYXQncyB0aGUgZGF0YSBwbGFuZS4gSXQgaXMgaW1wb3J0YW50IHRvIGtub3cgdGhpcy5cblxuVGhlcmVmb3JlLCBpdCdzIHdvcnRoIGNoZWNraW5nIGlmIHN5emthbGxlciBhbHJlYWR5IGhhcyBkZXNjcmlwdGlvbnMsIGRlZmluaXRpb25zLCBvciBjb3ZlcmFnZSBzcGVjaWZpY2FsbHkgZm9yIFJOQkQuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQgZGlnZ2luZyB0byBzZWUgaWYgYW55b25lIGhhcyBhbHJlYWR5IGRvbmUgdGhlIGhlYXZ5IGxpZnRpbmcgYW5kIGlmIEkgY2FuIGJ1aWxkIG9uIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODA2MywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxODozOToxOS41MjI0MDUwNzhaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMDA4Mzk0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJybmJkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE4OjM5OjE5LjYwMjQyNDUzMloiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODA0NjU1NjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk5hdmlnYXRpbmcgdGhlIExhbmRzY2FwZSBvZiBTeXprYWxsZXIgYW5kIEtlcm5lbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gU29tZXRoaW5nIGlzbid0IHF1aXRlIGNsaWNraW5nLiBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiB0aGF0IHRoZSBkZXNjcmlwdGlvbnMgZ2VuZXJhdGVkIGJ5IHN5emthbGxlciB3ZXJlIGRpcmVjdGx5IGludGVncmF0ZWQgd2l0aGluIHRoZSBrZXJuZWwgdHJlZS4gQnV0IHRoYXQgZG9lc24ndCBzZWVtIHRvIGJlIHRoZSBjYXNlLiBTbywgd2UgbmVlZCB0byBmaW5kIGFub3RoZXIgd2F5IHRvIGhhbmRsZSB0aGlzLlxuXG5BaGEhIEluc3RlYWQgb2YgYXR0ZW1wdGluZyB0byBmaW5kIHRoZSBzeXprYWxsZXIgZGVzY3JpcHRpb25zIGRpcmVjdGx5LCB3ZSBjYW4gbGV2ZXJhZ2UgdGhlIGV4aXN0aW5nIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIElmIHdlIGNhbiBwcm92aWRlIHRoZSBjb3JyZWN0IGZsYWdzLCB0aGUgaW50ZWdyYXRpb24gc2hvdWxkIHdvcmsuIExldCdzIHNlZSBpZiB3ZSBjYW4gdXNlIHRoZSBgQkxLX0RFVl9STkJEX1NFUlZFUmAgYW5kIGBCTEtfREVWX1JOQkRfQ0xJRU5UYCBvcHRpb25zLiBUaGV5IHNob3VsZCBkbyB0aGUgdHJpY2suXG5cblRvIGJlIGV4dHJhIGNlcnRhaW4gd2UgYXJlIG9uIHRoZSByaWdodCB0cmFjaywgbGV0J3MgdGFrZSBhIGxvb2sgYXQgc2ltaWxhciBtb2R1bGVzLiBDaGVja2luZyBvdXQgaG93IGBJTkZJTklCQU5EX1JUUlNfU0VSVkVSYCBhbmQgYElORklOSUJBTkRfUlRSU19DTElFTlRgIGFyZSBoYW5kbGVkIHdpbGwgZ2l2ZSB1cyBhIGdvb2QgcG9pbnQgb2YgY29tcGFyaXNvbiBhbmQgY29uZmlybSB0aGlzIGxpbmUgb2YgdGhpbmtpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NDk2LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTg6Mzk6MjMuNDA3MDgxOTc3WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzUxMDA1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU5GSU5JQkFORF9SVFJTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnLTItXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWc6Mzpjb25maWcgSU5GSU5JQkFORF9SVFJTXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctNC1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctNi1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3J0cnMvS2NvbmZpZzo3OmNvbmZpZyBJTkZJTklCQU5EX1JUUlNfQ0xJRU5UXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctOC1cXHR0cmlzdGF0ZSBcXFwiUlRSUyBjbGllbnQgbW9kdWxlXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctMTctXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWc6MTg6Y29uZmlnIElORklOSUJBTkRfUlRSU19TRVJWRVJcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3J0cnMvS2NvbmZpZy0xOS1cXHR0cmlzdGF0ZSBcXFwiUlRSUyBzZXJ2ZXIgbW9kdWxlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxODozOToyMy40NjQ1OTUwNjJaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjQ4NjYzMTAwNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGRldmljZSBjb25maWd1cmF0aW9ucyBhbmQsIHllcywgdGhlc2UgZGVmaW5pdGVseSBleGlzdCBhbmQgbmVlZCB0byBiZSBhZGRyZXNzZWQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gaW5jbHVkZSBgQkxLX0RFVl9STkJEX1NFUlZFUmAgYW5kIGBCTEtfREVWX1JOQkRfQ0xJRU5UYC4gSSBzaG91bGQgYWxzbyBjb25zaWRlciBgSU5GSU5JQkFORF9SVFJTX1NFUlZFUmAgYW5kIGBJTkZJTklCQU5EX1JUUlNfQ0xJRU5UYC4gSG93ZXZlciwgd2FpdCBhIHNlY29uZC4gSSByZW1lbWJlciB0aGF0IGBCTEtfREVWX1JOQkRfU0VSVkVSYCBhY3R1YWxseSAqc2VsZWN0cyogYEJMS19ERVZfUk5CRGAgYW5kIGFsc28gKmRlcGVuZHMqIG9uIGBJTkZJTklCQU5EX1JUUlNfU0VSVkVSYC5cblxuVGhpcyBtZWFucyB0aGF0IGVuYWJsaW5nIGBCTEtfREVWX1JOQkRfU0VSVkVSYCBhbmQgYEJMS19ERVZfUk5CRF9DTElFTlRgIHNob3VsZCB0ZWNobmljYWxseSBwdWxsIGluIHRoZSBvdGhlcnMgYXV0b21hdGljYWxseSwgZ2l2ZW4gdGhlIGRlcGVuZGVuY2llcy4gSXQgaXMsIGhvd2V2ZXIsIHByb2JhYmx5IHNhZmVyIHRvIGJlIGV4cGxpY2l0IGFuZCBsaXN0IGBJTkZJTklCQU5EX1JUUlNfU0VSVkVSYCBhbmQgYElORklOSUJBTkRfUlRSU19DTElFTlRgIGFueXdheSwgb3IgbWF5YmUganVzdCBzdGljayB3aXRoIHRoZSBSTkJEIG9uZXMgZm9yIHRoZSBzYWtlIG9mIHNpbXBsaWNpdHkuIEkgc2hvdWxkIHF1aWNrbHkgdmVyaWZ5IGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkwNDUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTg6Mzk6NDguMzMwOTA3MDZaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxODE4Mjg0NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19ERVZfUk5CRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWctMi1cXG5kcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZzozOmNvbmZpZyBCTEtfREVWX1JOQkRcXG5kcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZy00LVxcdGJvb2xcXG5kcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZy01LVxcbmRyaXZlcnMvYmxvY2svcm5iZC9LY29uZmlnOjY6Y29uZmlnIEJMS19ERVZfUk5CRF9DTElFTlRcXG5kcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJSRE1BIE5ldHdvcmsgQmxvY2sgRGV2aWNlIGRyaXZlciBjbGllbnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZy0xOC1cXG5kcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZzoxOTpjb25maWcgQkxLX0RFVl9STkJEX1NFUlZFUlxcbmRyaXZlcnMvYmxvY2svcm5iZC9LY29uZmlnLTIwLVxcdHRyaXN0YXRlIFxcXCJSRE1BIE5ldHdvcmsgQmxvY2sgRGV2aWNlIGRyaXZlciBzZXJ2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE4OjM5OjUwLjUxMjc0MDUzNloiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MjY5NTQzNzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUk5CRCBTZXJ2ZXIgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGxpc3QgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zOiBgQkxLX0RFVl9STkJEX1NFUlZFUmAgYW5kIGBCTEtfREVWX1JOQkRfQ0xJRU5UYC4gVGhvc2UgYXJlIHRoZSBiYXNlbGluZSByZXF1aXJlbWVudHMuIE5vdywgZm9jdXNpbmcgb24gdGhlIGNvcmUgc3ltYm9scyB0b3VjaGVkIGJ5IHRoaXMgcGF0Y2g6IGBwcm9jZXNzX21zZ19vcGVuYCwgYHJuYmRfc3J2X2NyZWF0ZV9kZXZfc2Vzc2lvbl9zeXNmc2AsIGFuZCBgcm5iZF9kZXN0cm95X3Nlc3NfZGV2YC4gQXJlIHRoZXJlIG90aGVyIGNsb3NlbHkgcmVsYXRlZCBmdW5jdGlvbnMgaW1wYWN0ZWQ/IFllcywgc3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggaXMgY2hhbmdpbmcgYHByb2Nlc3NfbXNnX29wZW5gLiBMZXQncyBpbmNsdWRlIHRoYXQuXG5cbk5vdywgYSBxdWljayB2ZXJpZmljYXRpb24g4oCTIGlzIGBwcm9jZXNzX21zZ19vcGVuYCBhY3R1YWxseSByZWFjaGFibGU/IFllcywgaXQncyBjYWxsZWQgZnJvbSBgcm5iZF9zcnZfcmRtYV9ldmAgd2hlbiB0aGUgbWVzc2FnZSBJRCBpcyBgUk5CRF9NU0dfT1BFTmAuIFRoYXQncyB0cmlnZ2VyZWQgd2hlbiBhIGNsaWVudCBjb25uZWN0cywgc28gd2UncmUgZ29vZCB0aGVyZS5cblxuT2theSwgZGl2aW5nIGludG8gdGhlIGhlYXJ0IG9mIHRoZSBpc3N1ZTogdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBkb3VibGUgZnJlZSBhbmQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIFJOQkQgc2VydmVyJ3MgZXJyb3IgcGF0aCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgcHJvY2Vzc19tc2dfb3BlbmAuIElmIGBybmJkX3Nydl9jcmVhdGVfZGV2X3Nlc3Npb25fc3lzZnNgIGZhaWxzLCBpdCBjYWxscyBga29iamVjdF9wdXRgLCB3aGljaCB0cmlnZ2VycyB0aGUgYHJuYmRfZGVzdHJveV9zZXNzX2RldmAgcmVsZWFzZSBjYWxsYmFjay4gVGhpcyBjYWxsYmFjayBpcyBzdXBwb3NlZCB0byBmcmVlIHRoZSBzZXNzaW9uIGRldmljZSBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlIHNlc3Npb24gZGV2aWNlIGxpc3QgKGBzZXNzX2Rldl9saXN0YCkuIFRoZSBwcm9ibGVtIGlzLCBiZWZvcmUgdGhlIHBhdGNoLCB0aGUgZGV2aWNlIHdhc24ndCBhZGRlZCB0byB0aGUgbGlzdCAqYmVmb3JlKiBzeXNmcyBjcmVhdGlvbi4gVGhpcyBsZWFkcyB0byBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgbGlzdF9kZWxgLCBmb2xsb3dlZCBieSBhbiBlcnJvciBoYW5kbGluZyBwYXRoIHRoYXQgY2FsbHMgYGZyZWVfc3J2X3Nlc3NfZGV2YCwgYXR0ZW1wdGluZyB0byBmcmVlIHRoZSBvYmplY3QgYSBzZWNvbmQgdGltZS5cblxuVGhlIGtleSBpcyBpbiB0aGUgZXJyb3IgcGF0aCBmb3IgYHByb2Nlc3NfbXNnX29wZW5gLiBUaGUgZG91YmxlIGZyZWUgYW5kIE5VTEwgcG9pbnRlciBpc3N1ZXMgbWVhbiB0aGlzIGlzIHByaW1lIHRlcnJpdG9yeSBmb3IgZnV6emluZy4gVGhlIGdvYWwgd2lsbCBiZSB0byB1bmNvdmVyIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIG9yIGxpc3QgY29ycnVwdGlvbiB3aXRoaW4gdGhlIHNlcnZlci4gSXQgaXMgY2xlYXIgdGhhdCB0aGlzIG5lZWRzIHRvIGJlIGZ1enplZCwgc28gSSdtIHNldHRpbmcgYFdvcnRoRnV6emluZ2AgdG8gdHJ1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk2NzAsIk91dHB1dFRva2VucyI6MjUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE4OjM5OjU5Ljc4MjI4NjkwMloiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0NzQwOTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX1JOQkRfU0VSVkVSXCIsXG4gICAgXCJCTEtfREVWX1JOQkRfQ0xJRU5UXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHJvY2Vzc19tc2dfb3BlblwiLFxuICAgIFwicm5iZF9zcnZfY3JlYXRlX2Rldl9zZXNzaW9uX3N5c2ZzXCIsXG4gICAgXCJybmJkX2Rlc3Ryb3lfc2Vzc19kZXZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGRvdWJsZSBmcmVlIGFuZCBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvbiB0aGUgZXJyb3IgcGF0aCBvZiBgcHJvY2Vzc19tc2dfb3BlbmAgaW4gdGhlIFJOQkQgc2VydmVyLiBJZiBgcm5iZF9zcnZfY3JlYXRlX2Rldl9zZXNzaW9uX3N5c2ZzYCBmYWlscywgaXQgY2FsbHMgYGtvYmplY3RfcHV0YCwgd2hpY2ggaW52b2tlcyB0aGUgcmVsZWFzZSBjYWxsYmFjayBgcm5iZF9kZXN0cm95X3Nlc3NfZGV2YC4gVGhpcyBjYWxsYmFjayBmcmVlcyB0aGUgc2Vzc2lvbiBkZXZpY2UgYW5kIHJlbW92ZXMgaXQgZnJvbSB0aGUgYHNlc3NfZGV2X2xpc3RgLiBCZWZvcmUgdGhlIHBhdGNoLCB0aGUgZGV2aWNlIHdhcyBub3QgYWRkZWQgdG8gdGhlIGxpc3QgYmVmb3JlIHN5c2ZzIGNyZWF0aW9uLCBjYXVzaW5nIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBsaXN0X2RlbGAsIGFuZCB0aGUgZXJyb3IgaGFuZGxpbmcganVtcGVkIHRvIGBmcmVlX3Nydl9zZXNzX2RldmAgd2hpY2ggZnJlZWQgdGhlIG9iamVjdCBhZ2Fpbi4gRnV6emluZyB0aGlzIGVycm9yIHBhdGggaXMgaW1wb3J0YW50IHRvIGVuc3VyZSBubyBvdGhlciB1c2UtYWZ0ZXItZnJlZSBvciBsaXN0IGNvcnJ1cHRpb25zIGV4aXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfUk5CRF9TRVJWRVJcIixcbiAgICBcIkJMS19ERVZfUk5CRF9DTElFTlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwcm9jZXNzX21zZ19vcGVuXCIsXG4gICAgXCJybmJkX3Nydl9jcmVhdGVfZGV2X3Nlc3Npb25fc3lzZnNcIixcbiAgICBcInJuYmRfZGVzdHJveV9zZXNzX2RldlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgZG91YmxlIGZyZWUgYW5kIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9uIHRoZSBlcnJvciBwYXRoIG9mIGBwcm9jZXNzX21zZ19vcGVuYCBpbiB0aGUgUk5CRCBzZXJ2ZXIuIElmIGBybmJkX3Nydl9jcmVhdGVfZGV2X3Nlc3Npb25fc3lzZnNgIGZhaWxzLCBpdCBjYWxscyBga29iamVjdF9wdXRgLCB3aGljaCBpbnZva2VzIHRoZSByZWxlYXNlIGNhbGxiYWNrIGBybmJkX2Rlc3Ryb3lfc2Vzc19kZXZgLiBUaGlzIGNhbGxiYWNrIGZyZWVzIHRoZSBzZXNzaW9uIGRldmljZSBhbmQgcmVtb3ZlcyBpdCBmcm9tIHRoZSBgc2Vzc19kZXZfbGlzdGAuIEJlZm9yZSB0aGUgcGF0Y2gsIHRoZSBkZXZpY2Ugd2FzIG5vdCBhZGRlZCB0byB0aGUgbGlzdCBiZWZvcmUgc3lzZnMgY3JlYXRpb24sIGNhdXNpbmcgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYGxpc3RfZGVsYCwgYW5kIHRoZSBlcnJvciBoYW5kbGluZyBqdW1wZWQgdG8gYGZyZWVfc3J2X3Nlc3NfZGV2YCB3aGljaCBmcmVlZCB0aGUgb2JqZWN0IGFnYWluLiBGdXp6aW5nIHRoaXMgZXJyb3IgcGF0aCBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIG5vIG90aGVyIHVzZS1hZnRlci1mcmVlIG9yIGxpc3QgY29ycnVwdGlvbnMgZXhpc3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow9gs8l[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-14 18:14:44 +0000 UTC FinishedAt: 2026-07-14 18:40:02 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "ceb57c6bb70f552030509b3858b0d7091211ec9a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_RNBD_SERVER", "BLK_DEV_RNBD_CLIENT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "ceb57c6bb70f552030509b3858b0d7091211ec9a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_RNBD_SERVER", "BLK_DEV_RNBD_CLIENT" ], "series_id": "dd7b64aa-5afb-4640-b43b-157120e75d41" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "process_msg_open", "rnbd_srv_create_dev_session_sysfs", "rnbd_destroy_sess_dev" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE4OjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfUk5CRF9TRVJWRVImIzM0OywKICAgICYjMzQ7QkxLX0RFVl9STkJEX0NMSUVOVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Byb2Nlc3NfbXNnX29wZW4mIzM0OywKICAgICYjMzQ7cm5iZF9zcnZfY3JlYXRlX2Rldl9zZXNzaW9uX3N5c2ZzJiMzNDssCiAgICAmIzM0O3JuYmRfZGVzdHJveV9zZXNzX2RldiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGRvdWJsZSBmcmVlIGFuZCBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvbiB0aGUgZXJyb3IgcGF0aCBvZiBgcHJvY2Vzc19tc2dfb3BlbmAgaW4gdGhlIFJOQkQgc2VydmVyLiBJZiBgcm5iZF9zcnZfY3JlYXRlX2Rldl9zZXNzaW9uX3N5c2ZzYCBmYWlscywgaXQgY2FsbHMgYGtvYmplY3RfcHV0YCwgd2hpY2ggaW52b2tlcyB0aGUgcmVsZWFzZSBjYWxsYmFjayBgcm5iZF9kZXN0cm95X3Nlc3NfZGV2YC4gVGhpcyBjYWxsYmFjayBmcmVlcyB0aGUgc2Vzc2lvbiBkZXZpY2UgYW5kIHJlbW92ZXMgaXQgZnJvbSB0aGUgYHNlc3NfZGV2X2xpc3RgLiBCZWZvcmUgdGhlIHBhdGNoLCB0aGUgZGV2aWNlIHdhcyBub3QgYWRkZWQgdG8gdGhlIGxpc3QgYmVmb3JlIHN5c2ZzIGNyZWF0aW9uLCBjYXVzaW5nIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBsaXN0X2RlbGAsIGFuZCB0aGUgZXJyb3IgaGFuZGxpbmcganVtcGVkIHRvIGBmcmVlX3Nydl9zZXNzX2RldmAgd2hpY2ggZnJlZWQgdGhlIG9iamVjdCBhZ2Fpbi4gRnV6emluZyB0aGlzIGVycm9yIHBhdGggaXMgaW1wb3J0YW50IHRvIGVuc3VyZSBubyBvdGhlciB1c2UtYWZ0ZXItZnJlZSBvciBsaXN0IGNvcnJ1cHRpb25zIGV4aXN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE4OjM1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNjExNzk2ZGJlMjBjOGFkZWUyN2RhY2RjNzE0OGJkZjI5MTEwNjczZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDE0IDE4OjM1OjQ0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jIGIvZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmNcbmluZGV4IDEwZThjNDM4YmI0Mzk3Li41YTk5MWJmYmYzYWQ1OSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuY1xuQEAgLTc3OCwxOCAmIzQzOzc3OCwyMiBAQCBzdGF0aWMgaW50IHByb2Nlc3NfbXNnX29wZW4oc3RydWN0IHJuYmRfc3J2X3Nlc3Npb24gKnNydl9zZXNzLFxuIFx0XHR9XG4gXHR9XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBZGQgdGhlIHNlc3Npb24gZGV2aWNlIHRvIHRoZSBsaXN0IGJlZm9yZSBpbml0aWFsaXppbmcgaXRzXG4mIzQzO1x0ICoga29iamVjdC4gSWYgc3lzZnMgY3JlYXRpb24gZmFpbHMsIGtvYmplY3RfcHV0KCkgaW52b2tlcyB0aGVcbiYjNDM7XHQgKiByZWxlYXNlIGNhbGxiYWNrLCB3aGljaCByZW1vdmVzIHRoZSBvYmplY3QgZnJvbSB0aGlzIGxpc3QgYW5kXG4mIzQzO1x0ICogcmVsZWFzZXMgYWxsIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHNlc3Npb24gZGV2aWNlLlxuJiM0MztcdCAqL1xuJiM0MztcdGxpc3RfYWRkKFx1MDAyNnNydl9zZXNzX2Rldi1cdTAwM2VkZXZfbGlzdCwgXHUwMDI2c3J2X2Rldi1cdTAwM2VzZXNzX2Rldl9saXN0KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2c3J2X2Rldi1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4gXHRyZXQgPSBybmJkX3Nydl9jcmVhdGVfZGV2X3Nlc3Npb25fc3lzZnMoc3J2X3Nlc3NfZGV2KTtcbiBcdGlmIChyZXQpIHtcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnNydl9kZXYtXHUwMDNlbG9jayk7XG4tXHRcdHJuYmRfc3J2X2VycihzcnZfc2Vzc19kZXYsXG4tXHRcdFx0ICAgICAgXCYjMzQ7T3BlbmluZyBkZXZpY2UgZmFpbGVkLCBmYWlsZWQgdG8gY3JlYXRlIGRldiBjbGllbnQgc3lzZnMgZmlsZXMsIGVycjogJWRcXG5cJiMzNDssXG4tXHRcdFx0ICAgICAgcmV0KTtcbi1cdFx0Z290byBmcmVlX3Nydl9zZXNzX2RldjtcbiYjNDM7XHRcdHByX2VycihcJiMzNDtPcGVuaW5nIGRldmljZSAmIzM5OyVzJiMzOTsgb24gc2Vzc2lvbiAlcyBmYWlsZWQsIGZhaWxlZCB0byBjcmVhdGUgZGV2IGNsaWVudCBzeXNmcyBmaWxlcywgZXJyOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdCAgICAgICBmdWxsX3BhdGgsIHNydl9zZXNzLVx1MDAzZXNlc3NuYW1lLCByZXQpO1xuJiM0MztcdFx0Z290byBmcmVlX3BhdGg7XG4gXHR9XG4gXG4tXHRsaXN0X2FkZChcdTAwMjZzcnZfc2Vzc19kZXYtXHUwMDNlZGV2X2xpc3QsIFx1MDAyNnNydl9kZXYtXHUwMDNlc2Vzc19kZXZfbGlzdCk7XG4tXHRtdXRleF91bmxvY2soXHUwMDI2c3J2X2Rldi1cdTAwM2Vsb2NrKTtcbi1cbiBcdHJuYmRfc3J2X2luZm8oc3J2X3Nlc3NfZGV2LCBcJiMzNDtPcGVuZWQgZGV2aWNlICYjMzk7JXMmIzM5O1xcblwmIzM0Oywgc3J2X2Rldi1cdTAwM2VuYW1lKTtcbiBcbiBcdGtmcmVlKGZ1bGxfcGF0aCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTg6MzU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9STkJEX1NFUlZFUiYjMzQ7LAogICAgJiMzNDtCTEtfREVWX1JOQkRfQ0xJRU5UJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cHJvY2Vzc19tc2dfb3BlbiYjMzQ7LAogICAgJiMzNDtybmJkX3Nydl9jcmVhdGVfZGV2X3Nlc3Npb25fc3lzZnMmIzM0OywKICAgICYjMzQ7cm5iZF9kZXN0cm95X3Nlc3NfZGV2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZG91YmxlIGZyZWUgYW5kIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9uIHRoZSBlcnJvciBwYXRoIG9mIGBwcm9jZXNzX21zZ19vcGVuYCBpbiB0aGUgUk5CRCBzZXJ2ZXIuIElmIGBybmJkX3Nydl9jcmVhdGVfZGV2X3Nlc3Npb25fc3lzZnNgIGZhaWxzLCBpdCBjYWxscyBga29iamVjdF9wdXRgLCB3aGljaCBpbnZva2VzIHRoZSByZWxlYXNlIGNhbGxiYWNrIGBybmJkX2Rlc3Ryb3lfc2Vzc19kZXZgLiBUaGlzIGNhbGxiYWNrIGZyZWVzIHRoZSBzZXNzaW9uIGRldmljZSBhbmQgcmVtb3ZlcyBpdCBmcm9tIHRoZSBgc2Vzc19kZXZfbGlzdGAuIEJlZm9yZSB0aGUgcGF0Y2gsIHRoZSBkZXZpY2Ugd2FzIG5vdCBhZGRlZCB0byB0aGUgbGlzdCBiZWZvcmUgc3lzZnMgY3JlYXRpb24sIGNhdXNpbmcgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYGxpc3RfZGVsYCwgYW5kIHRoZSBlcnJvciBoYW5kbGluZyBqdW1wZWQgdG8gYGZyZWVfc3J2X3Nlc3NfZGV2YCB3aGljaCBmcmVlZCB0aGUgb2JqZWN0IGFnYWluLiBGdXp6aW5nIHRoaXMgZXJyb3IgcGF0aCBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIG5vIG90aGVyIHVzZS1hZnRlci1mcmVlIG9yIGxpc3QgY29ycnVwdGlvbnMgZXhpc3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDYxMTc5NmRiZTIwYzhhZGVlMjdkYWNkYzcxNDhiZGYyOTExMDY3M2QKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1bCAxNCAxODozNTo0NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jIGIvZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmMKaW5kZXggMTBlOGM0MzhiYjQzOTcuLjVhOTkxYmZiZjNhZDU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYwpAQCAtNzc4LDE4ICYjNDM7Nzc4LDIyIEBAIHN0YXRpYyBpbnQgcHJvY2Vzc19tc2dfb3BlbihzdHJ1Y3Qgcm5iZF9zcnZfc2Vzc2lvbiAqc3J2X3Nlc3MsCiAJCX0KIAl9CiAKJiM0MzsJLyoKJiM0MzsJICogQWRkIHRoZSBzZXNzaW9uIGRldmljZSB0byB0aGUgbGlzdCBiZWZvcmUgaW5pdGlhbGl6aW5nIGl0cwomIzQzOwkgKiBrb2JqZWN0LiBJZiBzeXNmcyBjcmVhdGlvbiBmYWlscywga29iamVjdF9wdXQoKSBpbnZva2VzIHRoZQomIzQzOwkgKiByZWxlYXNlIGNhbGxiYWNrLCB3aGljaCByZW1vdmVzIHRoZSBvYmplY3QgZnJvbSB0aGlzIGxpc3QgYW5kCiYjNDM7CSAqIHJlbGVhc2VzIGFsbCByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzZXNzaW9uIGRldmljZS4KJiM0MzsJICovCiYjNDM7CWxpc3RfYWRkKCZhbXA7c3J2X3Nlc3NfZGV2LSZndDtkZXZfbGlzdCwgJmFtcDtzcnZfZGV2LSZndDtzZXNzX2Rldl9saXN0KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7c3J2X2Rldi0mZ3Q7bG9jayk7CiYjNDM7CiAJcmV0ID0gcm5iZF9zcnZfY3JlYXRlX2Rldl9zZXNzaW9uX3N5c2ZzKHNydl9zZXNzX2Rldik7CiAJaWYgKHJldCkgewotCQltdXRleF91bmxvY2soJmFtcDtzcnZfZGV2LSZndDtsb2NrKTsKLQkJcm5iZF9zcnZfZXJyKHNydl9zZXNzX2RldiwKLQkJCSAgICAgICYjMzQ7T3BlbmluZyBkZXZpY2UgZmFpbGVkLCBmYWlsZWQgdG8gY3JlYXRlIGRldiBjbGllbnQgc3lzZnMgZmlsZXMsIGVycjogJWRcbiYjMzQ7LAotCQkJICAgICAgcmV0KTsKLQkJZ290byBmcmVlX3Nydl9zZXNzX2RldjsKJiM0MzsJCXByX2VycigmIzM0O09wZW5pbmcgZGV2aWNlICYjMzk7JXMmIzM5OyBvbiBzZXNzaW9uICVzIGZhaWxlZCwgZmFpbGVkIHRvIGNyZWF0ZSBkZXYgY2xpZW50IHN5c2ZzIGZpbGVzLCBlcnI6ICVkXG4mIzM0OywKJiM0MzsJCSAgICAgICBmdWxsX3BhdGgsIHNydl9zZXNzLSZndDtzZXNzbmFtZSwgcmV0KTsKJiM0MzsJCWdvdG8gZnJlZV9wYXRoOwogCX0KIAotCWxpc3RfYWRkKCZhbXA7c3J2X3Nlc3NfZGV2LSZndDtkZXZfbGlzdCwgJmFtcDtzcnZfZGV2LSZndDtzZXNzX2Rldl9saXN0KTsKLQltdXRleF91bmxvY2soJmFtcDtzcnZfZGV2LSZndDtsb2NrKTsKLQogCXJuYmRfc3J2X2luZm8oc3J2X3Nlc3NfZGV2LCAmIzM0O09wZW5lZCBkZXZpY2UgJiMzOTslcyYjMzk7XG4mIzM0Oywgc3J2X2Rldi0mZ3Q7bmFtZSk7CiAKIAlrZnJlZShmdWxsX3BhdGgpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxODozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTUwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUk5CRCBTZXJ2ZXImIzM5O3MgRGV2aWNlIFNlc3Npb24gSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IGFwcGVhcnMgdG8gdGFyZ2V0IHRoZSBgcHJvY2Vzc19tc2dfb3BlbmAgZnVuY3Rpb24gd2l0aGluIGBkcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYSBzdWJ0bGUgYWRqdXN0bWVudCBpbiB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyB3aGVuIGhhbmRsaW5nIGEgbmV3IGRldmljZSBzZXNzaW9uLiBQcmV2aW91c2x5LCBpdCBsb29rZWQgbGlrZSBgcm5iZF9zcnZfY3JlYXRlX2Rldl9zZXNzaW9uX3N5c2ZzYCB3YXMgY2FsbGVkICpiZWZvcmUqIGFkZGluZyB0aGUgc2Vzc2lvbiBkZXZpY2UgKGBzcnZfc2Vzc19kZXZgKSB0byB0aGUgc2VydmVyJiMzOTtzIHNlc3Npb24gZGV2aWNlIGxpc3QgKGBzcnZfZGV2LSZndDtzZXNzX2Rldl9saXN0YCkuIE5vdywgdGhlIHBhdGNoIGNvcnJlY3RseSBhZGRzIGl0IHRvIHRoZSBsaXN0ICpmaXJzdCouCgpUaGUgY3JpdGljYWwgc2hpZnQgaXMgdGhpczogSWYgYHJuYmRfc3J2X2NyZWF0ZV9kZXZfc2Vzc2lvbl9zeXNmc2AgZmFpbHMg4oCTIGFuZCBieSAmIzM0O2ZhaWxzJiMzNDsgSSYjMzk7bSBhc3N1bWluZyB0aGF0IG1lYW5zIGl0IGVuY291bnRlcnMgYW4gZXJyb3IgaW4gY3JlYXRpbmcgdGhlIHN5c2ZzIGVudHJpZXMgZm9yIHRoZSBkZXZpY2Ugc2Vzc2lvbiDigJMgdGhlIGNvZGUgbm93IGp1bXBzIGRpcmVjdGx5IHRvIGBmcmVlX3BhdGhgIGluc3RlYWQgb2YgYGZyZWVfc3J2X3Nlc3NfZGV2YC4gVGhpcyBpcyBpbXBvcnRhbnQsIGFzIGl0IHNpZ25hbHMgYSBjaGFuZ2UgaW4gaG93IHdlIHdhbnQgdG8gaGFuZGxlIGNsZWFudXAuCgpUaGUgY29tbWVudCBpcyBrZXkgaGVyZS4gSXQgZXNzZW50aWFsbHkgaGlnaGxpZ2h0cyB0aGUgcmF0aW9uYWxlOiBieSBhZGRpbmcgdGhlIHNlc3Npb24gZGV2aWNlIHRvIHRoZSBsaXN0ICpiZWZvcmUqIGluaXRpYWxpemluZyBpdHMga29iamVjdCAod2hpY2ggaXMgd2hhdCBJIGFzc3VtZSBpcyBoYXBwZW5pbmcgaW4gdGhlIHN5c2ZzIGNyZWF0aW9uIHBoYXNlKSwgdGhlIGNvZGUgZW5zdXJlcyB0aGF0IGlmIHN5c2ZzIGNyZWF0aW9uIGZhaWxzLCBga29iamVjdF9wdXQoKWAgZ2V0cyBjYWxsZWQuIFRoaXMgYGtvYmplY3RfcHV0KClgIHRoZW4gdHJpZ2dlcnMgdGhlIHJlbGVhc2UgY2FsbGJhY2ssIHdoaWNoIGlzIHdoYXQgKnJlbW92ZXMqIHRoZSBvYmplY3QgZnJvbSB0aGUgbGlzdC4gRWZmZWN0aXZlbHksIGl0IGhhbmRsZXMgdGhlIGZyZWVpbmcgb2YgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2Vzc2lvbiBkZXZpY2UgaW4gYSBjb250cm9sbGVkIHdheSwgcmVnYXJkbGVzcyBvZiB0aGUgZXJyb3IgY29uZGl0aW9uLiBUaGlzIHNvdW5kcyBsaWtlIGFuIGVmZm9ydCB0byBhdm9pZCByZXNvdXJjZSBsZWFrcyBkdXJpbmcgZGV2aWNlIHNlc3Npb24gY3JlYXRpb24uIE5vdywgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGBmcmVlX3BhdGhgIGZ1bmN0aW9uIHRvIHZlcmlmeSB0aGUgY2xlYW51cCBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxODozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcm9jZXNzX21zZ19vcGVuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM9MzUwPXN0YXRpYyB2b2lkIHByb2Nlc3NfbXNnX2Nsb3NlKHN0cnVjdCBybmJkX3Nydl9zZXNzaW9uICpzcnZfc2Vzcyxcbi0tXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy0zNjktXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYzozNzA6c3RhdGljIGludCBwcm9jZXNzX21zZ19vcGVuKHN0cnVjdCBybmJkX3Nydl9zZXNzaW9uICpzcnZfc2VzcyxcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jLTM3MS1cdFx0XHQgICAgY29uc3Qgdm9pZCAqbXNnLCBzaXplX3QgbGVuLFxuLS1cbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jPTM3OD1zdGF0aWMgaW50IHJuYmRfc3J2X3JkbWFfZXYodm9pZCAqcHJpdiwgc3RydWN0IHJ0cnNfc3J2X29wICppZCxcbi0tXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy0zOTgtXHRjYXNlIFJOQkRfTVNHX09QRU46XG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYzozOTk6XHRcdHJldCA9IHByb2Nlc3NfbXNnX29wZW4oc3J2X3Nlc3MsIHVzciwgdXNybGVuLCBkYXRhLCBkYXRhbGVuKTtcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jLTQwMC1cdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM9Njc2PWZpbmRfc3J2X3Nlc3NfZGV2KHN0cnVjdCBybmJkX3Nydl9zZXNzaW9uICpzcnZfc2VzcywgY29uc3QgY2hhciAqZGV2X25hbWUpXG4tLVxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmMtNjkwLVxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM6NjkxOnN0YXRpYyBpbnQgcHJvY2Vzc19tc2dfb3BlbihzdHJ1Y3Qgcm5iZF9zcnZfc2Vzc2lvbiAqc3J2X3Nlc3MsXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy02OTItXHRcdFx0ICAgIGNvbnN0IHZvaWQgKm1zZywgc2l6ZV90IGxlbixcbi0tXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy03MDMtXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYzo3MDQ6XHR0cmFjZV9wcm9jZXNzX21zZ19vcGVuKHNydl9zZXNzLCBvcGVuX21zZyk7XG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy03MDUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTg6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMwNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSTkJEIGFuZCBTeXprYWxsZXI6IEEgUXVpY2sgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMgYHByb2Nlc3NfbXNnX29wZW5gIGZ1bmN0aW9uIGFuZCB3aGVyZSBpdCBnZXRzIGNhbGxlZCBmcm9tLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHRyaWdnZXJlZCBieSBgcm5iZF9zcnZfcmRtYV9ldmAsIHdoaWNoIGhhbmRsZXMgUkRNQSBldmVudHMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBjYW4gd2UgYWN0dWFsbHkgdGVzdCBSTkJEIOKAkyB0aGUgUmVsaWFibGUgTmV0d29yayBCbG9jayBEZXZpY2Ug4oCTIGVmZmVjdGl2ZWx5IHdpdGhpbiBzeXprYWxsZXI/IEl0JiMzOTtzIGEga2V5IHF1ZXN0aW9uLgoKVGhlIG5hdHVyZSBvZiBSRE1BIGRyaXZlcnMgb2Z0ZW4gbmVjZXNzaXRhdGVzIHNwZWNpZmljIGhhcmR3YXJlIG9yIHNvZnR3YXJlIFJETUEgaW1wbGVtZW50YXRpb25zIGxpa2UgcnhlLCBhbmQgdGhhdCB0ZW5kcyB0byBjcmVhdGUgYSBib3R0bGVuZWNrIGZvciBmdXppbmcuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBSTkJEIGhhcyB0aGUgc2FtZSBsaW1pdGF0aW9ucy4gTGV0JiMzOTtzIHNlZSBpZiB3ZSBjYW4gZnV6eiBSTkJELgoKSSByZW1lbWJlciBSTkJEIGlzIGJ1aWx0IG9uIFJUUlMgKFJlbGlhYmxlIFRyYW5zcG9ydCBSb3V0aW5nIFNlcnZpY2UpLCBhbmQgdGhhdCByZWxpZXMgb24gUkRNQSwgd2hpY2ggcmVpbmZvcmNlcyB0aGUgbmVlZCB0byBkaWcgZGVlcGVyLiBGaXJzdCwgSSB0aGluayBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgUk5CRCB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLiBUaGlzIHdpbGwgcHJvdmlkZSBzb21lIG5lY2Vzc2FyeSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE4OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfREVWX1JOQkQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZy0yLVxuZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWc6Mzpjb25maWcgQkxLX0RFVl9STkJEXG5kcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZy00LVx0Ym9vbFxuZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWctNS1cbmRyaXZlcnMvYmxvY2svcm5iZC9LY29uZmlnOjY6Y29uZmlnIEJMS19ERVZfUk5CRF9DTElFTlRcbmRyaXZlcnMvYmxvY2svcm5iZC9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtSRE1BIE5ldHdvcmsgQmxvY2sgRGV2aWNlIGRyaXZlciBjbGllbnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZy0xOC1cbmRyaXZlcnMvYmxvY2svcm5iZC9LY29uZmlnOjE5OmNvbmZpZyBCTEtfREVWX1JOQkRfU0VSVkVSXG5kcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZy0yMC1cdHRyaXN0YXRlIFwmIzM0O1JETUEgTmV0d29yayBCbG9jayBEZXZpY2UgZHJpdmVyIHNlcnZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE4OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4NzAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBSTkJEIFNlcnZlcioqCgpPa2F5LCBzbyB0aGUgY29uZmlnIG9wdGlvbiB3ZSYjMzk7cmUgbG9va2luZyBhdCBoZXJlIGlzIGBCTEtfREVWX1JOQkRfU0VSVkVSYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O2NhbiB3ZSBmdXp6IHRoaXMgdGhpbmc/JiMzNDsgQWJzb2x1dGVseSwgdGhlIHBvdGVudGlhbCBpcyB0aGVyZSwgYW5kIGVuYWJsaW5nIGBCTEtfREVWX1JOQkRfU0VSVkVSYCBzaG91bGQgb3BlbiB0aGUgZG9vci4KCkhvbGQgb24gYSBzZWNvbmQsIHRob3VnaC4uLiBJIHJlbWVtYmVyIHNvbWV0aGluZyBhYm91dCBSRE1BLiBSaWdodCwgaXQgbG9va3MgbGlrZSB0aGlzIGlzIGRlcGVuZGVudCBvbiBgSU5GSU5JQkFORGAuIEkmIzM5O2QgYmV0dGVyIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBmaWxlIGluIGBkcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZ2AganVzdCB0byBiZSBzdXJlLCBhbmQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aG9zZSBkZXBlbmRlbmNpZXMgYXJlIHNldCB1cC4gTmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbnRleHQgYmVmb3JlIGRpdmluZyBpbnRvIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTg6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbiAgIDI6XHRcbiAgIDM6XHRjb25maWcgQkxLX0RFVl9STkJEXG4gICA0Olx0XHRib29sXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIEJMS19ERVZfUk5CRF9DTElFTlRcbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O1JETUEgTmV0d29yayBCbG9jayBEZXZpY2UgZHJpdmVyIGNsaWVudFwmIzM0O1xuICAgODpcdFx0ZGVwZW5kcyBvbiBJTkZJTklCQU5EX1JUUlNfQ0xJRU5UXG4gICA5Olx0XHRzZWxlY3QgQkxLX0RFVl9STkJEXG4gIDEwOlx0XHRzZWxlY3QgU0dfUE9PTFxuICAxMTpcdFx0aGVscFxuICAxMjpcdFx0ICBSTkJEIGNsaWVudCBpcyBhIG5ldHdvcmsgYmxvY2sgZGV2aWNlIGRyaXZlciB1c2luZyByZG1hIHRyYW5zcG9ydC5cbiAgMTM6XHRcbiAgMTQ6XHRcdCAgUk5CRCBjbGllbnQgYWxsb3dzIGZvciBtYXBwaW5nIG9mIGEgcmVtb3RlIGJsb2NrIGRldmljZXMgb3ZlclxuICAxNTpcdFx0ICBSVFJTIHByb3RvY29sIGZyb20gYSB0YXJnZXQgc3lzdGVtIHdoZXJlIFJOQkQgc2VydmVyIGlzIHJ1bm5pbmcuXG4gIDE2Olx0XG4gIDE3Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDE4Olx0XG4gIDE5Olx0Y29uZmlnIEJMS19ERVZfUk5CRF9TRVJWRVJcbiAgMjA6XHRcdHRyaXN0YXRlIFwmIzM0O1JETUEgTmV0d29yayBCbG9jayBEZXZpY2UgZHJpdmVyIHNlcnZlclwmIzM0O1xuICAyMTpcdFx0ZGVwZW5kcyBvbiBJTkZJTklCQU5EX1JUUlNfU0VSVkVSXG4gIDIyOlx0XHRzZWxlY3QgQkxLX0RFVl9STkJEXG4gIDIzOlx0XHRoZWxwXG4gIDI0Olx0XHQgIFJOQkQgc2VydmVyIGlzIHRoZSBzZXJ2ZXIgc2lkZSBvZiBSTkJEIHVzaW5nIHJkbWEgdHJhbnNwb3J0LlxuICAyNTpcdFxuICAyNjpcdFx0ICBSTkJEIHNlcnZlciBhbGxvd3MgZm9yIGV4cG9ydGluZyBsb2NhbCBibG9jayBkZXZpY2VzIHRvIGEgcmVtb3RlIGNsaWVudFxuICAyNzpcdFx0ICBvdmVyIFJUUlMgcHJvdG9jb2wuXG4gIDI4Olx0XG4gIDI5Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTg6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDUyMQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDEzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBSTkJEIFNlcnZlcjogQSBRdWljayBBc3Nlc3NtZW50KioKCk9rYXksIHNvIHRoZSBmdXp6aW5nIHN0cmF0ZWd5IGhpbmdlcyBvbiB0aGF0IGBJTkZJTklCQU5EX1JUUlNfU0VSVkVSYCBzZXR0aW5nLiBDYW4gc3l6a2FsbGVyIGFjdHVhbGx5IHRhcmdldCB0aGUgUk5CRCBzZXJ2ZXIgZGlyZWN0bHk/IEkga25vdyBpdCBjYW4gaGFuZGxlIFJETUEgcHJvdG9jb2xzIGxpa2UgYHJ4ZWAgYW5kIGBzaXdgLCBidXQgdGhlIHNwZWNpZmljcyBoZXJlIGFyZSBrZXkuIEhhbmcgb24uLi4gdGhlIHZ1bG5lcmFiaWxpdHkgb3IgcG90ZW50aWFsIGlzc3VlIGlzIHRyaWdnZXJlZCB3aXRoaW4gYHByb2Nlc3NfbXNnX29wZW5gLiBBaCwgdGhhdCBmdW5jdGlvbiBpcyBoaXQgd2hlbiBhbiBSTkJEIGNsaWVudCBjb25uZWN0cyBhbmQgc2VuZHMgYW4gT1BFTiBtZXNzYWdlLiBJbnRlcmVzdGluZy4KCklzIHRoaXMgd29ydGggdGhlIGVmZm9ydCBvZiBzZXR0aW5nIHVwIGZ1enppbmcgZm9yPyBBYnNvbHV0ZWx5LCB5ZXMuIEl0JiMzOTtzIG5vdCBqdXN0IGEgY29zbWV0aWMgY2hhbmdlOyBpdCBsb29rcyBsaWtlIGEgcmVhbCBmdW5jdGlvbmFsIGZpeCwgcG90ZW50aWFsbHkgYWRkcmVzc2luZyBhIHVzZS1hZnRlci1mcmVlLCBhIG1lbW9yeSBsZWFrLCBvciBtYXliZSBldmVuIGEgY3JpdGljYWwgbGlzdCBjb3JydXB0aW9uIG9uIGFuIGVycm9yIHBhdGguIE5vdywgbGV0JiMzOTtzIGRpdmUgaW50byBgcHJvY2Vzc19tc2dfb3BlbmAgaXRzZWxmIGFuZCB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIHRoYXQgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE4OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Byb2Nlc3NfbXNnX29wZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYz0zNTA9c3RhdGljIHZvaWQgcHJvY2Vzc19tc2dfY2xvc2Uoc3RydWN0IHJuYmRfc3J2X3Nlc3Npb24gKnNydl9zZXNzLFxuLS1cbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jLTM2OS1cbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jOjM3MDpzdGF0aWMgaW50IHByb2Nlc3NfbXNnX29wZW4oc3RydWN0IHJuYmRfc3J2X3Nlc3Npb24gKnNydl9zZXNzLFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmMtMzcxLVx0XHRcdCAgICBjb25zdCB2b2lkICptc2csIHNpemVfdCBsZW4sXG4tLVxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM9Mzc4PXN0YXRpYyBpbnQgcm5iZF9zcnZfcmRtYV9ldih2b2lkICpwcml2LCBzdHJ1Y3QgcnRyc19zcnZfb3AgKmlkLFxuLS1cbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jLTM5OC1cdGNhc2UgUk5CRF9NU0dfT1BFTjpcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jOjM5OTpcdFx0cmV0ID0gcHJvY2Vzc19tc2dfb3BlbihzcnZfc2VzcywgdXNyLCB1c3JsZW4sIGRhdGEsIGRhdGFsZW4pO1xuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmMtNDAwLVx0XHRicmVhaztcbi0tXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYz02NzY9ZmluZF9zcnZfc2Vzc19kZXYoc3RydWN0IHJuYmRfc3J2X3Nlc3Npb24gKnNydl9zZXNzLCBjb25zdCBjaGFyICpkZXZfbmFtZSlcbi0tXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy02OTAtXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYzo2OTE6c3RhdGljIGludCBwcm9jZXNzX21zZ19vcGVuKHN0cnVjdCBybmJkX3Nydl9zZXNzaW9uICpzcnZfc2VzcyxcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jLTY5Mi1cdFx0XHQgICAgY29uc3Qgdm9pZCAqbXNnLCBzaXplX3QgbGVuLFxuLS1cbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jLTcwMy1cbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jOjcwNDpcdHRyYWNlX3Byb2Nlc3NfbXNnX29wZW4oc3J2X3Nlc3MsIG9wZW5fbXNnKTtcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jLTcwNS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTg6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQxOAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGVidWdnaW5nIGEgUG90ZW50aWFsIFJlZGVmaW5pdGlvbioqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLi4uIGlzIGBwcm9jZXNzX21zZ19vcGVuYCBkZWZpbmVkIHR3aWNlPyBUaGF0JiMzOTtzLi4uIHVudXN1YWwsIGFuZCBhIHBvdGVudGlhbCByZWNpcGUgZm9yIGRpc2FzdGVyLiBUaGUgY29tcGlsZXIgKnNob3VsZCogYmUgeWVsbGluZyBhdCBtZSwgYnV0IG1heWJlIHRoZXJlJiMzOTtzIHNvbWUgc2NvcGluZyB0cmlja2VyeSBhdCBwbGF5LCBvciBhIG1pc3BsYWNlZCBgI2luY2x1ZGVgLiBMZXQmIzM5O3MgYXNzdW1lIHRoZXJlIGlzIHNvbWV0aGluZyBzdHJhbmdlIGdvaW5nIG9uLgoKTGluZSAzNzAuLi4gb2theSwgdGhhdCBmZWVscyBsaWtlIHRoZSBsaWtlbHkgY3VscHJpdCBmb3IgdGhlIGluaXRpYWwgZGVmaW5pdGlvbiwgdGhlIGZvcndhcmQgZGVjbGFyYXRpb24sIG9yIHBvc3NpYmxlIGluc3RhbnRpYXRpb24gb2YgdGhlIGZ1bmN0aW9uLiBMZXQgbWUgZ28gdGFrZSBhIGxvb2sgYXQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXQgdGhhdCBsaW5lLiBQcm9iYWJseSBpdCYjMzk7cyBhbiBleHRlcm4gZGVmaW5pdGlvbiwgb3IgcGVyaGFwcyBhIGRlY2xhcmF0aW9uIGluIGEgaGVhZGVyIHRoYXQmIzM5O3MgdGhlbiBhY2NpZGVudGFsbHkgaW5jbHVkZWQgbXVsdGlwbGUgdGltZXMuIExldCYjMzk7cyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgdGhlIHNpdHVhdGlvbi4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxODozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNjU6XHRcdG11dGV4X2xvY2soXHUwMDI2c3J2X3Nlc3MtXHUwMDNlbG9jayk7XG4gMzY2Olx0XHRybmJkX3Nydl9kZXN0cm95X2Rldl9zZXNzaW9uX3N5c2ZzKHNlc3NfZGV2KTtcbiAzNjc6XHRcdG11dGV4X3VubG9jayhcdTAwMjZzcnZfc2Vzcy1cdTAwM2Vsb2NrKTtcbiAzNjg6XHR9XG4gMzY5Olx0XG4gMzcwOlx0c3RhdGljIGludCBwcm9jZXNzX21zZ19vcGVuKHN0cnVjdCBybmJkX3Nydl9zZXNzaW9uICpzcnZfc2VzcyxcbiAzNzE6XHRcdFx0XHQgICAgY29uc3Qgdm9pZCAqbXNnLCBzaXplX3QgbGVuLFxuIDM3MjpcdFx0XHRcdCAgICB2b2lkICpkYXRhLCBzaXplX3QgZGF0YWxlbik7XG4gMzczOlx0XG4gMzc0Olx0c3RhdGljIHZvaWQgcHJvY2Vzc19tc2dfc2Vzc19pbmZvKHN0cnVjdCBybmJkX3Nydl9zZXNzaW9uICpzcnZfc2VzcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTg6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg2MQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKk5hdmlnYXRpbmcgdGhlIENvZGViYXNlKioKCkFscmlnaHQsIGZvcndhcmQgZGVjbGFyYXRpb24sIGdvdCBpdC4gQWx3YXlzIGdvb2QgdG8gc2VlIHRoYXQgdXBmcm9udCB0byBhdm9pZCBhbnkgbmFzdHkgc3VycHJpc2VzIGxhdGVyLiBOb3csIHdoZXJlIGlzIHRoZSBhY3R1YWwgZGVmaW5pdGlvbiBvZiB0aGlzIHRoaW5nPyBBaCwgbGluZSA2OTEuIE9rYXksIGxldCYjMzk7cyBqdW1wIGRvd24gdGhlcmUgYW5kIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGFzIEkgZXhwZWN0IGl0IHRvIGJlLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBmdW5jdGlvbiBgcHJvY2Vzc19tc2dfb3BlbmAuIEkgd2FudCB0byBzZWUgaG93IHRoYXQmIzM5O3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGlzIGZvcndhcmQgZGVjbGFyZWQgaXRlbS4gVGhhdCYjMzk7cyBhIGtleSBwYXJ0IG9mIHRoaXMgd2hvbGUgZmxvdywgc28gSSYjMzk7bGwgc2VlIHdoYXQgaXQmIzM5O3MgZG9pbmcgd2l0aCBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTg6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzYwOlx0XHRcdCAgICAgICBmdWxsX3BhdGgsIHNydl9zZXNzLVx1MDAzZXNlc3NuYW1lLCBzcnZfc2Vzc19kZXYpO1xuIDc2MTpcdFx0XHRyZXQgPSBQVFJfRVJSKHNydl9zZXNzX2Rldik7XG4gNzYyOlx0XHRcdGdvdG8gc3J2X2Rldl9wdXQ7XG4gNzYzOlx0XHR9XG4gNzY0Olx0XG4gNzY1Olx0XHQvKiBDcmVhdGUgdGhlIHNydl9kZXYgc3lzZnMgZmlsZXMgaWYgdGhleSBoYXZlbiYjMzk7dCBiZWVuIGNyZWF0ZWQgeWV0LiBUaGVcbiA3NjY6XHRcdCAqIHJlYXNvbiB0byBkZWxheSB0aGUgY3JlYXRpb24gaXMgbm90IHRvIGNyZWF0ZSB0aGUgc3lzZnMgZmlsZXMgYmVmb3JlXG4gNzY3Olx0XHQgKiB3ZSBhcmUgc3VyZSB0aGUgZGV2aWNlIGNhbiBiZSBvcGVuZWQuXG4gNzY4Olx0XHQgKi9cbiA3Njk6XHRcdG11dGV4X2xvY2soXHUwMDI2c3J2X2Rldi1cdTAwM2Vsb2NrKTtcbiA3NzA6XHRcdGlmICghc3J2X2Rldi1cdTAwM2VkZXZfa29iai5zdGF0ZV9pbl9zeXNmcykge1xuIDc3MTpcdFx0XHRyZXQgPSBybmJkX3Nydl9jcmVhdGVfZGV2X3N5c2ZzKHNydl9kZXYsIGZpbGVfYmRldihiZGV2X2ZpbGUpKTtcbiA3NzI6XHRcdFx0aWYgKHJldCkge1xuIDc3MzpcdFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZzcnZfZGV2LVx1MDAzZWxvY2spO1xuIDc3NDpcdFx0XHRcdHJuYmRfc3J2X2VycihzcnZfc2Vzc19kZXYsXG4gNzc1Olx0XHRcdFx0XHQgICAgICBcJiMzNDtPcGVuaW5nIGRldmljZSBmYWlsZWQsIGZhaWxlZCB0byBjcmVhdGUgZGV2aWNlIHN5c2ZzIGZpbGVzLCBlcnI6ICVkXFxuXCYjMzQ7LFxuIDc3NjpcdFx0XHRcdFx0ICAgICAgcmV0KTtcbiA3Nzc6XHRcdFx0XHRnb3RvIGZyZWVfc3J2X3Nlc3NfZGV2O1xuIDc3ODpcdFx0XHR9XG4gNzc5Olx0XHR9XG4gNzgwOlx0XG4gNzgxOlx0XHQvKlxuIDc4MjpcdFx0ICogQWRkIHRoZSBzZXNzaW9uIGRldmljZSB0byB0aGUgbGlzdCBiZWZvcmUgaW5pdGlhbGl6aW5nIGl0c1xuIDc4MzpcdFx0ICoga29iamVjdC4gSWYgc3lzZnMgY3JlYXRpb24gZmFpbHMsIGtvYmplY3RfcHV0KCkgaW52b2tlcyB0aGVcbiA3ODQ6XHRcdCAqIHJlbGVhc2UgY2FsbGJhY2ssIHdoaWNoIHJlbW92ZXMgdGhlIG9iamVjdCBmcm9tIHRoaXMgbGlzdCBhbmRcbiA3ODU6XHRcdCAqIHJlbGVhc2VzIGFsbCByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzZXNzaW9uIGRldmljZS5cbiA3ODY6XHRcdCAqL1xuIDc4NzpcdFx0bGlzdF9hZGQoXHUwMDI2c3J2X3Nlc3NfZGV2LVx1MDAzZWRldl9saXN0LCBcdTAwMjZzcnZfZGV2LVx1MDAzZXNlc3NfZGV2X2xpc3QpO1xuIDc4ODpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnNydl9kZXYtXHUwMDNlbG9jayk7XG4gNzg5Olx0XG4gNzkwOlx0XHRyZXQgPSBybmJkX3Nydl9jcmVhdGVfZGV2X3Nlc3Npb25fc3lzZnMoc3J2X3Nlc3NfZGV2KTtcbiA3OTE6XHRcdGlmIChyZXQpIHtcbiA3OTI6XHRcdFx0cHJfZXJyKFwmIzM0O09wZW5pbmcgZGV2aWNlICYjMzk7JXMmIzM5OyBvbiBzZXNzaW9uICVzIGZhaWxlZCwgZmFpbGVkIHRvIGNyZWF0ZSBkZXYgY2xpZW50IHN5c2ZzIGZpbGVzLCBlcnI6ICVkXFxuXCYjMzQ7LFxuIDc5MzpcdFx0XHQgICAgICAgZnVsbF9wYXRoLCBzcnZfc2Vzcy1cdTAwM2VzZXNzbmFtZSwgcmV0KTtcbiA3OTQ6XHRcdFx0Z290byBmcmVlX3BhdGg7XG4gNzk1Olx0XHR9XG4gNzk2Olx0XG4gNzk3Olx0XHRybmJkX3Nydl9pbmZvKHNydl9zZXNzX2RldiwgXCYjMzQ7T3BlbmVkIGRldmljZSAmIzM5OyVzJiMzOTtcXG5cJiMzNDssIHNydl9kZXYtXHUwMDNlbmFtZSk7XG4gNzk4Olx0XG4gNzk5Olx0XHRrZnJlZShmdWxsX3BhdGgpO1xuIDgwMDpcdFxuIDgwMTpcdGZpbGxfcmVzcG9uc2U6XG4gODAyOlx0XHRybmJkX3Nydl9maWxsX21zZ19vcGVuX3JzcChyc3AsIHNydl9zZXNzX2Rldik7XG4gODAzOlx0XHRtdXRleF91bmxvY2soXHUwMDI2c3J2X3Nlc3MtXHUwMDNlbG9jayk7XG4gODA0Olx0XHRyZXR1cm4gMDtcbiA4MDU6XHRcbiA4MDY6XHRmcmVlX3Nydl9zZXNzX2RldjpcbiA4MDc6XHRcdHhhX2VyYXNlKFx1MDAyNnNydl9zZXNzLVx1MDAzZWluZGV4X2lkciwgc3J2X3Nlc3NfZGV2LVx1MDAzZWRldmljZV9pZCk7XG4gODA4Olx0XHRzeW5jaHJvbml6ZV9yY3UoKTtcbiA4MDk6XHRcdGtmcmVlKHNydl9zZXNzX2Rldik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE4OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5MzYKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDcml0aWNhbCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBwcmV0dHkgc3BlY2lmaWMgYnVnIGluIGBybmJkX3Nydl9jcmVhdGVfZGV2X3Nlc3Npb25fc3lzZnNgLiBBcHBhcmVudGx5LCB0aGUgb2xkIGNvZGUgaGFkIGEgbmFzdHkgaGFiaXQgb2YgZ29pbmcgZGlyZWN0bHkgdG8gYGZyZWVfc3J2X3Nlc3NfZGV2YCB3aGVuIGl0IGZhaWxlZC4gTm93LCBpdCYjMzk7cyBqdW1waW5nIHRvIGBmcmVlX3BhdGhgIGluc3RlYWQsIHdoaWNoICpzaG91bGQqIGJlIGEgYmV0dGVyIGFwcHJvYWNoLiAKCkJ1dCBob2xkIG9uIGEgc2Vjb25kLi4uIGBmcmVlX3BhdGhgIGlzbiYjMzk7dCBzaG93aW5nIHVwIGluIHRoZSByZWFkLWZpbGUgb3V0cHV0LiBUaGF0JiMzOTtzIHN0cmFuZ2UsIGFuZCB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggYGZyZWVfcGF0aGAgYW5kIHdoeSBpdCYjMzk7cyBub3QgaW1tZWRpYXRlbHkgdmlzaWJsZS4gVGhpcyBmZWVscyBsaWtlIHRoZXJlJiMzOTtzIGEgbWlzc2luZyBwaWVjZSB0byB0aGUgcHV6emxlLCBhbmQgSSBuZWVkIHRvIGZpbmQgaXQuIFRpbWUgdG8ga2VlcCByZWFkaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxODozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MDA6XHRcbiA4MDE6XHRmaWxsX3Jlc3BvbnNlOlxuIDgwMjpcdFx0cm5iZF9zcnZfZmlsbF9tc2dfb3Blbl9yc3AocnNwLCBzcnZfc2Vzc19kZXYpO1xuIDgwMzpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnNydl9zZXNzLVx1MDAzZWxvY2spO1xuIDgwNDpcdFx0cmV0dXJuIDA7XG4gODA1Olx0XG4gODA2Olx0ZnJlZV9zcnZfc2Vzc19kZXY6XG4gODA3Olx0XHR4YV9lcmFzZShcdTAwMjZzcnZfc2Vzcy1cdTAwM2VpbmRleF9pZHIsIHNydl9zZXNzX2Rldi1cdTAwM2VkZXZpY2VfaWQpO1xuIDgwODpcdFx0c3luY2hyb25pemVfcmN1KCk7XG4gODA5Olx0XHRrZnJlZShzcnZfc2Vzc19kZXYpO1xuIDgxMDpcdHNydl9kZXZfcHV0OlxuIDgxMTpcdFx0aWYgKG9wZW5fbXNnLVx1MDAzZWFjY2Vzc19tb2RlICE9IFJOQkRfQUNDRVNTX1JPKSB7XG4gODEyOlx0XHRcdG11dGV4X2xvY2soXHUwMDI2c3J2X2Rldi1cdTAwM2Vsb2NrKTtcbiA4MTM6XHRcdFx0c3J2X2Rldi1cdTAwM2VvcGVuX3dyaXRlX2NudC0tO1xuIDgxNDpcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2c3J2X2Rldi1cdTAwM2Vsb2NrKTtcbiA4MTU6XHRcdH1cbiA4MTY6XHRcdHJuYmRfcHV0X3Nydl9kZXYoc3J2X2Rldik7XG4gODE3Olx0YmxrZGV2X3B1dDpcbiA4MTg6XHRcdGZwdXQoYmRldl9maWxlKTtcbiA4MTk6XHRmcmVlX3BhdGg6XG4gODIwOlx0XHRrZnJlZShmdWxsX3BhdGgpO1xuIDgyMTpcdHJlamVjdDpcbiA4MjI6XHRcdG11dGV4X3VubG9jayhcdTAwMjZzcnZfc2Vzcy1cdTAwM2Vsb2NrKTtcbiA4MjM6XHRcdHJldHVybiByZXQ7XG4gODI0Olx0fVxuIDgyNTpcdFxuIDgyNjpcdHN0YXRpYyBzdHJ1Y3QgcnRyc19zcnZfY3R4ICpydHJzX2N0eDtcbiA4Mjc6XHRcbiA4Mjg6XHRzdGF0aWMgc3RydWN0IHJ0cnNfc3J2X29wcyBydHJzX29wcztcbiA4Mjk6XHRzdGF0aWMgaW50IF9faW5pdCBybmJkX3Nydl9pbml0X21vZHVsZSh2b2lkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxODozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjkwCgkJCQkJCQlvdXRwdXQ6IDUyCgkJCQkJCQl0aG91Z2h0czogMTM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVzb3VyY2UgQ2xlYW51cCBQYXRoKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBgZnJlZV9wYXRoYCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBmdW5jdGlvbjogaXQgZnJlZXMgYGZ1bGxfcGF0aGAgYW5kIHRoZW4gcmV0dXJucyBgcmV0YC4gQnV0IHdhaXQsIHNvbWV0aGluZyBzZWVtcyBvZmYuIElmIHRoZSBleGVjdXRpb24ganVtcHMgZGlyZWN0bHkgdG8gYGZyZWVfcGF0aGAsIGl0IG1lYW5zIHRoZSBjb2RlIGlzIHNraXBwaW5nIHRoZSBjYWxscyB0byBgZnJlZV9zcnZfc2Vzc19kZXZgLCBgc3J2X2Rldl9wdXRgLCBhbmQgYGJsa2Rldl9wdXRgLgoKVGhlIHF1ZXN0aW9uIHRoYXQgaW1tZWRpYXRlbHkgcG9wcyBpbnRvIG15IGhlYWQgaXMgKndoeSo/IFdoeSBhcmUgdGhvc2UgY2xlYW51cCBmdW5jdGlvbnMgYmVpbmcgYnlwYXNzZWQ/IE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGlzIHJlbGF0ZXMgdG8gdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBrb2JqZWN0IHdpdGhpbiBgcm5iZF9zcnZfY3JlYXRlX2Rldl9zZXNzaW9uX3N5c2ZzYC4gSWYgdGhhdCBpbml0aWFsaXphdGlvbiBmYWlscywgYSBga29iamVjdF9wdXRgICpzaG91bGQqIGJlIGNhbGxlZCwgYnV0IGlzIHRoYXQgaGFuZGxlZCBpbnRlcm5hbGx5IHdpdGhpbiBgcm5iZF9zcnZfY3JlYXRlX2Rldl9zZXNzaW9uX3N5c2ZzYCBvciBieSB0aGUgY2FsbGluZyBmdW5jdGlvbj8gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHZlcmlmeSBob3cgYHJuYmRfc3J2X2NyZWF0ZV9kZXZfc2Vzc2lvbl9zeXNmc2AgaGFuZGxlcyBmYWlsdXJlcyB0byBjbGVhciB1cCB0aGUgY29uZnVzaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxODozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtybmJkX3Nydl9jcmVhdGVfZGV2X3Nlc3Npb25fc3lzZnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYtc3lzZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYtc3lzZnMuYz0xODc9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgcm5iZF9zcnZfc2Vzc19kZXZfa3R5cGUgPSB7XG4tLVxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LXN5c2ZzLmMtMTkxLVxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LXN5c2ZzLmM6MTkyOmludCBybmJkX3Nydl9jcmVhdGVfZGV2X3Nlc3Npb25fc3lzZnMoc3RydWN0IHJuYmRfc3J2X3Nlc3NfZGV2ICpzZXNzX2RldilcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi1zeXNmcy5jLTE5My17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE4OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyNTcKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBEaXZpbmcgaW50byBgcm5iZF9zcnZfY3JlYXRlX2Rldl9zZXNzaW9uX3N5c2ZzYCoqCgpSaWdodCwgbGV0JiMzOTtzIGRpc3NlY3QgYHJuYmRfc3J2X2NyZWF0ZV9kZXZfc2Vzc2lvbl9zeXNmc2AuIEkmIzM5O20gaW1tZWRpYXRlbHkgaW50ZXJlc3RlZCBpbiB0aGlzIGZ1bmN0aW9uJiMzOTtzIHNjb3BlLCBnaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24uIFRoZSAmIzM0O3JuYmQmIzM0OyBwcmVmaXggb2J2aW91c2x5IHRpZXMgaXQgdG8gdGhlIFJlbGlhYmxlIE5ldHdvcmsgQmxvY2sgRGV2aWNlIGRyaXZlciwgYW5kICYjMzQ7c3J2JiMzNDsgc3VnZ2VzdHMgc2VydmVyLXNpZGUgZnVuY3Rpb25hbGl0eS4gJiMzNDtjcmVhdGVfZGV2X3Nlc3Npb24mIzM0OyBpcyBhIGZhaXJseSBjbGVhciBpbmRpY2F0b3I7IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIGNyZWF0aW9uIG9mIGEgZGV2aWNlIHNlc3Npb24sIGxpa2VseSB0aWVkIHRvIGEgc3BlY2lmaWMgYmxvY2sgZGV2aWNlIGFic3RyYWN0aW9uLiBUaGUgJiMzNDtzeXNmcyYjMzQ7IHN1ZmZpeCBpcyB0aGUga2V5IGdpdmVhd2F5IGhlcmUg4oCTIGl0IGltcGxpZXMgYSBoZWF2eSByZWxpYW5jZSBvbiB0aGUgc3lzZnMgZmlsZXN5c3RlbSBpbnRlcmZhY2UgZm9yIGNvbmZpZ3VyYXRpb24sIG1hbmFnZW1lbnQsIG9yIHBlcmhhcHMgZXZlbiBjb250cm9sIG9mIHRoaXMgc2Vzc2lvbi4KCkkmIzM5O20gYWxyZWFkeSBtZW50YWxseSBjaGFydGluZyBvdXQgdGhlIHBvdGVudGlhbCBhcmVhcyBvZiBpbnRlcmVzdC4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQ6CgoqICAgKipEZXZpY2UgQ29udGV4dDoqKiBIb3cgdGhlIGJsb2NrIGRldmljZSBpbmZvcm1hdGlvbiBpcyBwYXNzZWQgaW4sIHByZXN1bWFibHkgZWl0aGVyIHRocm91Z2ggYSBzdHJ1Y3R1cmUgb3IgcGVyaGFwcyBieSBzb21lIGdsb2JhbCBjb250ZXh0LiBXZSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIG9uIGhvdyB0aGUgZGV2aWNlIGlzIHNlbGVjdGVkIChieSBkZXZpY2UgbmFtZSwgcGF0aCwgVVVJRCwgZXRjLikuCiogICAqKlNlc3Npb24gU3RydWN0dXJlOioqIFdoYXQgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBhbGxvY2F0ZWQgb3IgaW5pdGlhbGl6ZWQgaGVyZT8gV2UgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3csIGhvdyB0aGUgaW5mb3JtYXRpb24gaXMgYmVpbmcgZ2F0aGVyZWQsIHdoaWNoIG1pZ2h0IGJlIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgZGV2aWNlIHNlc3Npb24gaXMgc3RydWN0dXJlZC4KKiAgICoqc3lzZnMgSW50ZWdyYXRpb246KiogVGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIhIEkgZXhwZWN0IGEgbG90IG9mIGludGVyYWN0aW9uIHdpdGggc3lzZnMgZW50cmllcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaG93IHRoZSBmdW5jdGlvbiBjcmVhdGVzIG9yIHJlZ2lzdGVycyBzeXNmcyBmaWxlcyBhbmQgZGlyZWN0b3JpZXMuIFRoZSBrZXkgZWxlbWVudHMgd2lsbCBiZSB0aGUgYXR0cmlidXRlcywgYWNjZXNzIHBlcm1pc3Npb25zLCBhbmQgd2hhdCBrZXJuZWwgb2JqZWN0cyB0aGVzZSBlbnRyaWVzIGFyZSBleHBvc2luZyB0byB1c2VyIHNwYWNlLiBBcmUgd2UgdGFsa2luZyBhYm91dCBiYXNpYyBkZXZpY2UgYXR0cmlidXRlcyAobGlrZSBzaXplKSwgb3IgbW9yZSBjb21wbGV4IGNvbnRyb2wgaW50ZXJmYWNlcyAobGlrZSByZWFkL3dyaXRlIHRpbWVvdXRzIG9yIGNhY2hpbmcgY29uZmlndXJhdGlvbnMpPyBXZSB3aWxsIG5lZWQgdG8gaW52ZXN0aWdhdGUgYWxsIHRoZSBzeXNmcyBjYWxscyB0byBkZXRlcm1pbmUgdGhlaXIgb3ZlcmFsbCBmdW5jdGlvbi4KKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogR2l2ZW4gdGhhdCBzeXNmcyBvcGVyYXRpb25zIGNhbiBiZSBwcm9uZSB0byBlcnJvcnMsIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUgcm9idXN0IGVycm9yIGhhbmRsaW5nLiBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSByZXR1cm4gY29kZXMgYW5kIGVycm9yIHByb3BhZ2F0aW9uLgoqICAgKipDb25jdXJyZW5jeSBDb25jZXJuczoqKiBJcyB0aGVyZSBhbnl0aGluZyBoZXJlIHRoYXQgc3VnZ2VzdHMgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3Vlcz8gSSBleHBlY3QgdGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzLiBBcmUgbG9ja3MgZW1wbG95ZWQgb3Igb3RoZXIgbWVjaGFuaXNtcyB0byBzYWZlZ3VhcmQgYWdhaW5zdCByYWNlIGNvbmRpdGlvbnM/IEdpdmVuIHRoYXQgYHN5c2ZzYCBjYWxscyBjYW4gYmUgYmxvY2tpbmcgb3BlcmF0aW9ucywgaG93IGlzIHRoZSBzZXNzaW9uIGxpZmV0aW1lIG1hbmFnZWQ/CgpJbiBzaG9ydCwgSSYjMzk7bSBhbnRpY2lwYXRpbmcgYSBkZWVwIGRpdmUgaW50byB0aGUgc2VydmVyLXNpZGUgZXN0YWJsaXNobWVudCBhbmQgc3lzZnMgcmVwcmVzZW50YXRpb24gb2YgYW4gUk5CRCBkZXZpY2Ugc2Vzc2lvbi4gSXQmIzM5O2xsIGJlIGludGVyZXN0aW5nIHRvIHNlZSBob3cgdGhlIGtlcm5lbCBleHBvc2VzIHRoaXMgY29udHJvbCBwbGFuZSB0byB1c2VyIHNwYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxODozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi1zeXNmcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTkyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxOTI6XHRpbnQgcm5iZF9zcnZfY3JlYXRlX2Rldl9zZXNzaW9uX3N5c2ZzKHN0cnVjdCBybmJkX3Nydl9zZXNzX2RldiAqc2Vzc19kZXYpXG4gMTkzOlx0e1xuIDE5NDpcdFx0aW50IHJldDtcbiAxOTU6XHRcbiAxOTY6XHRcdHJldCA9IGtvYmplY3RfaW5pdF9hbmRfYWRkKFx1MDAyNnNlc3NfZGV2LVx1MDAzZWtvYmosIFx1MDAyNnJuYmRfc3J2X3Nlc3NfZGV2X2t0eXBlLFxuIDE5NzpcdFx0XHRcdFx0ICAgc2Vzc19kZXYtXHUwMDNlZGV2LVx1MDAzZWRldl9zZXNzaW9uc19rb2JqLCBcJiMzNDslc1wmIzM0OyxcbiAxOTg6XHRcdFx0XHRcdCAgIHNlc3NfZGV2LVx1MDAzZXNlc3MtXHUwMDNlc2Vzc25hbWUpO1xuIDE5OTpcdFx0aWYgKHJldCkge1xuIDIwMDpcdFx0XHRrb2JqZWN0X3B1dChcdTAwMjZzZXNzX2Rldi1cdTAwM2Vrb2JqKTtcbiAyMDE6XHRcdFx0cmV0dXJuIHJldDtcbiAyMDI6XHRcdH1cbiAyMDM6XHRcbiAyMDQ6XHRcdHJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cChcdTAwMjZzZXNzX2Rldi1cdTAwM2Vrb2JqLFxuIDIwNTpcdFx0XHRcdFx0IFx1MDAyNnJuYmRfc3J2X2RlZmF1bHRfZGV2X3Nlc3Npb25fYXR0cl9ncm91cCk7XG4gMjA2Olx0XHRpZiAocmV0KSB7XG4gMjA3Olx0XHRcdGtvYmplY3RfZGVsKFx1MDAyNnNlc3NfZGV2LVx1MDAzZWtvYmopO1xuIDIwODpcdFx0XHRrb2JqZWN0X3B1dChcdTAwMjZzZXNzX2Rldi1cdTAwM2Vrb2JqKTtcbiAyMDk6XHRcdH1cbiAyMTA6XHRcbiAyMTE6XHRcdHJldHVybiByZXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE4OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyMTgKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBEZWVwIGludG8gRGV2aWNlIFNlc3Npb24gQ3JlYXRpb24gYW5kIFJlc291cmNlIE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSBzZWUgYHJuYmRfc3J2X2NyZWF0ZV9kZXZfc2Vzc2lvbl9zeXNmc2AgaGFuZGxlcyBmYWlsdXJlIGJ5IGNhbGxpbmcgYGtvYmplY3RfcHV0KCZhbXA7c2Vzc19kZXYtJmd0O2tvYmopYC4gVGhhdCYjMzk7cyBnb29kLiBJdCBzdWdnZXN0cyB3ZSYjMzk7cmUgbGlrZWx5IG1hbmFnaW5nIHRoZSBkZXZpY2Ugc2Vzc2lvbiYjMzk7cyBsaWZlY3ljbGUsIGFuZCBzcGVjaWZpY2FsbHksIGl0cyBrZXJuZWwgb2JqZWN0LCB3aXRoIHNvbWUgY2FyZS4gTm93LCB0aGUga2V5IGlzIHRvIHVuZGVyc3RhbmQgKmhvdyogdGhhdCBvYmplY3QgaXMgbWFuYWdlZC4gVGhlIHVzZSBvZiBga29iamVjdF9wdXRgIGhpbnRzIGF0IGEgcmVmZXJlbmNlIGNvdW50aW5nIHNjaGVtZSwgd2hpY2ggaXMgcHJldHR5IHN0YW5kYXJkIGluIHRoZSBrZXJuZWwuIEJ1dCwgYmVmb3JlIEkgZ2V0IGFoZWFkIG9mIG15c2VsZiwgSSB3YW50IHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVzb3VyY2UgcmVsZWFzZSBwcm9jZXNzLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQgYHJuYmRfc3J2X3Nlc3NfZGV2X2t0eXBlYCBkZWZpbmVzIGEgcHJvcGVyIHJlbGVhc2UgZnVuY3Rpb24uIFRoYXQmIzM5O3MgdGhlIHZpdGFsIHBpZWNlIHRvIHZlcmlmeSB0aGUgcHJvcGVyIGNsZWFudXAgb2YgdGhpcyBwYXJ0aWN1bGFyIG9iamVjdC4gSSBuZWVkIHRvIGNoZWNrIHRoZSByZWxlYXNlIGZ1bmN0aW9uIHRvIGtub3cgaWYgaXRzIHJlZmVyZW5jZSBjb3VudGluZyBpcyB3b3JraW5nIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTg6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYtc3lzZnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTcwOlx0dm9pZCBybmJkX3Nydl9kZXN0cm95X2Rldl9zZXNzaW9uX3N5c2ZzKHN0cnVjdCBybmJkX3Nydl9zZXNzX2RldiAqc2Vzc19kZXYpXG4gMTcxOlx0e1xuIDE3MjpcdFx0c3lzZnNfcmVtb3ZlX2dyb3VwKFx1MDAyNnNlc3NfZGV2LVx1MDAzZWtvYmosXG4gMTczOlx0XHRcdFx0ICAgXHUwMDI2cm5iZF9zcnZfZGVmYXVsdF9kZXZfc2Vzc2lvbl9hdHRyX2dyb3VwKTtcbiAxNzQ6XHRcbiAxNzU6XHRcdGtvYmplY3RfZGVsKFx1MDAyNnNlc3NfZGV2LVx1MDAzZWtvYmopO1xuIDE3NjpcdFx0a29iamVjdF9wdXQoXHUwMDI2c2Vzc19kZXYtXHUwMDNla29iaik7XG4gMTc3Olx0fVxuIDE3ODpcdFxuIDE3OTpcdHN0YXRpYyB2b2lkIHJuYmRfc3J2X3Nlc3NfZGV2X3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopXG4gMTgwOlx0e1xuIDE4MTpcdFx0c3RydWN0IHJuYmRfc3J2X3Nlc3NfZGV2ICpzZXNzX2RldjtcbiAxODI6XHRcbiAxODM6XHRcdHNlc3NfZGV2ID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBybmJkX3Nydl9zZXNzX2Rldiwga29iaik7XG4gMTg0Olx0XHRybmJkX2Rlc3Ryb3lfc2Vzc19kZXYoc2Vzc19kZXYsIHNlc3NfZGV2LVx1MDAzZWtlZXBfaWQpO1xuIDE4NTpcdH1cbiAxODY6XHRcbiAxODc6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBybmJkX3Nydl9zZXNzX2Rldl9rdHlwZSA9IHtcbiAxODg6XHRcdC5zeXNmc19vcHNcdD0gXHUwMDI2a29ial9zeXNmc19vcHMsXG4gMTg5Olx0XHQucmVsZWFzZVx0PSBybmJkX3Nydl9zZXNzX2Rldl9yZWxlYXNlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxODozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTEyCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyB0aGUgU2Vzc2lvbiBSZWxlYXNlIFByb2Nlc3MqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IHRoZXNlIG5ldHdvcmsgYmxvY2sgZGV2aWNlIHNlc3Npb25zIGFyZSBoYW5kbGVkLiBJIHNlZSB0aGF0IGBybmJkX3Nydl9zZXNzX2Rldl9yZWxlYXNlYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGNhbGxlZCB3aGVuIGEgc2Vzc2lvbiBpcyBiZWluZyByZWxlYXNlZC4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHdoYXQmIzM5O3MgaGFwcGVuaW5nICppbnNpZGUqIHRoYXQgZnVuY3Rpb24sIHRvIGZpZ3VyZSBvdXQgaG93IGl0JiMzOTtzIGFjdHVhbGx5IGNsZWFuaW5nIHVwIHRoZSByZXNvdXJjZXMuIFJpZ2h0LCBsZXQmIzM5O3MgbG9vayBhdCBgcm5iZF9kZXN0cm95X3Nlc3NfZGV2YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiBob3cgdGhlIHNlc3Npb24gZGV2aWNlIGlzIGRlc3Ryb3llZCB0byBlbnN1cmUgbm8gbGVha3Mgb3IgZGFuZ2xpbmcgcG9pbnRlcnMuIFRoaXMgZmVlbHMgbGlrZSBpdCYjMzk7cyB0aGUgY29yZSBvZiB0aGUgY2xlYW51cCBwYXRoLCBhbmQgdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJuYWxzIG9mIGBybmJkX2Rlc3Ryb3lfc2Vzc19kZXZgIGlzIGNyaXRpY2FsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxODozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtybmJkX2Rlc3Ryb3lfc2Vzc19kZXYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYz0yMTQ9c3RhdGljIHZvaWQgcm5iZF9wdXRfc3J2X2RldihzdHJ1Y3Qgcm5iZF9zcnZfZGV2ICpkZXYpXG4tLVxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmMtMjE4LVxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM6MjE5OnZvaWQgcm5iZF9kZXN0cm95X3Nlc3NfZGV2KHN0cnVjdCBybmJkX3Nydl9zZXNzX2RldiAqc2Vzc19kZXYsIGJvb2wga2VlcF9pZClcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jLTIyMC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE4OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzE0CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIGBybmJkX2Rlc3Ryb3lfc2Vzc19kZXZgLCBicm9rZW4gZG93biBhcyBpZiBJJiMzOTttIG5hdmlnYXRpbmcgdGhlIGNvZGUgbXlzZWxmOgoKKipVbmRlcnN0YW5kaW5nIHRoZSBGdW5jdGlvbjogcm5iZF9kZXN0cm95X3Nlc3NfZGV2KioKCkFscmlnaHQsIHRoZSBuYW1lIHRlbGxzIG1lIGV4YWN0bHkgd2hhdCB0aGlzIGZ1bmN0aW9uICpzaG91bGQqIGRvOiBkZXN0cm95IGEgc2Vzc2lvbiBhbmQgaXRzIGFzc29jaWF0ZWQgZGV2aWNlIGluIGFuIFJEQiAoUmVtb3RlIEJsb2NrIERldmljZSkgY29udGV4dC4gVGhhdCBpbXBsaWVzIGNsZWFudXAsIHJlc291cmNlIHJlbGVhc2UsIGFuZCBwb3RlbnRpYWxseSBkaXNjb25uZWN0aW5nIGZyb20gYSByZW1vdGUgc3RvcmFnZSBlbmRwb2ludC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIG9wZXJhdGlvbnMgdGhhdCBhcmUgY3JpdGljYWwgZm9yIGRhdGEgaW50ZWdyaXR5IGFuZCBzeXN0ZW0gc3RhYmlsaXR5LiBMZXQmIzM5O3Mgc2VlIGhvdyBpdCBnb2VzIGFib3V0IHRoaXMgdGFzay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQ6IFdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/IFdoYXQgcmVzb3VyY2VzIGFyZSBiZWluZyBoYW5kbGVkPyBBbmQsIG9mIGNvdXJzZSwgd2hhdCYjMzk7cyB0aGUgZXJyb3IgaGFuZGxpbmcgbGlrZT8gVGhpcyBpcyBhbHdheXMgYSBjcml0aWNhbCBwb2ludCBpbiB0aGVzZSB0eXBlcyBvZiBmdW5jdGlvbnMsIGFzIGJhZCBlcnJvciBoYW5kbGluZyBjYW4gbGVhZCB0byBhbGwgc29ydHMgb2YgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxODozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMTk6XHR2b2lkIHJuYmRfZGVzdHJveV9zZXNzX2RldihzdHJ1Y3Qgcm5iZF9zcnZfc2Vzc19kZXYgKnNlc3NfZGV2LCBib29sIGtlZXBfaWQpXG4gMjIwOlx0e1xuIDIyMTpcdFx0REVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0soZGMpO1xuIDIyMjpcdFxuIDIyMzpcdFx0aWYgKGtlZXBfaWQpXG4gMjI0Olx0XHRcdC8qIGZyZWUgdGhlIHJlc291cmNlcyBmb3IgdGhlIGlkIGJ1dCBkb24mIzM5O3QgICovXG4gMjI1Olx0XHRcdC8qIGFsbG93IHRvIHJlLXVzZSB0aGUgaWQgaXRzZWxmIGJlY2F1c2UgaXQgKi9cbiAyMjY6XHRcdFx0LyogaXMgc3RpbGwgdXNlZCBieSB0aGUgY2xpZW50ICAgICAgICAgICAgICAqL1xuIDIyNzpcdFx0XHR4YV9jbXB4Y2hnKFx1MDAyNnNlc3NfZGV2LVx1MDAzZXNlc3MtXHUwMDNlaW5kZXhfaWRyLCBzZXNzX2Rldi1cdTAwM2VkZXZpY2VfaWQsXG4gMjI4Olx0XHRcdFx0ICAgc2Vzc19kZXYsIE5VTEwsIDApO1xuIDIyOTpcdFx0ZWxzZVxuIDIzMDpcdFx0XHR4YV9lcmFzZShcdTAwMjZzZXNzX2Rldi1cdTAwM2VzZXNzLVx1MDAzZWluZGV4X2lkciwgc2Vzc19kZXYtXHUwMDNlZGV2aWNlX2lkKTtcbiAyMzE6XHRcdHN5bmNocm9uaXplX3JjdSgpO1xuIDIzMjpcdFxuIDIzMzpcdFx0c2Vzc19kZXYtXHUwMDNlZGVzdHJveV9jb21wID0gXHUwMDI2ZGM7XG4gMjM0Olx0XHRybmJkX3B1dF9zZXNzX2RldihzZXNzX2Rldik7XG4gMjM1Olx0XHR3YWl0X2Zvcl9jb21wbGV0aW9uKFx1MDAyNmRjKTsgLyogd2FpdCBmb3IgaW5mbGlnaHRzIHRvIGRyb3AgdG8gemVybyAqL1xuIDIzNjpcdFxuIDIzNzpcdFx0ZnB1dChzZXNzX2Rldi1cdTAwM2ViZGV2X2ZpbGUpO1xuIDIzODpcdFx0bXV0ZXhfbG9jayhcdTAwMjZzZXNzX2Rldi1cdTAwM2VkZXYtXHUwMDNlbG9jayk7XG4gMjM5Olx0XHRsaXN0X2RlbChcdTAwMjZzZXNzX2Rldi1cdTAwM2VkZXZfbGlzdCk7XG4gMjQwOlx0XHRpZiAoIXNlc3NfZGV2LVx1MDAzZXJlYWRvbmx5KVxuIDI0MTpcdFx0XHRzZXNzX2Rldi1cdTAwM2VkZXYtXHUwMDNlb3Blbl93cml0ZV9jbnQtLTtcbiAyNDI6XHRcdG11dGV4X3VubG9jayhcdTAwMjZzZXNzX2Rldi1cdTAwM2VkZXYtXHUwMDNlbG9jayk7XG4gMjQzOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE4OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDAzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvbmNlcm4gUmVnYXJkaW5nIGBybmJkX2Rlc3Ryb3lfc2Vzc19kZXZgIGFuZCBMaXN0IENvcnJ1cHRpb24qKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gVGhpcyBgcm5iZF9kZXN0cm95X3Nlc3NfZGV2YCBmdW5jdGlvbuKApiBpdCYjMzk7cyBjYWxsaW5nIGBsaXN0X2RlbCgmYW1wO3Nlc3NfZGV2LSZndDtkZXZfbGlzdClgLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGZsYWdzIGEgcG90ZW50aWFsIGlzc3VlIGhlcmUuIElmLCBhbmQgdGhhdCYjMzk7cyBhICpiaWcqIGlmLCB0aGUgYHNlc3NfZGV2YCBzdHJ1Y3R1cmUgd2FzICpuZXZlciogYWRkZWQgdG8gdGhlIGBzZXNzX2Rldi0mZ3Q7ZGV2LSZndDtzZXNzX2Rldl9saXN0YCBiZWZvcmUgYHJuYmRfc3J2X2NyZWF0ZV9kZXZfc2Vzc2lvbl9zeXNmc2AgZmFpbGVkLCB0aGVuIHRoYXQgYGxpc3RfZGVsYCBjYWxsIGlzIGdvaW5nIHRvIGNhdXNlIGEgY3Jhc2gsIG9yIGF0IHRoZSB2ZXJ5IGxlYXN0LCBjb3JydXB0IHRoZSBsaXN0LiBUaGUgYGRldl9saXN0YCB3b3VsZCBiZSBlaXRoZXIgdW5pbml0aWFsaXplZCBvciBhbiBlbXB0eSBjb250YWluZXIsIGFuZCBhdHRlbXB0aW5nIHRvIHJlbW92ZSBhbiBlbGVtZW50IHRoYXQgaXNuJiMzOTt0IHBhcnQgb2YgaXQgaXMgYSBkaXNhc3RlciB3YWl0aW5nIHRvIGhhcHBlbi4gV2UmIzM5O3ZlIHNlZW4gdGhpcyBwYXR0ZXJuIGJlZm9yZSwgYW5kIEkmIzM5O20gZ2V0dGluZyBhIGJhZCBmZWVsaW5nLiBSaWdodCwgdGltZSB0byBkaWcgZGVlcGVyLiBXaGVyZSBleGFjdGx5IGlzIGBkZXZfbGlzdGAgaW5pdGlhbGl6ZWQ/IE5lZWQgdG8gdHJhY2UgYmFjayBhbmQgdmVyaWZ5IHRoYXQgaXQmIzM5O3MgYmVpbmcgcHJvcGVybHkgbWFuYWdlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTg6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2X2xpc3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYz02Nj1zdGF0aWMgTElTVF9IRUFEKHNlc3NfbGlzdCk7XG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYzo2NzpzdGF0aWMgTElTVF9IRUFEKGRldl9saXN0KTtcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jLTY4LVxuLS1cbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jPTE5Mj1zdGF0aWMgdm9pZCBkZXN0cm95X2RldmljZShzdHJ1Y3Qga3JlZiAqa3JlZilcbi0tXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy0xOTUtXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYzoxOTY6XHRXQVJOX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2ZGV2LVx1MDAzZXNlc3NfZGV2X2xpc3QpLFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmMtMTk3LVx0XHQgIFwmIzM0O0RldmljZSAlcyBpcyBiZWluZyBkZXN0cm95ZWQgYnV0IHN0aWxsIGluIHVzZSFcXG5cJiMzNDssXG4tLVxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM9MjE5PXZvaWQgcm5iZF9kZXN0cm95X3Nlc3NfZGV2KHN0cnVjdCBybmJkX3Nydl9zZXNzX2RldiAqc2Vzc19kZXYsIGJvb2wga2VlcF9pZClcbi0tXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy0yMzgtXHRtdXRleF9sb2NrKFx1MDAyNnNlc3NfZGV2LVx1MDAzZWRldi1cdTAwM2Vsb2NrKTtcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jOjIzOTpcdGxpc3RfZGVsKFx1MDAyNnNlc3NfZGV2LVx1MDAzZWRldl9saXN0KTtcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jLTI0MC1cdGlmICghc2Vzc19kZXYtXHUwMDNlcmVhZG9ubHkpXG4tLVxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM9NDQwPXN0YXRpYyBzdHJ1Y3Qgcm5iZF9zcnZfZGV2ICpybmJkX3Nydl9pbml0X3Nydl9kZXYoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcbi0tXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy00NDktXHRrcmVmX2luaXQoXHUwMDI2ZGV2LVx1MDAzZWtyZWYpO1xuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM6NDUwOlx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZGV2LVx1MDAzZXNlc3NfZGV2X2xpc3QpO1xuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmMtNDUxLVx0bXV0ZXhfaW5pdChcdTAwMjZkZXYtXHUwMDNlbG9jayk7XG4tLVxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM9NDU3PXJuYmRfc3J2X2ZpbmRfb3JfYWRkX3Nydl9kZXYoc3RydWN0IHJuYmRfc3J2X2RldiAqbmV3X2Rldilcbi0tXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy00NjEtXHRzcGluX2xvY2soXHUwMDI2ZGV2X2xvY2spO1xuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM6NDYyOlx0bGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsIFx1MDAyNmRldl9saXN0LCBsaXN0KSB7XG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy00NjMtXHRcdGlmICghc3RybmNtcChkZXYtXHUwMDNlbmFtZSwgbmV3X2Rldi1cdTAwM2VuYW1lLCBzaXplb2YoZGV2LVx1MDAzZW5hbWUpKSkge1xuLS1cbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jLTQ3My1cdH1cbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jOjQ3NDpcdGxpc3RfYWRkKFx1MDAyNm5ld19kZXYtXHUwMDNlbGlzdCwgXHUwMDI2ZGV2X2xpc3QpO1xuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmMtNDc1LVx0c3Bpbl91bmxvY2soXHUwMDI2ZGV2X2xvY2spO1xuLS1cbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jPTY5MT1zdGF0aWMgaW50IHByb2Nlc3NfbXNnX29wZW4oc3RydWN0IHJuYmRfc3J2X3Nlc3Npb24gKnNydl9zZXNzLFxuLS1cbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jLTc4Ni1cdCAqL1xuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM6Nzg3Olx0bGlzdF9hZGQoXHUwMDI2c3J2X3Nlc3NfZGV2LVx1MDAzZWRldl9saXN0LCBcdTAwMjZzcnZfZGV2LVx1MDAzZXNlc3NfZGV2X2xpc3QpO1xuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmMtNzg4LVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnNydl9kZXYtXHUwMDNlbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE4OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzI4CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkluaXRpYWwgQXNzZXNzbWVudCBvZiBgc3J2X3Nlc3NfZGV2YCBBbGxvY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgbXkgZmlyc3QgdGhvdWdodCBpcywgaGFuZyBvbiBhIHNlY29uZC4gSSBzZWUgdGhhdCBgc3J2X3Nlc3NfZGV2YCwgdGhhdCBjcnVjaWFsIHN0cnVjdHVyZSwgaXMgYmVpbmcgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jYCBpbnNpZGUgYHByb2Nlc3NfbXNnX29wZW5gLiBBbHJpZ2h0LCB0aGF0JiMzOTtzIGltcG9ydGFudCB0byByZW1lbWJlci4gYGt6YWxsb2NgIGlzIHRoZSBrZXl3b3JkIGhlcmUgLSB6ZXJvLWluaXRpYWxpemVkIGFsbG9jYXRpb24uIFRoYXQgbWVhbnMgd2UmIzM5O3JlIHN0YXJ0aW5nIHdpdGggYSBjbGVhbiBzbGF0ZSwgZXZlcnl0aGluZyBpbiB0aGF0IGFsbG9jYXRlZCBtZW1vcnkgaXMgZ3VhcmFudGVlZCB0byBiZSB6ZXJvLiBObyBnYXJiYWdlIHZhbHVlcy4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHByZWRpY3RhYmxlIGJlaGF2aW9yLCBlc3BlY2lhbGx5IGlmIHNvbWUgcGFydHMgb2YgdGhlIHN0cnVjdHVyZSBhcmUgaW50ZW5kZWQgdG8gc3RvcmUgZmxhZ3MsIGNvdW50ZXJzLCBvciBwb2ludGVycyB0aGF0IHdpbGwgYmUgY2hlY2tlZCBpbW1lZGlhdGVseSBhZnRlciBhbGxvY2F0aW9uLiBUaGlzIGlzIGEgdmVyeSBiYXNpYyBidXQgdmVyeSBpbXBvcnRhbnQgdGhpbmcgdG8ga25vdywgYW5kIEkgbmVlZCB0byBrZWVwIGl0IGluIG1pbmQgYXMgSSBsb29rIGF0IHdoYXQgZm9sbG93cyB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxODozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MTA6XHRcbiA3MTE6XHRcdHNydl9zZXNzX2RldiA9IGZpbmRfc3J2X3Nlc3NfZGV2KHNydl9zZXNzLCBvcGVuX21zZy1cdTAwM2VkZXZfbmFtZSk7XG4gNzEyOlx0XHRpZiAoc3J2X3Nlc3NfZGV2KVxuIDcxMzpcdFx0XHRnb3RvIGZpbGxfcmVzcG9uc2U7XG4gNzE0Olx0XG4gNzE1Olx0XHRpZiAoKHN0cmxlbihkZXZfc2VhcmNoX3BhdGgpICYjNDM7IHN0cmxlbihvcGVuX21zZy1cdTAwM2VkZXZfbmFtZSkpXG4gNzE2Olx0XHQgICAgXHUwMDNlPSBQQVRIX01BWCkge1xuIDcxNzpcdFx0XHRwcl9lcnIoXCYjMzQ7T3BlbmluZyBkZXZpY2UgZm9yIHNlc3Npb24gJXMgZmFpbGVkLCBkZXZpY2UgcGF0aCB0b28gbG9uZy4gJiMzOTslcy8lcyYjMzk7IGlzIGxvbmdlciB0aGFuIFBBVEhfTUFYICglZClcXG5cJiMzNDssXG4gNzE4Olx0XHRcdCAgICAgICBzcnZfc2Vzcy1cdTAwM2VzZXNzbmFtZSwgZGV2X3NlYXJjaF9wYXRoLCBvcGVuX21zZy1cdTAwM2VkZXZfbmFtZSxcbiA3MTk6XHRcdFx0ICAgICAgIFBBVEhfTUFYKTtcbiA3MjA6XHRcdFx0cmV0ID0gLUVJTlZBTDtcbiA3MjE6XHRcdFx0Z290byByZWplY3Q7XG4gNzIyOlx0XHR9XG4gNzIzOlx0XHRpZiAoc3Ryc3RyKG9wZW5fbXNnLVx1MDAzZWRldl9uYW1lLCBcJiMzNDsuLlwmIzM0OykpIHtcbiA3MjQ6XHRcdFx0cHJfZXJyKFwmIzM0O09wZW5pbmcgZGV2aWNlIGZvciBzZXNzaW9uICVzIGZhaWxlZCwgZGV2aWNlIHBhdGggJXMgY29udGFpbnMgcmVsYXRpdmUgcGF0aCAuLlxcblwmIzM0OyxcbiA3MjU6XHRcdFx0ICAgICAgIHNydl9zZXNzLVx1MDAzZXNlc3NuYW1lLCBvcGVuX21zZy1cdTAwM2VkZXZfbmFtZSk7XG4gNzI2Olx0XHRcdHJldCA9IC1FSU5WQUw7XG4gNzI3Olx0XHRcdGdvdG8gcmVqZWN0O1xuIDcyODpcdFx0fVxuIDcyOTpcdFx0ZnVsbF9wYXRoID0gcm5iZF9zcnZfZ2V0X2Z1bGxfcGF0aChzcnZfc2Vzcywgb3Blbl9tc2ctXHUwMDNlZGV2X25hbWUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxODozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk2NAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIEkmIzM5O20gcmVhZHkuIExldCYjMzk7cyBzZWUgd2hhdCB5b3UmIzM5O3ZlIGdvdC4gSSYjMzk7bGwgYXBwcm9hY2ggdGhpcyBsaWtlIEkmIzM5O20gZGlzc2VjdGluZyBhIHJlc2VhcmNoIHBhcGVyLCBicmVha2luZyBkb3duIHRoZSBhdXRob3ImIzM5O3MgbG9naWMgYW5kIGZyYW1pbmcgaXQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2Vzcy4KCioqQW5hbHl6aW5nIHRoZSBUZXh0OiBBIERlZXBlciBEaXZlKioKCkFscmlnaHQsIHRoZSBpbnN0cnVjdGlvbiBpcyB0byByZWFkIHRoZSB0ZXh0LiBPa2F5LCBzaW1wbGUgZW5vdWdoLCBidXQgd2hlcmUgZG9lcyBpdCBsZWFkPyBXaGF0IHF1ZXN0aW9uIHdpbGwgYmUgYW5zd2VyZWQ/IFdoYXQgcHJvYmxlbSB3aWxsIGJlIHNvbHZlZD8gVGhpcyBpbml0aWFsIGRpcmVjdGl2ZSBzZXRzIHRoZSBzdGFnZS4gTm93LCBJIGhhdmUgdG8gYXNzdW1lIHRoZSBhdXRob3Igd2FudHMgbWUgdG8gcmVhZCB3aXRoIGEgcHVycG9zZSwgdG8gZXh0cmFjdCBpbmZvcm1hdGlvbi4gSSYjMzk7bGwgdHJ5IHRvIGZpbmQgdGhlIGhpZGRlbiBudWdnZXRzIG9mIHRob3VnaHQgYW5kIGludGVycHJldGF0aW9uIGhlcmUuIEZyb20gdGhlIGJlZ2lubmluZyBpdCBzZWVtcyBhcyB0aG91Z2ggdGhpcyBpcyBnb2luZyB0byBiZSBhYm91dCBnYWluaW5nIGEgd2lkZXIgdW5kZXJzdGFuZGluZyBvZiBhIHRvcGljLiBUaGlzIGlzIGp1c3QgYSBwcmVsaW1pbmFyeSBzdGVwLCB0aG91Z2guCgpJIGhhdmUgdG8gcmVhZCBmdXJ0aGVyIGRvd24gdG8gc2VlIHdoYXQgaW5zaWdodHMgSSBhbSBtZWFudCB0byBnbGVhbi4gSSBoYXZlIHRvIHJlbWFpbiBvcGVuLW1pbmRlZCwgcmVhZHkgdG8gYWRqdXN0IG15IGV4aXN0aW5nIGFzc3VtcHRpb25zIGFuZCBleHBlcnRpc2UgdG8gYWNjb21tb2RhdGUgbmV3IHBlcnNwZWN0aXZlcy4gVGhlIG5leHQgdGV4dCBzaG91bGQgc3RhcnQgdG8gYnVpbGQgdXBvbiB0aGUgZmlyc3Qgc28gdGhhdCBJIGNhbiBnZXQgYSBiZXR0ZXIgaWRlYSBvZiB0aGUgYXV0aG9yJiMzOTtzIHRyYWluIG9mIHRob3VnaHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE4OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDczMDpcdFx0aWYgKElTX0VSUihmdWxsX3BhdGgpKSB7XG4gNzMxOlx0XHRcdHJldCA9IFBUUl9FUlIoZnVsbF9wYXRoKTtcbiA3MzI6XHRcdFx0cHJfZXJyKFwmIzM0O09wZW5pbmcgZGV2aWNlICYjMzk7JXMmIzM5OyBmb3IgY2xpZW50ICVzIGZhaWxlZCwgZmFpbGVkIHRvIGdldCBkZXZpY2UgZnVsbCBwYXRoLCBlcnI6ICVwZVxcblwmIzM0OyxcbiA3MzM6XHRcdFx0ICAgICAgIG9wZW5fbXNnLVx1MDAzZWRldl9uYW1lLCBzcnZfc2Vzcy1cdTAwM2VzZXNzbmFtZSwgZnVsbF9wYXRoKTtcbiA3MzQ6XHRcdFx0Z290byByZWplY3Q7XG4gNzM1Olx0XHR9XG4gNzM2Olx0XG4gNzM3Olx0XHRiZGV2X2ZpbGUgPSBiZGV2X2ZpbGVfb3Blbl9ieV9wYXRoKGZ1bGxfcGF0aCwgb3Blbl9mbGFncywgTlVMTCwgTlVMTCk7XG4gNzM4Olx0XHRpZiAoSVNfRVJSKGJkZXZfZmlsZSkpIHtcbiA3Mzk6XHRcdFx0cmV0ID0gUFRSX0VSUihiZGV2X2ZpbGUpO1xuIDc0MDpcdFx0XHRwcl9lcnIoXCYjMzQ7T3BlbmluZyBkZXZpY2UgJiMzOTslcyYjMzk7IG9uIHNlc3Npb24gJXMgZmFpbGVkLCBmYWlsZWQgdG8gb3BlbiB0aGUgYmxvY2sgZGV2aWNlLCBlcnI6ICVwZVxcblwmIzM0OyxcbiA3NDE6XHRcdFx0ICAgICAgIGZ1bGxfcGF0aCwgc3J2X3Nlc3MtXHUwMDNlc2Vzc25hbWUsIGJkZXZfZmlsZSk7XG4gNzQyOlx0XHRcdGdvdG8gZnJlZV9wYXRoO1xuIDc0MzpcdFx0fVxuIDc0NDpcdFxuIDc0NTpcdFx0c3J2X2RldiA9IHJuYmRfc3J2X2dldF9vcl9jcmVhdGVfc3J2X2RldihmaWxlX2JkZXYoYmRldl9maWxlKSwgc3J2X3Nlc3MsXG4gNzQ2Olx0XHRcdFx0XHRcdFx0ICBvcGVuX21zZy1cdTAwM2VhY2Nlc3NfbW9kZSk7XG4gNzQ3Olx0XHRpZiAoSVNfRVJSKHNydl9kZXYpKSB7XG4gNzQ4Olx0XHRcdHByX2VycihcJiMzNDtPcGVuaW5nIGRldmljZSAmIzM5OyVzJiMzOTsgb24gc2Vzc2lvbiAlcyBmYWlsZWQsIGNyZWF0aW5nIHNydl9kZXYgZmFpbGVkLCBlcnI6ICVwZVxcblwmIzM0OyxcbiA3NDk6XHRcdFx0ICAgICAgIGZ1bGxfcGF0aCwgc3J2X3Nlc3MtXHUwMDNlc2Vzc25hbWUsIHNydl9kZXYpO1xuIDc1MDpcdFx0XHRyZXQgPSBQVFJfRVJSKHNydl9kZXYpO1xuIDc1MTpcdFx0XHRnb3RvIGJsa2Rldl9wdXQ7XG4gNzUyOlx0XHR9XG4gNzUzOlx0XG4gNzU0Olx0XHRzcnZfc2Vzc19kZXYgPSBybmJkX3Nydl9jcmVhdGVfc2V0X3Nlc3NfZGV2KHNydl9zZXNzLCBvcGVuX21zZyxcbiA3NTU6XHRcdFx0XHRcdGJkZXZfZmlsZSxcbiA3NTY6XHRcdFx0XHRcdG9wZW5fbXNnLVx1MDAzZWFjY2Vzc19tb2RlID09IFJOQkRfQUNDRVNTX1JPLFxuIDc1NzpcdFx0XHRcdFx0c3J2X2Rldik7XG4gNzU4Olx0XHRpZiAoSVNfRVJSKHNydl9zZXNzX2RldikpIHtcbiA3NTk6XHRcdFx0cHJfZXJyKFwmIzM0O09wZW5pbmcgZGV2aWNlICYjMzk7JXMmIzM5OyBvbiBzZXNzaW9uICVzIGZhaWxlZCwgY3JlYXRpbmcgc2Vzc19kZXYgZmFpbGVkLCBlcnI6ICVwZVxcblwmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTg6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4NTkKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqRGVlcCBEaXZlIGludG8gYHJuYmRfc3J2X2NyZWF0ZV9zZXRfc2Vzc19kZXZgKioKCkFscmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoaXMgYHJuYmRfc3J2X2NyZWF0ZV9zZXRfc2Vzc19kZXZgIGZ1bmN0aW9uLiBUaGUga2V5IGhlcmUgaXMgaXRzIHJvbGUgaW4gYWxsb2NhdGluZyBhIGBzcnZfc2Vzc19kZXZgIHN0cnVjdHVyZS4gVGhhdCYjMzk7cyB0aGUgY29yZSBvZiBob3cgdGhpcyBzZXJ2aWNlIG1hbmFnZXMgZGV2aWNlIHNlc3Npb25zLCBzbyB1bmRlcnN0YW5kaW5nIGl0cyBpbml0aWFsaXphdGlvbiBpcyBwYXJhbW91bnQuIEkgbmVlZCB0byBjb25maXJtIHRoZSBjb3JyZWN0IGluc3RhbnRpYXRpb24gb2YgdGhhdCBzdHJ1Y3R1cmUuIEkga25vdyB0aGUgaW50cmljYWNpZXMgb2YgbWVtb3J5IG1hbmFnZW1lbnQgaW4gdGhpcyBjb250ZXh0LCBhbmQgd2FudCB0byBjb25maXJtIGl0cyBwcm9wZXIgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbCBzZXR0aW5ncy4gQW55IG1pc3N0ZXBzIGhlcmUgY2FuIHByb3BhZ2F0ZSBzZXJpb3VzIGVycm9ycywgc28gbGV0JiMzOTtzIGRpZyBkZWVwZXIgYW5kIHZlcmlmeSB0aGF0IGV2ZXJ5dGhpbmcgaXMgbGluaW5nIHVwIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTg6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cm5iZF9zcnZfY3JlYXRlX3NldF9zZXNzX2RldiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jPTU3Nz1zdGF0aWMgc3RydWN0IHJuYmRfc3J2X3Nlc3NfZGV2ICpcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jOjU3ODpybmJkX3Nydl9jcmVhdGVfc2V0X3Nlc3NfZGV2KHN0cnVjdCBybmJkX3Nydl9zZXNzaW9uICpzcnZfc2VzcyxcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jLTU3OS1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qgcm5iZF9tc2dfb3BlbiAqb3Blbl9tc2csXG4tLVxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM9NjkxPXN0YXRpYyBpbnQgcHJvY2Vzc19tc2dfb3BlbihzdHJ1Y3Qgcm5iZF9zcnZfc2Vzc2lvbiAqc3J2X3Nlc3MsXG4tLVxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmMtNzUzLVxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM6NzU0Olx0c3J2X3Nlc3NfZGV2ID0gcm5iZF9zcnZfY3JlYXRlX3NldF9zZXNzX2RldihzcnZfc2Vzcywgb3Blbl9tc2csXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy03NTUtXHRcdFx0XHRiZGV2X2ZpbGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE4OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzY5CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIGBybmJkX3Nydl9jcmVhdGVfc2V0X3Nlc3NfZGV2YDoKCioqVW5kZXJzdGFuZGluZyBgcm5iZF9zcnZfY3JlYXRlX3NldF9zZXNzX2RldmAqKgoKQWxyaWdodCwgSSBzZWUgdGhpcyBmdW5jdGlvbiBuYW1lIOKAkyBgcm5iZF9zcnZfY3JlYXRlX3NldF9zZXNzX2RldmAuIEZyb20gdGhlIG5hbWluZyBjb252ZW50aW9uLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhpcyBpcyByZWxhdGVkIHRvIHRoZSBSREJOIChSZWxpYWJsZSBOZXR3b3JrIEJsb2NrIERldmljZSkgc2VydmVyIHNpZGUuIFRoZSAmIzM0O2NyZWF0ZSYjMzQ7IHN1Z2dlc3RzIGl0JiMzOTtzIGludm9sdmVkIGluIHNlc3Npb24gb3IgZGV2aWNlIHNldHVwLiAmIzM0O1NldCYjMzQ7IGltcGxpZXMgc29tZSBjb25maWd1cmF0aW9uIG9yIGFzc2lnbm1lbnQgaXMgaW52b2x2ZWQsIGFuZCAmIzM0O3Nlc3NfZGV2JiMzNDsgbmljZWx5IG5hcnJvd3MgaXQgZG93biB0byBzb21ldGhpbmcgc3BlY2lmaWMgdG8gdGhlIHNlc3Npb24gYW5kIGRldmljZSBjb250ZXh0IHdpdGhpbiB0aGUgUkRCTiBzZXJ2ZXIuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBzdWNoIGEgZnVuY3Rpb24gd291bGQgcHJvYmFibHkgYmUgY3JpdGljYWwgaW4gaW5pdGlhbGl6aW5nIGEgY2xpZW50IGNvbm5lY3Rpb24gb3IgY29uZmlndXJpbmcgaG93IGEgZGV2aWNlIGdldHMgcHJlc2VudGVkIHRvIHRoZSByZXF1ZXN0aW5nIGNsaWVudC4gSSBiZXQgdGhlIGRldGFpbHMgaW5zaWRlIHRoYXQgZnVuY3Rpb24gd291bGQgZ2l2ZSBtZSBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgc2VydmVyIG1hbmFnZXMgcmVzb3VyY2VzIGR1cmluZyBibG9jayBJL08gb3BlcmF0aW9ucy4gTGV0JiMzOTtzIHNlZSBpZiBteSBpbml0aWFsIHRob3VnaHQgaXMgY29ycmVjdCwgYW5kIHdoYXQgSSBjYW4gbGVhcm4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE4OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NzcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU3NzpcdHN0YXRpYyBzdHJ1Y3Qgcm5iZF9zcnZfc2Vzc19kZXYgKlxuIDU3ODpcdHJuYmRfc3J2X2NyZWF0ZV9zZXRfc2Vzc19kZXYoc3RydWN0IHJuYmRfc3J2X3Nlc3Npb24gKnNydl9zZXNzLFxuIDU3OTpcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBybmJkX21zZ19vcGVuICpvcGVuX21zZyxcbiA1ODA6XHRcdFx0XHQgICAgICBzdHJ1Y3QgZmlsZSAqYmRldl9maWxlLCBib29sIHJlYWRvbmx5LFxuIDU4MTpcdFx0XHRcdCAgICAgIHN0cnVjdCBybmJkX3Nydl9kZXYgKnNydl9kZXYpXG4gNTgyOlx0e1xuIDU4MzpcdFx0c3RydWN0IHJuYmRfc3J2X3Nlc3NfZGV2ICpzZGV2ID0gcm5iZF9zZXNzX2Rldl9hbGxvYyhzcnZfc2Vzcyk7XG4gNTg0Olx0XG4gNTg1Olx0XHRpZiAoSVNfRVJSKHNkZXYpKVxuIDU4NjpcdFx0XHRyZXR1cm4gc2RldjtcbiA1ODc6XHRcbiA1ODg6XHRcdGtyZWZfaW5pdChcdTAwMjZzZGV2LVx1MDAzZWtyZWYpO1xuIDU4OTpcdFxuIDU5MDpcdFx0c3Ryc2NweShzZGV2LVx1MDAzZXBhdGhuYW1lLCBvcGVuX21zZy1cdTAwM2VkZXZfbmFtZSwgc2l6ZW9mKHNkZXYtXHUwMDNlcGF0aG5hbWUpKTtcbiA1OTE6XHRcbiA1OTI6XHRcdHNkZXYtXHUwMDNlYmRldl9maWxlXHRcdD0gYmRldl9maWxlO1xuIDU5MzpcdFx0c2Rldi1cdTAwM2VzZXNzXHRcdD0gc3J2X3Nlc3M7XG4gNTk0Olx0XHRzZGV2LVx1MDAzZWRldlx0XHQ9IHNydl9kZXY7XG4gNTk1Olx0XHRzZGV2LVx1MDAzZXJlYWRvbmx5XHRcdD0gcmVhZG9ubHk7XG4gNTk2Olx0XHRzZGV2LVx1MDAzZWFjY2Vzc19tb2RlXHQ9IG9wZW5fbXNnLVx1MDAzZWFjY2Vzc19tb2RlO1xuIDU5NzpcdFxuIDU5ODpcdFx0cmV0dXJuIHNkZXY7XG4gNTk5Olx0fVxuIDYwMDpcdFxuIDYwMTpcdHN0YXRpYyBjaGFyICpybmJkX3Nydl9nZXRfZnVsbF9wYXRoKHN0cnVjdCBybmJkX3Nydl9zZXNzaW9uICpzcnZfc2VzcyxcbiA2MDI6XHRcdFx0XHRcdCAgICAgY29uc3QgY2hhciAqZGV2X25hbWUpXG4gNjAzOlx0e1xuIDYwNDpcdFx0Y2hhciAqZnVsbF9wYXRoO1xuIDYwNTpcdFx0Y2hhciAqYSwgKmI7XG4gNjA2Olx0XHRpbnQgbGVuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxODozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTE0OAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBybmJkX3Nlc3NfZGV2X2FsbG9jYCoqCgpPa2F5LCBzbyBgcm5iZF9zZXNzX2Rldl9hbGxvY2AgaXMgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcgYHNkZXZgLiBUaW1lIHRvIGRyaWxsIGRvd24gaW50byB0aGF0IGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IsIGVzcGVjaWFsbHkgaXRzIHJlc291cmNlIG1hbmFnZW1lbnQgYW5kIGVycm9yIGhhbmRsaW5nLCBpbiByZWxhdGlvbiB0byB0aGUgYHNkZXZgIHN0cnVjdHVyZS4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mIGRldmljZSBhbGxvY2F0aW9uIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgb3ZlcmFsbCByTkJEIHNlc3Npb24gbGlmZWN5Y2xlLiBBcmUgdGhlcmUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBJIHNob3VsZCBiZSBsb29raW5nIG91dCBmb3I/IFdoYXQmIzM5O3MgdGhlIGltcGFjdCBpZiB0aGUgYWxsb2NhdGlvbiBmYWlscyDigJMgZG9lcyBpdCBoYW5kbGUgZXJyb3JzIGdyYWNlZnVsbHksIG9yIGNvdWxkIHdlIGhhdmUgcmVzb3VyY2UgbGVha3M/IEkmIzM5O20gZ29pbmcgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIHRvIGdldCBhIGZ1bGwgcGljdHVyZS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGdvaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxODozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtybmJkX3Nlc3NfZGV2X2FsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM9NDE5PXN0YXRpYyBzdHJ1Y3Qgcm5iZF9zcnZfc2Vzc19kZXZcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jOjQyMDoqcm5iZF9zZXNzX2Rldl9hbGxvYyhzdHJ1Y3Qgcm5iZF9zcnZfc2Vzc2lvbiAqc3J2X3Nlc3MpXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy00MjEte1xuLS1cbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jPTU3OD1ybmJkX3Nydl9jcmVhdGVfc2V0X3Nlc3NfZGV2KHN0cnVjdCBybmJkX3Nydl9zZXNzaW9uICpzcnZfc2Vzcyxcbi0tXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy01ODIte1xuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM6NTgzOlx0c3RydWN0IHJuYmRfc3J2X3Nlc3NfZGV2ICpzZGV2ID0gcm5iZF9zZXNzX2Rldl9hbGxvYyhzcnZfc2Vzcyk7XG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy01ODQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE4OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NjM4CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MgYXMgSSBhcHByb2FjaCByZWFkaW5nIGBybmJkX3Nlc3NfZGV2X2FsbG9jYDoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBEZWNvZGluZyB0aGUgTmFtZSoqCgpGaXJzdCwgSSYjMzk7bSBhbHJlYWR5IG1lbnRhbGx5IHBhcnNpbmcgdGhlIG5hbWUuIGBybmJkYCBzY3JlYW1zICYjMzQ7bmV0d29yayBibG9jayBkZXZpY2UsJiMzNDsgc28gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBzb21ldGhpbmcgcmVsYXRlZCB0byBleHBvcnRpbmcgYSBibG9jayBkZXZpY2Ugb3ZlciBhIG5ldHdvcmsuIFRoZSBgc2Vzc2AgcGFydCBwcm9iYWJseSBtZWFucyAmIzM0O3Nlc3Npb24sJiMzNDsgYW5kIEkgZXhwZWN0IHRoaXMgd2lsbCBiZSBhYm91dCBhbGxvY2F0aW5nIHJlc291cmNlcyBmb3IgYSBuZXR3b3JrIGJsb2NrIGRldmljZSAqc2Vzc2lvbiouIEZpbmFsbHksIGBkZXZfYWxsb2NgLi4uIHRoYXQgaGFzIHRvIGJlIGEgZGV2aWNlIGFsbG9jYXRpb24gZnVuY3Rpb24uIFNvLCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGlzIGNvZGUgdGhhdCBoYW5kbGVzIHNldHRpbmcgdXAgYSBibG9jayBkZXZpY2UgZm9yIGEgcmVtb3RlIGNsaWVudCB0byB1c2UuIEl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiB0aGUgaW5pdGlhbCBoYW5kc2hha2Ugb3IgbmVnb3RpYXRpb24gb2YgcmVzb3VyY2VzLgoKSSYjMzk7bSBtZW50YWxseSBwcmVwYXJpbmcgZm9yIGEgZmFpcmx5IGxvdy1sZXZlbCB2aWV3IG9mIHRoaW5ncywgcHJvYmFibHkgZGVhbGluZyB3aXRoIGRhdGEgc3RydWN0dXJlcyByZWxhdGVkIHRvIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24sIHBlcmhhcHMgc29tZSBkZXZpY2Utc3BlY2lmaWMgaW5mb3JtYXRpb24sIGFuZCBsaWtlbHkgc29tZSBzb3J0IG9mIG1lbW9yeSBhbGxvY2F0aW9uIG9yIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBtdXRleGVzIG9yIHNwaW5sb2NrcyDigJMgdGhlIHVzdWFsIHN1c3BlY3RzIHdoZW4gZGVhbGluZyB3aXRoIHNoYXJlZCByZXNvdXJjZXMgYW5kIGNvbmN1cnJlbnQgYWNjZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxODozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDE5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MTk6XHRzdGF0aWMgc3RydWN0IHJuYmRfc3J2X3Nlc3NfZGV2XG4gNDIwOlx0KnJuYmRfc2Vzc19kZXZfYWxsb2Moc3RydWN0IHJuYmRfc3J2X3Nlc3Npb24gKnNydl9zZXNzKVxuIDQyMTpcdHtcbiA0MjI6XHRcdHN0cnVjdCBybmJkX3Nydl9zZXNzX2RldiAqc2Vzc19kZXY7XG4gNDIzOlx0XHRpbnQgZXJyb3I7XG4gNDI0Olx0XG4gNDI1Olx0XHRzZXNzX2RldiA9IGt6YWxsb2Nfb2JqKCpzZXNzX2Rldik7XG4gNDI2Olx0XHRpZiAoIXNlc3NfZGV2KVxuIDQyNzpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiA0Mjg6XHRcbiA0Mjk6XHRcdGVycm9yID0geGFfYWxsb2MoXHUwMDI2c3J2X3Nlc3MtXHUwMDNlaW5kZXhfaWRyLCBcdTAwMjZzZXNzX2Rldi1cdTAwM2VkZXZpY2VfaWQsIHNlc3NfZGV2LFxuIDQzMDpcdFx0XHRcdCB4YV9saW1pdF8zMmIsIEdGUF9OT1dBSVQpO1xuIDQzMTpcdFx0aWYgKGVycm9yIFx1MDAzYyAwKSB7XG4gNDMyOlx0XHRcdHByX3dhcm4oXCYjMzQ7QWxsb2NhdGluZyBpZHIgZmFpbGVkLCBlcnI6ICVkXFxuXCYjMzQ7LCBlcnJvcik7XG4gNDMzOlx0XHRcdGtmcmVlKHNlc3NfZGV2KTtcbiA0MzQ6XHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyb3IpO1xuIDQzNTpcdFx0fVxuIDQzNjpcdFxuIDQzNzpcdFx0cmV0dXJuIHNlc3NfZGV2O1xuIDQzODpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTg6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYyNTEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA4MTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU3VidGxlIFJOQkQgU2VydmVyIEJ1ZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzLCBgcm5iZF9zZXNzX2Rldl9hbGxvY2AgYWxsb2NhdGVzIHRoZSBgc2Vzc19kZXZgIGFuZCBpbnNlcnRzIGl0IGludG8gdGhlIGBzcnZfc2Vzcy0mZ3Q7aW5kZXhfaWRyYC4gUHJpb3IgdG8gdGhpcyBwYXRjaCwgaWYgYHJuYmRfc3J2X2NyZWF0ZV9kZXZfc2Vzc2lvbl9zeXNmc2AgZmFpbGVkLCBpdCB3b3VsZCBqdW1wIHN0cmFpZ2h0IHRvIGBmcmVlX3Nydl9zZXNzX2RldmAuIE5vdywgYGZyZWVfc3J2X3Nlc3NfZGV2YCBkb2VzIGEgc2ltcGxlIGB4YV9lcmFzZWAsIGBzeW5jaHJvbml6ZV9yY3VgLCBhbmQgdGhlbiBga2ZyZWVgIG9mIHRoZSBgc3J2X3Nlc3NfZGV2YC4gSG93ZXZlciwgaGVyZSYjMzk7cyB0aGUga2lja2VyOiBgcm5iZF9zcnZfY3JlYXRlX2Rldl9zZXNzaW9uX3N5c2ZzYCAqYWxzbyogY2FsbHMgYGtvYmplY3RfcHV0KCZhbXA7c2Vzc19kZXYtJmd0O2tvYmopYCBvbiBmYWlsdXJlLgoKSGFuZyBvbiBhIHNlY29uZOKApiBga29iamVjdF9wdXRgIHRyaWdnZXJzIGBybmJkX3Nydl9zZXNzX2Rldl9yZWxlYXNlYCwgYW5kICp0aGF0KiBjYWxscyBgcm5iZF9kZXN0cm95X3Nlc3NfZGV2YC4gTm93LCBgcm5iZF9kZXN0cm95X3Nlc3NfZGV2YCBpdHNlbGYgZG9lcyBhbiBgeGFfZXJhc2VgLCBgc3luY2hyb25pemVfcmN1YCwgc2V0cyB1cCBhIGBkZXN0cm95X2NvbXBgLCBjYWxscyBgcm5iZF9wdXRfc2Vzc19kZXZgLCBhbmQgdGhlbiBgd2FpdF9mb3JfY29tcGxldGlvbmAsIGBmcHV0YCwgYW5kIHNvIG9uLCBjbGVhbmluZyB1cCB0aGUgcmVzb3VyY2VzLiBCdXQsIGlmIGBybmJkX3Nydl9jcmVhdGVfZGV2X3Nlc3Npb25fc3lzZnNgIGZhaWxzLCBjYWxscyBga29iamVjdF9wdXRgLCB3aGljaCBjYWxscyBgcm5iZF9kZXN0cm95X3Nlc3NfZGV2YCwgdGhlbiBgcm5iZF9kZXN0cm95X3Nlc3NfZGV2YCB0cmllcyB0byBjYWxsIGBsaXN0X2RlbCgmYW1wO3Nlc3NfZGV2LSZndDtkZXZfbGlzdClgLgoKVGhhdCYjMzk7cyB3aGVuIGl0IGNsaWNrZWQhIElmIGBzZXNzX2RldmAgd2FzICpub3QqIGFkZGVkIHRvIGBzZXNzX2Rldi0mZ3Q7ZGV2LSZndDtzZXNzX2Rldl9saXN0YCBiZWZvcmUgYHJuYmRfc3J2X2NyZWF0ZV9kZXZfc2Vzc2lvbl9zeXNmc2AgZmFpbGVkICh3aGljaCBpcyBsaWtlbHkgaW4gdGhlIGZhaWx1cmUgcGF0aCksIHRoZSBgbGlzdF9kZWwoJmFtcDtzZXNzX2Rldi0mZ3Q7ZGV2X2xpc3QpYCBpcyBnb2luZyB0byBjYXVzZSBhIGNyYXNoIG9yIGxpc3QgY29ycnVwdGlvbiBiZWNhdXNlIGBkZXZfbGlzdGAgaXMgZWl0aGVyIHVuaW5pdGlhbGl6ZWQgb3IgYW4gZW1wdHkgbGlzdCEgV2FpdCwgYW5kIEkganVzdCBjaGVja2VkIGBkZXZfbGlzdGAgaXNuJiMzOTt0IGluaXRpYWxpemVkIHdpdGggYElOSVRfTElTVF9IRUFEYCBpbiBgcm5iZF9zZXNzX2Rldl9hbGxvY2AsIGluc3RlYWQgaXQgaXMgemVyb2VkIGJ5IGBremFsbG9jX29iamAsIHdoaWNoIHdvdWxkIGNhdXNlIGBsaXN0X2RlbGAgdG8gY3Jhc2ggZnJvbSBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4gRGFtbiwgdGhpcyBpcyBhIHJlYWwsIGxpdmUgYnVnLgoKQW5kIHRoYXQmIzM5O3Mgbm90IGFsbC4gYHJuYmRfZGVzdHJveV9zZXNzX2RldmAgKmFsc28qIGZyZWVzIHRoZSBvYmplY3QgdXNpbmcgYHJuYmRfcHV0X3Nlc3NfZGV2YCwgYW5kIHRoZW4gdGhlIGNvZGUganVtcHMgdG8gYGZyZWVfc3J2X3Nlc3NfZGV2YCB3aGljaCBhbHNvIGRvZXMgYHhhX2VyYXNlYCBhbmQgYGtmcmVlKHNydl9zZXNzX2RldilgISBXZSBoYXZlIGEgY2xhc3NpYyBkb3VibGUtZnJlZSBzaXR1YXRpb24gaGVyZSwgYW5kIGV2ZW4gYW4gZWFybGllciBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UuIFNvLCB0aGUgcGF0Y2ggZml4ZXMgKmJvdGgqIGEgZG91YmxlIGZyZWUgKmFuZCogYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIEV4Y2VsbGVudCBjYXRjaCEKClRpbWUgdG8gZmlndXJlIG91dCB3aGVyZSB0byBmb2N1cyBvdXIgZnV6emluZyBlZmZvcnRzLiBCYXNlZCBvbiB0aGUgY2FsbCBzdGFjaywgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbjogYHByb2Nlc3NfbXNnX29wZW5gLCBgcm5iZF9zcnZfY3JlYXRlX2Rldl9zZXNzaW9uX3N5c2ZzYCwgYW5kIGBybmJkX2Rlc3Ryb3lfc2Vzc19kZXZgLiBOb3cgdG8gbG9vayBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uc+KApiBJIG5lZWQgYEJMS19ERVZfUk5CRF9TRVJWRVJgLCBidXQgZG9lcyBpdCBkZXBlbmQgb24gYElORklOSUJBTkRfUlRSU19TRVJWRVJgPyBZZXMsIGl0IGRvZXMuIExldCBtZSBqdXN0IGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciBjb25maWdzLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE4OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfREVWX1JOQkQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZy0yLVxuZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWc6Mzpjb25maWcgQkxLX0RFVl9STkJEXG5kcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZy00LVx0Ym9vbFxuZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWctNS1cbmRyaXZlcnMvYmxvY2svcm5iZC9LY29uZmlnOjY6Y29uZmlnIEJMS19ERVZfUk5CRF9DTElFTlRcbmRyaXZlcnMvYmxvY2svcm5iZC9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtSRE1BIE5ldHdvcmsgQmxvY2sgRGV2aWNlIGRyaXZlciBjbGllbnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZy0xOC1cbmRyaXZlcnMvYmxvY2svcm5iZC9LY29uZmlnOjE5OmNvbmZpZyBCTEtfREVWX1JOQkRfU0VSVkVSXG5kcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZy0yMC1cdHRyaXN0YXRlIFwmIzM0O1JETUEgTmV0d29yayBCbG9jayBEZXZpY2UgZHJpdmVyIHNlcnZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxODozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODA2MwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDExOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSTkJEIFRlc3RpbmcgU3RyYXRlZ3kqKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiB0ZXN0aW5nIHRoZSBSTkJEIGZ1bmN0aW9uYWxpdHksIHNwZWNpZmljYWxseSwgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGNsaWVudCBhbmQgc2VydmVyIGNvbXBvbmVudHMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBCTEtfREVWX1JOQkRfU0VSVkVSYCBpcyB0aGUgcHJpbWFyeSBwb2ludCBvZiBpbnRlcmVzdC4gSG93ZXZlciwgb24gZnVydGhlciByZWZsZWN0aW9uLCBJIHJlYWxpemUgdGhhdCB0byAqYWN0dWFsbHkqIHRlc3QgaXQsIEkmIzM5O2xsIG5lZWQgdG8gY29uc2lkZXIgYEJMS19ERVZfUk5CRF9DTElFTlRgIGFzIHdlbGwsIHNpbmNlIHRoZSBjbGllbnQgaXMgcmVzcG9uc2libGUgZm9yIGluaXRpYXRpbmcgY29ubmVjdGlvbnMgYW5kIHNlbmRpbmcgdGhlIGBSTkJEX01TR19PUEVOYCBtZXNzYWdlIHRvIHRoZSBzZXJ2ZXIuCgpUaGUgY29yZSBvZiB0aGlzIGlzIHRoZSBjbGllbnQtc2VydmVyIGludGVyYWN0aW9uLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGNvbnNpZGVyIGhvdyBzeXprYWxsZXIgZml0cyBpbnRvIHRoZSBwaWN0dXJlLiBDYW4gSSBsZXZlcmFnZSBgc3l6X3JuYmRfY2xpZW50X29wZW5gIG9yIGEgc2ltaWxhciBzeXprYWxsZXIgcHJpbWl0aXZlPyBQcm9iYWJseSBub3QgZGlyZWN0bHkuIFN5emthbGxlciwgZ2l2ZW4gaXRzIGZ1enppbmcgYXBwcm9hY2gsIGxpa2VseSBoYW5kbGVzIFJOQkQgYnkgZWl0aGVyIHNldHRpbmcgdXAgY2xpZW50IGFuZCBzZXJ2ZXIgaW5zdGFuY2VzIHdpdGhpbiB0aGUgZnV6emluZyBlbnZpcm9ubWVudCBpdHNlbGYsIG9yIHBvdGVudGlhbGx5IGJ5IGRpcmVjdGx5IGZ1enppbmcgdGhlIHVuZGVybHlpbmcgUkRNQSBjb25uZWN0aW9uIGlmIHRoYXQmIzM5O3MgdGhlIGRhdGEgcGxhbmUuIEl0IGlzIGltcG9ydGFudCB0byBrbm93IHRoaXMuCgpUaGVyZWZvcmUsIGl0JiMzOTtzIHdvcnRoIGNoZWNraW5nIGlmIHN5emthbGxlciBhbHJlYWR5IGhhcyBkZXNjcmlwdGlvbnMsIGRlZmluaXRpb25zLCBvciBjb3ZlcmFnZSBzcGVjaWZpY2FsbHkgZm9yIFJOQkQuIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0IGRpZ2dpbmcgdG8gc2VlIGlmIGFueW9uZSBoYXMgYWxyZWFkeSBkb25lIHRoZSBoZWF2eSBsaWZ0aW5nIGFuZCBpZiBJIGNhbiBidWlsZCBvbiBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTg6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtybmJkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE4OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NDk2CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTmF2aWdhdGluZyB0aGUgTGFuZHNjYXBlIG9mIFN5emthbGxlciBhbmQgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gU29tZXRoaW5nIGlzbiYjMzk7dCBxdWl0ZSBjbGlja2luZy4gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gdGhhdCB0aGUgZGVzY3JpcHRpb25zIGdlbmVyYXRlZCBieSBzeXprYWxsZXIgd2VyZSBkaXJlY3RseSBpbnRlZ3JhdGVkIHdpdGhpbiB0aGUga2VybmVsIHRyZWUuIEJ1dCB0aGF0IGRvZXNuJiMzOTt0IHNlZW0gdG8gYmUgdGhlIGNhc2UuIFNvLCB3ZSBuZWVkIHRvIGZpbmQgYW5vdGhlciB3YXkgdG8gaGFuZGxlIHRoaXMuCgpBaGEhIEluc3RlYWQgb2YgYXR0ZW1wdGluZyB0byBmaW5kIHRoZSBzeXprYWxsZXIgZGVzY3JpcHRpb25zIGRpcmVjdGx5LCB3ZSBjYW4gbGV2ZXJhZ2UgdGhlIGV4aXN0aW5nIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIElmIHdlIGNhbiBwcm92aWRlIHRoZSBjb3JyZWN0IGZsYWdzLCB0aGUgaW50ZWdyYXRpb24gc2hvdWxkIHdvcmsuIExldCYjMzk7cyBzZWUgaWYgd2UgY2FuIHVzZSB0aGUgYEJMS19ERVZfUk5CRF9TRVJWRVJgIGFuZCBgQkxLX0RFVl9STkJEX0NMSUVOVGAgb3B0aW9ucy4gVGhleSBzaG91bGQgZG8gdGhlIHRyaWNrLgoKVG8gYmUgZXh0cmEgY2VydGFpbiB3ZSBhcmUgb24gdGhlIHJpZ2h0IHRyYWNrLCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgc2ltaWxhciBtb2R1bGVzLiBDaGVja2luZyBvdXQgaG93IGBJTkZJTklCQU5EX1JUUlNfU0VSVkVSYCBhbmQgYElORklOSUJBTkRfUlRSU19DTElFTlRgIGFyZSBoYW5kbGVkIHdpbGwgZ2l2ZSB1cyBhIGdvb2QgcG9pbnQgb2YgY29tcGFyaXNvbiBhbmQgY29uZmlybSB0aGlzIGxpbmUgb2YgdGhpbmtpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE4OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJTkZJTklCQU5EX1JUUlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2luZmluaWJhbmQvdWxwL3J0cnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2luZmluaWJhbmQvdWxwL3J0cnMvS2NvbmZpZy0yLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWc6Mzpjb25maWcgSU5GSU5JQkFORF9SVFJTXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3J0cnMvS2NvbmZpZy00LVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3J0cnMvS2NvbmZpZy02LVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWc6Nzpjb25maWcgSU5GSU5JQkFORF9SVFJTX0NMSUVOVFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctOC1cdHRyaXN0YXRlIFwmIzM0O1JUUlMgY2xpZW50IG1vZHVsZVwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnLTE3LVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWc6MTg6Y29uZmlnIElORklOSUJBTkRfUlRSU19TRVJWRVJcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnLTE5LVx0dHJpc3RhdGUgXCYjMzQ7UlRSUyBzZXJ2ZXIgbW9kdWxlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE4OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDQ1CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGRldmljZSBjb25maWd1cmF0aW9ucyBhbmQsIHllcywgdGhlc2UgZGVmaW5pdGVseSBleGlzdCBhbmQgbmVlZCB0byBiZSBhZGRyZXNzZWQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gaW5jbHVkZSBgQkxLX0RFVl9STkJEX1NFUlZFUmAgYW5kIGBCTEtfREVWX1JOQkRfQ0xJRU5UYC4gSSBzaG91bGQgYWxzbyBjb25zaWRlciBgSU5GSU5JQkFORF9SVFJTX1NFUlZFUmAgYW5kIGBJTkZJTklCQU5EX1JUUlNfQ0xJRU5UYC4gSG93ZXZlciwgd2FpdCBhIHNlY29uZC4gSSByZW1lbWJlciB0aGF0IGBCTEtfREVWX1JOQkRfU0VSVkVSYCBhY3R1YWxseSAqc2VsZWN0cyogYEJMS19ERVZfUk5CRGAgYW5kIGFsc28gKmRlcGVuZHMqIG9uIGBJTkZJTklCQU5EX1JUUlNfU0VSVkVSYC4KClRoaXMgbWVhbnMgdGhhdCBlbmFibGluZyBgQkxLX0RFVl9STkJEX1NFUlZFUmAgYW5kIGBCTEtfREVWX1JOQkRfQ0xJRU5UYCBzaG91bGQgdGVjaG5pY2FsbHkgcHVsbCBpbiB0aGUgb3RoZXJzIGF1dG9tYXRpY2FsbHksIGdpdmVuIHRoZSBkZXBlbmRlbmNpZXMuIEl0IGlzLCBob3dldmVyLCBwcm9iYWJseSBzYWZlciB0byBiZSBleHBsaWNpdCBhbmQgbGlzdCBgSU5GSU5JQkFORF9SVFJTX1NFUlZFUmAgYW5kIGBJTkZJTklCQU5EX1JUUlNfQ0xJRU5UYCBhbnl3YXksIG9yIG1heWJlIGp1c3Qgc3RpY2sgd2l0aCB0aGUgUk5CRCBvbmVzIGZvciB0aGUgc2FrZSBvZiBzaW1wbGljaXR5LiBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zIGludm9sdmVkIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE4OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfREVWX1JOQkQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWctMi1cbmRyaXZlcnMvYmxvY2svcm5iZC9LY29uZmlnOjM6Y29uZmlnIEJMS19ERVZfUk5CRFxuZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWctNC1cdGJvb2xcbmRyaXZlcnMvYmxvY2svcm5iZC9LY29uZmlnLTUtXG5kcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZzo2OmNvbmZpZyBCTEtfREVWX1JOQkRfQ0xJRU5UXG5kcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7UkRNQSBOZXR3b3JrIEJsb2NrIERldmljZSBkcml2ZXIgY2xpZW50XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWctMTgtXG5kcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZzoxOTpjb25maWcgQkxLX0RFVl9STkJEX1NFUlZFUlxuZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWctMjAtXHR0cmlzdGF0ZSBcJiMzNDtSRE1BIE5ldHdvcmsgQmxvY2sgRGV2aWNlIGRyaXZlciBzZXJ2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTg6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk2NzAKCQkJCQkJCW91dHB1dDogMjUyCgkJCQkJCQl0aG91Z2h0czogNDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUk5CRCBTZXJ2ZXIgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gbGlzdCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6IGBCTEtfREVWX1JOQkRfU0VSVkVSYCBhbmQgYEJMS19ERVZfUk5CRF9DTElFTlRgLiBUaG9zZSBhcmUgdGhlIGJhc2VsaW5lIHJlcXVpcmVtZW50cy4gTm93LCBmb2N1c2luZyBvbiB0aGUgY29yZSBzeW1ib2xzIHRvdWNoZWQgYnkgdGhpcyBwYXRjaDogYHByb2Nlc3NfbXNnX29wZW5gLCBgcm5iZF9zcnZfY3JlYXRlX2Rldl9zZXNzaW9uX3N5c2ZzYCwgYW5kIGBybmJkX2Rlc3Ryb3lfc2Vzc19kZXZgLiBBcmUgdGhlcmUgb3RoZXIgY2xvc2VseSByZWxhdGVkIGZ1bmN0aW9ucyBpbXBhY3RlZD8gWWVzLCBzcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBpcyBjaGFuZ2luZyBgcHJvY2Vzc19tc2dfb3BlbmAuIExldCYjMzk7cyBpbmNsdWRlIHRoYXQuCgpOb3csIGEgcXVpY2sgdmVyaWZpY2F0aW9uIOKAkyBpcyBgcHJvY2Vzc19tc2dfb3BlbmAgYWN0dWFsbHkgcmVhY2hhYmxlPyBZZXMsIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBybmJkX3Nydl9yZG1hX2V2YCB3aGVuIHRoZSBtZXNzYWdlIElEIGlzIGBSTkJEX01TR19PUEVOYC4gVGhhdCYjMzk7cyB0cmlnZ2VyZWQgd2hlbiBhIGNsaWVudCBjb25uZWN0cywgc28gd2UmIzM5O3JlIGdvb2QgdGhlcmUuCgpPa2F5LCBkaXZpbmcgaW50byB0aGUgaGVhcnQgb2YgdGhlIGlzc3VlOiB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIGRvdWJsZSBmcmVlIGFuZCBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiB0aGUgUk5CRCBzZXJ2ZXImIzM5O3MgZXJyb3IgcGF0aCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgcHJvY2Vzc19tc2dfb3BlbmAuIElmIGBybmJkX3Nydl9jcmVhdGVfZGV2X3Nlc3Npb25fc3lzZnNgIGZhaWxzLCBpdCBjYWxscyBga29iamVjdF9wdXRgLCB3aGljaCB0cmlnZ2VycyB0aGUgYHJuYmRfZGVzdHJveV9zZXNzX2RldmAgcmVsZWFzZSBjYWxsYmFjay4gVGhpcyBjYWxsYmFjayBpcyBzdXBwb3NlZCB0byBmcmVlIHRoZSBzZXNzaW9uIGRldmljZSBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlIHNlc3Npb24gZGV2aWNlIGxpc3QgKGBzZXNzX2Rldl9saXN0YCkuIFRoZSBwcm9ibGVtIGlzLCBiZWZvcmUgdGhlIHBhdGNoLCB0aGUgZGV2aWNlIHdhc24mIzM5O3QgYWRkZWQgdG8gdGhlIGxpc3QgKmJlZm9yZSogc3lzZnMgY3JlYXRpb24uIFRoaXMgbGVhZHMgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYGxpc3RfZGVsYCwgZm9sbG93ZWQgYnkgYW4gZXJyb3IgaGFuZGxpbmcgcGF0aCB0aGF0IGNhbGxzIGBmcmVlX3Nydl9zZXNzX2RldmAsIGF0dGVtcHRpbmcgdG8gZnJlZSB0aGUgb2JqZWN0IGEgc2Vjb25kIHRpbWUuCgpUaGUga2V5IGlzIGluIHRoZSBlcnJvciBwYXRoIGZvciBgcHJvY2Vzc19tc2dfb3BlbmAuIFRoZSBkb3VibGUgZnJlZSBhbmQgTlVMTCBwb2ludGVyIGlzc3VlcyBtZWFuIHRoaXMgaXMgcHJpbWUgdGVycml0b3J5IGZvciBmdXp6aW5nLiBUaGUgZ29hbCB3aWxsIGJlIHRvIHVuY292ZXIgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgb3IgbGlzdCBjb3JydXB0aW9uIHdpdGhpbiB0aGUgc2VydmVyLiBJdCBpcyBjbGVhciB0aGF0IHRoaXMgbmVlZHMgdG8gYmUgZnV6emVkLCBzbyBJJiMzOTttIHNldHRpbmcgYFdvcnRoRnV6emluZ2AgdG8gdHJ1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTg6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfUk5CRF9TRVJWRVImIzM0OywKICAgICYjMzQ7QkxLX0RFVl9STkJEX0NMSUVOVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Byb2Nlc3NfbXNnX29wZW4mIzM0OywKICAgICYjMzQ7cm5iZF9zcnZfY3JlYXRlX2Rldl9zZXNzaW9uX3N5c2ZzJiMzNDssCiAgICAmIzM0O3JuYmRfZGVzdHJveV9zZXNzX2RldiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGRvdWJsZSBmcmVlIGFuZCBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvbiB0aGUgZXJyb3IgcGF0aCBvZiBgcHJvY2Vzc19tc2dfb3BlbmAgaW4gdGhlIFJOQkQgc2VydmVyLiBJZiBgcm5iZF9zcnZfY3JlYXRlX2Rldl9zZXNzaW9uX3N5c2ZzYCBmYWlscywgaXQgY2FsbHMgYGtvYmplY3RfcHV0YCwgd2hpY2ggaW52b2tlcyB0aGUgcmVsZWFzZSBjYWxsYmFjayBgcm5iZF9kZXN0cm95X3Nlc3NfZGV2YC4gVGhpcyBjYWxsYmFjayBmcmVlcyB0aGUgc2Vzc2lvbiBkZXZpY2UgYW5kIHJlbW92ZXMgaXQgZnJvbSB0aGUgYHNlc3NfZGV2X2xpc3RgLiBCZWZvcmUgdGhlIHBhdGNoLCB0aGUgZGV2aWNlIHdhcyBub3QgYWRkZWQgdG8gdGhlIGxpc3QgYmVmb3JlIHN5c2ZzIGNyZWF0aW9uLCBjYXVzaW5nIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBsaXN0X2RlbGAsIGFuZCB0aGUgZXJyb3IgaGFuZGxpbmcganVtcGVkIHRvIGBmcmVlX3Nydl9zZXNzX2RldmAgd2hpY2ggZnJlZWQgdGhlIG9iamVjdCBhZ2Fpbi4gRnV6emluZyB0aGlzIGVycm9yIHBhdGggaXMgaW1wb3J0YW50IHRvIGVuc3VyZSBubyBvdGhlciB1c2UtYWZ0ZXItZnJlZSBvciBsaXN0IGNvcnJ1cHRpb25zIGV4aXN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX1JOQkRfU0VSVkVSJiMzNDssCiAgICAmIzM0O0JMS19ERVZfUk5CRF9DTElFTlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwcm9jZXNzX21zZ19vcGVuJiMzNDssCiAgICAmIzM0O3JuYmRfc3J2X2NyZWF0ZV9kZXZfc2Vzc2lvbl9zeXNmcyYjMzQ7LAogICAgJiMzNDtybmJkX2Rlc3Ryb3lfc2Vzc19kZXYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBkb3VibGUgZnJlZSBhbmQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb24gdGhlIGVycm9yIHBhdGggb2YgYHByb2Nlc3NfbXNnX29wZW5gIGluIHRoZSBSTkJEIHNlcnZlci4gSWYgYHJuYmRfc3J2X2NyZWF0ZV9kZXZfc2Vzc2lvbl9zeXNmc2AgZmFpbHMsIGl0IGNhbGxzIGBrb2JqZWN0X3B1dGAsIHdoaWNoIGludm9rZXMgdGhlIHJlbGVhc2UgY2FsbGJhY2sgYHJuYmRfZGVzdHJveV9zZXNzX2RldmAuIFRoaXMgY2FsbGJhY2sgZnJlZXMgdGhlIHNlc3Npb24gZGV2aWNlIGFuZCByZW1vdmVzIGl0IGZyb20gdGhlIGBzZXNzX2Rldl9saXN0YC4gQmVmb3JlIHRoZSBwYXRjaCwgdGhlIGRldmljZSB3YXMgbm90IGFkZGVkIHRvIHRoZSBsaXN0IGJlZm9yZSBzeXNmcyBjcmVhdGlvbiwgY2F1c2luZyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgbGlzdF9kZWxgLCBhbmQgdGhlIGVycm9yIGhhbmRsaW5nIGp1bXBlZCB0byBgZnJlZV9zcnZfc2Vzc19kZXZgIHdoaWNoIGZyZWVkIHRoZSBvYmplY3QgYWdhaW4uIEZ1enppbmcgdGhpcyBlcnJvciBwYXRoIGlzIGltcG9ydGFudCB0byBlbnN1cmUgbm8gb3RoZXIgdXNlLWFmdGVyLWZyZWUgb3IgbGlzdCBjb3JydXB0aW9ucyBleGlzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE4OjM1OjQ1Ljc2NjYwMTczNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NDA5MDQzODg0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX1JOQkRfU0VSVkVSXCIsXG4gICAgXCJCTEtfREVWX1JOQkRfQ0xJRU5UXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHJvY2Vzc19tc2dfb3BlblwiLFxuICAgIFwicm5iZF9zcnZfY3JlYXRlX2Rldl9zZXNzaW9uX3N5c2ZzXCIsXG4gICAgXCJybmJkX2Rlc3Ryb3lfc2Vzc19kZXZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGRvdWJsZSBmcmVlIGFuZCBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvbiB0aGUgZXJyb3IgcGF0aCBvZiBgcHJvY2Vzc19tc2dfb3BlbmAgaW4gdGhlIFJOQkQgc2VydmVyLiBJZiBgcm5iZF9zcnZfY3JlYXRlX2Rldl9zZXNzaW9uX3N5c2ZzYCBmYWlscywgaXQgY2FsbHMgYGtvYmplY3RfcHV0YCwgd2hpY2ggaW52b2tlcyB0aGUgcmVsZWFzZSBjYWxsYmFjayBgcm5iZF9kZXN0cm95X3Nlc3NfZGV2YC4gVGhpcyBjYWxsYmFjayBmcmVlcyB0aGUgc2Vzc2lvbiBkZXZpY2UgYW5kIHJlbW92ZXMgaXQgZnJvbSB0aGUgYHNlc3NfZGV2X2xpc3RgLiBCZWZvcmUgdGhlIHBhdGNoLCB0aGUgZGV2aWNlIHdhcyBub3QgYWRkZWQgdG8gdGhlIGxpc3QgYmVmb3JlIHN5c2ZzIGNyZWF0aW9uLCBjYXVzaW5nIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBsaXN0X2RlbGAsIGFuZCB0aGUgZXJyb3IgaGFuZGxpbmcganVtcGVkIHRvIGBmcmVlX3Nydl9zZXNzX2RldmAgd2hpY2ggZnJlZWQgdGhlIG9iamVjdCBhZ2Fpbi4gRnV6emluZyB0aGlzIGVycm9yIHBhdGggaXMgaW1wb3J0YW50IHRvIGVuc3VyZSBubyBvdGhlciB1c2UtYWZ0ZXItZnJlZSBvciBsaXN0IGNvcnJ1cHRpb25zIGV4aXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxODozNTo0NS43NjY2MDYyMTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4NDY2MDI5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDYxMTc5NmRiZTIwYzhhZGVlMjdkYWNkYzcxNDhiZGYyOTExMDY3M2RcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdWwgMTQgMTg6MzU6NDQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmMgYi9kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuY1xcbmluZGV4IDEwZThjNDM4YmI0Mzk3Li41YTk5MWJmYmYzYWQ1OSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuY1xcbisrKyBiL2RyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jXFxuQEAgLTc3OCwxOCArNzc4LDIyIEBAIHN0YXRpYyBpbnQgcHJvY2Vzc19tc2dfb3BlbihzdHJ1Y3Qgcm5iZF9zcnZfc2Vzc2lvbiAqc3J2X3Nlc3MsXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4rXFx0LypcXG4rXFx0ICogQWRkIHRoZSBzZXNzaW9uIGRldmljZSB0byB0aGUgbGlzdCBiZWZvcmUgaW5pdGlhbGl6aW5nIGl0c1xcbitcXHQgKiBrb2JqZWN0LiBJZiBzeXNmcyBjcmVhdGlvbiBmYWlscywga29iamVjdF9wdXQoKSBpbnZva2VzIHRoZVxcbitcXHQgKiByZWxlYXNlIGNhbGxiYWNrLCB3aGljaCByZW1vdmVzIHRoZSBvYmplY3QgZnJvbSB0aGlzIGxpc3QgYW5kXFxuK1xcdCAqIHJlbGVhc2VzIGFsbCByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzZXNzaW9uIGRldmljZS5cXG4rXFx0ICovXFxuK1xcdGxpc3RfYWRkKFxcdTAwMjZzcnZfc2Vzc19kZXYtXFx1MDAzZWRldl9saXN0LCBcXHUwMDI2c3J2X2Rldi1cXHUwMDNlc2Vzc19kZXZfbGlzdCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2c3J2X2Rldi1cXHUwMDNlbG9jayk7XFxuK1xcbiBcXHRyZXQgPSBybmJkX3Nydl9jcmVhdGVfZGV2X3Nlc3Npb25fc3lzZnMoc3J2X3Nlc3NfZGV2KTtcXG4gXFx0aWYgKHJldCkge1xcbi1cXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnNydl9kZXYtXFx1MDAzZWxvY2spO1xcbi1cXHRcXHRybmJkX3Nydl9lcnIoc3J2X3Nlc3NfZGV2LFxcbi1cXHRcXHRcXHQgICAgICBcXFwiT3BlbmluZyBkZXZpY2UgZmFpbGVkLCBmYWlsZWQgdG8gY3JlYXRlIGRldiBjbGllbnQgc3lzZnMgZmlsZXMsIGVycjogJWRcXFxcblxcXCIsXFxuLVxcdFxcdFxcdCAgICAgIHJldCk7XFxuLVxcdFxcdGdvdG8gZnJlZV9zcnZfc2Vzc19kZXY7XFxuK1xcdFxcdHByX2VycihcXFwiT3BlbmluZyBkZXZpY2UgJyVzJyBvbiBzZXNzaW9uICVzIGZhaWxlZCwgZmFpbGVkIHRvIGNyZWF0ZSBkZXYgY2xpZW50IHN5c2ZzIGZpbGVzLCBlcnI6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHQgICAgICAgZnVsbF9wYXRoLCBzcnZfc2Vzcy1cXHUwMDNlc2Vzc25hbWUsIHJldCk7XFxuK1xcdFxcdGdvdG8gZnJlZV9wYXRoO1xcbiBcXHR9XFxuIFxcbi1cXHRsaXN0X2FkZChcXHUwMDI2c3J2X3Nlc3NfZGV2LVxcdTAwM2VkZXZfbGlzdCwgXFx1MDAyNnNydl9kZXYtXFx1MDAzZXNlc3NfZGV2X2xpc3QpO1xcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNnNydl9kZXYtXFx1MDAzZWxvY2spO1xcbi1cXG4gXFx0cm5iZF9zcnZfaW5mbyhzcnZfc2Vzc19kZXYsIFxcXCJPcGVuZWQgZGV2aWNlICclcydcXFxcblxcXCIsIHNydl9kZXYtXFx1MDAzZW5hbWUpO1xcbiBcXG4gXFx0a2ZyZWUoZnVsbF9wYXRoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTg6MzU6NDYuMTUxOTAwODI3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNTM3MDUxMzA1MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9STkJEX1NFUlZFUlwiLFxuICAgIFwiQkxLX0RFVl9STkJEX0NMSUVOVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInByb2Nlc3NfbXNnX29wZW5cIixcbiAgICBcInJuYmRfc3J2X2NyZWF0ZV9kZXZfc2Vzc2lvbl9zeXNmc1wiLFxuICAgIFwicm5iZF9kZXN0cm95X3Nlc3NfZGV2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBkb3VibGUgZnJlZSBhbmQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb24gdGhlIGVycm9yIHBhdGggb2YgYHByb2Nlc3NfbXNnX29wZW5gIGluIHRoZSBSTkJEIHNlcnZlci4gSWYgYHJuYmRfc3J2X2NyZWF0ZV9kZXZfc2Vzc2lvbl9zeXNmc2AgZmFpbHMsIGl0IGNhbGxzIGBrb2JqZWN0X3B1dGAsIHdoaWNoIGludm9rZXMgdGhlIHJlbGVhc2UgY2FsbGJhY2sgYHJuYmRfZGVzdHJveV9zZXNzX2RldmAuIFRoaXMgY2FsbGJhY2sgZnJlZXMgdGhlIHNlc3Npb24gZGV2aWNlIGFuZCByZW1vdmVzIGl0IGZyb20gdGhlIGBzZXNzX2Rldl9saXN0YC4gQmVmb3JlIHRoZSBwYXRjaCwgdGhlIGRldmljZSB3YXMgbm90IGFkZGVkIHRvIHRoZSBsaXN0IGJlZm9yZSBzeXNmcyBjcmVhdGlvbiwgY2F1c2luZyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgbGlzdF9kZWxgLCBhbmQgdGhlIGVycm9yIGhhbmRsaW5nIGp1bXBlZCB0byBgZnJlZV9zcnZfc2Vzc19kZXZgIHdoaWNoIGZyZWVkIHRoZSBvYmplY3QgYWdhaW4uIEZ1enppbmcgdGhpcyBlcnJvciBwYXRoIGlzIGltcG9ydGFudCB0byBlbnN1cmUgbm8gb3RoZXIgdXNlLWFmdGVyLWZyZWUgb3IgbGlzdCBjb3JydXB0aW9ucyBleGlzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2MTE3OTZkYmUyMGM4YWRlZTI3ZGFjZGM3MTQ4YmRmMjkxMTA2NzNkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMTQgMTg6MzU6NDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYyBiL2RyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jXG5pbmRleCAxMGU4YzQzOGJiNDM5Ny4uNWE5OTFiZmJmM2FkNTkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuY1xuKysrIGIvZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmNcbkBAIC03NzgsMTggKzc3OCwyMiBAQCBzdGF0aWMgaW50IHByb2Nlc3NfbXNnX29wZW4oc3RydWN0IHJuYmRfc3J2X3Nlc3Npb24gKnNydl9zZXNzLFxuIFx0XHR9XG4gXHR9XG4gXG4rXHQvKlxuK1x0ICogQWRkIHRoZSBzZXNzaW9uIGRldmljZSB0byB0aGUgbGlzdCBiZWZvcmUgaW5pdGlhbGl6aW5nIGl0c1xuK1x0ICoga29iamVjdC4gSWYgc3lzZnMgY3JlYXRpb24gZmFpbHMsIGtvYmplY3RfcHV0KCkgaW52b2tlcyB0aGVcbitcdCAqIHJlbGVhc2UgY2FsbGJhY2ssIHdoaWNoIHJlbW92ZXMgdGhlIG9iamVjdCBmcm9tIHRoaXMgbGlzdCBhbmRcbitcdCAqIHJlbGVhc2VzIGFsbCByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzZXNzaW9uIGRldmljZS5cbitcdCAqL1xuK1x0bGlzdF9hZGQoXHUwMDI2c3J2X3Nlc3NfZGV2LVx1MDAzZWRldl9saXN0LCBcdTAwMjZzcnZfZGV2LVx1MDAzZXNlc3NfZGV2X2xpc3QpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnNydl9kZXYtXHUwMDNlbG9jayk7XG4rXG4gXHRyZXQgPSBybmJkX3Nydl9jcmVhdGVfZGV2X3Nlc3Npb25fc3lzZnMoc3J2X3Nlc3NfZGV2KTtcbiBcdGlmIChyZXQpIHtcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnNydl9kZXYtXHUwMDNlbG9jayk7XG4tXHRcdHJuYmRfc3J2X2VycihzcnZfc2Vzc19kZXYsXG4tXHRcdFx0ICAgICAgXCJPcGVuaW5nIGRldmljZSBmYWlsZWQsIGZhaWxlZCB0byBjcmVhdGUgZGV2IGNsaWVudCBzeXNmcyBmaWxlcywgZXJyOiAlZFxcblwiLFxuLVx0XHRcdCAgICAgIHJldCk7XG4tXHRcdGdvdG8gZnJlZV9zcnZfc2Vzc19kZXY7XG4rXHRcdHByX2VycihcIk9wZW5pbmcgZGV2aWNlICclcycgb24gc2Vzc2lvbiAlcyBmYWlsZWQsIGZhaWxlZCB0byBjcmVhdGUgZGV2IGNsaWVudCBzeXNmcyBmaWxlcywgZXJyOiAlZFxcblwiLFxuK1x0XHQgICAgICAgZnVsbF9wYXRoLCBzcnZfc2Vzcy1cdTAwM2VzZXNzbmFtZSwgcmV0KTtcbitcdFx0Z290byBmcmVlX3BhdGg7XG4gXHR9XG4gXG4tXHRsaXN0X2FkZChcdTAwMjZzcnZfc2Vzc19kZXYtXHUwMDNlZGV2X2xpc3QsIFx1MDAyNnNydl9kZXYtXHUwMDNlc2Vzc19kZXZfbGlzdCk7XG4tXHRtdXRleF91bmxvY2soXHUwMDI2c3J2X2Rldi1cdTAwM2Vsb2NrKTtcbi1cbiBcdHJuYmRfc3J2X2luZm8oc3J2X3Nlc3NfZGV2LCBcIk9wZW5lZCBkZXZpY2UgJyVzJ1xcblwiLCBzcnZfZGV2LVx1MDAzZW5hbWUpO1xuIFxuIFx0a2ZyZWUoZnVsbF9wYXRoKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE4OjM1OjQ2LjE1MTkwMjQwN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4ODI1MDI5MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSTkJEIFNlcnZlcidzIERldmljZSBTZXNzaW9uIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgYXBwZWFycyB0byB0YXJnZXQgdGhlIGBwcm9jZXNzX21zZ19vcGVuYCBmdW5jdGlvbiB3aXRoaW4gYGRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhIHN1YnRsZSBhZGp1c3RtZW50IGluIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIHdoZW4gaGFuZGxpbmcgYSBuZXcgZGV2aWNlIHNlc3Npb24uIFByZXZpb3VzbHksIGl0IGxvb2tlZCBsaWtlIGBybmJkX3Nydl9jcmVhdGVfZGV2X3Nlc3Npb25fc3lzZnNgIHdhcyBjYWxsZWQgKmJlZm9yZSogYWRkaW5nIHRoZSBzZXNzaW9uIGRldmljZSAoYHNydl9zZXNzX2RldmApIHRvIHRoZSBzZXJ2ZXIncyBzZXNzaW9uIGRldmljZSBsaXN0IChgc3J2X2Rldi1cdTAwM2VzZXNzX2Rldl9saXN0YCkuIE5vdywgdGhlIHBhdGNoIGNvcnJlY3RseSBhZGRzIGl0IHRvIHRoZSBsaXN0ICpmaXJzdCouXG5cblRoZSBjcml0aWNhbCBzaGlmdCBpcyB0aGlzOiBJZiBgcm5iZF9zcnZfY3JlYXRlX2Rldl9zZXNzaW9uX3N5c2ZzYCBmYWlscyDigJMgYW5kIGJ5IFwiZmFpbHNcIiBJJ20gYXNzdW1pbmcgdGhhdCBtZWFucyBpdCBlbmNvdW50ZXJzIGFuIGVycm9yIGluIGNyZWF0aW5nIHRoZSBzeXNmcyBlbnRyaWVzIGZvciB0aGUgZGV2aWNlIHNlc3Npb24g4oCTIHRoZSBjb2RlIG5vdyBqdW1wcyBkaXJlY3RseSB0byBgZnJlZV9wYXRoYCBpbnN0ZWFkIG9mIGBmcmVlX3Nydl9zZXNzX2RldmAuIFRoaXMgaXMgaW1wb3J0YW50LCBhcyBpdCBzaWduYWxzIGEgY2hhbmdlIGluIGhvdyB3ZSB3YW50IHRvIGhhbmRsZSBjbGVhbnVwLlxuXG5UaGUgY29tbWVudCBpcyBrZXkgaGVyZS4gSXQgZXNzZW50aWFsbHkgaGlnaGxpZ2h0cyB0aGUgcmF0aW9uYWxlOiBieSBhZGRpbmcgdGhlIHNlc3Npb24gZGV2aWNlIHRvIHRoZSBsaXN0ICpiZWZvcmUqIGluaXRpYWxpemluZyBpdHMga29iamVjdCAod2hpY2ggaXMgd2hhdCBJIGFzc3VtZSBpcyBoYXBwZW5pbmcgaW4gdGhlIHN5c2ZzIGNyZWF0aW9uIHBoYXNlKSwgdGhlIGNvZGUgZW5zdXJlcyB0aGF0IGlmIHN5c2ZzIGNyZWF0aW9uIGZhaWxzLCBga29iamVjdF9wdXQoKWAgZ2V0cyBjYWxsZWQuIFRoaXMgYGtvYmplY3RfcHV0KClgIHRoZW4gdHJpZ2dlcnMgdGhlIHJlbGVhc2UgY2FsbGJhY2ssIHdoaWNoIGlzIHdoYXQgKnJlbW92ZXMqIHRoZSBvYmplY3QgZnJvbSB0aGUgbGlzdC4gRWZmZWN0aXZlbHksIGl0IGhhbmRsZXMgdGhlIGZyZWVpbmcgb2YgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2Vzc2lvbiBkZXZpY2UgaW4gYSBjb250cm9sbGVkIHdheSwgcmVnYXJkbGVzcyBvZiB0aGUgZXJyb3IgY29uZGl0aW9uLiBUaGlzIHNvdW5kcyBsaWtlIGFuIGVmZm9ydCB0byBhdm9pZCByZXNvdXJjZSBsZWFrcyBkdXJpbmcgZGV2aWNlIHNlc3Npb24gY3JlYXRpb24uIE5vdywgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGBmcmVlX3BhdGhgIGZ1bmN0aW9uIHRvIHZlcmlmeSB0aGUgY2xlYW51cCBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE1MCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE4OjM1OjUxLjAzNDQwNzIwMVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDc2MDI2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcm9jZXNzX21zZ19vcGVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jPTM1MD1zdGF0aWMgdm9pZCBwcm9jZXNzX21zZ19jbG9zZShzdHJ1Y3Qgcm5iZF9zcnZfc2Vzc2lvbiAqc3J2X3Nlc3MsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy0zNjktXFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM6MzcwOnN0YXRpYyBpbnQgcHJvY2Vzc19tc2dfb3BlbihzdHJ1Y3Qgcm5iZF9zcnZfc2Vzc2lvbiAqc3J2X3Nlc3MsXFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmMtMzcxLVxcdFxcdFxcdCAgICBjb25zdCB2b2lkICptc2csIHNpemVfdCBsZW4sXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYz0zNzg9c3RhdGljIGludCBybmJkX3Nydl9yZG1hX2V2KHZvaWQgKnByaXYsIHN0cnVjdCBydHJzX3Nydl9vcCAqaWQsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy0zOTgtXFx0Y2FzZSBSTkJEX01TR19PUEVOOlxcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jOjM5OTpcXHRcXHRyZXQgPSBwcm9jZXNzX21zZ19vcGVuKHNydl9zZXNzLCB1c3IsIHVzcmxlbiwgZGF0YSwgZGF0YWxlbik7XFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmMtNDAwLVxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM9Njc2PWZpbmRfc3J2X3Nlc3NfZGV2KHN0cnVjdCBybmJkX3Nydl9zZXNzaW9uICpzcnZfc2VzcywgY29uc3QgY2hhciAqZGV2X25hbWUpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy02OTAtXFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM6NjkxOnN0YXRpYyBpbnQgcHJvY2Vzc19tc2dfb3BlbihzdHJ1Y3Qgcm5iZF9zcnZfc2Vzc2lvbiAqc3J2X3Nlc3MsXFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmMtNjkyLVxcdFxcdFxcdCAgICBjb25zdCB2b2lkICptc2csIHNpemVfdCBsZW4sXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy03MDMtXFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM6NzA0OlxcdHRyYWNlX3Byb2Nlc3NfbXNnX29wZW4oc3J2X3Nlc3MsIG9wZW5fbXNnKTtcXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy03MDUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE4OjM1OjUxLjA5NTE3MjY4NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNDUzMDc0NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUk5CRCBhbmQgU3l6a2FsbGVyOiBBIFF1aWNrIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpcyBgcHJvY2Vzc19tc2dfb3BlbmAgZnVuY3Rpb24gYW5kIHdoZXJlIGl0IGdldHMgY2FsbGVkIGZyb20uIEl0IGxvb2tzIGxpa2UgaXQncyB0cmlnZ2VyZWQgYnkgYHJuYmRfc3J2X3JkbWFfZXZgLCB3aGljaCBoYW5kbGVzIFJETUEgZXZlbnRzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgY2FuIHdlIGFjdHVhbGx5IHRlc3QgUk5CRCDigJMgdGhlIFJlbGlhYmxlIE5ldHdvcmsgQmxvY2sgRGV2aWNlIOKAkyBlZmZlY3RpdmVseSB3aXRoaW4gc3l6a2FsbGVyPyBJdCdzIGEga2V5IHF1ZXN0aW9uLlxuXG5UaGUgbmF0dXJlIG9mIFJETUEgZHJpdmVycyBvZnRlbiBuZWNlc3NpdGF0ZXMgc3BlY2lmaWMgaGFyZHdhcmUgb3Igc29mdHdhcmUgUkRNQSBpbXBsZW1lbnRhdGlvbnMgbGlrZSByeGUsIGFuZCB0aGF0IHRlbmRzIHRvIGNyZWF0ZSBhIGJvdHRsZW5lY2sgZm9yIGZ1emluZy4gU28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIFJOQkQgaGFzIHRoZSBzYW1lIGxpbWl0YXRpb25zLiBMZXQncyBzZWUgaWYgd2UgY2FuIGZ1enogUk5CRC5cblxuSSByZW1lbWJlciBSTkJEIGlzIGJ1aWx0IG9uIFJUUlMgKFJlbGlhYmxlIFRyYW5zcG9ydCBSb3V0aW5nIFNlcnZpY2UpLCBhbmQgdGhhdCByZWxpZXMgb24gUkRNQSwgd2hpY2ggcmVpbmZvcmNlcyB0aGUgbmVlZCB0byBkaWcgZGVlcGVyLiBGaXJzdCwgSSB0aGluayBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgUk5CRCB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLiBUaGlzIHdpbGwgcHJvdmlkZSBzb21lIG5lY2Vzc2FyeSBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzA3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE4OjM1OjU1LjM0MDQ4MTcwOFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mjk1ODAyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0RFVl9STkJEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svcm5iZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svcm5iZC9LY29uZmlnLTItXFxuZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWc6Mzpjb25maWcgQkxLX0RFVl9STkJEXFxuZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWctNC1cXHRib29sXFxuZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWctNS1cXG5kcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZzo2OmNvbmZpZyBCTEtfREVWX1JOQkRfQ0xJRU5UXFxuZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiUkRNQSBOZXR3b3JrIEJsb2NrIERldmljZSBkcml2ZXIgY2xpZW50XFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWctMTgtXFxuZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWc6MTk6Y29uZmlnIEJMS19ERVZfUk5CRF9TRVJWRVJcXG5kcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZy0yMC1cXHR0cmlzdGF0ZSBcXFwiUkRNQSBOZXR3b3JrIEJsb2NrIERldmljZSBkcml2ZXIgc2VydmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxODozNTo1NS40MDM0NDQzNjNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTc4ODgzNjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIFJOQkQgU2VydmVyKipcblxuT2theSwgc28gdGhlIGNvbmZpZyBvcHRpb24gd2UncmUgbG9va2luZyBhdCBoZXJlIGlzIGBCTEtfREVWX1JOQkRfU0VSVkVSYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcImNhbiB3ZSBmdXp6IHRoaXMgdGhpbmc/XCIgQWJzb2x1dGVseSwgdGhlIHBvdGVudGlhbCBpcyB0aGVyZSwgYW5kIGVuYWJsaW5nIGBCTEtfREVWX1JOQkRfU0VSVkVSYCBzaG91bGQgb3BlbiB0aGUgZG9vci5cblxuSG9sZCBvbiBhIHNlY29uZCwgdGhvdWdoLi4uIEkgcmVtZW1iZXIgc29tZXRoaW5nIGFib3V0IFJETUEuIFJpZ2h0LCBpdCBsb29rcyBsaWtlIHRoaXMgaXMgZGVwZW5kZW50IG9uIGBJTkZJTklCQU5EYC4gSSdkIGJldHRlciBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZmlsZSBpbiBgZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWdgIGp1c3QgdG8gYmUgc3VyZSwgYW5kIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhvc2UgZGVwZW5kZW5jaWVzIGFyZSBzZXQgdXAuIE5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0IGJlZm9yZSBkaXZpbmcgaW50byBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODcwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTg6MzU6NTkuMzgyMzI5Nzg1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXFxuICAgMjpcXHRcXG4gICAzOlxcdGNvbmZpZyBCTEtfREVWX1JOQkRcXG4gICA0OlxcdFxcdGJvb2xcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIEJMS19ERVZfUk5CRF9DTElFTlRcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCJSRE1BIE5ldHdvcmsgQmxvY2sgRGV2aWNlIGRyaXZlciBjbGllbnRcXFwiXFxuICAgODpcXHRcXHRkZXBlbmRzIG9uIElORklOSUJBTkRfUlRSU19DTElFTlRcXG4gICA5OlxcdFxcdHNlbGVjdCBCTEtfREVWX1JOQkRcXG4gIDEwOlxcdFxcdHNlbGVjdCBTR19QT09MXFxuICAxMTpcXHRcXHRoZWxwXFxuICAxMjpcXHRcXHQgIFJOQkQgY2xpZW50IGlzIGEgbmV0d29yayBibG9jayBkZXZpY2UgZHJpdmVyIHVzaW5nIHJkbWEgdHJhbnNwb3J0LlxcbiAgMTM6XFx0XFxuICAxNDpcXHRcXHQgIFJOQkQgY2xpZW50IGFsbG93cyBmb3IgbWFwcGluZyBvZiBhIHJlbW90ZSBibG9jayBkZXZpY2VzIG92ZXJcXG4gIDE1OlxcdFxcdCAgUlRSUyBwcm90b2NvbCBmcm9tIGEgdGFyZ2V0IHN5c3RlbSB3aGVyZSBSTkJEIHNlcnZlciBpcyBydW5uaW5nLlxcbiAgMTY6XFx0XFxuICAxNzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAxODpcXHRcXG4gIDE5OlxcdGNvbmZpZyBCTEtfREVWX1JOQkRfU0VSVkVSXFxuICAyMDpcXHRcXHR0cmlzdGF0ZSBcXFwiUkRNQSBOZXR3b3JrIEJsb2NrIERldmljZSBkcml2ZXIgc2VydmVyXFxcIlxcbiAgMjE6XFx0XFx0ZGVwZW5kcyBvbiBJTkZJTklCQU5EX1JUUlNfU0VSVkVSXFxuICAyMjpcXHRcXHRzZWxlY3QgQkxLX0RFVl9STkJEXFxuICAyMzpcXHRcXHRoZWxwXFxuICAyNDpcXHRcXHQgIFJOQkQgc2VydmVyIGlzIHRoZSBzZXJ2ZXIgc2lkZSBvZiBSTkJEIHVzaW5nIHJkbWEgdHJhbnNwb3J0LlxcbiAgMjU6XFx0XFxuICAyNjpcXHRcXHQgIFJOQkQgc2VydmVyIGFsbG93cyBmb3IgZXhwb3J0aW5nIGxvY2FsIGJsb2NrIGRldmljZXMgdG8gYSByZW1vdGUgY2xpZW50XFxuICAyNzpcXHRcXHQgIG92ZXIgUlRSUyBwcm90b2NvbC5cXG4gIDI4OlxcdFxcbiAgMjk6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxODozNTo1OS4zODI0MDk3MTZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTQ1NTcyNDM1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBSTkJEIFNlcnZlcjogQSBRdWljayBBc3Nlc3NtZW50KipcblxuT2theSwgc28gdGhlIGZ1enppbmcgc3RyYXRlZ3kgaGluZ2VzIG9uIHRoYXQgYElORklOSUJBTkRfUlRSU19TRVJWRVJgIHNldHRpbmcuIENhbiBzeXprYWxsZXIgYWN0dWFsbHkgdGFyZ2V0IHRoZSBSTkJEIHNlcnZlciBkaXJlY3RseT8gSSBrbm93IGl0IGNhbiBoYW5kbGUgUkRNQSBwcm90b2NvbHMgbGlrZSBgcnhlYCBhbmQgYHNpd2AsIGJ1dCB0aGUgc3BlY2lmaWNzIGhlcmUgYXJlIGtleS4gSGFuZyBvbi4uLiB0aGUgdnVsbmVyYWJpbGl0eSBvciBwb3RlbnRpYWwgaXNzdWUgaXMgdHJpZ2dlcmVkIHdpdGhpbiBgcHJvY2Vzc19tc2dfb3BlbmAuIEFoLCB0aGF0IGZ1bmN0aW9uIGlzIGhpdCB3aGVuIGFuIFJOQkQgY2xpZW50IGNvbm5lY3RzIGFuZCBzZW5kcyBhbiBPUEVOIG1lc3NhZ2UuIEludGVyZXN0aW5nLlxuXG5JcyB0aGlzIHdvcnRoIHRoZSBlZmZvcnQgb2Ygc2V0dGluZyB1cCBmdXp6aW5nIGZvcj8gQWJzb2x1dGVseSwgeWVzLiBJdCdzIG5vdCBqdXN0IGEgY29zbWV0aWMgY2hhbmdlOyBpdCBsb29rcyBsaWtlIGEgcmVhbCBmdW5jdGlvbmFsIGZpeCwgcG90ZW50aWFsbHkgYWRkcmVzc2luZyBhIHVzZS1hZnRlci1mcmVlLCBhIG1lbW9yeSBsZWFrLCBvciBtYXliZSBldmVuIGEgY3JpdGljYWwgbGlzdCBjb3JydXB0aW9uIG9uIGFuIGVycm9yIHBhdGguIE5vdywgbGV0J3MgZGl2ZSBpbnRvIGBwcm9jZXNzX21zZ19vcGVuYCBpdHNlbGYgYW5kIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0J3MgaGFwcGVuaW5nIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTIxLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTg6Mzc6MTAuODM4MTM1OTAyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjQwMTQyNzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJvY2Vzc19tc2dfb3BlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYz0zNTA9c3RhdGljIHZvaWQgcHJvY2Vzc19tc2dfY2xvc2Uoc3RydWN0IHJuYmRfc3J2X3Nlc3Npb24gKnNydl9zZXNzLFxcbi0tXFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmMtMzY5LVxcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jOjM3MDpzdGF0aWMgaW50IHByb2Nlc3NfbXNnX29wZW4oc3RydWN0IHJuYmRfc3J2X3Nlc3Npb24gKnNydl9zZXNzLFxcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jLTM3MS1cXHRcXHRcXHQgICAgY29uc3Qgdm9pZCAqbXNnLCBzaXplX3QgbGVuLFxcbi0tXFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM9Mzc4PXN0YXRpYyBpbnQgcm5iZF9zcnZfcmRtYV9ldih2b2lkICpwcml2LCBzdHJ1Y3QgcnRyc19zcnZfb3AgKmlkLFxcbi0tXFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmMtMzk4LVxcdGNhc2UgUk5CRF9NU0dfT1BFTjpcXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYzozOTk6XFx0XFx0cmV0ID0gcHJvY2Vzc19tc2dfb3BlbihzcnZfc2VzcywgdXNyLCB1c3JsZW4sIGRhdGEsIGRhdGFsZW4pO1xcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jLTQwMC1cXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jPTY3Nj1maW5kX3Nydl9zZXNzX2RldihzdHJ1Y3Qgcm5iZF9zcnZfc2Vzc2lvbiAqc3J2X3Nlc3MsIGNvbnN0IGNoYXIgKmRldl9uYW1lKVxcbi0tXFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmMtNjkwLVxcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jOjY5MTpzdGF0aWMgaW50IHByb2Nlc3NfbXNnX29wZW4oc3RydWN0IHJuYmRfc3J2X3Nlc3Npb24gKnNydl9zZXNzLFxcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jLTY5Mi1cXHRcXHRcXHQgICAgY29uc3Qgdm9pZCAqbXNnLCBzaXplX3QgbGVuLFxcbi0tXFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmMtNzAzLVxcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jOjcwNDpcXHR0cmFjZV9wcm9jZXNzX21zZ19vcGVuKHNydl9zZXNzLCBvcGVuX21zZyk7XFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmMtNzA1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxODozNzoxMS4xNjIxNTgyMzdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc4ODI4MjM0NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGVidWdnaW5nIGEgUG90ZW50aWFsIFJlZGVmaW5pdGlvbioqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuLi4gaXMgYHByb2Nlc3NfbXNnX29wZW5gIGRlZmluZWQgdHdpY2U/IFRoYXQncy4uLiB1bnVzdWFsLCBhbmQgYSBwb3RlbnRpYWwgcmVjaXBlIGZvciBkaXNhc3Rlci4gVGhlIGNvbXBpbGVyICpzaG91bGQqIGJlIHllbGxpbmcgYXQgbWUsIGJ1dCBtYXliZSB0aGVyZSdzIHNvbWUgc2NvcGluZyB0cmlja2VyeSBhdCBwbGF5LCBvciBhIG1pc3BsYWNlZCBgI2luY2x1ZGVgLiBMZXQncyBhc3N1bWUgdGhlcmUgaXMgc29tZXRoaW5nIHN0cmFuZ2UgZ29pbmcgb24uXG5cbkxpbmUgMzcwLi4uIG9rYXksIHRoYXQgZmVlbHMgbGlrZSB0aGUgbGlrZWx5IGN1bHByaXQgZm9yIHRoZSBpbml0aWFsIGRlZmluaXRpb24sIHRoZSBmb3J3YXJkIGRlY2xhcmF0aW9uLCBvciBwb3NzaWJsZSBpbnN0YW50aWF0aW9uIG9mIHRoZSBmdW5jdGlvbi4gTGV0IG1lIGdvIHRha2UgYSBsb29rIGF0IHdoYXQncyBoYXBwZW5pbmcgYXQgdGhhdCBsaW5lLiBQcm9iYWJseSBpdCdzIGFuIGV4dGVybiBkZWZpbml0aW9uLCBvciBwZXJoYXBzIGEgZGVjbGFyYXRpb24gaW4gYSBoZWFkZXIgdGhhdCdzIHRoZW4gYWNjaWRlbnRhbGx5IGluY2x1ZGVkIG11bHRpcGxlIHRpbWVzLiBMZXQncyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgdGhlIHNpdHVhdGlvbi4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDE4LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTg6Mzg6MDkuMDQ0OTgzNTMyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM2NSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM2NTpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZzcnZfc2Vzcy1cXHUwMDNlbG9jayk7XFxuIDM2NjpcXHRcXHRybmJkX3Nydl9kZXN0cm95X2Rldl9zZXNzaW9uX3N5c2ZzKHNlc3NfZGV2KTtcXG4gMzY3OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2c3J2X3Nlc3MtXFx1MDAzZWxvY2spO1xcbiAzNjg6XFx0fVxcbiAzNjk6XFx0XFxuIDM3MDpcXHRzdGF0aWMgaW50IHByb2Nlc3NfbXNnX29wZW4oc3RydWN0IHJuYmRfc3J2X3Nlc3Npb24gKnNydl9zZXNzLFxcbiAzNzE6XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHZvaWQgKm1zZywgc2l6ZV90IGxlbixcXG4gMzcyOlxcdFxcdFxcdFxcdCAgICB2b2lkICpkYXRhLCBzaXplX3QgZGF0YWxlbik7XFxuIDM3MzpcXHRcXG4gMzc0OlxcdHN0YXRpYyB2b2lkIHByb2Nlc3NfbXNnX3Nlc3NfaW5mbyhzdHJ1Y3Qgcm5iZF9zcnZfc2Vzc2lvbiAqc3J2X3Nlc3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE4OjM4OjA5LjA0NTA4Mjc5MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDczNjkxNzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipOYXZpZ2F0aW5nIHRoZSBDb2RlYmFzZSoqXG5cbkFscmlnaHQsIGZvcndhcmQgZGVjbGFyYXRpb24sIGdvdCBpdC4gQWx3YXlzIGdvb2QgdG8gc2VlIHRoYXQgdXBmcm9udCB0byBhdm9pZCBhbnkgbmFzdHkgc3VycHJpc2VzIGxhdGVyLiBOb3csIHdoZXJlIGlzIHRoZSBhY3R1YWwgZGVmaW5pdGlvbiBvZiB0aGlzIHRoaW5nPyBBaCwgbGluZSA2OTEuIE9rYXksIGxldCdzIGp1bXAgZG93biB0aGVyZSBhbmQgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgYXMgSSBleHBlY3QgaXQgdG8gYmUuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGZ1bmN0aW9uIGBwcm9jZXNzX21zZ19vcGVuYC4gSSB3YW50IHRvIHNlZSBob3cgdGhhdCdzIGludGVyYWN0aW5nIHdpdGggdGhpcyBmb3J3YXJkIGRlY2xhcmVkIGl0ZW0uIFRoYXQncyBhIGtleSBwYXJ0IG9mIHRoaXMgd2hvbGUgZmxvdywgc28gSSdsbCBzZWUgd2hhdCBpdCdzIGRvaW5nIHdpdGggaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4NjEsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE4OjM4OjEyLjExODc3NjI3MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDU1MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzYwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzYwOlxcdFxcdFxcdCAgICAgICBmdWxsX3BhdGgsIHNydl9zZXNzLVxcdTAwM2VzZXNzbmFtZSwgc3J2X3Nlc3NfZGV2KTtcXG4gNzYxOlxcdFxcdFxcdHJldCA9IFBUUl9FUlIoc3J2X3Nlc3NfZGV2KTtcXG4gNzYyOlxcdFxcdFxcdGdvdG8gc3J2X2Rldl9wdXQ7XFxuIDc2MzpcXHRcXHR9XFxuIDc2NDpcXHRcXG4gNzY1OlxcdFxcdC8qIENyZWF0ZSB0aGUgc3J2X2RldiBzeXNmcyBmaWxlcyBpZiB0aGV5IGhhdmVuJ3QgYmVlbiBjcmVhdGVkIHlldC4gVGhlXFxuIDc2NjpcXHRcXHQgKiByZWFzb24gdG8gZGVsYXkgdGhlIGNyZWF0aW9uIGlzIG5vdCB0byBjcmVhdGUgdGhlIHN5c2ZzIGZpbGVzIGJlZm9yZVxcbiA3Njc6XFx0XFx0ICogd2UgYXJlIHN1cmUgdGhlIGRldmljZSBjYW4gYmUgb3BlbmVkLlxcbiA3Njg6XFx0XFx0ICovXFxuIDc2OTpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZzcnZfZGV2LVxcdTAwM2Vsb2NrKTtcXG4gNzcwOlxcdFxcdGlmICghc3J2X2Rldi1cXHUwMDNlZGV2X2tvYmouc3RhdGVfaW5fc3lzZnMpIHtcXG4gNzcxOlxcdFxcdFxcdHJldCA9IHJuYmRfc3J2X2NyZWF0ZV9kZXZfc3lzZnMoc3J2X2RldiwgZmlsZV9iZGV2KGJkZXZfZmlsZSkpO1xcbiA3NzI6XFx0XFx0XFx0aWYgKHJldCkge1xcbiA3NzM6XFx0XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZzcnZfZGV2LVxcdTAwM2Vsb2NrKTtcXG4gNzc0OlxcdFxcdFxcdFxcdHJuYmRfc3J2X2VycihzcnZfc2Vzc19kZXYsXFxuIDc3NTpcXHRcXHRcXHRcXHRcXHQgICAgICBcXFwiT3BlbmluZyBkZXZpY2UgZmFpbGVkLCBmYWlsZWQgdG8gY3JlYXRlIGRldmljZSBzeXNmcyBmaWxlcywgZXJyOiAlZFxcXFxuXFxcIixcXG4gNzc2OlxcdFxcdFxcdFxcdFxcdCAgICAgIHJldCk7XFxuIDc3NzpcXHRcXHRcXHRcXHRnb3RvIGZyZWVfc3J2X3Nlc3NfZGV2O1xcbiA3Nzg6XFx0XFx0XFx0fVxcbiA3Nzk6XFx0XFx0fVxcbiA3ODA6XFx0XFxuIDc4MTpcXHRcXHQvKlxcbiA3ODI6XFx0XFx0ICogQWRkIHRoZSBzZXNzaW9uIGRldmljZSB0byB0aGUgbGlzdCBiZWZvcmUgaW5pdGlhbGl6aW5nIGl0c1xcbiA3ODM6XFx0XFx0ICoga29iamVjdC4gSWYgc3lzZnMgY3JlYXRpb24gZmFpbHMsIGtvYmplY3RfcHV0KCkgaW52b2tlcyB0aGVcXG4gNzg0OlxcdFxcdCAqIHJlbGVhc2UgY2FsbGJhY2ssIHdoaWNoIHJlbW92ZXMgdGhlIG9iamVjdCBmcm9tIHRoaXMgbGlzdCBhbmRcXG4gNzg1OlxcdFxcdCAqIHJlbGVhc2VzIGFsbCByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzZXNzaW9uIGRldmljZS5cXG4gNzg2OlxcdFxcdCAqL1xcbiA3ODc6XFx0XFx0bGlzdF9hZGQoXFx1MDAyNnNydl9zZXNzX2Rldi1cXHUwMDNlZGV2X2xpc3QsIFxcdTAwMjZzcnZfZGV2LVxcdTAwM2VzZXNzX2Rldl9saXN0KTtcXG4gNzg4OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2c3J2X2Rldi1cXHUwMDNlbG9jayk7XFxuIDc4OTpcXHRcXG4gNzkwOlxcdFxcdHJldCA9IHJuYmRfc3J2X2NyZWF0ZV9kZXZfc2Vzc2lvbl9zeXNmcyhzcnZfc2Vzc19kZXYpO1xcbiA3OTE6XFx0XFx0aWYgKHJldCkge1xcbiA3OTI6XFx0XFx0XFx0cHJfZXJyKFxcXCJPcGVuaW5nIGRldmljZSAnJXMnIG9uIHNlc3Npb24gJXMgZmFpbGVkLCBmYWlsZWQgdG8gY3JlYXRlIGRldiBjbGllbnQgc3lzZnMgZmlsZXMsIGVycjogJWRcXFxcblxcXCIsXFxuIDc5MzpcXHRcXHRcXHQgICAgICAgZnVsbF9wYXRoLCBzcnZfc2Vzcy1cXHUwMDNlc2Vzc25hbWUsIHJldCk7XFxuIDc5NDpcXHRcXHRcXHRnb3RvIGZyZWVfcGF0aDtcXG4gNzk1OlxcdFxcdH1cXG4gNzk2OlxcdFxcbiA3OTc6XFx0XFx0cm5iZF9zcnZfaW5mbyhzcnZfc2Vzc19kZXYsIFxcXCJPcGVuZWQgZGV2aWNlICclcydcXFxcblxcXCIsIHNydl9kZXYtXFx1MDAzZW5hbWUpO1xcbiA3OTg6XFx0XFxuIDc5OTpcXHRcXHRrZnJlZShmdWxsX3BhdGgpO1xcbiA4MDA6XFx0XFxuIDgwMTpcXHRmaWxsX3Jlc3BvbnNlOlxcbiA4MDI6XFx0XFx0cm5iZF9zcnZfZmlsbF9tc2dfb3Blbl9yc3AocnNwLCBzcnZfc2Vzc19kZXYpO1xcbiA4MDM6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZzcnZfc2Vzcy1cXHUwMDNlbG9jayk7XFxuIDgwNDpcXHRcXHRyZXR1cm4gMDtcXG4gODA1OlxcdFxcbiA4MDY6XFx0ZnJlZV9zcnZfc2Vzc19kZXY6XFxuIDgwNzpcXHRcXHR4YV9lcmFzZShcXHUwMDI2c3J2X3Nlc3MtXFx1MDAzZWluZGV4X2lkciwgc3J2X3Nlc3NfZGV2LVxcdTAwM2VkZXZpY2VfaWQpO1xcbiA4MDg6XFx0XFx0c3luY2hyb25pemVfcmN1KCk7XFxuIDgwOTpcXHRcXHRrZnJlZShzcnZfc2Vzc19kZXYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxODozODoxMi4xMTg4ODMyMDFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI4NzYzNTg2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBDcml0aWNhbCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHByZXR0eSBzcGVjaWZpYyBidWcgaW4gYHJuYmRfc3J2X2NyZWF0ZV9kZXZfc2Vzc2lvbl9zeXNmc2AuIEFwcGFyZW50bHksIHRoZSBvbGQgY29kZSBoYWQgYSBuYXN0eSBoYWJpdCBvZiBnb2luZyBkaXJlY3RseSB0byBgZnJlZV9zcnZfc2Vzc19kZXZgIHdoZW4gaXQgZmFpbGVkLiBOb3csIGl0J3MganVtcGluZyB0byBgZnJlZV9wYXRoYCBpbnN0ZWFkLCB3aGljaCAqc2hvdWxkKiBiZSBhIGJldHRlciBhcHByb2FjaC4gXG5cbkJ1dCBob2xkIG9uIGEgc2Vjb25kLi4uIGBmcmVlX3BhdGhgIGlzbid0IHNob3dpbmcgdXAgaW4gdGhlIHJlYWQtZmlsZSBvdXRwdXQuIFRoYXQncyBzdHJhbmdlLCBhbmQgd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGdvaW5nIG9uIHdpdGggYGZyZWVfcGF0aGAgYW5kIHdoeSBpdCdzIG5vdCBpbW1lZGlhdGVseSB2aXNpYmxlLiBUaGlzIGZlZWxzIGxpa2UgdGhlcmUncyBhIG1pc3NpbmcgcGllY2UgdG8gdGhlIHB1enpsZSwgYW5kIEkgbmVlZCB0byBmaW5kIGl0LiBUaW1lIHRvIGtlZXAgcmVhZGluZyFcblxuXG4iLCJJbnB1dFRva2VucyI6NjkzNiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTg6Mzg6MTUuNDA2NTIwNjI1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgwMDpcXHRcXG4gODAxOlxcdGZpbGxfcmVzcG9uc2U6XFxuIDgwMjpcXHRcXHRybmJkX3Nydl9maWxsX21zZ19vcGVuX3JzcChyc3AsIHNydl9zZXNzX2Rldik7XFxuIDgwMzpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnNydl9zZXNzLVxcdTAwM2Vsb2NrKTtcXG4gODA0OlxcdFxcdHJldHVybiAwO1xcbiA4MDU6XFx0XFxuIDgwNjpcXHRmcmVlX3Nydl9zZXNzX2RldjpcXG4gODA3OlxcdFxcdHhhX2VyYXNlKFxcdTAwMjZzcnZfc2Vzcy1cXHUwMDNlaW5kZXhfaWRyLCBzcnZfc2Vzc19kZXYtXFx1MDAzZWRldmljZV9pZCk7XFxuIDgwODpcXHRcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4gODA5OlxcdFxcdGtmcmVlKHNydl9zZXNzX2Rldik7XFxuIDgxMDpcXHRzcnZfZGV2X3B1dDpcXG4gODExOlxcdFxcdGlmIChvcGVuX21zZy1cXHUwMDNlYWNjZXNzX21vZGUgIT0gUk5CRF9BQ0NFU1NfUk8pIHtcXG4gODEyOlxcdFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnNydl9kZXYtXFx1MDAzZWxvY2spO1xcbiA4MTM6XFx0XFx0XFx0c3J2X2Rldi1cXHUwMDNlb3Blbl93cml0ZV9jbnQtLTtcXG4gODE0OlxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2c3J2X2Rldi1cXHUwMDNlbG9jayk7XFxuIDgxNTpcXHRcXHR9XFxuIDgxNjpcXHRcXHRybmJkX3B1dF9zcnZfZGV2KHNydl9kZXYpO1xcbiA4MTc6XFx0YmxrZGV2X3B1dDpcXG4gODE4OlxcdFxcdGZwdXQoYmRldl9maWxlKTtcXG4gODE5OlxcdGZyZWVfcGF0aDpcXG4gODIwOlxcdFxcdGtmcmVlKGZ1bGxfcGF0aCk7XFxuIDgyMTpcXHRyZWplY3Q6XFxuIDgyMjpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnNydl9zZXNzLVxcdTAwM2Vsb2NrKTtcXG4gODIzOlxcdFxcdHJldHVybiByZXQ7XFxuIDgyNDpcXHR9XFxuIDgyNTpcXHRcXG4gODI2OlxcdHN0YXRpYyBzdHJ1Y3QgcnRyc19zcnZfY3R4ICpydHJzX2N0eDtcXG4gODI3OlxcdFxcbiA4Mjg6XFx0c3RhdGljIHN0cnVjdCBydHJzX3Nydl9vcHMgcnRyc19vcHM7XFxuIDgyOTpcXHRzdGF0aWMgaW50IF9faW5pdCBybmJkX3Nydl9pbml0X21vZHVsZSh2b2lkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxODozODoxNS40MDY2MjExNTVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk2MTgyMDc0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlc291cmNlIENsZWFudXAgUGF0aCoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBgZnJlZV9wYXRoYCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBmdW5jdGlvbjogaXQgZnJlZXMgYGZ1bGxfcGF0aGAgYW5kIHRoZW4gcmV0dXJucyBgcmV0YC4gQnV0IHdhaXQsIHNvbWV0aGluZyBzZWVtcyBvZmYuIElmIHRoZSBleGVjdXRpb24ganVtcHMgZGlyZWN0bHkgdG8gYGZyZWVfcGF0aGAsIGl0IG1lYW5zIHRoZSBjb2RlIGlzIHNraXBwaW5nIHRoZSBjYWxscyB0byBgZnJlZV9zcnZfc2Vzc19kZXZgLCBgc3J2X2Rldl9wdXRgLCBhbmQgYGJsa2Rldl9wdXRgLlxuXG5UaGUgcXVlc3Rpb24gdGhhdCBpbW1lZGlhdGVseSBwb3BzIGludG8gbXkgaGVhZCBpcyAqd2h5Kj8gV2h5IGFyZSB0aG9zZSBjbGVhbnVwIGZ1bmN0aW9ucyBiZWluZyBieXBhc3NlZD8gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoaXMgcmVsYXRlcyB0byB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGtvYmplY3Qgd2l0aGluIGBybmJkX3Nydl9jcmVhdGVfZGV2X3Nlc3Npb25fc3lzZnNgLiBJZiB0aGF0IGluaXRpYWxpemF0aW9uIGZhaWxzLCBhIGBrb2JqZWN0X3B1dGAgKnNob3VsZCogYmUgY2FsbGVkLCBidXQgaXMgdGhhdCBoYW5kbGVkIGludGVybmFsbHkgd2l0aGluIGBybmJkX3Nydl9jcmVhdGVfZGV2X3Nlc3Npb25fc3lzZnNgIG9yIGJ5IHRoZSBjYWxsaW5nIGZ1bmN0aW9uPyBJJ20gZ29pbmcgdG8gcXVpY2tseSB2ZXJpZnkgaG93IGBybmJkX3Nydl9jcmVhdGVfZGV2X3Nlc3Npb25fc3lzZnNgIGhhbmRsZXMgZmFpbHVyZXMgdG8gY2xlYXIgdXAgdGhlIGNvbmZ1c2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY5MCwiT3V0cHV0VG9rZW5zIjo1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE4OjM4OjE5LjM2ODQ0Mzc3OFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMyMTQ1ODE1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJybmJkX3Nydl9jcmVhdGVfZGV2X3Nlc3Npb25fc3lzZnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LXN5c2ZzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LXN5c2ZzLmM9MTg3PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIHJuYmRfc3J2X3Nlc3NfZGV2X2t0eXBlID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LXN5c2ZzLmMtMTkxLVxcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi1zeXNmcy5jOjE5MjppbnQgcm5iZF9zcnZfY3JlYXRlX2Rldl9zZXNzaW9uX3N5c2ZzKHN0cnVjdCBybmJkX3Nydl9zZXNzX2RldiAqc2Vzc19kZXYpXFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LXN5c2ZzLmMtMTkzLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTg6Mzg6MjAuNjg5OTA3ODc5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NjY1NDg1MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IERpdmluZyBpbnRvIGBybmJkX3Nydl9jcmVhdGVfZGV2X3Nlc3Npb25fc3lzZnNgKipcblxuUmlnaHQsIGxldCdzIGRpc3NlY3QgYHJuYmRfc3J2X2NyZWF0ZV9kZXZfc2Vzc2lvbl9zeXNmc2AuIEknbSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIHRoaXMgZnVuY3Rpb24ncyBzY29wZSwgZ2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uLiBUaGUgXCJybmJkXCIgcHJlZml4IG9idmlvdXNseSB0aWVzIGl0IHRvIHRoZSBSZWxpYWJsZSBOZXR3b3JrIEJsb2NrIERldmljZSBkcml2ZXIsIGFuZCBcInNydlwiIHN1Z2dlc3RzIHNlcnZlci1zaWRlIGZ1bmN0aW9uYWxpdHkuIFwiY3JlYXRlX2Rldl9zZXNzaW9uXCIgaXMgYSBmYWlybHkgY2xlYXIgaW5kaWNhdG9yOyB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGNyZWF0aW9uIG9mIGEgZGV2aWNlIHNlc3Npb24sIGxpa2VseSB0aWVkIHRvIGEgc3BlY2lmaWMgYmxvY2sgZGV2aWNlIGFic3RyYWN0aW9uLiBUaGUgXCJzeXNmc1wiIHN1ZmZpeCBpcyB0aGUga2V5IGdpdmVhd2F5IGhlcmUg4oCTIGl0IGltcGxpZXMgYSBoZWF2eSByZWxpYW5jZSBvbiB0aGUgc3lzZnMgZmlsZXN5c3RlbSBpbnRlcmZhY2UgZm9yIGNvbmZpZ3VyYXRpb24sIG1hbmFnZW1lbnQsIG9yIHBlcmhhcHMgZXZlbiBjb250cm9sIG9mIHRoaXMgc2Vzc2lvbi5cblxuSSdtIGFscmVhZHkgbWVudGFsbHkgY2hhcnRpbmcgb3V0IHRoZSBwb3RlbnRpYWwgYXJlYXMgb2YgaW50ZXJlc3QuIEknbGwgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQ6XG5cbiogICAqKkRldmljZSBDb250ZXh0OioqIEhvdyB0aGUgYmxvY2sgZGV2aWNlIGluZm9ybWF0aW9uIGlzIHBhc3NlZCBpbiwgcHJlc3VtYWJseSBlaXRoZXIgdGhyb3VnaCBhIHN0cnVjdHVyZSBvciBwZXJoYXBzIGJ5IHNvbWUgZ2xvYmFsIGNvbnRleHQuIFdlJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBvbiBob3cgdGhlIGRldmljZSBpcyBzZWxlY3RlZCAoYnkgZGV2aWNlIG5hbWUsIHBhdGgsIFVVSUQsIGV0Yy4pLlxuKiAgICoqU2Vzc2lvbiBTdHJ1Y3R1cmU6KiogV2hhdCBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGFsbG9jYXRlZCBvciBpbml0aWFsaXplZCBoZXJlPyBXZSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdywgaG93IHRoZSBpbmZvcm1hdGlvbiBpcyBiZWluZyBnYXRoZXJlZCwgd2hpY2ggbWlnaHQgYmUgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBkZXZpY2Ugc2Vzc2lvbiBpcyBzdHJ1Y3R1cmVkLlxuKiAgICoqc3lzZnMgSW50ZWdyYXRpb246KiogVGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIhIEkgZXhwZWN0IGEgbG90IG9mIGludGVyYWN0aW9uIHdpdGggc3lzZnMgZW50cmllcy4gSSdsbCBiZSBsb29raW5nIGZvciBob3cgdGhlIGZ1bmN0aW9uIGNyZWF0ZXMgb3IgcmVnaXN0ZXJzIHN5c2ZzIGZpbGVzIGFuZCBkaXJlY3Rvcmllcy4gVGhlIGtleSBlbGVtZW50cyB3aWxsIGJlIHRoZSBhdHRyaWJ1dGVzLCBhY2Nlc3MgcGVybWlzc2lvbnMsIGFuZCB3aGF0IGtlcm5lbCBvYmplY3RzIHRoZXNlIGVudHJpZXMgYXJlIGV4cG9zaW5nIHRvIHVzZXIgc3BhY2UuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGJhc2ljIGRldmljZSBhdHRyaWJ1dGVzIChsaWtlIHNpemUpLCBvciBtb3JlIGNvbXBsZXggY29udHJvbCBpbnRlcmZhY2VzIChsaWtlIHJlYWQvd3JpdGUgdGltZW91dHMgb3IgY2FjaGluZyBjb25maWd1cmF0aW9ucyk/IFdlIHdpbGwgbmVlZCB0byBpbnZlc3RpZ2F0ZSBhbGwgdGhlIHN5c2ZzIGNhbGxzIHRvIGRldGVybWluZSB0aGVpciBvdmVyYWxsIGZ1bmN0aW9uLlxuKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogR2l2ZW4gdGhhdCBzeXNmcyBvcGVyYXRpb25zIGNhbiBiZSBwcm9uZSB0byBlcnJvcnMsIEknbSBleHBlY3Rpbmcgc29tZSByb2J1c3QgZXJyb3IgaGFuZGxpbmcuIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgcmV0dXJuIGNvZGVzIGFuZCBlcnJvciBwcm9wYWdhdGlvbi5cbiogICAqKkNvbmN1cnJlbmN5IENvbmNlcm5zOioqIElzIHRoZXJlIGFueXRoaW5nIGhlcmUgdGhhdCBzdWdnZXN0cyBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzPyBJIGV4cGVjdCB0aGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMuIEFyZSBsb2NrcyBlbXBsb3llZCBvciBvdGhlciBtZWNoYW5pc21zIHRvIHNhZmVndWFyZCBhZ2FpbnN0IHJhY2UgY29uZGl0aW9ucz8gR2l2ZW4gdGhhdCBgc3lzZnNgIGNhbGxzIGNhbiBiZSBibG9ja2luZyBvcGVyYXRpb25zLCBob3cgaXMgdGhlIHNlc3Npb24gbGlmZXRpbWUgbWFuYWdlZD9cblxuSW4gc2hvcnQsIEknbSBhbnRpY2lwYXRpbmcgYSBkZWVwIGRpdmUgaW50byB0aGUgc2VydmVyLXNpZGUgZXN0YWJsaXNobWVudCBhbmQgc3lzZnMgcmVwcmVzZW50YXRpb24gb2YgYW4gUk5CRCBkZXZpY2Ugc2Vzc2lvbi4gSXQnbGwgYmUgaW50ZXJlc3RpbmcgdG8gc2VlIGhvdyB0aGUga2VybmVsIGV4cG9zZXMgdGhpcyBjb250cm9sIHBsYW5lIHRvIHVzZXIgc3BhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNTcsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxODozODoyNS4zNTY0NTgxMzlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ1NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LXN5c2ZzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTkyLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTkyOlxcdGludCBybmJkX3Nydl9jcmVhdGVfZGV2X3Nlc3Npb25fc3lzZnMoc3RydWN0IHJuYmRfc3J2X3Nlc3NfZGV2ICpzZXNzX2RldilcXG4gMTkzOlxcdHtcXG4gMTk0OlxcdFxcdGludCByZXQ7XFxuIDE5NTpcXHRcXG4gMTk2OlxcdFxcdHJldCA9IGtvYmplY3RfaW5pdF9hbmRfYWRkKFxcdTAwMjZzZXNzX2Rldi1cXHUwMDNla29iaiwgXFx1MDAyNnJuYmRfc3J2X3Nlc3NfZGV2X2t0eXBlLFxcbiAxOTc6XFx0XFx0XFx0XFx0XFx0ICAgc2Vzc19kZXYtXFx1MDAzZWRldi1cXHUwMDNlZGV2X3Nlc3Npb25zX2tvYmosIFxcXCIlc1xcXCIsXFxuIDE5ODpcXHRcXHRcXHRcXHRcXHQgICBzZXNzX2Rldi1cXHUwMDNlc2Vzcy1cXHUwMDNlc2Vzc25hbWUpO1xcbiAxOTk6XFx0XFx0aWYgKHJldCkge1xcbiAyMDA6XFx0XFx0XFx0a29iamVjdF9wdXQoXFx1MDAyNnNlc3NfZGV2LVxcdTAwM2Vrb2JqKTtcXG4gMjAxOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDIwMjpcXHRcXHR9XFxuIDIwMzpcXHRcXG4gMjA0OlxcdFxcdHJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cChcXHUwMDI2c2Vzc19kZXYtXFx1MDAzZWtvYmosXFxuIDIwNTpcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNnJuYmRfc3J2X2RlZmF1bHRfZGV2X3Nlc3Npb25fYXR0cl9ncm91cCk7XFxuIDIwNjpcXHRcXHRpZiAocmV0KSB7XFxuIDIwNzpcXHRcXHRcXHRrb2JqZWN0X2RlbChcXHUwMDI2c2Vzc19kZXYtXFx1MDAzZWtvYmopO1xcbiAyMDg6XFx0XFx0XFx0a29iamVjdF9wdXQoXFx1MDAyNnNlc3NfZGV2LVxcdTAwM2Vrb2JqKTtcXG4gMjA5OlxcdFxcdH1cXG4gMjEwOlxcdFxcbiAyMTE6XFx0XFx0cmV0dXJuIHJldDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTg6Mzg6MjUuMzU2NTM0MTU5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzOTU4MjE5MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIERlZXAgaW50byBEZXZpY2UgU2Vzc2lvbiBDcmVhdGlvbiBhbmQgUmVzb3VyY2UgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEkgc2VlIGBybmJkX3Nydl9jcmVhdGVfZGV2X3Nlc3Npb25fc3lzZnNgIGhhbmRsZXMgZmFpbHVyZSBieSBjYWxsaW5nIGBrb2JqZWN0X3B1dChcdTAwMjZzZXNzX2Rldi1cdTAwM2Vrb2JqKWAuIFRoYXQncyBnb29kLiBJdCBzdWdnZXN0cyB3ZSdyZSBsaWtlbHkgbWFuYWdpbmcgdGhlIGRldmljZSBzZXNzaW9uJ3MgbGlmZWN5Y2xlLCBhbmQgc3BlY2lmaWNhbGx5LCBpdHMga2VybmVsIG9iamVjdCwgd2l0aCBzb21lIGNhcmUuIE5vdywgdGhlIGtleSBpcyB0byB1bmRlcnN0YW5kICpob3cqIHRoYXQgb2JqZWN0IGlzIG1hbmFnZWQuIFRoZSB1c2Ugb2YgYGtvYmplY3RfcHV0YCBoaW50cyBhdCBhIHJlZmVyZW5jZSBjb3VudGluZyBzY2hlbWUsIHdoaWNoIGlzIHByZXR0eSBzdGFuZGFyZCBpbiB0aGUga2VybmVsLiBCdXQsIGJlZm9yZSBJIGdldCBhaGVhZCBvZiBteXNlbGYsIEkgd2FudCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlc291cmNlIHJlbGVhc2UgcHJvY2Vzcy4gTGV0J3MgbWFrZSBzdXJlIHRoYXQgYHJuYmRfc3J2X3Nlc3NfZGV2X2t0eXBlYCBkZWZpbmVzIGEgcHJvcGVyIHJlbGVhc2UgZnVuY3Rpb24uIFRoYXQncyB0aGUgdml0YWwgcGllY2UgdG8gdmVyaWZ5IHRoZSBwcm9wZXIgY2xlYW51cCBvZiB0aGlzIHBhcnRpY3VsYXIgb2JqZWN0LiBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGVhc2UgZnVuY3Rpb24gdG8ga25vdyBpZiBpdHMgcmVmZXJlbmNlIGNvdW50aW5nIGlzIHdvcmtpbmcgY29ycmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjE4LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxODozODoyOC43NTIzNzIzNzVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg1NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LXN5c2ZzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTcwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTcwOlxcdHZvaWQgcm5iZF9zcnZfZGVzdHJveV9kZXZfc2Vzc2lvbl9zeXNmcyhzdHJ1Y3Qgcm5iZF9zcnZfc2Vzc19kZXYgKnNlc3NfZGV2KVxcbiAxNzE6XFx0e1xcbiAxNzI6XFx0XFx0c3lzZnNfcmVtb3ZlX2dyb3VwKFxcdTAwMjZzZXNzX2Rldi1cXHUwMDNla29iaixcXG4gMTczOlxcdFxcdFxcdFxcdCAgIFxcdTAwMjZybmJkX3Nydl9kZWZhdWx0X2Rldl9zZXNzaW9uX2F0dHJfZ3JvdXApO1xcbiAxNzQ6XFx0XFxuIDE3NTpcXHRcXHRrb2JqZWN0X2RlbChcXHUwMDI2c2Vzc19kZXYtXFx1MDAzZWtvYmopO1xcbiAxNzY6XFx0XFx0a29iamVjdF9wdXQoXFx1MDAyNnNlc3NfZGV2LVxcdTAwM2Vrb2JqKTtcXG4gMTc3OlxcdH1cXG4gMTc4OlxcdFxcbiAxNzk6XFx0c3RhdGljIHZvaWQgcm5iZF9zcnZfc2Vzc19kZXZfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcXG4gMTgwOlxcdHtcXG4gMTgxOlxcdFxcdHN0cnVjdCBybmJkX3Nydl9zZXNzX2RldiAqc2Vzc19kZXY7XFxuIDE4MjpcXHRcXG4gMTgzOlxcdFxcdHNlc3NfZGV2ID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBybmJkX3Nydl9zZXNzX2Rldiwga29iaik7XFxuIDE4NDpcXHRcXHRybmJkX2Rlc3Ryb3lfc2Vzc19kZXYoc2Vzc19kZXYsIHNlc3NfZGV2LVxcdTAwM2VrZWVwX2lkKTtcXG4gMTg1OlxcdH1cXG4gMTg2OlxcdFxcbiAxODc6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgcm5iZF9zcnZfc2Vzc19kZXZfa3R5cGUgPSB7XFxuIDE4ODpcXHRcXHQuc3lzZnNfb3BzXFx0PSBcXHUwMDI2a29ial9zeXNmc19vcHMsXFxuIDE4OTpcXHRcXHQucmVsZWFzZVxcdD0gcm5iZF9zcnZfc2Vzc19kZXZfcmVsZWFzZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTg6Mzg6MjguNzUyNDUyNDA1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5OTY4MzY5NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgdGhlIFNlc3Npb24gUmVsZWFzZSBQcm9jZXNzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgdGhlc2UgbmV0d29yayBibG9jayBkZXZpY2Ugc2Vzc2lvbnMgYXJlIGhhbmRsZWQuIEkgc2VlIHRoYXQgYHJuYmRfc3J2X3Nlc3NfZGV2X3JlbGVhc2VgIGlzIHRoZSBrZXkgZnVuY3Rpb24gY2FsbGVkIHdoZW4gYSBzZXNzaW9uIGlzIGJlaW5nIHJlbGVhc2VkLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgd2hhdCdzIGhhcHBlbmluZyAqaW5zaWRlKiB0aGF0IGZ1bmN0aW9uLCB0byBmaWd1cmUgb3V0IGhvdyBpdCdzIGFjdHVhbGx5IGNsZWFuaW5nIHVwIHRoZSByZXNvdXJjZXMuIFJpZ2h0LCBsZXQncyBsb29rIGF0IGBybmJkX2Rlc3Ryb3lfc2Vzc19kZXZgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGUgc2Vzc2lvbiBkZXZpY2UgaXMgZGVzdHJveWVkIHRvIGVuc3VyZSBubyBsZWFrcyBvciBkYW5nbGluZyBwb2ludGVycy4gVGhpcyBmZWVscyBsaWtlIGl0J3MgdGhlIGNvcmUgb2YgdGhlIGNsZWFudXAgcGF0aCwgYW5kIHVuZGVyc3RhbmRpbmcgdGhlIGludGVybmFscyBvZiBgcm5iZF9kZXN0cm95X3Nlc3NfZGV2YCBpcyBjcml0aWNhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTkxMiwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTg6Mzg6MzEuNzQ5MjkxMDkxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjQyNjU4NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicm5iZF9kZXN0cm95X3Nlc3NfZGV2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jPTIxND1zdGF0aWMgdm9pZCBybmJkX3B1dF9zcnZfZGV2KHN0cnVjdCBybmJkX3Nydl9kZXYgKmRldilcXG4tLVxcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jLTIxOC1cXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYzoyMTk6dm9pZCBybmJkX2Rlc3Ryb3lfc2Vzc19kZXYoc3RydWN0IHJuYmRfc3J2X3Nlc3NfZGV2ICpzZXNzX2RldiwgYm9vbCBrZWVwX2lkKVxcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jLTIyMC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE4OjM4OjMyLjExMzU2MTM2M1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDcwMDM5ODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gYHJuYmRfZGVzdHJveV9zZXNzX2RldmAsIGJyb2tlbiBkb3duIGFzIGlmIEknbSBuYXZpZ2F0aW5nIHRoZSBjb2RlIG15c2VsZjpcblxuKipVbmRlcnN0YW5kaW5nIHRoZSBGdW5jdGlvbjogcm5iZF9kZXN0cm95X3Nlc3NfZGV2KipcblxuQWxyaWdodCwgdGhlIG5hbWUgdGVsbHMgbWUgZXhhY3RseSB3aGF0IHRoaXMgZnVuY3Rpb24gKnNob3VsZCogZG86IGRlc3Ryb3kgYSBzZXNzaW9uIGFuZCBpdHMgYXNzb2NpYXRlZCBkZXZpY2UgaW4gYW4gUkRCIChSZW1vdGUgQmxvY2sgRGV2aWNlKSBjb250ZXh0LiBUaGF0IGltcGxpZXMgY2xlYW51cCwgcmVzb3VyY2UgcmVsZWFzZSwgYW5kIHBvdGVudGlhbGx5IGRpc2Nvbm5lY3RpbmcgZnJvbSBhIHJlbW90ZSBzdG9yYWdlIGVuZHBvaW50LiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBvcGVyYXRpb25zIHRoYXQgYXJlIGNyaXRpY2FsIGZvciBkYXRhIGludGVncml0eSBhbmQgc3lzdGVtIHN0YWJpbGl0eS4gTGV0J3Mgc2VlIGhvdyBpdCBnb2VzIGFib3V0IHRoaXMgdGFzay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQ6IFdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/IFdoYXQgcmVzb3VyY2VzIGFyZSBiZWluZyBoYW5kbGVkPyBBbmQsIG9mIGNvdXJzZSwgd2hhdCdzIHRoZSBlcnJvciBoYW5kbGluZyBsaWtlPyBUaGlzIGlzIGFsd2F5cyBhIGNyaXRpY2FsIHBvaW50IGluIHRoZXNlIHR5cGVzIG9mIGZ1bmN0aW9ucywgYXMgYmFkIGVycm9yIGhhbmRsaW5nIGNhbiBsZWFkIHRvIGFsbCBzb3J0cyBvZiBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzE0LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTg6Mzg6MzUuMTgzNjAyOTQzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTksXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMTk6XFx0dm9pZCBybmJkX2Rlc3Ryb3lfc2Vzc19kZXYoc3RydWN0IHJuYmRfc3J2X3Nlc3NfZGV2ICpzZXNzX2RldiwgYm9vbCBrZWVwX2lkKVxcbiAyMjA6XFx0e1xcbiAyMjE6XFx0XFx0REVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0soZGMpO1xcbiAyMjI6XFx0XFxuIDIyMzpcXHRcXHRpZiAoa2VlcF9pZClcXG4gMjI0OlxcdFxcdFxcdC8qIGZyZWUgdGhlIHJlc291cmNlcyBmb3IgdGhlIGlkIGJ1dCBkb24ndCAgKi9cXG4gMjI1OlxcdFxcdFxcdC8qIGFsbG93IHRvIHJlLXVzZSB0aGUgaWQgaXRzZWxmIGJlY2F1c2UgaXQgKi9cXG4gMjI2OlxcdFxcdFxcdC8qIGlzIHN0aWxsIHVzZWQgYnkgdGhlIGNsaWVudCAgICAgICAgICAgICAgKi9cXG4gMjI3OlxcdFxcdFxcdHhhX2NtcHhjaGcoXFx1MDAyNnNlc3NfZGV2LVxcdTAwM2VzZXNzLVxcdTAwM2VpbmRleF9pZHIsIHNlc3NfZGV2LVxcdTAwM2VkZXZpY2VfaWQsXFxuIDIyODpcXHRcXHRcXHRcXHQgICBzZXNzX2RldiwgTlVMTCwgMCk7XFxuIDIyOTpcXHRcXHRlbHNlXFxuIDIzMDpcXHRcXHRcXHR4YV9lcmFzZShcXHUwMDI2c2Vzc19kZXYtXFx1MDAzZXNlc3MtXFx1MDAzZWluZGV4X2lkciwgc2Vzc19kZXYtXFx1MDAzZWRldmljZV9pZCk7XFxuIDIzMTpcXHRcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4gMjMyOlxcdFxcbiAyMzM6XFx0XFx0c2Vzc19kZXYtXFx1MDAzZWRlc3Ryb3lfY29tcCA9IFxcdTAwMjZkYztcXG4gMjM0OlxcdFxcdHJuYmRfcHV0X3Nlc3NfZGV2KHNlc3NfZGV2KTtcXG4gMjM1OlxcdFxcdHdhaXRfZm9yX2NvbXBsZXRpb24oXFx1MDAyNmRjKTsgLyogd2FpdCBmb3IgaW5mbGlnaHRzIHRvIGRyb3AgdG8gemVybyAqL1xcbiAyMzY6XFx0XFxuIDIzNzpcXHRcXHRmcHV0KHNlc3NfZGV2LVxcdTAwM2ViZGV2X2ZpbGUpO1xcbiAyMzg6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2c2Vzc19kZXYtXFx1MDAzZWRldi1cXHUwMDNlbG9jayk7XFxuIDIzOTpcXHRcXHRsaXN0X2RlbChcXHUwMDI2c2Vzc19kZXYtXFx1MDAzZWRldl9saXN0KTtcXG4gMjQwOlxcdFxcdGlmICghc2Vzc19kZXYtXFx1MDAzZXJlYWRvbmx5KVxcbiAyNDE6XFx0XFx0XFx0c2Vzc19kZXYtXFx1MDAzZWRldi1cXHUwMDNlb3Blbl93cml0ZV9jbnQtLTtcXG4gMjQyOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2c2Vzc19kZXYtXFx1MDAzZWRldi1cXHUwMDNlbG9jayk7XFxuIDI0MzpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTg6Mzg6MzUuMTgzNzA1MzEzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMzk4MDcwNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uY2VybiBSZWdhcmRpbmcgYHJuYmRfZGVzdHJveV9zZXNzX2RldmAgYW5kIExpc3QgQ29ycnVwdGlvbioqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIFRoaXMgYHJuYmRfZGVzdHJveV9zZXNzX2RldmAgZnVuY3Rpb27igKYgaXQncyBjYWxsaW5nIGBsaXN0X2RlbChcdTAwMjZzZXNzX2Rldi1cdTAwM2VkZXZfbGlzdClgLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGZsYWdzIGEgcG90ZW50aWFsIGlzc3VlIGhlcmUuIElmLCBhbmQgdGhhdCdzIGEgKmJpZyogaWYsIHRoZSBgc2Vzc19kZXZgIHN0cnVjdHVyZSB3YXMgKm5ldmVyKiBhZGRlZCB0byB0aGUgYHNlc3NfZGV2LVx1MDAzZWRldi1cdTAwM2VzZXNzX2Rldl9saXN0YCBiZWZvcmUgYHJuYmRfc3J2X2NyZWF0ZV9kZXZfc2Vzc2lvbl9zeXNmc2AgZmFpbGVkLCB0aGVuIHRoYXQgYGxpc3RfZGVsYCBjYWxsIGlzIGdvaW5nIHRvIGNhdXNlIGEgY3Jhc2gsIG9yIGF0IHRoZSB2ZXJ5IGxlYXN0LCBjb3JydXB0IHRoZSBsaXN0LiBUaGUgYGRldl9saXN0YCB3b3VsZCBiZSBlaXRoZXIgdW5pbml0aWFsaXplZCBvciBhbiBlbXB0eSBjb250YWluZXIsIGFuZCBhdHRlbXB0aW5nIHRvIHJlbW92ZSBhbiBlbGVtZW50IHRoYXQgaXNuJ3QgcGFydCBvZiBpdCBpcyBhIGRpc2FzdGVyIHdhaXRpbmcgdG8gaGFwcGVuLiBXZSd2ZSBzZWVuIHRoaXMgcGF0dGVybiBiZWZvcmUsIGFuZCBJJ20gZ2V0dGluZyBhIGJhZCBmZWVsaW5nLiBSaWdodCwgdGltZSB0byBkaWcgZGVlcGVyLiBXaGVyZSBleGFjdGx5IGlzIGBkZXZfbGlzdGAgaW5pdGlhbGl6ZWQ/IE5lZWQgdG8gdHJhY2UgYmFjayBhbmQgdmVyaWZ5IHRoYXQgaXQncyBiZWluZyBwcm9wZXJseSBtYW5hZ2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTAwMywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE4OjM4OjM5LjMyMzUxNDI0MloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2MDM2MjY3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXZfbGlzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYz02Nj1zdGF0aWMgTElTVF9IRUFEKHNlc3NfbGlzdCk7XFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM6Njc6c3RhdGljIExJU1RfSEVBRChkZXZfbGlzdCk7XFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmMtNjgtXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYz0xOTI9c3RhdGljIHZvaWQgZGVzdHJveV9kZXZpY2Uoc3RydWN0IGtyZWYgKmtyZWYpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy0xOTUtXFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM6MTk2OlxcdFdBUk5fT05DRSghbGlzdF9lbXB0eShcXHUwMDI2ZGV2LVxcdTAwM2VzZXNzX2Rldl9saXN0KSxcXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy0xOTctXFx0XFx0ICBcXFwiRGV2aWNlICVzIGlzIGJlaW5nIGRlc3Ryb3llZCBidXQgc3RpbGwgaW4gdXNlIVxcXFxuXFxcIixcXG4tLVxcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jPTIxOT12b2lkIHJuYmRfZGVzdHJveV9zZXNzX2RldihzdHJ1Y3Qgcm5iZF9zcnZfc2Vzc19kZXYgKnNlc3NfZGV2LCBib29sIGtlZXBfaWQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy0yMzgtXFx0bXV0ZXhfbG9jayhcXHUwMDI2c2Vzc19kZXYtXFx1MDAzZWRldi1cXHUwMDNlbG9jayk7XFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM6MjM5OlxcdGxpc3RfZGVsKFxcdTAwMjZzZXNzX2Rldi1cXHUwMDNlZGV2X2xpc3QpO1xcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jLTI0MC1cXHRpZiAoIXNlc3NfZGV2LVxcdTAwM2VyZWFkb25seSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jPTQ0MD1zdGF0aWMgc3RydWN0IHJuYmRfc3J2X2RldiAqcm5iZF9zcnZfaW5pdF9zcnZfZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy00NDktXFx0a3JlZl9pbml0KFxcdTAwMjZkZXYtXFx1MDAzZWtyZWYpO1xcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jOjQ1MDpcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2ZGV2LVxcdTAwM2VzZXNzX2Rldl9saXN0KTtcXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy00NTEtXFx0bXV0ZXhfaW5pdChcXHUwMDI2ZGV2LVxcdTAwM2Vsb2NrKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jPTQ1Nz1ybmJkX3Nydl9maW5kX29yX2FkZF9zcnZfZGV2KHN0cnVjdCBybmJkX3Nydl9kZXYgKm5ld19kZXYpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy00NjEtXFx0c3Bpbl9sb2NrKFxcdTAwMjZkZXZfbG9jayk7XFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM6NDYyOlxcdGxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCBcXHUwMDI2ZGV2X2xpc3QsIGxpc3QpIHtcXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy00NjMtXFx0XFx0aWYgKCFzdHJuY21wKGRldi1cXHUwMDNlbmFtZSwgbmV3X2Rldi1cXHUwMDNlbmFtZSwgc2l6ZW9mKGRldi1cXHUwMDNlbmFtZSkpKSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy00NzMtXFx0fVxcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jOjQ3NDpcXHRsaXN0X2FkZChcXHUwMDI2bmV3X2Rldi1cXHUwMDNlbGlzdCwgXFx1MDAyNmRldl9saXN0KTtcXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy00NzUtXFx0c3Bpbl91bmxvY2soXFx1MDAyNmRldl9sb2NrKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jPTY5MT1zdGF0aWMgaW50IHByb2Nlc3NfbXNnX29wZW4oc3RydWN0IHJuYmRfc3J2X3Nlc3Npb24gKnNydl9zZXNzLFxcbi0tXFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmMtNzg2LVxcdCAqL1xcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jOjc4NzpcXHRsaXN0X2FkZChcXHUwMDI2c3J2X3Nlc3NfZGV2LVxcdTAwM2VkZXZfbGlzdCwgXFx1MDAyNnNydl9kZXYtXFx1MDAzZXNlc3NfZGV2X2xpc3QpO1xcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jLTc4OC1cXHRtdXRleF91bmxvY2soXFx1MDAyNnNydl9kZXYtXFx1MDAzZWxvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxODozODo0MC41ODM4ODI0NThaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ0OTkyNDM5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiBgc3J2X3Nlc3NfZGV2YCBBbGxvY2F0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kIG15IGZpcnN0IHRob3VnaHQgaXMsIGhhbmcgb24gYSBzZWNvbmQuIEkgc2VlIHRoYXQgYHNydl9zZXNzX2RldmAsIHRoYXQgY3J1Y2lhbCBzdHJ1Y3R1cmUsIGlzIGJlaW5nIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY2AgaW5zaWRlIGBwcm9jZXNzX21zZ19vcGVuYC4gQWxyaWdodCwgdGhhdCdzIGltcG9ydGFudCB0byByZW1lbWJlci4gYGt6YWxsb2NgIGlzIHRoZSBrZXl3b3JkIGhlcmUgLSB6ZXJvLWluaXRpYWxpemVkIGFsbG9jYXRpb24uIFRoYXQgbWVhbnMgd2UncmUgc3RhcnRpbmcgd2l0aCBhIGNsZWFuIHNsYXRlLCBldmVyeXRoaW5nIGluIHRoYXQgYWxsb2NhdGVkIG1lbW9yeSBpcyBndWFyYW50ZWVkIHRvIGJlIHplcm8uIE5vIGdhcmJhZ2UgdmFsdWVzLiBUaGlzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgcHJlZGljdGFibGUgYmVoYXZpb3IsIGVzcGVjaWFsbHkgaWYgc29tZSBwYXJ0cyBvZiB0aGUgc3RydWN0dXJlIGFyZSBpbnRlbmRlZCB0byBzdG9yZSBmbGFncywgY291bnRlcnMsIG9yIHBvaW50ZXJzIHRoYXQgd2lsbCBiZSBjaGVja2VkIGltbWVkaWF0ZWx5IGFmdGVyIGFsbG9jYXRpb24uIFRoaXMgaXMgYSB2ZXJ5IGJhc2ljIGJ1dCB2ZXJ5IGltcG9ydGFudCB0aGluZyB0byBrbm93LCBhbmQgSSBuZWVkIHRvIGtlZXAgaXQgaW4gbWluZCBhcyBJIGxvb2sgYXQgd2hhdCBmb2xsb3dzIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzI4LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTg6Mzg6NDUuMDMzODA4NjA1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3NzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcxMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDcxMDpcXHRcXG4gNzExOlxcdFxcdHNydl9zZXNzX2RldiA9IGZpbmRfc3J2X3Nlc3NfZGV2KHNydl9zZXNzLCBvcGVuX21zZy1cXHUwMDNlZGV2X25hbWUpO1xcbiA3MTI6XFx0XFx0aWYgKHNydl9zZXNzX2RldilcXG4gNzEzOlxcdFxcdFxcdGdvdG8gZmlsbF9yZXNwb25zZTtcXG4gNzE0OlxcdFxcbiA3MTU6XFx0XFx0aWYgKChzdHJsZW4oZGV2X3NlYXJjaF9wYXRoKSArIHN0cmxlbihvcGVuX21zZy1cXHUwMDNlZGV2X25hbWUpKVxcbiA3MTY6XFx0XFx0ICAgIFxcdTAwM2U9IFBBVEhfTUFYKSB7XFxuIDcxNzpcXHRcXHRcXHRwcl9lcnIoXFxcIk9wZW5pbmcgZGV2aWNlIGZvciBzZXNzaW9uICVzIGZhaWxlZCwgZGV2aWNlIHBhdGggdG9vIGxvbmcuICclcy8lcycgaXMgbG9uZ2VyIHRoYW4gUEFUSF9NQVggKCVkKVxcXFxuXFxcIixcXG4gNzE4OlxcdFxcdFxcdCAgICAgICBzcnZfc2Vzcy1cXHUwMDNlc2Vzc25hbWUsIGRldl9zZWFyY2hfcGF0aCwgb3Blbl9tc2ctXFx1MDAzZWRldl9uYW1lLFxcbiA3MTk6XFx0XFx0XFx0ICAgICAgIFBBVEhfTUFYKTtcXG4gNzIwOlxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuIDcyMTpcXHRcXHRcXHRnb3RvIHJlamVjdDtcXG4gNzIyOlxcdFxcdH1cXG4gNzIzOlxcdFxcdGlmIChzdHJzdHIob3Blbl9tc2ctXFx1MDAzZWRldl9uYW1lLCBcXFwiLi5cXFwiKSkge1xcbiA3MjQ6XFx0XFx0XFx0cHJfZXJyKFxcXCJPcGVuaW5nIGRldmljZSBmb3Igc2Vzc2lvbiAlcyBmYWlsZWQsIGRldmljZSBwYXRoICVzIGNvbnRhaW5zIHJlbGF0aXZlIHBhdGggLi5cXFxcblxcXCIsXFxuIDcyNTpcXHRcXHRcXHQgICAgICAgc3J2X3Nlc3MtXFx1MDAzZXNlc3NuYW1lLCBvcGVuX21zZy1cXHUwMDNlZGV2X25hbWUpO1xcbiA3MjY6XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4gNzI3OlxcdFxcdFxcdGdvdG8gcmVqZWN0O1xcbiA3Mjg6XFx0XFx0fVxcbiA3Mjk6XFx0XFx0ZnVsbF9wYXRoID0gcm5iZF9zcnZfZ2V0X2Z1bGxfcGF0aChzcnZfc2Vzcywgb3Blbl9tc2ctXFx1MDAzZWRldl9uYW1lKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTg6Mzg6NDUuMDMzODk3NzA1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyOTk3MTQ3ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIEknbSByZWFkeS4gTGV0J3Mgc2VlIHdoYXQgeW91J3ZlIGdvdC4gSSdsbCBhcHByb2FjaCB0aGlzIGxpa2UgSSdtIGRpc3NlY3RpbmcgYSByZXNlYXJjaCBwYXBlciwgYnJlYWtpbmcgZG93biB0aGUgYXV0aG9yJ3MgbG9naWMgYW5kIGZyYW1pbmcgaXQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2Vzcy5cblxuKipBbmFseXppbmcgdGhlIFRleHQ6IEEgRGVlcGVyIERpdmUqKlxuXG5BbHJpZ2h0LCB0aGUgaW5zdHJ1Y3Rpb24gaXMgdG8gcmVhZCB0aGUgdGV4dC4gT2theSwgc2ltcGxlIGVub3VnaCwgYnV0IHdoZXJlIGRvZXMgaXQgbGVhZD8gV2hhdCBxdWVzdGlvbiB3aWxsIGJlIGFuc3dlcmVkPyBXaGF0IHByb2JsZW0gd2lsbCBiZSBzb2x2ZWQ/IFRoaXMgaW5pdGlhbCBkaXJlY3RpdmUgc2V0cyB0aGUgc3RhZ2UuIE5vdywgSSBoYXZlIHRvIGFzc3VtZSB0aGUgYXV0aG9yIHdhbnRzIG1lIHRvIHJlYWQgd2l0aCBhIHB1cnBvc2UsIHRvIGV4dHJhY3QgaW5mb3JtYXRpb24uIEknbGwgdHJ5IHRvIGZpbmQgdGhlIGhpZGRlbiBudWdnZXRzIG9mIHRob3VnaHQgYW5kIGludGVycHJldGF0aW9uIGhlcmUuIEZyb20gdGhlIGJlZ2lubmluZyBpdCBzZWVtcyBhcyB0aG91Z2ggdGhpcyBpcyBnb2luZyB0byBiZSBhYm91dCBnYWluaW5nIGEgd2lkZXIgdW5kZXJzdGFuZGluZyBvZiBhIHRvcGljLiBUaGlzIGlzIGp1c3QgYSBwcmVsaW1pbmFyeSBzdGVwLCB0aG91Z2guXG5cbkkgaGF2ZSB0byByZWFkIGZ1cnRoZXIgZG93biB0byBzZWUgd2hhdCBpbnNpZ2h0cyBJIGFtIG1lYW50IHRvIGdsZWFuLiBJIGhhdmUgdG8gcmVtYWluIG9wZW4tbWluZGVkLCByZWFkeSB0byBhZGp1c3QgbXkgZXhpc3RpbmcgYXNzdW1wdGlvbnMgYW5kIGV4cGVydGlzZSB0byBhY2NvbW1vZGF0ZSBuZXcgcGVyc3BlY3RpdmVzLiBUaGUgbmV4dCB0ZXh0IHNob3VsZCBzdGFydCB0byBidWlsZCB1cG9uIHRoZSBmaXJzdCBzbyB0aGF0IEkgY2FuIGdldCBhIGJldHRlciBpZGVhIG9mIHRoZSBhdXRob3IncyB0cmFpbiBvZiB0aG91Z2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjk2NCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxODozODo0OC4zMzM2MTUxNjdaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzMwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzMwOlxcdFxcdGlmIChJU19FUlIoZnVsbF9wYXRoKSkge1xcbiA3MzE6XFx0XFx0XFx0cmV0ID0gUFRSX0VSUihmdWxsX3BhdGgpO1xcbiA3MzI6XFx0XFx0XFx0cHJfZXJyKFxcXCJPcGVuaW5nIGRldmljZSAnJXMnIGZvciBjbGllbnQgJXMgZmFpbGVkLCBmYWlsZWQgdG8gZ2V0IGRldmljZSBmdWxsIHBhdGgsIGVycjogJXBlXFxcXG5cXFwiLFxcbiA3MzM6XFx0XFx0XFx0ICAgICAgIG9wZW5fbXNnLVxcdTAwM2VkZXZfbmFtZSwgc3J2X3Nlc3MtXFx1MDAzZXNlc3NuYW1lLCBmdWxsX3BhdGgpO1xcbiA3MzQ6XFx0XFx0XFx0Z290byByZWplY3Q7XFxuIDczNTpcXHRcXHR9XFxuIDczNjpcXHRcXG4gNzM3OlxcdFxcdGJkZXZfZmlsZSA9IGJkZXZfZmlsZV9vcGVuX2J5X3BhdGgoZnVsbF9wYXRoLCBvcGVuX2ZsYWdzLCBOVUxMLCBOVUxMKTtcXG4gNzM4OlxcdFxcdGlmIChJU19FUlIoYmRldl9maWxlKSkge1xcbiA3Mzk6XFx0XFx0XFx0cmV0ID0gUFRSX0VSUihiZGV2X2ZpbGUpO1xcbiA3NDA6XFx0XFx0XFx0cHJfZXJyKFxcXCJPcGVuaW5nIGRldmljZSAnJXMnIG9uIHNlc3Npb24gJXMgZmFpbGVkLCBmYWlsZWQgdG8gb3BlbiB0aGUgYmxvY2sgZGV2aWNlLCBlcnI6ICVwZVxcXFxuXFxcIixcXG4gNzQxOlxcdFxcdFxcdCAgICAgICBmdWxsX3BhdGgsIHNydl9zZXNzLVxcdTAwM2VzZXNzbmFtZSwgYmRldl9maWxlKTtcXG4gNzQyOlxcdFxcdFxcdGdvdG8gZnJlZV9wYXRoO1xcbiA3NDM6XFx0XFx0fVxcbiA3NDQ6XFx0XFxuIDc0NTpcXHRcXHRzcnZfZGV2ID0gcm5iZF9zcnZfZ2V0X29yX2NyZWF0ZV9zcnZfZGV2KGZpbGVfYmRldihiZGV2X2ZpbGUpLCBzcnZfc2VzcyxcXG4gNzQ2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgb3Blbl9tc2ctXFx1MDAzZWFjY2Vzc19tb2RlKTtcXG4gNzQ3OlxcdFxcdGlmIChJU19FUlIoc3J2X2RldikpIHtcXG4gNzQ4OlxcdFxcdFxcdHByX2VycihcXFwiT3BlbmluZyBkZXZpY2UgJyVzJyBvbiBzZXNzaW9uICVzIGZhaWxlZCwgY3JlYXRpbmcgc3J2X2RldiBmYWlsZWQsIGVycjogJXBlXFxcXG5cXFwiLFxcbiA3NDk6XFx0XFx0XFx0ICAgICAgIGZ1bGxfcGF0aCwgc3J2X3Nlc3MtXFx1MDAzZXNlc3NuYW1lLCBzcnZfZGV2KTtcXG4gNzUwOlxcdFxcdFxcdHJldCA9IFBUUl9FUlIoc3J2X2Rldik7XFxuIDc1MTpcXHRcXHRcXHRnb3RvIGJsa2Rldl9wdXQ7XFxuIDc1MjpcXHRcXHR9XFxuIDc1MzpcXHRcXG4gNzU0OlxcdFxcdHNydl9zZXNzX2RldiA9IHJuYmRfc3J2X2NyZWF0ZV9zZXRfc2Vzc19kZXYoc3J2X3Nlc3MsIG9wZW5fbXNnLFxcbiA3NTU6XFx0XFx0XFx0XFx0XFx0YmRldl9maWxlLFxcbiA3NTY6XFx0XFx0XFx0XFx0XFx0b3Blbl9tc2ctXFx1MDAzZWFjY2Vzc19tb2RlID09IFJOQkRfQUNDRVNTX1JPLFxcbiA3NTc6XFx0XFx0XFx0XFx0XFx0c3J2X2Rldik7XFxuIDc1ODpcXHRcXHRpZiAoSVNfRVJSKHNydl9zZXNzX2RldikpIHtcXG4gNzU5OlxcdFxcdFxcdHByX2VycihcXFwiT3BlbmluZyBkZXZpY2UgJyVzJyBvbiBzZXNzaW9uICVzIGZhaWxlZCwgY3JlYXRpbmcgc2Vzc19kZXYgZmFpbGVkLCBlcnI6ICVwZVxcXFxuXFxcIixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTg6Mzg6NDguMzMzNzA5MTk3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMTQ5NjY0MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRlZXAgRGl2ZSBpbnRvIGBybmJkX3Nydl9jcmVhdGVfc2V0X3Nlc3NfZGV2YCoqXG5cbkFscmlnaHQsIGxldCdzIHplcm8gaW4gb24gdGhpcyBgcm5iZF9zcnZfY3JlYXRlX3NldF9zZXNzX2RldmAgZnVuY3Rpb24uIFRoZSBrZXkgaGVyZSBpcyBpdHMgcm9sZSBpbiBhbGxvY2F0aW5nIGEgYHNydl9zZXNzX2RldmAgc3RydWN0dXJlLiBUaGF0J3MgdGhlIGNvcmUgb2YgaG93IHRoaXMgc2VydmljZSBtYW5hZ2VzIGRldmljZSBzZXNzaW9ucywgc28gdW5kZXJzdGFuZGluZyBpdHMgaW5pdGlhbGl6YXRpb24gaXMgcGFyYW1vdW50LiBJIG5lZWQgdG8gY29uZmlybSB0aGUgY29ycmVjdCBpbnN0YW50aWF0aW9uIG9mIHRoYXQgc3RydWN0dXJlLiBJIGtub3cgdGhlIGludHJpY2FjaWVzIG9mIG1lbW9yeSBtYW5hZ2VtZW50IGluIHRoaXMgY29udGV4dCwgYW5kIHdhbnQgdG8gY29uZmlybSBpdHMgcHJvcGVyIGFsbG9jYXRpb24gYW5kIGluaXRpYWwgc2V0dGluZ3MuIEFueSBtaXNzdGVwcyBoZXJlIGNhbiBwcm9wYWdhdGUgc2VyaW91cyBlcnJvcnMsIHNvIGxldCdzIGRpZyBkZWVwZXIgYW5kIHZlcmlmeSB0aGF0IGV2ZXJ5dGhpbmcgaXMgbGluaW5nIHVwIGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4NTksIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE4OjM4OjUxLjM0ODY3Nzg1MVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzUzMjY5MzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJuYmRfc3J2X2NyZWF0ZV9zZXRfc2Vzc19kZXZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM9NTc3PXN0YXRpYyBzdHJ1Y3Qgcm5iZF9zcnZfc2Vzc19kZXYgKlxcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jOjU3ODpybmJkX3Nydl9jcmVhdGVfc2V0X3Nlc3NfZGV2KHN0cnVjdCBybmJkX3Nydl9zZXNzaW9uICpzcnZfc2VzcyxcXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy01NzktXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IHJuYmRfbXNnX29wZW4gKm9wZW5fbXNnLFxcbi0tXFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM9NjkxPXN0YXRpYyBpbnQgcHJvY2Vzc19tc2dfb3BlbihzdHJ1Y3Qgcm5iZF9zcnZfc2Vzc2lvbiAqc3J2X3Nlc3MsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy03NTMtXFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM6NzU0OlxcdHNydl9zZXNzX2RldiA9IHJuYmRfc3J2X2NyZWF0ZV9zZXRfc2Vzc19kZXYoc3J2X3Nlc3MsIG9wZW5fbXNnLFxcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jLTc1NS1cXHRcXHRcXHRcXHRiZGV2X2ZpbGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE4OjM4OjUxLjcwMTk1MjY1NVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzI0NTQ5MTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gYHJuYmRfc3J2X2NyZWF0ZV9zZXRfc2Vzc19kZXZgOlxuXG4qKlVuZGVyc3RhbmRpbmcgYHJuYmRfc3J2X2NyZWF0ZV9zZXRfc2Vzc19kZXZgKipcblxuQWxyaWdodCwgSSBzZWUgdGhpcyBmdW5jdGlvbiBuYW1lIOKAkyBgcm5iZF9zcnZfY3JlYXRlX3NldF9zZXNzX2RldmAuIEZyb20gdGhlIG5hbWluZyBjb252ZW50aW9uLCBpdCdzIHByZXR0eSBjbGVhciB0aGlzIGlzIHJlbGF0ZWQgdG8gdGhlIFJEQk4gKFJlbGlhYmxlIE5ldHdvcmsgQmxvY2sgRGV2aWNlKSBzZXJ2ZXIgc2lkZS4gVGhlIFwiY3JlYXRlXCIgc3VnZ2VzdHMgaXQncyBpbnZvbHZlZCBpbiBzZXNzaW9uIG9yIGRldmljZSBzZXR1cC4gXCJTZXRcIiBpbXBsaWVzIHNvbWUgY29uZmlndXJhdGlvbiBvciBhc3NpZ25tZW50IGlzIGludm9sdmVkLCBhbmQgXCJzZXNzX2RldlwiIG5pY2VseSBuYXJyb3dzIGl0IGRvd24gdG8gc29tZXRoaW5nIHNwZWNpZmljIHRvIHRoZSBzZXNzaW9uIGFuZCBkZXZpY2UgY29udGV4dCB3aXRoaW4gdGhlIFJEQk4gc2VydmVyLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgc3VjaCBhIGZ1bmN0aW9uIHdvdWxkIHByb2JhYmx5IGJlIGNyaXRpY2FsIGluIGluaXRpYWxpemluZyBhIGNsaWVudCBjb25uZWN0aW9uIG9yIGNvbmZpZ3VyaW5nIGhvdyBhIGRldmljZSBnZXRzIHByZXNlbnRlZCB0byB0aGUgcmVxdWVzdGluZyBjbGllbnQuIEkgYmV0IHRoZSBkZXRhaWxzIGluc2lkZSB0aGF0IGZ1bmN0aW9uIHdvdWxkIGdpdmUgbWUgYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIHNlcnZlciBtYW5hZ2VzIHJlc291cmNlcyBkdXJpbmcgYmxvY2sgSS9PIG9wZXJhdGlvbnMuIExldCdzIHNlZSBpZiBteSBpbml0aWFsIHRob3VnaHQgaXMgY29ycmVjdCwgYW5kIHdoYXQgSSBjYW4gbGVhcm4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzY5LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTg6Mzg6NTguMDI2NTAzODgxWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTM1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NzcsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1Nzc6XFx0c3RhdGljIHN0cnVjdCBybmJkX3Nydl9zZXNzX2RldiAqXFxuIDU3ODpcXHRybmJkX3Nydl9jcmVhdGVfc2V0X3Nlc3NfZGV2KHN0cnVjdCBybmJkX3Nydl9zZXNzaW9uICpzcnZfc2VzcyxcXG4gNTc5OlxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBybmJkX21zZ19vcGVuICpvcGVuX21zZyxcXG4gNTgwOlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBmaWxlICpiZGV2X2ZpbGUsIGJvb2wgcmVhZG9ubHksXFxuIDU4MTpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgcm5iZF9zcnZfZGV2ICpzcnZfZGV2KVxcbiA1ODI6XFx0e1xcbiA1ODM6XFx0XFx0c3RydWN0IHJuYmRfc3J2X3Nlc3NfZGV2ICpzZGV2ID0gcm5iZF9zZXNzX2Rldl9hbGxvYyhzcnZfc2Vzcyk7XFxuIDU4NDpcXHRcXG4gNTg1OlxcdFxcdGlmIChJU19FUlIoc2RldikpXFxuIDU4NjpcXHRcXHRcXHRyZXR1cm4gc2RldjtcXG4gNTg3OlxcdFxcbiA1ODg6XFx0XFx0a3JlZl9pbml0KFxcdTAwMjZzZGV2LVxcdTAwM2VrcmVmKTtcXG4gNTg5OlxcdFxcbiA1OTA6XFx0XFx0c3Ryc2NweShzZGV2LVxcdTAwM2VwYXRobmFtZSwgb3Blbl9tc2ctXFx1MDAzZWRldl9uYW1lLCBzaXplb2Yoc2Rldi1cXHUwMDNlcGF0aG5hbWUpKTtcXG4gNTkxOlxcdFxcbiA1OTI6XFx0XFx0c2Rldi1cXHUwMDNlYmRldl9maWxlXFx0XFx0PSBiZGV2X2ZpbGU7XFxuIDU5MzpcXHRcXHRzZGV2LVxcdTAwM2VzZXNzXFx0XFx0PSBzcnZfc2VzcztcXG4gNTk0OlxcdFxcdHNkZXYtXFx1MDAzZWRldlxcdFxcdD0gc3J2X2RldjtcXG4gNTk1OlxcdFxcdHNkZXYtXFx1MDAzZXJlYWRvbmx5XFx0XFx0PSByZWFkb25seTtcXG4gNTk2OlxcdFxcdHNkZXYtXFx1MDAzZWFjY2Vzc19tb2RlXFx0PSBvcGVuX21zZy1cXHUwMDNlYWNjZXNzX21vZGU7XFxuIDU5NzpcXHRcXG4gNTk4OlxcdFxcdHJldHVybiBzZGV2O1xcbiA1OTk6XFx0fVxcbiA2MDA6XFx0XFxuIDYwMTpcXHRzdGF0aWMgY2hhciAqcm5iZF9zcnZfZ2V0X2Z1bGxfcGF0aChzdHJ1Y3Qgcm5iZF9zcnZfc2Vzc2lvbiAqc3J2X3Nlc3MsXFxuIDYwMjpcXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKmRldl9uYW1lKVxcbiA2MDM6XFx0e1xcbiA2MDQ6XFx0XFx0Y2hhciAqZnVsbF9wYXRoO1xcbiA2MDU6XFx0XFx0Y2hhciAqYSwgKmI7XFxuIDYwNjpcXHRcXHRpbnQgbGVuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxODozODo1OC4wMjY2MzczNjFaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEyNTUyNTI3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYHJuYmRfc2Vzc19kZXZfYWxsb2NgKipcblxuT2theSwgc28gYHJuYmRfc2Vzc19kZXZfYWxsb2NgIGlzIHJlc3BvbnNpYmxlIGZvciBhbGxvY2F0aW5nIGBzZGV2YC4gVGltZSB0byBkcmlsbCBkb3duIGludG8gdGhhdCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yLCBlc3BlY2lhbGx5IGl0cyByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBlcnJvciBoYW5kbGluZywgaW4gcmVsYXRpb24gdG8gdGhlIGBzZGV2YCBzdHJ1Y3R1cmUuIEknbSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mIGRldmljZSBhbGxvY2F0aW9uIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgb3ZlcmFsbCByTkJEIHNlc3Npb24gbGlmZWN5Y2xlLiBBcmUgdGhlcmUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBJIHNob3VsZCBiZSBsb29raW5nIG91dCBmb3I/IFdoYXQncyB0aGUgaW1wYWN0IGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxzIOKAkyBkb2VzIGl0IGhhbmRsZSBlcnJvcnMgZ3JhY2VmdWxseSwgb3IgY291bGQgd2UgaGF2ZSByZXNvdXJjZSBsZWFrcz8gSSdtIGdvaW5nIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCB0byBnZXQgYSBmdWxsIHBpY3R1cmUuIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTQ4LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxODozOTowMS4xNTIxNjQzNzRaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NTM3NzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJuYmRfc2Vzc19kZXZfYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmM9NDE5PXN0YXRpYyBzdHJ1Y3Qgcm5iZF9zcnZfc2Vzc19kZXZcXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYzo0MjA6KnJuYmRfc2Vzc19kZXZfYWxsb2Moc3RydWN0IHJuYmRfc3J2X3Nlc3Npb24gKnNydl9zZXNzKVxcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jLTQyMS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYz01Nzg9cm5iZF9zcnZfY3JlYXRlX3NldF9zZXNzX2RldihzdHJ1Y3Qgcm5iZF9zcnZfc2Vzc2lvbiAqc3J2X3Nlc3MsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy01ODIte1xcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLXNydi5jOjU4MzpcXHRzdHJ1Y3Qgcm5iZF9zcnZfc2Vzc19kZXYgKnNkZXYgPSBybmJkX3Nlc3NfZGV2X2FsbG9jKHNydl9zZXNzKTtcXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1zcnYuYy01ODQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE4OjM5OjAxLjIxMDcwNzE3WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMjk2NDAxNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIGFzIEkgYXBwcm9hY2ggcmVhZGluZyBgcm5iZF9zZXNzX2Rldl9hbGxvY2A6XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBEZWNvZGluZyB0aGUgTmFtZSoqXG5cbkZpcnN0LCBJJ20gYWxyZWFkeSBtZW50YWxseSBwYXJzaW5nIHRoZSBuYW1lLiBgcm5iZGAgc2NyZWFtcyBcIm5ldHdvcmsgYmxvY2sgZGV2aWNlLFwiIHNvIEknbSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBzb21ldGhpbmcgcmVsYXRlZCB0byBleHBvcnRpbmcgYSBibG9jayBkZXZpY2Ugb3ZlciBhIG5ldHdvcmsuIFRoZSBgc2Vzc2AgcGFydCBwcm9iYWJseSBtZWFucyBcInNlc3Npb24sXCIgYW5kIEkgZXhwZWN0IHRoaXMgd2lsbCBiZSBhYm91dCBhbGxvY2F0aW5nIHJlc291cmNlcyBmb3IgYSBuZXR3b3JrIGJsb2NrIGRldmljZSAqc2Vzc2lvbiouIEZpbmFsbHksIGBkZXZfYWxsb2NgLi4uIHRoYXQgaGFzIHRvIGJlIGEgZGV2aWNlIGFsbG9jYXRpb24gZnVuY3Rpb24uIFNvLCBJJ20gZXhwZWN0aW5nIHRoaXMgaXMgY29kZSB0aGF0IGhhbmRsZXMgc2V0dGluZyB1cCBhIGJsb2NrIGRldmljZSBmb3IgYSByZW1vdGUgY2xpZW50IHRvIHVzZS4gSXQncyBsaWtlbHkgaW52b2x2ZWQgaW4gdGhlIGluaXRpYWwgaGFuZHNoYWtlIG9yIG5lZ290aWF0aW9uIG9mIHJlc291cmNlcy5cblxuSSdtIG1lbnRhbGx5IHByZXBhcmluZyBmb3IgYSBmYWlybHkgbG93LWxldmVsIHZpZXcgb2YgdGhpbmdzLCBwcm9iYWJseSBkZWFsaW5nIHdpdGggZGF0YSBzdHJ1Y3R1cmVzIHJlbGF0ZWQgdG8gdGhlIG5ldHdvcmsgY29ubmVjdGlvbiwgcGVyaGFwcyBzb21lIGRldmljZS1zcGVjaWZpYyBpbmZvcm1hdGlvbiwgYW5kIGxpa2VseSBzb21lIHNvcnQgb2YgbWVtb3J5IGFsbG9jYXRpb24gb3IgcmVnaXN0cmF0aW9uIHByb2Nlc3MuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgbXV0ZXhlcyBvciBzcGlubG9ja3Mg4oCTIHRoZSB1c3VhbCBzdXNwZWN0cyB3aGVuIGRlYWxpbmcgd2l0aCBzaGFyZWQgcmVzb3VyY2VzIGFuZCBjb25jdXJyZW50IGFjY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2MzgsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxODozOTowNC41NDAzNDg5NTNaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODUwNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtc3J2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDE5LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDE5OlxcdHN0YXRpYyBzdHJ1Y3Qgcm5iZF9zcnZfc2Vzc19kZXZcXG4gNDIwOlxcdCpybmJkX3Nlc3NfZGV2X2FsbG9jKHN0cnVjdCBybmJkX3Nydl9zZXNzaW9uICpzcnZfc2VzcylcXG4gNDIxOlxcdHtcXG4gNDIyOlxcdFxcdHN0cnVjdCBybmJkX3Nydl9zZXNzX2RldiAqc2Vzc19kZXY7XFxuIDQyMzpcXHRcXHRpbnQgZXJyb3I7XFxuIDQyNDpcXHRcXG4gNDI1OlxcdFxcdHNlc3NfZGV2ID0ga3phbGxvY19vYmooKnNlc3NfZGV2KTtcXG4gNDI2OlxcdFxcdGlmICghc2Vzc19kZXYpXFxuIDQyNzpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4gNDI4OlxcdFxcbiA0Mjk6XFx0XFx0ZXJyb3IgPSB4YV9hbGxvYyhcXHUwMDI2c3J2X3Nlc3MtXFx1MDAzZWluZGV4X2lkciwgXFx1MDAyNnNlc3NfZGV2LVxcdTAwM2VkZXZpY2VfaWQsIHNlc3NfZGV2LFxcbiA0MzA6XFx0XFx0XFx0XFx0IHhhX2xpbWl0XzMyYiwgR0ZQX05PV0FJVCk7XFxuIDQzMTpcXHRcXHRpZiAoZXJyb3IgXFx1MDAzYyAwKSB7XFxuIDQzMjpcXHRcXHRcXHRwcl93YXJuKFxcXCJBbGxvY2F0aW5nIGlkciBmYWlsZWQsIGVycjogJWRcXFxcblxcXCIsIGVycm9yKTtcXG4gNDMzOlxcdFxcdFxcdGtmcmVlKHNlc3NfZGV2KTtcXG4gNDM0OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKGVycm9yKTtcXG4gNDM1OlxcdFxcdH1cXG4gNDM2OlxcdFxcbiA0Mzc6XFx0XFx0cmV0dXJuIHNlc3NfZGV2O1xcbiA0Mzg6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxODozOTowNC41NDA0MzU2NTNaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAzNzkzMDUwNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgU3VidGxlIFJOQkQgU2VydmVyIEJ1ZyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgYHJuYmRfc2Vzc19kZXZfYWxsb2NgIGFsbG9jYXRlcyB0aGUgYHNlc3NfZGV2YCBhbmQgaW5zZXJ0cyBpdCBpbnRvIHRoZSBgc3J2X3Nlc3MtXHUwMDNlaW5kZXhfaWRyYC4gUHJpb3IgdG8gdGhpcyBwYXRjaCwgaWYgYHJuYmRfc3J2X2NyZWF0ZV9kZXZfc2Vzc2lvbl9zeXNmc2AgZmFpbGVkLCBpdCB3b3VsZCBqdW1wIHN0cmFpZ2h0IHRvIGBmcmVlX3Nydl9zZXNzX2RldmAuIE5vdywgYGZyZWVfc3J2X3Nlc3NfZGV2YCBkb2VzIGEgc2ltcGxlIGB4YV9lcmFzZWAsIGBzeW5jaHJvbml6ZV9yY3VgLCBhbmQgdGhlbiBga2ZyZWVgIG9mIHRoZSBgc3J2X3Nlc3NfZGV2YC4gSG93ZXZlciwgaGVyZSdzIHRoZSBraWNrZXI6IGBybmJkX3Nydl9jcmVhdGVfZGV2X3Nlc3Npb25fc3lzZnNgICphbHNvKiBjYWxscyBga29iamVjdF9wdXQoXHUwMDI2c2Vzc19kZXYtXHUwMDNla29iailgIG9uIGZhaWx1cmUuXG5cbkhhbmcgb24gYSBzZWNvbmTigKYgYGtvYmplY3RfcHV0YCB0cmlnZ2VycyBgcm5iZF9zcnZfc2Vzc19kZXZfcmVsZWFzZWAsIGFuZCAqdGhhdCogY2FsbHMgYHJuYmRfZGVzdHJveV9zZXNzX2RldmAuIE5vdywgYHJuYmRfZGVzdHJveV9zZXNzX2RldmAgaXRzZWxmIGRvZXMgYW4gYHhhX2VyYXNlYCwgYHN5bmNocm9uaXplX3JjdWAsIHNldHMgdXAgYSBgZGVzdHJveV9jb21wYCwgY2FsbHMgYHJuYmRfcHV0X3Nlc3NfZGV2YCwgYW5kIHRoZW4gYHdhaXRfZm9yX2NvbXBsZXRpb25gLCBgZnB1dGAsIGFuZCBzbyBvbiwgY2xlYW5pbmcgdXAgdGhlIHJlc291cmNlcy4gQnV0LCBpZiBgcm5iZF9zcnZfY3JlYXRlX2Rldl9zZXNzaW9uX3N5c2ZzYCBmYWlscywgY2FsbHMgYGtvYmplY3RfcHV0YCwgd2hpY2ggY2FsbHMgYHJuYmRfZGVzdHJveV9zZXNzX2RldmAsIHRoZW4gYHJuYmRfZGVzdHJveV9zZXNzX2RldmAgdHJpZXMgdG8gY2FsbCBgbGlzdF9kZWwoXHUwMDI2c2Vzc19kZXYtXHUwMDNlZGV2X2xpc3QpYC5cblxuVGhhdCdzIHdoZW4gaXQgY2xpY2tlZCEgSWYgYHNlc3NfZGV2YCB3YXMgKm5vdCogYWRkZWQgdG8gYHNlc3NfZGV2LVx1MDAzZWRldi1cdTAwM2VzZXNzX2Rldl9saXN0YCBiZWZvcmUgYHJuYmRfc3J2X2NyZWF0ZV9kZXZfc2Vzc2lvbl9zeXNmc2AgZmFpbGVkICh3aGljaCBpcyBsaWtlbHkgaW4gdGhlIGZhaWx1cmUgcGF0aCksIHRoZSBgbGlzdF9kZWwoXHUwMDI2c2Vzc19kZXYtXHUwMDNlZGV2X2xpc3QpYCBpcyBnb2luZyB0byBjYXVzZSBhIGNyYXNoIG9yIGxpc3QgY29ycnVwdGlvbiBiZWNhdXNlIGBkZXZfbGlzdGAgaXMgZWl0aGVyIHVuaW5pdGlhbGl6ZWQgb3IgYW4gZW1wdHkgbGlzdCEgV2FpdCwgYW5kIEkganVzdCBjaGVja2VkIGBkZXZfbGlzdGAgaXNuJ3QgaW5pdGlhbGl6ZWQgd2l0aCBgSU5JVF9MSVNUX0hFQURgIGluIGBybmJkX3Nlc3NfZGV2X2FsbG9jYCwgaW5zdGVhZCBpdCBpcyB6ZXJvZWQgYnkgYGt6YWxsb2Nfb2JqYCwgd2hpY2ggd291bGQgY2F1c2UgYGxpc3RfZGVsYCB0byBjcmFzaCBmcm9tIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBEYW1uLCB0aGlzIGlzIGEgcmVhbCwgbGl2ZSBidWcuXG5cbkFuZCB0aGF0J3Mgbm90IGFsbC4gYHJuYmRfZGVzdHJveV9zZXNzX2RldmAgKmFsc28qIGZyZWVzIHRoZSBvYmplY3QgdXNpbmcgYHJuYmRfcHV0X3Nlc3NfZGV2YCwgYW5kIHRoZW4gdGhlIGNvZGUganVtcHMgdG8gYGZyZWVfc3J2X3Nlc3NfZGV2YCB3aGljaCBhbHNvIGRvZXMgYHhhX2VyYXNlYCBhbmQgYGtmcmVlKHNydl9zZXNzX2RldilgISBXZSBoYXZlIGEgY2xhc3NpYyBkb3VibGUtZnJlZSBzaXR1YXRpb24gaGVyZSwgYW5kIGV2ZW4gYW4gZWFybGllciBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UuIFNvLCB0aGUgcGF0Y2ggZml4ZXMgKmJvdGgqIGEgZG91YmxlIGZyZWUgKmFuZCogYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIEV4Y2VsbGVudCBjYXRjaCFcblxuVGltZSB0byBmaWd1cmUgb3V0IHdoZXJlIHRvIGZvY3VzIG91ciBmdXp6aW5nIGVmZm9ydHMuIEJhc2VkIG9uIHRoZSBjYWxsIHN0YWNrLCBJJ20gZ29pbmcgdG8gZm9jdXMgb246IGBwcm9jZXNzX21zZ19vcGVuYCwgYHJuYmRfc3J2X2NyZWF0ZV9kZXZfc2Vzc2lvbl9zeXNmc2AsIGFuZCBgcm5iZF9kZXN0cm95X3Nlc3NfZGV2YC4gTm93IHRvIGxvb2sgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnPigKYgSSBuZWVkIGBCTEtfREVWX1JOQkRfU0VSVkVSYCwgYnV0IGRvZXMgaXQgZGVwZW5kIG9uIGBJTkZJTklCQU5EX1JUUlNfU0VSVkVSYD8gWWVzLCBpdCBkb2VzLiBMZXQgbWUganVzdCBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgY29uZmlncy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjI1MSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE4OjM5OjE0LjkxOTc0MzU0NloiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzUyNzI2NjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX1JOQkRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWctMi1cXG5kcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZzozOmNvbmZpZyBCTEtfREVWX1JOQkRcXG5kcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZy00LVxcdGJvb2xcXG5kcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZy01LVxcbmRyaXZlcnMvYmxvY2svcm5iZC9LY29uZmlnOjY6Y29uZmlnIEJMS19ERVZfUk5CRF9DTElFTlRcXG5kcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJSRE1BIE5ldHdvcmsgQmxvY2sgRGV2aWNlIGRyaXZlciBjbGllbnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZy0xOC1cXG5kcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZzoxOTpjb25maWcgQkxLX0RFVl9STkJEX1NFUlZFUlxcbmRyaXZlcnMvYmxvY2svcm5iZC9LY29uZmlnLTIwLVxcdHRyaXN0YXRlIFxcXCJSRE1BIE5ldHdvcmsgQmxvY2sgRGV2aWNlIGRyaXZlciBzZXJ2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE4OjM5OjE1LjI3MjQ3NjIxNloiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjQ5OTI2NzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJOQkQgVGVzdGluZyBTdHJhdGVneSoqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBvbiB0ZXN0aW5nIHRoZSBSTkJEIGZ1bmN0aW9uYWxpdHksIHNwZWNpZmljYWxseSwgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGNsaWVudCBhbmQgc2VydmVyIGNvbXBvbmVudHMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBCTEtfREVWX1JOQkRfU0VSVkVSYCBpcyB0aGUgcHJpbWFyeSBwb2ludCBvZiBpbnRlcmVzdC4gSG93ZXZlciwgb24gZnVydGhlciByZWZsZWN0aW9uLCBJIHJlYWxpemUgdGhhdCB0byAqYWN0dWFsbHkqIHRlc3QgaXQsIEknbGwgbmVlZCB0byBjb25zaWRlciBgQkxLX0RFVl9STkJEX0NMSUVOVGAgYXMgd2VsbCwgc2luY2UgdGhlIGNsaWVudCBpcyByZXNwb25zaWJsZSBmb3IgaW5pdGlhdGluZyBjb25uZWN0aW9ucyBhbmQgc2VuZGluZyB0aGUgYFJOQkRfTVNHX09QRU5gIG1lc3NhZ2UgdG8gdGhlIHNlcnZlci5cblxuVGhlIGNvcmUgb2YgdGhpcyBpcyB0aGUgY2xpZW50LXNlcnZlciBpbnRlcmFjdGlvbi5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGNvbnNpZGVyIGhvdyBzeXprYWxsZXIgZml0cyBpbnRvIHRoZSBwaWN0dXJlLiBDYW4gSSBsZXZlcmFnZSBgc3l6X3JuYmRfY2xpZW50X29wZW5gIG9yIGEgc2ltaWxhciBzeXprYWxsZXIgcHJpbWl0aXZlPyBQcm9iYWJseSBub3QgZGlyZWN0bHkuIFN5emthbGxlciwgZ2l2ZW4gaXRzIGZ1enppbmcgYXBwcm9hY2gsIGxpa2VseSBoYW5kbGVzIFJOQkQgYnkgZWl0aGVyIHNldHRpbmcgdXAgY2xpZW50IGFuZCBzZXJ2ZXIgaW5zdGFuY2VzIHdpdGhpbiB0aGUgZnV6emluZyBlbnZpcm9ubWVudCBpdHNlbGYsIG9yIHBvdGVudGlhbGx5IGJ5IGRpcmVjdGx5IGZ1enppbmcgdGhlIHVuZGVybHlpbmcgUkRNQSBjb25uZWN0aW9uIGlmIHRoYXQncyB0aGUgZGF0YSBwbGFuZS4gSXQgaXMgaW1wb3J0YW50IHRvIGtub3cgdGhpcy5cblxuVGhlcmVmb3JlLCBpdCdzIHdvcnRoIGNoZWNraW5nIGlmIHN5emthbGxlciBhbHJlYWR5IGhhcyBkZXNjcmlwdGlvbnMsIGRlZmluaXRpb25zLCBvciBjb3ZlcmFnZSBzcGVjaWZpY2FsbHkgZm9yIFJOQkQuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQgZGlnZ2luZyB0byBzZWUgaWYgYW55b25lIGhhcyBhbHJlYWR5IGRvbmUgdGhlIGhlYXZ5IGxpZnRpbmcgYW5kIGlmIEkgY2FuIGJ1aWxkIG9uIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODA2MywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxODozOToxOS41MjI0MDUwNzhaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMDA4Mzk0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJybmJkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE4OjM5OjE5LjYwMjQyNDUzMloiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODA0NjU1NjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk5hdmlnYXRpbmcgdGhlIExhbmRzY2FwZSBvZiBTeXprYWxsZXIgYW5kIEtlcm5lbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gU29tZXRoaW5nIGlzbid0IHF1aXRlIGNsaWNraW5nLiBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiB0aGF0IHRoZSBkZXNjcmlwdGlvbnMgZ2VuZXJhdGVkIGJ5IHN5emthbGxlciB3ZXJlIGRpcmVjdGx5IGludGVncmF0ZWQgd2l0aGluIHRoZSBrZXJuZWwgdHJlZS4gQnV0IHRoYXQgZG9lc24ndCBzZWVtIHRvIGJlIHRoZSBjYXNlLiBTbywgd2UgbmVlZCB0byBmaW5kIGFub3RoZXIgd2F5IHRvIGhhbmRsZSB0aGlzLlxuXG5BaGEhIEluc3RlYWQgb2YgYXR0ZW1wdGluZyB0byBmaW5kIHRoZSBzeXprYWxsZXIgZGVzY3JpcHRpb25zIGRpcmVjdGx5LCB3ZSBjYW4gbGV2ZXJhZ2UgdGhlIGV4aXN0aW5nIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIElmIHdlIGNhbiBwcm92aWRlIHRoZSBjb3JyZWN0IGZsYWdzLCB0aGUgaW50ZWdyYXRpb24gc2hvdWxkIHdvcmsuIExldCdzIHNlZSBpZiB3ZSBjYW4gdXNlIHRoZSBgQkxLX0RFVl9STkJEX1NFUlZFUmAgYW5kIGBCTEtfREVWX1JOQkRfQ0xJRU5UYCBvcHRpb25zLiBUaGV5IHNob3VsZCBkbyB0aGUgdHJpY2suXG5cblRvIGJlIGV4dHJhIGNlcnRhaW4gd2UgYXJlIG9uIHRoZSByaWdodCB0cmFjaywgbGV0J3MgdGFrZSBhIGxvb2sgYXQgc2ltaWxhciBtb2R1bGVzLiBDaGVja2luZyBvdXQgaG93IGBJTkZJTklCQU5EX1JUUlNfU0VSVkVSYCBhbmQgYElORklOSUJBTkRfUlRSU19DTElFTlRgIGFyZSBoYW5kbGVkIHdpbGwgZ2l2ZSB1cyBhIGdvb2QgcG9pbnQgb2YgY29tcGFyaXNvbiBhbmQgY29uZmlybSB0aGlzIGxpbmUgb2YgdGhpbmtpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NDk2LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTg6Mzk6MjMuNDA3MDgxOTc3WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzUxMDA1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU5GSU5JQkFORF9SVFJTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnLTItXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWc6Mzpjb25maWcgSU5GSU5JQkFORF9SVFJTXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctNC1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctNi1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3J0cnMvS2NvbmZpZzo3OmNvbmZpZyBJTkZJTklCQU5EX1JUUlNfQ0xJRU5UXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctOC1cXHR0cmlzdGF0ZSBcXFwiUlRSUyBjbGllbnQgbW9kdWxlXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctMTctXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWc6MTg6Y29uZmlnIElORklOSUJBTkRfUlRSU19TRVJWRVJcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3J0cnMvS2NvbmZpZy0xOS1cXHR0cmlzdGF0ZSBcXFwiUlRSUyBzZXJ2ZXIgbW9kdWxlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxODozOToyMy40NjQ1OTUwNjJaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjQ4NjYzMTAwNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGRldmljZSBjb25maWd1cmF0aW9ucyBhbmQsIHllcywgdGhlc2UgZGVmaW5pdGVseSBleGlzdCBhbmQgbmVlZCB0byBiZSBhZGRyZXNzZWQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gaW5jbHVkZSBgQkxLX0RFVl9STkJEX1NFUlZFUmAgYW5kIGBCTEtfREVWX1JOQkRfQ0xJRU5UYC4gSSBzaG91bGQgYWxzbyBjb25zaWRlciBgSU5GSU5JQkFORF9SVFJTX1NFUlZFUmAgYW5kIGBJTkZJTklCQU5EX1JUUlNfQ0xJRU5UYC4gSG93ZXZlciwgd2FpdCBhIHNlY29uZC4gSSByZW1lbWJlciB0aGF0IGBCTEtfREVWX1JOQkRfU0VSVkVSYCBhY3R1YWxseSAqc2VsZWN0cyogYEJMS19ERVZfUk5CRGAgYW5kIGFsc28gKmRlcGVuZHMqIG9uIGBJTkZJTklCQU5EX1JUUlNfU0VSVkVSYC5cblxuVGhpcyBtZWFucyB0aGF0IGVuYWJsaW5nIGBCTEtfREVWX1JOQkRfU0VSVkVSYCBhbmQgYEJMS19ERVZfUk5CRF9DTElFTlRgIHNob3VsZCB0ZWNobmljYWxseSBwdWxsIGluIHRoZSBvdGhlcnMgYXV0b21hdGljYWxseSwgZ2l2ZW4gdGhlIGRlcGVuZGVuY2llcy4gSXQgaXMsIGhvd2V2ZXIsIHByb2JhYmx5IHNhZmVyIHRvIGJlIGV4cGxpY2l0IGFuZCBsaXN0IGBJTkZJTklCQU5EX1JUUlNfU0VSVkVSYCBhbmQgYElORklOSUJBTkRfUlRSU19DTElFTlRgIGFueXdheSwgb3IgbWF5YmUganVzdCBzdGljayB3aXRoIHRoZSBSTkJEIG9uZXMgZm9yIHRoZSBzYWtlIG9mIHNpbXBsaWNpdHkuIEkgc2hvdWxkIHF1aWNrbHkgdmVyaWZ5IGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkwNDUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTg6Mzk6NDguMzMwOTA3MDZaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxODE4Mjg0NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19ERVZfUk5CRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWctMi1cXG5kcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZzozOmNvbmZpZyBCTEtfREVWX1JOQkRcXG5kcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZy00LVxcdGJvb2xcXG5kcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZy01LVxcbmRyaXZlcnMvYmxvY2svcm5iZC9LY29uZmlnOjY6Y29uZmlnIEJMS19ERVZfUk5CRF9DTElFTlRcXG5kcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJSRE1BIE5ldHdvcmsgQmxvY2sgRGV2aWNlIGRyaXZlciBjbGllbnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZy0xOC1cXG5kcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZzoxOTpjb25maWcgQkxLX0RFVl9STkJEX1NFUlZFUlxcbmRyaXZlcnMvYmxvY2svcm5iZC9LY29uZmlnLTIwLVxcdHRyaXN0YXRlIFxcXCJSRE1BIE5ldHdvcmsgQmxvY2sgRGV2aWNlIGRyaXZlciBzZXJ2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE4OjM5OjUwLjUxMjc0MDUzNloiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MjY5NTQzNzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUk5CRCBTZXJ2ZXIgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGxpc3QgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zOiBgQkxLX0RFVl9STkJEX1NFUlZFUmAgYW5kIGBCTEtfREVWX1JOQkRfQ0xJRU5UYC4gVGhvc2UgYXJlIHRoZSBiYXNlbGluZSByZXF1aXJlbWVudHMuIE5vdywgZm9jdXNpbmcgb24gdGhlIGNvcmUgc3ltYm9scyB0b3VjaGVkIGJ5IHRoaXMgcGF0Y2g6IGBwcm9jZXNzX21zZ19vcGVuYCwgYHJuYmRfc3J2X2NyZWF0ZV9kZXZfc2Vzc2lvbl9zeXNmc2AsIGFuZCBgcm5iZF9kZXN0cm95X3Nlc3NfZGV2YC4gQXJlIHRoZXJlIG90aGVyIGNsb3NlbHkgcmVsYXRlZCBmdW5jdGlvbnMgaW1wYWN0ZWQ/IFllcywgc3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggaXMgY2hhbmdpbmcgYHByb2Nlc3NfbXNnX29wZW5gLiBMZXQncyBpbmNsdWRlIHRoYXQuXG5cbk5vdywgYSBxdWljayB2ZXJpZmljYXRpb24g4oCTIGlzIGBwcm9jZXNzX21zZ19vcGVuYCBhY3R1YWxseSByZWFjaGFibGU/IFllcywgaXQncyBjYWxsZWQgZnJvbSBgcm5iZF9zcnZfcmRtYV9ldmAgd2hlbiB0aGUgbWVzc2FnZSBJRCBpcyBgUk5CRF9NU0dfT1BFTmAuIFRoYXQncyB0cmlnZ2VyZWQgd2hlbiBhIGNsaWVudCBjb25uZWN0cywgc28gd2UncmUgZ29vZCB0aGVyZS5cblxuT2theSwgZGl2aW5nIGludG8gdGhlIGhlYXJ0IG9mIHRoZSBpc3N1ZTogdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBkb3VibGUgZnJlZSBhbmQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIFJOQkQgc2VydmVyJ3MgZXJyb3IgcGF0aCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgcHJvY2Vzc19tc2dfb3BlbmAuIElmIGBybmJkX3Nydl9jcmVhdGVfZGV2X3Nlc3Npb25fc3lzZnNgIGZhaWxzLCBpdCBjYWxscyBga29iamVjdF9wdXRgLCB3aGljaCB0cmlnZ2VycyB0aGUgYHJuYmRfZGVzdHJveV9zZXNzX2RldmAgcmVsZWFzZSBjYWxsYmFjay4gVGhpcyBjYWxsYmFjayBpcyBzdXBwb3NlZCB0byBmcmVlIHRoZSBzZXNzaW9uIGRldmljZSBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlIHNlc3Npb24gZGV2aWNlIGxpc3QgKGBzZXNzX2Rldl9saXN0YCkuIFRoZSBwcm9ibGVtIGlzLCBiZWZvcmUgdGhlIHBhdGNoLCB0aGUgZGV2aWNlIHdhc24ndCBhZGRlZCB0byB0aGUgbGlzdCAqYmVmb3JlKiBzeXNmcyBjcmVhdGlvbi4gVGhpcyBsZWFkcyB0byBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgbGlzdF9kZWxgLCBmb2xsb3dlZCBieSBhbiBlcnJvciBoYW5kbGluZyBwYXRoIHRoYXQgY2FsbHMgYGZyZWVfc3J2X3Nlc3NfZGV2YCwgYXR0ZW1wdGluZyB0byBmcmVlIHRoZSBvYmplY3QgYSBzZWNvbmQgdGltZS5cblxuVGhlIGtleSBpcyBpbiB0aGUgZXJyb3IgcGF0aCBmb3IgYHByb2Nlc3NfbXNnX29wZW5gLiBUaGUgZG91YmxlIGZyZWUgYW5kIE5VTEwgcG9pbnRlciBpc3N1ZXMgbWVhbiB0aGlzIGlzIHByaW1lIHRlcnJpdG9yeSBmb3IgZnV6emluZy4gVGhlIGdvYWwgd2lsbCBiZSB0byB1bmNvdmVyIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIG9yIGxpc3QgY29ycnVwdGlvbiB3aXRoaW4gdGhlIHNlcnZlci4gSXQgaXMgY2xlYXIgdGhhdCB0aGlzIG5lZWRzIHRvIGJlIGZ1enplZCwgc28gSSdtIHNldHRpbmcgYFdvcnRoRnV6emluZ2AgdG8gdHJ1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk2NzAsIk91dHB1dFRva2VucyI6MjUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE4OjM5OjU5Ljc4MjI4NjkwMloiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0NzQwOTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX1JOQkRfU0VSVkVSXCIsXG4gICAgXCJCTEtfREVWX1JOQkRfQ0xJRU5UXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHJvY2Vzc19tc2dfb3BlblwiLFxuICAgIFwicm5iZF9zcnZfY3JlYXRlX2Rldl9zZXNzaW9uX3N5c2ZzXCIsXG4gICAgXCJybmJkX2Rlc3Ryb3lfc2Vzc19kZXZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGRvdWJsZSBmcmVlIGFuZCBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvbiB0aGUgZXJyb3IgcGF0aCBvZiBgcHJvY2Vzc19tc2dfb3BlbmAgaW4gdGhlIFJOQkQgc2VydmVyLiBJZiBgcm5iZF9zcnZfY3JlYXRlX2Rldl9zZXNzaW9uX3N5c2ZzYCBmYWlscywgaXQgY2FsbHMgYGtvYmplY3RfcHV0YCwgd2hpY2ggaW52b2tlcyB0aGUgcmVsZWFzZSBjYWxsYmFjayBgcm5iZF9kZXN0cm95X3Nlc3NfZGV2YC4gVGhpcyBjYWxsYmFjayBmcmVlcyB0aGUgc2Vzc2lvbiBkZXZpY2UgYW5kIHJlbW92ZXMgaXQgZnJvbSB0aGUgYHNlc3NfZGV2X2xpc3RgLiBCZWZvcmUgdGhlIHBhdGNoLCB0aGUgZGV2aWNlIHdhcyBub3QgYWRkZWQgdG8gdGhlIGxpc3QgYmVmb3JlIHN5c2ZzIGNyZWF0aW9uLCBjYXVzaW5nIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBsaXN0X2RlbGAsIGFuZCB0aGUgZXJyb3IgaGFuZGxpbmcganVtcGVkIHRvIGBmcmVlX3Nydl9zZXNzX2RldmAgd2hpY2ggZnJlZWQgdGhlIG9iamVjdCBhZ2Fpbi4gRnV6emluZyB0aGlzIGVycm9yIHBhdGggaXMgaW1wb3J0YW50IHRvIGVuc3VyZSBubyBvdGhlciB1c2UtYWZ0ZXItZnJlZSBvciBsaXN0IGNvcnJ1cHRpb25zIGV4aXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfUk5CRF9TRVJWRVJcIixcbiAgICBcIkJMS19ERVZfUk5CRF9DTElFTlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwcm9jZXNzX21zZ19vcGVuXCIsXG4gICAgXCJybmJkX3Nydl9jcmVhdGVfZGV2X3Nlc3Npb25fc3lzZnNcIixcbiAgICBcInJuYmRfZGVzdHJveV9zZXNzX2RldlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgZG91YmxlIGZyZWUgYW5kIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9uIHRoZSBlcnJvciBwYXRoIG9mIGBwcm9jZXNzX21zZ19vcGVuYCBpbiB0aGUgUk5CRCBzZXJ2ZXIuIElmIGBybmJkX3Nydl9jcmVhdGVfZGV2X3Nlc3Npb25fc3lzZnNgIGZhaWxzLCBpdCBjYWxscyBga29iamVjdF9wdXRgLCB3aGljaCBpbnZva2VzIHRoZSByZWxlYXNlIGNhbGxiYWNrIGBybmJkX2Rlc3Ryb3lfc2Vzc19kZXZgLiBUaGlzIGNhbGxiYWNrIGZyZWVzIHRoZSBzZXNzaW9uIGRldmljZSBhbmQgcmVtb3ZlcyBpdCBmcm9tIHRoZSBgc2Vzc19kZXZfbGlzdGAuIEJlZm9yZSB0aGUgcGF0Y2gsIHRoZSBkZXZpY2Ugd2FzIG5vdCBhZGRlZCB0byB0aGUgbGlzdCBiZWZvcmUgc3lzZnMgY3JlYXRpb24sIGNhdXNpbmcgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYGxpc3RfZGVsYCwgYW5kIHRoZSBlcnJvciBoYW5kbGluZyBqdW1wZWQgdG8gYGZyZWVfc3J2X3Nlc3NfZGV2YCB3aGljaCBmcmVlZCB0aGUgb2JqZWN0IGFnYWluLiBGdXp6aW5nIHRoaXMgZXJyb3IgcGF0aCBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIG5vIG90aGVyIHVzZS1hZnRlci1mcmVlIG9yIGxpc3QgY29ycnVwdGlvbnMgZXhpc3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow9gs8l[1] Phase: Succeeded StartedAt: 2026-07-14 18:40:12 +0000 UTC FinishedAt: 2026-07-14 18:40:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9gs8l[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-14 18:40:12 +0000 UTC FinishedAt: 2026-07-14 18:40:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9gs8l[2] Phase: Succeeded StartedAt: 2026-07-14 18:40:12 +0000 UTC FinishedAt: 2026-07-14 20:10:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9gs8l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["process_msg_open","rnbd_srv_create_dev_session_sysfs","rnbd_destroy_sess_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"dd7b64aa-5afb-4640-b43b-157120e75d41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-14 18:40:12 +0000 UTC FinishedAt: 2026-07-14 20:10:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["process_msg_open","rnbd_srv_create_dev_session_sysfs","rnbd_destroy_sess_dev"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"dd7b64aa-5afb-4640-b43b-157120e75d41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow9gs8l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["process_msg_open","rnbd_srv_create_dev_session_sysfs","rnbd_destroy_sess_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"dd7b64aa-5afb-4640-b43b-157120e75d41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-14 18:40:12 +0000 UTC FinishedAt: 2026-07-14 18:40:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9gs8l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["process_msg_open","rnbd_srv_create_dev_session_sysfs","rnbd_destroy_sess_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"dd7b64aa-5afb-4640-b43b-157120e75d41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-14 18:40:12 +0000 UTC FinishedAt: 2026-07-14 18:40:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9gs8l/series-workflow9gs8l-convert-artifact-796024534/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9gs8l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["process_msg_open","rnbd_srv_create_dev_session_sysfs","rnbd_destroy_sess_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"dd7b64aa-5afb-4640-b43b-157120e75d41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-14 18:40:33 +0000 UTC FinishedAt: 2026-07-14 19:18:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9gs8l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["process_msg_open","rnbd_srv_create_dev_session_sysfs","rnbd_destroy_sess_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"dd7b64aa-5afb-4640-b43b-157120e75d41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-14 18:40:33 +0000 UTC FinishedAt: 2026-07-14 19:18:15 +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:*4fdf3c1f-f144-4851-b44a-e8ade2534029,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-workflow9gs8l/series-workflow9gs8l-convert-artifact-796024534/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": "829d5d6e-0f8c-4411-af92-911e8f54623f", "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-workflow9gs8l/series-workflow9gs8l-build-action-1754741612/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9gs8l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["process_msg_open","rnbd_srv_create_dev_session_sysfs","rnbd_destroy_sess_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"dd7b64aa-5afb-4640-b43b-157120e75d41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-14 18:40:33 +0000 UTC FinishedAt: 2026-07-14 19:18:05 +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:*4fdf3c1f-f144-4851-b44a-e8ade2534029,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-workflow9gs8l/series-workflow9gs8l-convert-artifact-796024534/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": "829d5d6e-0f8c-4411-af92-911e8f54623f", "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-workflow9gs8l/series-workflow9gs8l-build-action-1754741612/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9gs8l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["process_msg_open","rnbd_srv_create_dev_session_sysfs","rnbd_destroy_sess_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"dd7b64aa-5afb-4640-b43b-157120e75d41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-14 19:18:15 +0000 UTC FinishedAt: 2026-07-14 19:18:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9gs8l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["process_msg_open","rnbd_srv_create_dev_session_sysfs","rnbd_destroy_sess_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"dd7b64aa-5afb-4640-b43b-157120e75d41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-14 19:18:15 +0000 UTC FinishedAt: 2026-07-14 19:18:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9gs8l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["process_msg_open","rnbd_srv_create_dev_session_sysfs","rnbd_destroy_sess_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"dd7b64aa-5afb-4640-b43b-157120e75d41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-14 19:18:15 +0000 UTC FinishedAt: 2026-07-14 19:18:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9gs8l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["process_msg_open","rnbd_srv_create_dev_session_sysfs","rnbd_destroy_sess_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"dd7b64aa-5afb-4640-b43b-157120e75d41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-14 19:18:15 +0000 UTC FinishedAt: 2026-07-14 19:18:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"dd7b64aa-5afb-4640-b43b-157120e75d41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9gs8l/series-workflow9gs8l-convert-artifact-3537001577/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9gs8l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["process_msg_open","rnbd_srv_create_dev_session_sysfs","rnbd_destroy_sess_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"dd7b64aa-5afb-4640-b43b-157120e75d41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-14 19:18:25 +0000 UTC FinishedAt: 2026-07-14 19:20:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9gs8l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["process_msg_open","rnbd_srv_create_dev_session_sysfs","rnbd_destroy_sess_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"dd7b64aa-5afb-4640-b43b-157120e75d41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-14 19:18:25 +0000 UTC FinishedAt: 2026-07-14 19:20:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*829d5d6e-0f8c-4411-af92-911e8f54623f,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-workflow9gs8l/series-workflow9gs8l-build-action-1754741612/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9gs8l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["process_msg_open","rnbd_srv_create_dev_session_sysfs","rnbd_destroy_sess_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"dd7b64aa-5afb-4640-b43b-157120e75d41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-14 19:20:51 +0000 UTC FinishedAt: 2026-07-14 19:20:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9gs8l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["process_msg_open","rnbd_srv_create_dev_session_sysfs","rnbd_destroy_sess_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"dd7b64aa-5afb-4640-b43b-157120e75d41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-14 19:20:51 +0000 UTC FinishedAt: 2026-07-14 19:20:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9gs8l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["process_msg_open","rnbd_srv_create_dev_session_sysfs","rnbd_destroy_sess_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"dd7b64aa-5afb-4640-b43b-157120e75d41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-14 19:20:51 +0000 UTC FinishedAt: 2026-07-14 20:06:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9gs8l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["process_msg_open","rnbd_srv_create_dev_session_sysfs","rnbd_destroy_sess_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"dd7b64aa-5afb-4640-b43b-157120e75d41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-14 19:20:51 +0000 UTC FinishedAt: 2026-07-14 20:06:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*4fdf3c1f-f144-4851-b44a-e8ade2534029,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-workflow9gs8l/series-workflow9gs8l-convert-artifact-3537001577/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": "db187751-ab57-4750-84df-8a405a9e0df1", "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-workflow9gs8l/series-workflow9gs8l-build-action-3733363781/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9gs8l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["process_msg_open","rnbd_srv_create_dev_session_sysfs","rnbd_destroy_sess_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"dd7b64aa-5afb-4640-b43b-157120e75d41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-14 19:20:51 +0000 UTC FinishedAt: 2026-07-14 20:06:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*4fdf3c1f-f144-4851-b44a-e8ade2534029,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-workflow9gs8l/series-workflow9gs8l-convert-artifact-3537001577/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": "db187751-ab57-4750-84df-8a405a9e0df1", "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-workflow9gs8l/series-workflow9gs8l-build-action-3733363781/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9gs8l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["process_msg_open","rnbd_srv_create_dev_session_sysfs","rnbd_destroy_sess_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"dd7b64aa-5afb-4640-b43b-157120e75d41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-14 20:06:50 +0000 UTC FinishedAt: 2026-07-14 20:06:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9gs8l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["process_msg_open","rnbd_srv_create_dev_session_sysfs","rnbd_destroy_sess_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"dd7b64aa-5afb-4640-b43b-157120e75d41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-14 20:06:50 +0000 UTC FinishedAt: 2026-07-14 20:06:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9gs8l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["process_msg_open","rnbd_srv_create_dev_session_sysfs","rnbd_destroy_sess_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"dd7b64aa-5afb-4640-b43b-157120e75d41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-14 20:06:50 +0000 UTC FinishedAt: 2026-07-14 20:08:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9gs8l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["process_msg_open","rnbd_srv_create_dev_session_sysfs","rnbd_destroy_sess_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"dd7b64aa-5afb-4640-b43b-157120e75d41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-14 20:06:50 +0000 UTC FinishedAt: 2026-07-14 20:08:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*db187751-ab57-4750-84df-8a405a9e0df1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9gs8l/series-workflow9gs8l-build-action-3733363781/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9gs8l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["process_msg_open","rnbd_srv_create_dev_session_sysfs","rnbd_destroy_sess_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"dd7b64aa-5afb-4640-b43b-157120e75d41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-14 20:08:56 +0000 UTC FinishedAt: 2026-07-14 20:10:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9gs8l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["process_msg_open","rnbd_srv_create_dev_session_sysfs","rnbd_destroy_sess_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"dd7b64aa-5afb-4640-b43b-157120e75d41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-14 20:08:56 +0000 UTC FinishedAt: 2026-07-14 20:10:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["process_msg_open","rnbd_srv_create_dev_session_sysfs","rnbd_destroy_sess_dev"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*829d5d6e-0f8c-4411-af92-911e8f54623f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*db187751-ab57-4750-84df-8a405a9e0df1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9gs8l/series-workflow9gs8l-build-action-1754741612/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9gs8l/series-workflow9gs8l-build-action-3733363781/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow9gs8l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["process_msg_open","rnbd_srv_create_dev_session_sysfs","rnbd_destroy_sess_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"dd7b64aa-5afb-4640-b43b-157120e75d41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-14 20:08:56 +0000 UTC FinishedAt: 2026-07-14 20:09:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9gs8l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["process_msg_open","rnbd_srv_create_dev_session_sysfs","rnbd_destroy_sess_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"dd7b64aa-5afb-4640-b43b-157120e75d41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-14 20:08:56 +0000 UTC FinishedAt: 2026-07-14 20:09:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["process_msg_open","rnbd_srv_create_dev_session_sysfs","rnbd_destroy_sess_dev"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9gs8l/series-workflow9gs8l-convert-artifact-288165566/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9gs8l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["process_msg_open","rnbd_srv_create_dev_session_sysfs","rnbd_destroy_sess_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"dd7b64aa-5afb-4640-b43b-157120e75d41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-14 20:08:56 +0000 UTC FinishedAt: 2026-07-14 20:08:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9gs8l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["process_msg_open","rnbd_srv_create_dev_session_sysfs","rnbd_destroy_sess_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"dd7b64aa-5afb-4640-b43b-157120e75d41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-14 20:08:56 +0000 UTC FinishedAt: 2026-07-14 20:08:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9gs8l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["process_msg_open","rnbd_srv_create_dev_session_sysfs","rnbd_destroy_sess_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"dd7b64aa-5afb-4640-b43b-157120e75d41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-14 20:08:56 +0000 UTC FinishedAt: 2026-07-14 20:08:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9gs8l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["process_msg_open","rnbd_srv_create_dev_session_sysfs","rnbd_destroy_sess_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"dd7b64aa-5afb-4640-b43b-157120e75d41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-14 20:09:06 +0000 UTC FinishedAt: 2026-07-14 20:10:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9gs8l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["process_msg_open","rnbd_srv_create_dev_session_sysfs","rnbd_destroy_sess_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ceb57c6bb70f552030509b3858b0d7091211ec9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RNBD_SERVER","BLK_DEV_RNBD_CLIENT"],"series_id":"dd7b64aa-5afb-4640-b43b-157120e75d41","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-14 20:09:06 +0000 UTC FinishedAt: 2026-07-14 20:10:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*829d5d6e-0f8c-4411-af92-911e8f54623f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*db187751-ab57-4750-84df-8a405a9e0df1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9gs8l/series-workflow9gs8l-build-action-1754741612/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9gs8l/series-workflow9gs8l-build-action-3733363781/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9gs8l/series-workflow9gs8l-convert-artifact-288165566/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}