Name: series-workflowcrhjb Phase: Succeeded StartedAt: 2026-08-28 17:12:10 +0000 UTC FinishedAt: 2026-08-28 21:46:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcrhjb[0] Phase: Succeeded StartedAt: 2026-08-28 17:12:10 +0000 UTC FinishedAt: 2026-08-28 18:03:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcrhjb[0].run-triage Phase: Succeeded StartedAt: 2026-08-28 17:12:10 +0000 UTC FinishedAt: 2026-08-28 18:03:41 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "44e96e364b04163ddddc8a24289cef4982b7e36e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_LOOP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "44e96e364b04163ddddc8a24289cef4982b7e36e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_LOOP" ], "series_id": "5c193f99-394b-4fc3-aba1-0640abeec313" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "lo_release", "loop_clr_fd", "lo_ioctl", "loop_control_ioctl" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTE9PUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xvX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7bG9vcF9jbHJfZmQmIzM0OywKICAgICYjMzQ7bG9faW9jdGwmIzM0OywKICAgICYjMzQ7bG9vcF9jb250cm9sX2lvY3RsJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZHJpdmVycy9ibG9jay9sb29wLmMgdG8gZGVmZXIgbG9vcCBkZXZpY2UgdGVhcmRvd24gKF9fbG9vcF9jbHJfZmQpIHRvIGEgd29ya3F1ZXVlIGl0ZW0gKGxvX2Nscl93b3JrKSByYXRoZXIgdGhhbiBleGVjdXRpbmcgaXQgc3luY2hyb25vdXNseSBpbiBsb19yZWxlYXNlLiBUaGUgY2hhbmdlcyBpbnZvbHZlIHdvcmtxdWV1ZSBzY2hlZHVsaW5nLCByZWZlcmVuY2UgY291bnRpbmcsIGFuZCBzeW5jaHJvbml6YXRpb24gKGRyYWluX3dvcmtxdWV1ZSwgZnJlZXplX3F1ZXVlLCBtdXRleCBsb2NraW5nKS4gTm8gdW5pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZXMsIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQW55IHBvdGVudGlhbCBidWdzIHJlc3VsdGluZyBmcm9tIHRoaXMgcGF0Y2ggKHN1Y2ggYXMgcmFjZSBjb25kaXRpb25zLCBkZWFkbG9ja3MsIHVzZS1hZnRlci1mcmVlLCBvciByZWZlcmVuY2UgY291bnQgbGVha3MpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIHNhbml0aXplcnMsIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGxvb3AgZGV2aWNlIHRlYXJkb3duIGxvZ2ljIGluIGRyaXZlcnMvYmxvY2svbG9vcC5jIHRvIGRlZmVyIGNsZWFyaW5nIHRoZSBiYWNraW5nIGZpbGUgYW5kIHJlbGVhc2luZyByZXNvdXJjZXMgKF9fbG9vcF9jbHJfZmQpIHRvIGEgd29ya3F1ZXVlIGNvbnRleHQgd2hlbiB0aGUgbG9vcCBkZXZpY2UgaXMgY2xvc2VkLiBUaGlzIGludHJvZHVjZXMgbmV3IGNvbmN1cnJlbmN5IGhhbmRsaW5nLCByZWZlcmVuY2UgY291bnRpbmcsIGFuZCBxdWV1ZSBkcmFpbmluZyBzZW1hbnRpY3Mgd2hpY2ggc2hvdWxkIGJlIGZ1enplZCBmb3IgcmFjZSBjb25kaXRpb25zLCBkZWFkbG9ja3MsIGFuZCBVQUZzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjU2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTc4NzU5ZmI3ZGNiOTdjYWRlMTE2MTNiYjAzNjNhMzBiNWFjOTg5M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDI4IDE3OjU2OjQ3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbG9vcC5jIGIvZHJpdmVycy9ibG9jay9sb29wLmNcbmluZGV4IDZmMTI5NzYwMzViMDkuLmUyNzAzZjBlZTc1ZDcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay9sb29wLmNcbkBAIC03NSw2ICYjNDM7NzUsNyBAQCBzdHJ1Y3QgbG9vcF9kZXZpY2Uge1xuIFx0c3RydWN0IGdlbmRpc2tcdFx0KmxvX2Rpc2s7XG4gXHRzdHJ1Y3QgbXV0ZXhcdFx0bG9fbXV0ZXg7XG4gXHRib29sXHRcdFx0aWRyX3Zpc2libGU7XG4mIzQzO1x0c3RydWN0IHdvcmtfc3RydWN0XHRsb19jbHJfd29yaztcbiB9O1xuIFxuIHN0cnVjdCBsb29wX2NtZCB7XG5AQCAtMTEzNCwxMyAmIzQzOzExMzUsMzUgQEAgc3RhdGljIGludCBsb29wX2NvbmZpZ3VyZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBibGtfbW9kZV90IG1vZGUsXG4gXHRyZXR1cm4gZXJyb3I7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbiYjNDM7c3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuJiM0MztcdHN0cnVjdCBsb29wX2RldmljZSAqbG8gPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGxvb3BfZGV2aWNlLCBsb19jbHJfd29yayk7XG4mIzQzO1x0c3RydWN0IGdlbmRpc2sgKmRpc2sgPSBsby1cdTAwM2Vsb19kaXNrO1xuIFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07XG4gXHRzdHJ1Y3QgZmlsZSAqZmlscDtcbiBcdGdmcF90IGdmcCA9IGxvLVx1MDAzZW9sZF9nZnBfbWFzaztcbiBcdGludCBlcnI7XG4gXG4mIzQzO1x0LyogU3RlcCAxOiBGbHVzaCBhbGwgb3V0c3RhbmRpbmcgSS9PLCB3aXRob3V0IG9wZW5fbXV0ZXggaGVsZC4gKi9cbiYjNDM7XHQvKlxuJiM0MztcdCAqIE5vdyB0aGF0IGxvb3BfcXVldWVfcnEoKSBzZWVzIGxvLVx1MDAzZWxvX3N0YXRlICE9IExvX2JvdW5kLFxuJiM0MztcdCAqIHdhaXQgZm9yIGFscmVhZHkgc3RhcnRlZCBsb29wX3F1ZXVlX3JxKCkgdG8gY29tcGxldGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3luY2hyb25pemVfcmN1KCk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBOb3cgdGhhdCBubyBtb3JlIHdvcmtzIGFyZSBzY2hlZHVsZWQgYnkgbG9vcF9xdWV1ZV9ycSgpLFxuJiM0MztcdCAqIHdhaXQgZm9yIGFscmVhZHkgc2NoZWR1bGVkIHdvcmtzIHRvIGNvbXBsZXRlLlxuJiM0MztcdCAqL1xuJiM0MztcdGRyYWluX3dvcmtxdWV1ZShsby1cdTAwM2V3b3JrcXVldWUpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTm93IHRoYXQgbm8gbW9yZSBBSU8gcmVxdWVzdHMgYXJlIHNjaGVkdWxlZCBieSBsb19yd19haW8oKSxcbiYjNDM7XHQgKiB3YWl0IGZvciBhbHJlYWR5IHN0YXJ0ZWQgQUlPIHRvIGNvbXBsZXRlLlxuJiM0MztcdCAqL1xuJiM0MztcdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShsby1cdTAwM2Vsb19xdWV1ZSwgYmxrX21xX2ZyZWV6ZV9xdWV1ZShsby1cdTAwM2Vsb19xdWV1ZSkpO1xuJiM0MztcbiYjNDM7XHQvKiBTdGVwIDI6IFBlcmZvcm0gcmVtYWluaW5nIGNsZWFudXAsIHdpdGggb3Blbl9tdXRleCBoZWxkLiAqL1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2ZGlzay1cdTAwM2VvcGVuX211dGV4KTtcbiYjNDM7XG4gXHRzcGluX2xvY2tfaXJxKFx1MDAyNmxvLVx1MDAzZWxvX2xvY2spO1xuIFx0ZmlscCA9IGxvLVx1MDAzZWxvX2JhY2tpbmdfZmlsZTtcbiBcdGxvLVx1MDAzZWxvX2JhY2tpbmdfZmlsZSA9IE5VTEw7XG5AQCAtMTE1MSwxMiAmIzQzOzExNzQsNyBAQCBzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4gXHRsby1cdTAwM2Vsb19zaXplbGltaXQgPSAwO1xuIFx0bWVtc2V0KGxvLVx1MDAzZWxvX2ZpbGVfbmFtZSwgMCwgTE9fTkFNRV9TSVpFKTtcbiBcbi1cdC8qXG4tXHQgKiBSZXNldCB0aGUgYmxvY2sgc2l6ZSB0byB0aGUgZGVmYXVsdC5cbi1cdCAqXG4tXHQgKiBObyBxdWV1ZSBmcmVlemluZyBuZWVkZWQgYmVjYXVzZSB0aGlzIGlzIGNhbGxlZCBmcm9tIHRoZSBmaW5hbFxuLVx0ICogLVx1MDAzZXJlbGVhc2UgY2FsbCBvbmx5LCBzbyB0aGVyZSBjYW4mIzM5O3QgYmUgYW55IG91dHN0YW5kaW5nIEkvTy5cbi1cdCAqL1xuJiM0MztcdC8qIFJlc2V0IHRoZSBibG9jayBzaXplIHRvIHRoZSBkZWZhdWx0LiAqL1xuIFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSk7XG4gXHRsaW0ubG9naWNhbF9ibG9ja19zaXplID0gU0VDVE9SX1NJWkU7XG4gXHRsaW0ucGh5c2ljYWxfYmxvY2tfc2l6ZSA9IFNFQ1RPUl9TSVpFO1xuQEAgLTExNjgsOCAmIzQzOzExODYsNiBAQCBzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4gXHQvKiBsZXQgdXNlci1zcGFjZSBrbm93IGFib3V0IHRoaXMgY2hhbmdlICovXG4gXHRrb2JqZWN0X3VldmVudChcdTAwMjZkaXNrX3RvX2Rldihsby1cdTAwM2Vsb19kaXNrKS1cdTAwM2Vrb2JqLCBLT0JKX0NIQU5HRSk7XG4gXHRtYXBwaW5nX3NldF9nZnBfbWFzayhmaWxwLVx1MDAzZWZfbWFwcGluZywgZ2ZwKTtcbi1cdC8qIFRoaXMgaXMgc2FmZTogb3BlbigpIGlzIHN0aWxsIGhvbGRpbmcgYSByZWZlcmVuY2UuICovXG4tXHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcbiBcbiBcdGRpc2tfZm9yY2VfbWVkaWFfY2hhbmdlKGxvLVx1MDAzZWxvX2Rpc2spO1xuIFxuQEAgLTExOTksMTIgJiM0MzsxMjE1LDI0IEBAIHN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbiBcdFdSSVRFX09OQ0UobG8tXHUwMDNlbG9fc3RhdGUsIExvX3VuYm91bmQpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxvLVx1MDAzZWxvX211dGV4KTtcbiBcbiYjNDM7XHQvKiBTdGVwIDM6IERyb3AgcmVmY291bnRzLCB3aXRob3V0IG9wZW5fbXV0ZXggaGVsZC4gKi9cbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2ZGlzay1cdTAwM2VvcGVuX211dGV4KTtcbiYjNDM7XG4mIzQzO1x0ZnB1dChmaWxwKTtcbiYjNDM7XG4gXHQvKlxuLVx0ICogTmVlZCBub3QgaG9sZCBsb19tdXRleCB0byBmcHV0IGJhY2tpbmcgZmlsZS4gQ2FsbGluZyBmcHV0IGhvbGRpbmdcbi1cdCAqIGxvX211dGV4IHRyaWdnZXJzIGEgY2lyY3VsYXIgbG9jayBkZXBlbmRlbmN5IHBvc3NpYmlsaXR5IHdhcm5pbmcgYXNcbi1cdCAqIGZwdXQgY2FuIHRha2Ugb3Blbl9tdXRleCB3aGljaCBpcyB1c3VhbGx5IHRha2VuIGJlZm9yZSBsb19tdXRleC5cbiYjNDM7XHQgKiBEcm9wIGFsbCByZWZlcmVuY2VzIHRoYXQgd291bGQgaGF2ZSBiZWVuIGRyb3BwZWQgYXMgc29vbiBhc1xuJiM0MztcdCAqIHJldHVybmluZyBmcm9tIGxvX3JlbGVhc2UoKSBhbmQgcmVsZWFzaW5nIGRpc2stXHUwMDNlb3Blbl9tdXRleC5cbiBcdCAqL1xuLVx0ZnB1dChmaWxwKTtcbiYjNDM7XHRtb2R1bGVfcHV0KGRpc2stXHUwMDNlZm9wcy1cdTAwM2Vvd25lcik7XG4mIzQzO1x0cHV0X2RldmljZShkaXNrX3RvX2RldihkaXNrKSk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhpcyBpcyBzYWZlOiBmbHVzaF93b3JrKCkgZnJvbSBsb29wX3JlbW92ZSgpIGZyb20gbG9vcF9leGl0KCkgd2FpdHNcbiYjNDM7XHQgKiB1bnRpbCB0aGlzIGZ1bmN0aW9uIHJldHVybnM7IGVmZmVjdGl2ZWx5IGRyb3BwaW5nIHRoZSBmaW5hbCBtb2R1bGVcbiYjNDM7XHQgKiByZWZlcmVuY2VzIHN5bmNocm9ub3VzbHkuXG4mIzQzO1x0ICovXG4mIzQzO1x0bW9kdWxlX3B1dChUSElTX01PRFVMRSk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbkBAIC0xNzY5LDggJiM0MzsxNzk3LDIwIEBAIHN0YXRpYyB2b2lkIGxvX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4gXHRuZWVkX2NsZWFyID0gKGxvLVx1MDAzZWxvX3N0YXRlID09IExvX3J1bmRvd24pO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxvLVx1MDAzZWxvX211dGV4KTtcbiBcbi1cdGlmIChuZWVkX2NsZWFyKVxuLVx0XHRfX2xvb3BfY2xyX2ZkKGxvKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEluIG9yZGVyIHRvIGZsdXNoIHBlbmRpbmcgSS9PIHJlcXVlc3RzIGJlZm9yZSBjbGVhcmluZyB0aGUgYmFja2luZ1xuJiM0MztcdCAqIGRldmljZSwgZGVmZXIgX19sb29wX2Nscl9mZCgpIHRvIFdRIGNvbnRleHQuIFRoZSBMb19ydW5kb3duIHN0YXRlXG4mIzQzO1x0ICogZ3VhcmFudGVlcyB0aGF0IGxvX29wZW4oKSB3aWxsIGZhaWwgd2l0aCAtRU5YSU8uXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKG5lZWRfY2xlYXIpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBHcmFiIGFsbCByZWZlcmVuY2VzIHRoYXQgd2lsbCBiZSBkcm9wcGVkIGFzIHNvb24gYXNcbiYjNDM7XHRcdCAqIHJldHVybmluZyBmcm9tIGxvX3JlbGVhc2UoKSBhbmQgcmVsZWFzaW5nIGRpc2stXHUwMDNlb3Blbl9tdXRleC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0Z2V0X2RldmljZShkaXNrX3RvX2RldihkaXNrKSk7XG4mIzQzO1x0XHRfX21vZHVsZV9nZXQoZGlzay1cdTAwM2Vmb3BzLVx1MDAzZW93bmVyKTtcbiYjNDM7XHRcdHF1ZXVlX3dvcmsoc3lzdGVtX2xvbmdfd3EsIFx1MDAyNmxvLVx1MDAzZWxvX2Nscl93b3JrKTtcbiYjNDM7XHR9XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGxvX2ZyZWVfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbkBAIC0yMDM0LDYgJiM0MzsyMDc0LDcgQEAgc3RhdGljIGludCBsb29wX2FkZChpbnQgaSlcbiBcdGxvID0ga3phbGxvY19vYmooKmxvKTtcbiBcdGlmICghbG8pXG4gXHRcdGdvdG8gb3V0O1xuJiM0MztcdElOSVRfV09SSyhcdTAwMjZsby1cdTAwM2Vsb19jbHJfd29yaywgX19sb29wX2Nscl9mZCk7XG4gXHRsby1cdTAwM2V3b3JrZXJfdHJlZSA9IFJCX1JPT1Q7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZsby1cdTAwM2VpZGxlX3dvcmtlcl9saXN0KTtcbiBcdHRpbWVyX3NldHVwKFx1MDAyNmxvLVx1MDAzZXRpbWVyLCBsb29wX2ZyZWVfaWRsZV93b3JrZXJzX3RpbWVyLCBUSU1FUl9ERUZFUlJBQkxFKTtcbkBAIC0yMTM4LDYgJiM0MzsyMTc5LDkgQEAgc3RhdGljIGludCBsb29wX2FkZChpbnQgaSlcbiBcbiBzdGF0aWMgdm9pZCBsb29wX3JlbW92ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuIHtcbiYjNDM7XHQvKiBXYWl0IGZvciBfX2xvb3BfY2xyX2ZkKCkgdG8gY29tcGxldGUuICovXG4mIzQzO1x0Zmx1c2hfd29yayhcdTAwMjZsby1cdTAwM2Vsb19jbHJfd29yayk7XG4mIzQzO1xuIFx0LyogTWFrZSB0aGlzIGxvb3AgZGV2aWNlIHVucmVhY2hhYmxlIGZyb20gcGF0aG5hbWUuICovXG4gXHRkZWxfZ2VuZGlzayhsby1cdTAwM2Vsb19kaXNrKTtcbiBcdGJsa19tcV9mcmVlX3RhZ19zZXQoXHUwMDI2bG8tXHUwMDNldGFnX3NldCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTc6NTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9MT09QJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bG9fcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtsb29wX2Nscl9mZCYjMzQ7LAogICAgJiMzNDtsb19pb2N0bCYjMzQ7LAogICAgJiMzNDtsb29wX2NvbnRyb2xfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbG9vcCBkZXZpY2UgdGVhcmRvd24gbG9naWMgaW4gZHJpdmVycy9ibG9jay9sb29wLmMgdG8gZGVmZXIgY2xlYXJpbmcgdGhlIGJhY2tpbmcgZmlsZSBhbmQgcmVsZWFzaW5nIHJlc291cmNlcyAoX19sb29wX2Nscl9mZCkgdG8gYSB3b3JrcXVldWUgY29udGV4dCB3aGVuIHRoZSBsb29wIGRldmljZSBpcyBjbG9zZWQuIFRoaXMgaW50cm9kdWNlcyBuZXcgY29uY3VycmVuY3kgaGFuZGxpbmcsIHJlZmVyZW5jZSBjb3VudGluZywgYW5kIHF1ZXVlIGRyYWluaW5nIHNlbWFudGljcyB3aGljaCBzaG91bGQgYmUgZnV6emVkIGZvciByYWNlIGNvbmRpdGlvbnMsIGRlYWRsb2NrcywgYW5kIFVBRnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxNzg3NTlmYjdkY2I5N2NhZGUxMTYxM2JiMDM2M2EzMGI1YWM5ODkzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMjggMTc6NTY6NDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCmluZGV4IDZmMTI5NzYwMzViMDkuLmUyNzAzZjBlZTc1ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCkBAIC03NSw2ICYjNDM7NzUsNyBAQCBzdHJ1Y3QgbG9vcF9kZXZpY2UgewogCXN0cnVjdCBnZW5kaXNrCQkqbG9fZGlzazsKIAlzdHJ1Y3QgbXV0ZXgJCWxvX211dGV4OwogCWJvb2wJCQlpZHJfdmlzaWJsZTsKJiM0MzsJc3RydWN0IHdvcmtfc3RydWN0CWxvX2Nscl93b3JrOwogfTsKIAogc3RydWN0IGxvb3BfY21kIHsKQEAgLTExMzQsMTMgJiM0MzsxMTM1LDM1IEBAIHN0YXRpYyBpbnQgbG9vcF9jb25maWd1cmUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgYmxrX21vZGVfdCBtb2RlLAogCXJldHVybiBlcnJvcjsKIH0KIAotc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKQomIzQzO3N0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewomIzQzOwlzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBsb29wX2RldmljZSwgbG9fY2xyX3dvcmspOwomIzQzOwlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGxvLSZndDtsb19kaXNrOwogCXN0cnVjdCBxdWV1ZV9saW1pdHMgbGltOwogCXN0cnVjdCBmaWxlICpmaWxwOwogCWdmcF90IGdmcCA9IGxvLSZndDtvbGRfZ2ZwX21hc2s7CiAJaW50IGVycjsKIAomIzQzOwkvKiBTdGVwIDE6IEZsdXNoIGFsbCBvdXRzdGFuZGluZyBJL08sIHdpdGhvdXQgb3Blbl9tdXRleCBoZWxkLiAqLwomIzQzOwkvKgomIzQzOwkgKiBOb3cgdGhhdCBsb29wX3F1ZXVlX3JxKCkgc2VlcyBsby0mZ3Q7bG9fc3RhdGUgIT0gTG9fYm91bmQsCiYjNDM7CSAqIHdhaXQgZm9yIGFscmVhZHkgc3RhcnRlZCBsb29wX3F1ZXVlX3JxKCkgdG8gY29tcGxldGUuCiYjNDM7CSAqLwomIzQzOwlzeW5jaHJvbml6ZV9yY3UoKTsKJiM0MzsJLyoKJiM0MzsJICogTm93IHRoYXQgbm8gbW9yZSB3b3JrcyBhcmUgc2NoZWR1bGVkIGJ5IGxvb3BfcXVldWVfcnEoKSwKJiM0MzsJICogd2FpdCBmb3IgYWxyZWFkeSBzY2hlZHVsZWQgd29ya3MgdG8gY29tcGxldGUuCiYjNDM7CSAqLwomIzQzOwlkcmFpbl93b3JrcXVldWUobG8tJmd0O3dvcmtxdWV1ZSk7CiYjNDM7CS8qCiYjNDM7CSAqIE5vdyB0aGF0IG5vIG1vcmUgQUlPIHJlcXVlc3RzIGFyZSBzY2hlZHVsZWQgYnkgbG9fcndfYWlvKCksCiYjNDM7CSAqIHdhaXQgZm9yIGFscmVhZHkgc3RhcnRlZCBBSU8gdG8gY29tcGxldGUuCiYjNDM7CSAqLwomIzQzOwlibGtfbXFfdW5mcmVlemVfcXVldWUobG8tJmd0O2xvX3F1ZXVlLCBibGtfbXFfZnJlZXplX3F1ZXVlKGxvLSZndDtsb19xdWV1ZSkpOwomIzQzOwomIzQzOwkvKiBTdGVwIDI6IFBlcmZvcm0gcmVtYWluaW5nIGNsZWFudXAsIHdpdGggb3Blbl9tdXRleCBoZWxkLiAqLwomIzQzOwltdXRleF9sb2NrKCZhbXA7ZGlzay0mZ3Q7b3Blbl9tdXRleCk7CiYjNDM7CiAJc3Bpbl9sb2NrX2lycSgmYW1wO2xvLSZndDtsb19sb2NrKTsKIAlmaWxwID0gbG8tJmd0O2xvX2JhY2tpbmdfZmlsZTsKIAlsby0mZ3Q7bG9fYmFja2luZ19maWxlID0gTlVMTDsKQEAgLTExNTEsMTIgJiM0MzsxMTc0LDcgQEAgc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKQogCWxvLSZndDtsb19zaXplbGltaXQgPSAwOwogCW1lbXNldChsby0mZ3Q7bG9fZmlsZV9uYW1lLCAwLCBMT19OQU1FX1NJWkUpOwogCi0JLyoKLQkgKiBSZXNldCB0aGUgYmxvY2sgc2l6ZSB0byB0aGUgZGVmYXVsdC4KLQkgKgotCSAqIE5vIHF1ZXVlIGZyZWV6aW5nIG5lZWRlZCBiZWNhdXNlIHRoaXMgaXMgY2FsbGVkIGZyb20gdGhlIGZpbmFsCi0JICogLSZndDtyZWxlYXNlIGNhbGwgb25seSwgc28gdGhlcmUgY2FuJiMzOTt0IGJlIGFueSBvdXRzdGFuZGluZyBJL08uCi0JICovCiYjNDM7CS8qIFJlc2V0IHRoZSBibG9jayBzaXplIHRvIHRoZSBkZWZhdWx0LiAqLwogCWxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tJmd0O2xvX3F1ZXVlKTsKIAlsaW0ubG9naWNhbF9ibG9ja19zaXplID0gU0VDVE9SX1NJWkU7CiAJbGltLnBoeXNpY2FsX2Jsb2NrX3NpemUgPSBTRUNUT1JfU0laRTsKQEAgLTExNjgsOCAmIzQzOzExODYsNiBAQCBzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pCiAJLyogbGV0IHVzZXItc3BhY2Uga25vdyBhYm91dCB0aGlzIGNoYW5nZSAqLwogCWtvYmplY3RfdWV2ZW50KCZhbXA7ZGlza190b19kZXYobG8tJmd0O2xvX2Rpc2spLSZndDtrb2JqLCBLT0JKX0NIQU5HRSk7CiAJbWFwcGluZ19zZXRfZ2ZwX21hc2soZmlscC0mZ3Q7Zl9tYXBwaW5nLCBnZnApOwotCS8qIFRoaXMgaXMgc2FmZTogb3BlbigpIGlzIHN0aWxsIGhvbGRpbmcgYSByZWZlcmVuY2UuICovCi0JbW9kdWxlX3B1dChUSElTX01PRFVMRSk7CiAKIAlkaXNrX2ZvcmNlX21lZGlhX2NoYW5nZShsby0mZ3Q7bG9fZGlzayk7CiAKQEAgLTExOTksMTIgJiM0MzsxMjE1LDI0IEBAIHN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbykKIAlXUklURV9PTkNFKGxvLSZndDtsb19zdGF0ZSwgTG9fdW5ib3VuZCk7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7bG8tJmd0O2xvX211dGV4KTsKIAomIzQzOwkvKiBTdGVwIDM6IERyb3AgcmVmY291bnRzLCB3aXRob3V0IG9wZW5fbXV0ZXggaGVsZC4gKi8KJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7ZGlzay0mZ3Q7b3Blbl9tdXRleCk7CiYjNDM7CiYjNDM7CWZwdXQoZmlscCk7CiYjNDM7CiAJLyoKLQkgKiBOZWVkIG5vdCBob2xkIGxvX211dGV4IHRvIGZwdXQgYmFja2luZyBmaWxlLiBDYWxsaW5nIGZwdXQgaG9sZGluZwotCSAqIGxvX211dGV4IHRyaWdnZXJzIGEgY2lyY3VsYXIgbG9jayBkZXBlbmRlbmN5IHBvc3NpYmlsaXR5IHdhcm5pbmcgYXMKLQkgKiBmcHV0IGNhbiB0YWtlIG9wZW5fbXV0ZXggd2hpY2ggaXMgdXN1YWxseSB0YWtlbiBiZWZvcmUgbG9fbXV0ZXguCiYjNDM7CSAqIERyb3AgYWxsIHJlZmVyZW5jZXMgdGhhdCB3b3VsZCBoYXZlIGJlZW4gZHJvcHBlZCBhcyBzb29uIGFzCiYjNDM7CSAqIHJldHVybmluZyBmcm9tIGxvX3JlbGVhc2UoKSBhbmQgcmVsZWFzaW5nIGRpc2stJmd0O29wZW5fbXV0ZXguCiAJICovCi0JZnB1dChmaWxwKTsKJiM0MzsJbW9kdWxlX3B1dChkaXNrLSZndDtmb3BzLSZndDtvd25lcik7CiYjNDM7CXB1dF9kZXZpY2UoZGlza190b19kZXYoZGlzaykpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUaGlzIGlzIHNhZmU6IGZsdXNoX3dvcmsoKSBmcm9tIGxvb3BfcmVtb3ZlKCkgZnJvbSBsb29wX2V4aXQoKSB3YWl0cwomIzQzOwkgKiB1bnRpbCB0aGlzIGZ1bmN0aW9uIHJldHVybnM7IGVmZmVjdGl2ZWx5IGRyb3BwaW5nIHRoZSBmaW5hbCBtb2R1bGUKJiM0MzsJICogcmVmZXJlbmNlcyBzeW5jaHJvbm91c2x5LgomIzQzOwkgKi8KJiM0MzsJbW9kdWxlX3B1dChUSElTX01PRFVMRSk7CiB9CiAKIHN0YXRpYyBpbnQgbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbykKQEAgLTE3NjksOCAmIzQzOzE3OTcsMjAgQEAgc3RhdGljIHZvaWQgbG9fcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKIAluZWVkX2NsZWFyID0gKGxvLSZndDtsb19zdGF0ZSA9PSBMb19ydW5kb3duKTsKIAltdXRleF91bmxvY2soJmFtcDtsby0mZ3Q7bG9fbXV0ZXgpOwogCi0JaWYgKG5lZWRfY2xlYXIpCi0JCV9fbG9vcF9jbHJfZmQobG8pOwomIzQzOwkvKgomIzQzOwkgKiBJbiBvcmRlciB0byBmbHVzaCBwZW5kaW5nIEkvTyByZXF1ZXN0cyBiZWZvcmUgY2xlYXJpbmcgdGhlIGJhY2tpbmcKJiM0MzsJICogZGV2aWNlLCBkZWZlciBfX2xvb3BfY2xyX2ZkKCkgdG8gV1EgY29udGV4dC4gVGhlIExvX3J1bmRvd24gc3RhdGUKJiM0MzsJICogZ3VhcmFudGVlcyB0aGF0IGxvX29wZW4oKSB3aWxsIGZhaWwgd2l0aCAtRU5YSU8uCiYjNDM7CSAqLwomIzQzOwlpZiAobmVlZF9jbGVhcikgewomIzQzOwkJLyoKJiM0MzsJCSAqIEdyYWIgYWxsIHJlZmVyZW5jZXMgdGhhdCB3aWxsIGJlIGRyb3BwZWQgYXMgc29vbiBhcwomIzQzOwkJICogcmV0dXJuaW5nIGZyb20gbG9fcmVsZWFzZSgpIGFuZCByZWxlYXNpbmcgZGlzay0mZ3Q7b3Blbl9tdXRleC4KJiM0MzsJCSAqLwomIzQzOwkJZ2V0X2RldmljZShkaXNrX3RvX2RldihkaXNrKSk7CiYjNDM7CQlfX21vZHVsZV9nZXQoZGlzay0mZ3Q7Zm9wcy0mZ3Q7b3duZXIpOwomIzQzOwkJcXVldWVfd29yayhzeXN0ZW1fbG9uZ193cSwgJmFtcDtsby0mZ3Q7bG9fY2xyX3dvcmspOwomIzQzOwl9CiB9CiAKIHN0YXRpYyB2b2lkIGxvX2ZyZWVfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKQEAgLTIwMzQsNiAmIzQzOzIwNzQsNyBAQCBzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKQogCWxvID0ga3phbGxvY19vYmooKmxvKTsKIAlpZiAoIWxvKQogCQlnb3RvIG91dDsKJiM0MzsJSU5JVF9XT1JLKCZhbXA7bG8tJmd0O2xvX2Nscl93b3JrLCBfX2xvb3BfY2xyX2ZkKTsKIAlsby0mZ3Q7d29ya2VyX3RyZWUgPSBSQl9ST09UOwogCUlOSVRfTElTVF9IRUFEKCZhbXA7bG8tJmd0O2lkbGVfd29ya2VyX2xpc3QpOwogCXRpbWVyX3NldHVwKCZhbXA7bG8tJmd0O3RpbWVyLCBsb29wX2ZyZWVfaWRsZV93b3JrZXJzX3RpbWVyLCBUSU1FUl9ERUZFUlJBQkxFKTsKQEAgLTIxMzgsNiAmIzQzOzIxNzksOSBAQCBzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKQogCiBzdGF0aWMgdm9pZCBsb29wX3JlbW92ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKQogewomIzQzOwkvKiBXYWl0IGZvciBfX2xvb3BfY2xyX2ZkKCkgdG8gY29tcGxldGUuICovCiYjNDM7CWZsdXNoX3dvcmsoJmFtcDtsby0mZ3Q7bG9fY2xyX3dvcmspOwomIzQzOwogCS8qIE1ha2UgdGhpcyBsb29wIGRldmljZSB1bnJlYWNoYWJsZSBmcm9tIHBhdGhuYW1lLiAqLwogCWRlbF9nZW5kaXNrKGxvLSZndDtsb19kaXNrKTsKIAlibGtfbXFfZnJlZV90YWdfc2V0KCZhbXA7bG8tJmd0O3RhZ19zZXQpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjg3CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgYXMgaWYgSSYjMzk7bSByZWZsZWN0aW5nIG9uIHRoZW0gbXlzZWxmLCBhcyBhbiBleHBlcnQgaW4gbXkgZmllbGQ6CgoqKkFuYWx5emluZyBhIEtlcm5lbCBMb29wIERldmljZSBQYXRjaCoqCgpBbHJpZ2h0LCBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0JiMzOTtzIHRvdWNoaW5nIGBkcml2ZXJzL2Jsb2NrL2xvb3AuY2AuIEltbWVkaWF0ZWx5LCBteSBtZW50YWwgZ2VhcnMgc3RhcnQgdHVybmluZy4gRmlyc3QgdGhpbmdzIGZpcnN0OiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBwYXRjaCBpdHNlbGYuIEkgd2FudCB0byB1bmRlcnN0YW5kICpwcmVjaXNlbHkqIHdoYXQgY2hhbmdlcyBhcmUgYmVpbmcgbWFkZSB0byB0aGF0IGxvb3AgZGV2aWNlIGNvZGUuIFdoYXQmIzM5O3MgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBiZWluZyBhbHRlcmVkPyBBcmUgdGhlcmUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zPyBTZWN1cml0eSBjb25zaWRlcmF0aW9ucz8KCkJleW9uZCB0aGUgY29kZSBpdHNlbGYsIEkgaGF2ZSB0byBjb25zaWRlciB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnksIG9yIGNoZWNrIGRpcmVjdGx5LCB3aGF0IEtjb25maWcgb3B0aW9ucyBhcmUgcmVsYXRlZCB0byB0aGUgbG9vcCBkZXZpY2UuIFdoYXQgY2FuIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQ/IEhvdyBkb2VzIHRoaXMgcGF0Y2ggaW50ZXJhY3Qgd2l0aCB0aG9zZSBvcHRpb25zPyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIHNvbWUgcXVpY2sgZ3JlcHMgdGhyb3VnaCB0aGUgS2NvbmZpZyBmaWxlcywgb3IgZ28gc3RyYWlnaHQgdG8gYnJvd3NpbmcgdGhlIHJlbGV2YW50IGZpbGVzLCB0byBxdWlja2x5IGdldCB0aGUgYmlnZ2VyIHBpY3R1cmUsIGFuZCBzZWUgaG93IHRoaXMgY2hhbmdlIHdpbGwgZWZmZWN0IGV2ZXJ5dGhpbmcuIEl0JiMzOTtzIGFsbCBhYm91dCBjb250ZXh0LCBhbmQgdW5kZXJzdGFuZGluZyB0aGUgY29tcGlsZS10aW1lIGxhbmRzY2FwZSBmb3IgdGhlIGxvb3AgZGV2aWNlIGlzIGNyaXRpY2FsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JMS19ERVZfTE9PUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnPTE0MD1jb25maWcgQkxLX0RFVl9DT1dfQ09NTU9OXG4tLVxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE0My1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoxNDQ6Y29uZmlnIEJMS19ERVZfTE9PUFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE0NS1cdHRyaXN0YXRlIFwmIzM0O0xvb3BiYWNrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE3OC1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoxNzk6Y29uZmlnIEJMS19ERVZfTE9PUF9NSU5fQ09VTlRcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xODAtXHRpbnQgXCYjMzQ7TnVtYmVyIG9mIGxvb3AgZGV2aWNlcyB0byBwcmUtY3JlYXRlIGF0IGluaXQgdGltZVwmIzM0O1xuZHJpdmVycy9ibG9jay9LY29uZmlnOjE4MTpcdGRlcGVuZHMgb24gQkxLX0RFVl9MT09QXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTgyLVx0ZGVmYXVsdCA4XG4tLVxuZHJpdmVycy9ibG9jay9NYWtlZmlsZT0yMT1vYmotJChDT05GSUdfQkxLX0RFVl9SQU0pXHQmIzQzOz0gYnJkLm9cbmRyaXZlcnMvYmxvY2svTWFrZWZpbGU6MjI6b2JqLSQoQ09ORklHX0JMS19ERVZfTE9PUClcdCYjNDM7PSBsb29wLm9cbmRyaXZlcnMvYmxvY2svTWFrZWZpbGUtMjMtb2JqLSQoQ09ORklHX1NVTlZEQylcdFx0JiM0Mzs9IHN1bnZkYy5vXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MTgyOD1zdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGxvX2ZvcHMgPSB7XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTg0Ny0gKiBjaGFuZ2VkIHRoZSBkZWZhdWx0IHZhbHVlIGZyb20gMCBmb3IgbWF4X2xvb3A9MCByZWFzb25zKSwganVzdFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTg0ODogKiBjcmVhdGUgQ09ORklHX0JMS19ERVZfTE9PUF9NSU5fQ09VTlQgbG9vcCBkZXZpY2VzIGF0IG1vZHVsZVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTg0OS0gKiBpbml0IHRpbWUuIExvb3AgZGV2aWNlcyBjYW4gYmUgcmVxdWVzdGVkIG9uLWRlbWFuZCB3aXRoIHRoZVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4NTItICovXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxODUzOnN0YXRpYyBpbnQgbWF4X2xvb3AgPSBDT05GSUdfQkxLX0RFVl9MT09QX01JTl9DT1VOVDtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4NTQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTc6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ1NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkxvb3AgRGV2aWNlIENsZWFuLXVwIGFuZCBJT0NUTHM6IEEgQ2xvc2VyIExvb2sqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgZ3V0cyBvZiB0aGUgbG9vcCBkZXZpY2UgZHJpdmVyLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgYWxsIHdvcmtzLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSByZWxlYXNlIHByb2Nlc3MuIEkmIzM5O20gdGhpbmtpbmcsIGxldCYjMzk7cyBzdGFydCB3aXRoIGBkcml2ZXJzL2Jsb2NrL2xvb3AuY2AgYW5kIHplcm8gaW4gb24gdGhlIGBsb19yZWxlYXNlYCwgYGxvb3BfY2xyX2ZkYCwgYW5kIGBfX2xvb3BfY2xyX2ZkYCBmdW5jdGlvbnMuIFRob3NlIHNlZW0gbGlrZSB0aGUga2V5IHBsYXllcnMgd2hlbiBhIGxvb3AgZGV2aWNlIGlzIGJlaW5nIHRvcm4gZG93biwgcmlnaHQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzZXF1ZW5jaW5nIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHRoZXJlLiBBbmQsIG9mIGNvdXJzZSwgdGhlIGlvY3RsIGVudHJ5cG9pbnRzIGFyZSBhbHdheXMgaW50ZXJlc3Rpbmcg4oCTIGdvdHRhIHNlZSBob3cgd2UgZXhwb3NlIGZ1bmN0aW9uYWxpdHkgYW5kIGhhbmRsZSB1c2VyLXNwYWNlIGludGVyYWN0aW9ucy4gTGV0IG1lIHNjYW4gdGhvc2UgZnVuY3Rpb25zIGFuZCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG9idmlvdXMgZmxhd3Mgb3IgYXJlYXMgcmlwZSBmb3IgaW1wcm92ZW1lbnQuIFRoaXMgYXJlYSBoYXMgYmVlbiBzdGFibGUgZm9yIGEgd2hpbGUsIGJ1dCBpdCYjMzk7cyBhbHdheXMgZ29vZCB0byByZXZpc2l0IHRoZSBjb3JlIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9sb29wLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3ODA6XHRzdGF0aWMgdm9pZCBsb19yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuMTc4MTpcdHtcbjE3ODI6XHRcdHN0cnVjdCBsb29wX2RldmljZSAqbG8gPSBkaXNrLVx1MDAzZXByaXZhdGVfZGF0YTtcbjE3ODM6XHRcdGJvb2wgbmVlZF9jbGVhciA9IGZhbHNlO1xuMTc4NDpcdFxuMTc4NTpcdFx0aWYgKGRpc2tfb3BlbmVycyhkaXNrKSBcdTAwM2UgMClcbjE3ODY6XHRcdFx0cmV0dXJuO1xuMTc4NzpcdFx0LypcbjE3ODg6XHRcdCAqIENsZWFyIHRoZSBiYWNraW5nIGRldmljZSBpbmZvcm1hdGlvbiBpZiB0aGlzIGlzIHRoZSBsYXN0IGNsb3NlIG9mXG4xNzg5Olx0XHQgKiBhIGRldmljZSB0aGF0JiMzOTtzIGJlZW4gbWFya2VkIGZvciBhdXRvIGNsZWFyLCBvciBvbiB3aGljaCBMT09QX0NMUl9GRFxuMTc5MDpcdFx0ICogaGFzIGJlZW4gY2FsbGVkLlxuMTc5MTpcdFx0ICovXG4xNzkyOlx0XG4xNzkzOlx0XHRtdXRleF9sb2NrKFx1MDAyNmxvLVx1MDAzZWxvX211dGV4KTtcbjE3OTQ6XHRcdGlmIChsby1cdTAwM2Vsb19zdGF0ZSA9PSBMb19ib3VuZCBcdTAwMjZcdTAwMjYgKGxvLVx1MDAzZWxvX2ZsYWdzIFx1MDAyNiBMT19GTEFHU19BVVRPQ0xFQVIpKVxuMTc5NTpcdFx0XHRXUklURV9PTkNFKGxvLVx1MDAzZWxvX3N0YXRlLCBMb19ydW5kb3duKTtcbjE3OTY6XHRcbjE3OTc6XHRcdG5lZWRfY2xlYXIgPSAobG8tXHUwMDNlbG9fc3RhdGUgPT0gTG9fcnVuZG93bik7XG4xNzk4Olx0XHRtdXRleF91bmxvY2soXHUwMDI2bG8tXHUwMDNlbG9fbXV0ZXgpO1xuMTc5OTpcdFxuMTgwMDpcdFx0LypcbjE4MDE6XHRcdCAqIEluIG9yZGVyIHRvIGZsdXNoIHBlbmRpbmcgSS9PIHJlcXVlc3RzIGJlZm9yZSBjbGVhcmluZyB0aGUgYmFja2luZ1xuMTgwMjpcdFx0ICogZGV2aWNlLCBkZWZlciBfX2xvb3BfY2xyX2ZkKCkgdG8gV1EgY29udGV4dC4gVGhlIExvX3J1bmRvd24gc3RhdGVcbjE4MDM6XHRcdCAqIGd1YXJhbnRlZXMgdGhhdCBsb19vcGVuKCkgd2lsbCBmYWlsIHdpdGggLUVOWElPLlxuMTgwNDpcdFx0ICovXG4xODA1Olx0XHRpZiAobmVlZF9jbGVhcikge1xuMTgwNjpcdFx0XHQvKlxuMTgwNzpcdFx0XHQgKiBHcmFiIGFsbCByZWZlcmVuY2VzIHRoYXQgd2lsbCBiZSBkcm9wcGVkIGFzIHNvb24gYXNcbjE4MDg6XHRcdFx0ICogcmV0dXJuaW5nIGZyb20gbG9fcmVsZWFzZSgpIGFuZCByZWxlYXNpbmcgZGlzay1cdTAwM2VvcGVuX211dGV4LlxuMTgwOTpcdFx0XHQgKi9cbjE4MTA6XHRcdFx0Z2V0X2RldmljZShkaXNrX3RvX2RldihkaXNrKSk7XG4xODExOlx0XHRcdF9fbW9kdWxlX2dldChkaXNrLVx1MDAzZWZvcHMtXHUwMDNlb3duZXIpO1xuMTgxMjpcdFx0XHRxdWV1ZV93b3JrKHN5c3RlbV9sb25nX3dxLCBcdTAwMjZsby1cdTAwM2Vsb19jbHJfd29yayk7XG4xODEzOlx0XHR9XG4xODE0Olx0fVxuMTgxNTpcdFxuMTgxNjpcdHN0YXRpYyB2b2lkIGxvX2ZyZWVfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbjE4MTc6XHR7XG4xODE4Olx0XHRzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvID0gZGlzay1cdTAwM2Vwcml2YXRlX2RhdGE7XG4xODE5Olx0XG4xODIwOlx0XHRpZiAobG8tXHUwMDNld29ya3F1ZXVlKVxuMTgyMTpcdFx0XHRkZXN0cm95X3dvcmtxdWV1ZShsby1cdTAwM2V3b3JrcXVldWUpO1xuMTgyMjpcdFx0bG9vcF9mcmVlX2lkbGVfd29ya2VycyhsbywgdHJ1ZSk7XG4xODIzOlx0XHR0aW1lcl9zaHV0ZG93bl9zeW5jKFx1MDAyNmxvLVx1MDAzZXRpbWVyKTtcbjE4MjQ6XHRcdG11dGV4X2Rlc3Ryb3koXHUwMDI2bG8tXHUwMDNlbG9fbXV0ZXgpO1xuMTgyNTpcdFx0a2ZyZWUobG8pO1xuMTgyNjpcdH1cbjE4Mjc6XHRcbjE4Mjg6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGxvX2ZvcHMgPSB7XG4xODI5Olx0XHQub3duZXIgPVx0VEhJU19NT0RVTEUsXG4xODMwOlx0XHQub3BlbiA9ICAgICAgICAgbG9fb3BlbixcbjE4MzE6XHRcdC5yZWxlYXNlID1cdGxvX3JlbGVhc2UsXG4xODMyOlx0XHQuaW9jdGwgPVx0bG9faW9jdGwsXG4xODMzOlx0I2lmZGVmIENPTkZJR19DT01QQVRcbjE4MzQ6XHRcdC5jb21wYXRfaW9jdGwgPVx0bG9fY29tcGF0X2lvY3RsLFxuMTgzNTpcdCNlbmRpZlxuMTgzNjpcdFx0LmZyZWVfZGlzayA9XHRsb19mcmVlX2Rpc2ssXG4xODM3Olx0fTtcbjE4Mzg6XHRcbjE4Mzk6XHQvKlxuMTg0MDpcdCAqIEFuZCBub3cgdGhlIG1vZHVsZXMgY29kZSBhbmQga2VybmVsIGludGVyZmFjZS5cbjE4NDE6XHQgKi9cbjE4NDI6XHRcbjE4NDM6XHQvKlxuMTg0NDpcdCAqIElmIG1heF9sb29wIGlzIHNwZWNpZmllZCwgY3JlYXRlIHRoYXQgbWFueSBkZXZpY2VzIHVwZnJvbnQuXG4xODQ1Olx0ICogVGhpcyBhbHNvIGJlY29tZXMgYSBoYXJkIGxpbWl0LiBJZiBtYXhfbG9vcCBpcyBub3Qgc3BlY2lmaWVkLFxuMTg0NjpcdCAqIHRoZSBkZWZhdWx0IGlzbiYjMzk7dCBhIGhhcmQgbGltaXQgKGFzIGJlZm9yZSBjb21taXQgODVjNTAxOTc3MTZjXG4xODQ3Olx0ICogY2hhbmdlZCB0aGUgZGVmYXVsdCB2YWx1ZSBmcm9tIDAgZm9yIG1heF9sb29wPTAgcmVhc29ucyksIGp1c3RcbjE4NDg6XHQgKiBjcmVhdGUgQ09ORklHX0JMS19ERVZfTE9PUF9NSU5fQ09VTlQgbG9vcCBkZXZpY2VzIGF0IG1vZHVsZVxuMTg0OTpcdCAqIGluaXQgdGltZS4gTG9vcCBkZXZpY2VzIGNhbiBiZSByZXF1ZXN0ZWQgb24tZGVtYW5kIHdpdGggdGhlXG4xODUwOlx0ICogL2Rldi9sb29wLWNvbnRyb2wgaW50ZXJmYWNlLCBvciBiZSBpbnN0YW50aWF0ZWQgYnkgYWNjZXNzaW5nXG4xODUxOlx0ICogYSAmIzM5O2RlYWQmIzM5OyBkZXZpY2Ugbm9kZS5cbjE4NTI6XHQgKi9cbjE4NTM6XHRzdGF0aWMgaW50IG1heF9sb29wID0gQ09ORklHX0JMS19ERVZfTE9PUF9NSU5fQ09VTlQ7XG4xODU0Olx0XG4xODU1Olx0I2lmZGVmIENPTkZJR19CTE9DS19MRUdBQ1lfQVVUT0xPQURcbjE4NTY6XHRzdGF0aWMgYm9vbCBtYXhfbG9vcF9zcGVjaWZpZWQ7XG4xODU3Olx0XG4xODU4Olx0c3RhdGljIGludCBtYXhfbG9vcF9wYXJhbV9zZXRfaW50KGNvbnN0IGNoYXIgKnZhbCxcbjE4NTk6XHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTc6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk4MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbnZlc3RpZ2F0aW5nIGBsb29wX2Nscl9mZGAgYW5kIElPQ1RMIEhhbmRsaW5nKioKCk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYGxvb3BfY2xyX2ZkYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpcyBob3cgZXhhY3RseSB0aGUgaW9jdGwgY2FsbHMgYXJlIGltcGxlbWVudGVkIHRvIGNsZWFyIG9yIHJlbGVhc2UgdGhlIGxvb3AgZGV2aWNlLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBsb3ctbGV2ZWwgaW50ZXJhY3Rpb25zIGhlcmU6IGhvdyB0aGUgZmlsZSBkZXNjcmlwdG9yIGlzIHVzZWQgd2l0aGluIHRoZSBrZXJuZWwgdG8gaWRlbnRpZnkgYW5kIG1hbmlwdWxhdGUgdGhlIGxvb3AgZGV2aWNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBhbmQgdGhlIHNwZWNpZmljIGlvY3RsIGNvZGVzIHVzZWQuIEnigJltIGd1ZXNzaW5nIGl0IGludm9sdmVzIHNvbWUgcG9pbnRlciBtYW5pcHVsYXRpb24gb3IgcGVyaGFwcyBhIHNpZ25hbCBiZWluZyBzZW50IHRvIHRoZSBiYWNraW5nIGJsb2NrIGRldmljZSB0aHJvdWdoIHRoZSBrZXJuZWwuIEkgc2hvdWxkIGxvb2sgaW50byB0aGUgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBpb2N0bGAgaGFuZGxlciBpbiB0aGUgbG9vcCBkcml2ZXIsIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBoYXBwZW5pbmcgaW50ZXJuYWxseS4gSSB3YW50IHRvIHNlZSBpZiB0aGUgZmQgaXMgc2ltcGx5IGNsb3NlZCwgb3IgaWYgdGhlcmUmIzM5O3MgbW9yZSB0byB0aGUgcmVsZWFzZSBwcm9jZXNzLiBUaGVyZSBjb3VsZCBiZSBzb21lIGVkZ2UgY2FzZXMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIEkmIzM5O2xsIGZvY3VzIG9uIGhvdyB0aGUgaW9jdGwgY2FsbCBhZmZlY3RzIHRoZSBjb25uZWN0aW9uIGFuZCB3aGF0IGRhdGEgaXMgYmVpbmcgc2hhcmVkIHRvIGNsb3NlIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBiYWNraW5nIGRldmljZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbG9vcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjMwOlx0XHQvKlxuMTIzMTpcdFx0ICogVGhpcyBpcyBzYWZlOiBmbHVzaF93b3JrKCkgZnJvbSBsb29wX3JlbW92ZSgpIGZyb20gbG9vcF9leGl0KCkgd2FpdHNcbjEyMzI6XHRcdCAqIHVudGlsIHRoaXMgZnVuY3Rpb24gcmV0dXJuczsgZWZmZWN0aXZlbHkgZHJvcHBpbmcgdGhlIGZpbmFsIG1vZHVsZVxuMTIzMzpcdFx0ICogcmVmZXJlbmNlcyBzeW5jaHJvbm91c2x5LlxuMTIzNDpcdFx0ICovXG4xMjM1Olx0XHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcbjEyMzY6XHR9XG4xMjM3Olx0XG4xMjM4Olx0c3RhdGljIGludCBsb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuMTIzOTpcdHtcbjEyNDA6XHRcdGludCBlcnI7XG4xMjQxOlx0XG4xMjQyOlx0XHQvKlxuMTI0MzpcdFx0ICogU2luY2UgbG9faW9jdGwoKSBpcyBjYWxsZWQgd2l0aG91dCBsb2NrcyBoZWxkLCBpdCBpcyBwb3NzaWJsZSB0aGF0XG4xMjQ0Olx0XHQgKiBsb29wX2NvbmZpZ3VyZSgpL2xvb3BfY2hhbmdlX2ZkKCkgYW5kIGxvb3BfY2xyX2ZkKCkgcnVuIGluIHBhcmFsbGVsLlxuMTI0NTpcdFx0ICpcbjEyNDY6XHRcdCAqIFRoZXJlZm9yZSwgdXNlIGdsb2JhbCBsb2NrIHdoZW4gc2V0dGluZyBMb19ydW5kb3duIHN0YXRlIGluIG9yZGVyIHRvXG4xMjQ3Olx0XHQgKiBtYWtlIHN1cmUgdGhhdCBsb29wX3ZhbGlkYXRlX2ZpbGUoKSB3aWxsIGZhaWwgaWYgdGhlIFwmIzM0O3N0cnVjdCBmaWxlXCYjMzQ7XG4xMjQ4Olx0XHQgKiB3aGljaCBsb29wX2NvbmZpZ3VyZSgpL2xvb3BfY2hhbmdlX2ZkKCkgZm91bmQgdmlhIGZnZXQoKSB3YXMgdGhpc1xuMTI0OTpcdFx0ICogbG9vcCBkZXZpY2UuXG4xMjUwOlx0XHQgKi9cbjEyNTE6XHRcdGVyciA9IGxvb3BfZ2xvYmFsX2xvY2tfa2lsbGFibGUobG8sIHRydWUpO1xuMTI1MjpcdFx0aWYgKGVycilcbjEyNTM6XHRcdFx0cmV0dXJuIGVycjtcbjEyNTQ6XHRcdGlmIChsby1cdTAwM2Vsb19zdGF0ZSAhPSBMb19ib3VuZCkge1xuMTI1NTpcdFx0XHRsb29wX2dsb2JhbF91bmxvY2sobG8sIHRydWUpO1xuMTI1NjpcdFx0XHRyZXR1cm4gLUVOWElPO1xuMTI1NzpcdFx0fVxuMTI1ODpcdFx0LypcbjEyNTk6XHRcdCAqIE1hcmsgdGhlIGRldmljZSBmb3IgcmVtb3ZpbmcgdGhlIGJhY2tpbmcgZGV2aWNlIG9uIGxhc3QgY2xvc2UuXG4xMjYwOlx0XHQgKiBJZiB3ZSBhcmUgdGhlIG9ubHkgb3BlbmVyLCBhbHNvIHN3aXRjaCB0aGUgc3RhdGUgdG8gcm91bmRvd24gaGVyZSB0b1xuMTI2MTpcdFx0ICogcHJldmVudCBuZXcgb3BlbmVycyBmcm9tIGNvbWluZyBpbi5cbjEyNjI6XHRcdCAqL1xuMTI2MzpcdFxuMTI2NDpcdFx0bG8tXHUwMDNlbG9fZmxhZ3MgfD0gTE9fRkxBR1NfQVVUT0NMRUFSO1xuMTI2NTpcdFx0aWYgKGRpc2tfb3BlbmVycyhsby1cdTAwM2Vsb19kaXNrKSA9PSAxKVxuMTI2NjpcdFx0XHRXUklURV9PTkNFKGxvLVx1MDAzZWxvX3N0YXRlLCBMb19ydW5kb3duKTtcbjEyNjc6XHRcdGxvb3BfZ2xvYmFsX3VubG9jayhsbywgdHJ1ZSk7XG4xMjY4Olx0XG4xMjY5Olx0XHRyZXR1cm4gMDtcbjEyNzA6XHR9XG4xMjcxOlx0XG4xMjcyOlx0c3RhdGljIGludFxuMTI3MzpcdGxvb3Bfc2V0X3N0YXR1cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBjb25zdCBzdHJ1Y3QgbG9vcF9pbmZvNjQgKmluZm8pXG4xMjc0Olx0e1xuMTI3NTpcdFx0aW50IGVycjtcbjEyNzY6XHRcdGJvb2wgcGFydHNjYW4gPSBmYWxzZTtcbjEyNzc6XHRcdGJvb2wgc2l6ZV9jaGFuZ2VkID0gZmFsc2U7XG4xMjc4Olx0XHR1bnNpZ25lZCBpbnQgbWVtZmxhZ3M7XG4xMjc5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTc6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzAxMwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byB0aGUgYGxvb3AuY2AgaW9jdGwgSGFuZGxpbmcqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCBgbG9vcC5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIHRoZSBgaW9jdGxgIGNhbGxzIGluIHRoaXMgZHJpdmVyLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIHN0YXJ0IGJ5IGZvY3VzaW5nIG9uIGBsb19pb2N0bGAuIFRoYXQgZnVuY3Rpb24gaXMgdGhlIGtleSB0byBtYW5hZ2luZyBkZXZpY2Utc3BlY2lmaWMgcmVxdWVzdHMsIGFuZCB1bmRlcnN0YW5kaW5nIGl0cyBsb2dpYyBpcyBjcnVjaWFsIGZvciByZWFsbHkgZ3Jhc3BpbmcgaG93IHRoZSBsb29wIGRldmljZSBiZWhhdmVzIGF0IGEgbG93IGxldmVsLiBMZXQmIzM5O3Mgc2VlIHdoYXQgaW50ZXJlc3RpbmcgdGhpbmdzIGFyZSBoYXBwZW5pbmcgaW5zaWRlIHRoZXJlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9sb29wLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2ODA6XHRcdG1lbXNldChcdTAwMjZpbmZvLCAwLCBzaXplb2YoaW5mbykpO1xuMTY4MTpcdFx0aW5mby5sb19udW1iZXIgPSBpbmZvNjQtXHUwMDNlbG9fbnVtYmVyO1xuMTY4MjpcdFx0aW5mby5sb19kZXZpY2UgPSBpbmZvNjQtXHUwMDNlbG9fZGV2aWNlO1xuMTY4MzpcdFx0aW5mby5sb19pbm9kZSA9IGluZm82NC1cdTAwM2Vsb19pbm9kZTtcbjE2ODQ6XHRcdGluZm8ubG9fcmRldmljZSA9IGluZm82NC1cdTAwM2Vsb19yZGV2aWNlO1xuMTY4NTpcdFx0aW5mby5sb19vZmZzZXQgPSBpbmZvNjQtXHUwMDNlbG9fb2Zmc2V0O1xuMTY4NjpcdFx0aW5mby5sb19mbGFncyA9IGluZm82NC1cdTAwM2Vsb19mbGFncztcbjE2ODc6XHRcdG1lbWNweShpbmZvLmxvX25hbWUsIGluZm82NC1cdTAwM2Vsb19maWxlX25hbWUsIExPX05BTUVfU0laRSk7XG4xNjg4Olx0XG4xNjg5Olx0XHQvKiBlcnJvciBpbiBjYXNlIHZhbHVlcyB3ZXJlIHRydW5jYXRlZCAqL1xuMTY5MDpcdFx0aWYgKGluZm8ubG9fZGV2aWNlICE9IGluZm82NC1cdTAwM2Vsb19kZXZpY2UgfHxcbjE2OTE6XHRcdCAgICBpbmZvLmxvX3JkZXZpY2UgIT0gaW5mbzY0LVx1MDAzZWxvX3JkZXZpY2UgfHxcbjE2OTI6XHRcdCAgICBpbmZvLmxvX2lub2RlICE9IGluZm82NC1cdTAwM2Vsb19pbm9kZSB8fFxuMTY5MzpcdFx0ICAgIGluZm8ubG9fb2Zmc2V0ICE9IGluZm82NC1cdTAwM2Vsb19vZmZzZXQpXG4xNjk0Olx0XHRcdHJldHVybiAtRU9WRVJGTE9XO1xuMTY5NTpcdFxuMTY5NjpcdFx0aWYgKGNvcHlfdG9fdXNlcihhcmcsIFx1MDAyNmluZm8sIHNpemVvZihpbmZvKSkpXG4xNjk3Olx0XHRcdHJldHVybiAtRUZBVUxUO1xuMTY5ODpcdFx0cmV0dXJuIDA7XG4xNjk5Olx0fVxuMTcwMDpcdFxuMTcwMTpcdHN0YXRpYyBpbnRcbjE3MDI6XHRsb29wX3NldF9zdGF0dXNfY29tcGF0KHN0cnVjdCBsb29wX2RldmljZSAqbG8sXG4xNzAzOlx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgY29tcGF0X2xvb3BfaW5mbyBfX3VzZXIgKmFyZylcbjE3MDQ6XHR7XG4xNzA1Olx0XHRzdHJ1Y3QgbG9vcF9pbmZvNjQgaW5mbzY0O1xuMTcwNjpcdFx0aW50IHJldDtcbjE3MDc6XHRcbjE3MDg6XHRcdHJldCA9IGxvb3BfaW5mbzY0X2Zyb21fY29tcGF0KGFyZywgXHUwMDI2aW5mbzY0KTtcbjE3MDk6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xNzEwOlx0XHRcdHJldHVybiByZXQ7XG4xNzExOlx0XHRyZXR1cm4gbG9vcF9zZXRfc3RhdHVzKGxvLCBcdTAwMjZpbmZvNjQpO1xuMTcxMjpcdH1cbjE3MTM6XHRcbjE3MTQ6XHRzdGF0aWMgaW50XG4xNzE1Olx0bG9vcF9nZXRfc3RhdHVzX2NvbXBhdChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLFxuMTcxNjpcdFx0XHQgICAgICAgc3RydWN0IGNvbXBhdF9sb29wX2luZm8gX191c2VyICphcmcpXG4xNzE3Olx0e1xuMTcxODpcdFx0c3RydWN0IGxvb3BfaW5mbzY0IGluZm82NDtcbjE3MTk6XHRcdGludCBlcnI7XG4xNzIwOlx0XG4xNzIxOlx0XHRpZiAoIWFyZylcbjE3MjI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNzIzOlx0XHRlcnIgPSBsb29wX2dldF9zdGF0dXMobG8sIFx1MDAyNmluZm82NCk7XG4xNzI0Olx0XHRpZiAoIWVycilcbjE3MjU6XHRcdFx0ZXJyID0gbG9vcF9pbmZvNjRfdG9fY29tcGF0KFx1MDAyNmluZm82NCwgYXJnKTtcbjE3MjY6XHRcdHJldHVybiBlcnI7XG4xNzI3Olx0fVxuMTcyODpcdFxuMTcyOTpcdHN0YXRpYyBpbnQgbG9fY29tcGF0X2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcbjE3MzA6XHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbjE3MzE6XHR7XG4xNzMyOlx0XHRzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvID0gYmRldi1cdTAwM2ViZF9kaXNrLVx1MDAzZXByaXZhdGVfZGF0YTtcbjE3MzM6XHRcdGludCBlcnI7XG4xNzM0Olx0XG4xNzM1Olx0XHRzd2l0Y2goY21kKSB7XG4xNzM2Olx0XHRjYXNlIExPT1BfU0VUX1NUQVRVUzpcbjE3Mzc6XHRcdFx0ZXJyID0gbG9vcF9zZXRfc3RhdHVzX2NvbXBhdChsbyxcbjE3Mzg6XHRcdFx0XHQgICAgIChjb25zdCBzdHJ1Y3QgY29tcGF0X2xvb3BfaW5mbyBfX3VzZXIgKilhcmcpO1xuMTczOTpcdFx0XHRicmVhaztcbjE3NDA6XHRcdGNhc2UgTE9PUF9HRVRfU1RBVFVTOlxuMTc0MTpcdFx0XHRlcnIgPSBsb29wX2dldF9zdGF0dXNfY29tcGF0KGxvLFxuMTc0MjpcdFx0XHRcdFx0ICAgICAoc3RydWN0IGNvbXBhdF9sb29wX2luZm8gX191c2VyICopYXJnKTtcbjE3NDM6XHRcdFx0YnJlYWs7XG4xNzQ0Olx0XHRjYXNlIExPT1BfU0VUX0NBUEFDSVRZOlxuMTc0NTpcdFx0Y2FzZSBMT09QX0NMUl9GRDpcbjE3NDY6XHRcdGNhc2UgTE9PUF9HRVRfU1RBVFVTNjQ6XG4xNzQ3Olx0XHRjYXNlIExPT1BfU0VUX1NUQVRVUzY0OlxuMTc0ODpcdFx0Y2FzZSBMT09QX0NPTkZJR1VSRTpcbjE3NDk6XHRcdFx0YXJnID0gKHVuc2lnbmVkIGxvbmcpIGNvbXBhdF9wdHIoYXJnKTtcbjE3NTA6XHRcdFx0ZmFsbHRocm91Z2g7XG4xNzUxOlx0XHRjYXNlIExPT1BfU0VUX0ZEOlxuMTc1MjpcdFx0Y2FzZSBMT09QX0NIQU5HRV9GRDpcbjE3NTM6XHRcdGNhc2UgTE9PUF9TRVRfQkxPQ0tfU0laRTpcbjE3NTQ6XHRcdGNhc2UgTE9PUF9TRVRfRElSRUNUX0lPOlxuMTc1NTpcdFx0XHRlcnIgPSBsb19pb2N0bChiZGV2LCBtb2RlLCBjbWQsIGFyZyk7XG4xNzU2Olx0XHRcdGJyZWFrO1xuMTc1NzpcdFx0ZGVmYXVsdDpcbjE3NTg6XHRcdFx0ZXJyID0gLUVOT0lPQ1RMQ01EO1xuMTc1OTpcdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTc6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQxNQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipEaXZpbmcgaW50byB0aGUgYGxvX2lvY3RsYCBJbXBsZW1lbnRhdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYGxvX2lvY3RsYCBmdW5jdGlvbiBpcyBhY3R1YWxseSB3b3JraW5nLiBJIG5lZWQgdG8gZ2V0IG15IGhlYWQgYXJvdW5kIGl0cyBpbXBsZW1lbnRhdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSB0aG9yb3VnaCBleGFtaW5hdGlvbiBvZiB0aGUgY29kZSBpdHNlbGYsIHRvIHNlZSB3aGF0IHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgZG9pbmcuIE5vIG5lZWQgZm9yIGJyb2FkIG92ZXJ2aWV3cyBvciB0aGVvcnkgaGVyZSDigJMgSSBuZWVkIHRvIGdldCBkb3duIGludG8gdGhlIGRldGFpbHMgb2YgdGhlIGNvZGUgYW5kIHNlZSB3aGF04oCZcyBnb2luZyBvbiBhdCBhIGxvdyBsZXZlbC4gTGV0JiMzOTtzIHNlZSBob3cgdGhpbmdzIGFyZSByZWFsbHkgaW1wbGVtZW50ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9sb29wLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2MzA6XHRzdHJ1Y3QgY29tcGF0X2xvb3BfaW5mbyB7XG4xNjMxOlx0XHRjb21wYXRfaW50X3RcdGxvX251bWJlcjsgICAgICAvKiBpb2N0bCByL28gKi9cbjE2MzI6XHRcdGNvbXBhdF9kZXZfdFx0bG9fZGV2aWNlOyAgICAgIC8qIGlvY3RsIHIvbyAqL1xuMTYzMzpcdFx0Y29tcGF0X3Vsb25nX3RcdGxvX2lub2RlOyAgICAgICAvKiBpb2N0bCByL28gKi9cbjE2MzQ6XHRcdGNvbXBhdF9kZXZfdFx0bG9fcmRldmljZTsgICAgIC8qIGlvY3RsIHIvbyAqL1xuMTYzNTpcdFx0Y29tcGF0X2ludF90XHRsb19vZmZzZXQ7XG4xNjM2Olx0XHRjb21wYXRfaW50X3RcdGxvX2VuY3J5cHRfdHlwZTsgICAgICAgIC8qIG9ic29sZXRlLCBpZ25vcmVkICovXG4xNjM3Olx0XHRjb21wYXRfaW50X3RcdGxvX2VuY3J5cHRfa2V5X3NpemU7ICAgIC8qIGlvY3RsIHcvbyAqL1xuMTYzODpcdFx0Y29tcGF0X2ludF90XHRsb19mbGFnczsgICAgICAgLyogaW9jdGwgci9vICovXG4xNjM5Olx0XHRjaGFyXHRcdGxvX25hbWVbTE9fTkFNRV9TSVpFXTtcbjE2NDA6XHRcdHVuc2lnbmVkIGNoYXJcdGxvX2VuY3J5cHRfa2V5W0xPX0tFWV9TSVpFXTsgLyogaW9jdGwgdy9vICovXG4xNjQxOlx0XHRjb21wYXRfdWxvbmdfdFx0bG9faW5pdFsyXTtcbjE2NDI6XHRcdGNoYXJcdFx0cmVzZXJ2ZWRbNF07XG4xNjQzOlx0fTtcbjE2NDQ6XHRcbjE2NDU6XHQvKlxuMTY0NjpcdCAqIFRyYW5zZmVyIDMyLWJpdCBjb21wYXRpYmlsaXR5IHN0cnVjdHVyZSBpbiB1c2Vyc3BhY2UgdG8gNjQtYml0IGxvb3AgaW5mb1xuMTY0NzpcdCAqIC0gbm9pbmxpbmVkIHRvIHJlZHVjZSBzdGFjayBzcGFjZSB1c2FnZSBpbiBtYWluIHBhcnQgb2YgZHJpdmVyXG4xNjQ4Olx0ICovXG4xNjQ5Olx0c3RhdGljIG5vaW5saW5lIGludFxuMTY1MDpcdGxvb3BfaW5mbzY0X2Zyb21fY29tcGF0KGNvbnN0IHN0cnVjdCBjb21wYXRfbG9vcF9pbmZvIF9fdXNlciAqYXJnLFxuMTY1MTpcdFx0XHRcdHN0cnVjdCBsb29wX2luZm82NCAqaW5mbzY0KVxuMTY1MjpcdHtcbjE2NTM6XHRcdHN0cnVjdCBjb21wYXRfbG9vcF9pbmZvIGluZm87XG4xNjU0Olx0XG4xNjU1Olx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2aW5mbywgYXJnLCBzaXplb2YoaW5mbykpKVxuMTY1NjpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjE2NTc6XHRcbjE2NTg6XHRcdG1lbXNldChpbmZvNjQsIDAsIHNpemVvZigqaW5mbzY0KSk7XG4xNjU5Olx0XHRpbmZvNjQtXHUwMDNlbG9fbnVtYmVyID0gaW5mby5sb19udW1iZXI7XG4xNjYwOlx0XHRpbmZvNjQtXHUwMDNlbG9fZGV2aWNlID0gaW5mby5sb19kZXZpY2U7XG4xNjYxOlx0XHRpbmZvNjQtXHUwMDNlbG9faW5vZGUgPSBpbmZvLmxvX2lub2RlO1xuMTY2MjpcdFx0aW5mbzY0LVx1MDAzZWxvX3JkZXZpY2UgPSBpbmZvLmxvX3JkZXZpY2U7XG4xNjYzOlx0XHRpbmZvNjQtXHUwMDNlbG9fb2Zmc2V0ID0gaW5mby5sb19vZmZzZXQ7XG4xNjY0Olx0XHRpbmZvNjQtXHUwMDNlbG9fc2l6ZWxpbWl0ID0gMDtcbjE2NjU6XHRcdGluZm82NC1cdTAwM2Vsb19mbGFncyA9IGluZm8ubG9fZmxhZ3M7XG4xNjY2Olx0XHRtZW1jcHkoaW5mbzY0LVx1MDAzZWxvX2ZpbGVfbmFtZSwgaW5mby5sb19uYW1lLCBMT19OQU1FX1NJWkUpO1xuMTY2NzpcdFx0cmV0dXJuIDA7XG4xNjY4Olx0fVxuMTY2OTpcdFxuMTY3MDpcdC8qXG4xNjcxOlx0ICogVHJhbnNmZXIgNjQtYml0IGxvb3AgaW5mbyB0byAzMi1iaXQgY29tcGF0aWJpbGl0eSBzdHJ1Y3R1cmUgaW4gdXNlcnNwYWNlXG4xNjcyOlx0ICogLSBub2lubGluZWQgdG8gcmVkdWNlIHN0YWNrIHNwYWNlIHVzYWdlIGluIG1haW4gcGFydCBvZiBkcml2ZXJcbjE2NzM6XHQgKi9cbjE2NzQ6XHRzdGF0aWMgbm9pbmxpbmUgaW50XG4xNjc1Olx0bG9vcF9pbmZvNjRfdG9fY29tcGF0KGNvbnN0IHN0cnVjdCBsb29wX2luZm82NCAqaW5mbzY0LFxuMTY3NjpcdFx0XHQgICAgICBzdHJ1Y3QgY29tcGF0X2xvb3BfaW5mbyBfX3VzZXIgKmFyZylcbjE2Nzc6XHR7XG4xNjc4Olx0XHRzdHJ1Y3QgY29tcGF0X2xvb3BfaW5mbyBpbmZvO1xuMTY3OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNzo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDkwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZSwgdXNpbmcgYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBgbG9faW9jdGxgIENvZGUqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggYGxvX2lvY3RsYC4gVGhlIGJlc3Qgd2F5IHRvIHN0YXJ0IGlzIGJ5IHBpbnBvaW50aW5nIHRoZSBzcGVjaWZpYyBsaW5lIG51bWJlcnMgYW5kIHRoZSBhc3NvY2lhdGVkIHN5bWJvbHMuIEtub3dpbmcgdGhlIGV4YWN0IGNvbnRleHQgb2YgdGhvc2UgbGluZXMgaXMgY3J1Y2lhbC4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpcyBpbnRlcmFjdGluZyB3aXRoIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGNvbnRyb2wgZmxvdy4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUga2V5IGludGVyYWN0aW9uIHBvaW50cyBhbmQgYW55IHBvdGVudGlhbCBhcmVhcyB0aGF0IG1pZ2h0IG5lZWQgYXR0ZW50aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xvX2lvY3RsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9sb29wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9sb29wLmM9MTIzOD1zdGF0aWMgaW50IGxvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTI0Mi1cdC8qXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMjQzOlx0ICogU2luY2UgbG9faW9jdGwoKSBpcyBjYWxsZWQgd2l0aG91dCBsb2NrcyBoZWxkLCBpdCBpcyBwb3NzaWJsZSB0aGF0XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjQ0LVx0ICogbG9vcF9jb25maWd1cmUoKS9sb29wX2NoYW5nZV9mZCgpIGFuZCBsb29wX2Nscl9mZCgpIHJ1biBpbiBwYXJhbGxlbC5cbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNTQzPXN0YXRpYyBpbnQgbG9fc2ltcGxlX2lvY3RsKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHVuc2lnbmVkIGludCBjbWQsXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTU2NC1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE1NjU6c3RhdGljIGludCBsb19pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNTY2LVx0dW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MTcyOT1zdGF0aWMgaW50IGxvX2NvbXBhdF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTc1NC1cdGNhc2UgTE9PUF9TRVRfRElSRUNUX0lPOlxuZHJpdmVycy9ibG9jay9sb29wLmM6MTc1NTpcdFx0ZXJyID0gbG9faW9jdGwoYmRldiwgbW9kZSwgY21kLCBhcmcpO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMTc1Ni1cdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MTgyOD1zdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGxvX2ZvcHMgPSB7XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTgzMS1cdC5yZWxlYXNlID1cdGxvX3JlbGVhc2UsXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxODMyOlx0LmlvY3RsID1cdGxvX2lvY3RsLFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTgzMy0jaWZkZWYgQ09ORklHX0NPTVBBVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNzo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDExNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDYyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBMb29wIERldmljZSBEcml2ZXIgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlc2UgcGF0Y2ggY2hhbmdlcyBtZXRob2RpY2FsbHkuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgYSBzaWduaWZpY2FudCByZWZhY3RvcmluZyBvZiB0aGUgbG9vcCBibG9jayBkZXZpY2UgZHJpdmVyLCBhbmQgaXQmIzM5O3Mgc29tZXRoaW5nIEkgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIGl0JiMzOTtzIGFjY2Vzc2libGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBRRU1VLCBhbmQgc3RhbmRhcmQgdXNlciBzcGFjZS4KClNwZWNpZmljYWxseSwgdGhlIGFkZGl0aW9uIG9mIGBzdHJ1Y3Qgd29ya19zdHJ1Y3QgbG9fY2xyX3dvcmtgIGFuZCB0aGUgc2hpZnQgb2YgYF9fbG9vcF9jbHJfZmRgIHRvIGEgd29yayBpdGVtIGhhbmRsZXIgaW1tZWRpYXRlbHkgY2F0Y2hlcyBteSBleWUuIFRoaXMgZnVuZGFtZW50YWxseSBhbHRlcnMgaG93IHRoZSBkZXZpY2UgaXMgY2xlYW5lZCB1cCBhbmQgcmVsZWFzZWQsIG1vdmluZyBmcm9tIGEgc3luY2hyb25vdXMgY2FsbCB3aXRoaW4gYGxvX3JlbGVhc2VgIHRvIGFuIGFzeW5jaHJvbm91cyBhcHByb2FjaCB2aWEgYSB3b3JrcXVldWUuIFRoaXMgbWVhbnMgdGhhdCBJL08gaXMgaGFuZGxlZCBvdXRzaWRlIG9mIHRoZSBjcml0aWNhbCBwYXRoIGFuZCBhZnRlciB0aGUgYG9wZW5fbXV0ZXhgIGxvY2sgaGFzIGJlZW4gZHJvcHBlZC4KCkxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgdHJ5aW5nIHRvIGltcHJvdmUgY29uY3VycmVuY3kgYW5kIGhhbmRsZSBwb3RlbnRpYWwgYmxvY2tpbmcgb3BlcmF0aW9ucyBtb3JlIGdyYWNlZnVsbHkuIFRoZXkmIzM5O3JlIGNhcmVmdWxseSBtYW5hZ2luZyB0aGUgYG9wZW5fbXV0ZXhgIGxvY2ssIGZsdXNoaW5nIEkvTyAodXNpbmcgYHN5bmNocm9uaXplX3JjdSgpYCwgYGRyYWluX3dvcmtxdWV1ZSgpYCwgYW5kIGBibGtfbXFfdW5mcmVlemVfcXVldWUoKWApIGJlZm9yZSB0aGUgbXV0ZXggaXMgbG9ja2VkLCBhbmQgdGhlbiBkb2luZyB0aGUgY29yZSBjbGVhbnVwIHdpdGggdGhlIG11dGV4LiBUaGV5IGFyZSBhbHNvIHRha2luZyBjYXJlIHRvIGVuc3VyZSB0aGF0IHJlZmNvdW50cyBvbiB0aGUgYGRldmljZWAgYW5kIGBtb2R1bGVgIGFyZSBoYW5kbGVkIGNvcnJlY3RseSBpbiBib3RoIHNjZW5hcmlvcy4KClRoZSBgbG9fcmVsZWFzZWAgY2hhbmdlLCBkZWZlcnJpbmcgdGhlIGBfX2xvb3BfY2xyX2ZkYCBjYWxsIHRvIHRoZSBgc3lzdGVtX2xvbmdfd3FgIHdvcmtxdWV1ZSwgaXMgdGhlIGtleSB0byBhbGwgb2YgdGhpcy4gYGxvb3BfYWRkYCBub3cgaW5pdGlhbGl6ZXMgdGhlIHdvcmsgaXRlbSwgYW5kIGBsb29wX3JlbW92ZWAgZmx1c2hlcyBpdC4KCk15IGV4cGVydCBpbnN0aW5jdHMgYXJlIHRpbmdsaW5nOyB0aGlzIHNtZWxscyBsaWtlIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBUaGUgY29uY3VycmVuY3kgY2hhbmdlcyBhbG9uZSwgZXNwZWNpYWxseSB3aXRoIHRoZSBpbnRyaWNhdGUgbG9ja2luZywgdW5sb2NraW5nLCBhbmQgcmVmY291bnRpbmcgKG1vZHVsZS9kZXZpY2UvZmlsZSkgaW52b2x2ZWQsIGFyZSByaXBlIGZvciByYWNlIGNvbmRpdGlvbnMsIHVzZS1hZnRlci1mcmVlcywgZGVhZGxvY2tzLCBhbmQgb3RoZXIgc3VidGxlIGNvbmN1cnJlbmN5IGJ1Z3MuICBUaGUgYXN5bmNocm9ub3VzIG5hdHVyZSBvZiB0aGUgd29ya3F1ZXVlIG1ha2VzIGl0IHBhcnRpY3VsYXJseSBzdXNjZXB0aWJsZSB0byB0aGVzZSBraW5kcyBvZiBwcm9ibGVtcywgYW5kIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBsb2NraW5nL3VubG9ja2luZyBhbmQgcmVmY291bnRpbmcgbWFrZXMgaXQgd29yc2UuCgpTbywgeWVzLCBhYnNvbHV0ZWx5LCAqKldvcnRoRnV6emluZyA9IHRydWUuKioKCk5vdywgbGV0IG1lIGNoZWNrIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcyB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLiBUaW1lIHRvIGNoZWNrIGBkcml2ZXJzL2Jsb2NrL0tjb25maWdgIHRvIHNlZSB3aGF0JiMzOTtzIHJlcXVpcmVkIGZvciBgbG9vcC5jYCB0byBiZSBidWlsdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTg6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE0MDpcdGNvbmZpZyBCTEtfREVWX0NPV19DT01NT05cbiAxNDE6XHRcdGJvb2xcbiAxNDI6XHRcdGRlZmF1bHQgQkxLX0RFVl9VQkRcbiAxNDM6XHRcbiAxNDQ6XHRjb25maWcgQkxLX0RFVl9MT09QXG4gMTQ1Olx0XHR0cmlzdGF0ZSBcJiMzNDtMb29wYmFjayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuIDE0NjpcdFx0aGVscFxuIDE0NzpcdFx0ICBTYXlpbmcgWSBoZXJlIHdpbGwgYWxsb3cgeW91IHRvIHVzZSBhIHJlZ3VsYXIgZmlsZSBhcyBhIGJsb2NrXG4gMTQ4Olx0XHQgIGRldmljZTsgeW91IGNhbiB0aGVuIGNyZWF0ZSBhIGZpbGUgc3lzdGVtIG9uIHRoYXQgYmxvY2sgZGV2aWNlIGFuZFxuIDE0OTpcdFx0ICBtb3VudCBpdCBqdXN0IGFzIHlvdSB3b3VsZCBtb3VudCBvdGhlciBibG9jayBkZXZpY2VzIHN1Y2ggYXMgaGFyZFxuIDE1MDpcdFx0ICBkcml2ZSBwYXJ0aXRpb25zLCBDRC1ST00gZHJpdmVzIG9yIGZsb3BweSBkcml2ZXMuIFRoZSBsb29wIGRldmljZXNcbiAxNTE6XHRcdCAgYXJlIGJsb2NrIHNwZWNpYWwgZGV2aWNlIGZpbGVzIHdpdGggbWFqb3IgbnVtYmVyIDcgYW5kIHR5cGljYWxseVxuIDE1MjpcdFx0ICBjYWxsZWQgL2Rldi9sb29wMCwgL2Rldi9sb29wMSBldGMuXG4gMTUzOlx0XG4gMTU0Olx0XHQgIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGNoZWNrIGFuIElTTyA5NjYwIGZpbGUgc3lzdGVtIGJlZm9yZVxuIDE1NTpcdFx0ICBidXJuaW5nIHRoZSBDRCwgb3IgaWYgeW91IHdhbnQgdG8gdXNlIGZsb3BweSBpbWFnZXMgd2l0aG91dCBmaXJzdFxuIDE1NjpcdFx0ICB3cml0aW5nIHRoZW0gdG8gZmxvcHB5LiBGdXJ0aGVybW9yZSwgc29tZSBMaW51eCBkaXN0cmlidXRpb25zIGF2b2lkXG4gMTU3Olx0XHQgIHRoZSBuZWVkIGZvciBhIGRlZGljYXRlZCBMaW51eCBwYXJ0aXRpb24gYnkga2VlcGluZyB0aGVpciBjb21wbGV0ZVxuIDE1ODpcdFx0ICByb290IGZpbGUgc3lzdGVtIGluc2lkZSBhIERPUyBGQVQgZmlsZSB1c2luZyB0aGlzIGxvb3AgZGV2aWNlXG4gMTU5Olx0XHQgIGRyaXZlci5cbiAxNjA6XHRcbiAxNjE6XHRcdCAgVG8gdXNlIHRoZSBsb29wIGRldmljZSwgeW91IG5lZWQgdGhlIGxvc2V0dXAgdXRpbGl0eSwgZm91bmQgaW4gdGhlXG4gMTYyOlx0XHQgIHV0aWwtbGludXggcGFja2FnZSwgc2VlXG4gMTYzOlx0XHQgIFx1MDAzY2h0dHBzOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L3V0aWxzL3V0aWwtbGludXgvXHUwMDNlLlxuIDE2NDpcdFxuIDE2NTpcdFx0ICBUaGUgbG9vcCBkZXZpY2UgZHJpdmVyIGNhbiBhbHNvIGJlIHVzZWQgdG8gXCYjMzQ7aGlkZVwmIzM0OyBhIGZpbGUgc3lzdGVtIGluXG4gMTY2Olx0XHQgIGEgZGlzayBwYXJ0aXRpb24sIGZsb3BweSwgb3IgcmVndWxhciBmaWxlLCBlaXRoZXIgdXNpbmcgZW5jcnlwdGlvblxuIDE2NzpcdFx0ICAoc2NyYW1ibGluZyB0aGUgZGF0YSkgb3Igc3RlZ2Fub2dyYXBoeSAoaGlkaW5nIHRoZSBkYXRhIGluIHRoZSBsb3dcbiAxNjg6XHRcdCAgYml0cyBvZiwgc2F5LCBhIHNvdW5kIGZpbGUpLiBUaGlzIGlzIGFsc28gc2FmZSBpZiB0aGUgZmlsZSByZXNpZGVzXG4gMTY5Olx0XHQgIG9uIGEgcmVtb3RlIGZpbGUgc2VydmVyLlxuIDE3MDpcdFxuIDE3MTpcdFx0ICBOb3RlIHRoYXQgdGhpcyBsb29wIGRldmljZSBoYXMgbm90aGluZyB0byBkbyB3aXRoIHRoZSBsb29wYmFja1xuIDE3MjpcdFx0ICBkZXZpY2UgdXNlZCBmb3IgbmV0d29yayBjb25uZWN0aW9ucyBmcm9tIHRoZSBtYWNoaW5lIHRvIGl0c2VsZi5cbiAxNzM6XHRcbiAxNzQ6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gMTc1Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBsb29wLlxuIDE3NjpcdFxuIDE3NzpcdFx0ICBNb3N0IHVzZXJzIHdpbGwgYW5zd2VyIE4gaGVyZS5cbiAxNzg6XHRcbiAxNzk6XHRjb25maWcgQkxLX0RFVl9MT09QX01JTl9DT1VOVFxuIDE4MDpcdFx0aW50IFwmIzM0O051bWJlciBvZiBsb29wIGRldmljZXMgdG8gcHJlLWNyZWF0ZSBhdCBpbml0IHRpbWVcJiMzNDtcbiAxODE6XHRcdGRlcGVuZHMgb24gQkxLX0RFVl9MT09QXG4gMTgyOlx0XHRkZWZhdWx0IDhcbiAxODM6XHRcdGhlbHBcbiAxODQ6XHRcdCAgU3RhdGljIG51bWJlciBvZiBsb29wIGRldmljZXMgdG8gYmUgdW5jb25kaXRpb25hbGx5IHByZS1jcmVhdGVkXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE4OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDMzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgZm9yIEhpZGRlbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBCTEtfREVWX0xPT1BgIG1vZHVsZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7UmlnaHQsIGJlZm9yZSBJIGdldCB0b28gZGVlcCwgYXJlIHRoZXJlIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgb3IgY29uZmlndXJhdGlvbnMgdGhhdCBJIG1pZ2h0IGJlIG92ZXJsb29raW5nPyYjMzQ7IEl0JiMzOTtzIGFsd2F5cyBiZXN0IHRvIGJlIHRob3JvdWdoLCBlc3BlY2lhbGx5IHdpdGggYmxvY2sgZGV2aWNlIGRyaXZlcnMuIEkmIzM5O3ZlIGxlYXJuZWQgdGhhdCBsZXNzb24gdGhlIGhhcmQgd2F5ISBNeSBpbnN0aW5jdCBpcyB0byBoZWFkIHN0cmFpZ2h0IGZvciB0aGUgYEtjb25maWdgIGZpbGUgaW4gdGhlIGBkcml2ZXJzL2Jsb2NrYCBkaXJlY3RvcnkuIEl0JiMzOTtzIHVzdWFsbHkgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQuIExldCYjMzk7cyBzdGFydCBhcm91bmQgbGluZSAxIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZGlnIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxODowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBCbG9jayBkZXZpY2UgZHJpdmVyIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0bWVudWNvbmZpZyBCTEtfREVWXG4gICA3Olx0XHRib29sIFwmIzM0O0Jsb2NrIGRldmljZXNcJiMzNDtcbiAgIDg6XHRcdGRlcGVuZHMgb24gQkxPQ0tcbiAgIDk6XHRcdGRlZmF1bHQgeVxuICAxMDpcdFx0aGVscFxuICAxMTpcdFx0ICBTYXkgWSBoZXJlIHRvIGdldCB0byBzZWUgb3B0aW9ucyBmb3IgdmFyaW91cyBkaWZmZXJlbnQgYmxvY2sgZGV2aWNlXG4gIDEyOlx0XHQgIGRyaXZlcnMuIFRoaXMgb3B0aW9uIGFsb25lIGRvZXMgbm90IGFkZCBhbnkga2VybmVsIGNvZGUuXG4gIDEzOlx0XG4gIDE0Olx0XHQgIElmIHlvdSBzYXkgTiwgYWxsIG9wdGlvbnMgaW4gdGhpcyBzdWJtZW51IHdpbGwgYmUgc2tpcHBlZCBhbmQgZGlzYWJsZWQ7XG4gIDE1Olx0XHQgIG9ubHkgZG8gdGhpcyBpZiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuXG4gIDE2Olx0XG4gIDE3Olx0aWYgQkxLX0RFVlxuICAxODpcdFxuICAxOTpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWdcJiMzNDtcbiAgMjA6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9ibG9jay9ybnVsbC9LY29uZmlnXCYjMzQ7XG4gIDIxOlx0XG4gIDIyOlx0Y29uZmlnIEJMS19ERVZfRkRcbiAgMjM6XHRcdHRyaXN0YXRlIFwmIzM0O05vcm1hbCBmbG9wcHkgZGlzayBzdXBwb3J0XCYjMzQ7XG4gIDI0Olx0XHRkZXBlbmRzIG9uIEFSQ0hfTUFZX0hBVkVfUENfRkRDXG4gIDI1Olx0XHRoZWxwXG4gIDI2Olx0XHQgIElmIHlvdSB3YW50IHRvIHVzZSB0aGUgZmxvcHB5IGRpc2sgZHJpdmUocykgb2YgeW91ciBQQyB1bmRlciBMaW51eCxcbiAgMjc6XHRcdCAgc2F5IFkuIEluZm9ybWF0aW9uIGFib3V0IHRoaXMgZHJpdmVyLCBlc3BlY2lhbGx5IGltcG9ydGFudCBmb3IgSUJNXG4gIDI4Olx0XHQgIFRoaW5rcGFkIHVzZXJzLCBpcyBjb250YWluZWQgaW5cbiAgMjk6XHRcdCAgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Jsb2NrZGV2L2Zsb3BweS5yc3RcdTAwM2UuXG4gIDMwOlx0XHQgIFRoYXQgZmlsZSBhbHNvIGNvbnRhaW5zIHRoZSBsb2NhdGlvbiBvZiB0aGUgRmxvcHB5IGRyaXZlciBGQVEgYXNcbiAgMzE6XHRcdCAgd2VsbCBhcyBsb2NhdGlvbiBvZiB0aGUgZmR1dGlscyBwYWNrYWdlIHVzZWQgdG8gY29uZmlndXJlIGFkZGl0aW9uYWxcbiAgMzI6XHRcdCAgcGFyYW1ldGVycyBvZiB0aGUgZHJpdmVyIGF0IHJ1biB0aW1lLlxuICAzMzpcdFxuICAzNDpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAgMzU6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGZsb3BweS5cbiAgMzY6XHRcbiAgMzc6XHRjb25maWcgQkxLX0RFVl9GRF9SQVdDTURcbiAgMzg6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgcmF3IGZsb3BweSBkaXNrIGNvbW1hbmRzIChERVBSRUNBVEVEKVwmIzM0O1xuICAzOTpcdFx0ZGVwZW5kcyBvbiBCTEtfREVWX0ZEXG4gIDQwOlx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE4OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzY5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTG9vcCBCbG9jayBEZXZpY2UgZm9yIEZ1enppbmcqKgoKT2theSwgc28gYEJMS19ERVZgIGRlcGVuZHMgb24gYEJMT0NLYC4gVGhhdCBtYWtlcyBzZW5zZS4gQW5kIGBCTEtfREVWX0xPT1BgIGlzICppbnNpZGUqIGBCTEtfREVWYCwgc28sIGltcGxpY2l0bHksIHRoYXQgYWxzbyByZXF1aXJlcyBgQkxPQ0tgLiBHb3QgaXQuIE5vdywgd2hhdCYjMzk7cyBvdXIgYXR0YWNrIHN1cmZhY2U/IExldCYjMzk7cyBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyBpbiBgZHJpdmVycy9ibG9jay9sb29wLmNgIGFyZSBnb2luZyB0byBiZSBtb3N0IHVzZWZ1bCBmb3IgZnV6emluZy4KCkxldCYjMzk7cyBzZWUuLi4gd2hhdCBhcmUgdGhlIGVudHJ5IHBvaW50cz8gSG1tLCBva2F5LCBoZXJlJiMzOTtzIGEgc3RhcnQ6IGBsb19yZWxlYXNlYCwgd2hpY2ggaXMgdGhlIGBmb3BzLSZndDtyZWxlYXNlYCBjYWxsYmFjay4gVGhhdCYjMzk7cyBhIGdvb2QgY2FuZGlkYXRlLiBXZSBhbHNvIGhhdmUgYGxvb3BfY2xyX2ZkYCwgYW5kIHRoZSBgbG9faW9jdGxgIGFuZCBgbG9fY29tcGF0X2lvY3RsYCBwYWlyLiBPa2F5LCBgbG9vcF9jb250cm9sX2lvY3RsYCBpcyBhbm90aGVyIG9uZSB0byBjb25zaWRlci4gQW5kIHRoZW4gdGhlcmUgYXJlIHRoZSBmdW5jdGlvbnMgcmVsYXRlZCB0byBtYW5hZ2VtZW50IOKAkyBgbG9vcF9hZGRgLCBgbG9vcF9yZW1vdmVgLCBgbG9vcF9jb25maWd1cmVgLCBhbmQgYGxvb3BfY2hhbmdlX2ZkYC4gVGhvc2UgYWxsIGxvb2sgaW50ZXJlc3RpbmcuCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBkZWVwZXIgYW5kIGFjdHVhbGx5IGxvb2sgYXQgdGhlIGNvZGUgZGVmaW5pdGlvbnMgdGhlbXNlbHZlcyB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxODowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHN0YXRpYyApPyhpbnR8dm9pZHxsb25nKSAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2xvb3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2xvb3AuYz05Nz1zdGF0aWMgREVGSU5FX01VVEVYKGxvb3BfdmFsaWRhdGVfbXV0ZXgpO1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTExMC0gKi9cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjExMTpzdGF0aWMgaW50IGxvb3BfZ2xvYmFsX2xvY2tfa2lsbGFibGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgYm9vbCBnbG9iYWwpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTIte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEzMS0gKi9cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEzMjpzdGF0aWMgdm9pZCBsb29wX2dsb2JhbF91bmxvY2soc3RydWN0IGxvb3BfZGV2aWNlICpsbywgYm9vbCBnbG9iYWwpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMzMte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEzOC1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEzOTpzdGF0aWMgaW50IG1heF9wYXJ0O1xuZHJpdmVycy9ibG9jay9sb29wLmM6MTQwOnN0YXRpYyBpbnQgcGFydF9zaGlmdDtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE0MS1cbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0yMDI9c3RhdGljIGlubGluZSB2b2lkIGxvb3BfdXBkYXRlX2RpbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIxOS0gKi9cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIyMDpzdGF0aWMgdm9pZCBsb29wX3NldF9zaXplKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGxvZmZfdCBzaXplKVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjIxLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjUtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMjY6c3RhdGljIHZvaWQgbG9vcF9jbGVhcl9saW1pdHMoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgaW50IG1vZGUpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjcte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTI0Ny1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjI0ODpzdGF0aWMgaW50IGxvX2ZhbGxvY2F0ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIGxvZmZfdCBwb3MsXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yNDktXHRcdFx0aW50IG1vZGUpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjc2LVxuZHJpdmVycy9ibG9jay9sb29wLmM6Mjc3OnN0YXRpYyBpbnQgbG9fcmVxX2ZsdXNoKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCByZXF1ZXN0ICpycSlcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTI3OC17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjg1LVxuZHJpdmVycy9ibG9jay9sb29wLmM6Mjg2OnN0YXRpYyB2b2lkIGxvX2NvbXBsZXRlX3JxKHN0cnVjdCByZXF1ZXN0ICpycSlcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTI4Ny17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMzE5LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MzIwOnN0YXRpYyB2b2lkIGxvX3J3X2Fpb19kb19jb21wbGV0aW9uKHN0cnVjdCBsb29wX2NtZCAqY21kKVxuZHJpdmVycy9ibG9jay9sb29wLmMtMzIxLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0zMzMtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzozMzQ6c3RhdGljIHZvaWQgbG9fcndfYWlvX2NvbXBsZXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgbG9uZyByZXQpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0zMzUte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTM0MS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjM0MjpzdGF0aWMgaW50IGxvX3J3X2FpbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgbG9vcF9jbWQgKmNtZCxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTM0My1cdFx0ICAgICBsb2ZmX3QgcG9zLCBpbnQgcncpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtNDEwLVxuZHJpdmVycy9ibG9jay9sb29wLmM6NDExOnN0YXRpYyBpbnQgZG9fcmVxX2ZpbGViYWNrZWQoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHJlcXVlc3QgKnJxKVxuZHJpdmVycy9ibG9jay9sb29wLmMtNDEyLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy00MzktXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo0NDA6c3RhdGljIHZvaWQgbG9vcF9yZXJlYWRfcGFydGl0aW9ucyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuZHJpdmVycy9ibG9jay9sb29wLmMtNDQxLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy00NTEtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo0NTI6c3RhdGljIHZvaWQgbG9vcF91cGRhdGVfZGlvX2FsaWdubWVudChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuZHJpdmVycy9ibG9jay9sb29wLmMtNDUzLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz00ODU9c3RhdGljIGlubGluZSBpbnQgaXNfbG9vcF9kZXZpY2Uoc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtNDkxLVxuZHJpdmVycy9ibG9jay9sb29wLmM6NDkyOnN0YXRpYyBpbnQgbG9vcF92YWxpZGF0ZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxuZHJpdmVycy9ibG9jay9sb29wLmMtNDkzLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy01MTYtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo1MTc6c3RhdGljIHZvaWQgbG9vcF9hc3NpZ25fYmFja2luZ19maWxlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBmaWxlICpmaWxlKVxuZHJpdmVycy9ibG9jay9sb29wLmMtNTE4LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy01MjctXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo1Mjg6c3RhdGljIGludCBsb29wX2NoZWNrX2JhY2tpbmdfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTUyOS17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtNTQ2LSAqL1xuZHJpdmVycy9ibG9jay9sb29wLmM6NTQ3OnN0YXRpYyBpbnQgbG9vcF9jaGFuZ2VfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldixcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTU0OC1cdFx0XHQgIHVuc2lnbmVkIGludCBhcmcpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9NzMzPXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGxvb3BfYXR0cmlidXRlX2dyb3VwID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTczNy1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjczODpzdGF0aWMgdm9pZCBsb29wX3N5c2ZzX2luaXQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTczOS17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtNzQzLVxuZHJpdmVycy9ibG9jay9sb29wLmM6NzQ0OnN0YXRpYyB2b2lkIGxvb3Bfc3lzZnNfZXhpdChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuZHJpdmVycy9ibG9jay9sb29wLmMtNzQ1LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy03NTAtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo3NTE6c3RhdGljIHZvaWQgbG9vcF9nZXRfZGlzY2FyZF9jb25maWcoc3RydWN0IGxvb3BfZGV2aWNlICpsbyxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTc1Mi1cdFx0XHRcdCAgICB1MzIgKmdyYW51bGFyaXR5LCB1MzIgKm1heF9kaXNjYXJkX3NlY3RvcnMpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9NzgxPXN0cnVjdCBsb29wX3dvcmtlciB7XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtNzkwLVxuZHJpdmVycy9ibG9jay9sb29wLmM6NzkxOnN0YXRpYyB2b2lkIGxvb3Bfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy03OTItXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9Nzk5PXN0YXRpYyBpbmxpbmUgaW50IHF1ZXVlX29uX3Jvb3Rfd29ya2VyKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtODA0LVxuZHJpdmVycy9ibG9jay9sb29wLmM6ODA1OnN0YXRpYyB2b2lkIGxvb3BfcXVldWVfd29yayhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgbG9vcF9jbWQgKmNtZClcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTgwNi17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtODc0LVxuZHJpdmVycy9ibG9jay9sb29wLmM6ODc1OnN0YXRpYyB2b2lkIGxvb3Bfc2V0X3RpbWVyKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy04NzYte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTg3OS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjg4MDpzdGF0aWMgdm9pZCBsb29wX2ZyZWVfaWRsZV93b3JrZXJzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGJvb2wgZGVsZXRlX2FsbClcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTg4MS17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtOTAwLVxuZHJpdmVycy9ibG9jay9sb29wLmM6OTAxOnN0YXRpYyB2b2lkIGxvb3BfZnJlZV9pZGxlX3dvcmtlcnNfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKVxuZHJpdmVycy9ibG9jay9sb29wLmMtOTAyLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz05NDg9c3RhdGljIHVuc2lnbmVkIGludCBsb29wX2RlZmF1bHRfYmxvY2tzaXplKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtOTU1LVxuZHJpdmVycy9ibG9jay9sb29wLmM6OTU2OnN0YXRpYyB2b2lkIGxvb3Bfc2V0X2RtYV9saW1pdChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy05NTcte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTk2OC1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjk2OTpzdGF0aWMgdm9pZCBsb29wX3VwZGF0ZV9saW1pdHMoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLFxuZHJpdmVycy9ibG9jay9sb29wLmMtOTcwLVx0XHR1bnNpZ25lZCBpbnQgYnNpemUpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTAwMy1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEwMDQ6c3RhdGljIGludCBsb29wX2NvbmZpZ3VyZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBibGtfbW9kZV90IG1vZGUsXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMDA1LVx0XHRcdCAgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldixcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTM3LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTEzODpzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTExMzkte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEyMzctXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMjM4OnN0YXRpYyBpbnQgbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEyMzkte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE0Mzk9bG9vcF9nZXRfc3RhdHVzNjQoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGxvb3BfaW5mbzY0IF9fdXNlciAqYXJnKSB7XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTQ1MS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE0NTI6c3RhdGljIGludCBsb29wX3NldF9jYXBhY2l0eShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTQ1My17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTQ2NC1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE0NjU6c3RhdGljIGludCBsb29wX3NldF9kaW8oc3RydWN0IGxvb3BfZGV2aWNlICpsbywgdW5zaWduZWQgbG9uZyBhcmcpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNDY2LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNDk0LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTQ5NTpzdGF0aWMgaW50IGxvb3Bfc2V0X2Jsb2NrX3NpemUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgYmxrX21vZGVfdCBtb2RlLFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTQ5Ni1cdFx0XHQgICAgICAgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTU0Mi1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE1NDM6c3RhdGljIGludCBsb19zaW1wbGVfaW9jdGwoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgdW5zaWduZWQgaW50IGNtZCxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE1NDQtXHRcdFx0ICAgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTU2NC1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE1NjU6c3RhdGljIGludCBsb19pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNTY2LVx0dW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MTcxNT1sb29wX2dldF9zdGF0dXNfY29tcGF0KHN0cnVjdCBsb29wX2RldmljZSAqbG8sXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTcyOC1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE3Mjk6c3RhdGljIGludCBsb19jb21wYXRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTczMC1cdFx0XHQgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNzY0LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTc2NTpzdGF0aWMgaW50IGxvX29wZW4oc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJsa19tb2RlX3QgbW9kZSlcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE3NjYte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE3NzktXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNzgwOnN0YXRpYyB2b2lkIGxvX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2spXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNzgxLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODE1LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTgxNjpzdGF0aWMgdm9pZCBsb19mcmVlX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODE3LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xODI4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbG9fZm9wcyA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODUyLSAqL1xuZHJpdmVycy9ibG9jay9sb29wLmM6MTg1MzpzdGF0aWMgaW50IG1heF9sb29wID0gQ09ORklHX0JMS19ERVZfTE9PUF9NSU5fQ09VTlQ7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODU0LVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE4NTY9c3RhdGljIGJvb2wgbWF4X2xvb3Bfc3BlY2lmaWVkO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMTg1Ny1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE4NTg6c3RhdGljIGludCBtYXhfbG9vcF9wYXJhbV9zZXRfaW50KGNvbnN0IGNoYXIgKnZhbCxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4NTktXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE4ODQ9TU9EVUxFX1BBUk1fREVTQyhtYXhfcGFydCwgXCYjMzQ7TWF4aW11bSBudW1iZXIgb2YgcGFydGl0aW9ucyBwZXIgbG9vcCBkZXZpY2VcJiMzNDspO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMTg4NS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE4ODY6c3RhdGljIGludCBod19xdWV1ZV9kZXB0aCA9IExPT1BfREVGQVVMVF9IV19RX0RFUFRIO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMTg4Ny1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE4ODg6c3RhdGljIGludCBsb29wX3NldF9od19xdWV1ZV9kZXB0aChjb25zdCBjaGFyICpzLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICpwKVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTg4OS17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MTkxMz1zdGF0aWMgYmxrX3N0YXR1c190IGxvb3BfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTk1NS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE5NTY6c3RhdGljIHZvaWQgbG9vcF9oYW5kbGVfY21kKHN0cnVjdCBsb29wX2NtZCAqY21kKVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTk1Ny17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjAwNy1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIwMDg6c3RhdGljIHZvaWQgbG9vcF9wcm9jZXNzX3dvcmsoc3RydWN0IGxvb3Bfd29ya2VyICp3b3JrZXIsXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMDA5LVx0XHRcdHN0cnVjdCBsaXN0X2hlYWQgKmNtZF9saXN0LCBzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIwNDEtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMDQyOnN0YXRpYyB2b2lkIGxvb3Bfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIwNDMte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIwNDgtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMDQ5OnN0YXRpYyB2b2lkIGxvb3Bfcm9vdGNnX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMDUwLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0yMDU2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyBsb29wX21xX29wcyA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMDYwLVxuZHJpdmVycy9ibG9jay9sb29wLmM6MjA2MTpzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjA2Mi17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjE3OS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIxODA6c3RhdGljIHZvaWQgbG9vcF9yZW1vdmUoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIxODEte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIxOTYtI2lmZGVmIENPTkZJR19CTE9DS19MRUdBQ1lfQVVUT0xPQURcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIxOTc6c3RhdGljIHZvaWQgbG9vcF9wcm9iZShkZXZfdCBkZXYpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMTk4LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjA4LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MjIwOTpzdGF0aWMgaW50IGxvb3BfY29udHJvbF9yZW1vdmUoaW50IGlkeClcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIyMTAte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIyNTUtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMjU2OnN0YXRpYyBpbnQgbG9vcF9jb250cm9sX2dldF9mcmVlKGludCBpZHgpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjU3LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjc5LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MjI4MDpzdGF0aWMgbG9uZyBsb29wX2NvbnRyb2xfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjgxLVx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIHBhcm0pXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MjMxMD1NT0RVTEVfQUxJQVMoXCYjMzQ7ZGV2bmFtZTpsb29wLWNvbnRyb2xcJiMzNDspO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMjMxMS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIzMTI6c3RhdGljIGludCBfX2luaXQgbG9vcF9pbml0KHZvaWQpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMzEzLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMzY0LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MjM2NTpzdGF0aWMgdm9pZCBfX2V4aXQgbG9vcF9leGl0KHZvaWQpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMzY2LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0yMzg2PW1vZHVsZV9leGl0KGxvb3BfZXhpdCk7XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjM4OC0jaWZuZGVmIE1PRFVMRVxuZHJpdmVycy9ibG9jay9sb29wLmM6MjM4OTpzdGF0aWMgaW50IF9faW5pdCBtYXhfbG9vcF9zZXR1cChjaGFyICpzdHIpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMzkwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTg6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyOTQKCQkJCQkJCW91dHB1dDogMTQwCgkJCQkJCQl0aG91Z2h0czogMjA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRm9jdXNTeW1ib2xzIGFuZCBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgYEZvY3VzU3ltYm9sc2AgcmVsYXRlZCB0byBsb29wIGRldmljZXM6IGBsb19yZWxlYXNlYCwgYGxvb3BfY2xyX2ZkYCwgYGxvX2lvY3RsYCwgYGxvb3BfY29udHJvbF9pb2N0bGAsIGBsb29wX2NvbmZpZ3VyZWAsIGFuZCBgbG9vcF9yZW1vdmVgLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgdG8gZW5zdXJlIHRoZSBhcHByb3ByaWF0ZSBjb25maWd1cmF0aW9uIGlzIGluIHBsYWNlLgoKU3BlY2lmaWNhbGx5LCBJIHNlZSB3ZSYjMzk7cmUgdXNpbmcgYEJMS19ERVZfTE9PUGAgaW4gdGhlIGBDb25maWdgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBpcyBzdWZmaWNpZW50LiBHb2luZyB0aHJvdWdoIHRoZSBkZXBlbmRlbmNpZXMsIGBCTEtfREVWX0xPT1BgIHJlbGllcyBvbiBgQkxLX0RFVmAsIHdoaWNoIGl0c2VsZiBkZWZhdWx0cyB0byAmIzM5O3kmIzM5OyBpZiBgQkxPQ0tgIGlzIHNldC4gR2l2ZW4gdGhpcywgc3BlY2lmeWluZyBgQkxLX0RFVl9MT09QYCBzZWVtcyBhcHByb3ByaWF0ZS4gSSBkb24mIzM5O3Qgc2VlIGFueSBnbGFyaW5nIG9taXNzaW9ucyBvciBjb25mbGljdHMsIHNvIHRoYXQmIzM5O3MgZ29vZC4KCkp1c3QgZG9pbmcgYSBxdWljayBmaW5hbCBzYW5pdHkgY2hlY2sgaGVyZS4uLiBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gYHRydWVgLCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFycmF5IGNvbnRhaW5zIG9ubHkgYEJMS19ERVZfTE9PUGAsIGFuZCB0aGUgYEZvY3VzU3ltYm9sc2AgYXJyYXkgaGFzIHRoZSBmb3VyIHN5bWJvbHMgSSBtZW50aW9uZWQgYmVmb3JlOyBsb29rcyBnb29kLiBJIGhhdmUgYSBjb25jaXNlIGRlc2NyaXB0aW9uIG9mIHdoYXQgaXMgZ29pbmcgb24gaGVyZS4gTm93IEkgdGhpbmsgSSYjMzk7bSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX0xPT1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtsb19yZWxlYXNlJiMzNDssCiAgICAmIzM0O2xvb3BfY2xyX2ZkJiMzNDssCiAgICAmIzM0O2xvX2lvY3RsJiMzNDssCiAgICAmIzM0O2xvb3BfY29udHJvbF9pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBsb29wIGRldmljZSB0ZWFyZG93biBsb2dpYyBpbiBkcml2ZXJzL2Jsb2NrL2xvb3AuYyB0byBkZWZlciBjbGVhcmluZyB0aGUgYmFja2luZyBmaWxlIGFuZCByZWxlYXNpbmcgcmVzb3VyY2VzIChfX2xvb3BfY2xyX2ZkKSB0byBhIHdvcmtxdWV1ZSBjb250ZXh0IHdoZW4gdGhlIGxvb3AgZGV2aWNlIGlzIGNsb3NlZC4gVGhpcyBpbnRyb2R1Y2VzIG5ldyBjb25jdXJyZW5jeSBoYW5kbGluZywgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgcXVldWUgZHJhaW5pbmcgc2VtYW50aWNzIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgZm9yIHJhY2UgY29uZGl0aW9ucywgZGVhZGxvY2tzLCBhbmQgVUFGcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9MT09QJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bG9fcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtsb29wX2Nscl9mZCYjMzQ7LAogICAgJiMzNDtsb19pb2N0bCYjMzQ7LAogICAgJiMzNDtsb29wX2NvbnRyb2xfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbG9vcCBkZXZpY2UgdGVhcmRvd24gbG9naWMgaW4gZHJpdmVycy9ibG9jay9sb29wLmMgdG8gZGVmZXIgY2xlYXJpbmcgdGhlIGJhY2tpbmcgZmlsZSBhbmQgcmVsZWFzaW5nIHJlc291cmNlcyAoX19sb29wX2Nscl9mZCkgdG8gYSB3b3JrcXVldWUgY29udGV4dCB3aGVuIHRoZSBsb29wIGRldmljZSBpcyBjbG9zZWQuIFRoaXMgaW50cm9kdWNlcyBuZXcgY29uY3VycmVuY3kgaGFuZGxpbmcsIHJlZmVyZW5jZSBjb3VudGluZywgYW5kIHF1ZXVlIGRyYWluaW5nIHNlbWFudGljcyB3aGljaCBzaG91bGQgYmUgZnV6emVkIGZvciByYWNlIGNvbmRpdGlvbnMsIGRlYWRsb2NrcywgYW5kIFVBRnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE4OjAzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTg6MDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBkcml2ZXJzL2Jsb2NrL2xvb3AuYyB0byBkZWZlciBsb29wIGRldmljZSB0ZWFyZG93biAoX19sb29wX2Nscl9mZCkgdG8gYSB3b3JrcXVldWUgaXRlbSAobG9fY2xyX3dvcmspIHJhdGhlciB0aGFuIGV4ZWN1dGluZyBpdCBzeW5jaHJvbm91c2x5IGluIGxvX3JlbGVhc2UuIFRoZSBjaGFuZ2VzIGludm9sdmUgd29ya3F1ZXVlIHNjaGVkdWxpbmcsIHJlZmVyZW5jZSBjb3VudGluZywgYW5kIHN5bmNocm9uaXphdGlvbiAoZHJhaW5fd29ya3F1ZXVlLCBmcmVlemVfcXVldWUsIG11dGV4IGxvY2tpbmcpLiBObyB1bmluaXRpYWxpemVkIGRhdGEgc3RydWN0dXJlcywgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhpcyBwYXRjaCAoc3VjaCBhcyByYWNlIGNvbmRpdGlvbnMsIGRlYWRsb2NrcywgdXNlLWFmdGVyLWZyZWUsIG9yIHJlZmVyZW5jZSBjb3VudCBsZWFrcykgYXJlIGNvdmVyZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgc2FuaXRpemVycywgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiB1bm5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTc4NzU5ZmI3ZGNiOTdjYWRlMTE2MTNiYjAzNjNhMzBiNWFjOTg5MwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDI4IDE3OjU2OjQ3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9sb29wLmMgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuYwppbmRleCA2ZjEyOTc2MDM1YjA5Li5lMjcwM2YwZWU3NWQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuYwpAQCAtNzUsNiAmIzQzOzc1LDcgQEAgc3RydWN0IGxvb3BfZGV2aWNlIHsKIAlzdHJ1Y3QgZ2VuZGlzawkJKmxvX2Rpc2s7CiAJc3RydWN0IG11dGV4CQlsb19tdXRleDsKIAlib29sCQkJaWRyX3Zpc2libGU7CiYjNDM7CXN0cnVjdCB3b3JrX3N0cnVjdAlsb19jbHJfd29yazsKIH07CiAKIHN0cnVjdCBsb29wX2NtZCB7CkBAIC0xMTM0LDEzICYjNDM7MTEzNSwzNSBAQCBzdGF0aWMgaW50IGxvb3BfY29uZmlndXJlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGJsa19tb2RlX3QgbW9kZSwKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbykKJiM0MztzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKJiM0MzsJc3RydWN0IGxvb3BfZGV2aWNlICpsbyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbG9vcF9kZXZpY2UsIGxvX2Nscl93b3JrKTsKJiM0MzsJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBsby0mZ3Q7bG9fZGlzazsKIAlzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTsKIAlzdHJ1Y3QgZmlsZSAqZmlscDsKIAlnZnBfdCBnZnAgPSBsby0mZ3Q7b2xkX2dmcF9tYXNrOwogCWludCBlcnI7CiAKJiM0MzsJLyogU3RlcCAxOiBGbHVzaCBhbGwgb3V0c3RhbmRpbmcgSS9PLCB3aXRob3V0IG9wZW5fbXV0ZXggaGVsZC4gKi8KJiM0MzsJLyoKJiM0MzsJICogTm93IHRoYXQgbG9vcF9xdWV1ZV9ycSgpIHNlZXMgbG8tJmd0O2xvX3N0YXRlICE9IExvX2JvdW5kLAomIzQzOwkgKiB3YWl0IGZvciBhbHJlYWR5IHN0YXJ0ZWQgbG9vcF9xdWV1ZV9ycSgpIHRvIGNvbXBsZXRlLgomIzQzOwkgKi8KJiM0MzsJc3luY2hyb25pemVfcmN1KCk7CiYjNDM7CS8qCiYjNDM7CSAqIE5vdyB0aGF0IG5vIG1vcmUgd29ya3MgYXJlIHNjaGVkdWxlZCBieSBsb29wX3F1ZXVlX3JxKCksCiYjNDM7CSAqIHdhaXQgZm9yIGFscmVhZHkgc2NoZWR1bGVkIHdvcmtzIHRvIGNvbXBsZXRlLgomIzQzOwkgKi8KJiM0MzsJZHJhaW5fd29ya3F1ZXVlKGxvLSZndDt3b3JrcXVldWUpOwomIzQzOwkvKgomIzQzOwkgKiBOb3cgdGhhdCBubyBtb3JlIEFJTyByZXF1ZXN0cyBhcmUgc2NoZWR1bGVkIGJ5IGxvX3J3X2FpbygpLAomIzQzOwkgKiB3YWl0IGZvciBhbHJlYWR5IHN0YXJ0ZWQgQUlPIHRvIGNvbXBsZXRlLgomIzQzOwkgKi8KJiM0MzsJYmxrX21xX3VuZnJlZXplX3F1ZXVlKGxvLSZndDtsb19xdWV1ZSwgYmxrX21xX2ZyZWV6ZV9xdWV1ZShsby0mZ3Q7bG9fcXVldWUpKTsKJiM0MzsKJiM0MzsJLyogU3RlcCAyOiBQZXJmb3JtIHJlbWFpbmluZyBjbGVhbnVwLCB3aXRoIG9wZW5fbXV0ZXggaGVsZC4gKi8KJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2Rpc2stJmd0O29wZW5fbXV0ZXgpOwomIzQzOwogCXNwaW5fbG9ja19pcnEoJmFtcDtsby0mZ3Q7bG9fbG9jayk7CiAJZmlscCA9IGxvLSZndDtsb19iYWNraW5nX2ZpbGU7CiAJbG8tJmd0O2xvX2JhY2tpbmdfZmlsZSA9IE5VTEw7CkBAIC0xMTUxLDEyICYjNDM7MTE3NCw3IEBAIHN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbykKIAlsby0mZ3Q7bG9fc2l6ZWxpbWl0ID0gMDsKIAltZW1zZXQobG8tJmd0O2xvX2ZpbGVfbmFtZSwgMCwgTE9fTkFNRV9TSVpFKTsKIAotCS8qCi0JICogUmVzZXQgdGhlIGJsb2NrIHNpemUgdG8gdGhlIGRlZmF1bHQuCi0JICoKLQkgKiBObyBxdWV1ZSBmcmVlemluZyBuZWVkZWQgYmVjYXVzZSB0aGlzIGlzIGNhbGxlZCBmcm9tIHRoZSBmaW5hbAotCSAqIC0mZ3Q7cmVsZWFzZSBjYWxsIG9ubHksIHNvIHRoZXJlIGNhbiYjMzk7dCBiZSBhbnkgb3V0c3RhbmRpbmcgSS9PLgotCSAqLwomIzQzOwkvKiBSZXNldCB0aGUgYmxvY2sgc2l6ZSB0byB0aGUgZGVmYXVsdC4gKi8KIAlsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGxvLSZndDtsb19xdWV1ZSk7CiAJbGltLmxvZ2ljYWxfYmxvY2tfc2l6ZSA9IFNFQ1RPUl9TSVpFOwogCWxpbS5waHlzaWNhbF9ibG9ja19zaXplID0gU0VDVE9SX1NJWkU7CkBAIC0xMTY4LDggJiM0MzsxMTg2LDYgQEAgc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKQogCS8qIGxldCB1c2VyLXNwYWNlIGtub3cgYWJvdXQgdGhpcyBjaGFuZ2UgKi8KIAlrb2JqZWN0X3VldmVudCgmYW1wO2Rpc2tfdG9fZGV2KGxvLSZndDtsb19kaXNrKS0mZ3Q7a29iaiwgS09CSl9DSEFOR0UpOwogCW1hcHBpbmdfc2V0X2dmcF9tYXNrKGZpbHAtJmd0O2ZfbWFwcGluZywgZ2ZwKTsKLQkvKiBUaGlzIGlzIHNhZmU6IG9wZW4oKSBpcyBzdGlsbCBob2xkaW5nIGEgcmVmZXJlbmNlLiAqLwotCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwogCiAJZGlza19mb3JjZV9tZWRpYV9jaGFuZ2UobG8tJmd0O2xvX2Rpc2spOwogCkBAIC0xMTk5LDEyICYjNDM7MTIxNSwyNCBAQCBzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pCiAJV1JJVEVfT05DRShsby0mZ3Q7bG9fc3RhdGUsIExvX3VuYm91bmQpOwogCW11dGV4X3VubG9jaygmYW1wO2xvLSZndDtsb19tdXRleCk7CiAKJiM0MzsJLyogU3RlcCAzOiBEcm9wIHJlZmNvdW50cywgd2l0aG91dCBvcGVuX211dGV4IGhlbGQuICovCiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2Rpc2stJmd0O29wZW5fbXV0ZXgpOwomIzQzOwomIzQzOwlmcHV0KGZpbHApOwomIzQzOwogCS8qCi0JICogTmVlZCBub3QgaG9sZCBsb19tdXRleCB0byBmcHV0IGJhY2tpbmcgZmlsZS4gQ2FsbGluZyBmcHV0IGhvbGRpbmcKLQkgKiBsb19tdXRleCB0cmlnZ2VycyBhIGNpcmN1bGFyIGxvY2sgZGVwZW5kZW5jeSBwb3NzaWJpbGl0eSB3YXJuaW5nIGFzCi0JICogZnB1dCBjYW4gdGFrZSBvcGVuX211dGV4IHdoaWNoIGlzIHVzdWFsbHkgdGFrZW4gYmVmb3JlIGxvX211dGV4LgomIzQzOwkgKiBEcm9wIGFsbCByZWZlcmVuY2VzIHRoYXQgd291bGQgaGF2ZSBiZWVuIGRyb3BwZWQgYXMgc29vbiBhcwomIzQzOwkgKiByZXR1cm5pbmcgZnJvbSBsb19yZWxlYXNlKCkgYW5kIHJlbGVhc2luZyBkaXNrLSZndDtvcGVuX211dGV4LgogCSAqLwotCWZwdXQoZmlscCk7CiYjNDM7CW1vZHVsZV9wdXQoZGlzay0mZ3Q7Zm9wcy0mZ3Q7b3duZXIpOwomIzQzOwlwdXRfZGV2aWNlKGRpc2tfdG9fZGV2KGRpc2spKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhpcyBpcyBzYWZlOiBmbHVzaF93b3JrKCkgZnJvbSBsb29wX3JlbW92ZSgpIGZyb20gbG9vcF9leGl0KCkgd2FpdHMKJiM0MzsJICogdW50aWwgdGhpcyBmdW5jdGlvbiByZXR1cm5zOyBlZmZlY3RpdmVseSBkcm9wcGluZyB0aGUgZmluYWwgbW9kdWxlCiYjNDM7CSAqIHJlZmVyZW5jZXMgc3luY2hyb25vdXNseS4KJiM0MzsJICovCiYjNDM7CW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwogfQogCiBzdGF0aWMgaW50IGxvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pCkBAIC0xNzY5LDggJiM0MzsxNzk3LDIwIEBAIHN0YXRpYyB2b2lkIGxvX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2spCiAJbmVlZF9jbGVhciA9IChsby0mZ3Q7bG9fc3RhdGUgPT0gTG9fcnVuZG93bik7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7bG8tJmd0O2xvX211dGV4KTsKIAotCWlmIChuZWVkX2NsZWFyKQotCQlfX2xvb3BfY2xyX2ZkKGxvKTsKJiM0MzsJLyoKJiM0MzsJICogSW4gb3JkZXIgdG8gZmx1c2ggcGVuZGluZyBJL08gcmVxdWVzdHMgYmVmb3JlIGNsZWFyaW5nIHRoZSBiYWNraW5nCiYjNDM7CSAqIGRldmljZSwgZGVmZXIgX19sb29wX2Nscl9mZCgpIHRvIFdRIGNvbnRleHQuIFRoZSBMb19ydW5kb3duIHN0YXRlCiYjNDM7CSAqIGd1YXJhbnRlZXMgdGhhdCBsb19vcGVuKCkgd2lsbCBmYWlsIHdpdGggLUVOWElPLgomIzQzOwkgKi8KJiM0MzsJaWYgKG5lZWRfY2xlYXIpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBHcmFiIGFsbCByZWZlcmVuY2VzIHRoYXQgd2lsbCBiZSBkcm9wcGVkIGFzIHNvb24gYXMKJiM0MzsJCSAqIHJldHVybmluZyBmcm9tIGxvX3JlbGVhc2UoKSBhbmQgcmVsZWFzaW5nIGRpc2stJmd0O29wZW5fbXV0ZXguCiYjNDM7CQkgKi8KJiM0MzsJCWdldF9kZXZpY2UoZGlza190b19kZXYoZGlzaykpOwomIzQzOwkJX19tb2R1bGVfZ2V0KGRpc2stJmd0O2ZvcHMtJmd0O293bmVyKTsKJiM0MzsJCXF1ZXVlX3dvcmsoc3lzdGVtX2xvbmdfd3EsICZhbXA7bG8tJmd0O2xvX2Nscl93b3JrKTsKJiM0MzsJfQogfQogCiBzdGF0aWMgdm9pZCBsb19mcmVlX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spCkBAIC0yMDM0LDYgJiM0MzsyMDc0LDcgQEAgc3RhdGljIGludCBsb29wX2FkZChpbnQgaSkKIAlsbyA9IGt6YWxsb2Nfb2JqKCpsbyk7CiAJaWYgKCFsbykKIAkJZ290byBvdXQ7CiYjNDM7CUlOSVRfV09SSygmYW1wO2xvLSZndDtsb19jbHJfd29yaywgX19sb29wX2Nscl9mZCk7CiAJbG8tJmd0O3dvcmtlcl90cmVlID0gUkJfUk9PVDsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO2xvLSZndDtpZGxlX3dvcmtlcl9saXN0KTsKIAl0aW1lcl9zZXR1cCgmYW1wO2xvLSZndDt0aW1lciwgbG9vcF9mcmVlX2lkbGVfd29ya2Vyc190aW1lciwgVElNRVJfREVGRVJSQUJMRSk7CkBAIC0yMTM4LDYgJiM0MzsyMTc5LDkgQEAgc3RhdGljIGludCBsb29wX2FkZChpbnQgaSkKIAogc3RhdGljIHZvaWQgbG9vcF9yZW1vdmUoc3RydWN0IGxvb3BfZGV2aWNlICpsbykKIHsKJiM0MzsJLyogV2FpdCBmb3IgX19sb29wX2Nscl9mZCgpIHRvIGNvbXBsZXRlLiAqLwomIzQzOwlmbHVzaF93b3JrKCZhbXA7bG8tJmd0O2xvX2Nscl93b3JrKTsKJiM0MzsKIAkvKiBNYWtlIHRoaXMgbG9vcCBkZXZpY2UgdW5yZWFjaGFibGUgZnJvbSBwYXRobmFtZS4gKi8KIAlkZWxfZ2VuZGlzayhsby0mZ3Q7bG9fZGlzayk7CiAJYmxrX21xX2ZyZWVfdGFnX3NldCgmYW1wO2xvLSZndDt0YWdfc2V0KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE4OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2ODQKCQkJCQkJCW91dHB1dDogMTczCgkJCQkJCQl0aG91Z2h0czogNzg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBBc3Nlc3NtZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgaXQgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBydW4uIEZyb20gd2hhdCBJIHNlZSwgaXQmIzM5O3MgZm9jdXNlZCBvbiByZWZhY3RvcmluZyB0aGUgYGxvb3BgIGRyaXZlciwgc3BlY2lmaWNhbGx5IGBkcml2ZXJzL2Jsb2NrL2xvb3AuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2VzIGlzIGFzeW5jaHJvbm91cyBjbGVhbnVwIHVzaW5nIGEgd29ya3F1ZXVlIGFuZCBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIGxvY2tpbmcgYW5kIHJlZmNvdW50aW5nLgoKVGhlIHBhdGNoIGludHJvZHVjZXMgYHN0cnVjdCB3b3JrX3N0cnVjdCBsb19jbHJfd29ya2Agd2l0aGluIHRoZSBgc3RydWN0IGxvb3BfZGV2aWNlYC4gVGhlIG1vc3QgcmVsZXZhbnQgY2hhbmdlIGlzIHRoZSBzaGlmdCBmcm9tIHN5bmNocm9ub3VzIGNsZWFudXAgaW4gYGxvX3JlbGVhc2VgICh3aGljaCB3YXMgY2FsbGVkIHVuZGVyIGBvcGVuX211dGV4YCkgdG8gYW4gYXN5bmNocm9ub3VzIGFwcHJvYWNoIHVzaW5nIGBzeXN0ZW1fbG9uZ193cWAuIFdlIG5vdyBoYXZlIGEgYF9fbG9vcF9jbHJfZmRgIHdvcmsgaGFuZGxlciB0aGF0IGNsZWFucyB0aGluZ3MgdXAgKmFmdGVyKiByZWxlYXNpbmcgdGhlIGxvY2sgYW5kIGRvaW5nIHRoZSByZXF1aXJlZCByZWZjb3VudGluZyBhbmQgZGV2aWNlIGxpZmVjeWNsZSB3b3JrLiBUaGUgcGF0Y2ggYWxzbyBhZGRzIHdvcmsgaW5pdGlhbGl6YXRpb24gaW4gYGxvb3BfYWRkYCB3aXRoIGBJTklUX1dPUksoJmFtcDtsby0mZ3Q7bG9fY2xyX3dvcmssIF9fbG9vcF9jbHJfZmQpO2AgYW5kIGZsdXNoaW5nIGluIGBsb29wX3JlbW92ZWAgdXNpbmcgYGZsdXNoX3dvcmsoJmFtcDtsby0mZ3Q7bG9fY2xyX3dvcmspO2AuCgpUaGUgY2hhbmdlcyBhcmUgYWxsIGFib3V0IGNvbmN1cnJlbmN5LCBzeW5jaHJvbml6YXRpb24sIHdvcmtxdWV1ZXMsIHJlZmNvdW50aW5nLCBhbmQgbG9ja2luZyBtZWNoYW5pc21zLCBkZWZlcnJpbmcgY2xlYW51cCB0byBhdm9pZCBkZWFkbG9ja3Mgb3IgYmxvY2tpbmcuIFRoZXJlJiMzOTtzIG5vIGludHJvZHVjdGlvbiBvZiBuZXcgYnVmZmVycywgdXNlciBjb3BpZXMsIGlvY3RscyByZXR1cm5pbmcgZGF0YSwgbm8gbGVuZ3RoIG9yIGJvdW5kcyBjaGVja3MgYmVpbmcgY2hhbmdlZC4gSXQmIzM5O3Mgc2FmZSB0byBzYXkgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGUgd29yayBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQgY29ycmVjdGx5IGFmdGVyIGFsbG9jYXRpb24sIGFuZCB0aGUgY29udGV4dCBvZiB0aGUgd29yayBpdHNlbGYgYXBwZWFycyBzb3VuZC4KCk5vdywgY29uc2lkZXJpbmcgdGhlIEtNU0FOL0tBU0FOIGRpc3RpbmN0aW9uLCB0aGlzIGlzIHdoZXJlIGl0IGdldHMgY3J1Y2lhbC4gS01TQU4gaXMgZm9yIGRldGVjdGluZyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mb3JtYXRpb24gbGVha3MuIEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzIGFyZSBwZXJmZWN0bHkgc3VpdGVkIHRvIGRldGVjdCB0aGUgdHlwZSBvZiBpc3N1ZXMgaGVyZSAtIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZXMsIGludmFsaWQgZnJlZXMsIGFuZCBsb2NraW5nIGJ1Z3MuICoqVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwgTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4qKgoKVGhlcmVmb3JlLCBJIHRoaW5rIHRoaXMgcGF0Y2ggaXMgZmluZS4gTmVlZHNLTVNBTiBzaG91bGQgYmUgZmFsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGRyaXZlcnMvYmxvY2svbG9vcC5jIHRvIGRlZmVyIGxvb3AgZGV2aWNlIHRlYXJkb3duIChfX2xvb3BfY2xyX2ZkKSB0byBhIHdvcmtxdWV1ZSBpdGVtIChsb19jbHJfd29yaykgcmF0aGVyIHRoYW4gZXhlY3V0aW5nIGl0IHN5bmNocm9ub3VzbHkgaW4gbG9fcmVsZWFzZS4gVGhlIGNoYW5nZXMgaW52b2x2ZSB3b3JrcXVldWUgc2NoZWR1bGluZywgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgc3luY2hyb25pemF0aW9uIChkcmFpbl93b3JrcXVldWUsIGZyZWV6ZV9xdWV1ZSwgbXV0ZXggbG9ja2luZykuIE5vIHVuaW5pdGlhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmVzLCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIEFueSBwb3RlbnRpYWwgYnVncyByZXN1bHRpbmcgZnJvbSB0aGlzIHBhdGNoIChzdWNoIGFzIHJhY2UgY29uZGl0aW9ucywgZGVhZGxvY2tzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgcmVmZXJlbmNlIGNvdW50IGxlYWtzKSBhcmUgY292ZXJlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBzYW5pdGl6ZXJzLCBtYWtpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIHVubmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZHJpdmVycy9ibG9jay9sb29wLmMgdG8gZGVmZXIgbG9vcCBkZXZpY2UgdGVhcmRvd24gKF9fbG9vcF9jbHJfZmQpIHRvIGEgd29ya3F1ZXVlIGl0ZW0gKGxvX2Nscl93b3JrKSByYXRoZXIgdGhhbiBleGVjdXRpbmcgaXQgc3luY2hyb25vdXNseSBpbiBsb19yZWxlYXNlLiBUaGUgY2hhbmdlcyBpbnZvbHZlIHdvcmtxdWV1ZSBzY2hlZHVsaW5nLCByZWZlcmVuY2UgY291bnRpbmcsIGFuZCBzeW5jaHJvbml6YXRpb24gKGRyYWluX3dvcmtxdWV1ZSwgZnJlZXplX3F1ZXVlLCBtdXRleCBsb2NraW5nKS4gTm8gdW5pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZXMsIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQW55IHBvdGVudGlhbCBidWdzIHJlc3VsdGluZyBmcm9tIHRoaXMgcGF0Y2ggKHN1Y2ggYXMgcmFjZSBjb25kaXRpb25zLCBkZWFkbG9ja3MsIHVzZS1hZnRlci1mcmVlLCBvciByZWZlcmVuY2UgY291bnQgbGVha3MpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIHNhbml0aXplcnMsIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjU2OjQ5LjMyNTU3ODk3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDAwMjAxNTUyNDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTE9PUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxvX3JlbGVhc2VcIixcbiAgICBcImxvb3BfY2xyX2ZkXCIsXG4gICAgXCJsb19pb2N0bFwiLFxuICAgIFwibG9vcF9jb250cm9sX2lvY3RsXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkcml2ZXJzL2Jsb2NrL2xvb3AuYyB0byBkZWZlciBsb29wIGRldmljZSB0ZWFyZG93biAoX19sb29wX2Nscl9mZCkgdG8gYSB3b3JrcXVldWUgaXRlbSAobG9fY2xyX3dvcmspIHJhdGhlciB0aGFuIGV4ZWN1dGluZyBpdCBzeW5jaHJvbm91c2x5IGluIGxvX3JlbGVhc2UuIFRoZSBjaGFuZ2VzIGludm9sdmUgd29ya3F1ZXVlIHNjaGVkdWxpbmcsIHJlZmVyZW5jZSBjb3VudGluZywgYW5kIHN5bmNocm9uaXphdGlvbiAoZHJhaW5fd29ya3F1ZXVlLCBmcmVlemVfcXVldWUsIG11dGV4IGxvY2tpbmcpLiBObyB1bmluaXRpYWxpemVkIGRhdGEgc3RydWN0dXJlcywgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhpcyBwYXRjaCAoc3VjaCBhcyByYWNlIGNvbmRpdGlvbnMsIGRlYWRsb2NrcywgdXNlLWFmdGVyLWZyZWUsIG9yIHJlZmVyZW5jZSBjb3VudCBsZWFrcykgYXJlIGNvdmVyZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgc2FuaXRpemVycywgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiB1bm5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBsb29wIGRldmljZSB0ZWFyZG93biBsb2dpYyBpbiBkcml2ZXJzL2Jsb2NrL2xvb3AuYyB0byBkZWZlciBjbGVhcmluZyB0aGUgYmFja2luZyBmaWxlIGFuZCByZWxlYXNpbmcgcmVzb3VyY2VzIChfX2xvb3BfY2xyX2ZkKSB0byBhIHdvcmtxdWV1ZSBjb250ZXh0IHdoZW4gdGhlIGxvb3AgZGV2aWNlIGlzIGNsb3NlZC4gVGhpcyBpbnRyb2R1Y2VzIG5ldyBjb25jdXJyZW5jeSBoYW5kbGluZywgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgcXVldWUgZHJhaW5pbmcgc2VtYW50aWNzIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgZm9yIHJhY2UgY29uZGl0aW9ucywgZGVhZGxvY2tzLCBhbmQgVUFGcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTc6NTY6NDkuMzI1NTgzMjdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzOTI1NTk3OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxNzg3NTlmYjdkY2I5N2NhZGUxMTYxM2JiMDM2M2EzMGI1YWM5ODkzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDI4IDE3OjU2OjQ3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbG9vcC5jIGIvZHJpdmVycy9ibG9jay9sb29wLmNcXG5pbmRleCA2ZjEyOTc2MDM1YjA5Li5lMjcwM2YwZWU3NWQ3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jXFxuKysrIGIvZHJpdmVycy9ibG9jay9sb29wLmNcXG5AQCAtNzUsNiArNzUsNyBAQCBzdHJ1Y3QgbG9vcF9kZXZpY2Uge1xcbiBcXHRzdHJ1Y3QgZ2VuZGlza1xcdFxcdCpsb19kaXNrO1xcbiBcXHRzdHJ1Y3QgbXV0ZXhcXHRcXHRsb19tdXRleDtcXG4gXFx0Ym9vbFxcdFxcdFxcdGlkcl92aXNpYmxlO1xcbitcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcXHRsb19jbHJfd29yaztcXG4gfTtcXG4gXFxuIHN0cnVjdCBsb29wX2NtZCB7XFxuQEAgLTExMzQsMTMgKzExMzUsMzUgQEAgc3RhdGljIGludCBsb29wX2NvbmZpZ3VyZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBibGtfbW9kZV90IG1vZGUsXFxuIFxcdHJldHVybiBlcnJvcjtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbitzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4ge1xcbitcXHRzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBsb29wX2RldmljZSwgbG9fY2xyX3dvcmspO1xcbitcXHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGxvLVxcdTAwM2Vsb19kaXNrO1xcbiBcXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtcXG4gXFx0c3RydWN0IGZpbGUgKmZpbHA7XFxuIFxcdGdmcF90IGdmcCA9IGxvLVxcdTAwM2VvbGRfZ2ZwX21hc2s7XFxuIFxcdGludCBlcnI7XFxuIFxcbitcXHQvKiBTdGVwIDE6IEZsdXNoIGFsbCBvdXRzdGFuZGluZyBJL08sIHdpdGhvdXQgb3Blbl9tdXRleCBoZWxkLiAqL1xcbitcXHQvKlxcbitcXHQgKiBOb3cgdGhhdCBsb29wX3F1ZXVlX3JxKCkgc2VlcyBsby1cXHUwMDNlbG9fc3RhdGUgIT0gTG9fYm91bmQsXFxuK1xcdCAqIHdhaXQgZm9yIGFscmVhZHkgc3RhcnRlZCBsb29wX3F1ZXVlX3JxKCkgdG8gY29tcGxldGUuXFxuK1xcdCAqL1xcbitcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4rXFx0LypcXG4rXFx0ICogTm93IHRoYXQgbm8gbW9yZSB3b3JrcyBhcmUgc2NoZWR1bGVkIGJ5IGxvb3BfcXVldWVfcnEoKSxcXG4rXFx0ICogd2FpdCBmb3IgYWxyZWFkeSBzY2hlZHVsZWQgd29ya3MgdG8gY29tcGxldGUuXFxuK1xcdCAqL1xcbitcXHRkcmFpbl93b3JrcXVldWUobG8tXFx1MDAzZXdvcmtxdWV1ZSk7XFxuK1xcdC8qXFxuK1xcdCAqIE5vdyB0aGF0IG5vIG1vcmUgQUlPIHJlcXVlc3RzIGFyZSBzY2hlZHVsZWQgYnkgbG9fcndfYWlvKCksXFxuK1xcdCAqIHdhaXQgZm9yIGFscmVhZHkgc3RhcnRlZCBBSU8gdG8gY29tcGxldGUuXFxuK1xcdCAqL1xcbitcXHRibGtfbXFfdW5mcmVlemVfcXVldWUobG8tXFx1MDAzZWxvX3F1ZXVlLCBibGtfbXFfZnJlZXplX3F1ZXVlKGxvLVxcdTAwM2Vsb19xdWV1ZSkpO1xcbitcXG4rXFx0LyogU3RlcCAyOiBQZXJmb3JtIHJlbWFpbmluZyBjbGVhbnVwLCB3aXRoIG9wZW5fbXV0ZXggaGVsZC4gKi9cXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGlzay1cXHUwMDNlb3Blbl9tdXRleCk7XFxuK1xcbiBcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZsby1cXHUwMDNlbG9fbG9jayk7XFxuIFxcdGZpbHAgPSBsby1cXHUwMDNlbG9fYmFja2luZ19maWxlO1xcbiBcXHRsby1cXHUwMDNlbG9fYmFja2luZ19maWxlID0gTlVMTDtcXG5AQCAtMTE1MSwxMiArMTE3NCw3IEBAIHN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG4gXFx0bG8tXFx1MDAzZWxvX3NpemVsaW1pdCA9IDA7XFxuIFxcdG1lbXNldChsby1cXHUwMDNlbG9fZmlsZV9uYW1lLCAwLCBMT19OQU1FX1NJWkUpO1xcbiBcXG4tXFx0LypcXG4tXFx0ICogUmVzZXQgdGhlIGJsb2NrIHNpemUgdG8gdGhlIGRlZmF1bHQuXFxuLVxcdCAqXFxuLVxcdCAqIE5vIHF1ZXVlIGZyZWV6aW5nIG5lZWRlZCBiZWNhdXNlIHRoaXMgaXMgY2FsbGVkIGZyb20gdGhlIGZpbmFsXFxuLVxcdCAqIC1cXHUwMDNlcmVsZWFzZSBjYWxsIG9ubHksIHNvIHRoZXJlIGNhbid0IGJlIGFueSBvdXRzdGFuZGluZyBJL08uXFxuLVxcdCAqL1xcbitcXHQvKiBSZXNldCB0aGUgYmxvY2sgc2l6ZSB0byB0aGUgZGVmYXVsdC4gKi9cXG4gXFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cXHUwMDNlbG9fcXVldWUpO1xcbiBcXHRsaW0ubG9naWNhbF9ibG9ja19zaXplID0gU0VDVE9SX1NJWkU7XFxuIFxcdGxpbS5waHlzaWNhbF9ibG9ja19zaXplID0gU0VDVE9SX1NJWkU7XFxuQEAgLTExNjgsOCArMTE4Niw2IEBAIHN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG4gXFx0LyogbGV0IHVzZXItc3BhY2Uga25vdyBhYm91dCB0aGlzIGNoYW5nZSAqL1xcbiBcXHRrb2JqZWN0X3VldmVudChcXHUwMDI2ZGlza190b19kZXYobG8tXFx1MDAzZWxvX2Rpc2spLVxcdTAwM2Vrb2JqLCBLT0JKX0NIQU5HRSk7XFxuIFxcdG1hcHBpbmdfc2V0X2dmcF9tYXNrKGZpbHAtXFx1MDAzZWZfbWFwcGluZywgZ2ZwKTtcXG4tXFx0LyogVGhpcyBpcyBzYWZlOiBvcGVuKCkgaXMgc3RpbGwgaG9sZGluZyBhIHJlZmVyZW5jZS4gKi9cXG4tXFx0bW9kdWxlX3B1dChUSElTX01PRFVMRSk7XFxuIFxcbiBcXHRkaXNrX2ZvcmNlX21lZGlhX2NoYW5nZShsby1cXHUwMDNlbG9fZGlzayk7XFxuIFxcbkBAIC0xMTk5LDEyICsxMjE1LDI0IEBAIHN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG4gXFx0V1JJVEVfT05DRShsby1cXHUwMDNlbG9fc3RhdGUsIExvX3VuYm91bmQpO1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNmxvLVxcdTAwM2Vsb19tdXRleCk7XFxuIFxcbitcXHQvKiBTdGVwIDM6IERyb3AgcmVmY291bnRzLCB3aXRob3V0IG9wZW5fbXV0ZXggaGVsZC4gKi9cXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkaXNrLVxcdTAwM2VvcGVuX211dGV4KTtcXG4rXFxuK1xcdGZwdXQoZmlscCk7XFxuK1xcbiBcXHQvKlxcbi1cXHQgKiBOZWVkIG5vdCBob2xkIGxvX211dGV4IHRvIGZwdXQgYmFja2luZyBmaWxlLiBDYWxsaW5nIGZwdXQgaG9sZGluZ1xcbi1cXHQgKiBsb19tdXRleCB0cmlnZ2VycyBhIGNpcmN1bGFyIGxvY2sgZGVwZW5kZW5jeSBwb3NzaWJpbGl0eSB3YXJuaW5nIGFzXFxuLVxcdCAqIGZwdXQgY2FuIHRha2Ugb3Blbl9tdXRleCB3aGljaCBpcyB1c3VhbGx5IHRha2VuIGJlZm9yZSBsb19tdXRleC5cXG4rXFx0ICogRHJvcCBhbGwgcmVmZXJlbmNlcyB0aGF0IHdvdWxkIGhhdmUgYmVlbiBkcm9wcGVkIGFzIHNvb24gYXNcXG4rXFx0ICogcmV0dXJuaW5nIGZyb20gbG9fcmVsZWFzZSgpIGFuZCByZWxlYXNpbmcgZGlzay1cXHUwMDNlb3Blbl9tdXRleC5cXG4gXFx0ICovXFxuLVxcdGZwdXQoZmlscCk7XFxuK1xcdG1vZHVsZV9wdXQoZGlzay1cXHUwMDNlZm9wcy1cXHUwMDNlb3duZXIpO1xcbitcXHRwdXRfZGV2aWNlKGRpc2tfdG9fZGV2KGRpc2spKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFRoaXMgaXMgc2FmZTogZmx1c2hfd29yaygpIGZyb20gbG9vcF9yZW1vdmUoKSBmcm9tIGxvb3BfZXhpdCgpIHdhaXRzXFxuK1xcdCAqIHVudGlsIHRoaXMgZnVuY3Rpb24gcmV0dXJuczsgZWZmZWN0aXZlbHkgZHJvcHBpbmcgdGhlIGZpbmFsIG1vZHVsZVxcbitcXHQgKiByZWZlcmVuY2VzIHN5bmNocm9ub3VzbHkuXFxuK1xcdCAqL1xcbitcXHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBsb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbkBAIC0xNzY5LDggKzE3OTcsMjAgQEAgc3RhdGljIHZvaWQgbG9fcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4gXFx0bmVlZF9jbGVhciA9IChsby1cXHUwMDNlbG9fc3RhdGUgPT0gTG9fcnVuZG93bik7XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2bG8tXFx1MDAzZWxvX211dGV4KTtcXG4gXFxuLVxcdGlmIChuZWVkX2NsZWFyKVxcbi1cXHRcXHRfX2xvb3BfY2xyX2ZkKGxvKTtcXG4rXFx0LypcXG4rXFx0ICogSW4gb3JkZXIgdG8gZmx1c2ggcGVuZGluZyBJL08gcmVxdWVzdHMgYmVmb3JlIGNsZWFyaW5nIHRoZSBiYWNraW5nXFxuK1xcdCAqIGRldmljZSwgZGVmZXIgX19sb29wX2Nscl9mZCgpIHRvIFdRIGNvbnRleHQuIFRoZSBMb19ydW5kb3duIHN0YXRlXFxuK1xcdCAqIGd1YXJhbnRlZXMgdGhhdCBsb19vcGVuKCkgd2lsbCBmYWlsIHdpdGggLUVOWElPLlxcbitcXHQgKi9cXG4rXFx0aWYgKG5lZWRfY2xlYXIpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogR3JhYiBhbGwgcmVmZXJlbmNlcyB0aGF0IHdpbGwgYmUgZHJvcHBlZCBhcyBzb29uIGFzXFxuK1xcdFxcdCAqIHJldHVybmluZyBmcm9tIGxvX3JlbGVhc2UoKSBhbmQgcmVsZWFzaW5nIGRpc2stXFx1MDAzZW9wZW5fbXV0ZXguXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRnZXRfZGV2aWNlKGRpc2tfdG9fZGV2KGRpc2spKTtcXG4rXFx0XFx0X19tb2R1bGVfZ2V0KGRpc2stXFx1MDAzZWZvcHMtXFx1MDAzZW93bmVyKTtcXG4rXFx0XFx0cXVldWVfd29yayhzeXN0ZW1fbG9uZ193cSwgXFx1MDAyNmxvLVxcdTAwM2Vsb19jbHJfd29yayk7XFxuK1xcdH1cXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgbG9fZnJlZV9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbkBAIC0yMDM0LDYgKzIwNzQsNyBAQCBzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKVxcbiBcXHRsbyA9IGt6YWxsb2Nfb2JqKCpsbyk7XFxuIFxcdGlmICghbG8pXFxuIFxcdFxcdGdvdG8gb3V0O1xcbitcXHRJTklUX1dPUksoXFx1MDAyNmxvLVxcdTAwM2Vsb19jbHJfd29yaywgX19sb29wX2Nscl9mZCk7XFxuIFxcdGxvLVxcdTAwM2V3b3JrZXJfdHJlZSA9IFJCX1JPT1Q7XFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZsby1cXHUwMDNlaWRsZV93b3JrZXJfbGlzdCk7XFxuIFxcdHRpbWVyX3NldHVwKFxcdTAwMjZsby1cXHUwMDNldGltZXIsIGxvb3BfZnJlZV9pZGxlX3dvcmtlcnNfdGltZXIsIFRJTUVSX0RFRkVSUkFCTEUpO1xcbkBAIC0yMTM4LDYgKzIxNzksOSBAQCBzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKVxcbiBcXG4gc3RhdGljIHZvaWQgbG9vcF9yZW1vdmUoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG4ge1xcbitcXHQvKiBXYWl0IGZvciBfX2xvb3BfY2xyX2ZkKCkgdG8gY29tcGxldGUuICovXFxuK1xcdGZsdXNoX3dvcmsoXFx1MDAyNmxvLVxcdTAwM2Vsb19jbHJfd29yayk7XFxuK1xcbiBcXHQvKiBNYWtlIHRoaXMgbG9vcCBkZXZpY2UgdW5yZWFjaGFibGUgZnJvbSBwYXRobmFtZS4gKi9cXG4gXFx0ZGVsX2dlbmRpc2sobG8tXFx1MDAzZWxvX2Rpc2spO1xcbiBcXHRibGtfbXFfZnJlZV90YWdfc2V0KFxcdTAwMjZsby1cXHUwMDNldGFnX3NldCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjU2OjUwLjcxODgwNTQ0N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzgzODI5ODIzMDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTE9PUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxvX3JlbGVhc2VcIixcbiAgICBcImxvb3BfY2xyX2ZkXCIsXG4gICAgXCJsb19pb2N0bFwiLFxuICAgIFwibG9vcF9jb250cm9sX2lvY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbG9vcCBkZXZpY2UgdGVhcmRvd24gbG9naWMgaW4gZHJpdmVycy9ibG9jay9sb29wLmMgdG8gZGVmZXIgY2xlYXJpbmcgdGhlIGJhY2tpbmcgZmlsZSBhbmQgcmVsZWFzaW5nIHJlc291cmNlcyAoX19sb29wX2Nscl9mZCkgdG8gYSB3b3JrcXVldWUgY29udGV4dCB3aGVuIHRoZSBsb29wIGRldmljZSBpcyBjbG9zZWQuIFRoaXMgaW50cm9kdWNlcyBuZXcgY29uY3VycmVuY3kgaGFuZGxpbmcsIHJlZmVyZW5jZSBjb3VudGluZywgYW5kIHF1ZXVlIGRyYWluaW5nIHNlbWFudGljcyB3aGljaCBzaG91bGQgYmUgZnV6emVkIGZvciByYWNlIGNvbmRpdGlvbnMsIGRlYWRsb2NrcywgYW5kIFVBRnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDE3ODc1OWZiN2RjYjk3Y2FkZTExNjEzYmIwMzYzYTMwYjVhYzk4OTNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyOCAxNzo1Njo0NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbG9vcC5jIGIvZHJpdmVycy9ibG9jay9sb29wLmNcbmluZGV4IDZmMTI5NzYwMzViMDkuLmUyNzAzZjBlZTc1ZDcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuKysrIGIvZHJpdmVycy9ibG9jay9sb29wLmNcbkBAIC03NSw2ICs3NSw3IEBAIHN0cnVjdCBsb29wX2RldmljZSB7XG4gXHRzdHJ1Y3QgZ2VuZGlza1x0XHQqbG9fZGlzaztcbiBcdHN0cnVjdCBtdXRleFx0XHRsb19tdXRleDtcbiBcdGJvb2xcdFx0XHRpZHJfdmlzaWJsZTtcbitcdHN0cnVjdCB3b3JrX3N0cnVjdFx0bG9fY2xyX3dvcms7XG4gfTtcbiBcbiBzdHJ1Y3QgbG9vcF9jbWQge1xuQEAgLTExMzQsMTMgKzExMzUsMzUgQEAgc3RhdGljIGludCBsb29wX2NvbmZpZ3VyZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBibGtfbW9kZV90IG1vZGUsXG4gXHRyZXR1cm4gZXJyb3I7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbitzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4rXHRzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBsb29wX2RldmljZSwgbG9fY2xyX3dvcmspO1xuK1x0c3RydWN0IGdlbmRpc2sgKmRpc2sgPSBsby1cdTAwM2Vsb19kaXNrO1xuIFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07XG4gXHRzdHJ1Y3QgZmlsZSAqZmlscDtcbiBcdGdmcF90IGdmcCA9IGxvLVx1MDAzZW9sZF9nZnBfbWFzaztcbiBcdGludCBlcnI7XG4gXG4rXHQvKiBTdGVwIDE6IEZsdXNoIGFsbCBvdXRzdGFuZGluZyBJL08sIHdpdGhvdXQgb3Blbl9tdXRleCBoZWxkLiAqL1xuK1x0LypcbitcdCAqIE5vdyB0aGF0IGxvb3BfcXVldWVfcnEoKSBzZWVzIGxvLVx1MDAzZWxvX3N0YXRlICE9IExvX2JvdW5kLFxuK1x0ICogd2FpdCBmb3IgYWxyZWFkeSBzdGFydGVkIGxvb3BfcXVldWVfcnEoKSB0byBjb21wbGV0ZS5cbitcdCAqL1xuK1x0c3luY2hyb25pemVfcmN1KCk7XG4rXHQvKlxuK1x0ICogTm93IHRoYXQgbm8gbW9yZSB3b3JrcyBhcmUgc2NoZWR1bGVkIGJ5IGxvb3BfcXVldWVfcnEoKSxcbitcdCAqIHdhaXQgZm9yIGFscmVhZHkgc2NoZWR1bGVkIHdvcmtzIHRvIGNvbXBsZXRlLlxuK1x0ICovXG4rXHRkcmFpbl93b3JrcXVldWUobG8tXHUwMDNld29ya3F1ZXVlKTtcbitcdC8qXG4rXHQgKiBOb3cgdGhhdCBubyBtb3JlIEFJTyByZXF1ZXN0cyBhcmUgc2NoZWR1bGVkIGJ5IGxvX3J3X2FpbygpLFxuK1x0ICogd2FpdCBmb3IgYWxyZWFkeSBzdGFydGVkIEFJTyB0byBjb21wbGV0ZS5cbitcdCAqL1xuK1x0YmxrX21xX3VuZnJlZXplX3F1ZXVlKGxvLVx1MDAzZWxvX3F1ZXVlLCBibGtfbXFfZnJlZXplX3F1ZXVlKGxvLVx1MDAzZWxvX3F1ZXVlKSk7XG4rXG4rXHQvKiBTdGVwIDI6IFBlcmZvcm0gcmVtYWluaW5nIGNsZWFudXAsIHdpdGggb3Blbl9tdXRleCBoZWxkLiAqL1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZkaXNrLVx1MDAzZW9wZW5fbXV0ZXgpO1xuK1xuIFx0c3Bpbl9sb2NrX2lycShcdTAwMjZsby1cdTAwM2Vsb19sb2NrKTtcbiBcdGZpbHAgPSBsby1cdTAwM2Vsb19iYWNraW5nX2ZpbGU7XG4gXHRsby1cdTAwM2Vsb19iYWNraW5nX2ZpbGUgPSBOVUxMO1xuQEAgLTExNTEsMTIgKzExNzQsNyBAQCBzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4gXHRsby1cdTAwM2Vsb19zaXplbGltaXQgPSAwO1xuIFx0bWVtc2V0KGxvLVx1MDAzZWxvX2ZpbGVfbmFtZSwgMCwgTE9fTkFNRV9TSVpFKTtcbiBcbi1cdC8qXG4tXHQgKiBSZXNldCB0aGUgYmxvY2sgc2l6ZSB0byB0aGUgZGVmYXVsdC5cbi1cdCAqXG4tXHQgKiBObyBxdWV1ZSBmcmVlemluZyBuZWVkZWQgYmVjYXVzZSB0aGlzIGlzIGNhbGxlZCBmcm9tIHRoZSBmaW5hbFxuLVx0ICogLVx1MDAzZXJlbGVhc2UgY2FsbCBvbmx5LCBzbyB0aGVyZSBjYW4ndCBiZSBhbnkgb3V0c3RhbmRpbmcgSS9PLlxuLVx0ICovXG4rXHQvKiBSZXNldCB0aGUgYmxvY2sgc2l6ZSB0byB0aGUgZGVmYXVsdC4gKi9cbiBcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tXHUwMDNlbG9fcXVldWUpO1xuIFx0bGltLmxvZ2ljYWxfYmxvY2tfc2l6ZSA9IFNFQ1RPUl9TSVpFO1xuIFx0bGltLnBoeXNpY2FsX2Jsb2NrX3NpemUgPSBTRUNUT1JfU0laRTtcbkBAIC0xMTY4LDggKzExODYsNiBAQCBzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4gXHQvKiBsZXQgdXNlci1zcGFjZSBrbm93IGFib3V0IHRoaXMgY2hhbmdlICovXG4gXHRrb2JqZWN0X3VldmVudChcdTAwMjZkaXNrX3RvX2Rldihsby1cdTAwM2Vsb19kaXNrKS1cdTAwM2Vrb2JqLCBLT0JKX0NIQU5HRSk7XG4gXHRtYXBwaW5nX3NldF9nZnBfbWFzayhmaWxwLVx1MDAzZWZfbWFwcGluZywgZ2ZwKTtcbi1cdC8qIFRoaXMgaXMgc2FmZTogb3BlbigpIGlzIHN0aWxsIGhvbGRpbmcgYSByZWZlcmVuY2UuICovXG4tXHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcbiBcbiBcdGRpc2tfZm9yY2VfbWVkaWFfY2hhbmdlKGxvLVx1MDAzZWxvX2Rpc2spO1xuIFxuQEAgLTExOTksMTIgKzEyMTUsMjQgQEAgc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuIFx0V1JJVEVfT05DRShsby1cdTAwM2Vsb19zdGF0ZSwgTG9fdW5ib3VuZCk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2bG8tXHUwMDNlbG9fbXV0ZXgpO1xuIFxuK1x0LyogU3RlcCAzOiBEcm9wIHJlZmNvdW50cywgd2l0aG91dCBvcGVuX211dGV4IGhlbGQuICovXG4rXHRtdXRleF91bmxvY2soXHUwMDI2ZGlzay1cdTAwM2VvcGVuX211dGV4KTtcbitcbitcdGZwdXQoZmlscCk7XG4rXG4gXHQvKlxuLVx0ICogTmVlZCBub3QgaG9sZCBsb19tdXRleCB0byBmcHV0IGJhY2tpbmcgZmlsZS4gQ2FsbGluZyBmcHV0IGhvbGRpbmdcbi1cdCAqIGxvX211dGV4IHRyaWdnZXJzIGEgY2lyY3VsYXIgbG9jayBkZXBlbmRlbmN5IHBvc3NpYmlsaXR5IHdhcm5pbmcgYXNcbi1cdCAqIGZwdXQgY2FuIHRha2Ugb3Blbl9tdXRleCB3aGljaCBpcyB1c3VhbGx5IHRha2VuIGJlZm9yZSBsb19tdXRleC5cbitcdCAqIERyb3AgYWxsIHJlZmVyZW5jZXMgdGhhdCB3b3VsZCBoYXZlIGJlZW4gZHJvcHBlZCBhcyBzb29uIGFzXG4rXHQgKiByZXR1cm5pbmcgZnJvbSBsb19yZWxlYXNlKCkgYW5kIHJlbGVhc2luZyBkaXNrLVx1MDAzZW9wZW5fbXV0ZXguXG4gXHQgKi9cbi1cdGZwdXQoZmlscCk7XG4rXHRtb2R1bGVfcHV0KGRpc2stXHUwMDNlZm9wcy1cdTAwM2Vvd25lcik7XG4rXHRwdXRfZGV2aWNlKGRpc2tfdG9fZGV2KGRpc2spKTtcbitcbitcdC8qXG4rXHQgKiBUaGlzIGlzIHNhZmU6IGZsdXNoX3dvcmsoKSBmcm9tIGxvb3BfcmVtb3ZlKCkgZnJvbSBsb29wX2V4aXQoKSB3YWl0c1xuK1x0ICogdW50aWwgdGhpcyBmdW5jdGlvbiByZXR1cm5zOyBlZmZlY3RpdmVseSBkcm9wcGluZyB0aGUgZmluYWwgbW9kdWxlXG4rXHQgKiByZWZlcmVuY2VzIHN5bmNocm9ub3VzbHkuXG4rXHQgKi9cbitcdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xuIH1cbiBcbiBzdGF0aWMgaW50IGxvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG5AQCAtMTc2OSw4ICsxNzk3LDIwIEBAIHN0YXRpYyB2b2lkIGxvX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4gXHRuZWVkX2NsZWFyID0gKGxvLVx1MDAzZWxvX3N0YXRlID09IExvX3J1bmRvd24pO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxvLVx1MDAzZWxvX211dGV4KTtcbiBcbi1cdGlmIChuZWVkX2NsZWFyKVxuLVx0XHRfX2xvb3BfY2xyX2ZkKGxvKTtcbitcdC8qXG4rXHQgKiBJbiBvcmRlciB0byBmbHVzaCBwZW5kaW5nIEkvTyByZXF1ZXN0cyBiZWZvcmUgY2xlYXJpbmcgdGhlIGJhY2tpbmdcbitcdCAqIGRldmljZSwgZGVmZXIgX19sb29wX2Nscl9mZCgpIHRvIFdRIGNvbnRleHQuIFRoZSBMb19ydW5kb3duIHN0YXRlXG4rXHQgKiBndWFyYW50ZWVzIHRoYXQgbG9fb3BlbigpIHdpbGwgZmFpbCB3aXRoIC1FTlhJTy5cbitcdCAqL1xuK1x0aWYgKG5lZWRfY2xlYXIpIHtcbitcdFx0LypcbitcdFx0ICogR3JhYiBhbGwgcmVmZXJlbmNlcyB0aGF0IHdpbGwgYmUgZHJvcHBlZCBhcyBzb29uIGFzXG4rXHRcdCAqIHJldHVybmluZyBmcm9tIGxvX3JlbGVhc2UoKSBhbmQgcmVsZWFzaW5nIGRpc2stXHUwMDNlb3Blbl9tdXRleC5cbitcdFx0ICovXG4rXHRcdGdldF9kZXZpY2UoZGlza190b19kZXYoZGlzaykpO1xuK1x0XHRfX21vZHVsZV9nZXQoZGlzay1cdTAwM2Vmb3BzLVx1MDAzZW93bmVyKTtcbitcdFx0cXVldWVfd29yayhzeXN0ZW1fbG9uZ193cSwgXHUwMDI2bG8tXHUwMDNlbG9fY2xyX3dvcmspO1xuK1x0fVxuIH1cbiBcbiBzdGF0aWMgdm9pZCBsb19mcmVlX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spXG5AQCAtMjAzNCw2ICsyMDc0LDcgQEAgc3RhdGljIGludCBsb29wX2FkZChpbnQgaSlcbiBcdGxvID0ga3phbGxvY19vYmooKmxvKTtcbiBcdGlmICghbG8pXG4gXHRcdGdvdG8gb3V0O1xuK1x0SU5JVF9XT1JLKFx1MDAyNmxvLVx1MDAzZWxvX2Nscl93b3JrLCBfX2xvb3BfY2xyX2ZkKTtcbiBcdGxvLVx1MDAzZXdvcmtlcl90cmVlID0gUkJfUk9PVDtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmxvLVx1MDAzZWlkbGVfd29ya2VyX2xpc3QpO1xuIFx0dGltZXJfc2V0dXAoXHUwMDI2bG8tXHUwMDNldGltZXIsIGxvb3BfZnJlZV9pZGxlX3dvcmtlcnNfdGltZXIsIFRJTUVSX0RFRkVSUkFCTEUpO1xuQEAgLTIxMzgsNiArMjE3OSw5IEBAIHN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpXG4gXG4gc3RhdGljIHZvaWQgbG9vcF9yZW1vdmUoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbiB7XG4rXHQvKiBXYWl0IGZvciBfX2xvb3BfY2xyX2ZkKCkgdG8gY29tcGxldGUuICovXG4rXHRmbHVzaF93b3JrKFx1MDAyNmxvLVx1MDAzZWxvX2Nscl93b3JrKTtcbitcbiBcdC8qIE1ha2UgdGhpcyBsb29wIGRldmljZSB1bnJlYWNoYWJsZSBmcm9tIHBhdGhuYW1lLiAqL1xuIFx0ZGVsX2dlbmRpc2sobG8tXHUwMDNlbG9fZGlzayk7XG4gXHRibGtfbXFfZnJlZV90YWdfc2V0KFx1MDAyNmxvLVx1MDAzZXRhZ19zZXQpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTc6NTY6NTAuNzE4ODA2ODI3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTAyMjA2MjY0OTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgYXMgaWYgSSdtIHJlZmxlY3Rpbmcgb24gdGhlbSBteXNlbGYsIGFzIGFuIGV4cGVydCBpbiBteSBmaWVsZDpcblxuKipBbmFseXppbmcgYSBLZXJuZWwgTG9vcCBEZXZpY2UgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyB0b3VjaGluZyBgZHJpdmVycy9ibG9jay9sb29wLmNgLiBJbW1lZGlhdGVseSwgbXkgbWVudGFsIGdlYXJzIHN0YXJ0IHR1cm5pbmcuIEZpcnN0IHRoaW5ncyBmaXJzdDogSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgcGF0Y2ggaXRzZWxmLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCAqcHJlY2lzZWx5KiB3aGF0IGNoYW5nZXMgYXJlIGJlaW5nIG1hZGUgdG8gdGhhdCBsb29wIGRldmljZSBjb2RlLiBXaGF0J3MgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBiZWluZyBhbHRlcmVkPyBBcmUgdGhlcmUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zPyBTZWN1cml0eSBjb25zaWRlcmF0aW9ucz9cblxuQmV5b25kIHRoZSBjb2RlIGl0c2VsZiwgSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSwgb3IgY2hlY2sgZGlyZWN0bHksIHdoYXQgS2NvbmZpZyBvcHRpb25zIGFyZSByZWxhdGVkIHRvIHRoZSBsb29wIGRldmljZS4gV2hhdCBjYW4gYmUgZW5hYmxlZCBvciBkaXNhYmxlZD8gSG93IGRvZXMgdGhpcyBwYXRjaCBpbnRlcmFjdCB3aXRoIHRob3NlIG9wdGlvbnM/IEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCBzb21lIHF1aWNrIGdyZXBzIHRocm91Z2ggdGhlIEtjb25maWcgZmlsZXMsIG9yIGdvIHN0cmFpZ2h0IHRvIGJyb3dzaW5nIHRoZSByZWxldmFudCBmaWxlcywgdG8gcXVpY2tseSBnZXQgdGhlIGJpZ2dlciBwaWN0dXJlLCBhbmQgc2VlIGhvdyB0aGlzIGNoYW5nZSB3aWxsIGVmZmVjdCBldmVyeXRoaW5nLiBJdCdzIGFsbCBhYm91dCBjb250ZXh0LCBhbmQgdW5kZXJzdGFuZGluZyB0aGUgY29tcGlsZS10aW1lIGxhbmRzY2FwZSBmb3IgdGhlIGxvb3AgZGV2aWNlIGlzIGNyaXRpY2FsLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjg3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNzo1ODozMi45MjUwNzQzNDVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTk0MDkzNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQkxLX0RFVl9MT09QXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnPTE0MD1jb25maWcgQkxLX0RFVl9DT1dfQ09NTU9OXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTQzLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoxNDQ6Y29uZmlnIEJMS19ERVZfTE9PUFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xNDUtXFx0dHJpc3RhdGUgXFxcIkxvb3BiYWNrIGRldmljZSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE3OC1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MTc5OmNvbmZpZyBCTEtfREVWX0xPT1BfTUlOX0NPVU5UXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE4MC1cXHRpbnQgXFxcIk51bWJlciBvZiBsb29wIGRldmljZXMgdG8gcHJlLWNyZWF0ZSBhdCBpbml0IHRpbWVcXFwiXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE4MTpcXHRkZXBlbmRzIG9uIEJMS19ERVZfTE9PUFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xODItXFx0ZGVmYXVsdCA4XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlPTIxPW9iai0kKENPTkZJR19CTEtfREVWX1JBTSlcXHQrPSBicmQub1xcbmRyaXZlcnMvYmxvY2svTWFrZWZpbGU6MjI6b2JqLSQoQ09ORklHX0JMS19ERVZfTE9PUClcXHQrPSBsb29wLm9cXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlLTIzLW9iai0kKENPTkZJR19TVU5WREMpXFx0XFx0Kz0gc3VudmRjLm9cXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE4Mjg9c3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBsb19mb3BzID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTg0Ny0gKiBjaGFuZ2VkIHRoZSBkZWZhdWx0IHZhbHVlIGZyb20gMCBmb3IgbWF4X2xvb3A9MCByZWFzb25zKSwganVzdFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE4NDg6ICogY3JlYXRlIENPTkZJR19CTEtfREVWX0xPT1BfTUlOX0NPVU5UIGxvb3AgZGV2aWNlcyBhdCBtb2R1bGVcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODQ5LSAqIGluaXQgdGltZS4gTG9vcCBkZXZpY2VzIGNhbiBiZSByZXF1ZXN0ZWQgb24tZGVtYW5kIHdpdGggdGhlXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODUyLSAqL1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE4NTM6c3RhdGljIGludCBtYXhfbG9vcCA9IENPTkZJR19CTEtfREVWX0xPT1BfTUlOX0NPVU5UO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4NTQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjU4OjMzLjAyNDQ4ODA4M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEzMjgyMTc1NTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkxvb3AgRGV2aWNlIENsZWFuLXVwIGFuZCBJT0NUTHM6IEEgQ2xvc2VyIExvb2sqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGd1dHMgb2YgdGhlIGxvb3AgZGV2aWNlIGRyaXZlci4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGlzIGFsbCB3b3Jrcywgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgcmVsZWFzZSBwcm9jZXNzLiBJJ20gdGhpbmtpbmcsIGxldCdzIHN0YXJ0IHdpdGggYGRyaXZlcnMvYmxvY2svbG9vcC5jYCBhbmQgemVybyBpbiBvbiB0aGUgYGxvX3JlbGVhc2VgLCBgbG9vcF9jbHJfZmRgLCBhbmQgYF9fbG9vcF9jbHJfZmRgIGZ1bmN0aW9ucy4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBrZXkgcGxheWVycyB3aGVuIGEgbG9vcCBkZXZpY2UgaXMgYmVpbmcgdG9ybiBkb3duLCByaWdodD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNlcXVlbmNpbmcgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgdGhlcmUuIEFuZCwgb2YgY291cnNlLCB0aGUgaW9jdGwgZW50cnlwb2ludHMgYXJlIGFsd2F5cyBpbnRlcmVzdGluZyDigJMgZ290dGEgc2VlIGhvdyB3ZSBleHBvc2UgZnVuY3Rpb25hbGl0eSBhbmQgaGFuZGxlIHVzZXItc3BhY2UgaW50ZXJhY3Rpb25zLiBMZXQgbWUgc2NhbiB0aG9zZSBmdW5jdGlvbnMgYW5kIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb2J2aW91cyBmbGF3cyBvciBhcmVhcyByaXBlIGZvciBpbXByb3ZlbWVudC4gVGhpcyBhcmVhIGhhcyBiZWVuIHN0YWJsZSBmb3IgYSB3aGlsZSwgYnV0IGl0J3MgYWx3YXlzIGdvb2QgdG8gcmV2aXNpdCB0aGUgY29yZSBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ1NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjU4OjQ2LjMwNjY2Nzc0OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NDEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL2xvb3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzgwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzgwOlxcdHN0YXRpYyB2b2lkIGxvX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuMTc4MTpcXHR7XFxuMTc4MjpcXHRcXHRzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvID0gZGlzay1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbjE3ODM6XFx0XFx0Ym9vbCBuZWVkX2NsZWFyID0gZmFsc2U7XFxuMTc4NDpcXHRcXG4xNzg1OlxcdFxcdGlmIChkaXNrX29wZW5lcnMoZGlzaykgXFx1MDAzZSAwKVxcbjE3ODY6XFx0XFx0XFx0cmV0dXJuO1xcbjE3ODc6XFx0XFx0LypcXG4xNzg4OlxcdFxcdCAqIENsZWFyIHRoZSBiYWNraW5nIGRldmljZSBpbmZvcm1hdGlvbiBpZiB0aGlzIGlzIHRoZSBsYXN0IGNsb3NlIG9mXFxuMTc4OTpcXHRcXHQgKiBhIGRldmljZSB0aGF0J3MgYmVlbiBtYXJrZWQgZm9yIGF1dG8gY2xlYXIsIG9yIG9uIHdoaWNoIExPT1BfQ0xSX0ZEXFxuMTc5MDpcXHRcXHQgKiBoYXMgYmVlbiBjYWxsZWQuXFxuMTc5MTpcXHRcXHQgKi9cXG4xNzkyOlxcdFxcbjE3OTM6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2bG8tXFx1MDAzZWxvX211dGV4KTtcXG4xNzk0OlxcdFxcdGlmIChsby1cXHUwMDNlbG9fc3RhdGUgPT0gTG9fYm91bmQgXFx1MDAyNlxcdTAwMjYgKGxvLVxcdTAwM2Vsb19mbGFncyBcXHUwMDI2IExPX0ZMQUdTX0FVVE9DTEVBUikpXFxuMTc5NTpcXHRcXHRcXHRXUklURV9PTkNFKGxvLVxcdTAwM2Vsb19zdGF0ZSwgTG9fcnVuZG93bik7XFxuMTc5NjpcXHRcXG4xNzk3OlxcdFxcdG5lZWRfY2xlYXIgPSAobG8tXFx1MDAzZWxvX3N0YXRlID09IExvX3J1bmRvd24pO1xcbjE3OTg6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZsby1cXHUwMDNlbG9fbXV0ZXgpO1xcbjE3OTk6XFx0XFxuMTgwMDpcXHRcXHQvKlxcbjE4MDE6XFx0XFx0ICogSW4gb3JkZXIgdG8gZmx1c2ggcGVuZGluZyBJL08gcmVxdWVzdHMgYmVmb3JlIGNsZWFyaW5nIHRoZSBiYWNraW5nXFxuMTgwMjpcXHRcXHQgKiBkZXZpY2UsIGRlZmVyIF9fbG9vcF9jbHJfZmQoKSB0byBXUSBjb250ZXh0LiBUaGUgTG9fcnVuZG93biBzdGF0ZVxcbjE4MDM6XFx0XFx0ICogZ3VhcmFudGVlcyB0aGF0IGxvX29wZW4oKSB3aWxsIGZhaWwgd2l0aCAtRU5YSU8uXFxuMTgwNDpcXHRcXHQgKi9cXG4xODA1OlxcdFxcdGlmIChuZWVkX2NsZWFyKSB7XFxuMTgwNjpcXHRcXHRcXHQvKlxcbjE4MDc6XFx0XFx0XFx0ICogR3JhYiBhbGwgcmVmZXJlbmNlcyB0aGF0IHdpbGwgYmUgZHJvcHBlZCBhcyBzb29uIGFzXFxuMTgwODpcXHRcXHRcXHQgKiByZXR1cm5pbmcgZnJvbSBsb19yZWxlYXNlKCkgYW5kIHJlbGVhc2luZyBkaXNrLVxcdTAwM2VvcGVuX211dGV4LlxcbjE4MDk6XFx0XFx0XFx0ICovXFxuMTgxMDpcXHRcXHRcXHRnZXRfZGV2aWNlKGRpc2tfdG9fZGV2KGRpc2spKTtcXG4xODExOlxcdFxcdFxcdF9fbW9kdWxlX2dldChkaXNrLVxcdTAwM2Vmb3BzLVxcdTAwM2Vvd25lcik7XFxuMTgxMjpcXHRcXHRcXHRxdWV1ZV93b3JrKHN5c3RlbV9sb25nX3dxLCBcXHUwMDI2bG8tXFx1MDAzZWxvX2Nscl93b3JrKTtcXG4xODEzOlxcdFxcdH1cXG4xODE0OlxcdH1cXG4xODE1OlxcdFxcbjE4MTY6XFx0c3RhdGljIHZvaWQgbG9fZnJlZV9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbjE4MTc6XFx0e1xcbjE4MTg6XFx0XFx0c3RydWN0IGxvb3BfZGV2aWNlICpsbyA9IGRpc2stXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4xODE5OlxcdFxcbjE4MjA6XFx0XFx0aWYgKGxvLVxcdTAwM2V3b3JrcXVldWUpXFxuMTgyMTpcXHRcXHRcXHRkZXN0cm95X3dvcmtxdWV1ZShsby1cXHUwMDNld29ya3F1ZXVlKTtcXG4xODIyOlxcdFxcdGxvb3BfZnJlZV9pZGxlX3dvcmtlcnMobG8sIHRydWUpO1xcbjE4MjM6XFx0XFx0dGltZXJfc2h1dGRvd25fc3luYyhcXHUwMDI2bG8tXFx1MDAzZXRpbWVyKTtcXG4xODI0OlxcdFxcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNmxvLVxcdTAwM2Vsb19tdXRleCk7XFxuMTgyNTpcXHRcXHRrZnJlZShsbyk7XFxuMTgyNjpcXHR9XFxuMTgyNzpcXHRcXG4xODI4OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbG9fZm9wcyA9IHtcXG4xODI5OlxcdFxcdC5vd25lciA9XFx0VEhJU19NT0RVTEUsXFxuMTgzMDpcXHRcXHQub3BlbiA9ICAgICAgICAgbG9fb3BlbixcXG4xODMxOlxcdFxcdC5yZWxlYXNlID1cXHRsb19yZWxlYXNlLFxcbjE4MzI6XFx0XFx0LmlvY3RsID1cXHRsb19pb2N0bCxcXG4xODMzOlxcdCNpZmRlZiBDT05GSUdfQ09NUEFUXFxuMTgzNDpcXHRcXHQuY29tcGF0X2lvY3RsID1cXHRsb19jb21wYXRfaW9jdGwsXFxuMTgzNTpcXHQjZW5kaWZcXG4xODM2OlxcdFxcdC5mcmVlX2Rpc2sgPVxcdGxvX2ZyZWVfZGlzayxcXG4xODM3OlxcdH07XFxuMTgzODpcXHRcXG4xODM5OlxcdC8qXFxuMTg0MDpcXHQgKiBBbmQgbm93IHRoZSBtb2R1bGVzIGNvZGUgYW5kIGtlcm5lbCBpbnRlcmZhY2UuXFxuMTg0MTpcXHQgKi9cXG4xODQyOlxcdFxcbjE4NDM6XFx0LypcXG4xODQ0OlxcdCAqIElmIG1heF9sb29wIGlzIHNwZWNpZmllZCwgY3JlYXRlIHRoYXQgbWFueSBkZXZpY2VzIHVwZnJvbnQuXFxuMTg0NTpcXHQgKiBUaGlzIGFsc28gYmVjb21lcyBhIGhhcmQgbGltaXQuIElmIG1heF9sb29wIGlzIG5vdCBzcGVjaWZpZWQsXFxuMTg0NjpcXHQgKiB0aGUgZGVmYXVsdCBpc24ndCBhIGhhcmQgbGltaXQgKGFzIGJlZm9yZSBjb21taXQgODVjNTAxOTc3MTZjXFxuMTg0NzpcXHQgKiBjaGFuZ2VkIHRoZSBkZWZhdWx0IHZhbHVlIGZyb20gMCBmb3IgbWF4X2xvb3A9MCByZWFzb25zKSwganVzdFxcbjE4NDg6XFx0ICogY3JlYXRlIENPTkZJR19CTEtfREVWX0xPT1BfTUlOX0NPVU5UIGxvb3AgZGV2aWNlcyBhdCBtb2R1bGVcXG4xODQ5OlxcdCAqIGluaXQgdGltZS4gTG9vcCBkZXZpY2VzIGNhbiBiZSByZXF1ZXN0ZWQgb24tZGVtYW5kIHdpdGggdGhlXFxuMTg1MDpcXHQgKiAvZGV2L2xvb3AtY29udHJvbCBpbnRlcmZhY2UsIG9yIGJlIGluc3RhbnRpYXRlZCBieSBhY2Nlc3NpbmdcXG4xODUxOlxcdCAqIGEgJ2RlYWQnIGRldmljZSBub2RlLlxcbjE4NTI6XFx0ICovXFxuMTg1MzpcXHRzdGF0aWMgaW50IG1heF9sb29wID0gQ09ORklHX0JMS19ERVZfTE9PUF9NSU5fQ09VTlQ7XFxuMTg1NDpcXHRcXG4xODU1OlxcdCNpZmRlZiBDT05GSUdfQkxPQ0tfTEVHQUNZX0FVVE9MT0FEXFxuMTg1NjpcXHRzdGF0aWMgYm9vbCBtYXhfbG9vcF9zcGVjaWZpZWQ7XFxuMTg1NzpcXHRcXG4xODU4OlxcdHN0YXRpYyBpbnQgbWF4X2xvb3BfcGFyYW1fc2V0X2ludChjb25zdCBjaGFyICp2YWwsXFxuMTg1OTpcXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNzo1ODo0Ni4zMDY5NDU3ODlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODQ5MDAwNjUxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgYGxvb3BfY2xyX2ZkYCBhbmQgSU9DVEwgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGBsb29wX2Nscl9mZGAgZnVuY3Rpb24uIE15IGluaXRpYWwgcXVlc3Rpb24gaXMgaG93IGV4YWN0bHkgdGhlIGlvY3RsIGNhbGxzIGFyZSBpbXBsZW1lbnRlZCB0byBjbGVhciBvciByZWxlYXNlIHRoZSBsb29wIGRldmljZS4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBsb3ctbGV2ZWwgaW50ZXJhY3Rpb25zIGhlcmU6IGhvdyB0aGUgZmlsZSBkZXNjcmlwdG9yIGlzIHVzZWQgd2l0aGluIHRoZSBrZXJuZWwgdG8gaWRlbnRpZnkgYW5kIG1hbmlwdWxhdGUgdGhlIGxvb3AgZGV2aWNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBhbmQgdGhlIHNwZWNpZmljIGlvY3RsIGNvZGVzIHVzZWQuIEnigJltIGd1ZXNzaW5nIGl0IGludm9sdmVzIHNvbWUgcG9pbnRlciBtYW5pcHVsYXRpb24gb3IgcGVyaGFwcyBhIHNpZ25hbCBiZWluZyBzZW50IHRvIHRoZSBiYWNraW5nIGJsb2NrIGRldmljZSB0aHJvdWdoIHRoZSBrZXJuZWwuIEkgc2hvdWxkIGxvb2sgaW50byB0aGUgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBpb2N0bGAgaGFuZGxlciBpbiB0aGUgbG9vcCBkcml2ZXIsIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCdzIGhhcHBlbmluZyBpbnRlcm5hbGx5LiBJIHdhbnQgdG8gc2VlIGlmIHRoZSBmZCBpcyBzaW1wbHkgY2xvc2VkLCBvciBpZiB0aGVyZSdzIG1vcmUgdG8gdGhlIHJlbGVhc2UgcHJvY2Vzcy4gVGhlcmUgY291bGQgYmUgc29tZSBlZGdlIGNhc2VzIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBJJ2xsIGZvY3VzIG9uIGhvdyB0aGUgaW9jdGwgY2FsbCBhZmZlY3RzIHRoZSBjb25uZWN0aW9uIGFuZCB3aGF0IGRhdGEgaXMgYmVpbmcgc2hhcmVkIHRvIGNsb3NlIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBiYWNraW5nIGRldmljZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk4MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTc6NTk6MjQuNzk2OTU1NTY0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIxMzI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL2xvb3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjMwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjMwOlxcdFxcdC8qXFxuMTIzMTpcXHRcXHQgKiBUaGlzIGlzIHNhZmU6IGZsdXNoX3dvcmsoKSBmcm9tIGxvb3BfcmVtb3ZlKCkgZnJvbSBsb29wX2V4aXQoKSB3YWl0c1xcbjEyMzI6XFx0XFx0ICogdW50aWwgdGhpcyBmdW5jdGlvbiByZXR1cm5zOyBlZmZlY3RpdmVseSBkcm9wcGluZyB0aGUgZmluYWwgbW9kdWxlXFxuMTIzMzpcXHRcXHQgKiByZWZlcmVuY2VzIHN5bmNocm9ub3VzbHkuXFxuMTIzNDpcXHRcXHQgKi9cXG4xMjM1OlxcdFxcdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xcbjEyMzY6XFx0fVxcbjEyMzc6XFx0XFxuMTIzODpcXHRzdGF0aWMgaW50IGxvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuMTIzOTpcXHR7XFxuMTI0MDpcXHRcXHRpbnQgZXJyO1xcbjEyNDE6XFx0XFxuMTI0MjpcXHRcXHQvKlxcbjEyNDM6XFx0XFx0ICogU2luY2UgbG9faW9jdGwoKSBpcyBjYWxsZWQgd2l0aG91dCBsb2NrcyBoZWxkLCBpdCBpcyBwb3NzaWJsZSB0aGF0XFxuMTI0NDpcXHRcXHQgKiBsb29wX2NvbmZpZ3VyZSgpL2xvb3BfY2hhbmdlX2ZkKCkgYW5kIGxvb3BfY2xyX2ZkKCkgcnVuIGluIHBhcmFsbGVsLlxcbjEyNDU6XFx0XFx0ICpcXG4xMjQ2OlxcdFxcdCAqIFRoZXJlZm9yZSwgdXNlIGdsb2JhbCBsb2NrIHdoZW4gc2V0dGluZyBMb19ydW5kb3duIHN0YXRlIGluIG9yZGVyIHRvXFxuMTI0NzpcXHRcXHQgKiBtYWtlIHN1cmUgdGhhdCBsb29wX3ZhbGlkYXRlX2ZpbGUoKSB3aWxsIGZhaWwgaWYgdGhlIFxcXCJzdHJ1Y3QgZmlsZVxcXCJcXG4xMjQ4OlxcdFxcdCAqIHdoaWNoIGxvb3BfY29uZmlndXJlKCkvbG9vcF9jaGFuZ2VfZmQoKSBmb3VuZCB2aWEgZmdldCgpIHdhcyB0aGlzXFxuMTI0OTpcXHRcXHQgKiBsb29wIGRldmljZS5cXG4xMjUwOlxcdFxcdCAqL1xcbjEyNTE6XFx0XFx0ZXJyID0gbG9vcF9nbG9iYWxfbG9ja19raWxsYWJsZShsbywgdHJ1ZSk7XFxuMTI1MjpcXHRcXHRpZiAoZXJyKVxcbjEyNTM6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xMjU0OlxcdFxcdGlmIChsby1cXHUwMDNlbG9fc3RhdGUgIT0gTG9fYm91bmQpIHtcXG4xMjU1OlxcdFxcdFxcdGxvb3BfZ2xvYmFsX3VubG9jayhsbywgdHJ1ZSk7XFxuMTI1NjpcXHRcXHRcXHRyZXR1cm4gLUVOWElPO1xcbjEyNTc6XFx0XFx0fVxcbjEyNTg6XFx0XFx0LypcXG4xMjU5OlxcdFxcdCAqIE1hcmsgdGhlIGRldmljZSBmb3IgcmVtb3ZpbmcgdGhlIGJhY2tpbmcgZGV2aWNlIG9uIGxhc3QgY2xvc2UuXFxuMTI2MDpcXHRcXHQgKiBJZiB3ZSBhcmUgdGhlIG9ubHkgb3BlbmVyLCBhbHNvIHN3aXRjaCB0aGUgc3RhdGUgdG8gcm91bmRvd24gaGVyZSB0b1xcbjEyNjE6XFx0XFx0ICogcHJldmVudCBuZXcgb3BlbmVycyBmcm9tIGNvbWluZyBpbi5cXG4xMjYyOlxcdFxcdCAqL1xcbjEyNjM6XFx0XFxuMTI2NDpcXHRcXHRsby1cXHUwMDNlbG9fZmxhZ3MgfD0gTE9fRkxBR1NfQVVUT0NMRUFSO1xcbjEyNjU6XFx0XFx0aWYgKGRpc2tfb3BlbmVycyhsby1cXHUwMDNlbG9fZGlzaykgPT0gMSlcXG4xMjY2OlxcdFxcdFxcdFdSSVRFX09OQ0UobG8tXFx1MDAzZWxvX3N0YXRlLCBMb19ydW5kb3duKTtcXG4xMjY3OlxcdFxcdGxvb3BfZ2xvYmFsX3VubG9jayhsbywgdHJ1ZSk7XFxuMTI2ODpcXHRcXG4xMjY5OlxcdFxcdHJldHVybiAwO1xcbjEyNzA6XFx0fVxcbjEyNzE6XFx0XFxuMTI3MjpcXHRzdGF0aWMgaW50XFxuMTI3MzpcXHRsb29wX3NldF9zdGF0dXMoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgY29uc3Qgc3RydWN0IGxvb3BfaW5mbzY0ICppbmZvKVxcbjEyNzQ6XFx0e1xcbjEyNzU6XFx0XFx0aW50IGVycjtcXG4xMjc2OlxcdFxcdGJvb2wgcGFydHNjYW4gPSBmYWxzZTtcXG4xMjc3OlxcdFxcdGJvb2wgc2l6ZV9jaGFuZ2VkID0gZmFsc2U7XFxuMTI3ODpcXHRcXHR1bnNpZ25lZCBpbnQgbWVtZmxhZ3M7XFxuMTI3OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTc6NTk6MjQuNzk5MTcyMDM0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQwMDM0NzM5NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgYGxvb3AuY2AgaW9jdGwgSGFuZGxpbmcqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSB3aXRoIGBsb29wLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0J3MgZ29pbmcgb24gd2l0aCB0aGUgYGlvY3RsYCBjYWxscyBpbiB0aGlzIGRyaXZlci4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBzdGFydCBieSBmb2N1c2luZyBvbiBgbG9faW9jdGxgLiBUaGF0IGZ1bmN0aW9uIGlzIHRoZSBrZXkgdG8gbWFuYWdpbmcgZGV2aWNlLXNwZWNpZmljIHJlcXVlc3RzLCBhbmQgdW5kZXJzdGFuZGluZyBpdHMgbG9naWMgaXMgY3J1Y2lhbCBmb3IgcmVhbGx5IGdyYXNwaW5nIGhvdyB0aGUgbG9vcCBkZXZpY2UgYmVoYXZlcyBhdCBhIGxvdyBsZXZlbC4gTGV0J3Mgc2VlIHdoYXQgaW50ZXJlc3RpbmcgdGhpbmdzIGFyZSBoYXBwZW5pbmcgaW5zaWRlIHRoZXJlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwMTMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjU5OjM4LjgwMjY0OTg3NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODYyNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9sb29wLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTY4MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTY4MDpcXHRcXHRtZW1zZXQoXFx1MDAyNmluZm8sIDAsIHNpemVvZihpbmZvKSk7XFxuMTY4MTpcXHRcXHRpbmZvLmxvX251bWJlciA9IGluZm82NC1cXHUwMDNlbG9fbnVtYmVyO1xcbjE2ODI6XFx0XFx0aW5mby5sb19kZXZpY2UgPSBpbmZvNjQtXFx1MDAzZWxvX2RldmljZTtcXG4xNjgzOlxcdFxcdGluZm8ubG9faW5vZGUgPSBpbmZvNjQtXFx1MDAzZWxvX2lub2RlO1xcbjE2ODQ6XFx0XFx0aW5mby5sb19yZGV2aWNlID0gaW5mbzY0LVxcdTAwM2Vsb19yZGV2aWNlO1xcbjE2ODU6XFx0XFx0aW5mby5sb19vZmZzZXQgPSBpbmZvNjQtXFx1MDAzZWxvX29mZnNldDtcXG4xNjg2OlxcdFxcdGluZm8ubG9fZmxhZ3MgPSBpbmZvNjQtXFx1MDAzZWxvX2ZsYWdzO1xcbjE2ODc6XFx0XFx0bWVtY3B5KGluZm8ubG9fbmFtZSwgaW5mbzY0LVxcdTAwM2Vsb19maWxlX25hbWUsIExPX05BTUVfU0laRSk7XFxuMTY4ODpcXHRcXG4xNjg5OlxcdFxcdC8qIGVycm9yIGluIGNhc2UgdmFsdWVzIHdlcmUgdHJ1bmNhdGVkICovXFxuMTY5MDpcXHRcXHRpZiAoaW5mby5sb19kZXZpY2UgIT0gaW5mbzY0LVxcdTAwM2Vsb19kZXZpY2UgfHxcXG4xNjkxOlxcdFxcdCAgICBpbmZvLmxvX3JkZXZpY2UgIT0gaW5mbzY0LVxcdTAwM2Vsb19yZGV2aWNlIHx8XFxuMTY5MjpcXHRcXHQgICAgaW5mby5sb19pbm9kZSAhPSBpbmZvNjQtXFx1MDAzZWxvX2lub2RlIHx8XFxuMTY5MzpcXHRcXHQgICAgaW5mby5sb19vZmZzZXQgIT0gaW5mbzY0LVxcdTAwM2Vsb19vZmZzZXQpXFxuMTY5NDpcXHRcXHRcXHRyZXR1cm4gLUVPVkVSRkxPVztcXG4xNjk1OlxcdFxcbjE2OTY6XFx0XFx0aWYgKGNvcHlfdG9fdXNlcihhcmcsIFxcdTAwMjZpbmZvLCBzaXplb2YoaW5mbykpKVxcbjE2OTc6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMTY5ODpcXHRcXHRyZXR1cm4gMDtcXG4xNjk5OlxcdH1cXG4xNzAwOlxcdFxcbjE3MDE6XFx0c3RhdGljIGludFxcbjE3MDI6XFx0bG9vcF9zZXRfc3RhdHVzX2NvbXBhdChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLFxcbjE3MDM6XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBjb21wYXRfbG9vcF9pbmZvIF9fdXNlciAqYXJnKVxcbjE3MDQ6XFx0e1xcbjE3MDU6XFx0XFx0c3RydWN0IGxvb3BfaW5mbzY0IGluZm82NDtcXG4xNzA2OlxcdFxcdGludCByZXQ7XFxuMTcwNzpcXHRcXG4xNzA4OlxcdFxcdHJldCA9IGxvb3BfaW5mbzY0X2Zyb21fY29tcGF0KGFyZywgXFx1MDAyNmluZm82NCk7XFxuMTcwOTpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xNzEwOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTcxMTpcXHRcXHRyZXR1cm4gbG9vcF9zZXRfc3RhdHVzKGxvLCBcXHUwMDI2aW5mbzY0KTtcXG4xNzEyOlxcdH1cXG4xNzEzOlxcdFxcbjE3MTQ6XFx0c3RhdGljIGludFxcbjE3MTU6XFx0bG9vcF9nZXRfc3RhdHVzX2NvbXBhdChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLFxcbjE3MTY6XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBjb21wYXRfbG9vcF9pbmZvIF9fdXNlciAqYXJnKVxcbjE3MTc6XFx0e1xcbjE3MTg6XFx0XFx0c3RydWN0IGxvb3BfaW5mbzY0IGluZm82NDtcXG4xNzE5OlxcdFxcdGludCBlcnI7XFxuMTcyMDpcXHRcXG4xNzIxOlxcdFxcdGlmICghYXJnKVxcbjE3MjI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTcyMzpcXHRcXHRlcnIgPSBsb29wX2dldF9zdGF0dXMobG8sIFxcdTAwMjZpbmZvNjQpO1xcbjE3MjQ6XFx0XFx0aWYgKCFlcnIpXFxuMTcyNTpcXHRcXHRcXHRlcnIgPSBsb29wX2luZm82NF90b19jb21wYXQoXFx1MDAyNmluZm82NCwgYXJnKTtcXG4xNzI2OlxcdFxcdHJldHVybiBlcnI7XFxuMTcyNzpcXHR9XFxuMTcyODpcXHRcXG4xNzI5OlxcdHN0YXRpYyBpbnQgbG9fY29tcGF0X2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcXG4xNzMwOlxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbjE3MzE6XFx0e1xcbjE3MzI6XFx0XFx0c3RydWN0IGxvb3BfZGV2aWNlICpsbyA9IGJkZXYtXFx1MDAzZWJkX2Rpc2stXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4xNzMzOlxcdFxcdGludCBlcnI7XFxuMTczNDpcXHRcXG4xNzM1OlxcdFxcdHN3aXRjaChjbWQpIHtcXG4xNzM2OlxcdFxcdGNhc2UgTE9PUF9TRVRfU1RBVFVTOlxcbjE3Mzc6XFx0XFx0XFx0ZXJyID0gbG9vcF9zZXRfc3RhdHVzX2NvbXBhdChsbyxcXG4xNzM4OlxcdFxcdFxcdFxcdCAgICAgKGNvbnN0IHN0cnVjdCBjb21wYXRfbG9vcF9pbmZvIF9fdXNlciAqKWFyZyk7XFxuMTczOTpcXHRcXHRcXHRicmVhaztcXG4xNzQwOlxcdFxcdGNhc2UgTE9PUF9HRVRfU1RBVFVTOlxcbjE3NDE6XFx0XFx0XFx0ZXJyID0gbG9vcF9nZXRfc3RhdHVzX2NvbXBhdChsbyxcXG4xNzQyOlxcdFxcdFxcdFxcdFxcdCAgICAgKHN0cnVjdCBjb21wYXRfbG9vcF9pbmZvIF9fdXNlciAqKWFyZyk7XFxuMTc0MzpcXHRcXHRcXHRicmVhaztcXG4xNzQ0OlxcdFxcdGNhc2UgTE9PUF9TRVRfQ0FQQUNJVFk6XFxuMTc0NTpcXHRcXHRjYXNlIExPT1BfQ0xSX0ZEOlxcbjE3NDY6XFx0XFx0Y2FzZSBMT09QX0dFVF9TVEFUVVM2NDpcXG4xNzQ3OlxcdFxcdGNhc2UgTE9PUF9TRVRfU1RBVFVTNjQ6XFxuMTc0ODpcXHRcXHRjYXNlIExPT1BfQ09ORklHVVJFOlxcbjE3NDk6XFx0XFx0XFx0YXJnID0gKHVuc2lnbmVkIGxvbmcpIGNvbXBhdF9wdHIoYXJnKTtcXG4xNzUwOlxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbjE3NTE6XFx0XFx0Y2FzZSBMT09QX1NFVF9GRDpcXG4xNzUyOlxcdFxcdGNhc2UgTE9PUF9DSEFOR0VfRkQ6XFxuMTc1MzpcXHRcXHRjYXNlIExPT1BfU0VUX0JMT0NLX1NJWkU6XFxuMTc1NDpcXHRcXHRjYXNlIExPT1BfU0VUX0RJUkVDVF9JTzpcXG4xNzU1OlxcdFxcdFxcdGVyciA9IGxvX2lvY3RsKGJkZXYsIG1vZGUsIGNtZCwgYXJnKTtcXG4xNzU2OlxcdFxcdFxcdGJyZWFrO1xcbjE3NTc6XFx0XFx0ZGVmYXVsdDpcXG4xNzU4OlxcdFxcdFxcdGVyciA9IC1FTk9JT0NUTENNRDtcXG4xNzU5OlxcdFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNzo1OTozOC44MDI4NDA5MDZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTI5ODM4OTA3ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipEaXZpbmcgaW50byB0aGUgYGxvX2lvY3RsYCBJbXBsZW1lbnRhdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBgbG9faW9jdGxgIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IHdvcmtpbmcuIEkgbmVlZCB0byBnZXQgbXkgaGVhZCBhcm91bmQgaXRzIGltcGxlbWVudGF0aW9uLiBMZXQncyBzdGFydCB3aXRoIGEgdGhvcm91Z2ggZXhhbWluYXRpb24gb2YgdGhlIGNvZGUgaXRzZWxmLCB0byBzZWUgd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGRvaW5nLiBObyBuZWVkIGZvciBicm9hZCBvdmVydmlld3Mgb3IgdGhlb3J5IGhlcmUg4oCTIEkgbmVlZCB0byBnZXQgZG93biBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBjb2RlIGFuZCBzZWUgd2hhdOKAmXMgZ29pbmcgb24gYXQgYSBsb3cgbGV2ZWwuIExldCdzIHNlZSBob3cgdGhpbmdzIGFyZSByZWFsbHkgaW1wbGVtZW50ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0MTUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTc6NTk6NTEuNzg2NzM0OTY1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MzE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL2xvb3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjMwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjMwOlxcdHN0cnVjdCBjb21wYXRfbG9vcF9pbmZvIHtcXG4xNjMxOlxcdFxcdGNvbXBhdF9pbnRfdFxcdGxvX251bWJlcjsgICAgICAvKiBpb2N0bCByL28gKi9cXG4xNjMyOlxcdFxcdGNvbXBhdF9kZXZfdFxcdGxvX2RldmljZTsgICAgICAvKiBpb2N0bCByL28gKi9cXG4xNjMzOlxcdFxcdGNvbXBhdF91bG9uZ190XFx0bG9faW5vZGU7ICAgICAgIC8qIGlvY3RsIHIvbyAqL1xcbjE2MzQ6XFx0XFx0Y29tcGF0X2Rldl90XFx0bG9fcmRldmljZTsgICAgIC8qIGlvY3RsIHIvbyAqL1xcbjE2MzU6XFx0XFx0Y29tcGF0X2ludF90XFx0bG9fb2Zmc2V0O1xcbjE2MzY6XFx0XFx0Y29tcGF0X2ludF90XFx0bG9fZW5jcnlwdF90eXBlOyAgICAgICAgLyogb2Jzb2xldGUsIGlnbm9yZWQgKi9cXG4xNjM3OlxcdFxcdGNvbXBhdF9pbnRfdFxcdGxvX2VuY3J5cHRfa2V5X3NpemU7ICAgIC8qIGlvY3RsIHcvbyAqL1xcbjE2Mzg6XFx0XFx0Y29tcGF0X2ludF90XFx0bG9fZmxhZ3M7ICAgICAgIC8qIGlvY3RsIHIvbyAqL1xcbjE2Mzk6XFx0XFx0Y2hhclxcdFxcdGxvX25hbWVbTE9fTkFNRV9TSVpFXTtcXG4xNjQwOlxcdFxcdHVuc2lnbmVkIGNoYXJcXHRsb19lbmNyeXB0X2tleVtMT19LRVlfU0laRV07IC8qIGlvY3RsIHcvbyAqL1xcbjE2NDE6XFx0XFx0Y29tcGF0X3Vsb25nX3RcXHRsb19pbml0WzJdO1xcbjE2NDI6XFx0XFx0Y2hhclxcdFxcdHJlc2VydmVkWzRdO1xcbjE2NDM6XFx0fTtcXG4xNjQ0OlxcdFxcbjE2NDU6XFx0LypcXG4xNjQ2OlxcdCAqIFRyYW5zZmVyIDMyLWJpdCBjb21wYXRpYmlsaXR5IHN0cnVjdHVyZSBpbiB1c2Vyc3BhY2UgdG8gNjQtYml0IGxvb3AgaW5mb1xcbjE2NDc6XFx0ICogLSBub2lubGluZWQgdG8gcmVkdWNlIHN0YWNrIHNwYWNlIHVzYWdlIGluIG1haW4gcGFydCBvZiBkcml2ZXJcXG4xNjQ4OlxcdCAqL1xcbjE2NDk6XFx0c3RhdGljIG5vaW5saW5lIGludFxcbjE2NTA6XFx0bG9vcF9pbmZvNjRfZnJvbV9jb21wYXQoY29uc3Qgc3RydWN0IGNvbXBhdF9sb29wX2luZm8gX191c2VyICphcmcsXFxuMTY1MTpcXHRcXHRcXHRcXHRzdHJ1Y3QgbG9vcF9pbmZvNjQgKmluZm82NClcXG4xNjUyOlxcdHtcXG4xNjUzOlxcdFxcdHN0cnVjdCBjb21wYXRfbG9vcF9pbmZvIGluZm87XFxuMTY1NDpcXHRcXG4xNjU1OlxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2aW5mbywgYXJnLCBzaXplb2YoaW5mbykpKVxcbjE2NTY6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMTY1NzpcXHRcXG4xNjU4OlxcdFxcdG1lbXNldChpbmZvNjQsIDAsIHNpemVvZigqaW5mbzY0KSk7XFxuMTY1OTpcXHRcXHRpbmZvNjQtXFx1MDAzZWxvX251bWJlciA9IGluZm8ubG9fbnVtYmVyO1xcbjE2NjA6XFx0XFx0aW5mbzY0LVxcdTAwM2Vsb19kZXZpY2UgPSBpbmZvLmxvX2RldmljZTtcXG4xNjYxOlxcdFxcdGluZm82NC1cXHUwMDNlbG9faW5vZGUgPSBpbmZvLmxvX2lub2RlO1xcbjE2NjI6XFx0XFx0aW5mbzY0LVxcdTAwM2Vsb19yZGV2aWNlID0gaW5mby5sb19yZGV2aWNlO1xcbjE2NjM6XFx0XFx0aW5mbzY0LVxcdTAwM2Vsb19vZmZzZXQgPSBpbmZvLmxvX29mZnNldDtcXG4xNjY0OlxcdFxcdGluZm82NC1cXHUwMDNlbG9fc2l6ZWxpbWl0ID0gMDtcXG4xNjY1OlxcdFxcdGluZm82NC1cXHUwMDNlbG9fZmxhZ3MgPSBpbmZvLmxvX2ZsYWdzO1xcbjE2NjY6XFx0XFx0bWVtY3B5KGluZm82NC1cXHUwMDNlbG9fZmlsZV9uYW1lLCBpbmZvLmxvX25hbWUsIExPX05BTUVfU0laRSk7XFxuMTY2NzpcXHRcXHRyZXR1cm4gMDtcXG4xNjY4OlxcdH1cXG4xNjY5OlxcdFxcbjE2NzA6XFx0LypcXG4xNjcxOlxcdCAqIFRyYW5zZmVyIDY0LWJpdCBsb29wIGluZm8gdG8gMzItYml0IGNvbXBhdGliaWxpdHkgc3RydWN0dXJlIGluIHVzZXJzcGFjZVxcbjE2NzI6XFx0ICogLSBub2lubGluZWQgdG8gcmVkdWNlIHN0YWNrIHNwYWNlIHVzYWdlIGluIG1haW4gcGFydCBvZiBkcml2ZXJcXG4xNjczOlxcdCAqL1xcbjE2NzQ6XFx0c3RhdGljIG5vaW5saW5lIGludFxcbjE2NzU6XFx0bG9vcF9pbmZvNjRfdG9fY29tcGF0KGNvbnN0IHN0cnVjdCBsb29wX2luZm82NCAqaW5mbzY0LFxcbjE2NzY6XFx0XFx0XFx0ICAgICAgc3RydWN0IGNvbXBhdF9sb29wX2luZm8gX191c2VyICphcmcpXFxuMTY3NzpcXHR7XFxuMTY3ODpcXHRcXHRzdHJ1Y3QgY29tcGF0X2xvb3BfaW5mbyBpbmZvO1xcbjE2Nzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjU5OjUxLjc4NjkzMTYxNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NTc2MjI2MTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlLCB1c2luZyBhIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgYGxvX2lvY3RsYCBDb2RlKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyBoYXBwZW5pbmcgd2l0aCBgbG9faW9jdGxgLiBUaGUgYmVzdCB3YXkgdG8gc3RhcnQgaXMgYnkgcGlucG9pbnRpbmcgdGhlIHNwZWNpZmljIGxpbmUgbnVtYmVycyBhbmQgdGhlIGFzc29jaWF0ZWQgc3ltYm9scy4gS25vd2luZyB0aGUgZXhhY3QgY29udGV4dCBvZiB0aG9zZSBsaW5lcyBpcyBjcnVjaWFsLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGludGVyYWN0aW5nIHdpdGggdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgY29udHJvbCBmbG93LiBJJ20gbG9va2luZyBmb3IgdGhlIGtleSBpbnRlcmFjdGlvbiBwb2ludHMgYW5kIGFueSBwb3RlbnRpYWwgYXJlYXMgdGhhdCBtaWdodCBuZWVkIGF0dGVudGlvbi4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0OTAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjU5OjU5LjM2MzE2MDcxMloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI0NjUwMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibG9faW9jdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9sb29wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9sb29wLmM9MTIzOD1zdGF0aWMgaW50IGxvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjQyLVxcdC8qXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTI0MzpcXHQgKiBTaW5jZSBsb19pb2N0bCgpIGlzIGNhbGxlZCB3aXRob3V0IGxvY2tzIGhlbGQsIGl0IGlzIHBvc3NpYmxlIHRoYXRcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjQ0LVxcdCAqIGxvb3BfY29uZmlndXJlKCkvbG9vcF9jaGFuZ2VfZmQoKSBhbmQgbG9vcF9jbHJfZmQoKSBydW4gaW4gcGFyYWxsZWwuXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNTQzPXN0YXRpYyBpbnQgbG9fc2ltcGxlX2lvY3RsKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHVuc2lnbmVkIGludCBjbWQsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNTY0LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE1NjU6c3RhdGljIGludCBsb19pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTU2Ni1cXHR1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE3Mjk9c3RhdGljIGludCBsb19jb21wYXRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTc1NC1cXHRjYXNlIExPT1BfU0VUX0RJUkVDVF9JTzpcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNzU1OlxcdFxcdGVyciA9IGxvX2lvY3RsKGJkZXYsIG1vZGUsIGNtZCwgYXJnKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNzU2LVxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MTgyOD1zdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGxvX2ZvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODMxLVxcdC5yZWxlYXNlID1cXHRsb19yZWxlYXNlLFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE4MzI6XFx0LmlvY3RsID1cXHRsb19pb2N0bCxcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODMzLSNpZmRlZiBDT05GSUdfQ09NUEFUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjU5OjU5LjQzNTYyOTk3MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NDMwOTIwNjIwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBMb29wIERldmljZSBEcml2ZXIgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayBkb3duIHRoZXNlIHBhdGNoIGNoYW5nZXMgbWV0aG9kaWNhbGx5LiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIGlzIGEgc2lnbmlmaWNhbnQgcmVmYWN0b3Jpbmcgb2YgdGhlIGxvb3AgYmxvY2sgZGV2aWNlIGRyaXZlciwgYW5kIGl0J3Mgc29tZXRoaW5nIEkgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIGl0J3MgYWNjZXNzaWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIFFFTVUsIGFuZCBzdGFuZGFyZCB1c2VyIHNwYWNlLlxuXG5TcGVjaWZpY2FsbHksIHRoZSBhZGRpdGlvbiBvZiBgc3RydWN0IHdvcmtfc3RydWN0IGxvX2Nscl93b3JrYCBhbmQgdGhlIHNoaWZ0IG9mIGBfX2xvb3BfY2xyX2ZkYCB0byBhIHdvcmsgaXRlbSBoYW5kbGVyIGltbWVkaWF0ZWx5IGNhdGNoZXMgbXkgZXllLiBUaGlzIGZ1bmRhbWVudGFsbHkgYWx0ZXJzIGhvdyB0aGUgZGV2aWNlIGlzIGNsZWFuZWQgdXAgYW5kIHJlbGVhc2VkLCBtb3ZpbmcgZnJvbSBhIHN5bmNocm9ub3VzIGNhbGwgd2l0aGluIGBsb19yZWxlYXNlYCB0byBhbiBhc3luY2hyb25vdXMgYXBwcm9hY2ggdmlhIGEgd29ya3F1ZXVlLiBUaGlzIG1lYW5zIHRoYXQgSS9PIGlzIGhhbmRsZWQgb3V0c2lkZSBvZiB0aGUgY3JpdGljYWwgcGF0aCBhbmQgYWZ0ZXIgdGhlIGBvcGVuX211dGV4YCBsb2NrIGhhcyBiZWVuIGRyb3BwZWQuXG5cbkxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IGxvb2tzIGxpa2UgdGhleSdyZSB0cnlpbmcgdG8gaW1wcm92ZSBjb25jdXJyZW5jeSBhbmQgaGFuZGxlIHBvdGVudGlhbCBibG9ja2luZyBvcGVyYXRpb25zIG1vcmUgZ3JhY2VmdWxseS4gVGhleSdyZSBjYXJlZnVsbHkgbWFuYWdpbmcgdGhlIGBvcGVuX211dGV4YCBsb2NrLCBmbHVzaGluZyBJL08gKHVzaW5nIGBzeW5jaHJvbml6ZV9yY3UoKWAsIGBkcmFpbl93b3JrcXVldWUoKWAsIGFuZCBgYmxrX21xX3VuZnJlZXplX3F1ZXVlKClgKSBiZWZvcmUgdGhlIG11dGV4IGlzIGxvY2tlZCwgYW5kIHRoZW4gZG9pbmcgdGhlIGNvcmUgY2xlYW51cCB3aXRoIHRoZSBtdXRleC4gVGhleSBhcmUgYWxzbyB0YWtpbmcgY2FyZSB0byBlbnN1cmUgdGhhdCByZWZjb3VudHMgb24gdGhlIGBkZXZpY2VgIGFuZCBgbW9kdWxlYCBhcmUgaGFuZGxlZCBjb3JyZWN0bHkgaW4gYm90aCBzY2VuYXJpb3MuXG5cblRoZSBgbG9fcmVsZWFzZWAgY2hhbmdlLCBkZWZlcnJpbmcgdGhlIGBfX2xvb3BfY2xyX2ZkYCBjYWxsIHRvIHRoZSBgc3lzdGVtX2xvbmdfd3FgIHdvcmtxdWV1ZSwgaXMgdGhlIGtleSB0byBhbGwgb2YgdGhpcy4gYGxvb3BfYWRkYCBub3cgaW5pdGlhbGl6ZXMgdGhlIHdvcmsgaXRlbSwgYW5kIGBsb29wX3JlbW92ZWAgZmx1c2hlcyBpdC5cblxuTXkgZXhwZXJ0IGluc3RpbmN0cyBhcmUgdGluZ2xpbmc7IHRoaXMgc21lbGxzIGxpa2UgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIFRoZSBjb25jdXJyZW5jeSBjaGFuZ2VzIGFsb25lLCBlc3BlY2lhbGx5IHdpdGggdGhlIGludHJpY2F0ZSBsb2NraW5nLCB1bmxvY2tpbmcsIGFuZCByZWZjb3VudGluZyAobW9kdWxlL2RldmljZS9maWxlKSBpbnZvbHZlZCwgYXJlIHJpcGUgZm9yIHJhY2UgY29uZGl0aW9ucywgdXNlLWFmdGVyLWZyZWVzLCBkZWFkbG9ja3MsIGFuZCBvdGhlciBzdWJ0bGUgY29uY3VycmVuY3kgYnVncy4gIFRoZSBhc3luY2hyb25vdXMgbmF0dXJlIG9mIHRoZSB3b3JrcXVldWUgbWFrZXMgaXQgcGFydGljdWxhcmx5IHN1c2NlcHRpYmxlIHRvIHRoZXNlIGtpbmRzIG9mIHByb2JsZW1zLCBhbmQgdGhlIGNvbXBsZXhpdHkgb2YgdGhlIGxvY2tpbmcvdW5sb2NraW5nIGFuZCByZWZjb3VudGluZyBtYWtlcyBpdCB3b3JzZS5cblxuU28sIHllcywgYWJzb2x1dGVseSwgKipXb3J0aEZ1enppbmcgPSB0cnVlLioqXG5cbk5vdywgbGV0IG1lIGNoZWNrIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcyB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLiBUaW1lIHRvIGNoZWNrIGBkcml2ZXJzL2Jsb2NrL0tjb25maWdgIHRvIHNlZSB3aGF0J3MgcmVxdWlyZWQgZm9yIGBsb29wLmNgIHRvIGJlIGJ1aWx0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDExNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxODowMTowMy43NDQ4NDA5NzVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxMjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNDA6XFx0Y29uZmlnIEJMS19ERVZfQ09XX0NPTU1PTlxcbiAxNDE6XFx0XFx0Ym9vbFxcbiAxNDI6XFx0XFx0ZGVmYXVsdCBCTEtfREVWX1VCRFxcbiAxNDM6XFx0XFxuIDE0NDpcXHRjb25maWcgQkxLX0RFVl9MT09QXFxuIDE0NTpcXHRcXHR0cmlzdGF0ZSBcXFwiTG9vcGJhY2sgZGV2aWNlIHN1cHBvcnRcXFwiXFxuIDE0NjpcXHRcXHRoZWxwXFxuIDE0NzpcXHRcXHQgIFNheWluZyBZIGhlcmUgd2lsbCBhbGxvdyB5b3UgdG8gdXNlIGEgcmVndWxhciBmaWxlIGFzIGEgYmxvY2tcXG4gMTQ4OlxcdFxcdCAgZGV2aWNlOyB5b3UgY2FuIHRoZW4gY3JlYXRlIGEgZmlsZSBzeXN0ZW0gb24gdGhhdCBibG9jayBkZXZpY2UgYW5kXFxuIDE0OTpcXHRcXHQgIG1vdW50IGl0IGp1c3QgYXMgeW91IHdvdWxkIG1vdW50IG90aGVyIGJsb2NrIGRldmljZXMgc3VjaCBhcyBoYXJkXFxuIDE1MDpcXHRcXHQgIGRyaXZlIHBhcnRpdGlvbnMsIENELVJPTSBkcml2ZXMgb3IgZmxvcHB5IGRyaXZlcy4gVGhlIGxvb3AgZGV2aWNlc1xcbiAxNTE6XFx0XFx0ICBhcmUgYmxvY2sgc3BlY2lhbCBkZXZpY2UgZmlsZXMgd2l0aCBtYWpvciBudW1iZXIgNyBhbmQgdHlwaWNhbGx5XFxuIDE1MjpcXHRcXHQgIGNhbGxlZCAvZGV2L2xvb3AwLCAvZGV2L2xvb3AxIGV0Yy5cXG4gMTUzOlxcdFxcbiAxNTQ6XFx0XFx0ICBUaGlzIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBjaGVjayBhbiBJU08gOTY2MCBmaWxlIHN5c3RlbSBiZWZvcmVcXG4gMTU1OlxcdFxcdCAgYnVybmluZyB0aGUgQ0QsIG9yIGlmIHlvdSB3YW50IHRvIHVzZSBmbG9wcHkgaW1hZ2VzIHdpdGhvdXQgZmlyc3RcXG4gMTU2OlxcdFxcdCAgd3JpdGluZyB0aGVtIHRvIGZsb3BweS4gRnVydGhlcm1vcmUsIHNvbWUgTGludXggZGlzdHJpYnV0aW9ucyBhdm9pZFxcbiAxNTc6XFx0XFx0ICB0aGUgbmVlZCBmb3IgYSBkZWRpY2F0ZWQgTGludXggcGFydGl0aW9uIGJ5IGtlZXBpbmcgdGhlaXIgY29tcGxldGVcXG4gMTU4OlxcdFxcdCAgcm9vdCBmaWxlIHN5c3RlbSBpbnNpZGUgYSBET1MgRkFUIGZpbGUgdXNpbmcgdGhpcyBsb29wIGRldmljZVxcbiAxNTk6XFx0XFx0ICBkcml2ZXIuXFxuIDE2MDpcXHRcXG4gMTYxOlxcdFxcdCAgVG8gdXNlIHRoZSBsb29wIGRldmljZSwgeW91IG5lZWQgdGhlIGxvc2V0dXAgdXRpbGl0eSwgZm91bmQgaW4gdGhlXFxuIDE2MjpcXHRcXHQgIHV0aWwtbGludXggcGFja2FnZSwgc2VlXFxuIDE2MzpcXHRcXHQgIFxcdTAwM2NodHRwczovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC91dGlscy91dGlsLWxpbnV4L1xcdTAwM2UuXFxuIDE2NDpcXHRcXG4gMTY1OlxcdFxcdCAgVGhlIGxvb3AgZGV2aWNlIGRyaXZlciBjYW4gYWxzbyBiZSB1c2VkIHRvIFxcXCJoaWRlXFxcIiBhIGZpbGUgc3lzdGVtIGluXFxuIDE2NjpcXHRcXHQgIGEgZGlzayBwYXJ0aXRpb24sIGZsb3BweSwgb3IgcmVndWxhciBmaWxlLCBlaXRoZXIgdXNpbmcgZW5jcnlwdGlvblxcbiAxNjc6XFx0XFx0ICAoc2NyYW1ibGluZyB0aGUgZGF0YSkgb3Igc3RlZ2Fub2dyYXBoeSAoaGlkaW5nIHRoZSBkYXRhIGluIHRoZSBsb3dcXG4gMTY4OlxcdFxcdCAgYml0cyBvZiwgc2F5LCBhIHNvdW5kIGZpbGUpLiBUaGlzIGlzIGFsc28gc2FmZSBpZiB0aGUgZmlsZSByZXNpZGVzXFxuIDE2OTpcXHRcXHQgIG9uIGEgcmVtb3RlIGZpbGUgc2VydmVyLlxcbiAxNzA6XFx0XFxuIDE3MTpcXHRcXHQgIE5vdGUgdGhhdCB0aGlzIGxvb3AgZGV2aWNlIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggdGhlIGxvb3BiYWNrXFxuIDE3MjpcXHRcXHQgIGRldmljZSB1c2VkIGZvciBuZXR3b3JrIGNvbm5lY3Rpb25zIGZyb20gdGhlIG1hY2hpbmUgdG8gaXRzZWxmLlxcbiAxNzM6XFx0XFxuIDE3NDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAxNzU6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbG9vcC5cXG4gMTc2OlxcdFxcbiAxNzc6XFx0XFx0ICBNb3N0IHVzZXJzIHdpbGwgYW5zd2VyIE4gaGVyZS5cXG4gMTc4OlxcdFxcbiAxNzk6XFx0Y29uZmlnIEJMS19ERVZfTE9PUF9NSU5fQ09VTlRcXG4gMTgwOlxcdFxcdGludCBcXFwiTnVtYmVyIG9mIGxvb3AgZGV2aWNlcyB0byBwcmUtY3JlYXRlIGF0IGluaXQgdGltZVxcXCJcXG4gMTgxOlxcdFxcdGRlcGVuZHMgb24gQkxLX0RFVl9MT09QXFxuIDE4MjpcXHRcXHRkZWZhdWx0IDhcXG4gMTgzOlxcdFxcdGhlbHBcXG4gMTg0OlxcdFxcdCAgU3RhdGljIG51bWJlciBvZiBsb29wIGRldmljZXMgdG8gYmUgdW5jb25kaXRpb25hbGx5IHByZS1jcmVhdGVkXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE4OjAxOjAzLjc0NDk4NDQwNVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MzM2MzE4MjcxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyBmb3IgSGlkZGVuIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBCTEtfREVWX0xPT1BgIG1vZHVsZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiUmlnaHQsIGJlZm9yZSBJIGdldCB0b28gZGVlcCwgYXJlIHRoZXJlIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgb3IgY29uZmlndXJhdGlvbnMgdGhhdCBJIG1pZ2h0IGJlIG92ZXJsb29raW5nP1wiIEl0J3MgYWx3YXlzIGJlc3QgdG8gYmUgdGhvcm91Z2gsIGVzcGVjaWFsbHkgd2l0aCBibG9jayBkZXZpY2UgZHJpdmVycy4gSSd2ZSBsZWFybmVkIHRoYXQgbGVzc29uIHRoZSBoYXJkIHdheSEgTXkgaW5zdGluY3QgaXMgdG8gaGVhZCBzdHJhaWdodCBmb3IgdGhlIGBLY29uZmlnYCBmaWxlIGluIHRoZSBgZHJpdmVycy9ibG9ja2AgZGlyZWN0b3J5LiBJdCdzIHVzdWFsbHkgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQuIExldCdzIHN0YXJ0IGFyb3VuZCBsaW5lIDEgYW5kIHNlZSB3aGF0IHdlIGNhbiBkaWcgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDMzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxODowMTo0Ny4xMDgxNzAzODNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0NzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgQmxvY2sgZGV2aWNlIGRyaXZlciBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnVjb25maWcgQkxLX0RFVlxcbiAgIDc6XFx0XFx0Ym9vbCBcXFwiQmxvY2sgZGV2aWNlc1xcXCJcXG4gICA4OlxcdFxcdGRlcGVuZHMgb24gQkxPQ0tcXG4gICA5OlxcdFxcdGRlZmF1bHQgeVxcbiAgMTA6XFx0XFx0aGVscFxcbiAgMTE6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGdldCB0byBzZWUgb3B0aW9ucyBmb3IgdmFyaW91cyBkaWZmZXJlbnQgYmxvY2sgZGV2aWNlXFxuICAxMjpcXHRcXHQgIGRyaXZlcnMuIFRoaXMgb3B0aW9uIGFsb25lIGRvZXMgbm90IGFkZCBhbnkga2VybmVsIGNvZGUuXFxuICAxMzpcXHRcXG4gIDE0OlxcdFxcdCAgSWYgeW91IHNheSBOLCBhbGwgb3B0aW9ucyBpbiB0aGlzIHN1Ym1lbnUgd2lsbCBiZSBza2lwcGVkIGFuZCBkaXNhYmxlZDtcXG4gIDE1OlxcdFxcdCAgb25seSBkbyB0aGlzIGlmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0aWYgQkxLX0RFVlxcbiAgMTg6XFx0XFxuICAxOTpcXHRzb3VyY2UgXFxcImRyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZ1xcXCJcXG4gIDIwOlxcdHNvdXJjZSBcXFwiZHJpdmVycy9ibG9jay9ybnVsbC9LY29uZmlnXFxcIlxcbiAgMjE6XFx0XFxuICAyMjpcXHRjb25maWcgQkxLX0RFVl9GRFxcbiAgMjM6XFx0XFx0dHJpc3RhdGUgXFxcIk5vcm1hbCBmbG9wcHkgZGlzayBzdXBwb3J0XFxcIlxcbiAgMjQ6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX01BWV9IQVZFX1BDX0ZEQ1xcbiAgMjU6XFx0XFx0aGVscFxcbiAgMjY6XFx0XFx0ICBJZiB5b3Ugd2FudCB0byB1c2UgdGhlIGZsb3BweSBkaXNrIGRyaXZlKHMpIG9mIHlvdXIgUEMgdW5kZXIgTGludXgsXFxuICAyNzpcXHRcXHQgIHNheSBZLiBJbmZvcm1hdGlvbiBhYm91dCB0aGlzIGRyaXZlciwgZXNwZWNpYWxseSBpbXBvcnRhbnQgZm9yIElCTVxcbiAgMjg6XFx0XFx0ICBUaGlua3BhZCB1c2VycywgaXMgY29udGFpbmVkIGluXFxuICAyOTpcXHRcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmxvY2tkZXYvZmxvcHB5LnJzdFxcdTAwM2UuXFxuICAzMDpcXHRcXHQgIFRoYXQgZmlsZSBhbHNvIGNvbnRhaW5zIHRoZSBsb2NhdGlvbiBvZiB0aGUgRmxvcHB5IGRyaXZlciBGQVEgYXNcXG4gIDMxOlxcdFxcdCAgd2VsbCBhcyBsb2NhdGlvbiBvZiB0aGUgZmR1dGlscyBwYWNrYWdlIHVzZWQgdG8gY29uZmlndXJlIGFkZGl0aW9uYWxcXG4gIDMyOlxcdFxcdCAgcGFyYW1ldGVycyBvZiB0aGUgZHJpdmVyIGF0IHJ1biB0aW1lLlxcbiAgMzM6XFx0XFxuICAzNDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAgMzU6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZmxvcHB5LlxcbiAgMzY6XFx0XFxuICAzNzpcXHRjb25maWcgQkxLX0RFVl9GRF9SQVdDTURcXG4gIDM4OlxcdFxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIHJhdyBmbG9wcHkgZGlzayBjb21tYW5kcyAoREVQUkVDQVRFRClcXFwiXFxuICAzOTpcXHRcXHRkZXBlbmRzIG9uIEJMS19ERVZfRkRcXG4gIDQwOlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTg6MDE6NDcuMTA4MzA3NzEzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwMTA5OTEwMzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTG9vcCBCbG9jayBEZXZpY2UgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBgQkxLX0RFVmAgZGVwZW5kcyBvbiBgQkxPQ0tgLiBUaGF0IG1ha2VzIHNlbnNlLiBBbmQgYEJMS19ERVZfTE9PUGAgaXMgKmluc2lkZSogYEJMS19ERVZgLCBzbywgaW1wbGljaXRseSwgdGhhdCBhbHNvIHJlcXVpcmVzIGBCTE9DS2AuIEdvdCBpdC4gTm93LCB3aGF0J3Mgb3VyIGF0dGFjayBzdXJmYWNlPyBMZXQncyBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyBpbiBgZHJpdmVycy9ibG9jay9sb29wLmNgIGFyZSBnb2luZyB0byBiZSBtb3N0IHVzZWZ1bCBmb3IgZnV6emluZy5cblxuTGV0J3Mgc2VlLi4uIHdoYXQgYXJlIHRoZSBlbnRyeSBwb2ludHM/IEhtbSwgb2theSwgaGVyZSdzIGEgc3RhcnQ6IGBsb19yZWxlYXNlYCwgd2hpY2ggaXMgdGhlIGBmb3BzLVx1MDAzZXJlbGVhc2VgIGNhbGxiYWNrLiBUaGF0J3MgYSBnb29kIGNhbmRpZGF0ZS4gV2UgYWxzbyBoYXZlIGBsb29wX2Nscl9mZGAsIGFuZCB0aGUgYGxvX2lvY3RsYCBhbmQgYGxvX2NvbXBhdF9pb2N0bGAgcGFpci4gT2theSwgYGxvb3BfY29udHJvbF9pb2N0bGAgaXMgYW5vdGhlciBvbmUgdG8gY29uc2lkZXIuIEFuZCB0aGVuIHRoZXJlIGFyZSB0aGUgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gbWFuYWdlbWVudCDigJMgYGxvb3BfYWRkYCwgYGxvb3BfcmVtb3ZlYCwgYGxvb3BfY29uZmlndXJlYCwgYW5kIGBsb29wX2NoYW5nZV9mZGAuIFRob3NlIGFsbCBsb29rIGludGVyZXN0aW5nLlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBkZWVwZXIgYW5kIGFjdHVhbGx5IGxvb2sgYXQgdGhlIGNvZGUgZGVmaW5pdGlvbnMgdGhlbXNlbHZlcyB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjc2OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE4OjAxOjU3LjIxODIyMDk1OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0MjU5NTM1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApPyhpbnR8dm9pZHxsb25nKSBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9sb29wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9sb29wLmM9OTc9c3RhdGljIERFRklORV9NVVRFWChsb29wX3ZhbGlkYXRlX211dGV4KTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTExMC0gKi9cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMTE6c3RhdGljIGludCBsb29wX2dsb2JhbF9sb2NrX2tpbGxhYmxlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGJvb2wgZ2xvYmFsKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTExMi17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMzEtICovXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTMyOnN0YXRpYyB2b2lkIGxvb3BfZ2xvYmFsX3VubG9jayhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBib29sIGdsb2JhbClcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMzMte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTM4LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEzOTpzdGF0aWMgaW50IG1heF9wYXJ0O1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE0MDpzdGF0aWMgaW50IHBhcnRfc2hpZnQ7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTQxLVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MjAyPXN0YXRpYyBpbmxpbmUgdm9pZCBsb29wX3VwZGF0ZV9kaW8oc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIxOS0gKi9cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMjA6c3RhdGljIHZvaWQgbG9vcF9zZXRfc2l6ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBsb2ZmX3Qgc2l6ZSlcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjEte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjI1LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIyNjpzdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBpbnQgbW9kZSlcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjcte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjQ3LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjI0ODpzdGF0aWMgaW50IGxvX2ZhbGxvY2F0ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIGxvZmZfdCBwb3MsXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjQ5LVxcdFxcdFxcdGludCBtb2RlKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjc2LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjI3NzpzdGF0aWMgaW50IGxvX3JlcV9mbHVzaChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjc4LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTI4NS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyODY6c3RhdGljIHZvaWQgbG9fY29tcGxldGVfcnEoc3RydWN0IHJlcXVlc3QgKnJxKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTI4Ny17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0zMTktXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MzIwOnN0YXRpYyB2b2lkIGxvX3J3X2Fpb19kb19jb21wbGV0aW9uKHN0cnVjdCBsb29wX2NtZCAqY21kKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTMyMS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0zMzMtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MzM0OnN0YXRpYyB2b2lkIGxvX3J3X2Fpb19jb21wbGV0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGxvbmcgcmV0KVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTMzNS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0zNDEtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MzQyOnN0YXRpYyBpbnQgbG9fcndfYWlvKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBsb29wX2NtZCAqY21kLFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTM0My1cXHRcXHQgICAgIGxvZmZfdCBwb3MsIGludCBydylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTQxMC1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo0MTE6c3RhdGljIGludCBkb19yZXFfZmlsZWJhY2tlZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNDEyLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTQzOS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo0NDA6c3RhdGljIHZvaWQgbG9vcF9yZXJlYWRfcGFydGl0aW9ucyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTQ0MS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy00NTEtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6NDUyOnN0YXRpYyB2b2lkIGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy00NTMte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9NDg1PXN0YXRpYyBpbmxpbmUgaW50IGlzX2xvb3BfZGV2aWNlKHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNDkxLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjQ5MjpzdGF0aWMgaW50IGxvb3BfdmFsaWRhdGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy00OTMte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNTE2LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjUxNzpzdGF0aWMgdm9pZCBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGZpbGUgKmZpbGUpXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNTE4LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTUyNy1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo1Mjg6c3RhdGljIGludCBsb29wX2NoZWNrX2JhY2tpbmdfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy01Mjkte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNTQ2LSAqL1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjU0NzpzdGF0aWMgaW50IGxvb3BfY2hhbmdlX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNTQ4LVxcdFxcdFxcdCAgdW5zaWduZWQgaW50IGFyZylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTczMz1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBsb29wX2F0dHJpYnV0ZV9ncm91cCA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTczNy1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo3Mzg6c3RhdGljIHZvaWQgbG9vcF9zeXNmc19pbml0KHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNzM5LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTc0My1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo3NDQ6c3RhdGljIHZvaWQgbG9vcF9zeXNmc19leGl0KHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNzQ1LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTc1MC1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo3NTE6c3RhdGljIHZvaWQgbG9vcF9nZXRfZGlzY2FyZF9jb25maWcoc3RydWN0IGxvb3BfZGV2aWNlICpsbyxcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy03NTItXFx0XFx0XFx0XFx0ICAgIHUzMiAqZ3JhbnVsYXJpdHksIHUzMiAqbWF4X2Rpc2NhcmRfc2VjdG9ycylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTc4MT1zdHJ1Y3QgbG9vcF93b3JrZXIge1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNzkwLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjc5MTpzdGF0aWMgdm9pZCBsb29wX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTc5Mi1cXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTc5OT1zdGF0aWMgaW5saW5lIGludCBxdWV1ZV9vbl9yb290X3dvcmtlcihzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtODA0LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjgwNTpzdGF0aWMgdm9pZCBsb29wX3F1ZXVlX3dvcmsoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGxvb3BfY21kICpjbWQpXFxuZHJpdmVycy9ibG9jay9sb29wLmMtODA2LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTg3NC1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo4NzU6c3RhdGljIHZvaWQgbG9vcF9zZXRfdGltZXIoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy04NzYte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtODc5LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjg4MDpzdGF0aWMgdm9pZCBsb29wX2ZyZWVfaWRsZV93b3JrZXJzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGJvb2wgZGVsZXRlX2FsbClcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy04ODEte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtOTAwLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjkwMTpzdGF0aWMgdm9pZCBsb29wX2ZyZWVfaWRsZV93b3JrZXJzX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcilcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy05MDIte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9OTQ4PXN0YXRpYyB1bnNpZ25lZCBpbnQgbG9vcF9kZWZhdWx0X2Jsb2Nrc2l6ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtOTU1LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjk1NjpzdGF0aWMgdm9pZCBsb29wX3NldF9kbWFfbGltaXQoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTk1Ny17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy05NjgtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6OTY5OnN0YXRpYyB2b2lkIGxvb3BfdXBkYXRlX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sXFxuZHJpdmVycy9ibG9jay9sb29wLmMtOTcwLVxcdFxcdHVuc2lnbmVkIGludCBic2l6ZSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEwMDMtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTAwNDpzdGF0aWMgaW50IGxvb3BfY29uZmlndXJlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGJsa19tb2RlX3QgbW9kZSxcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMDA1LVxcdFxcdFxcdCAgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldixcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTExMzctXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTEzODpzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTM5LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEyMzctXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTIzODpzdGF0aWMgaW50IGxvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTIzOS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNDM5PWxvb3BfZ2V0X3N0YXR1czY0KHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBsb29wX2luZm82NCBfX3VzZXIgKmFyZykge1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTQ1MS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNDUyOnN0YXRpYyBpbnQgbG9vcF9zZXRfY2FwYWNpdHkoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNDUzLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE0NjQtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTQ2NTpzdGF0aWMgaW50IGxvb3Bfc2V0X2RpbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCB1bnNpZ25lZCBsb25nIGFyZylcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNDY2LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE0OTQtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTQ5NTpzdGF0aWMgaW50IGxvb3Bfc2V0X2Jsb2NrX3NpemUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgYmxrX21vZGVfdCBtb2RlLFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE0OTYtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTU0Mi1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNTQzOnN0YXRpYyBpbnQgbG9fc2ltcGxlX2lvY3RsKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHVuc2lnbmVkIGludCBjbWQsXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTU0NC1cXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE1NjQtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTU2NTpzdGF0aWMgaW50IGxvX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNTY2LVxcdHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MTcxNT1sb29wX2dldF9zdGF0dXNfY29tcGF0KHN0cnVjdCBsb29wX2RldmljZSAqbG8sXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNzI4LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE3Mjk6c3RhdGljIGludCBsb19jb21wYXRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE3MzAtXFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNzY0LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE3NjU6c3RhdGljIGludCBsb19vcGVuKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBibGtfbW9kZV90IG1vZGUpXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTc2Ni17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNzc5LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE3ODA6c3RhdGljIHZvaWQgbG9fcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNzgxLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4MTUtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTgxNjpzdGF0aWMgdm9pZCBsb19mcmVlX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTgxNy17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xODI4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbG9fZm9wcyA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4NTItICovXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTg1MzpzdGF0aWMgaW50IG1heF9sb29wID0gQ09ORklHX0JMS19ERVZfTE9PUF9NSU5fQ09VTlQ7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTg1NC1cXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE4NTY9c3RhdGljIGJvb2wgbWF4X2xvb3Bfc3BlY2lmaWVkO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4NTctXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTg1ODpzdGF0aWMgaW50IG1heF9sb29wX3BhcmFtX3NldF9pbnQoY29uc3QgY2hhciAqdmFsLFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4NTktXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE4ODQ9TU9EVUxFX1BBUk1fREVTQyhtYXhfcGFydCwgXFxcIk1heGltdW0gbnVtYmVyIG9mIHBhcnRpdGlvbnMgcGVyIGxvb3AgZGV2aWNlXFxcIik7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTg4NS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxODg2OnN0YXRpYyBpbnQgaHdfcXVldWVfZGVwdGggPSBMT09QX0RFRkFVTFRfSFdfUV9ERVBUSDtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODg3LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE4ODg6c3RhdGljIGludCBsb29wX3NldF9od19xdWV1ZV9kZXB0aChjb25zdCBjaGFyICpzLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICpwKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4ODkte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MTkxMz1zdGF0aWMgYmxrX3N0YXR1c190IGxvb3BfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xOTU1LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE5NTY6c3RhdGljIHZvaWQgbG9vcF9oYW5kbGVfY21kKHN0cnVjdCBsb29wX2NtZCAqY21kKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE5NTcte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjAwNy1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMDA4OnN0YXRpYyB2b2lkIGxvb3BfcHJvY2Vzc193b3JrKHN0cnVjdCBsb29wX3dvcmtlciAqd29ya2VyLFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIwMDktXFx0XFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqY21kX2xpc3QsIHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMDQxLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIwNDI6c3RhdGljIHZvaWQgbG9vcF93b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIwNDMte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjA0OC1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMDQ5OnN0YXRpYyB2b2lkIGxvb3Bfcm9vdGNnX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjA1MC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0yMDU2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyBsb29wX21xX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIwNjAtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MjA2MTpzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIwNjIte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjE3OS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMTgwOnN0YXRpYyB2b2lkIGxvb3BfcmVtb3ZlKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjE4MS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMTk2LSNpZmRlZiBDT05GSUdfQkxPQ0tfTEVHQUNZX0FVVE9MT0FEXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MjE5NzpzdGF0aWMgdm9pZCBsb29wX3Byb2JlKGRldl90IGRldilcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMTk4LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIyMDgtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MjIwOTpzdGF0aWMgaW50IGxvb3BfY29udHJvbF9yZW1vdmUoaW50IGlkeClcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjEwLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIyNTUtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MjI1NjpzdGF0aWMgaW50IGxvb3BfY29udHJvbF9nZXRfZnJlZShpbnQgaWR4KVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIyNTcte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjI3OS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMjgwOnN0YXRpYyBsb25nIGxvb3BfY29udHJvbF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjgxLVxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIHBhcm0pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0yMzEwPU1PRFVMRV9BTElBUyhcXFwiZGV2bmFtZTpsb29wLWNvbnRyb2xcXFwiKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMzExLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIzMTI6c3RhdGljIGludCBfX2luaXQgbG9vcF9pbml0KHZvaWQpXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjMxMy17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMzY0LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIzNjU6c3RhdGljIHZvaWQgX19leGl0IGxvb3BfZXhpdCh2b2lkKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIzNjYte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MjM4Nj1tb2R1bGVfZXhpdChsb29wX2V4aXQpO1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjM4OC0jaWZuZGVmIE1PRFVMRVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIzODk6c3RhdGljIGludCBfX2luaXQgbWF4X2xvb3Bfc2V0dXAoY2hhciAqc3RyKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIzOTAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxODowMTo1OC42NjA4MjQwMDVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzU3MTU3MjMwMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGb2N1c1N5bWJvbHMgYW5kIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJ20gbG9va2luZyBhdCB0aGVzZSBgRm9jdXNTeW1ib2xzYCByZWxhdGVkIHRvIGxvb3AgZGV2aWNlczogYGxvX3JlbGVhc2VgLCBgbG9vcF9jbHJfZmRgLCBgbG9faW9jdGxgLCBgbG9vcF9jb250cm9sX2lvY3RsYCwgYGxvb3BfY29uZmlndXJlYCwgYW5kIGBsb29wX3JlbW92ZWAuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyB0byBlbnN1cmUgdGhlIGFwcHJvcHJpYXRlIGNvbmZpZ3VyYXRpb24gaXMgaW4gcGxhY2UuXG5cblNwZWNpZmljYWxseSwgSSBzZWUgd2UncmUgdXNpbmcgYEJMS19ERVZfTE9PUGAgaW4gdGhlIGBDb25maWdgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBpcyBzdWZmaWNpZW50LiBHb2luZyB0aHJvdWdoIHRoZSBkZXBlbmRlbmNpZXMsIGBCTEtfREVWX0xPT1BgIHJlbGllcyBvbiBgQkxLX0RFVmAsIHdoaWNoIGl0c2VsZiBkZWZhdWx0cyB0byAneScgaWYgYEJMT0NLYCBpcyBzZXQuIEdpdmVuIHRoaXMsIHNwZWNpZnlpbmcgYEJMS19ERVZfTE9PUGAgc2VlbXMgYXBwcm9wcmlhdGUuIEkgZG9uJ3Qgc2VlIGFueSBnbGFyaW5nIG9taXNzaW9ucyBvciBjb25mbGljdHMsIHNvIHRoYXQncyBnb29kLlxuXG5KdXN0IGRvaW5nIGEgcXVpY2sgZmluYWwgc2FuaXR5IGNoZWNrIGhlcmUuLi4gYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIGB0cnVlYCwgdGhlIGBFbmFibGVDb25maWdzYCBhcnJheSBjb250YWlucyBvbmx5IGBCTEtfREVWX0xPT1BgLCBhbmQgdGhlIGBGb2N1c1N5bWJvbHNgIGFycmF5IGhhcyB0aGUgZm91ciBzeW1ib2xzIEkgbWVudGlvbmVkIGJlZm9yZTsgbG9va3MgZ29vZC4gSSBoYXZlIGEgY29uY2lzZSBkZXNjcmlwdGlvbiBvZiB3aGF0IGlzIGdvaW5nIG9uIGhlcmUuIE5vdyBJIHRoaW5rIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3Mjk0LCJPdXRwdXRUb2tlbnMiOjE0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxODowMzoxNC4zNzY1NTEwNzRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzIwNzIyODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTE9PUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxvX3JlbGVhc2VcIixcbiAgICBcImxvb3BfY2xyX2ZkXCIsXG4gICAgXCJsb19pb2N0bFwiLFxuICAgIFwibG9vcF9jb250cm9sX2lvY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbG9vcCBkZXZpY2UgdGVhcmRvd24gbG9naWMgaW4gZHJpdmVycy9ibG9jay9sb29wLmMgdG8gZGVmZXIgY2xlYXJpbmcgdGhlIGJhY2tpbmcgZmlsZSBhbmQgcmVsZWFzaW5nIHJlc291cmNlcyAoX19sb29wX2Nscl9mZCkgdG8gYSB3b3JrcXVldWUgY29udGV4dCB3aGVuIHRoZSBsb29wIGRldmljZSBpcyBjbG9zZWQuIFRoaXMgaW50cm9kdWNlcyBuZXcgY29uY3VycmVuY3kgaGFuZGxpbmcsIHJlZmVyZW5jZSBjb3VudGluZywgYW5kIHF1ZXVlIGRyYWluaW5nIHNlbWFudGljcyB3aGljaCBzaG91bGQgYmUgZnV6emVkIGZvciByYWNlIGNvbmRpdGlvbnMsIGRlYWRsb2NrcywgYW5kIFVBRnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9MT09QXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibG9fcmVsZWFzZVwiLFxuICAgIFwibG9vcF9jbHJfZmRcIixcbiAgICBcImxvX2lvY3RsXCIsXG4gICAgXCJsb29wX2NvbnRyb2xfaW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBsb29wIGRldmljZSB0ZWFyZG93biBsb2dpYyBpbiBkcml2ZXJzL2Jsb2NrL2xvb3AuYyB0byBkZWZlciBjbGVhcmluZyB0aGUgYmFja2luZyBmaWxlIGFuZCByZWxlYXNpbmcgcmVzb3VyY2VzIChfX2xvb3BfY2xyX2ZkKSB0byBhIHdvcmtxdWV1ZSBjb250ZXh0IHdoZW4gdGhlIGxvb3AgZGV2aWNlIGlzIGNsb3NlZC4gVGhpcyBpbnRyb2R1Y2VzIG5ldyBjb25jdXJyZW5jeSBoYW5kbGluZywgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgcXVldWUgZHJhaW5pbmcgc2VtYW50aWNzIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgZm9yIHJhY2UgY29uZGl0aW9ucywgZGVhZGxvY2tzLCBhbmQgVUFGcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTg6MDM6MTQuNTQ4NjMzNTcxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDk3ODQ4MjIwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE4OjAzOjE0LjU1MDQ2NzEwMVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE0OTc2NjQyOTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkcml2ZXJzL2Jsb2NrL2xvb3AuYyB0byBkZWZlciBsb29wIGRldmljZSB0ZWFyZG93biAoX19sb29wX2Nscl9mZCkgdG8gYSB3b3JrcXVldWUgaXRlbSAobG9fY2xyX3dvcmspIHJhdGhlciB0aGFuIGV4ZWN1dGluZyBpdCBzeW5jaHJvbm91c2x5IGluIGxvX3JlbGVhc2UuIFRoZSBjaGFuZ2VzIGludm9sdmUgd29ya3F1ZXVlIHNjaGVkdWxpbmcsIHJlZmVyZW5jZSBjb3VudGluZywgYW5kIHN5bmNocm9uaXphdGlvbiAoZHJhaW5fd29ya3F1ZXVlLCBmcmVlemVfcXVldWUsIG11dGV4IGxvY2tpbmcpLiBObyB1bmluaXRpYWxpemVkIGRhdGEgc3RydWN0dXJlcywgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhpcyBwYXRjaCAoc3VjaCBhcyByYWNlIGNvbmRpdGlvbnMsIGRlYWRsb2NrcywgdXNlLWFmdGVyLWZyZWUsIG9yIHJlZmVyZW5jZSBjb3VudCBsZWFrcykgYXJlIGNvdmVyZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgc2FuaXRpemVycywgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiB1bm5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxNzg3NTlmYjdkY2I5N2NhZGUxMTYxM2JiMDM2M2EzMGI1YWM5ODkzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjggMTc6NTY6NDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXG5pbmRleCA2ZjEyOTc2MDM1YjA5Li5lMjcwM2YwZWU3NWQ3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmNcbisrKyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXG5AQCAtNzUsNiArNzUsNyBAQCBzdHJ1Y3QgbG9vcF9kZXZpY2Uge1xuIFx0c3RydWN0IGdlbmRpc2tcdFx0KmxvX2Rpc2s7XG4gXHRzdHJ1Y3QgbXV0ZXhcdFx0bG9fbXV0ZXg7XG4gXHRib29sXHRcdFx0aWRyX3Zpc2libGU7XG4rXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdGxvX2Nscl93b3JrO1xuIH07XG4gXG4gc3RydWN0IGxvb3BfY21kIHtcbkBAIC0xMTM0LDEzICsxMTM1LDM1IEBAIHN0YXRpYyBpbnQgbG9vcF9jb25maWd1cmUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgYmxrX21vZGVfdCBtb2RlLFxuIFx0cmV0dXJuIGVycm9yO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4rc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuK1x0c3RydWN0IGxvb3BfZGV2aWNlICpsbyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbG9vcF9kZXZpY2UsIGxvX2Nscl93b3JrKTtcbitcdHN0cnVjdCBnZW5kaXNrICpkaXNrID0gbG8tXHUwMDNlbG9fZGlzaztcbiBcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltO1xuIFx0c3RydWN0IGZpbGUgKmZpbHA7XG4gXHRnZnBfdCBnZnAgPSBsby1cdTAwM2VvbGRfZ2ZwX21hc2s7XG4gXHRpbnQgZXJyO1xuIFxuK1x0LyogU3RlcCAxOiBGbHVzaCBhbGwgb3V0c3RhbmRpbmcgSS9PLCB3aXRob3V0IG9wZW5fbXV0ZXggaGVsZC4gKi9cbitcdC8qXG4rXHQgKiBOb3cgdGhhdCBsb29wX3F1ZXVlX3JxKCkgc2VlcyBsby1cdTAwM2Vsb19zdGF0ZSAhPSBMb19ib3VuZCxcbitcdCAqIHdhaXQgZm9yIGFscmVhZHkgc3RhcnRlZCBsb29wX3F1ZXVlX3JxKCkgdG8gY29tcGxldGUuXG4rXHQgKi9cbitcdHN5bmNocm9uaXplX3JjdSgpO1xuK1x0LypcbitcdCAqIE5vdyB0aGF0IG5vIG1vcmUgd29ya3MgYXJlIHNjaGVkdWxlZCBieSBsb29wX3F1ZXVlX3JxKCksXG4rXHQgKiB3YWl0IGZvciBhbHJlYWR5IHNjaGVkdWxlZCB3b3JrcyB0byBjb21wbGV0ZS5cbitcdCAqL1xuK1x0ZHJhaW5fd29ya3F1ZXVlKGxvLVx1MDAzZXdvcmtxdWV1ZSk7XG4rXHQvKlxuK1x0ICogTm93IHRoYXQgbm8gbW9yZSBBSU8gcmVxdWVzdHMgYXJlIHNjaGVkdWxlZCBieSBsb19yd19haW8oKSxcbitcdCAqIHdhaXQgZm9yIGFscmVhZHkgc3RhcnRlZCBBSU8gdG8gY29tcGxldGUuXG4rXHQgKi9cbitcdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShsby1cdTAwM2Vsb19xdWV1ZSwgYmxrX21xX2ZyZWV6ZV9xdWV1ZShsby1cdTAwM2Vsb19xdWV1ZSkpO1xuK1xuK1x0LyogU3RlcCAyOiBQZXJmb3JtIHJlbWFpbmluZyBjbGVhbnVwLCB3aXRoIG9wZW5fbXV0ZXggaGVsZC4gKi9cbitcdG11dGV4X2xvY2soXHUwMDI2ZGlzay1cdTAwM2VvcGVuX211dGV4KTtcbitcbiBcdHNwaW5fbG9ja19pcnEoXHUwMDI2bG8tXHUwMDNlbG9fbG9jayk7XG4gXHRmaWxwID0gbG8tXHUwMDNlbG9fYmFja2luZ19maWxlO1xuIFx0bG8tXHUwMDNlbG9fYmFja2luZ19maWxlID0gTlVMTDtcbkBAIC0xMTUxLDEyICsxMTc0LDcgQEAgc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuIFx0bG8tXHUwMDNlbG9fc2l6ZWxpbWl0ID0gMDtcbiBcdG1lbXNldChsby1cdTAwM2Vsb19maWxlX25hbWUsIDAsIExPX05BTUVfU0laRSk7XG4gXG4tXHQvKlxuLVx0ICogUmVzZXQgdGhlIGJsb2NrIHNpemUgdG8gdGhlIGRlZmF1bHQuXG4tXHQgKlxuLVx0ICogTm8gcXVldWUgZnJlZXppbmcgbmVlZGVkIGJlY2F1c2UgdGhpcyBpcyBjYWxsZWQgZnJvbSB0aGUgZmluYWxcbi1cdCAqIC1cdTAwM2VyZWxlYXNlIGNhbGwgb25seSwgc28gdGhlcmUgY2FuJ3QgYmUgYW55IG91dHN0YW5kaW5nIEkvTy5cbi1cdCAqL1xuK1x0LyogUmVzZXQgdGhlIGJsb2NrIHNpemUgdG8gdGhlIGRlZmF1bHQuICovXG4gXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGxvLVx1MDAzZWxvX3F1ZXVlKTtcbiBcdGxpbS5sb2dpY2FsX2Jsb2NrX3NpemUgPSBTRUNUT1JfU0laRTtcbiBcdGxpbS5waHlzaWNhbF9ibG9ja19zaXplID0gU0VDVE9SX1NJWkU7XG5AQCAtMTE2OCw4ICsxMTg2LDYgQEAgc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuIFx0LyogbGV0IHVzZXItc3BhY2Uga25vdyBhYm91dCB0aGlzIGNoYW5nZSAqL1xuIFx0a29iamVjdF91ZXZlbnQoXHUwMDI2ZGlza190b19kZXYobG8tXHUwMDNlbG9fZGlzayktXHUwMDNla29iaiwgS09CSl9DSEFOR0UpO1xuIFx0bWFwcGluZ19zZXRfZ2ZwX21hc2soZmlscC1cdTAwM2VmX21hcHBpbmcsIGdmcCk7XG4tXHQvKiBUaGlzIGlzIHNhZmU6IG9wZW4oKSBpcyBzdGlsbCBob2xkaW5nIGEgcmVmZXJlbmNlLiAqL1xuLVx0bW9kdWxlX3B1dChUSElTX01PRFVMRSk7XG4gXG4gXHRkaXNrX2ZvcmNlX21lZGlhX2NoYW5nZShsby1cdTAwM2Vsb19kaXNrKTtcbiBcbkBAIC0xMTk5LDEyICsxMjE1LDI0IEBAIHN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbiBcdFdSSVRFX09OQ0UobG8tXHUwMDNlbG9fc3RhdGUsIExvX3VuYm91bmQpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxvLVx1MDAzZWxvX211dGV4KTtcbiBcbitcdC8qIFN0ZXAgMzogRHJvcCByZWZjb3VudHMsIHdpdGhvdXQgb3Blbl9tdXRleCBoZWxkLiAqL1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmRpc2stXHUwMDNlb3Blbl9tdXRleCk7XG4rXG4rXHRmcHV0KGZpbHApO1xuK1xuIFx0Lypcbi1cdCAqIE5lZWQgbm90IGhvbGQgbG9fbXV0ZXggdG8gZnB1dCBiYWNraW5nIGZpbGUuIENhbGxpbmcgZnB1dCBob2xkaW5nXG4tXHQgKiBsb19tdXRleCB0cmlnZ2VycyBhIGNpcmN1bGFyIGxvY2sgZGVwZW5kZW5jeSBwb3NzaWJpbGl0eSB3YXJuaW5nIGFzXG4tXHQgKiBmcHV0IGNhbiB0YWtlIG9wZW5fbXV0ZXggd2hpY2ggaXMgdXN1YWxseSB0YWtlbiBiZWZvcmUgbG9fbXV0ZXguXG4rXHQgKiBEcm9wIGFsbCByZWZlcmVuY2VzIHRoYXQgd291bGQgaGF2ZSBiZWVuIGRyb3BwZWQgYXMgc29vbiBhc1xuK1x0ICogcmV0dXJuaW5nIGZyb20gbG9fcmVsZWFzZSgpIGFuZCByZWxlYXNpbmcgZGlzay1cdTAwM2VvcGVuX211dGV4LlxuIFx0ICovXG4tXHRmcHV0KGZpbHApO1xuK1x0bW9kdWxlX3B1dChkaXNrLVx1MDAzZWZvcHMtXHUwMDNlb3duZXIpO1xuK1x0cHV0X2RldmljZShkaXNrX3RvX2RldihkaXNrKSk7XG4rXG4rXHQvKlxuK1x0ICogVGhpcyBpcyBzYWZlOiBmbHVzaF93b3JrKCkgZnJvbSBsb29wX3JlbW92ZSgpIGZyb20gbG9vcF9leGl0KCkgd2FpdHNcbitcdCAqIHVudGlsIHRoaXMgZnVuY3Rpb24gcmV0dXJuczsgZWZmZWN0aXZlbHkgZHJvcHBpbmcgdGhlIGZpbmFsIG1vZHVsZVxuK1x0ICogcmVmZXJlbmNlcyBzeW5jaHJvbm91c2x5LlxuK1x0ICovXG4rXHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcbiB9XG4gXG4gc3RhdGljIGludCBsb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuQEAgLTE3NjksOCArMTc5NywyMCBAQCBzdGF0aWMgdm9pZCBsb19yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuIFx0bmVlZF9jbGVhciA9IChsby1cdTAwM2Vsb19zdGF0ZSA9PSBMb19ydW5kb3duKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZsby1cdTAwM2Vsb19tdXRleCk7XG4gXG4tXHRpZiAobmVlZF9jbGVhcilcbi1cdFx0X19sb29wX2Nscl9mZChsbyk7XG4rXHQvKlxuK1x0ICogSW4gb3JkZXIgdG8gZmx1c2ggcGVuZGluZyBJL08gcmVxdWVzdHMgYmVmb3JlIGNsZWFyaW5nIHRoZSBiYWNraW5nXG4rXHQgKiBkZXZpY2UsIGRlZmVyIF9fbG9vcF9jbHJfZmQoKSB0byBXUSBjb250ZXh0LiBUaGUgTG9fcnVuZG93biBzdGF0ZVxuK1x0ICogZ3VhcmFudGVlcyB0aGF0IGxvX29wZW4oKSB3aWxsIGZhaWwgd2l0aCAtRU5YSU8uXG4rXHQgKi9cbitcdGlmIChuZWVkX2NsZWFyKSB7XG4rXHRcdC8qXG4rXHRcdCAqIEdyYWIgYWxsIHJlZmVyZW5jZXMgdGhhdCB3aWxsIGJlIGRyb3BwZWQgYXMgc29vbiBhc1xuK1x0XHQgKiByZXR1cm5pbmcgZnJvbSBsb19yZWxlYXNlKCkgYW5kIHJlbGVhc2luZyBkaXNrLVx1MDAzZW9wZW5fbXV0ZXguXG4rXHRcdCAqL1xuK1x0XHRnZXRfZGV2aWNlKGRpc2tfdG9fZGV2KGRpc2spKTtcbitcdFx0X19tb2R1bGVfZ2V0KGRpc2stXHUwMDNlZm9wcy1cdTAwM2Vvd25lcik7XG4rXHRcdHF1ZXVlX3dvcmsoc3lzdGVtX2xvbmdfd3EsIFx1MDAyNmxvLVx1MDAzZWxvX2Nscl93b3JrKTtcbitcdH1cbiB9XG4gXG4gc3RhdGljIHZvaWQgbG9fZnJlZV9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuQEAgLTIwMzQsNiArMjA3NCw3IEBAIHN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpXG4gXHRsbyA9IGt6YWxsb2Nfb2JqKCpsbyk7XG4gXHRpZiAoIWxvKVxuIFx0XHRnb3RvIG91dDtcbitcdElOSVRfV09SSyhcdTAwMjZsby1cdTAwM2Vsb19jbHJfd29yaywgX19sb29wX2Nscl9mZCk7XG4gXHRsby1cdTAwM2V3b3JrZXJfdHJlZSA9IFJCX1JPT1Q7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZsby1cdTAwM2VpZGxlX3dvcmtlcl9saXN0KTtcbiBcdHRpbWVyX3NldHVwKFx1MDAyNmxvLVx1MDAzZXRpbWVyLCBsb29wX2ZyZWVfaWRsZV93b3JrZXJzX3RpbWVyLCBUSU1FUl9ERUZFUlJBQkxFKTtcbkBAIC0yMTM4LDYgKzIxNzksOSBAQCBzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKVxuIFxuIHN0YXRpYyB2b2lkIGxvb3BfcmVtb3ZlKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4ge1xuK1x0LyogV2FpdCBmb3IgX19sb29wX2Nscl9mZCgpIHRvIGNvbXBsZXRlLiAqL1xuK1x0Zmx1c2hfd29yayhcdTAwMjZsby1cdTAwM2Vsb19jbHJfd29yayk7XG4rXG4gXHQvKiBNYWtlIHRoaXMgbG9vcCBkZXZpY2UgdW5yZWFjaGFibGUgZnJvbSBwYXRobmFtZS4gKi9cbiBcdGRlbF9nZW5kaXNrKGxvLVx1MDAzZWxvX2Rpc2spO1xuIFx0YmxrX21xX2ZyZWVfdGFnX3NldChcdTAwMjZsby1cdTAwM2V0YWdfc2V0KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE4OjAzOjE0LjU1MDQ2OTI0MVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDk3NjU4NDYzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIFNlc3Npb24gQXNzZXNzbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiBpdCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHJ1bi4gRnJvbSB3aGF0IEkgc2VlLCBpdCdzIGZvY3VzZWQgb24gcmVmYWN0b3JpbmcgdGhlIGBsb29wYCBkcml2ZXIsIHNwZWNpZmljYWxseSBgZHJpdmVycy9ibG9jay9sb29wLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlcyBpcyBhc3luY2hyb25vdXMgY2xlYW51cCB1c2luZyBhIHdvcmtxdWV1ZSBhbmQgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byBsb2NraW5nIGFuZCByZWZjb3VudGluZy5cblxuVGhlIHBhdGNoIGludHJvZHVjZXMgYHN0cnVjdCB3b3JrX3N0cnVjdCBsb19jbHJfd29ya2Agd2l0aGluIHRoZSBgc3RydWN0IGxvb3BfZGV2aWNlYC4gVGhlIG1vc3QgcmVsZXZhbnQgY2hhbmdlIGlzIHRoZSBzaGlmdCBmcm9tIHN5bmNocm9ub3VzIGNsZWFudXAgaW4gYGxvX3JlbGVhc2VgICh3aGljaCB3YXMgY2FsbGVkIHVuZGVyIGBvcGVuX211dGV4YCkgdG8gYW4gYXN5bmNocm9ub3VzIGFwcHJvYWNoIHVzaW5nIGBzeXN0ZW1fbG9uZ193cWAuIFdlIG5vdyBoYXZlIGEgYF9fbG9vcF9jbHJfZmRgIHdvcmsgaGFuZGxlciB0aGF0IGNsZWFucyB0aGluZ3MgdXAgKmFmdGVyKiByZWxlYXNpbmcgdGhlIGxvY2sgYW5kIGRvaW5nIHRoZSByZXF1aXJlZCByZWZjb3VudGluZyBhbmQgZGV2aWNlIGxpZmVjeWNsZSB3b3JrLiBUaGUgcGF0Y2ggYWxzbyBhZGRzIHdvcmsgaW5pdGlhbGl6YXRpb24gaW4gYGxvb3BfYWRkYCB3aXRoIGBJTklUX1dPUksoXHUwMDI2bG8tXHUwMDNlbG9fY2xyX3dvcmssIF9fbG9vcF9jbHJfZmQpO2AgYW5kIGZsdXNoaW5nIGluIGBsb29wX3JlbW92ZWAgdXNpbmcgYGZsdXNoX3dvcmsoXHUwMDI2bG8tXHUwMDNlbG9fY2xyX3dvcmspO2AuXG5cblRoZSBjaGFuZ2VzIGFyZSBhbGwgYWJvdXQgY29uY3VycmVuY3ksIHN5bmNocm9uaXphdGlvbiwgd29ya3F1ZXVlcywgcmVmY291bnRpbmcsIGFuZCBsb2NraW5nIG1lY2hhbmlzbXMsIGRlZmVycmluZyBjbGVhbnVwIHRvIGF2b2lkIGRlYWRsb2NrcyBvciBibG9ja2luZy4gVGhlcmUncyBubyBpbnRyb2R1Y3Rpb24gb2YgbmV3IGJ1ZmZlcnMsIHVzZXIgY29waWVzLCBpb2N0bHMgcmV0dXJuaW5nIGRhdGEsIG5vIGxlbmd0aCBvciBib3VuZHMgY2hlY2tzIGJlaW5nIGNoYW5nZWQuIEl0J3Mgc2FmZSB0byBzYXkgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGUgd29yayBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQgY29ycmVjdGx5IGFmdGVyIGFsbG9jYXRpb24sIGFuZCB0aGUgY29udGV4dCBvZiB0aGUgd29yayBpdHNlbGYgYXBwZWFycyBzb3VuZC5cblxuTm93LCBjb25zaWRlcmluZyB0aGUgS01TQU4vS0FTQU4gZGlzdGluY3Rpb24sIHRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBjcnVjaWFsLiBLTVNBTiBpcyBmb3IgZGV0ZWN0aW5nIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvcm1hdGlvbiBsZWFrcy4gS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBkZWJ1Z2dpbmcgdG9vbHMgYXJlIHBlcmZlY3RseSBzdWl0ZWQgdG8gZGV0ZWN0IHRoZSB0eXBlIG9mIGlzc3VlcyBoZXJlIC0gb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlcywgaW52YWxpZCBmcmVlcywgYW5kIGxvY2tpbmcgYnVncy4gKipUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLCBMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLioqXG5cblRoZXJlZm9yZSwgSSB0aGluayB0aGlzIHBhdGNoIGlzIGZpbmUuIE5lZWRzS01TQU4gc2hvdWxkIGJlIGZhbHNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjg0LCJPdXRwdXRUb2tlbnMiOjE3MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc4NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE4OjAzOjI5LjUyNzA1NzUzN1oiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZHJpdmVycy9ibG9jay9sb29wLmMgdG8gZGVmZXIgbG9vcCBkZXZpY2UgdGVhcmRvd24gKF9fbG9vcF9jbHJfZmQpIHRvIGEgd29ya3F1ZXVlIGl0ZW0gKGxvX2Nscl93b3JrKSByYXRoZXIgdGhhbiBleGVjdXRpbmcgaXQgc3luY2hyb25vdXNseSBpbiBsb19yZWxlYXNlLiBUaGUgY2hhbmdlcyBpbnZvbHZlIHdvcmtxdWV1ZSBzY2hlZHVsaW5nLCByZWZlcmVuY2UgY291bnRpbmcsIGFuZCBzeW5jaHJvbml6YXRpb24gKGRyYWluX3dvcmtxdWV1ZSwgZnJlZXplX3F1ZXVlLCBtdXRleCBsb2NraW5nKS4gTm8gdW5pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZXMsIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQW55IHBvdGVudGlhbCBidWdzIHJlc3VsdGluZyBmcm9tIHRoaXMgcGF0Y2ggKHN1Y2ggYXMgcmFjZSBjb25kaXRpb25zLCBkZWFkbG9ja3MsIHVzZS1hZnRlci1mcmVlLCBvciByZWZlcmVuY2UgY291bnQgbGVha3MpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIHNhbml0aXplcnMsIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdW5uZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZHJpdmVycy9ibG9jay9sb29wLmMgdG8gZGVmZXIgbG9vcCBkZXZpY2UgdGVhcmRvd24gKF9fbG9vcF9jbHJfZmQpIHRvIGEgd29ya3F1ZXVlIGl0ZW0gKGxvX2Nscl93b3JrKSByYXRoZXIgdGhhbiBleGVjdXRpbmcgaXQgc3luY2hyb25vdXNseSBpbiBsb19yZWxlYXNlLiBUaGUgY2hhbmdlcyBpbnZvbHZlIHdvcmtxdWV1ZSBzY2hlZHVsaW5nLCByZWZlcmVuY2UgY291bnRpbmcsIGFuZCBzeW5jaHJvbml6YXRpb24gKGRyYWluX3dvcmtxdWV1ZSwgZnJlZXplX3F1ZXVlLCBtdXRleCBsb2NraW5nKS4gTm8gdW5pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZXMsIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQW55IHBvdGVudGlhbCBidWdzIHJlc3VsdGluZyBmcm9tIHRoaXMgcGF0Y2ggKHN1Y2ggYXMgcmFjZSBjb25kaXRpb25zLCBkZWFkbG9ja3MsIHVzZS1hZnRlci1mcmVlLCBvciByZWZlcmVuY2UgY291bnQgbGVha3MpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIHNhbml0aXplcnMsIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdW5uZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowcrhjb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-28 17:12:10 +0000 UTC FinishedAt: 2026-08-28 18:03:31 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "44e96e364b04163ddddc8a24289cef4982b7e36e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_LOOP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "44e96e364b04163ddddc8a24289cef4982b7e36e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_LOOP" ], "series_id": "5c193f99-394b-4fc3-aba1-0640abeec313" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "lo_release", "loop_clr_fd", "lo_ioctl", "loop_control_ioctl" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTE9PUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xvX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7bG9vcF9jbHJfZmQmIzM0OywKICAgICYjMzQ7bG9faW9jdGwmIzM0OywKICAgICYjMzQ7bG9vcF9jb250cm9sX2lvY3RsJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZHJpdmVycy9ibG9jay9sb29wLmMgdG8gZGVmZXIgbG9vcCBkZXZpY2UgdGVhcmRvd24gKF9fbG9vcF9jbHJfZmQpIHRvIGEgd29ya3F1ZXVlIGl0ZW0gKGxvX2Nscl93b3JrKSByYXRoZXIgdGhhbiBleGVjdXRpbmcgaXQgc3luY2hyb25vdXNseSBpbiBsb19yZWxlYXNlLiBUaGUgY2hhbmdlcyBpbnZvbHZlIHdvcmtxdWV1ZSBzY2hlZHVsaW5nLCByZWZlcmVuY2UgY291bnRpbmcsIGFuZCBzeW5jaHJvbml6YXRpb24gKGRyYWluX3dvcmtxdWV1ZSwgZnJlZXplX3F1ZXVlLCBtdXRleCBsb2NraW5nKS4gTm8gdW5pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZXMsIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQW55IHBvdGVudGlhbCBidWdzIHJlc3VsdGluZyBmcm9tIHRoaXMgcGF0Y2ggKHN1Y2ggYXMgcmFjZSBjb25kaXRpb25zLCBkZWFkbG9ja3MsIHVzZS1hZnRlci1mcmVlLCBvciByZWZlcmVuY2UgY291bnQgbGVha3MpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIHNhbml0aXplcnMsIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGxvb3AgZGV2aWNlIHRlYXJkb3duIGxvZ2ljIGluIGRyaXZlcnMvYmxvY2svbG9vcC5jIHRvIGRlZmVyIGNsZWFyaW5nIHRoZSBiYWNraW5nIGZpbGUgYW5kIHJlbGVhc2luZyByZXNvdXJjZXMgKF9fbG9vcF9jbHJfZmQpIHRvIGEgd29ya3F1ZXVlIGNvbnRleHQgd2hlbiB0aGUgbG9vcCBkZXZpY2UgaXMgY2xvc2VkLiBUaGlzIGludHJvZHVjZXMgbmV3IGNvbmN1cnJlbmN5IGhhbmRsaW5nLCByZWZlcmVuY2UgY291bnRpbmcsIGFuZCBxdWV1ZSBkcmFpbmluZyBzZW1hbnRpY3Mgd2hpY2ggc2hvdWxkIGJlIGZ1enplZCBmb3IgcmFjZSBjb25kaXRpb25zLCBkZWFkbG9ja3MsIGFuZCBVQUZzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjU2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTc4NzU5ZmI3ZGNiOTdjYWRlMTE2MTNiYjAzNjNhMzBiNWFjOTg5M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDI4IDE3OjU2OjQ3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbG9vcC5jIGIvZHJpdmVycy9ibG9jay9sb29wLmNcbmluZGV4IDZmMTI5NzYwMzViMDkuLmUyNzAzZjBlZTc1ZDcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay9sb29wLmNcbkBAIC03NSw2ICYjNDM7NzUsNyBAQCBzdHJ1Y3QgbG9vcF9kZXZpY2Uge1xuIFx0c3RydWN0IGdlbmRpc2tcdFx0KmxvX2Rpc2s7XG4gXHRzdHJ1Y3QgbXV0ZXhcdFx0bG9fbXV0ZXg7XG4gXHRib29sXHRcdFx0aWRyX3Zpc2libGU7XG4mIzQzO1x0c3RydWN0IHdvcmtfc3RydWN0XHRsb19jbHJfd29yaztcbiB9O1xuIFxuIHN0cnVjdCBsb29wX2NtZCB7XG5AQCAtMTEzNCwxMyAmIzQzOzExMzUsMzUgQEAgc3RhdGljIGludCBsb29wX2NvbmZpZ3VyZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBibGtfbW9kZV90IG1vZGUsXG4gXHRyZXR1cm4gZXJyb3I7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbiYjNDM7c3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuJiM0MztcdHN0cnVjdCBsb29wX2RldmljZSAqbG8gPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGxvb3BfZGV2aWNlLCBsb19jbHJfd29yayk7XG4mIzQzO1x0c3RydWN0IGdlbmRpc2sgKmRpc2sgPSBsby1cdTAwM2Vsb19kaXNrO1xuIFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07XG4gXHRzdHJ1Y3QgZmlsZSAqZmlscDtcbiBcdGdmcF90IGdmcCA9IGxvLVx1MDAzZW9sZF9nZnBfbWFzaztcbiBcdGludCBlcnI7XG4gXG4mIzQzO1x0LyogU3RlcCAxOiBGbHVzaCBhbGwgb3V0c3RhbmRpbmcgSS9PLCB3aXRob3V0IG9wZW5fbXV0ZXggaGVsZC4gKi9cbiYjNDM7XHQvKlxuJiM0MztcdCAqIE5vdyB0aGF0IGxvb3BfcXVldWVfcnEoKSBzZWVzIGxvLVx1MDAzZWxvX3N0YXRlICE9IExvX2JvdW5kLFxuJiM0MztcdCAqIHdhaXQgZm9yIGFscmVhZHkgc3RhcnRlZCBsb29wX3F1ZXVlX3JxKCkgdG8gY29tcGxldGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3luY2hyb25pemVfcmN1KCk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBOb3cgdGhhdCBubyBtb3JlIHdvcmtzIGFyZSBzY2hlZHVsZWQgYnkgbG9vcF9xdWV1ZV9ycSgpLFxuJiM0MztcdCAqIHdhaXQgZm9yIGFscmVhZHkgc2NoZWR1bGVkIHdvcmtzIHRvIGNvbXBsZXRlLlxuJiM0MztcdCAqL1xuJiM0MztcdGRyYWluX3dvcmtxdWV1ZShsby1cdTAwM2V3b3JrcXVldWUpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTm93IHRoYXQgbm8gbW9yZSBBSU8gcmVxdWVzdHMgYXJlIHNjaGVkdWxlZCBieSBsb19yd19haW8oKSxcbiYjNDM7XHQgKiB3YWl0IGZvciBhbHJlYWR5IHN0YXJ0ZWQgQUlPIHRvIGNvbXBsZXRlLlxuJiM0MztcdCAqL1xuJiM0MztcdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShsby1cdTAwM2Vsb19xdWV1ZSwgYmxrX21xX2ZyZWV6ZV9xdWV1ZShsby1cdTAwM2Vsb19xdWV1ZSkpO1xuJiM0MztcbiYjNDM7XHQvKiBTdGVwIDI6IFBlcmZvcm0gcmVtYWluaW5nIGNsZWFudXAsIHdpdGggb3Blbl9tdXRleCBoZWxkLiAqL1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2ZGlzay1cdTAwM2VvcGVuX211dGV4KTtcbiYjNDM7XG4gXHRzcGluX2xvY2tfaXJxKFx1MDAyNmxvLVx1MDAzZWxvX2xvY2spO1xuIFx0ZmlscCA9IGxvLVx1MDAzZWxvX2JhY2tpbmdfZmlsZTtcbiBcdGxvLVx1MDAzZWxvX2JhY2tpbmdfZmlsZSA9IE5VTEw7XG5AQCAtMTE1MSwxMiAmIzQzOzExNzQsNyBAQCBzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4gXHRsby1cdTAwM2Vsb19zaXplbGltaXQgPSAwO1xuIFx0bWVtc2V0KGxvLVx1MDAzZWxvX2ZpbGVfbmFtZSwgMCwgTE9fTkFNRV9TSVpFKTtcbiBcbi1cdC8qXG4tXHQgKiBSZXNldCB0aGUgYmxvY2sgc2l6ZSB0byB0aGUgZGVmYXVsdC5cbi1cdCAqXG4tXHQgKiBObyBxdWV1ZSBmcmVlemluZyBuZWVkZWQgYmVjYXVzZSB0aGlzIGlzIGNhbGxlZCBmcm9tIHRoZSBmaW5hbFxuLVx0ICogLVx1MDAzZXJlbGVhc2UgY2FsbCBvbmx5LCBzbyB0aGVyZSBjYW4mIzM5O3QgYmUgYW55IG91dHN0YW5kaW5nIEkvTy5cbi1cdCAqL1xuJiM0MztcdC8qIFJlc2V0IHRoZSBibG9jayBzaXplIHRvIHRoZSBkZWZhdWx0LiAqL1xuIFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSk7XG4gXHRsaW0ubG9naWNhbF9ibG9ja19zaXplID0gU0VDVE9SX1NJWkU7XG4gXHRsaW0ucGh5c2ljYWxfYmxvY2tfc2l6ZSA9IFNFQ1RPUl9TSVpFO1xuQEAgLTExNjgsOCAmIzQzOzExODYsNiBAQCBzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4gXHQvKiBsZXQgdXNlci1zcGFjZSBrbm93IGFib3V0IHRoaXMgY2hhbmdlICovXG4gXHRrb2JqZWN0X3VldmVudChcdTAwMjZkaXNrX3RvX2Rldihsby1cdTAwM2Vsb19kaXNrKS1cdTAwM2Vrb2JqLCBLT0JKX0NIQU5HRSk7XG4gXHRtYXBwaW5nX3NldF9nZnBfbWFzayhmaWxwLVx1MDAzZWZfbWFwcGluZywgZ2ZwKTtcbi1cdC8qIFRoaXMgaXMgc2FmZTogb3BlbigpIGlzIHN0aWxsIGhvbGRpbmcgYSByZWZlcmVuY2UuICovXG4tXHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcbiBcbiBcdGRpc2tfZm9yY2VfbWVkaWFfY2hhbmdlKGxvLVx1MDAzZWxvX2Rpc2spO1xuIFxuQEAgLTExOTksMTIgJiM0MzsxMjE1LDI0IEBAIHN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbiBcdFdSSVRFX09OQ0UobG8tXHUwMDNlbG9fc3RhdGUsIExvX3VuYm91bmQpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxvLVx1MDAzZWxvX211dGV4KTtcbiBcbiYjNDM7XHQvKiBTdGVwIDM6IERyb3AgcmVmY291bnRzLCB3aXRob3V0IG9wZW5fbXV0ZXggaGVsZC4gKi9cbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2ZGlzay1cdTAwM2VvcGVuX211dGV4KTtcbiYjNDM7XG4mIzQzO1x0ZnB1dChmaWxwKTtcbiYjNDM7XG4gXHQvKlxuLVx0ICogTmVlZCBub3QgaG9sZCBsb19tdXRleCB0byBmcHV0IGJhY2tpbmcgZmlsZS4gQ2FsbGluZyBmcHV0IGhvbGRpbmdcbi1cdCAqIGxvX211dGV4IHRyaWdnZXJzIGEgY2lyY3VsYXIgbG9jayBkZXBlbmRlbmN5IHBvc3NpYmlsaXR5IHdhcm5pbmcgYXNcbi1cdCAqIGZwdXQgY2FuIHRha2Ugb3Blbl9tdXRleCB3aGljaCBpcyB1c3VhbGx5IHRha2VuIGJlZm9yZSBsb19tdXRleC5cbiYjNDM7XHQgKiBEcm9wIGFsbCByZWZlcmVuY2VzIHRoYXQgd291bGQgaGF2ZSBiZWVuIGRyb3BwZWQgYXMgc29vbiBhc1xuJiM0MztcdCAqIHJldHVybmluZyBmcm9tIGxvX3JlbGVhc2UoKSBhbmQgcmVsZWFzaW5nIGRpc2stXHUwMDNlb3Blbl9tdXRleC5cbiBcdCAqL1xuLVx0ZnB1dChmaWxwKTtcbiYjNDM7XHRtb2R1bGVfcHV0KGRpc2stXHUwMDNlZm9wcy1cdTAwM2Vvd25lcik7XG4mIzQzO1x0cHV0X2RldmljZShkaXNrX3RvX2RldihkaXNrKSk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhpcyBpcyBzYWZlOiBmbHVzaF93b3JrKCkgZnJvbSBsb29wX3JlbW92ZSgpIGZyb20gbG9vcF9leGl0KCkgd2FpdHNcbiYjNDM7XHQgKiB1bnRpbCB0aGlzIGZ1bmN0aW9uIHJldHVybnM7IGVmZmVjdGl2ZWx5IGRyb3BwaW5nIHRoZSBmaW5hbCBtb2R1bGVcbiYjNDM7XHQgKiByZWZlcmVuY2VzIHN5bmNocm9ub3VzbHkuXG4mIzQzO1x0ICovXG4mIzQzO1x0bW9kdWxlX3B1dChUSElTX01PRFVMRSk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbkBAIC0xNzY5LDggJiM0MzsxNzk3LDIwIEBAIHN0YXRpYyB2b2lkIGxvX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4gXHRuZWVkX2NsZWFyID0gKGxvLVx1MDAzZWxvX3N0YXRlID09IExvX3J1bmRvd24pO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxvLVx1MDAzZWxvX211dGV4KTtcbiBcbi1cdGlmIChuZWVkX2NsZWFyKVxuLVx0XHRfX2xvb3BfY2xyX2ZkKGxvKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEluIG9yZGVyIHRvIGZsdXNoIHBlbmRpbmcgSS9PIHJlcXVlc3RzIGJlZm9yZSBjbGVhcmluZyB0aGUgYmFja2luZ1xuJiM0MztcdCAqIGRldmljZSwgZGVmZXIgX19sb29wX2Nscl9mZCgpIHRvIFdRIGNvbnRleHQuIFRoZSBMb19ydW5kb3duIHN0YXRlXG4mIzQzO1x0ICogZ3VhcmFudGVlcyB0aGF0IGxvX29wZW4oKSB3aWxsIGZhaWwgd2l0aCAtRU5YSU8uXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKG5lZWRfY2xlYXIpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBHcmFiIGFsbCByZWZlcmVuY2VzIHRoYXQgd2lsbCBiZSBkcm9wcGVkIGFzIHNvb24gYXNcbiYjNDM7XHRcdCAqIHJldHVybmluZyBmcm9tIGxvX3JlbGVhc2UoKSBhbmQgcmVsZWFzaW5nIGRpc2stXHUwMDNlb3Blbl9tdXRleC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0Z2V0X2RldmljZShkaXNrX3RvX2RldihkaXNrKSk7XG4mIzQzO1x0XHRfX21vZHVsZV9nZXQoZGlzay1cdTAwM2Vmb3BzLVx1MDAzZW93bmVyKTtcbiYjNDM7XHRcdHF1ZXVlX3dvcmsoc3lzdGVtX2xvbmdfd3EsIFx1MDAyNmxvLVx1MDAzZWxvX2Nscl93b3JrKTtcbiYjNDM7XHR9XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGxvX2ZyZWVfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbkBAIC0yMDM0LDYgJiM0MzsyMDc0LDcgQEAgc3RhdGljIGludCBsb29wX2FkZChpbnQgaSlcbiBcdGxvID0ga3phbGxvY19vYmooKmxvKTtcbiBcdGlmICghbG8pXG4gXHRcdGdvdG8gb3V0O1xuJiM0MztcdElOSVRfV09SSyhcdTAwMjZsby1cdTAwM2Vsb19jbHJfd29yaywgX19sb29wX2Nscl9mZCk7XG4gXHRsby1cdTAwM2V3b3JrZXJfdHJlZSA9IFJCX1JPT1Q7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZsby1cdTAwM2VpZGxlX3dvcmtlcl9saXN0KTtcbiBcdHRpbWVyX3NldHVwKFx1MDAyNmxvLVx1MDAzZXRpbWVyLCBsb29wX2ZyZWVfaWRsZV93b3JrZXJzX3RpbWVyLCBUSU1FUl9ERUZFUlJBQkxFKTtcbkBAIC0yMTM4LDYgJiM0MzsyMTc5LDkgQEAgc3RhdGljIGludCBsb29wX2FkZChpbnQgaSlcbiBcbiBzdGF0aWMgdm9pZCBsb29wX3JlbW92ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuIHtcbiYjNDM7XHQvKiBXYWl0IGZvciBfX2xvb3BfY2xyX2ZkKCkgdG8gY29tcGxldGUuICovXG4mIzQzO1x0Zmx1c2hfd29yayhcdTAwMjZsby1cdTAwM2Vsb19jbHJfd29yayk7XG4mIzQzO1xuIFx0LyogTWFrZSB0aGlzIGxvb3AgZGV2aWNlIHVucmVhY2hhYmxlIGZyb20gcGF0aG5hbWUuICovXG4gXHRkZWxfZ2VuZGlzayhsby1cdTAwM2Vsb19kaXNrKTtcbiBcdGJsa19tcV9mcmVlX3RhZ19zZXQoXHUwMDI2bG8tXHUwMDNldGFnX3NldCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTc6NTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9MT09QJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bG9fcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtsb29wX2Nscl9mZCYjMzQ7LAogICAgJiMzNDtsb19pb2N0bCYjMzQ7LAogICAgJiMzNDtsb29wX2NvbnRyb2xfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbG9vcCBkZXZpY2UgdGVhcmRvd24gbG9naWMgaW4gZHJpdmVycy9ibG9jay9sb29wLmMgdG8gZGVmZXIgY2xlYXJpbmcgdGhlIGJhY2tpbmcgZmlsZSBhbmQgcmVsZWFzaW5nIHJlc291cmNlcyAoX19sb29wX2Nscl9mZCkgdG8gYSB3b3JrcXVldWUgY29udGV4dCB3aGVuIHRoZSBsb29wIGRldmljZSBpcyBjbG9zZWQuIFRoaXMgaW50cm9kdWNlcyBuZXcgY29uY3VycmVuY3kgaGFuZGxpbmcsIHJlZmVyZW5jZSBjb3VudGluZywgYW5kIHF1ZXVlIGRyYWluaW5nIHNlbWFudGljcyB3aGljaCBzaG91bGQgYmUgZnV6emVkIGZvciByYWNlIGNvbmRpdGlvbnMsIGRlYWRsb2NrcywgYW5kIFVBRnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxNzg3NTlmYjdkY2I5N2NhZGUxMTYxM2JiMDM2M2EzMGI1YWM5ODkzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMjggMTc6NTY6NDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCmluZGV4IDZmMTI5NzYwMzViMDkuLmUyNzAzZjBlZTc1ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCkBAIC03NSw2ICYjNDM7NzUsNyBAQCBzdHJ1Y3QgbG9vcF9kZXZpY2UgewogCXN0cnVjdCBnZW5kaXNrCQkqbG9fZGlzazsKIAlzdHJ1Y3QgbXV0ZXgJCWxvX211dGV4OwogCWJvb2wJCQlpZHJfdmlzaWJsZTsKJiM0MzsJc3RydWN0IHdvcmtfc3RydWN0CWxvX2Nscl93b3JrOwogfTsKIAogc3RydWN0IGxvb3BfY21kIHsKQEAgLTExMzQsMTMgJiM0MzsxMTM1LDM1IEBAIHN0YXRpYyBpbnQgbG9vcF9jb25maWd1cmUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgYmxrX21vZGVfdCBtb2RlLAogCXJldHVybiBlcnJvcjsKIH0KIAotc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKQomIzQzO3N0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewomIzQzOwlzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBsb29wX2RldmljZSwgbG9fY2xyX3dvcmspOwomIzQzOwlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGxvLSZndDtsb19kaXNrOwogCXN0cnVjdCBxdWV1ZV9saW1pdHMgbGltOwogCXN0cnVjdCBmaWxlICpmaWxwOwogCWdmcF90IGdmcCA9IGxvLSZndDtvbGRfZ2ZwX21hc2s7CiAJaW50IGVycjsKIAomIzQzOwkvKiBTdGVwIDE6IEZsdXNoIGFsbCBvdXRzdGFuZGluZyBJL08sIHdpdGhvdXQgb3Blbl9tdXRleCBoZWxkLiAqLwomIzQzOwkvKgomIzQzOwkgKiBOb3cgdGhhdCBsb29wX3F1ZXVlX3JxKCkgc2VlcyBsby0mZ3Q7bG9fc3RhdGUgIT0gTG9fYm91bmQsCiYjNDM7CSAqIHdhaXQgZm9yIGFscmVhZHkgc3RhcnRlZCBsb29wX3F1ZXVlX3JxKCkgdG8gY29tcGxldGUuCiYjNDM7CSAqLwomIzQzOwlzeW5jaHJvbml6ZV9yY3UoKTsKJiM0MzsJLyoKJiM0MzsJICogTm93IHRoYXQgbm8gbW9yZSB3b3JrcyBhcmUgc2NoZWR1bGVkIGJ5IGxvb3BfcXVldWVfcnEoKSwKJiM0MzsJICogd2FpdCBmb3IgYWxyZWFkeSBzY2hlZHVsZWQgd29ya3MgdG8gY29tcGxldGUuCiYjNDM7CSAqLwomIzQzOwlkcmFpbl93b3JrcXVldWUobG8tJmd0O3dvcmtxdWV1ZSk7CiYjNDM7CS8qCiYjNDM7CSAqIE5vdyB0aGF0IG5vIG1vcmUgQUlPIHJlcXVlc3RzIGFyZSBzY2hlZHVsZWQgYnkgbG9fcndfYWlvKCksCiYjNDM7CSAqIHdhaXQgZm9yIGFscmVhZHkgc3RhcnRlZCBBSU8gdG8gY29tcGxldGUuCiYjNDM7CSAqLwomIzQzOwlibGtfbXFfdW5mcmVlemVfcXVldWUobG8tJmd0O2xvX3F1ZXVlLCBibGtfbXFfZnJlZXplX3F1ZXVlKGxvLSZndDtsb19xdWV1ZSkpOwomIzQzOwomIzQzOwkvKiBTdGVwIDI6IFBlcmZvcm0gcmVtYWluaW5nIGNsZWFudXAsIHdpdGggb3Blbl9tdXRleCBoZWxkLiAqLwomIzQzOwltdXRleF9sb2NrKCZhbXA7ZGlzay0mZ3Q7b3Blbl9tdXRleCk7CiYjNDM7CiAJc3Bpbl9sb2NrX2lycSgmYW1wO2xvLSZndDtsb19sb2NrKTsKIAlmaWxwID0gbG8tJmd0O2xvX2JhY2tpbmdfZmlsZTsKIAlsby0mZ3Q7bG9fYmFja2luZ19maWxlID0gTlVMTDsKQEAgLTExNTEsMTIgJiM0MzsxMTc0LDcgQEAgc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKQogCWxvLSZndDtsb19zaXplbGltaXQgPSAwOwogCW1lbXNldChsby0mZ3Q7bG9fZmlsZV9uYW1lLCAwLCBMT19OQU1FX1NJWkUpOwogCi0JLyoKLQkgKiBSZXNldCB0aGUgYmxvY2sgc2l6ZSB0byB0aGUgZGVmYXVsdC4KLQkgKgotCSAqIE5vIHF1ZXVlIGZyZWV6aW5nIG5lZWRlZCBiZWNhdXNlIHRoaXMgaXMgY2FsbGVkIGZyb20gdGhlIGZpbmFsCi0JICogLSZndDtyZWxlYXNlIGNhbGwgb25seSwgc28gdGhlcmUgY2FuJiMzOTt0IGJlIGFueSBvdXRzdGFuZGluZyBJL08uCi0JICovCiYjNDM7CS8qIFJlc2V0IHRoZSBibG9jayBzaXplIHRvIHRoZSBkZWZhdWx0LiAqLwogCWxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tJmd0O2xvX3F1ZXVlKTsKIAlsaW0ubG9naWNhbF9ibG9ja19zaXplID0gU0VDVE9SX1NJWkU7CiAJbGltLnBoeXNpY2FsX2Jsb2NrX3NpemUgPSBTRUNUT1JfU0laRTsKQEAgLTExNjgsOCAmIzQzOzExODYsNiBAQCBzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pCiAJLyogbGV0IHVzZXItc3BhY2Uga25vdyBhYm91dCB0aGlzIGNoYW5nZSAqLwogCWtvYmplY3RfdWV2ZW50KCZhbXA7ZGlza190b19kZXYobG8tJmd0O2xvX2Rpc2spLSZndDtrb2JqLCBLT0JKX0NIQU5HRSk7CiAJbWFwcGluZ19zZXRfZ2ZwX21hc2soZmlscC0mZ3Q7Zl9tYXBwaW5nLCBnZnApOwotCS8qIFRoaXMgaXMgc2FmZTogb3BlbigpIGlzIHN0aWxsIGhvbGRpbmcgYSByZWZlcmVuY2UuICovCi0JbW9kdWxlX3B1dChUSElTX01PRFVMRSk7CiAKIAlkaXNrX2ZvcmNlX21lZGlhX2NoYW5nZShsby0mZ3Q7bG9fZGlzayk7CiAKQEAgLTExOTksMTIgJiM0MzsxMjE1LDI0IEBAIHN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbykKIAlXUklURV9PTkNFKGxvLSZndDtsb19zdGF0ZSwgTG9fdW5ib3VuZCk7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7bG8tJmd0O2xvX211dGV4KTsKIAomIzQzOwkvKiBTdGVwIDM6IERyb3AgcmVmY291bnRzLCB3aXRob3V0IG9wZW5fbXV0ZXggaGVsZC4gKi8KJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7ZGlzay0mZ3Q7b3Blbl9tdXRleCk7CiYjNDM7CiYjNDM7CWZwdXQoZmlscCk7CiYjNDM7CiAJLyoKLQkgKiBOZWVkIG5vdCBob2xkIGxvX211dGV4IHRvIGZwdXQgYmFja2luZyBmaWxlLiBDYWxsaW5nIGZwdXQgaG9sZGluZwotCSAqIGxvX211dGV4IHRyaWdnZXJzIGEgY2lyY3VsYXIgbG9jayBkZXBlbmRlbmN5IHBvc3NpYmlsaXR5IHdhcm5pbmcgYXMKLQkgKiBmcHV0IGNhbiB0YWtlIG9wZW5fbXV0ZXggd2hpY2ggaXMgdXN1YWxseSB0YWtlbiBiZWZvcmUgbG9fbXV0ZXguCiYjNDM7CSAqIERyb3AgYWxsIHJlZmVyZW5jZXMgdGhhdCB3b3VsZCBoYXZlIGJlZW4gZHJvcHBlZCBhcyBzb29uIGFzCiYjNDM7CSAqIHJldHVybmluZyBmcm9tIGxvX3JlbGVhc2UoKSBhbmQgcmVsZWFzaW5nIGRpc2stJmd0O29wZW5fbXV0ZXguCiAJICovCi0JZnB1dChmaWxwKTsKJiM0MzsJbW9kdWxlX3B1dChkaXNrLSZndDtmb3BzLSZndDtvd25lcik7CiYjNDM7CXB1dF9kZXZpY2UoZGlza190b19kZXYoZGlzaykpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUaGlzIGlzIHNhZmU6IGZsdXNoX3dvcmsoKSBmcm9tIGxvb3BfcmVtb3ZlKCkgZnJvbSBsb29wX2V4aXQoKSB3YWl0cwomIzQzOwkgKiB1bnRpbCB0aGlzIGZ1bmN0aW9uIHJldHVybnM7IGVmZmVjdGl2ZWx5IGRyb3BwaW5nIHRoZSBmaW5hbCBtb2R1bGUKJiM0MzsJICogcmVmZXJlbmNlcyBzeW5jaHJvbm91c2x5LgomIzQzOwkgKi8KJiM0MzsJbW9kdWxlX3B1dChUSElTX01PRFVMRSk7CiB9CiAKIHN0YXRpYyBpbnQgbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbykKQEAgLTE3NjksOCAmIzQzOzE3OTcsMjAgQEAgc3RhdGljIHZvaWQgbG9fcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKIAluZWVkX2NsZWFyID0gKGxvLSZndDtsb19zdGF0ZSA9PSBMb19ydW5kb3duKTsKIAltdXRleF91bmxvY2soJmFtcDtsby0mZ3Q7bG9fbXV0ZXgpOwogCi0JaWYgKG5lZWRfY2xlYXIpCi0JCV9fbG9vcF9jbHJfZmQobG8pOwomIzQzOwkvKgomIzQzOwkgKiBJbiBvcmRlciB0byBmbHVzaCBwZW5kaW5nIEkvTyByZXF1ZXN0cyBiZWZvcmUgY2xlYXJpbmcgdGhlIGJhY2tpbmcKJiM0MzsJICogZGV2aWNlLCBkZWZlciBfX2xvb3BfY2xyX2ZkKCkgdG8gV1EgY29udGV4dC4gVGhlIExvX3J1bmRvd24gc3RhdGUKJiM0MzsJICogZ3VhcmFudGVlcyB0aGF0IGxvX29wZW4oKSB3aWxsIGZhaWwgd2l0aCAtRU5YSU8uCiYjNDM7CSAqLwomIzQzOwlpZiAobmVlZF9jbGVhcikgewomIzQzOwkJLyoKJiM0MzsJCSAqIEdyYWIgYWxsIHJlZmVyZW5jZXMgdGhhdCB3aWxsIGJlIGRyb3BwZWQgYXMgc29vbiBhcwomIzQzOwkJICogcmV0dXJuaW5nIGZyb20gbG9fcmVsZWFzZSgpIGFuZCByZWxlYXNpbmcgZGlzay0mZ3Q7b3Blbl9tdXRleC4KJiM0MzsJCSAqLwomIzQzOwkJZ2V0X2RldmljZShkaXNrX3RvX2RldihkaXNrKSk7CiYjNDM7CQlfX21vZHVsZV9nZXQoZGlzay0mZ3Q7Zm9wcy0mZ3Q7b3duZXIpOwomIzQzOwkJcXVldWVfd29yayhzeXN0ZW1fbG9uZ193cSwgJmFtcDtsby0mZ3Q7bG9fY2xyX3dvcmspOwomIzQzOwl9CiB9CiAKIHN0YXRpYyB2b2lkIGxvX2ZyZWVfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKQEAgLTIwMzQsNiAmIzQzOzIwNzQsNyBAQCBzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKQogCWxvID0ga3phbGxvY19vYmooKmxvKTsKIAlpZiAoIWxvKQogCQlnb3RvIG91dDsKJiM0MzsJSU5JVF9XT1JLKCZhbXA7bG8tJmd0O2xvX2Nscl93b3JrLCBfX2xvb3BfY2xyX2ZkKTsKIAlsby0mZ3Q7d29ya2VyX3RyZWUgPSBSQl9ST09UOwogCUlOSVRfTElTVF9IRUFEKCZhbXA7bG8tJmd0O2lkbGVfd29ya2VyX2xpc3QpOwogCXRpbWVyX3NldHVwKCZhbXA7bG8tJmd0O3RpbWVyLCBsb29wX2ZyZWVfaWRsZV93b3JrZXJzX3RpbWVyLCBUSU1FUl9ERUZFUlJBQkxFKTsKQEAgLTIxMzgsNiAmIzQzOzIxNzksOSBAQCBzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKQogCiBzdGF0aWMgdm9pZCBsb29wX3JlbW92ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKQogewomIzQzOwkvKiBXYWl0IGZvciBfX2xvb3BfY2xyX2ZkKCkgdG8gY29tcGxldGUuICovCiYjNDM7CWZsdXNoX3dvcmsoJmFtcDtsby0mZ3Q7bG9fY2xyX3dvcmspOwomIzQzOwogCS8qIE1ha2UgdGhpcyBsb29wIGRldmljZSB1bnJlYWNoYWJsZSBmcm9tIHBhdGhuYW1lLiAqLwogCWRlbF9nZW5kaXNrKGxvLSZndDtsb19kaXNrKTsKIAlibGtfbXFfZnJlZV90YWdfc2V0KCZhbXA7bG8tJmd0O3RhZ19zZXQpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjg3CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgYXMgaWYgSSYjMzk7bSByZWZsZWN0aW5nIG9uIHRoZW0gbXlzZWxmLCBhcyBhbiBleHBlcnQgaW4gbXkgZmllbGQ6CgoqKkFuYWx5emluZyBhIEtlcm5lbCBMb29wIERldmljZSBQYXRjaCoqCgpBbHJpZ2h0LCBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0JiMzOTtzIHRvdWNoaW5nIGBkcml2ZXJzL2Jsb2NrL2xvb3AuY2AuIEltbWVkaWF0ZWx5LCBteSBtZW50YWwgZ2VhcnMgc3RhcnQgdHVybmluZy4gRmlyc3QgdGhpbmdzIGZpcnN0OiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBwYXRjaCBpdHNlbGYuIEkgd2FudCB0byB1bmRlcnN0YW5kICpwcmVjaXNlbHkqIHdoYXQgY2hhbmdlcyBhcmUgYmVpbmcgbWFkZSB0byB0aGF0IGxvb3AgZGV2aWNlIGNvZGUuIFdoYXQmIzM5O3MgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBiZWluZyBhbHRlcmVkPyBBcmUgdGhlcmUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zPyBTZWN1cml0eSBjb25zaWRlcmF0aW9ucz8KCkJleW9uZCB0aGUgY29kZSBpdHNlbGYsIEkgaGF2ZSB0byBjb25zaWRlciB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnksIG9yIGNoZWNrIGRpcmVjdGx5LCB3aGF0IEtjb25maWcgb3B0aW9ucyBhcmUgcmVsYXRlZCB0byB0aGUgbG9vcCBkZXZpY2UuIFdoYXQgY2FuIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQ/IEhvdyBkb2VzIHRoaXMgcGF0Y2ggaW50ZXJhY3Qgd2l0aCB0aG9zZSBvcHRpb25zPyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIHNvbWUgcXVpY2sgZ3JlcHMgdGhyb3VnaCB0aGUgS2NvbmZpZyBmaWxlcywgb3IgZ28gc3RyYWlnaHQgdG8gYnJvd3NpbmcgdGhlIHJlbGV2YW50IGZpbGVzLCB0byBxdWlja2x5IGdldCB0aGUgYmlnZ2VyIHBpY3R1cmUsIGFuZCBzZWUgaG93IHRoaXMgY2hhbmdlIHdpbGwgZWZmZWN0IGV2ZXJ5dGhpbmcuIEl0JiMzOTtzIGFsbCBhYm91dCBjb250ZXh0LCBhbmQgdW5kZXJzdGFuZGluZyB0aGUgY29tcGlsZS10aW1lIGxhbmRzY2FwZSBmb3IgdGhlIGxvb3AgZGV2aWNlIGlzIGNyaXRpY2FsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JMS19ERVZfTE9PUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnPTE0MD1jb25maWcgQkxLX0RFVl9DT1dfQ09NTU9OXG4tLVxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE0My1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoxNDQ6Y29uZmlnIEJMS19ERVZfTE9PUFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE0NS1cdHRyaXN0YXRlIFwmIzM0O0xvb3BiYWNrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE3OC1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoxNzk6Y29uZmlnIEJMS19ERVZfTE9PUF9NSU5fQ09VTlRcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xODAtXHRpbnQgXCYjMzQ7TnVtYmVyIG9mIGxvb3AgZGV2aWNlcyB0byBwcmUtY3JlYXRlIGF0IGluaXQgdGltZVwmIzM0O1xuZHJpdmVycy9ibG9jay9LY29uZmlnOjE4MTpcdGRlcGVuZHMgb24gQkxLX0RFVl9MT09QXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTgyLVx0ZGVmYXVsdCA4XG4tLVxuZHJpdmVycy9ibG9jay9NYWtlZmlsZT0yMT1vYmotJChDT05GSUdfQkxLX0RFVl9SQU0pXHQmIzQzOz0gYnJkLm9cbmRyaXZlcnMvYmxvY2svTWFrZWZpbGU6MjI6b2JqLSQoQ09ORklHX0JMS19ERVZfTE9PUClcdCYjNDM7PSBsb29wLm9cbmRyaXZlcnMvYmxvY2svTWFrZWZpbGUtMjMtb2JqLSQoQ09ORklHX1NVTlZEQylcdFx0JiM0Mzs9IHN1bnZkYy5vXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MTgyOD1zdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGxvX2ZvcHMgPSB7XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTg0Ny0gKiBjaGFuZ2VkIHRoZSBkZWZhdWx0IHZhbHVlIGZyb20gMCBmb3IgbWF4X2xvb3A9MCByZWFzb25zKSwganVzdFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTg0ODogKiBjcmVhdGUgQ09ORklHX0JMS19ERVZfTE9PUF9NSU5fQ09VTlQgbG9vcCBkZXZpY2VzIGF0IG1vZHVsZVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTg0OS0gKiBpbml0IHRpbWUuIExvb3AgZGV2aWNlcyBjYW4gYmUgcmVxdWVzdGVkIG9uLWRlbWFuZCB3aXRoIHRoZVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4NTItICovXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxODUzOnN0YXRpYyBpbnQgbWF4X2xvb3AgPSBDT05GSUdfQkxLX0RFVl9MT09QX01JTl9DT1VOVDtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4NTQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTc6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ1NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkxvb3AgRGV2aWNlIENsZWFuLXVwIGFuZCBJT0NUTHM6IEEgQ2xvc2VyIExvb2sqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgZ3V0cyBvZiB0aGUgbG9vcCBkZXZpY2UgZHJpdmVyLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgYWxsIHdvcmtzLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSByZWxlYXNlIHByb2Nlc3MuIEkmIzM5O20gdGhpbmtpbmcsIGxldCYjMzk7cyBzdGFydCB3aXRoIGBkcml2ZXJzL2Jsb2NrL2xvb3AuY2AgYW5kIHplcm8gaW4gb24gdGhlIGBsb19yZWxlYXNlYCwgYGxvb3BfY2xyX2ZkYCwgYW5kIGBfX2xvb3BfY2xyX2ZkYCBmdW5jdGlvbnMuIFRob3NlIHNlZW0gbGlrZSB0aGUga2V5IHBsYXllcnMgd2hlbiBhIGxvb3AgZGV2aWNlIGlzIGJlaW5nIHRvcm4gZG93biwgcmlnaHQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzZXF1ZW5jaW5nIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHRoZXJlLiBBbmQsIG9mIGNvdXJzZSwgdGhlIGlvY3RsIGVudHJ5cG9pbnRzIGFyZSBhbHdheXMgaW50ZXJlc3Rpbmcg4oCTIGdvdHRhIHNlZSBob3cgd2UgZXhwb3NlIGZ1bmN0aW9uYWxpdHkgYW5kIGhhbmRsZSB1c2VyLXNwYWNlIGludGVyYWN0aW9ucy4gTGV0IG1lIHNjYW4gdGhvc2UgZnVuY3Rpb25zIGFuZCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG9idmlvdXMgZmxhd3Mgb3IgYXJlYXMgcmlwZSBmb3IgaW1wcm92ZW1lbnQuIFRoaXMgYXJlYSBoYXMgYmVlbiBzdGFibGUgZm9yIGEgd2hpbGUsIGJ1dCBpdCYjMzk7cyBhbHdheXMgZ29vZCB0byByZXZpc2l0IHRoZSBjb3JlIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9sb29wLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3ODA6XHRzdGF0aWMgdm9pZCBsb19yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuMTc4MTpcdHtcbjE3ODI6XHRcdHN0cnVjdCBsb29wX2RldmljZSAqbG8gPSBkaXNrLVx1MDAzZXByaXZhdGVfZGF0YTtcbjE3ODM6XHRcdGJvb2wgbmVlZF9jbGVhciA9IGZhbHNlO1xuMTc4NDpcdFxuMTc4NTpcdFx0aWYgKGRpc2tfb3BlbmVycyhkaXNrKSBcdTAwM2UgMClcbjE3ODY6XHRcdFx0cmV0dXJuO1xuMTc4NzpcdFx0LypcbjE3ODg6XHRcdCAqIENsZWFyIHRoZSBiYWNraW5nIGRldmljZSBpbmZvcm1hdGlvbiBpZiB0aGlzIGlzIHRoZSBsYXN0IGNsb3NlIG9mXG4xNzg5Olx0XHQgKiBhIGRldmljZSB0aGF0JiMzOTtzIGJlZW4gbWFya2VkIGZvciBhdXRvIGNsZWFyLCBvciBvbiB3aGljaCBMT09QX0NMUl9GRFxuMTc5MDpcdFx0ICogaGFzIGJlZW4gY2FsbGVkLlxuMTc5MTpcdFx0ICovXG4xNzkyOlx0XG4xNzkzOlx0XHRtdXRleF9sb2NrKFx1MDAyNmxvLVx1MDAzZWxvX211dGV4KTtcbjE3OTQ6XHRcdGlmIChsby1cdTAwM2Vsb19zdGF0ZSA9PSBMb19ib3VuZCBcdTAwMjZcdTAwMjYgKGxvLVx1MDAzZWxvX2ZsYWdzIFx1MDAyNiBMT19GTEFHU19BVVRPQ0xFQVIpKVxuMTc5NTpcdFx0XHRXUklURV9PTkNFKGxvLVx1MDAzZWxvX3N0YXRlLCBMb19ydW5kb3duKTtcbjE3OTY6XHRcbjE3OTc6XHRcdG5lZWRfY2xlYXIgPSAobG8tXHUwMDNlbG9fc3RhdGUgPT0gTG9fcnVuZG93bik7XG4xNzk4Olx0XHRtdXRleF91bmxvY2soXHUwMDI2bG8tXHUwMDNlbG9fbXV0ZXgpO1xuMTc5OTpcdFxuMTgwMDpcdFx0LypcbjE4MDE6XHRcdCAqIEluIG9yZGVyIHRvIGZsdXNoIHBlbmRpbmcgSS9PIHJlcXVlc3RzIGJlZm9yZSBjbGVhcmluZyB0aGUgYmFja2luZ1xuMTgwMjpcdFx0ICogZGV2aWNlLCBkZWZlciBfX2xvb3BfY2xyX2ZkKCkgdG8gV1EgY29udGV4dC4gVGhlIExvX3J1bmRvd24gc3RhdGVcbjE4MDM6XHRcdCAqIGd1YXJhbnRlZXMgdGhhdCBsb19vcGVuKCkgd2lsbCBmYWlsIHdpdGggLUVOWElPLlxuMTgwNDpcdFx0ICovXG4xODA1Olx0XHRpZiAobmVlZF9jbGVhcikge1xuMTgwNjpcdFx0XHQvKlxuMTgwNzpcdFx0XHQgKiBHcmFiIGFsbCByZWZlcmVuY2VzIHRoYXQgd2lsbCBiZSBkcm9wcGVkIGFzIHNvb24gYXNcbjE4MDg6XHRcdFx0ICogcmV0dXJuaW5nIGZyb20gbG9fcmVsZWFzZSgpIGFuZCByZWxlYXNpbmcgZGlzay1cdTAwM2VvcGVuX211dGV4LlxuMTgwOTpcdFx0XHQgKi9cbjE4MTA6XHRcdFx0Z2V0X2RldmljZShkaXNrX3RvX2RldihkaXNrKSk7XG4xODExOlx0XHRcdF9fbW9kdWxlX2dldChkaXNrLVx1MDAzZWZvcHMtXHUwMDNlb3duZXIpO1xuMTgxMjpcdFx0XHRxdWV1ZV93b3JrKHN5c3RlbV9sb25nX3dxLCBcdTAwMjZsby1cdTAwM2Vsb19jbHJfd29yayk7XG4xODEzOlx0XHR9XG4xODE0Olx0fVxuMTgxNTpcdFxuMTgxNjpcdHN0YXRpYyB2b2lkIGxvX2ZyZWVfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbjE4MTc6XHR7XG4xODE4Olx0XHRzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvID0gZGlzay1cdTAwM2Vwcml2YXRlX2RhdGE7XG4xODE5Olx0XG4xODIwOlx0XHRpZiAobG8tXHUwMDNld29ya3F1ZXVlKVxuMTgyMTpcdFx0XHRkZXN0cm95X3dvcmtxdWV1ZShsby1cdTAwM2V3b3JrcXVldWUpO1xuMTgyMjpcdFx0bG9vcF9mcmVlX2lkbGVfd29ya2VycyhsbywgdHJ1ZSk7XG4xODIzOlx0XHR0aW1lcl9zaHV0ZG93bl9zeW5jKFx1MDAyNmxvLVx1MDAzZXRpbWVyKTtcbjE4MjQ6XHRcdG11dGV4X2Rlc3Ryb3koXHUwMDI2bG8tXHUwMDNlbG9fbXV0ZXgpO1xuMTgyNTpcdFx0a2ZyZWUobG8pO1xuMTgyNjpcdH1cbjE4Mjc6XHRcbjE4Mjg6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGxvX2ZvcHMgPSB7XG4xODI5Olx0XHQub3duZXIgPVx0VEhJU19NT0RVTEUsXG4xODMwOlx0XHQub3BlbiA9ICAgICAgICAgbG9fb3BlbixcbjE4MzE6XHRcdC5yZWxlYXNlID1cdGxvX3JlbGVhc2UsXG4xODMyOlx0XHQuaW9jdGwgPVx0bG9faW9jdGwsXG4xODMzOlx0I2lmZGVmIENPTkZJR19DT01QQVRcbjE4MzQ6XHRcdC5jb21wYXRfaW9jdGwgPVx0bG9fY29tcGF0X2lvY3RsLFxuMTgzNTpcdCNlbmRpZlxuMTgzNjpcdFx0LmZyZWVfZGlzayA9XHRsb19mcmVlX2Rpc2ssXG4xODM3Olx0fTtcbjE4Mzg6XHRcbjE4Mzk6XHQvKlxuMTg0MDpcdCAqIEFuZCBub3cgdGhlIG1vZHVsZXMgY29kZSBhbmQga2VybmVsIGludGVyZmFjZS5cbjE4NDE6XHQgKi9cbjE4NDI6XHRcbjE4NDM6XHQvKlxuMTg0NDpcdCAqIElmIG1heF9sb29wIGlzIHNwZWNpZmllZCwgY3JlYXRlIHRoYXQgbWFueSBkZXZpY2VzIHVwZnJvbnQuXG4xODQ1Olx0ICogVGhpcyBhbHNvIGJlY29tZXMgYSBoYXJkIGxpbWl0LiBJZiBtYXhfbG9vcCBpcyBub3Qgc3BlY2lmaWVkLFxuMTg0NjpcdCAqIHRoZSBkZWZhdWx0IGlzbiYjMzk7dCBhIGhhcmQgbGltaXQgKGFzIGJlZm9yZSBjb21taXQgODVjNTAxOTc3MTZjXG4xODQ3Olx0ICogY2hhbmdlZCB0aGUgZGVmYXVsdCB2YWx1ZSBmcm9tIDAgZm9yIG1heF9sb29wPTAgcmVhc29ucyksIGp1c3RcbjE4NDg6XHQgKiBjcmVhdGUgQ09ORklHX0JMS19ERVZfTE9PUF9NSU5fQ09VTlQgbG9vcCBkZXZpY2VzIGF0IG1vZHVsZVxuMTg0OTpcdCAqIGluaXQgdGltZS4gTG9vcCBkZXZpY2VzIGNhbiBiZSByZXF1ZXN0ZWQgb24tZGVtYW5kIHdpdGggdGhlXG4xODUwOlx0ICogL2Rldi9sb29wLWNvbnRyb2wgaW50ZXJmYWNlLCBvciBiZSBpbnN0YW50aWF0ZWQgYnkgYWNjZXNzaW5nXG4xODUxOlx0ICogYSAmIzM5O2RlYWQmIzM5OyBkZXZpY2Ugbm9kZS5cbjE4NTI6XHQgKi9cbjE4NTM6XHRzdGF0aWMgaW50IG1heF9sb29wID0gQ09ORklHX0JMS19ERVZfTE9PUF9NSU5fQ09VTlQ7XG4xODU0Olx0XG4xODU1Olx0I2lmZGVmIENPTkZJR19CTE9DS19MRUdBQ1lfQVVUT0xPQURcbjE4NTY6XHRzdGF0aWMgYm9vbCBtYXhfbG9vcF9zcGVjaWZpZWQ7XG4xODU3Olx0XG4xODU4Olx0c3RhdGljIGludCBtYXhfbG9vcF9wYXJhbV9zZXRfaW50KGNvbnN0IGNoYXIgKnZhbCxcbjE4NTk6XHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTc6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk4MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbnZlc3RpZ2F0aW5nIGBsb29wX2Nscl9mZGAgYW5kIElPQ1RMIEhhbmRsaW5nKioKCk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYGxvb3BfY2xyX2ZkYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpcyBob3cgZXhhY3RseSB0aGUgaW9jdGwgY2FsbHMgYXJlIGltcGxlbWVudGVkIHRvIGNsZWFyIG9yIHJlbGVhc2UgdGhlIGxvb3AgZGV2aWNlLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBsb3ctbGV2ZWwgaW50ZXJhY3Rpb25zIGhlcmU6IGhvdyB0aGUgZmlsZSBkZXNjcmlwdG9yIGlzIHVzZWQgd2l0aGluIHRoZSBrZXJuZWwgdG8gaWRlbnRpZnkgYW5kIG1hbmlwdWxhdGUgdGhlIGxvb3AgZGV2aWNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBhbmQgdGhlIHNwZWNpZmljIGlvY3RsIGNvZGVzIHVzZWQuIEnigJltIGd1ZXNzaW5nIGl0IGludm9sdmVzIHNvbWUgcG9pbnRlciBtYW5pcHVsYXRpb24gb3IgcGVyaGFwcyBhIHNpZ25hbCBiZWluZyBzZW50IHRvIHRoZSBiYWNraW5nIGJsb2NrIGRldmljZSB0aHJvdWdoIHRoZSBrZXJuZWwuIEkgc2hvdWxkIGxvb2sgaW50byB0aGUgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBpb2N0bGAgaGFuZGxlciBpbiB0aGUgbG9vcCBkcml2ZXIsIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBoYXBwZW5pbmcgaW50ZXJuYWxseS4gSSB3YW50IHRvIHNlZSBpZiB0aGUgZmQgaXMgc2ltcGx5IGNsb3NlZCwgb3IgaWYgdGhlcmUmIzM5O3MgbW9yZSB0byB0aGUgcmVsZWFzZSBwcm9jZXNzLiBUaGVyZSBjb3VsZCBiZSBzb21lIGVkZ2UgY2FzZXMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIEkmIzM5O2xsIGZvY3VzIG9uIGhvdyB0aGUgaW9jdGwgY2FsbCBhZmZlY3RzIHRoZSBjb25uZWN0aW9uIGFuZCB3aGF0IGRhdGEgaXMgYmVpbmcgc2hhcmVkIHRvIGNsb3NlIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBiYWNraW5nIGRldmljZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbG9vcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjMwOlx0XHQvKlxuMTIzMTpcdFx0ICogVGhpcyBpcyBzYWZlOiBmbHVzaF93b3JrKCkgZnJvbSBsb29wX3JlbW92ZSgpIGZyb20gbG9vcF9leGl0KCkgd2FpdHNcbjEyMzI6XHRcdCAqIHVudGlsIHRoaXMgZnVuY3Rpb24gcmV0dXJuczsgZWZmZWN0aXZlbHkgZHJvcHBpbmcgdGhlIGZpbmFsIG1vZHVsZVxuMTIzMzpcdFx0ICogcmVmZXJlbmNlcyBzeW5jaHJvbm91c2x5LlxuMTIzNDpcdFx0ICovXG4xMjM1Olx0XHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcbjEyMzY6XHR9XG4xMjM3Olx0XG4xMjM4Olx0c3RhdGljIGludCBsb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuMTIzOTpcdHtcbjEyNDA6XHRcdGludCBlcnI7XG4xMjQxOlx0XG4xMjQyOlx0XHQvKlxuMTI0MzpcdFx0ICogU2luY2UgbG9faW9jdGwoKSBpcyBjYWxsZWQgd2l0aG91dCBsb2NrcyBoZWxkLCBpdCBpcyBwb3NzaWJsZSB0aGF0XG4xMjQ0Olx0XHQgKiBsb29wX2NvbmZpZ3VyZSgpL2xvb3BfY2hhbmdlX2ZkKCkgYW5kIGxvb3BfY2xyX2ZkKCkgcnVuIGluIHBhcmFsbGVsLlxuMTI0NTpcdFx0ICpcbjEyNDY6XHRcdCAqIFRoZXJlZm9yZSwgdXNlIGdsb2JhbCBsb2NrIHdoZW4gc2V0dGluZyBMb19ydW5kb3duIHN0YXRlIGluIG9yZGVyIHRvXG4xMjQ3Olx0XHQgKiBtYWtlIHN1cmUgdGhhdCBsb29wX3ZhbGlkYXRlX2ZpbGUoKSB3aWxsIGZhaWwgaWYgdGhlIFwmIzM0O3N0cnVjdCBmaWxlXCYjMzQ7XG4xMjQ4Olx0XHQgKiB3aGljaCBsb29wX2NvbmZpZ3VyZSgpL2xvb3BfY2hhbmdlX2ZkKCkgZm91bmQgdmlhIGZnZXQoKSB3YXMgdGhpc1xuMTI0OTpcdFx0ICogbG9vcCBkZXZpY2UuXG4xMjUwOlx0XHQgKi9cbjEyNTE6XHRcdGVyciA9IGxvb3BfZ2xvYmFsX2xvY2tfa2lsbGFibGUobG8sIHRydWUpO1xuMTI1MjpcdFx0aWYgKGVycilcbjEyNTM6XHRcdFx0cmV0dXJuIGVycjtcbjEyNTQ6XHRcdGlmIChsby1cdTAwM2Vsb19zdGF0ZSAhPSBMb19ib3VuZCkge1xuMTI1NTpcdFx0XHRsb29wX2dsb2JhbF91bmxvY2sobG8sIHRydWUpO1xuMTI1NjpcdFx0XHRyZXR1cm4gLUVOWElPO1xuMTI1NzpcdFx0fVxuMTI1ODpcdFx0LypcbjEyNTk6XHRcdCAqIE1hcmsgdGhlIGRldmljZSBmb3IgcmVtb3ZpbmcgdGhlIGJhY2tpbmcgZGV2aWNlIG9uIGxhc3QgY2xvc2UuXG4xMjYwOlx0XHQgKiBJZiB3ZSBhcmUgdGhlIG9ubHkgb3BlbmVyLCBhbHNvIHN3aXRjaCB0aGUgc3RhdGUgdG8gcm91bmRvd24gaGVyZSB0b1xuMTI2MTpcdFx0ICogcHJldmVudCBuZXcgb3BlbmVycyBmcm9tIGNvbWluZyBpbi5cbjEyNjI6XHRcdCAqL1xuMTI2MzpcdFxuMTI2NDpcdFx0bG8tXHUwMDNlbG9fZmxhZ3MgfD0gTE9fRkxBR1NfQVVUT0NMRUFSO1xuMTI2NTpcdFx0aWYgKGRpc2tfb3BlbmVycyhsby1cdTAwM2Vsb19kaXNrKSA9PSAxKVxuMTI2NjpcdFx0XHRXUklURV9PTkNFKGxvLVx1MDAzZWxvX3N0YXRlLCBMb19ydW5kb3duKTtcbjEyNjc6XHRcdGxvb3BfZ2xvYmFsX3VubG9jayhsbywgdHJ1ZSk7XG4xMjY4Olx0XG4xMjY5Olx0XHRyZXR1cm4gMDtcbjEyNzA6XHR9XG4xMjcxOlx0XG4xMjcyOlx0c3RhdGljIGludFxuMTI3MzpcdGxvb3Bfc2V0X3N0YXR1cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBjb25zdCBzdHJ1Y3QgbG9vcF9pbmZvNjQgKmluZm8pXG4xMjc0Olx0e1xuMTI3NTpcdFx0aW50IGVycjtcbjEyNzY6XHRcdGJvb2wgcGFydHNjYW4gPSBmYWxzZTtcbjEyNzc6XHRcdGJvb2wgc2l6ZV9jaGFuZ2VkID0gZmFsc2U7XG4xMjc4Olx0XHR1bnNpZ25lZCBpbnQgbWVtZmxhZ3M7XG4xMjc5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTc6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzAxMwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byB0aGUgYGxvb3AuY2AgaW9jdGwgSGFuZGxpbmcqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCBgbG9vcC5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIHRoZSBgaW9jdGxgIGNhbGxzIGluIHRoaXMgZHJpdmVyLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIHN0YXJ0IGJ5IGZvY3VzaW5nIG9uIGBsb19pb2N0bGAuIFRoYXQgZnVuY3Rpb24gaXMgdGhlIGtleSB0byBtYW5hZ2luZyBkZXZpY2Utc3BlY2lmaWMgcmVxdWVzdHMsIGFuZCB1bmRlcnN0YW5kaW5nIGl0cyBsb2dpYyBpcyBjcnVjaWFsIGZvciByZWFsbHkgZ3Jhc3BpbmcgaG93IHRoZSBsb29wIGRldmljZSBiZWhhdmVzIGF0IGEgbG93IGxldmVsLiBMZXQmIzM5O3Mgc2VlIHdoYXQgaW50ZXJlc3RpbmcgdGhpbmdzIGFyZSBoYXBwZW5pbmcgaW5zaWRlIHRoZXJlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9sb29wLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2ODA6XHRcdG1lbXNldChcdTAwMjZpbmZvLCAwLCBzaXplb2YoaW5mbykpO1xuMTY4MTpcdFx0aW5mby5sb19udW1iZXIgPSBpbmZvNjQtXHUwMDNlbG9fbnVtYmVyO1xuMTY4MjpcdFx0aW5mby5sb19kZXZpY2UgPSBpbmZvNjQtXHUwMDNlbG9fZGV2aWNlO1xuMTY4MzpcdFx0aW5mby5sb19pbm9kZSA9IGluZm82NC1cdTAwM2Vsb19pbm9kZTtcbjE2ODQ6XHRcdGluZm8ubG9fcmRldmljZSA9IGluZm82NC1cdTAwM2Vsb19yZGV2aWNlO1xuMTY4NTpcdFx0aW5mby5sb19vZmZzZXQgPSBpbmZvNjQtXHUwMDNlbG9fb2Zmc2V0O1xuMTY4NjpcdFx0aW5mby5sb19mbGFncyA9IGluZm82NC1cdTAwM2Vsb19mbGFncztcbjE2ODc6XHRcdG1lbWNweShpbmZvLmxvX25hbWUsIGluZm82NC1cdTAwM2Vsb19maWxlX25hbWUsIExPX05BTUVfU0laRSk7XG4xNjg4Olx0XG4xNjg5Olx0XHQvKiBlcnJvciBpbiBjYXNlIHZhbHVlcyB3ZXJlIHRydW5jYXRlZCAqL1xuMTY5MDpcdFx0aWYgKGluZm8ubG9fZGV2aWNlICE9IGluZm82NC1cdTAwM2Vsb19kZXZpY2UgfHxcbjE2OTE6XHRcdCAgICBpbmZvLmxvX3JkZXZpY2UgIT0gaW5mbzY0LVx1MDAzZWxvX3JkZXZpY2UgfHxcbjE2OTI6XHRcdCAgICBpbmZvLmxvX2lub2RlICE9IGluZm82NC1cdTAwM2Vsb19pbm9kZSB8fFxuMTY5MzpcdFx0ICAgIGluZm8ubG9fb2Zmc2V0ICE9IGluZm82NC1cdTAwM2Vsb19vZmZzZXQpXG4xNjk0Olx0XHRcdHJldHVybiAtRU9WRVJGTE9XO1xuMTY5NTpcdFxuMTY5NjpcdFx0aWYgKGNvcHlfdG9fdXNlcihhcmcsIFx1MDAyNmluZm8sIHNpemVvZihpbmZvKSkpXG4xNjk3Olx0XHRcdHJldHVybiAtRUZBVUxUO1xuMTY5ODpcdFx0cmV0dXJuIDA7XG4xNjk5Olx0fVxuMTcwMDpcdFxuMTcwMTpcdHN0YXRpYyBpbnRcbjE3MDI6XHRsb29wX3NldF9zdGF0dXNfY29tcGF0KHN0cnVjdCBsb29wX2RldmljZSAqbG8sXG4xNzAzOlx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgY29tcGF0X2xvb3BfaW5mbyBfX3VzZXIgKmFyZylcbjE3MDQ6XHR7XG4xNzA1Olx0XHRzdHJ1Y3QgbG9vcF9pbmZvNjQgaW5mbzY0O1xuMTcwNjpcdFx0aW50IHJldDtcbjE3MDc6XHRcbjE3MDg6XHRcdHJldCA9IGxvb3BfaW5mbzY0X2Zyb21fY29tcGF0KGFyZywgXHUwMDI2aW5mbzY0KTtcbjE3MDk6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xNzEwOlx0XHRcdHJldHVybiByZXQ7XG4xNzExOlx0XHRyZXR1cm4gbG9vcF9zZXRfc3RhdHVzKGxvLCBcdTAwMjZpbmZvNjQpO1xuMTcxMjpcdH1cbjE3MTM6XHRcbjE3MTQ6XHRzdGF0aWMgaW50XG4xNzE1Olx0bG9vcF9nZXRfc3RhdHVzX2NvbXBhdChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLFxuMTcxNjpcdFx0XHQgICAgICAgc3RydWN0IGNvbXBhdF9sb29wX2luZm8gX191c2VyICphcmcpXG4xNzE3Olx0e1xuMTcxODpcdFx0c3RydWN0IGxvb3BfaW5mbzY0IGluZm82NDtcbjE3MTk6XHRcdGludCBlcnI7XG4xNzIwOlx0XG4xNzIxOlx0XHRpZiAoIWFyZylcbjE3MjI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNzIzOlx0XHRlcnIgPSBsb29wX2dldF9zdGF0dXMobG8sIFx1MDAyNmluZm82NCk7XG4xNzI0Olx0XHRpZiAoIWVycilcbjE3MjU6XHRcdFx0ZXJyID0gbG9vcF9pbmZvNjRfdG9fY29tcGF0KFx1MDAyNmluZm82NCwgYXJnKTtcbjE3MjY6XHRcdHJldHVybiBlcnI7XG4xNzI3Olx0fVxuMTcyODpcdFxuMTcyOTpcdHN0YXRpYyBpbnQgbG9fY29tcGF0X2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcbjE3MzA6XHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbjE3MzE6XHR7XG4xNzMyOlx0XHRzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvID0gYmRldi1cdTAwM2ViZF9kaXNrLVx1MDAzZXByaXZhdGVfZGF0YTtcbjE3MzM6XHRcdGludCBlcnI7XG4xNzM0Olx0XG4xNzM1Olx0XHRzd2l0Y2goY21kKSB7XG4xNzM2Olx0XHRjYXNlIExPT1BfU0VUX1NUQVRVUzpcbjE3Mzc6XHRcdFx0ZXJyID0gbG9vcF9zZXRfc3RhdHVzX2NvbXBhdChsbyxcbjE3Mzg6XHRcdFx0XHQgICAgIChjb25zdCBzdHJ1Y3QgY29tcGF0X2xvb3BfaW5mbyBfX3VzZXIgKilhcmcpO1xuMTczOTpcdFx0XHRicmVhaztcbjE3NDA6XHRcdGNhc2UgTE9PUF9HRVRfU1RBVFVTOlxuMTc0MTpcdFx0XHRlcnIgPSBsb29wX2dldF9zdGF0dXNfY29tcGF0KGxvLFxuMTc0MjpcdFx0XHRcdFx0ICAgICAoc3RydWN0IGNvbXBhdF9sb29wX2luZm8gX191c2VyICopYXJnKTtcbjE3NDM6XHRcdFx0YnJlYWs7XG4xNzQ0Olx0XHRjYXNlIExPT1BfU0VUX0NBUEFDSVRZOlxuMTc0NTpcdFx0Y2FzZSBMT09QX0NMUl9GRDpcbjE3NDY6XHRcdGNhc2UgTE9PUF9HRVRfU1RBVFVTNjQ6XG4xNzQ3Olx0XHRjYXNlIExPT1BfU0VUX1NUQVRVUzY0OlxuMTc0ODpcdFx0Y2FzZSBMT09QX0NPTkZJR1VSRTpcbjE3NDk6XHRcdFx0YXJnID0gKHVuc2lnbmVkIGxvbmcpIGNvbXBhdF9wdHIoYXJnKTtcbjE3NTA6XHRcdFx0ZmFsbHRocm91Z2g7XG4xNzUxOlx0XHRjYXNlIExPT1BfU0VUX0ZEOlxuMTc1MjpcdFx0Y2FzZSBMT09QX0NIQU5HRV9GRDpcbjE3NTM6XHRcdGNhc2UgTE9PUF9TRVRfQkxPQ0tfU0laRTpcbjE3NTQ6XHRcdGNhc2UgTE9PUF9TRVRfRElSRUNUX0lPOlxuMTc1NTpcdFx0XHRlcnIgPSBsb19pb2N0bChiZGV2LCBtb2RlLCBjbWQsIGFyZyk7XG4xNzU2Olx0XHRcdGJyZWFrO1xuMTc1NzpcdFx0ZGVmYXVsdDpcbjE3NTg6XHRcdFx0ZXJyID0gLUVOT0lPQ1RMQ01EO1xuMTc1OTpcdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTc6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQxNQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipEaXZpbmcgaW50byB0aGUgYGxvX2lvY3RsYCBJbXBsZW1lbnRhdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYGxvX2lvY3RsYCBmdW5jdGlvbiBpcyBhY3R1YWxseSB3b3JraW5nLiBJIG5lZWQgdG8gZ2V0IG15IGhlYWQgYXJvdW5kIGl0cyBpbXBsZW1lbnRhdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSB0aG9yb3VnaCBleGFtaW5hdGlvbiBvZiB0aGUgY29kZSBpdHNlbGYsIHRvIHNlZSB3aGF0IHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgZG9pbmcuIE5vIG5lZWQgZm9yIGJyb2FkIG92ZXJ2aWV3cyBvciB0aGVvcnkgaGVyZSDigJMgSSBuZWVkIHRvIGdldCBkb3duIGludG8gdGhlIGRldGFpbHMgb2YgdGhlIGNvZGUgYW5kIHNlZSB3aGF04oCZcyBnb2luZyBvbiBhdCBhIGxvdyBsZXZlbC4gTGV0JiMzOTtzIHNlZSBob3cgdGhpbmdzIGFyZSByZWFsbHkgaW1wbGVtZW50ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9sb29wLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2MzA6XHRzdHJ1Y3QgY29tcGF0X2xvb3BfaW5mbyB7XG4xNjMxOlx0XHRjb21wYXRfaW50X3RcdGxvX251bWJlcjsgICAgICAvKiBpb2N0bCByL28gKi9cbjE2MzI6XHRcdGNvbXBhdF9kZXZfdFx0bG9fZGV2aWNlOyAgICAgIC8qIGlvY3RsIHIvbyAqL1xuMTYzMzpcdFx0Y29tcGF0X3Vsb25nX3RcdGxvX2lub2RlOyAgICAgICAvKiBpb2N0bCByL28gKi9cbjE2MzQ6XHRcdGNvbXBhdF9kZXZfdFx0bG9fcmRldmljZTsgICAgIC8qIGlvY3RsIHIvbyAqL1xuMTYzNTpcdFx0Y29tcGF0X2ludF90XHRsb19vZmZzZXQ7XG4xNjM2Olx0XHRjb21wYXRfaW50X3RcdGxvX2VuY3J5cHRfdHlwZTsgICAgICAgIC8qIG9ic29sZXRlLCBpZ25vcmVkICovXG4xNjM3Olx0XHRjb21wYXRfaW50X3RcdGxvX2VuY3J5cHRfa2V5X3NpemU7ICAgIC8qIGlvY3RsIHcvbyAqL1xuMTYzODpcdFx0Y29tcGF0X2ludF90XHRsb19mbGFnczsgICAgICAgLyogaW9jdGwgci9vICovXG4xNjM5Olx0XHRjaGFyXHRcdGxvX25hbWVbTE9fTkFNRV9TSVpFXTtcbjE2NDA6XHRcdHVuc2lnbmVkIGNoYXJcdGxvX2VuY3J5cHRfa2V5W0xPX0tFWV9TSVpFXTsgLyogaW9jdGwgdy9vICovXG4xNjQxOlx0XHRjb21wYXRfdWxvbmdfdFx0bG9faW5pdFsyXTtcbjE2NDI6XHRcdGNoYXJcdFx0cmVzZXJ2ZWRbNF07XG4xNjQzOlx0fTtcbjE2NDQ6XHRcbjE2NDU6XHQvKlxuMTY0NjpcdCAqIFRyYW5zZmVyIDMyLWJpdCBjb21wYXRpYmlsaXR5IHN0cnVjdHVyZSBpbiB1c2Vyc3BhY2UgdG8gNjQtYml0IGxvb3AgaW5mb1xuMTY0NzpcdCAqIC0gbm9pbmxpbmVkIHRvIHJlZHVjZSBzdGFjayBzcGFjZSB1c2FnZSBpbiBtYWluIHBhcnQgb2YgZHJpdmVyXG4xNjQ4Olx0ICovXG4xNjQ5Olx0c3RhdGljIG5vaW5saW5lIGludFxuMTY1MDpcdGxvb3BfaW5mbzY0X2Zyb21fY29tcGF0KGNvbnN0IHN0cnVjdCBjb21wYXRfbG9vcF9pbmZvIF9fdXNlciAqYXJnLFxuMTY1MTpcdFx0XHRcdHN0cnVjdCBsb29wX2luZm82NCAqaW5mbzY0KVxuMTY1MjpcdHtcbjE2NTM6XHRcdHN0cnVjdCBjb21wYXRfbG9vcF9pbmZvIGluZm87XG4xNjU0Olx0XG4xNjU1Olx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2aW5mbywgYXJnLCBzaXplb2YoaW5mbykpKVxuMTY1NjpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjE2NTc6XHRcbjE2NTg6XHRcdG1lbXNldChpbmZvNjQsIDAsIHNpemVvZigqaW5mbzY0KSk7XG4xNjU5Olx0XHRpbmZvNjQtXHUwMDNlbG9fbnVtYmVyID0gaW5mby5sb19udW1iZXI7XG4xNjYwOlx0XHRpbmZvNjQtXHUwMDNlbG9fZGV2aWNlID0gaW5mby5sb19kZXZpY2U7XG4xNjYxOlx0XHRpbmZvNjQtXHUwMDNlbG9faW5vZGUgPSBpbmZvLmxvX2lub2RlO1xuMTY2MjpcdFx0aW5mbzY0LVx1MDAzZWxvX3JkZXZpY2UgPSBpbmZvLmxvX3JkZXZpY2U7XG4xNjYzOlx0XHRpbmZvNjQtXHUwMDNlbG9fb2Zmc2V0ID0gaW5mby5sb19vZmZzZXQ7XG4xNjY0Olx0XHRpbmZvNjQtXHUwMDNlbG9fc2l6ZWxpbWl0ID0gMDtcbjE2NjU6XHRcdGluZm82NC1cdTAwM2Vsb19mbGFncyA9IGluZm8ubG9fZmxhZ3M7XG4xNjY2Olx0XHRtZW1jcHkoaW5mbzY0LVx1MDAzZWxvX2ZpbGVfbmFtZSwgaW5mby5sb19uYW1lLCBMT19OQU1FX1NJWkUpO1xuMTY2NzpcdFx0cmV0dXJuIDA7XG4xNjY4Olx0fVxuMTY2OTpcdFxuMTY3MDpcdC8qXG4xNjcxOlx0ICogVHJhbnNmZXIgNjQtYml0IGxvb3AgaW5mbyB0byAzMi1iaXQgY29tcGF0aWJpbGl0eSBzdHJ1Y3R1cmUgaW4gdXNlcnNwYWNlXG4xNjcyOlx0ICogLSBub2lubGluZWQgdG8gcmVkdWNlIHN0YWNrIHNwYWNlIHVzYWdlIGluIG1haW4gcGFydCBvZiBkcml2ZXJcbjE2NzM6XHQgKi9cbjE2NzQ6XHRzdGF0aWMgbm9pbmxpbmUgaW50XG4xNjc1Olx0bG9vcF9pbmZvNjRfdG9fY29tcGF0KGNvbnN0IHN0cnVjdCBsb29wX2luZm82NCAqaW5mbzY0LFxuMTY3NjpcdFx0XHQgICAgICBzdHJ1Y3QgY29tcGF0X2xvb3BfaW5mbyBfX3VzZXIgKmFyZylcbjE2Nzc6XHR7XG4xNjc4Olx0XHRzdHJ1Y3QgY29tcGF0X2xvb3BfaW5mbyBpbmZvO1xuMTY3OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNzo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDkwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZSwgdXNpbmcgYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBgbG9faW9jdGxgIENvZGUqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggYGxvX2lvY3RsYC4gVGhlIGJlc3Qgd2F5IHRvIHN0YXJ0IGlzIGJ5IHBpbnBvaW50aW5nIHRoZSBzcGVjaWZpYyBsaW5lIG51bWJlcnMgYW5kIHRoZSBhc3NvY2lhdGVkIHN5bWJvbHMuIEtub3dpbmcgdGhlIGV4YWN0IGNvbnRleHQgb2YgdGhvc2UgbGluZXMgaXMgY3J1Y2lhbC4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpcyBpbnRlcmFjdGluZyB3aXRoIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGNvbnRyb2wgZmxvdy4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUga2V5IGludGVyYWN0aW9uIHBvaW50cyBhbmQgYW55IHBvdGVudGlhbCBhcmVhcyB0aGF0IG1pZ2h0IG5lZWQgYXR0ZW50aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xvX2lvY3RsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9sb29wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9sb29wLmM9MTIzOD1zdGF0aWMgaW50IGxvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTI0Mi1cdC8qXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMjQzOlx0ICogU2luY2UgbG9faW9jdGwoKSBpcyBjYWxsZWQgd2l0aG91dCBsb2NrcyBoZWxkLCBpdCBpcyBwb3NzaWJsZSB0aGF0XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjQ0LVx0ICogbG9vcF9jb25maWd1cmUoKS9sb29wX2NoYW5nZV9mZCgpIGFuZCBsb29wX2Nscl9mZCgpIHJ1biBpbiBwYXJhbGxlbC5cbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNTQzPXN0YXRpYyBpbnQgbG9fc2ltcGxlX2lvY3RsKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHVuc2lnbmVkIGludCBjbWQsXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTU2NC1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE1NjU6c3RhdGljIGludCBsb19pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNTY2LVx0dW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MTcyOT1zdGF0aWMgaW50IGxvX2NvbXBhdF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTc1NC1cdGNhc2UgTE9PUF9TRVRfRElSRUNUX0lPOlxuZHJpdmVycy9ibG9jay9sb29wLmM6MTc1NTpcdFx0ZXJyID0gbG9faW9jdGwoYmRldiwgbW9kZSwgY21kLCBhcmcpO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMTc1Ni1cdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MTgyOD1zdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGxvX2ZvcHMgPSB7XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTgzMS1cdC5yZWxlYXNlID1cdGxvX3JlbGVhc2UsXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxODMyOlx0LmlvY3RsID1cdGxvX2lvY3RsLFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTgzMy0jaWZkZWYgQ09ORklHX0NPTVBBVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNzo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDExNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDYyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBMb29wIERldmljZSBEcml2ZXIgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlc2UgcGF0Y2ggY2hhbmdlcyBtZXRob2RpY2FsbHkuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgYSBzaWduaWZpY2FudCByZWZhY3RvcmluZyBvZiB0aGUgbG9vcCBibG9jayBkZXZpY2UgZHJpdmVyLCBhbmQgaXQmIzM5O3Mgc29tZXRoaW5nIEkgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIGl0JiMzOTtzIGFjY2Vzc2libGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBRRU1VLCBhbmQgc3RhbmRhcmQgdXNlciBzcGFjZS4KClNwZWNpZmljYWxseSwgdGhlIGFkZGl0aW9uIG9mIGBzdHJ1Y3Qgd29ya19zdHJ1Y3QgbG9fY2xyX3dvcmtgIGFuZCB0aGUgc2hpZnQgb2YgYF9fbG9vcF9jbHJfZmRgIHRvIGEgd29yayBpdGVtIGhhbmRsZXIgaW1tZWRpYXRlbHkgY2F0Y2hlcyBteSBleWUuIFRoaXMgZnVuZGFtZW50YWxseSBhbHRlcnMgaG93IHRoZSBkZXZpY2UgaXMgY2xlYW5lZCB1cCBhbmQgcmVsZWFzZWQsIG1vdmluZyBmcm9tIGEgc3luY2hyb25vdXMgY2FsbCB3aXRoaW4gYGxvX3JlbGVhc2VgIHRvIGFuIGFzeW5jaHJvbm91cyBhcHByb2FjaCB2aWEgYSB3b3JrcXVldWUuIFRoaXMgbWVhbnMgdGhhdCBJL08gaXMgaGFuZGxlZCBvdXRzaWRlIG9mIHRoZSBjcml0aWNhbCBwYXRoIGFuZCBhZnRlciB0aGUgYG9wZW5fbXV0ZXhgIGxvY2sgaGFzIGJlZW4gZHJvcHBlZC4KCkxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgdHJ5aW5nIHRvIGltcHJvdmUgY29uY3VycmVuY3kgYW5kIGhhbmRsZSBwb3RlbnRpYWwgYmxvY2tpbmcgb3BlcmF0aW9ucyBtb3JlIGdyYWNlZnVsbHkuIFRoZXkmIzM5O3JlIGNhcmVmdWxseSBtYW5hZ2luZyB0aGUgYG9wZW5fbXV0ZXhgIGxvY2ssIGZsdXNoaW5nIEkvTyAodXNpbmcgYHN5bmNocm9uaXplX3JjdSgpYCwgYGRyYWluX3dvcmtxdWV1ZSgpYCwgYW5kIGBibGtfbXFfdW5mcmVlemVfcXVldWUoKWApIGJlZm9yZSB0aGUgbXV0ZXggaXMgbG9ja2VkLCBhbmQgdGhlbiBkb2luZyB0aGUgY29yZSBjbGVhbnVwIHdpdGggdGhlIG11dGV4LiBUaGV5IGFyZSBhbHNvIHRha2luZyBjYXJlIHRvIGVuc3VyZSB0aGF0IHJlZmNvdW50cyBvbiB0aGUgYGRldmljZWAgYW5kIGBtb2R1bGVgIGFyZSBoYW5kbGVkIGNvcnJlY3RseSBpbiBib3RoIHNjZW5hcmlvcy4KClRoZSBgbG9fcmVsZWFzZWAgY2hhbmdlLCBkZWZlcnJpbmcgdGhlIGBfX2xvb3BfY2xyX2ZkYCBjYWxsIHRvIHRoZSBgc3lzdGVtX2xvbmdfd3FgIHdvcmtxdWV1ZSwgaXMgdGhlIGtleSB0byBhbGwgb2YgdGhpcy4gYGxvb3BfYWRkYCBub3cgaW5pdGlhbGl6ZXMgdGhlIHdvcmsgaXRlbSwgYW5kIGBsb29wX3JlbW92ZWAgZmx1c2hlcyBpdC4KCk15IGV4cGVydCBpbnN0aW5jdHMgYXJlIHRpbmdsaW5nOyB0aGlzIHNtZWxscyBsaWtlIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBUaGUgY29uY3VycmVuY3kgY2hhbmdlcyBhbG9uZSwgZXNwZWNpYWxseSB3aXRoIHRoZSBpbnRyaWNhdGUgbG9ja2luZywgdW5sb2NraW5nLCBhbmQgcmVmY291bnRpbmcgKG1vZHVsZS9kZXZpY2UvZmlsZSkgaW52b2x2ZWQsIGFyZSByaXBlIGZvciByYWNlIGNvbmRpdGlvbnMsIHVzZS1hZnRlci1mcmVlcywgZGVhZGxvY2tzLCBhbmQgb3RoZXIgc3VidGxlIGNvbmN1cnJlbmN5IGJ1Z3MuICBUaGUgYXN5bmNocm9ub3VzIG5hdHVyZSBvZiB0aGUgd29ya3F1ZXVlIG1ha2VzIGl0IHBhcnRpY3VsYXJseSBzdXNjZXB0aWJsZSB0byB0aGVzZSBraW5kcyBvZiBwcm9ibGVtcywgYW5kIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBsb2NraW5nL3VubG9ja2luZyBhbmQgcmVmY291bnRpbmcgbWFrZXMgaXQgd29yc2UuCgpTbywgeWVzLCBhYnNvbHV0ZWx5LCAqKldvcnRoRnV6emluZyA9IHRydWUuKioKCk5vdywgbGV0IG1lIGNoZWNrIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcyB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLiBUaW1lIHRvIGNoZWNrIGBkcml2ZXJzL2Jsb2NrL0tjb25maWdgIHRvIHNlZSB3aGF0JiMzOTtzIHJlcXVpcmVkIGZvciBgbG9vcC5jYCB0byBiZSBidWlsdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTg6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE0MDpcdGNvbmZpZyBCTEtfREVWX0NPV19DT01NT05cbiAxNDE6XHRcdGJvb2xcbiAxNDI6XHRcdGRlZmF1bHQgQkxLX0RFVl9VQkRcbiAxNDM6XHRcbiAxNDQ6XHRjb25maWcgQkxLX0RFVl9MT09QXG4gMTQ1Olx0XHR0cmlzdGF0ZSBcJiMzNDtMb29wYmFjayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuIDE0NjpcdFx0aGVscFxuIDE0NzpcdFx0ICBTYXlpbmcgWSBoZXJlIHdpbGwgYWxsb3cgeW91IHRvIHVzZSBhIHJlZ3VsYXIgZmlsZSBhcyBhIGJsb2NrXG4gMTQ4Olx0XHQgIGRldmljZTsgeW91IGNhbiB0aGVuIGNyZWF0ZSBhIGZpbGUgc3lzdGVtIG9uIHRoYXQgYmxvY2sgZGV2aWNlIGFuZFxuIDE0OTpcdFx0ICBtb3VudCBpdCBqdXN0IGFzIHlvdSB3b3VsZCBtb3VudCBvdGhlciBibG9jayBkZXZpY2VzIHN1Y2ggYXMgaGFyZFxuIDE1MDpcdFx0ICBkcml2ZSBwYXJ0aXRpb25zLCBDRC1ST00gZHJpdmVzIG9yIGZsb3BweSBkcml2ZXMuIFRoZSBsb29wIGRldmljZXNcbiAxNTE6XHRcdCAgYXJlIGJsb2NrIHNwZWNpYWwgZGV2aWNlIGZpbGVzIHdpdGggbWFqb3IgbnVtYmVyIDcgYW5kIHR5cGljYWxseVxuIDE1MjpcdFx0ICBjYWxsZWQgL2Rldi9sb29wMCwgL2Rldi9sb29wMSBldGMuXG4gMTUzOlx0XG4gMTU0Olx0XHQgIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGNoZWNrIGFuIElTTyA5NjYwIGZpbGUgc3lzdGVtIGJlZm9yZVxuIDE1NTpcdFx0ICBidXJuaW5nIHRoZSBDRCwgb3IgaWYgeW91IHdhbnQgdG8gdXNlIGZsb3BweSBpbWFnZXMgd2l0aG91dCBmaXJzdFxuIDE1NjpcdFx0ICB3cml0aW5nIHRoZW0gdG8gZmxvcHB5LiBGdXJ0aGVybW9yZSwgc29tZSBMaW51eCBkaXN0cmlidXRpb25zIGF2b2lkXG4gMTU3Olx0XHQgIHRoZSBuZWVkIGZvciBhIGRlZGljYXRlZCBMaW51eCBwYXJ0aXRpb24gYnkga2VlcGluZyB0aGVpciBjb21wbGV0ZVxuIDE1ODpcdFx0ICByb290IGZpbGUgc3lzdGVtIGluc2lkZSBhIERPUyBGQVQgZmlsZSB1c2luZyB0aGlzIGxvb3AgZGV2aWNlXG4gMTU5Olx0XHQgIGRyaXZlci5cbiAxNjA6XHRcbiAxNjE6XHRcdCAgVG8gdXNlIHRoZSBsb29wIGRldmljZSwgeW91IG5lZWQgdGhlIGxvc2V0dXAgdXRpbGl0eSwgZm91bmQgaW4gdGhlXG4gMTYyOlx0XHQgIHV0aWwtbGludXggcGFja2FnZSwgc2VlXG4gMTYzOlx0XHQgIFx1MDAzY2h0dHBzOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L3V0aWxzL3V0aWwtbGludXgvXHUwMDNlLlxuIDE2NDpcdFxuIDE2NTpcdFx0ICBUaGUgbG9vcCBkZXZpY2UgZHJpdmVyIGNhbiBhbHNvIGJlIHVzZWQgdG8gXCYjMzQ7aGlkZVwmIzM0OyBhIGZpbGUgc3lzdGVtIGluXG4gMTY2Olx0XHQgIGEgZGlzayBwYXJ0aXRpb24sIGZsb3BweSwgb3IgcmVndWxhciBmaWxlLCBlaXRoZXIgdXNpbmcgZW5jcnlwdGlvblxuIDE2NzpcdFx0ICAoc2NyYW1ibGluZyB0aGUgZGF0YSkgb3Igc3RlZ2Fub2dyYXBoeSAoaGlkaW5nIHRoZSBkYXRhIGluIHRoZSBsb3dcbiAxNjg6XHRcdCAgYml0cyBvZiwgc2F5LCBhIHNvdW5kIGZpbGUpLiBUaGlzIGlzIGFsc28gc2FmZSBpZiB0aGUgZmlsZSByZXNpZGVzXG4gMTY5Olx0XHQgIG9uIGEgcmVtb3RlIGZpbGUgc2VydmVyLlxuIDE3MDpcdFxuIDE3MTpcdFx0ICBOb3RlIHRoYXQgdGhpcyBsb29wIGRldmljZSBoYXMgbm90aGluZyB0byBkbyB3aXRoIHRoZSBsb29wYmFja1xuIDE3MjpcdFx0ICBkZXZpY2UgdXNlZCBmb3IgbmV0d29yayBjb25uZWN0aW9ucyBmcm9tIHRoZSBtYWNoaW5lIHRvIGl0c2VsZi5cbiAxNzM6XHRcbiAxNzQ6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gMTc1Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBsb29wLlxuIDE3NjpcdFxuIDE3NzpcdFx0ICBNb3N0IHVzZXJzIHdpbGwgYW5zd2VyIE4gaGVyZS5cbiAxNzg6XHRcbiAxNzk6XHRjb25maWcgQkxLX0RFVl9MT09QX01JTl9DT1VOVFxuIDE4MDpcdFx0aW50IFwmIzM0O051bWJlciBvZiBsb29wIGRldmljZXMgdG8gcHJlLWNyZWF0ZSBhdCBpbml0IHRpbWVcJiMzNDtcbiAxODE6XHRcdGRlcGVuZHMgb24gQkxLX0RFVl9MT09QXG4gMTgyOlx0XHRkZWZhdWx0IDhcbiAxODM6XHRcdGhlbHBcbiAxODQ6XHRcdCAgU3RhdGljIG51bWJlciBvZiBsb29wIGRldmljZXMgdG8gYmUgdW5jb25kaXRpb25hbGx5IHByZS1jcmVhdGVkXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE4OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDMzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgZm9yIEhpZGRlbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBCTEtfREVWX0xPT1BgIG1vZHVsZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7UmlnaHQsIGJlZm9yZSBJIGdldCB0b28gZGVlcCwgYXJlIHRoZXJlIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgb3IgY29uZmlndXJhdGlvbnMgdGhhdCBJIG1pZ2h0IGJlIG92ZXJsb29raW5nPyYjMzQ7IEl0JiMzOTtzIGFsd2F5cyBiZXN0IHRvIGJlIHRob3JvdWdoLCBlc3BlY2lhbGx5IHdpdGggYmxvY2sgZGV2aWNlIGRyaXZlcnMuIEkmIzM5O3ZlIGxlYXJuZWQgdGhhdCBsZXNzb24gdGhlIGhhcmQgd2F5ISBNeSBpbnN0aW5jdCBpcyB0byBoZWFkIHN0cmFpZ2h0IGZvciB0aGUgYEtjb25maWdgIGZpbGUgaW4gdGhlIGBkcml2ZXJzL2Jsb2NrYCBkaXJlY3RvcnkuIEl0JiMzOTtzIHVzdWFsbHkgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQuIExldCYjMzk7cyBzdGFydCBhcm91bmQgbGluZSAxIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZGlnIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxODowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBCbG9jayBkZXZpY2UgZHJpdmVyIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0bWVudWNvbmZpZyBCTEtfREVWXG4gICA3Olx0XHRib29sIFwmIzM0O0Jsb2NrIGRldmljZXNcJiMzNDtcbiAgIDg6XHRcdGRlcGVuZHMgb24gQkxPQ0tcbiAgIDk6XHRcdGRlZmF1bHQgeVxuICAxMDpcdFx0aGVscFxuICAxMTpcdFx0ICBTYXkgWSBoZXJlIHRvIGdldCB0byBzZWUgb3B0aW9ucyBmb3IgdmFyaW91cyBkaWZmZXJlbnQgYmxvY2sgZGV2aWNlXG4gIDEyOlx0XHQgIGRyaXZlcnMuIFRoaXMgb3B0aW9uIGFsb25lIGRvZXMgbm90IGFkZCBhbnkga2VybmVsIGNvZGUuXG4gIDEzOlx0XG4gIDE0Olx0XHQgIElmIHlvdSBzYXkgTiwgYWxsIG9wdGlvbnMgaW4gdGhpcyBzdWJtZW51IHdpbGwgYmUgc2tpcHBlZCBhbmQgZGlzYWJsZWQ7XG4gIDE1Olx0XHQgIG9ubHkgZG8gdGhpcyBpZiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuXG4gIDE2Olx0XG4gIDE3Olx0aWYgQkxLX0RFVlxuICAxODpcdFxuICAxOTpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWdcJiMzNDtcbiAgMjA6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9ibG9jay9ybnVsbC9LY29uZmlnXCYjMzQ7XG4gIDIxOlx0XG4gIDIyOlx0Y29uZmlnIEJMS19ERVZfRkRcbiAgMjM6XHRcdHRyaXN0YXRlIFwmIzM0O05vcm1hbCBmbG9wcHkgZGlzayBzdXBwb3J0XCYjMzQ7XG4gIDI0Olx0XHRkZXBlbmRzIG9uIEFSQ0hfTUFZX0hBVkVfUENfRkRDXG4gIDI1Olx0XHRoZWxwXG4gIDI2Olx0XHQgIElmIHlvdSB3YW50IHRvIHVzZSB0aGUgZmxvcHB5IGRpc2sgZHJpdmUocykgb2YgeW91ciBQQyB1bmRlciBMaW51eCxcbiAgMjc6XHRcdCAgc2F5IFkuIEluZm9ybWF0aW9uIGFib3V0IHRoaXMgZHJpdmVyLCBlc3BlY2lhbGx5IGltcG9ydGFudCBmb3IgSUJNXG4gIDI4Olx0XHQgIFRoaW5rcGFkIHVzZXJzLCBpcyBjb250YWluZWQgaW5cbiAgMjk6XHRcdCAgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Jsb2NrZGV2L2Zsb3BweS5yc3RcdTAwM2UuXG4gIDMwOlx0XHQgIFRoYXQgZmlsZSBhbHNvIGNvbnRhaW5zIHRoZSBsb2NhdGlvbiBvZiB0aGUgRmxvcHB5IGRyaXZlciBGQVEgYXNcbiAgMzE6XHRcdCAgd2VsbCBhcyBsb2NhdGlvbiBvZiB0aGUgZmR1dGlscyBwYWNrYWdlIHVzZWQgdG8gY29uZmlndXJlIGFkZGl0aW9uYWxcbiAgMzI6XHRcdCAgcGFyYW1ldGVycyBvZiB0aGUgZHJpdmVyIGF0IHJ1biB0aW1lLlxuICAzMzpcdFxuICAzNDpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAgMzU6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGZsb3BweS5cbiAgMzY6XHRcbiAgMzc6XHRjb25maWcgQkxLX0RFVl9GRF9SQVdDTURcbiAgMzg6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgcmF3IGZsb3BweSBkaXNrIGNvbW1hbmRzIChERVBSRUNBVEVEKVwmIzM0O1xuICAzOTpcdFx0ZGVwZW5kcyBvbiBCTEtfREVWX0ZEXG4gIDQwOlx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE4OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzY5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTG9vcCBCbG9jayBEZXZpY2UgZm9yIEZ1enppbmcqKgoKT2theSwgc28gYEJMS19ERVZgIGRlcGVuZHMgb24gYEJMT0NLYC4gVGhhdCBtYWtlcyBzZW5zZS4gQW5kIGBCTEtfREVWX0xPT1BgIGlzICppbnNpZGUqIGBCTEtfREVWYCwgc28sIGltcGxpY2l0bHksIHRoYXQgYWxzbyByZXF1aXJlcyBgQkxPQ0tgLiBHb3QgaXQuIE5vdywgd2hhdCYjMzk7cyBvdXIgYXR0YWNrIHN1cmZhY2U/IExldCYjMzk7cyBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyBpbiBgZHJpdmVycy9ibG9jay9sb29wLmNgIGFyZSBnb2luZyB0byBiZSBtb3N0IHVzZWZ1bCBmb3IgZnV6emluZy4KCkxldCYjMzk7cyBzZWUuLi4gd2hhdCBhcmUgdGhlIGVudHJ5IHBvaW50cz8gSG1tLCBva2F5LCBoZXJlJiMzOTtzIGEgc3RhcnQ6IGBsb19yZWxlYXNlYCwgd2hpY2ggaXMgdGhlIGBmb3BzLSZndDtyZWxlYXNlYCBjYWxsYmFjay4gVGhhdCYjMzk7cyBhIGdvb2QgY2FuZGlkYXRlLiBXZSBhbHNvIGhhdmUgYGxvb3BfY2xyX2ZkYCwgYW5kIHRoZSBgbG9faW9jdGxgIGFuZCBgbG9fY29tcGF0X2lvY3RsYCBwYWlyLiBPa2F5LCBgbG9vcF9jb250cm9sX2lvY3RsYCBpcyBhbm90aGVyIG9uZSB0byBjb25zaWRlci4gQW5kIHRoZW4gdGhlcmUgYXJlIHRoZSBmdW5jdGlvbnMgcmVsYXRlZCB0byBtYW5hZ2VtZW50IOKAkyBgbG9vcF9hZGRgLCBgbG9vcF9yZW1vdmVgLCBgbG9vcF9jb25maWd1cmVgLCBhbmQgYGxvb3BfY2hhbmdlX2ZkYC4gVGhvc2UgYWxsIGxvb2sgaW50ZXJlc3RpbmcuCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBkZWVwZXIgYW5kIGFjdHVhbGx5IGxvb2sgYXQgdGhlIGNvZGUgZGVmaW5pdGlvbnMgdGhlbXNlbHZlcyB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxODowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHN0YXRpYyApPyhpbnR8dm9pZHxsb25nKSAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2xvb3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2xvb3AuYz05Nz1zdGF0aWMgREVGSU5FX01VVEVYKGxvb3BfdmFsaWRhdGVfbXV0ZXgpO1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTExMC0gKi9cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjExMTpzdGF0aWMgaW50IGxvb3BfZ2xvYmFsX2xvY2tfa2lsbGFibGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgYm9vbCBnbG9iYWwpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTIte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEzMS0gKi9cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEzMjpzdGF0aWMgdm9pZCBsb29wX2dsb2JhbF91bmxvY2soc3RydWN0IGxvb3BfZGV2aWNlICpsbywgYm9vbCBnbG9iYWwpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMzMte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEzOC1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEzOTpzdGF0aWMgaW50IG1heF9wYXJ0O1xuZHJpdmVycy9ibG9jay9sb29wLmM6MTQwOnN0YXRpYyBpbnQgcGFydF9zaGlmdDtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE0MS1cbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0yMDI9c3RhdGljIGlubGluZSB2b2lkIGxvb3BfdXBkYXRlX2RpbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIxOS0gKi9cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIyMDpzdGF0aWMgdm9pZCBsb29wX3NldF9zaXplKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGxvZmZfdCBzaXplKVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjIxLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjUtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMjY6c3RhdGljIHZvaWQgbG9vcF9jbGVhcl9saW1pdHMoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgaW50IG1vZGUpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjcte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTI0Ny1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjI0ODpzdGF0aWMgaW50IGxvX2ZhbGxvY2F0ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIGxvZmZfdCBwb3MsXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yNDktXHRcdFx0aW50IG1vZGUpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjc2LVxuZHJpdmVycy9ibG9jay9sb29wLmM6Mjc3OnN0YXRpYyBpbnQgbG9fcmVxX2ZsdXNoKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCByZXF1ZXN0ICpycSlcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTI3OC17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjg1LVxuZHJpdmVycy9ibG9jay9sb29wLmM6Mjg2OnN0YXRpYyB2b2lkIGxvX2NvbXBsZXRlX3JxKHN0cnVjdCByZXF1ZXN0ICpycSlcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTI4Ny17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMzE5LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MzIwOnN0YXRpYyB2b2lkIGxvX3J3X2Fpb19kb19jb21wbGV0aW9uKHN0cnVjdCBsb29wX2NtZCAqY21kKVxuZHJpdmVycy9ibG9jay9sb29wLmMtMzIxLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0zMzMtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzozMzQ6c3RhdGljIHZvaWQgbG9fcndfYWlvX2NvbXBsZXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgbG9uZyByZXQpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0zMzUte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTM0MS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjM0MjpzdGF0aWMgaW50IGxvX3J3X2FpbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgbG9vcF9jbWQgKmNtZCxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTM0My1cdFx0ICAgICBsb2ZmX3QgcG9zLCBpbnQgcncpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtNDEwLVxuZHJpdmVycy9ibG9jay9sb29wLmM6NDExOnN0YXRpYyBpbnQgZG9fcmVxX2ZpbGViYWNrZWQoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHJlcXVlc3QgKnJxKVxuZHJpdmVycy9ibG9jay9sb29wLmMtNDEyLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy00MzktXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo0NDA6c3RhdGljIHZvaWQgbG9vcF9yZXJlYWRfcGFydGl0aW9ucyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuZHJpdmVycy9ibG9jay9sb29wLmMtNDQxLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy00NTEtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo0NTI6c3RhdGljIHZvaWQgbG9vcF91cGRhdGVfZGlvX2FsaWdubWVudChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuZHJpdmVycy9ibG9jay9sb29wLmMtNDUzLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz00ODU9c3RhdGljIGlubGluZSBpbnQgaXNfbG9vcF9kZXZpY2Uoc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtNDkxLVxuZHJpdmVycy9ibG9jay9sb29wLmM6NDkyOnN0YXRpYyBpbnQgbG9vcF92YWxpZGF0ZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxuZHJpdmVycy9ibG9jay9sb29wLmMtNDkzLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy01MTYtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo1MTc6c3RhdGljIHZvaWQgbG9vcF9hc3NpZ25fYmFja2luZ19maWxlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBmaWxlICpmaWxlKVxuZHJpdmVycy9ibG9jay9sb29wLmMtNTE4LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy01MjctXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo1Mjg6c3RhdGljIGludCBsb29wX2NoZWNrX2JhY2tpbmdfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTUyOS17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtNTQ2LSAqL1xuZHJpdmVycy9ibG9jay9sb29wLmM6NTQ3OnN0YXRpYyBpbnQgbG9vcF9jaGFuZ2VfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldixcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTU0OC1cdFx0XHQgIHVuc2lnbmVkIGludCBhcmcpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9NzMzPXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGxvb3BfYXR0cmlidXRlX2dyb3VwID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTczNy1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjczODpzdGF0aWMgdm9pZCBsb29wX3N5c2ZzX2luaXQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTczOS17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtNzQzLVxuZHJpdmVycy9ibG9jay9sb29wLmM6NzQ0OnN0YXRpYyB2b2lkIGxvb3Bfc3lzZnNfZXhpdChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuZHJpdmVycy9ibG9jay9sb29wLmMtNzQ1LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy03NTAtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo3NTE6c3RhdGljIHZvaWQgbG9vcF9nZXRfZGlzY2FyZF9jb25maWcoc3RydWN0IGxvb3BfZGV2aWNlICpsbyxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTc1Mi1cdFx0XHRcdCAgICB1MzIgKmdyYW51bGFyaXR5LCB1MzIgKm1heF9kaXNjYXJkX3NlY3RvcnMpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9NzgxPXN0cnVjdCBsb29wX3dvcmtlciB7XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtNzkwLVxuZHJpdmVycy9ibG9jay9sb29wLmM6NzkxOnN0YXRpYyB2b2lkIGxvb3Bfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy03OTItXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9Nzk5PXN0YXRpYyBpbmxpbmUgaW50IHF1ZXVlX29uX3Jvb3Rfd29ya2VyKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtODA0LVxuZHJpdmVycy9ibG9jay9sb29wLmM6ODA1OnN0YXRpYyB2b2lkIGxvb3BfcXVldWVfd29yayhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgbG9vcF9jbWQgKmNtZClcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTgwNi17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtODc0LVxuZHJpdmVycy9ibG9jay9sb29wLmM6ODc1OnN0YXRpYyB2b2lkIGxvb3Bfc2V0X3RpbWVyKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy04NzYte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTg3OS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjg4MDpzdGF0aWMgdm9pZCBsb29wX2ZyZWVfaWRsZV93b3JrZXJzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGJvb2wgZGVsZXRlX2FsbClcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTg4MS17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtOTAwLVxuZHJpdmVycy9ibG9jay9sb29wLmM6OTAxOnN0YXRpYyB2b2lkIGxvb3BfZnJlZV9pZGxlX3dvcmtlcnNfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKVxuZHJpdmVycy9ibG9jay9sb29wLmMtOTAyLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz05NDg9c3RhdGljIHVuc2lnbmVkIGludCBsb29wX2RlZmF1bHRfYmxvY2tzaXplKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtOTU1LVxuZHJpdmVycy9ibG9jay9sb29wLmM6OTU2OnN0YXRpYyB2b2lkIGxvb3Bfc2V0X2RtYV9saW1pdChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy05NTcte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTk2OC1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjk2OTpzdGF0aWMgdm9pZCBsb29wX3VwZGF0ZV9saW1pdHMoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLFxuZHJpdmVycy9ibG9jay9sb29wLmMtOTcwLVx0XHR1bnNpZ25lZCBpbnQgYnNpemUpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTAwMy1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEwMDQ6c3RhdGljIGludCBsb29wX2NvbmZpZ3VyZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBibGtfbW9kZV90IG1vZGUsXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMDA1LVx0XHRcdCAgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldixcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTM3LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTEzODpzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTExMzkte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEyMzctXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMjM4OnN0YXRpYyBpbnQgbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEyMzkte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE0Mzk9bG9vcF9nZXRfc3RhdHVzNjQoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGxvb3BfaW5mbzY0IF9fdXNlciAqYXJnKSB7XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTQ1MS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE0NTI6c3RhdGljIGludCBsb29wX3NldF9jYXBhY2l0eShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTQ1My17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTQ2NC1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE0NjU6c3RhdGljIGludCBsb29wX3NldF9kaW8oc3RydWN0IGxvb3BfZGV2aWNlICpsbywgdW5zaWduZWQgbG9uZyBhcmcpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNDY2LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNDk0LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTQ5NTpzdGF0aWMgaW50IGxvb3Bfc2V0X2Jsb2NrX3NpemUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgYmxrX21vZGVfdCBtb2RlLFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTQ5Ni1cdFx0XHQgICAgICAgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTU0Mi1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE1NDM6c3RhdGljIGludCBsb19zaW1wbGVfaW9jdGwoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgdW5zaWduZWQgaW50IGNtZCxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE1NDQtXHRcdFx0ICAgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTU2NC1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE1NjU6c3RhdGljIGludCBsb19pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNTY2LVx0dW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MTcxNT1sb29wX2dldF9zdGF0dXNfY29tcGF0KHN0cnVjdCBsb29wX2RldmljZSAqbG8sXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTcyOC1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE3Mjk6c3RhdGljIGludCBsb19jb21wYXRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTczMC1cdFx0XHQgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNzY0LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTc2NTpzdGF0aWMgaW50IGxvX29wZW4oc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJsa19tb2RlX3QgbW9kZSlcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE3NjYte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE3NzktXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNzgwOnN0YXRpYyB2b2lkIGxvX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2spXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNzgxLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODE1LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTgxNjpzdGF0aWMgdm9pZCBsb19mcmVlX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODE3LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xODI4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbG9fZm9wcyA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODUyLSAqL1xuZHJpdmVycy9ibG9jay9sb29wLmM6MTg1MzpzdGF0aWMgaW50IG1heF9sb29wID0gQ09ORklHX0JMS19ERVZfTE9PUF9NSU5fQ09VTlQ7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODU0LVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE4NTY9c3RhdGljIGJvb2wgbWF4X2xvb3Bfc3BlY2lmaWVkO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMTg1Ny1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE4NTg6c3RhdGljIGludCBtYXhfbG9vcF9wYXJhbV9zZXRfaW50KGNvbnN0IGNoYXIgKnZhbCxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4NTktXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE4ODQ9TU9EVUxFX1BBUk1fREVTQyhtYXhfcGFydCwgXCYjMzQ7TWF4aW11bSBudW1iZXIgb2YgcGFydGl0aW9ucyBwZXIgbG9vcCBkZXZpY2VcJiMzNDspO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMTg4NS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE4ODY6c3RhdGljIGludCBod19xdWV1ZV9kZXB0aCA9IExPT1BfREVGQVVMVF9IV19RX0RFUFRIO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMTg4Ny1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE4ODg6c3RhdGljIGludCBsb29wX3NldF9od19xdWV1ZV9kZXB0aChjb25zdCBjaGFyICpzLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICpwKVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTg4OS17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MTkxMz1zdGF0aWMgYmxrX3N0YXR1c190IGxvb3BfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTk1NS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE5NTY6c3RhdGljIHZvaWQgbG9vcF9oYW5kbGVfY21kKHN0cnVjdCBsb29wX2NtZCAqY21kKVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTk1Ny17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjAwNy1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIwMDg6c3RhdGljIHZvaWQgbG9vcF9wcm9jZXNzX3dvcmsoc3RydWN0IGxvb3Bfd29ya2VyICp3b3JrZXIsXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMDA5LVx0XHRcdHN0cnVjdCBsaXN0X2hlYWQgKmNtZF9saXN0LCBzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIwNDEtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMDQyOnN0YXRpYyB2b2lkIGxvb3Bfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIwNDMte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIwNDgtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMDQ5OnN0YXRpYyB2b2lkIGxvb3Bfcm9vdGNnX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMDUwLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0yMDU2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyBsb29wX21xX29wcyA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMDYwLVxuZHJpdmVycy9ibG9jay9sb29wLmM6MjA2MTpzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjA2Mi17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjE3OS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIxODA6c3RhdGljIHZvaWQgbG9vcF9yZW1vdmUoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIxODEte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIxOTYtI2lmZGVmIENPTkZJR19CTE9DS19MRUdBQ1lfQVVUT0xPQURcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIxOTc6c3RhdGljIHZvaWQgbG9vcF9wcm9iZShkZXZfdCBkZXYpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMTk4LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjA4LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MjIwOTpzdGF0aWMgaW50IGxvb3BfY29udHJvbF9yZW1vdmUoaW50IGlkeClcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIyMTAte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIyNTUtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMjU2OnN0YXRpYyBpbnQgbG9vcF9jb250cm9sX2dldF9mcmVlKGludCBpZHgpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjU3LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjc5LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MjI4MDpzdGF0aWMgbG9uZyBsb29wX2NvbnRyb2xfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjgxLVx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIHBhcm0pXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MjMxMD1NT0RVTEVfQUxJQVMoXCYjMzQ7ZGV2bmFtZTpsb29wLWNvbnRyb2xcJiMzNDspO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMjMxMS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIzMTI6c3RhdGljIGludCBfX2luaXQgbG9vcF9pbml0KHZvaWQpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMzEzLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMzY0LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MjM2NTpzdGF0aWMgdm9pZCBfX2V4aXQgbG9vcF9leGl0KHZvaWQpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMzY2LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0yMzg2PW1vZHVsZV9leGl0KGxvb3BfZXhpdCk7XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjM4OC0jaWZuZGVmIE1PRFVMRVxuZHJpdmVycy9ibG9jay9sb29wLmM6MjM4OTpzdGF0aWMgaW50IF9faW5pdCBtYXhfbG9vcF9zZXR1cChjaGFyICpzdHIpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMzkwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTg6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyOTQKCQkJCQkJCW91dHB1dDogMTQwCgkJCQkJCQl0aG91Z2h0czogMjA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRm9jdXNTeW1ib2xzIGFuZCBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgYEZvY3VzU3ltYm9sc2AgcmVsYXRlZCB0byBsb29wIGRldmljZXM6IGBsb19yZWxlYXNlYCwgYGxvb3BfY2xyX2ZkYCwgYGxvX2lvY3RsYCwgYGxvb3BfY29udHJvbF9pb2N0bGAsIGBsb29wX2NvbmZpZ3VyZWAsIGFuZCBgbG9vcF9yZW1vdmVgLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgdG8gZW5zdXJlIHRoZSBhcHByb3ByaWF0ZSBjb25maWd1cmF0aW9uIGlzIGluIHBsYWNlLgoKU3BlY2lmaWNhbGx5LCBJIHNlZSB3ZSYjMzk7cmUgdXNpbmcgYEJMS19ERVZfTE9PUGAgaW4gdGhlIGBDb25maWdgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBpcyBzdWZmaWNpZW50LiBHb2luZyB0aHJvdWdoIHRoZSBkZXBlbmRlbmNpZXMsIGBCTEtfREVWX0xPT1BgIHJlbGllcyBvbiBgQkxLX0RFVmAsIHdoaWNoIGl0c2VsZiBkZWZhdWx0cyB0byAmIzM5O3kmIzM5OyBpZiBgQkxPQ0tgIGlzIHNldC4gR2l2ZW4gdGhpcywgc3BlY2lmeWluZyBgQkxLX0RFVl9MT09QYCBzZWVtcyBhcHByb3ByaWF0ZS4gSSBkb24mIzM5O3Qgc2VlIGFueSBnbGFyaW5nIG9taXNzaW9ucyBvciBjb25mbGljdHMsIHNvIHRoYXQmIzM5O3MgZ29vZC4KCkp1c3QgZG9pbmcgYSBxdWljayBmaW5hbCBzYW5pdHkgY2hlY2sgaGVyZS4uLiBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gYHRydWVgLCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFycmF5IGNvbnRhaW5zIG9ubHkgYEJMS19ERVZfTE9PUGAsIGFuZCB0aGUgYEZvY3VzU3ltYm9sc2AgYXJyYXkgaGFzIHRoZSBmb3VyIHN5bWJvbHMgSSBtZW50aW9uZWQgYmVmb3JlOyBsb29rcyBnb29kLiBJIGhhdmUgYSBjb25jaXNlIGRlc2NyaXB0aW9uIG9mIHdoYXQgaXMgZ29pbmcgb24gaGVyZS4gTm93IEkgdGhpbmsgSSYjMzk7bSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX0xPT1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtsb19yZWxlYXNlJiMzNDssCiAgICAmIzM0O2xvb3BfY2xyX2ZkJiMzNDssCiAgICAmIzM0O2xvX2lvY3RsJiMzNDssCiAgICAmIzM0O2xvb3BfY29udHJvbF9pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBsb29wIGRldmljZSB0ZWFyZG93biBsb2dpYyBpbiBkcml2ZXJzL2Jsb2NrL2xvb3AuYyB0byBkZWZlciBjbGVhcmluZyB0aGUgYmFja2luZyBmaWxlIGFuZCByZWxlYXNpbmcgcmVzb3VyY2VzIChfX2xvb3BfY2xyX2ZkKSB0byBhIHdvcmtxdWV1ZSBjb250ZXh0IHdoZW4gdGhlIGxvb3AgZGV2aWNlIGlzIGNsb3NlZC4gVGhpcyBpbnRyb2R1Y2VzIG5ldyBjb25jdXJyZW5jeSBoYW5kbGluZywgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgcXVldWUgZHJhaW5pbmcgc2VtYW50aWNzIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgZm9yIHJhY2UgY29uZGl0aW9ucywgZGVhZGxvY2tzLCBhbmQgVUFGcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9MT09QJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bG9fcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtsb29wX2Nscl9mZCYjMzQ7LAogICAgJiMzNDtsb19pb2N0bCYjMzQ7LAogICAgJiMzNDtsb29wX2NvbnRyb2xfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbG9vcCBkZXZpY2UgdGVhcmRvd24gbG9naWMgaW4gZHJpdmVycy9ibG9jay9sb29wLmMgdG8gZGVmZXIgY2xlYXJpbmcgdGhlIGJhY2tpbmcgZmlsZSBhbmQgcmVsZWFzaW5nIHJlc291cmNlcyAoX19sb29wX2Nscl9mZCkgdG8gYSB3b3JrcXVldWUgY29udGV4dCB3aGVuIHRoZSBsb29wIGRldmljZSBpcyBjbG9zZWQuIFRoaXMgaW50cm9kdWNlcyBuZXcgY29uY3VycmVuY3kgaGFuZGxpbmcsIHJlZmVyZW5jZSBjb3VudGluZywgYW5kIHF1ZXVlIGRyYWluaW5nIHNlbWFudGljcyB3aGljaCBzaG91bGQgYmUgZnV6emVkIGZvciByYWNlIGNvbmRpdGlvbnMsIGRlYWRsb2NrcywgYW5kIFVBRnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE4OjAzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTg6MDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBkcml2ZXJzL2Jsb2NrL2xvb3AuYyB0byBkZWZlciBsb29wIGRldmljZSB0ZWFyZG93biAoX19sb29wX2Nscl9mZCkgdG8gYSB3b3JrcXVldWUgaXRlbSAobG9fY2xyX3dvcmspIHJhdGhlciB0aGFuIGV4ZWN1dGluZyBpdCBzeW5jaHJvbm91c2x5IGluIGxvX3JlbGVhc2UuIFRoZSBjaGFuZ2VzIGludm9sdmUgd29ya3F1ZXVlIHNjaGVkdWxpbmcsIHJlZmVyZW5jZSBjb3VudGluZywgYW5kIHN5bmNocm9uaXphdGlvbiAoZHJhaW5fd29ya3F1ZXVlLCBmcmVlemVfcXVldWUsIG11dGV4IGxvY2tpbmcpLiBObyB1bmluaXRpYWxpemVkIGRhdGEgc3RydWN0dXJlcywgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhpcyBwYXRjaCAoc3VjaCBhcyByYWNlIGNvbmRpdGlvbnMsIGRlYWRsb2NrcywgdXNlLWFmdGVyLWZyZWUsIG9yIHJlZmVyZW5jZSBjb3VudCBsZWFrcykgYXJlIGNvdmVyZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgc2FuaXRpemVycywgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiB1bm5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTc4NzU5ZmI3ZGNiOTdjYWRlMTE2MTNiYjAzNjNhMzBiNWFjOTg5MwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDI4IDE3OjU2OjQ3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9sb29wLmMgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuYwppbmRleCA2ZjEyOTc2MDM1YjA5Li5lMjcwM2YwZWU3NWQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuYwpAQCAtNzUsNiAmIzQzOzc1LDcgQEAgc3RydWN0IGxvb3BfZGV2aWNlIHsKIAlzdHJ1Y3QgZ2VuZGlzawkJKmxvX2Rpc2s7CiAJc3RydWN0IG11dGV4CQlsb19tdXRleDsKIAlib29sCQkJaWRyX3Zpc2libGU7CiYjNDM7CXN0cnVjdCB3b3JrX3N0cnVjdAlsb19jbHJfd29yazsKIH07CiAKIHN0cnVjdCBsb29wX2NtZCB7CkBAIC0xMTM0LDEzICYjNDM7MTEzNSwzNSBAQCBzdGF0aWMgaW50IGxvb3BfY29uZmlndXJlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGJsa19tb2RlX3QgbW9kZSwKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbykKJiM0MztzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKJiM0MzsJc3RydWN0IGxvb3BfZGV2aWNlICpsbyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbG9vcF9kZXZpY2UsIGxvX2Nscl93b3JrKTsKJiM0MzsJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBsby0mZ3Q7bG9fZGlzazsKIAlzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTsKIAlzdHJ1Y3QgZmlsZSAqZmlscDsKIAlnZnBfdCBnZnAgPSBsby0mZ3Q7b2xkX2dmcF9tYXNrOwogCWludCBlcnI7CiAKJiM0MzsJLyogU3RlcCAxOiBGbHVzaCBhbGwgb3V0c3RhbmRpbmcgSS9PLCB3aXRob3V0IG9wZW5fbXV0ZXggaGVsZC4gKi8KJiM0MzsJLyoKJiM0MzsJICogTm93IHRoYXQgbG9vcF9xdWV1ZV9ycSgpIHNlZXMgbG8tJmd0O2xvX3N0YXRlICE9IExvX2JvdW5kLAomIzQzOwkgKiB3YWl0IGZvciBhbHJlYWR5IHN0YXJ0ZWQgbG9vcF9xdWV1ZV9ycSgpIHRvIGNvbXBsZXRlLgomIzQzOwkgKi8KJiM0MzsJc3luY2hyb25pemVfcmN1KCk7CiYjNDM7CS8qCiYjNDM7CSAqIE5vdyB0aGF0IG5vIG1vcmUgd29ya3MgYXJlIHNjaGVkdWxlZCBieSBsb29wX3F1ZXVlX3JxKCksCiYjNDM7CSAqIHdhaXQgZm9yIGFscmVhZHkgc2NoZWR1bGVkIHdvcmtzIHRvIGNvbXBsZXRlLgomIzQzOwkgKi8KJiM0MzsJZHJhaW5fd29ya3F1ZXVlKGxvLSZndDt3b3JrcXVldWUpOwomIzQzOwkvKgomIzQzOwkgKiBOb3cgdGhhdCBubyBtb3JlIEFJTyByZXF1ZXN0cyBhcmUgc2NoZWR1bGVkIGJ5IGxvX3J3X2FpbygpLAomIzQzOwkgKiB3YWl0IGZvciBhbHJlYWR5IHN0YXJ0ZWQgQUlPIHRvIGNvbXBsZXRlLgomIzQzOwkgKi8KJiM0MzsJYmxrX21xX3VuZnJlZXplX3F1ZXVlKGxvLSZndDtsb19xdWV1ZSwgYmxrX21xX2ZyZWV6ZV9xdWV1ZShsby0mZ3Q7bG9fcXVldWUpKTsKJiM0MzsKJiM0MzsJLyogU3RlcCAyOiBQZXJmb3JtIHJlbWFpbmluZyBjbGVhbnVwLCB3aXRoIG9wZW5fbXV0ZXggaGVsZC4gKi8KJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2Rpc2stJmd0O29wZW5fbXV0ZXgpOwomIzQzOwogCXNwaW5fbG9ja19pcnEoJmFtcDtsby0mZ3Q7bG9fbG9jayk7CiAJZmlscCA9IGxvLSZndDtsb19iYWNraW5nX2ZpbGU7CiAJbG8tJmd0O2xvX2JhY2tpbmdfZmlsZSA9IE5VTEw7CkBAIC0xMTUxLDEyICYjNDM7MTE3NCw3IEBAIHN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbykKIAlsby0mZ3Q7bG9fc2l6ZWxpbWl0ID0gMDsKIAltZW1zZXQobG8tJmd0O2xvX2ZpbGVfbmFtZSwgMCwgTE9fTkFNRV9TSVpFKTsKIAotCS8qCi0JICogUmVzZXQgdGhlIGJsb2NrIHNpemUgdG8gdGhlIGRlZmF1bHQuCi0JICoKLQkgKiBObyBxdWV1ZSBmcmVlemluZyBuZWVkZWQgYmVjYXVzZSB0aGlzIGlzIGNhbGxlZCBmcm9tIHRoZSBmaW5hbAotCSAqIC0mZ3Q7cmVsZWFzZSBjYWxsIG9ubHksIHNvIHRoZXJlIGNhbiYjMzk7dCBiZSBhbnkgb3V0c3RhbmRpbmcgSS9PLgotCSAqLwomIzQzOwkvKiBSZXNldCB0aGUgYmxvY2sgc2l6ZSB0byB0aGUgZGVmYXVsdC4gKi8KIAlsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGxvLSZndDtsb19xdWV1ZSk7CiAJbGltLmxvZ2ljYWxfYmxvY2tfc2l6ZSA9IFNFQ1RPUl9TSVpFOwogCWxpbS5waHlzaWNhbF9ibG9ja19zaXplID0gU0VDVE9SX1NJWkU7CkBAIC0xMTY4LDggJiM0MzsxMTg2LDYgQEAgc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKQogCS8qIGxldCB1c2VyLXNwYWNlIGtub3cgYWJvdXQgdGhpcyBjaGFuZ2UgKi8KIAlrb2JqZWN0X3VldmVudCgmYW1wO2Rpc2tfdG9fZGV2KGxvLSZndDtsb19kaXNrKS0mZ3Q7a29iaiwgS09CSl9DSEFOR0UpOwogCW1hcHBpbmdfc2V0X2dmcF9tYXNrKGZpbHAtJmd0O2ZfbWFwcGluZywgZ2ZwKTsKLQkvKiBUaGlzIGlzIHNhZmU6IG9wZW4oKSBpcyBzdGlsbCBob2xkaW5nIGEgcmVmZXJlbmNlLiAqLwotCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwogCiAJZGlza19mb3JjZV9tZWRpYV9jaGFuZ2UobG8tJmd0O2xvX2Rpc2spOwogCkBAIC0xMTk5LDEyICYjNDM7MTIxNSwyNCBAQCBzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pCiAJV1JJVEVfT05DRShsby0mZ3Q7bG9fc3RhdGUsIExvX3VuYm91bmQpOwogCW11dGV4X3VubG9jaygmYW1wO2xvLSZndDtsb19tdXRleCk7CiAKJiM0MzsJLyogU3RlcCAzOiBEcm9wIHJlZmNvdW50cywgd2l0aG91dCBvcGVuX211dGV4IGhlbGQuICovCiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2Rpc2stJmd0O29wZW5fbXV0ZXgpOwomIzQzOwomIzQzOwlmcHV0KGZpbHApOwomIzQzOwogCS8qCi0JICogTmVlZCBub3QgaG9sZCBsb19tdXRleCB0byBmcHV0IGJhY2tpbmcgZmlsZS4gQ2FsbGluZyBmcHV0IGhvbGRpbmcKLQkgKiBsb19tdXRleCB0cmlnZ2VycyBhIGNpcmN1bGFyIGxvY2sgZGVwZW5kZW5jeSBwb3NzaWJpbGl0eSB3YXJuaW5nIGFzCi0JICogZnB1dCBjYW4gdGFrZSBvcGVuX211dGV4IHdoaWNoIGlzIHVzdWFsbHkgdGFrZW4gYmVmb3JlIGxvX211dGV4LgomIzQzOwkgKiBEcm9wIGFsbCByZWZlcmVuY2VzIHRoYXQgd291bGQgaGF2ZSBiZWVuIGRyb3BwZWQgYXMgc29vbiBhcwomIzQzOwkgKiByZXR1cm5pbmcgZnJvbSBsb19yZWxlYXNlKCkgYW5kIHJlbGVhc2luZyBkaXNrLSZndDtvcGVuX211dGV4LgogCSAqLwotCWZwdXQoZmlscCk7CiYjNDM7CW1vZHVsZV9wdXQoZGlzay0mZ3Q7Zm9wcy0mZ3Q7b3duZXIpOwomIzQzOwlwdXRfZGV2aWNlKGRpc2tfdG9fZGV2KGRpc2spKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhpcyBpcyBzYWZlOiBmbHVzaF93b3JrKCkgZnJvbSBsb29wX3JlbW92ZSgpIGZyb20gbG9vcF9leGl0KCkgd2FpdHMKJiM0MzsJICogdW50aWwgdGhpcyBmdW5jdGlvbiByZXR1cm5zOyBlZmZlY3RpdmVseSBkcm9wcGluZyB0aGUgZmluYWwgbW9kdWxlCiYjNDM7CSAqIHJlZmVyZW5jZXMgc3luY2hyb25vdXNseS4KJiM0MzsJICovCiYjNDM7CW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwogfQogCiBzdGF0aWMgaW50IGxvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pCkBAIC0xNzY5LDggJiM0MzsxNzk3LDIwIEBAIHN0YXRpYyB2b2lkIGxvX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2spCiAJbmVlZF9jbGVhciA9IChsby0mZ3Q7bG9fc3RhdGUgPT0gTG9fcnVuZG93bik7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7bG8tJmd0O2xvX211dGV4KTsKIAotCWlmIChuZWVkX2NsZWFyKQotCQlfX2xvb3BfY2xyX2ZkKGxvKTsKJiM0MzsJLyoKJiM0MzsJICogSW4gb3JkZXIgdG8gZmx1c2ggcGVuZGluZyBJL08gcmVxdWVzdHMgYmVmb3JlIGNsZWFyaW5nIHRoZSBiYWNraW5nCiYjNDM7CSAqIGRldmljZSwgZGVmZXIgX19sb29wX2Nscl9mZCgpIHRvIFdRIGNvbnRleHQuIFRoZSBMb19ydW5kb3duIHN0YXRlCiYjNDM7CSAqIGd1YXJhbnRlZXMgdGhhdCBsb19vcGVuKCkgd2lsbCBmYWlsIHdpdGggLUVOWElPLgomIzQzOwkgKi8KJiM0MzsJaWYgKG5lZWRfY2xlYXIpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBHcmFiIGFsbCByZWZlcmVuY2VzIHRoYXQgd2lsbCBiZSBkcm9wcGVkIGFzIHNvb24gYXMKJiM0MzsJCSAqIHJldHVybmluZyBmcm9tIGxvX3JlbGVhc2UoKSBhbmQgcmVsZWFzaW5nIGRpc2stJmd0O29wZW5fbXV0ZXguCiYjNDM7CQkgKi8KJiM0MzsJCWdldF9kZXZpY2UoZGlza190b19kZXYoZGlzaykpOwomIzQzOwkJX19tb2R1bGVfZ2V0KGRpc2stJmd0O2ZvcHMtJmd0O293bmVyKTsKJiM0MzsJCXF1ZXVlX3dvcmsoc3lzdGVtX2xvbmdfd3EsICZhbXA7bG8tJmd0O2xvX2Nscl93b3JrKTsKJiM0MzsJfQogfQogCiBzdGF0aWMgdm9pZCBsb19mcmVlX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spCkBAIC0yMDM0LDYgJiM0MzsyMDc0LDcgQEAgc3RhdGljIGludCBsb29wX2FkZChpbnQgaSkKIAlsbyA9IGt6YWxsb2Nfb2JqKCpsbyk7CiAJaWYgKCFsbykKIAkJZ290byBvdXQ7CiYjNDM7CUlOSVRfV09SSygmYW1wO2xvLSZndDtsb19jbHJfd29yaywgX19sb29wX2Nscl9mZCk7CiAJbG8tJmd0O3dvcmtlcl90cmVlID0gUkJfUk9PVDsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO2xvLSZndDtpZGxlX3dvcmtlcl9saXN0KTsKIAl0aW1lcl9zZXR1cCgmYW1wO2xvLSZndDt0aW1lciwgbG9vcF9mcmVlX2lkbGVfd29ya2Vyc190aW1lciwgVElNRVJfREVGRVJSQUJMRSk7CkBAIC0yMTM4LDYgJiM0MzsyMTc5LDkgQEAgc3RhdGljIGludCBsb29wX2FkZChpbnQgaSkKIAogc3RhdGljIHZvaWQgbG9vcF9yZW1vdmUoc3RydWN0IGxvb3BfZGV2aWNlICpsbykKIHsKJiM0MzsJLyogV2FpdCBmb3IgX19sb29wX2Nscl9mZCgpIHRvIGNvbXBsZXRlLiAqLwomIzQzOwlmbHVzaF93b3JrKCZhbXA7bG8tJmd0O2xvX2Nscl93b3JrKTsKJiM0MzsKIAkvKiBNYWtlIHRoaXMgbG9vcCBkZXZpY2UgdW5yZWFjaGFibGUgZnJvbSBwYXRobmFtZS4gKi8KIAlkZWxfZ2VuZGlzayhsby0mZ3Q7bG9fZGlzayk7CiAJYmxrX21xX2ZyZWVfdGFnX3NldCgmYW1wO2xvLSZndDt0YWdfc2V0KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE4OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2ODQKCQkJCQkJCW91dHB1dDogMTczCgkJCQkJCQl0aG91Z2h0czogNzg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBBc3Nlc3NtZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgaXQgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBydW4uIEZyb20gd2hhdCBJIHNlZSwgaXQmIzM5O3MgZm9jdXNlZCBvbiByZWZhY3RvcmluZyB0aGUgYGxvb3BgIGRyaXZlciwgc3BlY2lmaWNhbGx5IGBkcml2ZXJzL2Jsb2NrL2xvb3AuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2VzIGlzIGFzeW5jaHJvbm91cyBjbGVhbnVwIHVzaW5nIGEgd29ya3F1ZXVlIGFuZCBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIGxvY2tpbmcgYW5kIHJlZmNvdW50aW5nLgoKVGhlIHBhdGNoIGludHJvZHVjZXMgYHN0cnVjdCB3b3JrX3N0cnVjdCBsb19jbHJfd29ya2Agd2l0aGluIHRoZSBgc3RydWN0IGxvb3BfZGV2aWNlYC4gVGhlIG1vc3QgcmVsZXZhbnQgY2hhbmdlIGlzIHRoZSBzaGlmdCBmcm9tIHN5bmNocm9ub3VzIGNsZWFudXAgaW4gYGxvX3JlbGVhc2VgICh3aGljaCB3YXMgY2FsbGVkIHVuZGVyIGBvcGVuX211dGV4YCkgdG8gYW4gYXN5bmNocm9ub3VzIGFwcHJvYWNoIHVzaW5nIGBzeXN0ZW1fbG9uZ193cWAuIFdlIG5vdyBoYXZlIGEgYF9fbG9vcF9jbHJfZmRgIHdvcmsgaGFuZGxlciB0aGF0IGNsZWFucyB0aGluZ3MgdXAgKmFmdGVyKiByZWxlYXNpbmcgdGhlIGxvY2sgYW5kIGRvaW5nIHRoZSByZXF1aXJlZCByZWZjb3VudGluZyBhbmQgZGV2aWNlIGxpZmVjeWNsZSB3b3JrLiBUaGUgcGF0Y2ggYWxzbyBhZGRzIHdvcmsgaW5pdGlhbGl6YXRpb24gaW4gYGxvb3BfYWRkYCB3aXRoIGBJTklUX1dPUksoJmFtcDtsby0mZ3Q7bG9fY2xyX3dvcmssIF9fbG9vcF9jbHJfZmQpO2AgYW5kIGZsdXNoaW5nIGluIGBsb29wX3JlbW92ZWAgdXNpbmcgYGZsdXNoX3dvcmsoJmFtcDtsby0mZ3Q7bG9fY2xyX3dvcmspO2AuCgpUaGUgY2hhbmdlcyBhcmUgYWxsIGFib3V0IGNvbmN1cnJlbmN5LCBzeW5jaHJvbml6YXRpb24sIHdvcmtxdWV1ZXMsIHJlZmNvdW50aW5nLCBhbmQgbG9ja2luZyBtZWNoYW5pc21zLCBkZWZlcnJpbmcgY2xlYW51cCB0byBhdm9pZCBkZWFkbG9ja3Mgb3IgYmxvY2tpbmcuIFRoZXJlJiMzOTtzIG5vIGludHJvZHVjdGlvbiBvZiBuZXcgYnVmZmVycywgdXNlciBjb3BpZXMsIGlvY3RscyByZXR1cm5pbmcgZGF0YSwgbm8gbGVuZ3RoIG9yIGJvdW5kcyBjaGVja3MgYmVpbmcgY2hhbmdlZC4gSXQmIzM5O3Mgc2FmZSB0byBzYXkgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGUgd29yayBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQgY29ycmVjdGx5IGFmdGVyIGFsbG9jYXRpb24sIGFuZCB0aGUgY29udGV4dCBvZiB0aGUgd29yayBpdHNlbGYgYXBwZWFycyBzb3VuZC4KCk5vdywgY29uc2lkZXJpbmcgdGhlIEtNU0FOL0tBU0FOIGRpc3RpbmN0aW9uLCB0aGlzIGlzIHdoZXJlIGl0IGdldHMgY3J1Y2lhbC4gS01TQU4gaXMgZm9yIGRldGVjdGluZyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mb3JtYXRpb24gbGVha3MuIEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzIGFyZSBwZXJmZWN0bHkgc3VpdGVkIHRvIGRldGVjdCB0aGUgdHlwZSBvZiBpc3N1ZXMgaGVyZSAtIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZXMsIGludmFsaWQgZnJlZXMsIGFuZCBsb2NraW5nIGJ1Z3MuICoqVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwgTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4qKgoKVGhlcmVmb3JlLCBJIHRoaW5rIHRoaXMgcGF0Y2ggaXMgZmluZS4gTmVlZHNLTVNBTiBzaG91bGQgYmUgZmFsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGRyaXZlcnMvYmxvY2svbG9vcC5jIHRvIGRlZmVyIGxvb3AgZGV2aWNlIHRlYXJkb3duIChfX2xvb3BfY2xyX2ZkKSB0byBhIHdvcmtxdWV1ZSBpdGVtIChsb19jbHJfd29yaykgcmF0aGVyIHRoYW4gZXhlY3V0aW5nIGl0IHN5bmNocm9ub3VzbHkgaW4gbG9fcmVsZWFzZS4gVGhlIGNoYW5nZXMgaW52b2x2ZSB3b3JrcXVldWUgc2NoZWR1bGluZywgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgc3luY2hyb25pemF0aW9uIChkcmFpbl93b3JrcXVldWUsIGZyZWV6ZV9xdWV1ZSwgbXV0ZXggbG9ja2luZykuIE5vIHVuaW5pdGlhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmVzLCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIEFueSBwb3RlbnRpYWwgYnVncyByZXN1bHRpbmcgZnJvbSB0aGlzIHBhdGNoIChzdWNoIGFzIHJhY2UgY29uZGl0aW9ucywgZGVhZGxvY2tzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgcmVmZXJlbmNlIGNvdW50IGxlYWtzKSBhcmUgY292ZXJlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBzYW5pdGl6ZXJzLCBtYWtpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIHVubmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZHJpdmVycy9ibG9jay9sb29wLmMgdG8gZGVmZXIgbG9vcCBkZXZpY2UgdGVhcmRvd24gKF9fbG9vcF9jbHJfZmQpIHRvIGEgd29ya3F1ZXVlIGl0ZW0gKGxvX2Nscl93b3JrKSByYXRoZXIgdGhhbiBleGVjdXRpbmcgaXQgc3luY2hyb25vdXNseSBpbiBsb19yZWxlYXNlLiBUaGUgY2hhbmdlcyBpbnZvbHZlIHdvcmtxdWV1ZSBzY2hlZHVsaW5nLCByZWZlcmVuY2UgY291bnRpbmcsIGFuZCBzeW5jaHJvbml6YXRpb24gKGRyYWluX3dvcmtxdWV1ZSwgZnJlZXplX3F1ZXVlLCBtdXRleCBsb2NraW5nKS4gTm8gdW5pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZXMsIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQW55IHBvdGVudGlhbCBidWdzIHJlc3VsdGluZyBmcm9tIHRoaXMgcGF0Y2ggKHN1Y2ggYXMgcmFjZSBjb25kaXRpb25zLCBkZWFkbG9ja3MsIHVzZS1hZnRlci1mcmVlLCBvciByZWZlcmVuY2UgY291bnQgbGVha3MpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIHNhbml0aXplcnMsIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjU2OjQ5LjMyNTU3ODk3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDAwMjAxNTUyNDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTE9PUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxvX3JlbGVhc2VcIixcbiAgICBcImxvb3BfY2xyX2ZkXCIsXG4gICAgXCJsb19pb2N0bFwiLFxuICAgIFwibG9vcF9jb250cm9sX2lvY3RsXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkcml2ZXJzL2Jsb2NrL2xvb3AuYyB0byBkZWZlciBsb29wIGRldmljZSB0ZWFyZG93biAoX19sb29wX2Nscl9mZCkgdG8gYSB3b3JrcXVldWUgaXRlbSAobG9fY2xyX3dvcmspIHJhdGhlciB0aGFuIGV4ZWN1dGluZyBpdCBzeW5jaHJvbm91c2x5IGluIGxvX3JlbGVhc2UuIFRoZSBjaGFuZ2VzIGludm9sdmUgd29ya3F1ZXVlIHNjaGVkdWxpbmcsIHJlZmVyZW5jZSBjb3VudGluZywgYW5kIHN5bmNocm9uaXphdGlvbiAoZHJhaW5fd29ya3F1ZXVlLCBmcmVlemVfcXVldWUsIG11dGV4IGxvY2tpbmcpLiBObyB1bmluaXRpYWxpemVkIGRhdGEgc3RydWN0dXJlcywgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhpcyBwYXRjaCAoc3VjaCBhcyByYWNlIGNvbmRpdGlvbnMsIGRlYWRsb2NrcywgdXNlLWFmdGVyLWZyZWUsIG9yIHJlZmVyZW5jZSBjb3VudCBsZWFrcykgYXJlIGNvdmVyZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgc2FuaXRpemVycywgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiB1bm5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBsb29wIGRldmljZSB0ZWFyZG93biBsb2dpYyBpbiBkcml2ZXJzL2Jsb2NrL2xvb3AuYyB0byBkZWZlciBjbGVhcmluZyB0aGUgYmFja2luZyBmaWxlIGFuZCByZWxlYXNpbmcgcmVzb3VyY2VzIChfX2xvb3BfY2xyX2ZkKSB0byBhIHdvcmtxdWV1ZSBjb250ZXh0IHdoZW4gdGhlIGxvb3AgZGV2aWNlIGlzIGNsb3NlZC4gVGhpcyBpbnRyb2R1Y2VzIG5ldyBjb25jdXJyZW5jeSBoYW5kbGluZywgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgcXVldWUgZHJhaW5pbmcgc2VtYW50aWNzIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgZm9yIHJhY2UgY29uZGl0aW9ucywgZGVhZGxvY2tzLCBhbmQgVUFGcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTc6NTY6NDkuMzI1NTgzMjdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzOTI1NTk3OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxNzg3NTlmYjdkY2I5N2NhZGUxMTYxM2JiMDM2M2EzMGI1YWM5ODkzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDI4IDE3OjU2OjQ3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbG9vcC5jIGIvZHJpdmVycy9ibG9jay9sb29wLmNcXG5pbmRleCA2ZjEyOTc2MDM1YjA5Li5lMjcwM2YwZWU3NWQ3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jXFxuKysrIGIvZHJpdmVycy9ibG9jay9sb29wLmNcXG5AQCAtNzUsNiArNzUsNyBAQCBzdHJ1Y3QgbG9vcF9kZXZpY2Uge1xcbiBcXHRzdHJ1Y3QgZ2VuZGlza1xcdFxcdCpsb19kaXNrO1xcbiBcXHRzdHJ1Y3QgbXV0ZXhcXHRcXHRsb19tdXRleDtcXG4gXFx0Ym9vbFxcdFxcdFxcdGlkcl92aXNpYmxlO1xcbitcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcXHRsb19jbHJfd29yaztcXG4gfTtcXG4gXFxuIHN0cnVjdCBsb29wX2NtZCB7XFxuQEAgLTExMzQsMTMgKzExMzUsMzUgQEAgc3RhdGljIGludCBsb29wX2NvbmZpZ3VyZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBibGtfbW9kZV90IG1vZGUsXFxuIFxcdHJldHVybiBlcnJvcjtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbitzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4ge1xcbitcXHRzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBsb29wX2RldmljZSwgbG9fY2xyX3dvcmspO1xcbitcXHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGxvLVxcdTAwM2Vsb19kaXNrO1xcbiBcXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtcXG4gXFx0c3RydWN0IGZpbGUgKmZpbHA7XFxuIFxcdGdmcF90IGdmcCA9IGxvLVxcdTAwM2VvbGRfZ2ZwX21hc2s7XFxuIFxcdGludCBlcnI7XFxuIFxcbitcXHQvKiBTdGVwIDE6IEZsdXNoIGFsbCBvdXRzdGFuZGluZyBJL08sIHdpdGhvdXQgb3Blbl9tdXRleCBoZWxkLiAqL1xcbitcXHQvKlxcbitcXHQgKiBOb3cgdGhhdCBsb29wX3F1ZXVlX3JxKCkgc2VlcyBsby1cXHUwMDNlbG9fc3RhdGUgIT0gTG9fYm91bmQsXFxuK1xcdCAqIHdhaXQgZm9yIGFscmVhZHkgc3RhcnRlZCBsb29wX3F1ZXVlX3JxKCkgdG8gY29tcGxldGUuXFxuK1xcdCAqL1xcbitcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4rXFx0LypcXG4rXFx0ICogTm93IHRoYXQgbm8gbW9yZSB3b3JrcyBhcmUgc2NoZWR1bGVkIGJ5IGxvb3BfcXVldWVfcnEoKSxcXG4rXFx0ICogd2FpdCBmb3IgYWxyZWFkeSBzY2hlZHVsZWQgd29ya3MgdG8gY29tcGxldGUuXFxuK1xcdCAqL1xcbitcXHRkcmFpbl93b3JrcXVldWUobG8tXFx1MDAzZXdvcmtxdWV1ZSk7XFxuK1xcdC8qXFxuK1xcdCAqIE5vdyB0aGF0IG5vIG1vcmUgQUlPIHJlcXVlc3RzIGFyZSBzY2hlZHVsZWQgYnkgbG9fcndfYWlvKCksXFxuK1xcdCAqIHdhaXQgZm9yIGFscmVhZHkgc3RhcnRlZCBBSU8gdG8gY29tcGxldGUuXFxuK1xcdCAqL1xcbitcXHRibGtfbXFfdW5mcmVlemVfcXVldWUobG8tXFx1MDAzZWxvX3F1ZXVlLCBibGtfbXFfZnJlZXplX3F1ZXVlKGxvLVxcdTAwM2Vsb19xdWV1ZSkpO1xcbitcXG4rXFx0LyogU3RlcCAyOiBQZXJmb3JtIHJlbWFpbmluZyBjbGVhbnVwLCB3aXRoIG9wZW5fbXV0ZXggaGVsZC4gKi9cXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGlzay1cXHUwMDNlb3Blbl9tdXRleCk7XFxuK1xcbiBcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZsby1cXHUwMDNlbG9fbG9jayk7XFxuIFxcdGZpbHAgPSBsby1cXHUwMDNlbG9fYmFja2luZ19maWxlO1xcbiBcXHRsby1cXHUwMDNlbG9fYmFja2luZ19maWxlID0gTlVMTDtcXG5AQCAtMTE1MSwxMiArMTE3NCw3IEBAIHN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG4gXFx0bG8tXFx1MDAzZWxvX3NpemVsaW1pdCA9IDA7XFxuIFxcdG1lbXNldChsby1cXHUwMDNlbG9fZmlsZV9uYW1lLCAwLCBMT19OQU1FX1NJWkUpO1xcbiBcXG4tXFx0LypcXG4tXFx0ICogUmVzZXQgdGhlIGJsb2NrIHNpemUgdG8gdGhlIGRlZmF1bHQuXFxuLVxcdCAqXFxuLVxcdCAqIE5vIHF1ZXVlIGZyZWV6aW5nIG5lZWRlZCBiZWNhdXNlIHRoaXMgaXMgY2FsbGVkIGZyb20gdGhlIGZpbmFsXFxuLVxcdCAqIC1cXHUwMDNlcmVsZWFzZSBjYWxsIG9ubHksIHNvIHRoZXJlIGNhbid0IGJlIGFueSBvdXRzdGFuZGluZyBJL08uXFxuLVxcdCAqL1xcbitcXHQvKiBSZXNldCB0aGUgYmxvY2sgc2l6ZSB0byB0aGUgZGVmYXVsdC4gKi9cXG4gXFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cXHUwMDNlbG9fcXVldWUpO1xcbiBcXHRsaW0ubG9naWNhbF9ibG9ja19zaXplID0gU0VDVE9SX1NJWkU7XFxuIFxcdGxpbS5waHlzaWNhbF9ibG9ja19zaXplID0gU0VDVE9SX1NJWkU7XFxuQEAgLTExNjgsOCArMTE4Niw2IEBAIHN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG4gXFx0LyogbGV0IHVzZXItc3BhY2Uga25vdyBhYm91dCB0aGlzIGNoYW5nZSAqL1xcbiBcXHRrb2JqZWN0X3VldmVudChcXHUwMDI2ZGlza190b19kZXYobG8tXFx1MDAzZWxvX2Rpc2spLVxcdTAwM2Vrb2JqLCBLT0JKX0NIQU5HRSk7XFxuIFxcdG1hcHBpbmdfc2V0X2dmcF9tYXNrKGZpbHAtXFx1MDAzZWZfbWFwcGluZywgZ2ZwKTtcXG4tXFx0LyogVGhpcyBpcyBzYWZlOiBvcGVuKCkgaXMgc3RpbGwgaG9sZGluZyBhIHJlZmVyZW5jZS4gKi9cXG4tXFx0bW9kdWxlX3B1dChUSElTX01PRFVMRSk7XFxuIFxcbiBcXHRkaXNrX2ZvcmNlX21lZGlhX2NoYW5nZShsby1cXHUwMDNlbG9fZGlzayk7XFxuIFxcbkBAIC0xMTk5LDEyICsxMjE1LDI0IEBAIHN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG4gXFx0V1JJVEVfT05DRShsby1cXHUwMDNlbG9fc3RhdGUsIExvX3VuYm91bmQpO1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNmxvLVxcdTAwM2Vsb19tdXRleCk7XFxuIFxcbitcXHQvKiBTdGVwIDM6IERyb3AgcmVmY291bnRzLCB3aXRob3V0IG9wZW5fbXV0ZXggaGVsZC4gKi9cXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkaXNrLVxcdTAwM2VvcGVuX211dGV4KTtcXG4rXFxuK1xcdGZwdXQoZmlscCk7XFxuK1xcbiBcXHQvKlxcbi1cXHQgKiBOZWVkIG5vdCBob2xkIGxvX211dGV4IHRvIGZwdXQgYmFja2luZyBmaWxlLiBDYWxsaW5nIGZwdXQgaG9sZGluZ1xcbi1cXHQgKiBsb19tdXRleCB0cmlnZ2VycyBhIGNpcmN1bGFyIGxvY2sgZGVwZW5kZW5jeSBwb3NzaWJpbGl0eSB3YXJuaW5nIGFzXFxuLVxcdCAqIGZwdXQgY2FuIHRha2Ugb3Blbl9tdXRleCB3aGljaCBpcyB1c3VhbGx5IHRha2VuIGJlZm9yZSBsb19tdXRleC5cXG4rXFx0ICogRHJvcCBhbGwgcmVmZXJlbmNlcyB0aGF0IHdvdWxkIGhhdmUgYmVlbiBkcm9wcGVkIGFzIHNvb24gYXNcXG4rXFx0ICogcmV0dXJuaW5nIGZyb20gbG9fcmVsZWFzZSgpIGFuZCByZWxlYXNpbmcgZGlzay1cXHUwMDNlb3Blbl9tdXRleC5cXG4gXFx0ICovXFxuLVxcdGZwdXQoZmlscCk7XFxuK1xcdG1vZHVsZV9wdXQoZGlzay1cXHUwMDNlZm9wcy1cXHUwMDNlb3duZXIpO1xcbitcXHRwdXRfZGV2aWNlKGRpc2tfdG9fZGV2KGRpc2spKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFRoaXMgaXMgc2FmZTogZmx1c2hfd29yaygpIGZyb20gbG9vcF9yZW1vdmUoKSBmcm9tIGxvb3BfZXhpdCgpIHdhaXRzXFxuK1xcdCAqIHVudGlsIHRoaXMgZnVuY3Rpb24gcmV0dXJuczsgZWZmZWN0aXZlbHkgZHJvcHBpbmcgdGhlIGZpbmFsIG1vZHVsZVxcbitcXHQgKiByZWZlcmVuY2VzIHN5bmNocm9ub3VzbHkuXFxuK1xcdCAqL1xcbitcXHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBsb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbkBAIC0xNzY5LDggKzE3OTcsMjAgQEAgc3RhdGljIHZvaWQgbG9fcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4gXFx0bmVlZF9jbGVhciA9IChsby1cXHUwMDNlbG9fc3RhdGUgPT0gTG9fcnVuZG93bik7XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2bG8tXFx1MDAzZWxvX211dGV4KTtcXG4gXFxuLVxcdGlmIChuZWVkX2NsZWFyKVxcbi1cXHRcXHRfX2xvb3BfY2xyX2ZkKGxvKTtcXG4rXFx0LypcXG4rXFx0ICogSW4gb3JkZXIgdG8gZmx1c2ggcGVuZGluZyBJL08gcmVxdWVzdHMgYmVmb3JlIGNsZWFyaW5nIHRoZSBiYWNraW5nXFxuK1xcdCAqIGRldmljZSwgZGVmZXIgX19sb29wX2Nscl9mZCgpIHRvIFdRIGNvbnRleHQuIFRoZSBMb19ydW5kb3duIHN0YXRlXFxuK1xcdCAqIGd1YXJhbnRlZXMgdGhhdCBsb19vcGVuKCkgd2lsbCBmYWlsIHdpdGggLUVOWElPLlxcbitcXHQgKi9cXG4rXFx0aWYgKG5lZWRfY2xlYXIpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogR3JhYiBhbGwgcmVmZXJlbmNlcyB0aGF0IHdpbGwgYmUgZHJvcHBlZCBhcyBzb29uIGFzXFxuK1xcdFxcdCAqIHJldHVybmluZyBmcm9tIGxvX3JlbGVhc2UoKSBhbmQgcmVsZWFzaW5nIGRpc2stXFx1MDAzZW9wZW5fbXV0ZXguXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRnZXRfZGV2aWNlKGRpc2tfdG9fZGV2KGRpc2spKTtcXG4rXFx0XFx0X19tb2R1bGVfZ2V0KGRpc2stXFx1MDAzZWZvcHMtXFx1MDAzZW93bmVyKTtcXG4rXFx0XFx0cXVldWVfd29yayhzeXN0ZW1fbG9uZ193cSwgXFx1MDAyNmxvLVxcdTAwM2Vsb19jbHJfd29yayk7XFxuK1xcdH1cXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgbG9fZnJlZV9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbkBAIC0yMDM0LDYgKzIwNzQsNyBAQCBzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKVxcbiBcXHRsbyA9IGt6YWxsb2Nfb2JqKCpsbyk7XFxuIFxcdGlmICghbG8pXFxuIFxcdFxcdGdvdG8gb3V0O1xcbitcXHRJTklUX1dPUksoXFx1MDAyNmxvLVxcdTAwM2Vsb19jbHJfd29yaywgX19sb29wX2Nscl9mZCk7XFxuIFxcdGxvLVxcdTAwM2V3b3JrZXJfdHJlZSA9IFJCX1JPT1Q7XFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZsby1cXHUwMDNlaWRsZV93b3JrZXJfbGlzdCk7XFxuIFxcdHRpbWVyX3NldHVwKFxcdTAwMjZsby1cXHUwMDNldGltZXIsIGxvb3BfZnJlZV9pZGxlX3dvcmtlcnNfdGltZXIsIFRJTUVSX0RFRkVSUkFCTEUpO1xcbkBAIC0yMTM4LDYgKzIxNzksOSBAQCBzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKVxcbiBcXG4gc3RhdGljIHZvaWQgbG9vcF9yZW1vdmUoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG4ge1xcbitcXHQvKiBXYWl0IGZvciBfX2xvb3BfY2xyX2ZkKCkgdG8gY29tcGxldGUuICovXFxuK1xcdGZsdXNoX3dvcmsoXFx1MDAyNmxvLVxcdTAwM2Vsb19jbHJfd29yayk7XFxuK1xcbiBcXHQvKiBNYWtlIHRoaXMgbG9vcCBkZXZpY2UgdW5yZWFjaGFibGUgZnJvbSBwYXRobmFtZS4gKi9cXG4gXFx0ZGVsX2dlbmRpc2sobG8tXFx1MDAzZWxvX2Rpc2spO1xcbiBcXHRibGtfbXFfZnJlZV90YWdfc2V0KFxcdTAwMjZsby1cXHUwMDNldGFnX3NldCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjU2OjUwLjcxODgwNTQ0N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzgzODI5ODIzMDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTE9PUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxvX3JlbGVhc2VcIixcbiAgICBcImxvb3BfY2xyX2ZkXCIsXG4gICAgXCJsb19pb2N0bFwiLFxuICAgIFwibG9vcF9jb250cm9sX2lvY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbG9vcCBkZXZpY2UgdGVhcmRvd24gbG9naWMgaW4gZHJpdmVycy9ibG9jay9sb29wLmMgdG8gZGVmZXIgY2xlYXJpbmcgdGhlIGJhY2tpbmcgZmlsZSBhbmQgcmVsZWFzaW5nIHJlc291cmNlcyAoX19sb29wX2Nscl9mZCkgdG8gYSB3b3JrcXVldWUgY29udGV4dCB3aGVuIHRoZSBsb29wIGRldmljZSBpcyBjbG9zZWQuIFRoaXMgaW50cm9kdWNlcyBuZXcgY29uY3VycmVuY3kgaGFuZGxpbmcsIHJlZmVyZW5jZSBjb3VudGluZywgYW5kIHF1ZXVlIGRyYWluaW5nIHNlbWFudGljcyB3aGljaCBzaG91bGQgYmUgZnV6emVkIGZvciByYWNlIGNvbmRpdGlvbnMsIGRlYWRsb2NrcywgYW5kIFVBRnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDE3ODc1OWZiN2RjYjk3Y2FkZTExNjEzYmIwMzYzYTMwYjVhYzk4OTNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyOCAxNzo1Njo0NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbG9vcC5jIGIvZHJpdmVycy9ibG9jay9sb29wLmNcbmluZGV4IDZmMTI5NzYwMzViMDkuLmUyNzAzZjBlZTc1ZDcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuKysrIGIvZHJpdmVycy9ibG9jay9sb29wLmNcbkBAIC03NSw2ICs3NSw3IEBAIHN0cnVjdCBsb29wX2RldmljZSB7XG4gXHRzdHJ1Y3QgZ2VuZGlza1x0XHQqbG9fZGlzaztcbiBcdHN0cnVjdCBtdXRleFx0XHRsb19tdXRleDtcbiBcdGJvb2xcdFx0XHRpZHJfdmlzaWJsZTtcbitcdHN0cnVjdCB3b3JrX3N0cnVjdFx0bG9fY2xyX3dvcms7XG4gfTtcbiBcbiBzdHJ1Y3QgbG9vcF9jbWQge1xuQEAgLTExMzQsMTMgKzExMzUsMzUgQEAgc3RhdGljIGludCBsb29wX2NvbmZpZ3VyZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBibGtfbW9kZV90IG1vZGUsXG4gXHRyZXR1cm4gZXJyb3I7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbitzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4rXHRzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBsb29wX2RldmljZSwgbG9fY2xyX3dvcmspO1xuK1x0c3RydWN0IGdlbmRpc2sgKmRpc2sgPSBsby1cdTAwM2Vsb19kaXNrO1xuIFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07XG4gXHRzdHJ1Y3QgZmlsZSAqZmlscDtcbiBcdGdmcF90IGdmcCA9IGxvLVx1MDAzZW9sZF9nZnBfbWFzaztcbiBcdGludCBlcnI7XG4gXG4rXHQvKiBTdGVwIDE6IEZsdXNoIGFsbCBvdXRzdGFuZGluZyBJL08sIHdpdGhvdXQgb3Blbl9tdXRleCBoZWxkLiAqL1xuK1x0LypcbitcdCAqIE5vdyB0aGF0IGxvb3BfcXVldWVfcnEoKSBzZWVzIGxvLVx1MDAzZWxvX3N0YXRlICE9IExvX2JvdW5kLFxuK1x0ICogd2FpdCBmb3IgYWxyZWFkeSBzdGFydGVkIGxvb3BfcXVldWVfcnEoKSB0byBjb21wbGV0ZS5cbitcdCAqL1xuK1x0c3luY2hyb25pemVfcmN1KCk7XG4rXHQvKlxuK1x0ICogTm93IHRoYXQgbm8gbW9yZSB3b3JrcyBhcmUgc2NoZWR1bGVkIGJ5IGxvb3BfcXVldWVfcnEoKSxcbitcdCAqIHdhaXQgZm9yIGFscmVhZHkgc2NoZWR1bGVkIHdvcmtzIHRvIGNvbXBsZXRlLlxuK1x0ICovXG4rXHRkcmFpbl93b3JrcXVldWUobG8tXHUwMDNld29ya3F1ZXVlKTtcbitcdC8qXG4rXHQgKiBOb3cgdGhhdCBubyBtb3JlIEFJTyByZXF1ZXN0cyBhcmUgc2NoZWR1bGVkIGJ5IGxvX3J3X2FpbygpLFxuK1x0ICogd2FpdCBmb3IgYWxyZWFkeSBzdGFydGVkIEFJTyB0byBjb21wbGV0ZS5cbitcdCAqL1xuK1x0YmxrX21xX3VuZnJlZXplX3F1ZXVlKGxvLVx1MDAzZWxvX3F1ZXVlLCBibGtfbXFfZnJlZXplX3F1ZXVlKGxvLVx1MDAzZWxvX3F1ZXVlKSk7XG4rXG4rXHQvKiBTdGVwIDI6IFBlcmZvcm0gcmVtYWluaW5nIGNsZWFudXAsIHdpdGggb3Blbl9tdXRleCBoZWxkLiAqL1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZkaXNrLVx1MDAzZW9wZW5fbXV0ZXgpO1xuK1xuIFx0c3Bpbl9sb2NrX2lycShcdTAwMjZsby1cdTAwM2Vsb19sb2NrKTtcbiBcdGZpbHAgPSBsby1cdTAwM2Vsb19iYWNraW5nX2ZpbGU7XG4gXHRsby1cdTAwM2Vsb19iYWNraW5nX2ZpbGUgPSBOVUxMO1xuQEAgLTExNTEsMTIgKzExNzQsNyBAQCBzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4gXHRsby1cdTAwM2Vsb19zaXplbGltaXQgPSAwO1xuIFx0bWVtc2V0KGxvLVx1MDAzZWxvX2ZpbGVfbmFtZSwgMCwgTE9fTkFNRV9TSVpFKTtcbiBcbi1cdC8qXG4tXHQgKiBSZXNldCB0aGUgYmxvY2sgc2l6ZSB0byB0aGUgZGVmYXVsdC5cbi1cdCAqXG4tXHQgKiBObyBxdWV1ZSBmcmVlemluZyBuZWVkZWQgYmVjYXVzZSB0aGlzIGlzIGNhbGxlZCBmcm9tIHRoZSBmaW5hbFxuLVx0ICogLVx1MDAzZXJlbGVhc2UgY2FsbCBvbmx5LCBzbyB0aGVyZSBjYW4ndCBiZSBhbnkgb3V0c3RhbmRpbmcgSS9PLlxuLVx0ICovXG4rXHQvKiBSZXNldCB0aGUgYmxvY2sgc2l6ZSB0byB0aGUgZGVmYXVsdC4gKi9cbiBcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tXHUwMDNlbG9fcXVldWUpO1xuIFx0bGltLmxvZ2ljYWxfYmxvY2tfc2l6ZSA9IFNFQ1RPUl9TSVpFO1xuIFx0bGltLnBoeXNpY2FsX2Jsb2NrX3NpemUgPSBTRUNUT1JfU0laRTtcbkBAIC0xMTY4LDggKzExODYsNiBAQCBzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4gXHQvKiBsZXQgdXNlci1zcGFjZSBrbm93IGFib3V0IHRoaXMgY2hhbmdlICovXG4gXHRrb2JqZWN0X3VldmVudChcdTAwMjZkaXNrX3RvX2Rldihsby1cdTAwM2Vsb19kaXNrKS1cdTAwM2Vrb2JqLCBLT0JKX0NIQU5HRSk7XG4gXHRtYXBwaW5nX3NldF9nZnBfbWFzayhmaWxwLVx1MDAzZWZfbWFwcGluZywgZ2ZwKTtcbi1cdC8qIFRoaXMgaXMgc2FmZTogb3BlbigpIGlzIHN0aWxsIGhvbGRpbmcgYSByZWZlcmVuY2UuICovXG4tXHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcbiBcbiBcdGRpc2tfZm9yY2VfbWVkaWFfY2hhbmdlKGxvLVx1MDAzZWxvX2Rpc2spO1xuIFxuQEAgLTExOTksMTIgKzEyMTUsMjQgQEAgc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuIFx0V1JJVEVfT05DRShsby1cdTAwM2Vsb19zdGF0ZSwgTG9fdW5ib3VuZCk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2bG8tXHUwMDNlbG9fbXV0ZXgpO1xuIFxuK1x0LyogU3RlcCAzOiBEcm9wIHJlZmNvdW50cywgd2l0aG91dCBvcGVuX211dGV4IGhlbGQuICovXG4rXHRtdXRleF91bmxvY2soXHUwMDI2ZGlzay1cdTAwM2VvcGVuX211dGV4KTtcbitcbitcdGZwdXQoZmlscCk7XG4rXG4gXHQvKlxuLVx0ICogTmVlZCBub3QgaG9sZCBsb19tdXRleCB0byBmcHV0IGJhY2tpbmcgZmlsZS4gQ2FsbGluZyBmcHV0IGhvbGRpbmdcbi1cdCAqIGxvX211dGV4IHRyaWdnZXJzIGEgY2lyY3VsYXIgbG9jayBkZXBlbmRlbmN5IHBvc3NpYmlsaXR5IHdhcm5pbmcgYXNcbi1cdCAqIGZwdXQgY2FuIHRha2Ugb3Blbl9tdXRleCB3aGljaCBpcyB1c3VhbGx5IHRha2VuIGJlZm9yZSBsb19tdXRleC5cbitcdCAqIERyb3AgYWxsIHJlZmVyZW5jZXMgdGhhdCB3b3VsZCBoYXZlIGJlZW4gZHJvcHBlZCBhcyBzb29uIGFzXG4rXHQgKiByZXR1cm5pbmcgZnJvbSBsb19yZWxlYXNlKCkgYW5kIHJlbGVhc2luZyBkaXNrLVx1MDAzZW9wZW5fbXV0ZXguXG4gXHQgKi9cbi1cdGZwdXQoZmlscCk7XG4rXHRtb2R1bGVfcHV0KGRpc2stXHUwMDNlZm9wcy1cdTAwM2Vvd25lcik7XG4rXHRwdXRfZGV2aWNlKGRpc2tfdG9fZGV2KGRpc2spKTtcbitcbitcdC8qXG4rXHQgKiBUaGlzIGlzIHNhZmU6IGZsdXNoX3dvcmsoKSBmcm9tIGxvb3BfcmVtb3ZlKCkgZnJvbSBsb29wX2V4aXQoKSB3YWl0c1xuK1x0ICogdW50aWwgdGhpcyBmdW5jdGlvbiByZXR1cm5zOyBlZmZlY3RpdmVseSBkcm9wcGluZyB0aGUgZmluYWwgbW9kdWxlXG4rXHQgKiByZWZlcmVuY2VzIHN5bmNocm9ub3VzbHkuXG4rXHQgKi9cbitcdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xuIH1cbiBcbiBzdGF0aWMgaW50IGxvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG5AQCAtMTc2OSw4ICsxNzk3LDIwIEBAIHN0YXRpYyB2b2lkIGxvX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4gXHRuZWVkX2NsZWFyID0gKGxvLVx1MDAzZWxvX3N0YXRlID09IExvX3J1bmRvd24pO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxvLVx1MDAzZWxvX211dGV4KTtcbiBcbi1cdGlmIChuZWVkX2NsZWFyKVxuLVx0XHRfX2xvb3BfY2xyX2ZkKGxvKTtcbitcdC8qXG4rXHQgKiBJbiBvcmRlciB0byBmbHVzaCBwZW5kaW5nIEkvTyByZXF1ZXN0cyBiZWZvcmUgY2xlYXJpbmcgdGhlIGJhY2tpbmdcbitcdCAqIGRldmljZSwgZGVmZXIgX19sb29wX2Nscl9mZCgpIHRvIFdRIGNvbnRleHQuIFRoZSBMb19ydW5kb3duIHN0YXRlXG4rXHQgKiBndWFyYW50ZWVzIHRoYXQgbG9fb3BlbigpIHdpbGwgZmFpbCB3aXRoIC1FTlhJTy5cbitcdCAqL1xuK1x0aWYgKG5lZWRfY2xlYXIpIHtcbitcdFx0LypcbitcdFx0ICogR3JhYiBhbGwgcmVmZXJlbmNlcyB0aGF0IHdpbGwgYmUgZHJvcHBlZCBhcyBzb29uIGFzXG4rXHRcdCAqIHJldHVybmluZyBmcm9tIGxvX3JlbGVhc2UoKSBhbmQgcmVsZWFzaW5nIGRpc2stXHUwMDNlb3Blbl9tdXRleC5cbitcdFx0ICovXG4rXHRcdGdldF9kZXZpY2UoZGlza190b19kZXYoZGlzaykpO1xuK1x0XHRfX21vZHVsZV9nZXQoZGlzay1cdTAwM2Vmb3BzLVx1MDAzZW93bmVyKTtcbitcdFx0cXVldWVfd29yayhzeXN0ZW1fbG9uZ193cSwgXHUwMDI2bG8tXHUwMDNlbG9fY2xyX3dvcmspO1xuK1x0fVxuIH1cbiBcbiBzdGF0aWMgdm9pZCBsb19mcmVlX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spXG5AQCAtMjAzNCw2ICsyMDc0LDcgQEAgc3RhdGljIGludCBsb29wX2FkZChpbnQgaSlcbiBcdGxvID0ga3phbGxvY19vYmooKmxvKTtcbiBcdGlmICghbG8pXG4gXHRcdGdvdG8gb3V0O1xuK1x0SU5JVF9XT1JLKFx1MDAyNmxvLVx1MDAzZWxvX2Nscl93b3JrLCBfX2xvb3BfY2xyX2ZkKTtcbiBcdGxvLVx1MDAzZXdvcmtlcl90cmVlID0gUkJfUk9PVDtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmxvLVx1MDAzZWlkbGVfd29ya2VyX2xpc3QpO1xuIFx0dGltZXJfc2V0dXAoXHUwMDI2bG8tXHUwMDNldGltZXIsIGxvb3BfZnJlZV9pZGxlX3dvcmtlcnNfdGltZXIsIFRJTUVSX0RFRkVSUkFCTEUpO1xuQEAgLTIxMzgsNiArMjE3OSw5IEBAIHN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpXG4gXG4gc3RhdGljIHZvaWQgbG9vcF9yZW1vdmUoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbiB7XG4rXHQvKiBXYWl0IGZvciBfX2xvb3BfY2xyX2ZkKCkgdG8gY29tcGxldGUuICovXG4rXHRmbHVzaF93b3JrKFx1MDAyNmxvLVx1MDAzZWxvX2Nscl93b3JrKTtcbitcbiBcdC8qIE1ha2UgdGhpcyBsb29wIGRldmljZSB1bnJlYWNoYWJsZSBmcm9tIHBhdGhuYW1lLiAqL1xuIFx0ZGVsX2dlbmRpc2sobG8tXHUwMDNlbG9fZGlzayk7XG4gXHRibGtfbXFfZnJlZV90YWdfc2V0KFx1MDAyNmxvLVx1MDAzZXRhZ19zZXQpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTc6NTY6NTAuNzE4ODA2ODI3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTAyMjA2MjY0OTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgYXMgaWYgSSdtIHJlZmxlY3Rpbmcgb24gdGhlbSBteXNlbGYsIGFzIGFuIGV4cGVydCBpbiBteSBmaWVsZDpcblxuKipBbmFseXppbmcgYSBLZXJuZWwgTG9vcCBEZXZpY2UgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyB0b3VjaGluZyBgZHJpdmVycy9ibG9jay9sb29wLmNgLiBJbW1lZGlhdGVseSwgbXkgbWVudGFsIGdlYXJzIHN0YXJ0IHR1cm5pbmcuIEZpcnN0IHRoaW5ncyBmaXJzdDogSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgcGF0Y2ggaXRzZWxmLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCAqcHJlY2lzZWx5KiB3aGF0IGNoYW5nZXMgYXJlIGJlaW5nIG1hZGUgdG8gdGhhdCBsb29wIGRldmljZSBjb2RlLiBXaGF0J3MgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBiZWluZyBhbHRlcmVkPyBBcmUgdGhlcmUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zPyBTZWN1cml0eSBjb25zaWRlcmF0aW9ucz9cblxuQmV5b25kIHRoZSBjb2RlIGl0c2VsZiwgSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSwgb3IgY2hlY2sgZGlyZWN0bHksIHdoYXQgS2NvbmZpZyBvcHRpb25zIGFyZSByZWxhdGVkIHRvIHRoZSBsb29wIGRldmljZS4gV2hhdCBjYW4gYmUgZW5hYmxlZCBvciBkaXNhYmxlZD8gSG93IGRvZXMgdGhpcyBwYXRjaCBpbnRlcmFjdCB3aXRoIHRob3NlIG9wdGlvbnM/IEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCBzb21lIHF1aWNrIGdyZXBzIHRocm91Z2ggdGhlIEtjb25maWcgZmlsZXMsIG9yIGdvIHN0cmFpZ2h0IHRvIGJyb3dzaW5nIHRoZSByZWxldmFudCBmaWxlcywgdG8gcXVpY2tseSBnZXQgdGhlIGJpZ2dlciBwaWN0dXJlLCBhbmQgc2VlIGhvdyB0aGlzIGNoYW5nZSB3aWxsIGVmZmVjdCBldmVyeXRoaW5nLiBJdCdzIGFsbCBhYm91dCBjb250ZXh0LCBhbmQgdW5kZXJzdGFuZGluZyB0aGUgY29tcGlsZS10aW1lIGxhbmRzY2FwZSBmb3IgdGhlIGxvb3AgZGV2aWNlIGlzIGNyaXRpY2FsLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjg3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNzo1ODozMi45MjUwNzQzNDVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTk0MDkzNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQkxLX0RFVl9MT09QXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnPTE0MD1jb25maWcgQkxLX0RFVl9DT1dfQ09NTU9OXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTQzLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoxNDQ6Y29uZmlnIEJMS19ERVZfTE9PUFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xNDUtXFx0dHJpc3RhdGUgXFxcIkxvb3BiYWNrIGRldmljZSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE3OC1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MTc5OmNvbmZpZyBCTEtfREVWX0xPT1BfTUlOX0NPVU5UXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE4MC1cXHRpbnQgXFxcIk51bWJlciBvZiBsb29wIGRldmljZXMgdG8gcHJlLWNyZWF0ZSBhdCBpbml0IHRpbWVcXFwiXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE4MTpcXHRkZXBlbmRzIG9uIEJMS19ERVZfTE9PUFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xODItXFx0ZGVmYXVsdCA4XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlPTIxPW9iai0kKENPTkZJR19CTEtfREVWX1JBTSlcXHQrPSBicmQub1xcbmRyaXZlcnMvYmxvY2svTWFrZWZpbGU6MjI6b2JqLSQoQ09ORklHX0JMS19ERVZfTE9PUClcXHQrPSBsb29wLm9cXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlLTIzLW9iai0kKENPTkZJR19TVU5WREMpXFx0XFx0Kz0gc3VudmRjLm9cXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE4Mjg9c3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBsb19mb3BzID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTg0Ny0gKiBjaGFuZ2VkIHRoZSBkZWZhdWx0IHZhbHVlIGZyb20gMCBmb3IgbWF4X2xvb3A9MCByZWFzb25zKSwganVzdFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE4NDg6ICogY3JlYXRlIENPTkZJR19CTEtfREVWX0xPT1BfTUlOX0NPVU5UIGxvb3AgZGV2aWNlcyBhdCBtb2R1bGVcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODQ5LSAqIGluaXQgdGltZS4gTG9vcCBkZXZpY2VzIGNhbiBiZSByZXF1ZXN0ZWQgb24tZGVtYW5kIHdpdGggdGhlXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODUyLSAqL1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE4NTM6c3RhdGljIGludCBtYXhfbG9vcCA9IENPTkZJR19CTEtfREVWX0xPT1BfTUlOX0NPVU5UO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4NTQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjU4OjMzLjAyNDQ4ODA4M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEzMjgyMTc1NTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkxvb3AgRGV2aWNlIENsZWFuLXVwIGFuZCBJT0NUTHM6IEEgQ2xvc2VyIExvb2sqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGd1dHMgb2YgdGhlIGxvb3AgZGV2aWNlIGRyaXZlci4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGlzIGFsbCB3b3Jrcywgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgcmVsZWFzZSBwcm9jZXNzLiBJJ20gdGhpbmtpbmcsIGxldCdzIHN0YXJ0IHdpdGggYGRyaXZlcnMvYmxvY2svbG9vcC5jYCBhbmQgemVybyBpbiBvbiB0aGUgYGxvX3JlbGVhc2VgLCBgbG9vcF9jbHJfZmRgLCBhbmQgYF9fbG9vcF9jbHJfZmRgIGZ1bmN0aW9ucy4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBrZXkgcGxheWVycyB3aGVuIGEgbG9vcCBkZXZpY2UgaXMgYmVpbmcgdG9ybiBkb3duLCByaWdodD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNlcXVlbmNpbmcgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgdGhlcmUuIEFuZCwgb2YgY291cnNlLCB0aGUgaW9jdGwgZW50cnlwb2ludHMgYXJlIGFsd2F5cyBpbnRlcmVzdGluZyDigJMgZ290dGEgc2VlIGhvdyB3ZSBleHBvc2UgZnVuY3Rpb25hbGl0eSBhbmQgaGFuZGxlIHVzZXItc3BhY2UgaW50ZXJhY3Rpb25zLiBMZXQgbWUgc2NhbiB0aG9zZSBmdW5jdGlvbnMgYW5kIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb2J2aW91cyBmbGF3cyBvciBhcmVhcyByaXBlIGZvciBpbXByb3ZlbWVudC4gVGhpcyBhcmVhIGhhcyBiZWVuIHN0YWJsZSBmb3IgYSB3aGlsZSwgYnV0IGl0J3MgYWx3YXlzIGdvb2QgdG8gcmV2aXNpdCB0aGUgY29yZSBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ1NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjU4OjQ2LjMwNjY2Nzc0OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NDEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL2xvb3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzgwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzgwOlxcdHN0YXRpYyB2b2lkIGxvX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuMTc4MTpcXHR7XFxuMTc4MjpcXHRcXHRzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvID0gZGlzay1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbjE3ODM6XFx0XFx0Ym9vbCBuZWVkX2NsZWFyID0gZmFsc2U7XFxuMTc4NDpcXHRcXG4xNzg1OlxcdFxcdGlmIChkaXNrX29wZW5lcnMoZGlzaykgXFx1MDAzZSAwKVxcbjE3ODY6XFx0XFx0XFx0cmV0dXJuO1xcbjE3ODc6XFx0XFx0LypcXG4xNzg4OlxcdFxcdCAqIENsZWFyIHRoZSBiYWNraW5nIGRldmljZSBpbmZvcm1hdGlvbiBpZiB0aGlzIGlzIHRoZSBsYXN0IGNsb3NlIG9mXFxuMTc4OTpcXHRcXHQgKiBhIGRldmljZSB0aGF0J3MgYmVlbiBtYXJrZWQgZm9yIGF1dG8gY2xlYXIsIG9yIG9uIHdoaWNoIExPT1BfQ0xSX0ZEXFxuMTc5MDpcXHRcXHQgKiBoYXMgYmVlbiBjYWxsZWQuXFxuMTc5MTpcXHRcXHQgKi9cXG4xNzkyOlxcdFxcbjE3OTM6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2bG8tXFx1MDAzZWxvX211dGV4KTtcXG4xNzk0OlxcdFxcdGlmIChsby1cXHUwMDNlbG9fc3RhdGUgPT0gTG9fYm91bmQgXFx1MDAyNlxcdTAwMjYgKGxvLVxcdTAwM2Vsb19mbGFncyBcXHUwMDI2IExPX0ZMQUdTX0FVVE9DTEVBUikpXFxuMTc5NTpcXHRcXHRcXHRXUklURV9PTkNFKGxvLVxcdTAwM2Vsb19zdGF0ZSwgTG9fcnVuZG93bik7XFxuMTc5NjpcXHRcXG4xNzk3OlxcdFxcdG5lZWRfY2xlYXIgPSAobG8tXFx1MDAzZWxvX3N0YXRlID09IExvX3J1bmRvd24pO1xcbjE3OTg6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZsby1cXHUwMDNlbG9fbXV0ZXgpO1xcbjE3OTk6XFx0XFxuMTgwMDpcXHRcXHQvKlxcbjE4MDE6XFx0XFx0ICogSW4gb3JkZXIgdG8gZmx1c2ggcGVuZGluZyBJL08gcmVxdWVzdHMgYmVmb3JlIGNsZWFyaW5nIHRoZSBiYWNraW5nXFxuMTgwMjpcXHRcXHQgKiBkZXZpY2UsIGRlZmVyIF9fbG9vcF9jbHJfZmQoKSB0byBXUSBjb250ZXh0LiBUaGUgTG9fcnVuZG93biBzdGF0ZVxcbjE4MDM6XFx0XFx0ICogZ3VhcmFudGVlcyB0aGF0IGxvX29wZW4oKSB3aWxsIGZhaWwgd2l0aCAtRU5YSU8uXFxuMTgwNDpcXHRcXHQgKi9cXG4xODA1OlxcdFxcdGlmIChuZWVkX2NsZWFyKSB7XFxuMTgwNjpcXHRcXHRcXHQvKlxcbjE4MDc6XFx0XFx0XFx0ICogR3JhYiBhbGwgcmVmZXJlbmNlcyB0aGF0IHdpbGwgYmUgZHJvcHBlZCBhcyBzb29uIGFzXFxuMTgwODpcXHRcXHRcXHQgKiByZXR1cm5pbmcgZnJvbSBsb19yZWxlYXNlKCkgYW5kIHJlbGVhc2luZyBkaXNrLVxcdTAwM2VvcGVuX211dGV4LlxcbjE4MDk6XFx0XFx0XFx0ICovXFxuMTgxMDpcXHRcXHRcXHRnZXRfZGV2aWNlKGRpc2tfdG9fZGV2KGRpc2spKTtcXG4xODExOlxcdFxcdFxcdF9fbW9kdWxlX2dldChkaXNrLVxcdTAwM2Vmb3BzLVxcdTAwM2Vvd25lcik7XFxuMTgxMjpcXHRcXHRcXHRxdWV1ZV93b3JrKHN5c3RlbV9sb25nX3dxLCBcXHUwMDI2bG8tXFx1MDAzZWxvX2Nscl93b3JrKTtcXG4xODEzOlxcdFxcdH1cXG4xODE0OlxcdH1cXG4xODE1OlxcdFxcbjE4MTY6XFx0c3RhdGljIHZvaWQgbG9fZnJlZV9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbjE4MTc6XFx0e1xcbjE4MTg6XFx0XFx0c3RydWN0IGxvb3BfZGV2aWNlICpsbyA9IGRpc2stXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4xODE5OlxcdFxcbjE4MjA6XFx0XFx0aWYgKGxvLVxcdTAwM2V3b3JrcXVldWUpXFxuMTgyMTpcXHRcXHRcXHRkZXN0cm95X3dvcmtxdWV1ZShsby1cXHUwMDNld29ya3F1ZXVlKTtcXG4xODIyOlxcdFxcdGxvb3BfZnJlZV9pZGxlX3dvcmtlcnMobG8sIHRydWUpO1xcbjE4MjM6XFx0XFx0dGltZXJfc2h1dGRvd25fc3luYyhcXHUwMDI2bG8tXFx1MDAzZXRpbWVyKTtcXG4xODI0OlxcdFxcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNmxvLVxcdTAwM2Vsb19tdXRleCk7XFxuMTgyNTpcXHRcXHRrZnJlZShsbyk7XFxuMTgyNjpcXHR9XFxuMTgyNzpcXHRcXG4xODI4OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbG9fZm9wcyA9IHtcXG4xODI5OlxcdFxcdC5vd25lciA9XFx0VEhJU19NT0RVTEUsXFxuMTgzMDpcXHRcXHQub3BlbiA9ICAgICAgICAgbG9fb3BlbixcXG4xODMxOlxcdFxcdC5yZWxlYXNlID1cXHRsb19yZWxlYXNlLFxcbjE4MzI6XFx0XFx0LmlvY3RsID1cXHRsb19pb2N0bCxcXG4xODMzOlxcdCNpZmRlZiBDT05GSUdfQ09NUEFUXFxuMTgzNDpcXHRcXHQuY29tcGF0X2lvY3RsID1cXHRsb19jb21wYXRfaW9jdGwsXFxuMTgzNTpcXHQjZW5kaWZcXG4xODM2OlxcdFxcdC5mcmVlX2Rpc2sgPVxcdGxvX2ZyZWVfZGlzayxcXG4xODM3OlxcdH07XFxuMTgzODpcXHRcXG4xODM5OlxcdC8qXFxuMTg0MDpcXHQgKiBBbmQgbm93IHRoZSBtb2R1bGVzIGNvZGUgYW5kIGtlcm5lbCBpbnRlcmZhY2UuXFxuMTg0MTpcXHQgKi9cXG4xODQyOlxcdFxcbjE4NDM6XFx0LypcXG4xODQ0OlxcdCAqIElmIG1heF9sb29wIGlzIHNwZWNpZmllZCwgY3JlYXRlIHRoYXQgbWFueSBkZXZpY2VzIHVwZnJvbnQuXFxuMTg0NTpcXHQgKiBUaGlzIGFsc28gYmVjb21lcyBhIGhhcmQgbGltaXQuIElmIG1heF9sb29wIGlzIG5vdCBzcGVjaWZpZWQsXFxuMTg0NjpcXHQgKiB0aGUgZGVmYXVsdCBpc24ndCBhIGhhcmQgbGltaXQgKGFzIGJlZm9yZSBjb21taXQgODVjNTAxOTc3MTZjXFxuMTg0NzpcXHQgKiBjaGFuZ2VkIHRoZSBkZWZhdWx0IHZhbHVlIGZyb20gMCBmb3IgbWF4X2xvb3A9MCByZWFzb25zKSwganVzdFxcbjE4NDg6XFx0ICogY3JlYXRlIENPTkZJR19CTEtfREVWX0xPT1BfTUlOX0NPVU5UIGxvb3AgZGV2aWNlcyBhdCBtb2R1bGVcXG4xODQ5OlxcdCAqIGluaXQgdGltZS4gTG9vcCBkZXZpY2VzIGNhbiBiZSByZXF1ZXN0ZWQgb24tZGVtYW5kIHdpdGggdGhlXFxuMTg1MDpcXHQgKiAvZGV2L2xvb3AtY29udHJvbCBpbnRlcmZhY2UsIG9yIGJlIGluc3RhbnRpYXRlZCBieSBhY2Nlc3NpbmdcXG4xODUxOlxcdCAqIGEgJ2RlYWQnIGRldmljZSBub2RlLlxcbjE4NTI6XFx0ICovXFxuMTg1MzpcXHRzdGF0aWMgaW50IG1heF9sb29wID0gQ09ORklHX0JMS19ERVZfTE9PUF9NSU5fQ09VTlQ7XFxuMTg1NDpcXHRcXG4xODU1OlxcdCNpZmRlZiBDT05GSUdfQkxPQ0tfTEVHQUNZX0FVVE9MT0FEXFxuMTg1NjpcXHRzdGF0aWMgYm9vbCBtYXhfbG9vcF9zcGVjaWZpZWQ7XFxuMTg1NzpcXHRcXG4xODU4OlxcdHN0YXRpYyBpbnQgbWF4X2xvb3BfcGFyYW1fc2V0X2ludChjb25zdCBjaGFyICp2YWwsXFxuMTg1OTpcXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNzo1ODo0Ni4zMDY5NDU3ODlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODQ5MDAwNjUxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgYGxvb3BfY2xyX2ZkYCBhbmQgSU9DVEwgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGBsb29wX2Nscl9mZGAgZnVuY3Rpb24uIE15IGluaXRpYWwgcXVlc3Rpb24gaXMgaG93IGV4YWN0bHkgdGhlIGlvY3RsIGNhbGxzIGFyZSBpbXBsZW1lbnRlZCB0byBjbGVhciBvciByZWxlYXNlIHRoZSBsb29wIGRldmljZS4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBsb3ctbGV2ZWwgaW50ZXJhY3Rpb25zIGhlcmU6IGhvdyB0aGUgZmlsZSBkZXNjcmlwdG9yIGlzIHVzZWQgd2l0aGluIHRoZSBrZXJuZWwgdG8gaWRlbnRpZnkgYW5kIG1hbmlwdWxhdGUgdGhlIGxvb3AgZGV2aWNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBhbmQgdGhlIHNwZWNpZmljIGlvY3RsIGNvZGVzIHVzZWQuIEnigJltIGd1ZXNzaW5nIGl0IGludm9sdmVzIHNvbWUgcG9pbnRlciBtYW5pcHVsYXRpb24gb3IgcGVyaGFwcyBhIHNpZ25hbCBiZWluZyBzZW50IHRvIHRoZSBiYWNraW5nIGJsb2NrIGRldmljZSB0aHJvdWdoIHRoZSBrZXJuZWwuIEkgc2hvdWxkIGxvb2sgaW50byB0aGUgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBpb2N0bGAgaGFuZGxlciBpbiB0aGUgbG9vcCBkcml2ZXIsIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCdzIGhhcHBlbmluZyBpbnRlcm5hbGx5LiBJIHdhbnQgdG8gc2VlIGlmIHRoZSBmZCBpcyBzaW1wbHkgY2xvc2VkLCBvciBpZiB0aGVyZSdzIG1vcmUgdG8gdGhlIHJlbGVhc2UgcHJvY2Vzcy4gVGhlcmUgY291bGQgYmUgc29tZSBlZGdlIGNhc2VzIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBJJ2xsIGZvY3VzIG9uIGhvdyB0aGUgaW9jdGwgY2FsbCBhZmZlY3RzIHRoZSBjb25uZWN0aW9uIGFuZCB3aGF0IGRhdGEgaXMgYmVpbmcgc2hhcmVkIHRvIGNsb3NlIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBiYWNraW5nIGRldmljZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk4MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTc6NTk6MjQuNzk2OTU1NTY0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIxMzI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL2xvb3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjMwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjMwOlxcdFxcdC8qXFxuMTIzMTpcXHRcXHQgKiBUaGlzIGlzIHNhZmU6IGZsdXNoX3dvcmsoKSBmcm9tIGxvb3BfcmVtb3ZlKCkgZnJvbSBsb29wX2V4aXQoKSB3YWl0c1xcbjEyMzI6XFx0XFx0ICogdW50aWwgdGhpcyBmdW5jdGlvbiByZXR1cm5zOyBlZmZlY3RpdmVseSBkcm9wcGluZyB0aGUgZmluYWwgbW9kdWxlXFxuMTIzMzpcXHRcXHQgKiByZWZlcmVuY2VzIHN5bmNocm9ub3VzbHkuXFxuMTIzNDpcXHRcXHQgKi9cXG4xMjM1OlxcdFxcdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xcbjEyMzY6XFx0fVxcbjEyMzc6XFx0XFxuMTIzODpcXHRzdGF0aWMgaW50IGxvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuMTIzOTpcXHR7XFxuMTI0MDpcXHRcXHRpbnQgZXJyO1xcbjEyNDE6XFx0XFxuMTI0MjpcXHRcXHQvKlxcbjEyNDM6XFx0XFx0ICogU2luY2UgbG9faW9jdGwoKSBpcyBjYWxsZWQgd2l0aG91dCBsb2NrcyBoZWxkLCBpdCBpcyBwb3NzaWJsZSB0aGF0XFxuMTI0NDpcXHRcXHQgKiBsb29wX2NvbmZpZ3VyZSgpL2xvb3BfY2hhbmdlX2ZkKCkgYW5kIGxvb3BfY2xyX2ZkKCkgcnVuIGluIHBhcmFsbGVsLlxcbjEyNDU6XFx0XFx0ICpcXG4xMjQ2OlxcdFxcdCAqIFRoZXJlZm9yZSwgdXNlIGdsb2JhbCBsb2NrIHdoZW4gc2V0dGluZyBMb19ydW5kb3duIHN0YXRlIGluIG9yZGVyIHRvXFxuMTI0NzpcXHRcXHQgKiBtYWtlIHN1cmUgdGhhdCBsb29wX3ZhbGlkYXRlX2ZpbGUoKSB3aWxsIGZhaWwgaWYgdGhlIFxcXCJzdHJ1Y3QgZmlsZVxcXCJcXG4xMjQ4OlxcdFxcdCAqIHdoaWNoIGxvb3BfY29uZmlndXJlKCkvbG9vcF9jaGFuZ2VfZmQoKSBmb3VuZCB2aWEgZmdldCgpIHdhcyB0aGlzXFxuMTI0OTpcXHRcXHQgKiBsb29wIGRldmljZS5cXG4xMjUwOlxcdFxcdCAqL1xcbjEyNTE6XFx0XFx0ZXJyID0gbG9vcF9nbG9iYWxfbG9ja19raWxsYWJsZShsbywgdHJ1ZSk7XFxuMTI1MjpcXHRcXHRpZiAoZXJyKVxcbjEyNTM6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xMjU0OlxcdFxcdGlmIChsby1cXHUwMDNlbG9fc3RhdGUgIT0gTG9fYm91bmQpIHtcXG4xMjU1OlxcdFxcdFxcdGxvb3BfZ2xvYmFsX3VubG9jayhsbywgdHJ1ZSk7XFxuMTI1NjpcXHRcXHRcXHRyZXR1cm4gLUVOWElPO1xcbjEyNTc6XFx0XFx0fVxcbjEyNTg6XFx0XFx0LypcXG4xMjU5OlxcdFxcdCAqIE1hcmsgdGhlIGRldmljZSBmb3IgcmVtb3ZpbmcgdGhlIGJhY2tpbmcgZGV2aWNlIG9uIGxhc3QgY2xvc2UuXFxuMTI2MDpcXHRcXHQgKiBJZiB3ZSBhcmUgdGhlIG9ubHkgb3BlbmVyLCBhbHNvIHN3aXRjaCB0aGUgc3RhdGUgdG8gcm91bmRvd24gaGVyZSB0b1xcbjEyNjE6XFx0XFx0ICogcHJldmVudCBuZXcgb3BlbmVycyBmcm9tIGNvbWluZyBpbi5cXG4xMjYyOlxcdFxcdCAqL1xcbjEyNjM6XFx0XFxuMTI2NDpcXHRcXHRsby1cXHUwMDNlbG9fZmxhZ3MgfD0gTE9fRkxBR1NfQVVUT0NMRUFSO1xcbjEyNjU6XFx0XFx0aWYgKGRpc2tfb3BlbmVycyhsby1cXHUwMDNlbG9fZGlzaykgPT0gMSlcXG4xMjY2OlxcdFxcdFxcdFdSSVRFX09OQ0UobG8tXFx1MDAzZWxvX3N0YXRlLCBMb19ydW5kb3duKTtcXG4xMjY3OlxcdFxcdGxvb3BfZ2xvYmFsX3VubG9jayhsbywgdHJ1ZSk7XFxuMTI2ODpcXHRcXG4xMjY5OlxcdFxcdHJldHVybiAwO1xcbjEyNzA6XFx0fVxcbjEyNzE6XFx0XFxuMTI3MjpcXHRzdGF0aWMgaW50XFxuMTI3MzpcXHRsb29wX3NldF9zdGF0dXMoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgY29uc3Qgc3RydWN0IGxvb3BfaW5mbzY0ICppbmZvKVxcbjEyNzQ6XFx0e1xcbjEyNzU6XFx0XFx0aW50IGVycjtcXG4xMjc2OlxcdFxcdGJvb2wgcGFydHNjYW4gPSBmYWxzZTtcXG4xMjc3OlxcdFxcdGJvb2wgc2l6ZV9jaGFuZ2VkID0gZmFsc2U7XFxuMTI3ODpcXHRcXHR1bnNpZ25lZCBpbnQgbWVtZmxhZ3M7XFxuMTI3OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTc6NTk6MjQuNzk5MTcyMDM0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQwMDM0NzM5NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgYGxvb3AuY2AgaW9jdGwgSGFuZGxpbmcqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSB3aXRoIGBsb29wLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0J3MgZ29pbmcgb24gd2l0aCB0aGUgYGlvY3RsYCBjYWxscyBpbiB0aGlzIGRyaXZlci4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBzdGFydCBieSBmb2N1c2luZyBvbiBgbG9faW9jdGxgLiBUaGF0IGZ1bmN0aW9uIGlzIHRoZSBrZXkgdG8gbWFuYWdpbmcgZGV2aWNlLXNwZWNpZmljIHJlcXVlc3RzLCBhbmQgdW5kZXJzdGFuZGluZyBpdHMgbG9naWMgaXMgY3J1Y2lhbCBmb3IgcmVhbGx5IGdyYXNwaW5nIGhvdyB0aGUgbG9vcCBkZXZpY2UgYmVoYXZlcyBhdCBhIGxvdyBsZXZlbC4gTGV0J3Mgc2VlIHdoYXQgaW50ZXJlc3RpbmcgdGhpbmdzIGFyZSBoYXBwZW5pbmcgaW5zaWRlIHRoZXJlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwMTMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjU5OjM4LjgwMjY0OTg3NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODYyNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9sb29wLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTY4MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTY4MDpcXHRcXHRtZW1zZXQoXFx1MDAyNmluZm8sIDAsIHNpemVvZihpbmZvKSk7XFxuMTY4MTpcXHRcXHRpbmZvLmxvX251bWJlciA9IGluZm82NC1cXHUwMDNlbG9fbnVtYmVyO1xcbjE2ODI6XFx0XFx0aW5mby5sb19kZXZpY2UgPSBpbmZvNjQtXFx1MDAzZWxvX2RldmljZTtcXG4xNjgzOlxcdFxcdGluZm8ubG9faW5vZGUgPSBpbmZvNjQtXFx1MDAzZWxvX2lub2RlO1xcbjE2ODQ6XFx0XFx0aW5mby5sb19yZGV2aWNlID0gaW5mbzY0LVxcdTAwM2Vsb19yZGV2aWNlO1xcbjE2ODU6XFx0XFx0aW5mby5sb19vZmZzZXQgPSBpbmZvNjQtXFx1MDAzZWxvX29mZnNldDtcXG4xNjg2OlxcdFxcdGluZm8ubG9fZmxhZ3MgPSBpbmZvNjQtXFx1MDAzZWxvX2ZsYWdzO1xcbjE2ODc6XFx0XFx0bWVtY3B5KGluZm8ubG9fbmFtZSwgaW5mbzY0LVxcdTAwM2Vsb19maWxlX25hbWUsIExPX05BTUVfU0laRSk7XFxuMTY4ODpcXHRcXG4xNjg5OlxcdFxcdC8qIGVycm9yIGluIGNhc2UgdmFsdWVzIHdlcmUgdHJ1bmNhdGVkICovXFxuMTY5MDpcXHRcXHRpZiAoaW5mby5sb19kZXZpY2UgIT0gaW5mbzY0LVxcdTAwM2Vsb19kZXZpY2UgfHxcXG4xNjkxOlxcdFxcdCAgICBpbmZvLmxvX3JkZXZpY2UgIT0gaW5mbzY0LVxcdTAwM2Vsb19yZGV2aWNlIHx8XFxuMTY5MjpcXHRcXHQgICAgaW5mby5sb19pbm9kZSAhPSBpbmZvNjQtXFx1MDAzZWxvX2lub2RlIHx8XFxuMTY5MzpcXHRcXHQgICAgaW5mby5sb19vZmZzZXQgIT0gaW5mbzY0LVxcdTAwM2Vsb19vZmZzZXQpXFxuMTY5NDpcXHRcXHRcXHRyZXR1cm4gLUVPVkVSRkxPVztcXG4xNjk1OlxcdFxcbjE2OTY6XFx0XFx0aWYgKGNvcHlfdG9fdXNlcihhcmcsIFxcdTAwMjZpbmZvLCBzaXplb2YoaW5mbykpKVxcbjE2OTc6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMTY5ODpcXHRcXHRyZXR1cm4gMDtcXG4xNjk5OlxcdH1cXG4xNzAwOlxcdFxcbjE3MDE6XFx0c3RhdGljIGludFxcbjE3MDI6XFx0bG9vcF9zZXRfc3RhdHVzX2NvbXBhdChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLFxcbjE3MDM6XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBjb21wYXRfbG9vcF9pbmZvIF9fdXNlciAqYXJnKVxcbjE3MDQ6XFx0e1xcbjE3MDU6XFx0XFx0c3RydWN0IGxvb3BfaW5mbzY0IGluZm82NDtcXG4xNzA2OlxcdFxcdGludCByZXQ7XFxuMTcwNzpcXHRcXG4xNzA4OlxcdFxcdHJldCA9IGxvb3BfaW5mbzY0X2Zyb21fY29tcGF0KGFyZywgXFx1MDAyNmluZm82NCk7XFxuMTcwOTpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xNzEwOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTcxMTpcXHRcXHRyZXR1cm4gbG9vcF9zZXRfc3RhdHVzKGxvLCBcXHUwMDI2aW5mbzY0KTtcXG4xNzEyOlxcdH1cXG4xNzEzOlxcdFxcbjE3MTQ6XFx0c3RhdGljIGludFxcbjE3MTU6XFx0bG9vcF9nZXRfc3RhdHVzX2NvbXBhdChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLFxcbjE3MTY6XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBjb21wYXRfbG9vcF9pbmZvIF9fdXNlciAqYXJnKVxcbjE3MTc6XFx0e1xcbjE3MTg6XFx0XFx0c3RydWN0IGxvb3BfaW5mbzY0IGluZm82NDtcXG4xNzE5OlxcdFxcdGludCBlcnI7XFxuMTcyMDpcXHRcXG4xNzIxOlxcdFxcdGlmICghYXJnKVxcbjE3MjI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTcyMzpcXHRcXHRlcnIgPSBsb29wX2dldF9zdGF0dXMobG8sIFxcdTAwMjZpbmZvNjQpO1xcbjE3MjQ6XFx0XFx0aWYgKCFlcnIpXFxuMTcyNTpcXHRcXHRcXHRlcnIgPSBsb29wX2luZm82NF90b19jb21wYXQoXFx1MDAyNmluZm82NCwgYXJnKTtcXG4xNzI2OlxcdFxcdHJldHVybiBlcnI7XFxuMTcyNzpcXHR9XFxuMTcyODpcXHRcXG4xNzI5OlxcdHN0YXRpYyBpbnQgbG9fY29tcGF0X2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcXG4xNzMwOlxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbjE3MzE6XFx0e1xcbjE3MzI6XFx0XFx0c3RydWN0IGxvb3BfZGV2aWNlICpsbyA9IGJkZXYtXFx1MDAzZWJkX2Rpc2stXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4xNzMzOlxcdFxcdGludCBlcnI7XFxuMTczNDpcXHRcXG4xNzM1OlxcdFxcdHN3aXRjaChjbWQpIHtcXG4xNzM2OlxcdFxcdGNhc2UgTE9PUF9TRVRfU1RBVFVTOlxcbjE3Mzc6XFx0XFx0XFx0ZXJyID0gbG9vcF9zZXRfc3RhdHVzX2NvbXBhdChsbyxcXG4xNzM4OlxcdFxcdFxcdFxcdCAgICAgKGNvbnN0IHN0cnVjdCBjb21wYXRfbG9vcF9pbmZvIF9fdXNlciAqKWFyZyk7XFxuMTczOTpcXHRcXHRcXHRicmVhaztcXG4xNzQwOlxcdFxcdGNhc2UgTE9PUF9HRVRfU1RBVFVTOlxcbjE3NDE6XFx0XFx0XFx0ZXJyID0gbG9vcF9nZXRfc3RhdHVzX2NvbXBhdChsbyxcXG4xNzQyOlxcdFxcdFxcdFxcdFxcdCAgICAgKHN0cnVjdCBjb21wYXRfbG9vcF9pbmZvIF9fdXNlciAqKWFyZyk7XFxuMTc0MzpcXHRcXHRcXHRicmVhaztcXG4xNzQ0OlxcdFxcdGNhc2UgTE9PUF9TRVRfQ0FQQUNJVFk6XFxuMTc0NTpcXHRcXHRjYXNlIExPT1BfQ0xSX0ZEOlxcbjE3NDY6XFx0XFx0Y2FzZSBMT09QX0dFVF9TVEFUVVM2NDpcXG4xNzQ3OlxcdFxcdGNhc2UgTE9PUF9TRVRfU1RBVFVTNjQ6XFxuMTc0ODpcXHRcXHRjYXNlIExPT1BfQ09ORklHVVJFOlxcbjE3NDk6XFx0XFx0XFx0YXJnID0gKHVuc2lnbmVkIGxvbmcpIGNvbXBhdF9wdHIoYXJnKTtcXG4xNzUwOlxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbjE3NTE6XFx0XFx0Y2FzZSBMT09QX1NFVF9GRDpcXG4xNzUyOlxcdFxcdGNhc2UgTE9PUF9DSEFOR0VfRkQ6XFxuMTc1MzpcXHRcXHRjYXNlIExPT1BfU0VUX0JMT0NLX1NJWkU6XFxuMTc1NDpcXHRcXHRjYXNlIExPT1BfU0VUX0RJUkVDVF9JTzpcXG4xNzU1OlxcdFxcdFxcdGVyciA9IGxvX2lvY3RsKGJkZXYsIG1vZGUsIGNtZCwgYXJnKTtcXG4xNzU2OlxcdFxcdFxcdGJyZWFrO1xcbjE3NTc6XFx0XFx0ZGVmYXVsdDpcXG4xNzU4OlxcdFxcdFxcdGVyciA9IC1FTk9JT0NUTENNRDtcXG4xNzU5OlxcdFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNzo1OTozOC44MDI4NDA5MDZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTI5ODM4OTA3ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipEaXZpbmcgaW50byB0aGUgYGxvX2lvY3RsYCBJbXBsZW1lbnRhdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBgbG9faW9jdGxgIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IHdvcmtpbmcuIEkgbmVlZCB0byBnZXQgbXkgaGVhZCBhcm91bmQgaXRzIGltcGxlbWVudGF0aW9uLiBMZXQncyBzdGFydCB3aXRoIGEgdGhvcm91Z2ggZXhhbWluYXRpb24gb2YgdGhlIGNvZGUgaXRzZWxmLCB0byBzZWUgd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGRvaW5nLiBObyBuZWVkIGZvciBicm9hZCBvdmVydmlld3Mgb3IgdGhlb3J5IGhlcmUg4oCTIEkgbmVlZCB0byBnZXQgZG93biBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBjb2RlIGFuZCBzZWUgd2hhdOKAmXMgZ29pbmcgb24gYXQgYSBsb3cgbGV2ZWwuIExldCdzIHNlZSBob3cgdGhpbmdzIGFyZSByZWFsbHkgaW1wbGVtZW50ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0MTUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTc6NTk6NTEuNzg2NzM0OTY1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MzE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL2xvb3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjMwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjMwOlxcdHN0cnVjdCBjb21wYXRfbG9vcF9pbmZvIHtcXG4xNjMxOlxcdFxcdGNvbXBhdF9pbnRfdFxcdGxvX251bWJlcjsgICAgICAvKiBpb2N0bCByL28gKi9cXG4xNjMyOlxcdFxcdGNvbXBhdF9kZXZfdFxcdGxvX2RldmljZTsgICAgICAvKiBpb2N0bCByL28gKi9cXG4xNjMzOlxcdFxcdGNvbXBhdF91bG9uZ190XFx0bG9faW5vZGU7ICAgICAgIC8qIGlvY3RsIHIvbyAqL1xcbjE2MzQ6XFx0XFx0Y29tcGF0X2Rldl90XFx0bG9fcmRldmljZTsgICAgIC8qIGlvY3RsIHIvbyAqL1xcbjE2MzU6XFx0XFx0Y29tcGF0X2ludF90XFx0bG9fb2Zmc2V0O1xcbjE2MzY6XFx0XFx0Y29tcGF0X2ludF90XFx0bG9fZW5jcnlwdF90eXBlOyAgICAgICAgLyogb2Jzb2xldGUsIGlnbm9yZWQgKi9cXG4xNjM3OlxcdFxcdGNvbXBhdF9pbnRfdFxcdGxvX2VuY3J5cHRfa2V5X3NpemU7ICAgIC8qIGlvY3RsIHcvbyAqL1xcbjE2Mzg6XFx0XFx0Y29tcGF0X2ludF90XFx0bG9fZmxhZ3M7ICAgICAgIC8qIGlvY3RsIHIvbyAqL1xcbjE2Mzk6XFx0XFx0Y2hhclxcdFxcdGxvX25hbWVbTE9fTkFNRV9TSVpFXTtcXG4xNjQwOlxcdFxcdHVuc2lnbmVkIGNoYXJcXHRsb19lbmNyeXB0X2tleVtMT19LRVlfU0laRV07IC8qIGlvY3RsIHcvbyAqL1xcbjE2NDE6XFx0XFx0Y29tcGF0X3Vsb25nX3RcXHRsb19pbml0WzJdO1xcbjE2NDI6XFx0XFx0Y2hhclxcdFxcdHJlc2VydmVkWzRdO1xcbjE2NDM6XFx0fTtcXG4xNjQ0OlxcdFxcbjE2NDU6XFx0LypcXG4xNjQ2OlxcdCAqIFRyYW5zZmVyIDMyLWJpdCBjb21wYXRpYmlsaXR5IHN0cnVjdHVyZSBpbiB1c2Vyc3BhY2UgdG8gNjQtYml0IGxvb3AgaW5mb1xcbjE2NDc6XFx0ICogLSBub2lubGluZWQgdG8gcmVkdWNlIHN0YWNrIHNwYWNlIHVzYWdlIGluIG1haW4gcGFydCBvZiBkcml2ZXJcXG4xNjQ4OlxcdCAqL1xcbjE2NDk6XFx0c3RhdGljIG5vaW5saW5lIGludFxcbjE2NTA6XFx0bG9vcF9pbmZvNjRfZnJvbV9jb21wYXQoY29uc3Qgc3RydWN0IGNvbXBhdF9sb29wX2luZm8gX191c2VyICphcmcsXFxuMTY1MTpcXHRcXHRcXHRcXHRzdHJ1Y3QgbG9vcF9pbmZvNjQgKmluZm82NClcXG4xNjUyOlxcdHtcXG4xNjUzOlxcdFxcdHN0cnVjdCBjb21wYXRfbG9vcF9pbmZvIGluZm87XFxuMTY1NDpcXHRcXG4xNjU1OlxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2aW5mbywgYXJnLCBzaXplb2YoaW5mbykpKVxcbjE2NTY6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMTY1NzpcXHRcXG4xNjU4OlxcdFxcdG1lbXNldChpbmZvNjQsIDAsIHNpemVvZigqaW5mbzY0KSk7XFxuMTY1OTpcXHRcXHRpbmZvNjQtXFx1MDAzZWxvX251bWJlciA9IGluZm8ubG9fbnVtYmVyO1xcbjE2NjA6XFx0XFx0aW5mbzY0LVxcdTAwM2Vsb19kZXZpY2UgPSBpbmZvLmxvX2RldmljZTtcXG4xNjYxOlxcdFxcdGluZm82NC1cXHUwMDNlbG9faW5vZGUgPSBpbmZvLmxvX2lub2RlO1xcbjE2NjI6XFx0XFx0aW5mbzY0LVxcdTAwM2Vsb19yZGV2aWNlID0gaW5mby5sb19yZGV2aWNlO1xcbjE2NjM6XFx0XFx0aW5mbzY0LVxcdTAwM2Vsb19vZmZzZXQgPSBpbmZvLmxvX29mZnNldDtcXG4xNjY0OlxcdFxcdGluZm82NC1cXHUwMDNlbG9fc2l6ZWxpbWl0ID0gMDtcXG4xNjY1OlxcdFxcdGluZm82NC1cXHUwMDNlbG9fZmxhZ3MgPSBpbmZvLmxvX2ZsYWdzO1xcbjE2NjY6XFx0XFx0bWVtY3B5KGluZm82NC1cXHUwMDNlbG9fZmlsZV9uYW1lLCBpbmZvLmxvX25hbWUsIExPX05BTUVfU0laRSk7XFxuMTY2NzpcXHRcXHRyZXR1cm4gMDtcXG4xNjY4OlxcdH1cXG4xNjY5OlxcdFxcbjE2NzA6XFx0LypcXG4xNjcxOlxcdCAqIFRyYW5zZmVyIDY0LWJpdCBsb29wIGluZm8gdG8gMzItYml0IGNvbXBhdGliaWxpdHkgc3RydWN0dXJlIGluIHVzZXJzcGFjZVxcbjE2NzI6XFx0ICogLSBub2lubGluZWQgdG8gcmVkdWNlIHN0YWNrIHNwYWNlIHVzYWdlIGluIG1haW4gcGFydCBvZiBkcml2ZXJcXG4xNjczOlxcdCAqL1xcbjE2NzQ6XFx0c3RhdGljIG5vaW5saW5lIGludFxcbjE2NzU6XFx0bG9vcF9pbmZvNjRfdG9fY29tcGF0KGNvbnN0IHN0cnVjdCBsb29wX2luZm82NCAqaW5mbzY0LFxcbjE2NzY6XFx0XFx0XFx0ICAgICAgc3RydWN0IGNvbXBhdF9sb29wX2luZm8gX191c2VyICphcmcpXFxuMTY3NzpcXHR7XFxuMTY3ODpcXHRcXHRzdHJ1Y3QgY29tcGF0X2xvb3BfaW5mbyBpbmZvO1xcbjE2Nzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjU5OjUxLjc4NjkzMTYxNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NTc2MjI2MTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlLCB1c2luZyBhIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgYGxvX2lvY3RsYCBDb2RlKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyBoYXBwZW5pbmcgd2l0aCBgbG9faW9jdGxgLiBUaGUgYmVzdCB3YXkgdG8gc3RhcnQgaXMgYnkgcGlucG9pbnRpbmcgdGhlIHNwZWNpZmljIGxpbmUgbnVtYmVycyBhbmQgdGhlIGFzc29jaWF0ZWQgc3ltYm9scy4gS25vd2luZyB0aGUgZXhhY3QgY29udGV4dCBvZiB0aG9zZSBsaW5lcyBpcyBjcnVjaWFsLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGludGVyYWN0aW5nIHdpdGggdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgY29udHJvbCBmbG93LiBJJ20gbG9va2luZyBmb3IgdGhlIGtleSBpbnRlcmFjdGlvbiBwb2ludHMgYW5kIGFueSBwb3RlbnRpYWwgYXJlYXMgdGhhdCBtaWdodCBuZWVkIGF0dGVudGlvbi4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0OTAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjU5OjU5LjM2MzE2MDcxMloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI0NjUwMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibG9faW9jdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9sb29wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9sb29wLmM9MTIzOD1zdGF0aWMgaW50IGxvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjQyLVxcdC8qXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTI0MzpcXHQgKiBTaW5jZSBsb19pb2N0bCgpIGlzIGNhbGxlZCB3aXRob3V0IGxvY2tzIGhlbGQsIGl0IGlzIHBvc3NpYmxlIHRoYXRcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjQ0LVxcdCAqIGxvb3BfY29uZmlndXJlKCkvbG9vcF9jaGFuZ2VfZmQoKSBhbmQgbG9vcF9jbHJfZmQoKSBydW4gaW4gcGFyYWxsZWwuXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNTQzPXN0YXRpYyBpbnQgbG9fc2ltcGxlX2lvY3RsKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHVuc2lnbmVkIGludCBjbWQsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNTY0LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE1NjU6c3RhdGljIGludCBsb19pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTU2Ni1cXHR1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE3Mjk9c3RhdGljIGludCBsb19jb21wYXRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTc1NC1cXHRjYXNlIExPT1BfU0VUX0RJUkVDVF9JTzpcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNzU1OlxcdFxcdGVyciA9IGxvX2lvY3RsKGJkZXYsIG1vZGUsIGNtZCwgYXJnKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNzU2LVxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MTgyOD1zdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGxvX2ZvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODMxLVxcdC5yZWxlYXNlID1cXHRsb19yZWxlYXNlLFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE4MzI6XFx0LmlvY3RsID1cXHRsb19pb2N0bCxcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODMzLSNpZmRlZiBDT05GSUdfQ09NUEFUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjU5OjU5LjQzNTYyOTk3MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NDMwOTIwNjIwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBMb29wIERldmljZSBEcml2ZXIgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayBkb3duIHRoZXNlIHBhdGNoIGNoYW5nZXMgbWV0aG9kaWNhbGx5LiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIGlzIGEgc2lnbmlmaWNhbnQgcmVmYWN0b3Jpbmcgb2YgdGhlIGxvb3AgYmxvY2sgZGV2aWNlIGRyaXZlciwgYW5kIGl0J3Mgc29tZXRoaW5nIEkgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIGl0J3MgYWNjZXNzaWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIFFFTVUsIGFuZCBzdGFuZGFyZCB1c2VyIHNwYWNlLlxuXG5TcGVjaWZpY2FsbHksIHRoZSBhZGRpdGlvbiBvZiBgc3RydWN0IHdvcmtfc3RydWN0IGxvX2Nscl93b3JrYCBhbmQgdGhlIHNoaWZ0IG9mIGBfX2xvb3BfY2xyX2ZkYCB0byBhIHdvcmsgaXRlbSBoYW5kbGVyIGltbWVkaWF0ZWx5IGNhdGNoZXMgbXkgZXllLiBUaGlzIGZ1bmRhbWVudGFsbHkgYWx0ZXJzIGhvdyB0aGUgZGV2aWNlIGlzIGNsZWFuZWQgdXAgYW5kIHJlbGVhc2VkLCBtb3ZpbmcgZnJvbSBhIHN5bmNocm9ub3VzIGNhbGwgd2l0aGluIGBsb19yZWxlYXNlYCB0byBhbiBhc3luY2hyb25vdXMgYXBwcm9hY2ggdmlhIGEgd29ya3F1ZXVlLiBUaGlzIG1lYW5zIHRoYXQgSS9PIGlzIGhhbmRsZWQgb3V0c2lkZSBvZiB0aGUgY3JpdGljYWwgcGF0aCBhbmQgYWZ0ZXIgdGhlIGBvcGVuX211dGV4YCBsb2NrIGhhcyBiZWVuIGRyb3BwZWQuXG5cbkxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IGxvb2tzIGxpa2UgdGhleSdyZSB0cnlpbmcgdG8gaW1wcm92ZSBjb25jdXJyZW5jeSBhbmQgaGFuZGxlIHBvdGVudGlhbCBibG9ja2luZyBvcGVyYXRpb25zIG1vcmUgZ3JhY2VmdWxseS4gVGhleSdyZSBjYXJlZnVsbHkgbWFuYWdpbmcgdGhlIGBvcGVuX211dGV4YCBsb2NrLCBmbHVzaGluZyBJL08gKHVzaW5nIGBzeW5jaHJvbml6ZV9yY3UoKWAsIGBkcmFpbl93b3JrcXVldWUoKWAsIGFuZCBgYmxrX21xX3VuZnJlZXplX3F1ZXVlKClgKSBiZWZvcmUgdGhlIG11dGV4IGlzIGxvY2tlZCwgYW5kIHRoZW4gZG9pbmcgdGhlIGNvcmUgY2xlYW51cCB3aXRoIHRoZSBtdXRleC4gVGhleSBhcmUgYWxzbyB0YWtpbmcgY2FyZSB0byBlbnN1cmUgdGhhdCByZWZjb3VudHMgb24gdGhlIGBkZXZpY2VgIGFuZCBgbW9kdWxlYCBhcmUgaGFuZGxlZCBjb3JyZWN0bHkgaW4gYm90aCBzY2VuYXJpb3MuXG5cblRoZSBgbG9fcmVsZWFzZWAgY2hhbmdlLCBkZWZlcnJpbmcgdGhlIGBfX2xvb3BfY2xyX2ZkYCBjYWxsIHRvIHRoZSBgc3lzdGVtX2xvbmdfd3FgIHdvcmtxdWV1ZSwgaXMgdGhlIGtleSB0byBhbGwgb2YgdGhpcy4gYGxvb3BfYWRkYCBub3cgaW5pdGlhbGl6ZXMgdGhlIHdvcmsgaXRlbSwgYW5kIGBsb29wX3JlbW92ZWAgZmx1c2hlcyBpdC5cblxuTXkgZXhwZXJ0IGluc3RpbmN0cyBhcmUgdGluZ2xpbmc7IHRoaXMgc21lbGxzIGxpa2UgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIFRoZSBjb25jdXJyZW5jeSBjaGFuZ2VzIGFsb25lLCBlc3BlY2lhbGx5IHdpdGggdGhlIGludHJpY2F0ZSBsb2NraW5nLCB1bmxvY2tpbmcsIGFuZCByZWZjb3VudGluZyAobW9kdWxlL2RldmljZS9maWxlKSBpbnZvbHZlZCwgYXJlIHJpcGUgZm9yIHJhY2UgY29uZGl0aW9ucywgdXNlLWFmdGVyLWZyZWVzLCBkZWFkbG9ja3MsIGFuZCBvdGhlciBzdWJ0bGUgY29uY3VycmVuY3kgYnVncy4gIFRoZSBhc3luY2hyb25vdXMgbmF0dXJlIG9mIHRoZSB3b3JrcXVldWUgbWFrZXMgaXQgcGFydGljdWxhcmx5IHN1c2NlcHRpYmxlIHRvIHRoZXNlIGtpbmRzIG9mIHByb2JsZW1zLCBhbmQgdGhlIGNvbXBsZXhpdHkgb2YgdGhlIGxvY2tpbmcvdW5sb2NraW5nIGFuZCByZWZjb3VudGluZyBtYWtlcyBpdCB3b3JzZS5cblxuU28sIHllcywgYWJzb2x1dGVseSwgKipXb3J0aEZ1enppbmcgPSB0cnVlLioqXG5cbk5vdywgbGV0IG1lIGNoZWNrIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcyB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLiBUaW1lIHRvIGNoZWNrIGBkcml2ZXJzL2Jsb2NrL0tjb25maWdgIHRvIHNlZSB3aGF0J3MgcmVxdWlyZWQgZm9yIGBsb29wLmNgIHRvIGJlIGJ1aWx0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDExNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxODowMTowMy43NDQ4NDA5NzVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxMjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNDA6XFx0Y29uZmlnIEJMS19ERVZfQ09XX0NPTU1PTlxcbiAxNDE6XFx0XFx0Ym9vbFxcbiAxNDI6XFx0XFx0ZGVmYXVsdCBCTEtfREVWX1VCRFxcbiAxNDM6XFx0XFxuIDE0NDpcXHRjb25maWcgQkxLX0RFVl9MT09QXFxuIDE0NTpcXHRcXHR0cmlzdGF0ZSBcXFwiTG9vcGJhY2sgZGV2aWNlIHN1cHBvcnRcXFwiXFxuIDE0NjpcXHRcXHRoZWxwXFxuIDE0NzpcXHRcXHQgIFNheWluZyBZIGhlcmUgd2lsbCBhbGxvdyB5b3UgdG8gdXNlIGEgcmVndWxhciBmaWxlIGFzIGEgYmxvY2tcXG4gMTQ4OlxcdFxcdCAgZGV2aWNlOyB5b3UgY2FuIHRoZW4gY3JlYXRlIGEgZmlsZSBzeXN0ZW0gb24gdGhhdCBibG9jayBkZXZpY2UgYW5kXFxuIDE0OTpcXHRcXHQgIG1vdW50IGl0IGp1c3QgYXMgeW91IHdvdWxkIG1vdW50IG90aGVyIGJsb2NrIGRldmljZXMgc3VjaCBhcyBoYXJkXFxuIDE1MDpcXHRcXHQgIGRyaXZlIHBhcnRpdGlvbnMsIENELVJPTSBkcml2ZXMgb3IgZmxvcHB5IGRyaXZlcy4gVGhlIGxvb3AgZGV2aWNlc1xcbiAxNTE6XFx0XFx0ICBhcmUgYmxvY2sgc3BlY2lhbCBkZXZpY2UgZmlsZXMgd2l0aCBtYWpvciBudW1iZXIgNyBhbmQgdHlwaWNhbGx5XFxuIDE1MjpcXHRcXHQgIGNhbGxlZCAvZGV2L2xvb3AwLCAvZGV2L2xvb3AxIGV0Yy5cXG4gMTUzOlxcdFxcbiAxNTQ6XFx0XFx0ICBUaGlzIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBjaGVjayBhbiBJU08gOTY2MCBmaWxlIHN5c3RlbSBiZWZvcmVcXG4gMTU1OlxcdFxcdCAgYnVybmluZyB0aGUgQ0QsIG9yIGlmIHlvdSB3YW50IHRvIHVzZSBmbG9wcHkgaW1hZ2VzIHdpdGhvdXQgZmlyc3RcXG4gMTU2OlxcdFxcdCAgd3JpdGluZyB0aGVtIHRvIGZsb3BweS4gRnVydGhlcm1vcmUsIHNvbWUgTGludXggZGlzdHJpYnV0aW9ucyBhdm9pZFxcbiAxNTc6XFx0XFx0ICB0aGUgbmVlZCBmb3IgYSBkZWRpY2F0ZWQgTGludXggcGFydGl0aW9uIGJ5IGtlZXBpbmcgdGhlaXIgY29tcGxldGVcXG4gMTU4OlxcdFxcdCAgcm9vdCBmaWxlIHN5c3RlbSBpbnNpZGUgYSBET1MgRkFUIGZpbGUgdXNpbmcgdGhpcyBsb29wIGRldmljZVxcbiAxNTk6XFx0XFx0ICBkcml2ZXIuXFxuIDE2MDpcXHRcXG4gMTYxOlxcdFxcdCAgVG8gdXNlIHRoZSBsb29wIGRldmljZSwgeW91IG5lZWQgdGhlIGxvc2V0dXAgdXRpbGl0eSwgZm91bmQgaW4gdGhlXFxuIDE2MjpcXHRcXHQgIHV0aWwtbGludXggcGFja2FnZSwgc2VlXFxuIDE2MzpcXHRcXHQgIFxcdTAwM2NodHRwczovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC91dGlscy91dGlsLWxpbnV4L1xcdTAwM2UuXFxuIDE2NDpcXHRcXG4gMTY1OlxcdFxcdCAgVGhlIGxvb3AgZGV2aWNlIGRyaXZlciBjYW4gYWxzbyBiZSB1c2VkIHRvIFxcXCJoaWRlXFxcIiBhIGZpbGUgc3lzdGVtIGluXFxuIDE2NjpcXHRcXHQgIGEgZGlzayBwYXJ0aXRpb24sIGZsb3BweSwgb3IgcmVndWxhciBmaWxlLCBlaXRoZXIgdXNpbmcgZW5jcnlwdGlvblxcbiAxNjc6XFx0XFx0ICAoc2NyYW1ibGluZyB0aGUgZGF0YSkgb3Igc3RlZ2Fub2dyYXBoeSAoaGlkaW5nIHRoZSBkYXRhIGluIHRoZSBsb3dcXG4gMTY4OlxcdFxcdCAgYml0cyBvZiwgc2F5LCBhIHNvdW5kIGZpbGUpLiBUaGlzIGlzIGFsc28gc2FmZSBpZiB0aGUgZmlsZSByZXNpZGVzXFxuIDE2OTpcXHRcXHQgIG9uIGEgcmVtb3RlIGZpbGUgc2VydmVyLlxcbiAxNzA6XFx0XFxuIDE3MTpcXHRcXHQgIE5vdGUgdGhhdCB0aGlzIGxvb3AgZGV2aWNlIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggdGhlIGxvb3BiYWNrXFxuIDE3MjpcXHRcXHQgIGRldmljZSB1c2VkIGZvciBuZXR3b3JrIGNvbm5lY3Rpb25zIGZyb20gdGhlIG1hY2hpbmUgdG8gaXRzZWxmLlxcbiAxNzM6XFx0XFxuIDE3NDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAxNzU6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbG9vcC5cXG4gMTc2OlxcdFxcbiAxNzc6XFx0XFx0ICBNb3N0IHVzZXJzIHdpbGwgYW5zd2VyIE4gaGVyZS5cXG4gMTc4OlxcdFxcbiAxNzk6XFx0Y29uZmlnIEJMS19ERVZfTE9PUF9NSU5fQ09VTlRcXG4gMTgwOlxcdFxcdGludCBcXFwiTnVtYmVyIG9mIGxvb3AgZGV2aWNlcyB0byBwcmUtY3JlYXRlIGF0IGluaXQgdGltZVxcXCJcXG4gMTgxOlxcdFxcdGRlcGVuZHMgb24gQkxLX0RFVl9MT09QXFxuIDE4MjpcXHRcXHRkZWZhdWx0IDhcXG4gMTgzOlxcdFxcdGhlbHBcXG4gMTg0OlxcdFxcdCAgU3RhdGljIG51bWJlciBvZiBsb29wIGRldmljZXMgdG8gYmUgdW5jb25kaXRpb25hbGx5IHByZS1jcmVhdGVkXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE4OjAxOjAzLjc0NDk4NDQwNVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MzM2MzE4MjcxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyBmb3IgSGlkZGVuIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBCTEtfREVWX0xPT1BgIG1vZHVsZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiUmlnaHQsIGJlZm9yZSBJIGdldCB0b28gZGVlcCwgYXJlIHRoZXJlIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgb3IgY29uZmlndXJhdGlvbnMgdGhhdCBJIG1pZ2h0IGJlIG92ZXJsb29raW5nP1wiIEl0J3MgYWx3YXlzIGJlc3QgdG8gYmUgdGhvcm91Z2gsIGVzcGVjaWFsbHkgd2l0aCBibG9jayBkZXZpY2UgZHJpdmVycy4gSSd2ZSBsZWFybmVkIHRoYXQgbGVzc29uIHRoZSBoYXJkIHdheSEgTXkgaW5zdGluY3QgaXMgdG8gaGVhZCBzdHJhaWdodCBmb3IgdGhlIGBLY29uZmlnYCBmaWxlIGluIHRoZSBgZHJpdmVycy9ibG9ja2AgZGlyZWN0b3J5LiBJdCdzIHVzdWFsbHkgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQuIExldCdzIHN0YXJ0IGFyb3VuZCBsaW5lIDEgYW5kIHNlZSB3aGF0IHdlIGNhbiBkaWcgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDMzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxODowMTo0Ny4xMDgxNzAzODNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0NzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgQmxvY2sgZGV2aWNlIGRyaXZlciBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnVjb25maWcgQkxLX0RFVlxcbiAgIDc6XFx0XFx0Ym9vbCBcXFwiQmxvY2sgZGV2aWNlc1xcXCJcXG4gICA4OlxcdFxcdGRlcGVuZHMgb24gQkxPQ0tcXG4gICA5OlxcdFxcdGRlZmF1bHQgeVxcbiAgMTA6XFx0XFx0aGVscFxcbiAgMTE6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGdldCB0byBzZWUgb3B0aW9ucyBmb3IgdmFyaW91cyBkaWZmZXJlbnQgYmxvY2sgZGV2aWNlXFxuICAxMjpcXHRcXHQgIGRyaXZlcnMuIFRoaXMgb3B0aW9uIGFsb25lIGRvZXMgbm90IGFkZCBhbnkga2VybmVsIGNvZGUuXFxuICAxMzpcXHRcXG4gIDE0OlxcdFxcdCAgSWYgeW91IHNheSBOLCBhbGwgb3B0aW9ucyBpbiB0aGlzIHN1Ym1lbnUgd2lsbCBiZSBza2lwcGVkIGFuZCBkaXNhYmxlZDtcXG4gIDE1OlxcdFxcdCAgb25seSBkbyB0aGlzIGlmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0aWYgQkxLX0RFVlxcbiAgMTg6XFx0XFxuICAxOTpcXHRzb3VyY2UgXFxcImRyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZ1xcXCJcXG4gIDIwOlxcdHNvdXJjZSBcXFwiZHJpdmVycy9ibG9jay9ybnVsbC9LY29uZmlnXFxcIlxcbiAgMjE6XFx0XFxuICAyMjpcXHRjb25maWcgQkxLX0RFVl9GRFxcbiAgMjM6XFx0XFx0dHJpc3RhdGUgXFxcIk5vcm1hbCBmbG9wcHkgZGlzayBzdXBwb3J0XFxcIlxcbiAgMjQ6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX01BWV9IQVZFX1BDX0ZEQ1xcbiAgMjU6XFx0XFx0aGVscFxcbiAgMjY6XFx0XFx0ICBJZiB5b3Ugd2FudCB0byB1c2UgdGhlIGZsb3BweSBkaXNrIGRyaXZlKHMpIG9mIHlvdXIgUEMgdW5kZXIgTGludXgsXFxuICAyNzpcXHRcXHQgIHNheSBZLiBJbmZvcm1hdGlvbiBhYm91dCB0aGlzIGRyaXZlciwgZXNwZWNpYWxseSBpbXBvcnRhbnQgZm9yIElCTVxcbiAgMjg6XFx0XFx0ICBUaGlua3BhZCB1c2VycywgaXMgY29udGFpbmVkIGluXFxuICAyOTpcXHRcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmxvY2tkZXYvZmxvcHB5LnJzdFxcdTAwM2UuXFxuICAzMDpcXHRcXHQgIFRoYXQgZmlsZSBhbHNvIGNvbnRhaW5zIHRoZSBsb2NhdGlvbiBvZiB0aGUgRmxvcHB5IGRyaXZlciBGQVEgYXNcXG4gIDMxOlxcdFxcdCAgd2VsbCBhcyBsb2NhdGlvbiBvZiB0aGUgZmR1dGlscyBwYWNrYWdlIHVzZWQgdG8gY29uZmlndXJlIGFkZGl0aW9uYWxcXG4gIDMyOlxcdFxcdCAgcGFyYW1ldGVycyBvZiB0aGUgZHJpdmVyIGF0IHJ1biB0aW1lLlxcbiAgMzM6XFx0XFxuICAzNDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAgMzU6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZmxvcHB5LlxcbiAgMzY6XFx0XFxuICAzNzpcXHRjb25maWcgQkxLX0RFVl9GRF9SQVdDTURcXG4gIDM4OlxcdFxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIHJhdyBmbG9wcHkgZGlzayBjb21tYW5kcyAoREVQUkVDQVRFRClcXFwiXFxuICAzOTpcXHRcXHRkZXBlbmRzIG9uIEJMS19ERVZfRkRcXG4gIDQwOlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTg6MDE6NDcuMTA4MzA3NzEzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwMTA5OTEwMzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTG9vcCBCbG9jayBEZXZpY2UgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBgQkxLX0RFVmAgZGVwZW5kcyBvbiBgQkxPQ0tgLiBUaGF0IG1ha2VzIHNlbnNlLiBBbmQgYEJMS19ERVZfTE9PUGAgaXMgKmluc2lkZSogYEJMS19ERVZgLCBzbywgaW1wbGljaXRseSwgdGhhdCBhbHNvIHJlcXVpcmVzIGBCTE9DS2AuIEdvdCBpdC4gTm93LCB3aGF0J3Mgb3VyIGF0dGFjayBzdXJmYWNlPyBMZXQncyBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyBpbiBgZHJpdmVycy9ibG9jay9sb29wLmNgIGFyZSBnb2luZyB0byBiZSBtb3N0IHVzZWZ1bCBmb3IgZnV6emluZy5cblxuTGV0J3Mgc2VlLi4uIHdoYXQgYXJlIHRoZSBlbnRyeSBwb2ludHM/IEhtbSwgb2theSwgaGVyZSdzIGEgc3RhcnQ6IGBsb19yZWxlYXNlYCwgd2hpY2ggaXMgdGhlIGBmb3BzLVx1MDAzZXJlbGVhc2VgIGNhbGxiYWNrLiBUaGF0J3MgYSBnb29kIGNhbmRpZGF0ZS4gV2UgYWxzbyBoYXZlIGBsb29wX2Nscl9mZGAsIGFuZCB0aGUgYGxvX2lvY3RsYCBhbmQgYGxvX2NvbXBhdF9pb2N0bGAgcGFpci4gT2theSwgYGxvb3BfY29udHJvbF9pb2N0bGAgaXMgYW5vdGhlciBvbmUgdG8gY29uc2lkZXIuIEFuZCB0aGVuIHRoZXJlIGFyZSB0aGUgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gbWFuYWdlbWVudCDigJMgYGxvb3BfYWRkYCwgYGxvb3BfcmVtb3ZlYCwgYGxvb3BfY29uZmlndXJlYCwgYW5kIGBsb29wX2NoYW5nZV9mZGAuIFRob3NlIGFsbCBsb29rIGludGVyZXN0aW5nLlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBkZWVwZXIgYW5kIGFjdHVhbGx5IGxvb2sgYXQgdGhlIGNvZGUgZGVmaW5pdGlvbnMgdGhlbXNlbHZlcyB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjc2OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE4OjAxOjU3LjIxODIyMDk1OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0MjU5NTM1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApPyhpbnR8dm9pZHxsb25nKSBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9sb29wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9sb29wLmM9OTc9c3RhdGljIERFRklORV9NVVRFWChsb29wX3ZhbGlkYXRlX211dGV4KTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTExMC0gKi9cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMTE6c3RhdGljIGludCBsb29wX2dsb2JhbF9sb2NrX2tpbGxhYmxlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGJvb2wgZ2xvYmFsKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTExMi17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMzEtICovXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTMyOnN0YXRpYyB2b2lkIGxvb3BfZ2xvYmFsX3VubG9jayhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBib29sIGdsb2JhbClcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMzMte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTM4LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEzOTpzdGF0aWMgaW50IG1heF9wYXJ0O1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE0MDpzdGF0aWMgaW50IHBhcnRfc2hpZnQ7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTQxLVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MjAyPXN0YXRpYyBpbmxpbmUgdm9pZCBsb29wX3VwZGF0ZV9kaW8oc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIxOS0gKi9cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMjA6c3RhdGljIHZvaWQgbG9vcF9zZXRfc2l6ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBsb2ZmX3Qgc2l6ZSlcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjEte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjI1LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIyNjpzdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBpbnQgbW9kZSlcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjcte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjQ3LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjI0ODpzdGF0aWMgaW50IGxvX2ZhbGxvY2F0ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIGxvZmZfdCBwb3MsXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjQ5LVxcdFxcdFxcdGludCBtb2RlKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjc2LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjI3NzpzdGF0aWMgaW50IGxvX3JlcV9mbHVzaChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjc4LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTI4NS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyODY6c3RhdGljIHZvaWQgbG9fY29tcGxldGVfcnEoc3RydWN0IHJlcXVlc3QgKnJxKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTI4Ny17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0zMTktXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MzIwOnN0YXRpYyB2b2lkIGxvX3J3X2Fpb19kb19jb21wbGV0aW9uKHN0cnVjdCBsb29wX2NtZCAqY21kKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTMyMS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0zMzMtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MzM0OnN0YXRpYyB2b2lkIGxvX3J3X2Fpb19jb21wbGV0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGxvbmcgcmV0KVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTMzNS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0zNDEtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MzQyOnN0YXRpYyBpbnQgbG9fcndfYWlvKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBsb29wX2NtZCAqY21kLFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTM0My1cXHRcXHQgICAgIGxvZmZfdCBwb3MsIGludCBydylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTQxMC1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo0MTE6c3RhdGljIGludCBkb19yZXFfZmlsZWJhY2tlZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNDEyLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTQzOS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo0NDA6c3RhdGljIHZvaWQgbG9vcF9yZXJlYWRfcGFydGl0aW9ucyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTQ0MS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy00NTEtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6NDUyOnN0YXRpYyB2b2lkIGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy00NTMte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9NDg1PXN0YXRpYyBpbmxpbmUgaW50IGlzX2xvb3BfZGV2aWNlKHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNDkxLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjQ5MjpzdGF0aWMgaW50IGxvb3BfdmFsaWRhdGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy00OTMte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNTE2LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjUxNzpzdGF0aWMgdm9pZCBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGZpbGUgKmZpbGUpXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNTE4LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTUyNy1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo1Mjg6c3RhdGljIGludCBsb29wX2NoZWNrX2JhY2tpbmdfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy01Mjkte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNTQ2LSAqL1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjU0NzpzdGF0aWMgaW50IGxvb3BfY2hhbmdlX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNTQ4LVxcdFxcdFxcdCAgdW5zaWduZWQgaW50IGFyZylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTczMz1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBsb29wX2F0dHJpYnV0ZV9ncm91cCA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTczNy1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo3Mzg6c3RhdGljIHZvaWQgbG9vcF9zeXNmc19pbml0KHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNzM5LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTc0My1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo3NDQ6c3RhdGljIHZvaWQgbG9vcF9zeXNmc19leGl0KHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNzQ1LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTc1MC1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo3NTE6c3RhdGljIHZvaWQgbG9vcF9nZXRfZGlzY2FyZF9jb25maWcoc3RydWN0IGxvb3BfZGV2aWNlICpsbyxcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy03NTItXFx0XFx0XFx0XFx0ICAgIHUzMiAqZ3JhbnVsYXJpdHksIHUzMiAqbWF4X2Rpc2NhcmRfc2VjdG9ycylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTc4MT1zdHJ1Y3QgbG9vcF93b3JrZXIge1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNzkwLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjc5MTpzdGF0aWMgdm9pZCBsb29wX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTc5Mi1cXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTc5OT1zdGF0aWMgaW5saW5lIGludCBxdWV1ZV9vbl9yb290X3dvcmtlcihzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtODA0LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjgwNTpzdGF0aWMgdm9pZCBsb29wX3F1ZXVlX3dvcmsoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGxvb3BfY21kICpjbWQpXFxuZHJpdmVycy9ibG9jay9sb29wLmMtODA2LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTg3NC1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo4NzU6c3RhdGljIHZvaWQgbG9vcF9zZXRfdGltZXIoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy04NzYte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtODc5LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjg4MDpzdGF0aWMgdm9pZCBsb29wX2ZyZWVfaWRsZV93b3JrZXJzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGJvb2wgZGVsZXRlX2FsbClcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy04ODEte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtOTAwLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjkwMTpzdGF0aWMgdm9pZCBsb29wX2ZyZWVfaWRsZV93b3JrZXJzX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcilcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy05MDIte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9OTQ4PXN0YXRpYyB1bnNpZ25lZCBpbnQgbG9vcF9kZWZhdWx0X2Jsb2Nrc2l6ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtOTU1LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjk1NjpzdGF0aWMgdm9pZCBsb29wX3NldF9kbWFfbGltaXQoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTk1Ny17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy05NjgtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6OTY5OnN0YXRpYyB2b2lkIGxvb3BfdXBkYXRlX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sXFxuZHJpdmVycy9ibG9jay9sb29wLmMtOTcwLVxcdFxcdHVuc2lnbmVkIGludCBic2l6ZSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEwMDMtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTAwNDpzdGF0aWMgaW50IGxvb3BfY29uZmlndXJlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGJsa19tb2RlX3QgbW9kZSxcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMDA1LVxcdFxcdFxcdCAgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldixcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTExMzctXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTEzODpzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTM5LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEyMzctXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTIzODpzdGF0aWMgaW50IGxvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTIzOS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNDM5PWxvb3BfZ2V0X3N0YXR1czY0KHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBsb29wX2luZm82NCBfX3VzZXIgKmFyZykge1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTQ1MS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNDUyOnN0YXRpYyBpbnQgbG9vcF9zZXRfY2FwYWNpdHkoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNDUzLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE0NjQtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTQ2NTpzdGF0aWMgaW50IGxvb3Bfc2V0X2RpbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCB1bnNpZ25lZCBsb25nIGFyZylcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNDY2LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE0OTQtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTQ5NTpzdGF0aWMgaW50IGxvb3Bfc2V0X2Jsb2NrX3NpemUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgYmxrX21vZGVfdCBtb2RlLFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE0OTYtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTU0Mi1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNTQzOnN0YXRpYyBpbnQgbG9fc2ltcGxlX2lvY3RsKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHVuc2lnbmVkIGludCBjbWQsXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTU0NC1cXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE1NjQtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTU2NTpzdGF0aWMgaW50IGxvX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNTY2LVxcdHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MTcxNT1sb29wX2dldF9zdGF0dXNfY29tcGF0KHN0cnVjdCBsb29wX2RldmljZSAqbG8sXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNzI4LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE3Mjk6c3RhdGljIGludCBsb19jb21wYXRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE3MzAtXFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNzY0LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE3NjU6c3RhdGljIGludCBsb19vcGVuKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBibGtfbW9kZV90IG1vZGUpXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTc2Ni17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNzc5LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE3ODA6c3RhdGljIHZvaWQgbG9fcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNzgxLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4MTUtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTgxNjpzdGF0aWMgdm9pZCBsb19mcmVlX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTgxNy17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xODI4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbG9fZm9wcyA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4NTItICovXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTg1MzpzdGF0aWMgaW50IG1heF9sb29wID0gQ09ORklHX0JMS19ERVZfTE9PUF9NSU5fQ09VTlQ7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTg1NC1cXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE4NTY9c3RhdGljIGJvb2wgbWF4X2xvb3Bfc3BlY2lmaWVkO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4NTctXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTg1ODpzdGF0aWMgaW50IG1heF9sb29wX3BhcmFtX3NldF9pbnQoY29uc3QgY2hhciAqdmFsLFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4NTktXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE4ODQ9TU9EVUxFX1BBUk1fREVTQyhtYXhfcGFydCwgXFxcIk1heGltdW0gbnVtYmVyIG9mIHBhcnRpdGlvbnMgcGVyIGxvb3AgZGV2aWNlXFxcIik7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTg4NS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxODg2OnN0YXRpYyBpbnQgaHdfcXVldWVfZGVwdGggPSBMT09QX0RFRkFVTFRfSFdfUV9ERVBUSDtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODg3LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE4ODg6c3RhdGljIGludCBsb29wX3NldF9od19xdWV1ZV9kZXB0aChjb25zdCBjaGFyICpzLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICpwKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4ODkte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MTkxMz1zdGF0aWMgYmxrX3N0YXR1c190IGxvb3BfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xOTU1LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE5NTY6c3RhdGljIHZvaWQgbG9vcF9oYW5kbGVfY21kKHN0cnVjdCBsb29wX2NtZCAqY21kKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE5NTcte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjAwNy1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMDA4OnN0YXRpYyB2b2lkIGxvb3BfcHJvY2Vzc193b3JrKHN0cnVjdCBsb29wX3dvcmtlciAqd29ya2VyLFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIwMDktXFx0XFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqY21kX2xpc3QsIHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMDQxLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIwNDI6c3RhdGljIHZvaWQgbG9vcF93b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIwNDMte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjA0OC1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMDQ5OnN0YXRpYyB2b2lkIGxvb3Bfcm9vdGNnX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjA1MC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0yMDU2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyBsb29wX21xX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIwNjAtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MjA2MTpzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIwNjIte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjE3OS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMTgwOnN0YXRpYyB2b2lkIGxvb3BfcmVtb3ZlKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjE4MS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMTk2LSNpZmRlZiBDT05GSUdfQkxPQ0tfTEVHQUNZX0FVVE9MT0FEXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MjE5NzpzdGF0aWMgdm9pZCBsb29wX3Byb2JlKGRldl90IGRldilcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMTk4LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIyMDgtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MjIwOTpzdGF0aWMgaW50IGxvb3BfY29udHJvbF9yZW1vdmUoaW50IGlkeClcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjEwLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIyNTUtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MjI1NjpzdGF0aWMgaW50IGxvb3BfY29udHJvbF9nZXRfZnJlZShpbnQgaWR4KVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIyNTcte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjI3OS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMjgwOnN0YXRpYyBsb25nIGxvb3BfY29udHJvbF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjgxLVxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIHBhcm0pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0yMzEwPU1PRFVMRV9BTElBUyhcXFwiZGV2bmFtZTpsb29wLWNvbnRyb2xcXFwiKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMzExLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIzMTI6c3RhdGljIGludCBfX2luaXQgbG9vcF9pbml0KHZvaWQpXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjMxMy17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMzY0LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIzNjU6c3RhdGljIHZvaWQgX19leGl0IGxvb3BfZXhpdCh2b2lkKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIzNjYte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MjM4Nj1tb2R1bGVfZXhpdChsb29wX2V4aXQpO1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjM4OC0jaWZuZGVmIE1PRFVMRVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIzODk6c3RhdGljIGludCBfX2luaXQgbWF4X2xvb3Bfc2V0dXAoY2hhciAqc3RyKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIzOTAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxODowMTo1OC42NjA4MjQwMDVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzU3MTU3MjMwMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGb2N1c1N5bWJvbHMgYW5kIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJ20gbG9va2luZyBhdCB0aGVzZSBgRm9jdXNTeW1ib2xzYCByZWxhdGVkIHRvIGxvb3AgZGV2aWNlczogYGxvX3JlbGVhc2VgLCBgbG9vcF9jbHJfZmRgLCBgbG9faW9jdGxgLCBgbG9vcF9jb250cm9sX2lvY3RsYCwgYGxvb3BfY29uZmlndXJlYCwgYW5kIGBsb29wX3JlbW92ZWAuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyB0byBlbnN1cmUgdGhlIGFwcHJvcHJpYXRlIGNvbmZpZ3VyYXRpb24gaXMgaW4gcGxhY2UuXG5cblNwZWNpZmljYWxseSwgSSBzZWUgd2UncmUgdXNpbmcgYEJMS19ERVZfTE9PUGAgaW4gdGhlIGBDb25maWdgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBpcyBzdWZmaWNpZW50LiBHb2luZyB0aHJvdWdoIHRoZSBkZXBlbmRlbmNpZXMsIGBCTEtfREVWX0xPT1BgIHJlbGllcyBvbiBgQkxLX0RFVmAsIHdoaWNoIGl0c2VsZiBkZWZhdWx0cyB0byAneScgaWYgYEJMT0NLYCBpcyBzZXQuIEdpdmVuIHRoaXMsIHNwZWNpZnlpbmcgYEJMS19ERVZfTE9PUGAgc2VlbXMgYXBwcm9wcmlhdGUuIEkgZG9uJ3Qgc2VlIGFueSBnbGFyaW5nIG9taXNzaW9ucyBvciBjb25mbGljdHMsIHNvIHRoYXQncyBnb29kLlxuXG5KdXN0IGRvaW5nIGEgcXVpY2sgZmluYWwgc2FuaXR5IGNoZWNrIGhlcmUuLi4gYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIGB0cnVlYCwgdGhlIGBFbmFibGVDb25maWdzYCBhcnJheSBjb250YWlucyBvbmx5IGBCTEtfREVWX0xPT1BgLCBhbmQgdGhlIGBGb2N1c1N5bWJvbHNgIGFycmF5IGhhcyB0aGUgZm91ciBzeW1ib2xzIEkgbWVudGlvbmVkIGJlZm9yZTsgbG9va3MgZ29vZC4gSSBoYXZlIGEgY29uY2lzZSBkZXNjcmlwdGlvbiBvZiB3aGF0IGlzIGdvaW5nIG9uIGhlcmUuIE5vdyBJIHRoaW5rIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3Mjk0LCJPdXRwdXRUb2tlbnMiOjE0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxODowMzoxNC4zNzY1NTEwNzRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzIwNzIyODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTE9PUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxvX3JlbGVhc2VcIixcbiAgICBcImxvb3BfY2xyX2ZkXCIsXG4gICAgXCJsb19pb2N0bFwiLFxuICAgIFwibG9vcF9jb250cm9sX2lvY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbG9vcCBkZXZpY2UgdGVhcmRvd24gbG9naWMgaW4gZHJpdmVycy9ibG9jay9sb29wLmMgdG8gZGVmZXIgY2xlYXJpbmcgdGhlIGJhY2tpbmcgZmlsZSBhbmQgcmVsZWFzaW5nIHJlc291cmNlcyAoX19sb29wX2Nscl9mZCkgdG8gYSB3b3JrcXVldWUgY29udGV4dCB3aGVuIHRoZSBsb29wIGRldmljZSBpcyBjbG9zZWQuIFRoaXMgaW50cm9kdWNlcyBuZXcgY29uY3VycmVuY3kgaGFuZGxpbmcsIHJlZmVyZW5jZSBjb3VudGluZywgYW5kIHF1ZXVlIGRyYWluaW5nIHNlbWFudGljcyB3aGljaCBzaG91bGQgYmUgZnV6emVkIGZvciByYWNlIGNvbmRpdGlvbnMsIGRlYWRsb2NrcywgYW5kIFVBRnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9MT09QXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibG9fcmVsZWFzZVwiLFxuICAgIFwibG9vcF9jbHJfZmRcIixcbiAgICBcImxvX2lvY3RsXCIsXG4gICAgXCJsb29wX2NvbnRyb2xfaW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBsb29wIGRldmljZSB0ZWFyZG93biBsb2dpYyBpbiBkcml2ZXJzL2Jsb2NrL2xvb3AuYyB0byBkZWZlciBjbGVhcmluZyB0aGUgYmFja2luZyBmaWxlIGFuZCByZWxlYXNpbmcgcmVzb3VyY2VzIChfX2xvb3BfY2xyX2ZkKSB0byBhIHdvcmtxdWV1ZSBjb250ZXh0IHdoZW4gdGhlIGxvb3AgZGV2aWNlIGlzIGNsb3NlZC4gVGhpcyBpbnRyb2R1Y2VzIG5ldyBjb25jdXJyZW5jeSBoYW5kbGluZywgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgcXVldWUgZHJhaW5pbmcgc2VtYW50aWNzIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgZm9yIHJhY2UgY29uZGl0aW9ucywgZGVhZGxvY2tzLCBhbmQgVUFGcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTg6MDM6MTQuNTQ4NjMzNTcxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDk3ODQ4MjIwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE4OjAzOjE0LjU1MDQ2NzEwMVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE0OTc2NjQyOTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkcml2ZXJzL2Jsb2NrL2xvb3AuYyB0byBkZWZlciBsb29wIGRldmljZSB0ZWFyZG93biAoX19sb29wX2Nscl9mZCkgdG8gYSB3b3JrcXVldWUgaXRlbSAobG9fY2xyX3dvcmspIHJhdGhlciB0aGFuIGV4ZWN1dGluZyBpdCBzeW5jaHJvbm91c2x5IGluIGxvX3JlbGVhc2UuIFRoZSBjaGFuZ2VzIGludm9sdmUgd29ya3F1ZXVlIHNjaGVkdWxpbmcsIHJlZmVyZW5jZSBjb3VudGluZywgYW5kIHN5bmNocm9uaXphdGlvbiAoZHJhaW5fd29ya3F1ZXVlLCBmcmVlemVfcXVldWUsIG11dGV4IGxvY2tpbmcpLiBObyB1bmluaXRpYWxpemVkIGRhdGEgc3RydWN0dXJlcywgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhpcyBwYXRjaCAoc3VjaCBhcyByYWNlIGNvbmRpdGlvbnMsIGRlYWRsb2NrcywgdXNlLWFmdGVyLWZyZWUsIG9yIHJlZmVyZW5jZSBjb3VudCBsZWFrcykgYXJlIGNvdmVyZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgc2FuaXRpemVycywgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiB1bm5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxNzg3NTlmYjdkY2I5N2NhZGUxMTYxM2JiMDM2M2EzMGI1YWM5ODkzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjggMTc6NTY6NDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXG5pbmRleCA2ZjEyOTc2MDM1YjA5Li5lMjcwM2YwZWU3NWQ3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmNcbisrKyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXG5AQCAtNzUsNiArNzUsNyBAQCBzdHJ1Y3QgbG9vcF9kZXZpY2Uge1xuIFx0c3RydWN0IGdlbmRpc2tcdFx0KmxvX2Rpc2s7XG4gXHRzdHJ1Y3QgbXV0ZXhcdFx0bG9fbXV0ZXg7XG4gXHRib29sXHRcdFx0aWRyX3Zpc2libGU7XG4rXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdGxvX2Nscl93b3JrO1xuIH07XG4gXG4gc3RydWN0IGxvb3BfY21kIHtcbkBAIC0xMTM0LDEzICsxMTM1LDM1IEBAIHN0YXRpYyBpbnQgbG9vcF9jb25maWd1cmUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgYmxrX21vZGVfdCBtb2RlLFxuIFx0cmV0dXJuIGVycm9yO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4rc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuK1x0c3RydWN0IGxvb3BfZGV2aWNlICpsbyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbG9vcF9kZXZpY2UsIGxvX2Nscl93b3JrKTtcbitcdHN0cnVjdCBnZW5kaXNrICpkaXNrID0gbG8tXHUwMDNlbG9fZGlzaztcbiBcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltO1xuIFx0c3RydWN0IGZpbGUgKmZpbHA7XG4gXHRnZnBfdCBnZnAgPSBsby1cdTAwM2VvbGRfZ2ZwX21hc2s7XG4gXHRpbnQgZXJyO1xuIFxuK1x0LyogU3RlcCAxOiBGbHVzaCBhbGwgb3V0c3RhbmRpbmcgSS9PLCB3aXRob3V0IG9wZW5fbXV0ZXggaGVsZC4gKi9cbitcdC8qXG4rXHQgKiBOb3cgdGhhdCBsb29wX3F1ZXVlX3JxKCkgc2VlcyBsby1cdTAwM2Vsb19zdGF0ZSAhPSBMb19ib3VuZCxcbitcdCAqIHdhaXQgZm9yIGFscmVhZHkgc3RhcnRlZCBsb29wX3F1ZXVlX3JxKCkgdG8gY29tcGxldGUuXG4rXHQgKi9cbitcdHN5bmNocm9uaXplX3JjdSgpO1xuK1x0LypcbitcdCAqIE5vdyB0aGF0IG5vIG1vcmUgd29ya3MgYXJlIHNjaGVkdWxlZCBieSBsb29wX3F1ZXVlX3JxKCksXG4rXHQgKiB3YWl0IGZvciBhbHJlYWR5IHNjaGVkdWxlZCB3b3JrcyB0byBjb21wbGV0ZS5cbitcdCAqL1xuK1x0ZHJhaW5fd29ya3F1ZXVlKGxvLVx1MDAzZXdvcmtxdWV1ZSk7XG4rXHQvKlxuK1x0ICogTm93IHRoYXQgbm8gbW9yZSBBSU8gcmVxdWVzdHMgYXJlIHNjaGVkdWxlZCBieSBsb19yd19haW8oKSxcbitcdCAqIHdhaXQgZm9yIGFscmVhZHkgc3RhcnRlZCBBSU8gdG8gY29tcGxldGUuXG4rXHQgKi9cbitcdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShsby1cdTAwM2Vsb19xdWV1ZSwgYmxrX21xX2ZyZWV6ZV9xdWV1ZShsby1cdTAwM2Vsb19xdWV1ZSkpO1xuK1xuK1x0LyogU3RlcCAyOiBQZXJmb3JtIHJlbWFpbmluZyBjbGVhbnVwLCB3aXRoIG9wZW5fbXV0ZXggaGVsZC4gKi9cbitcdG11dGV4X2xvY2soXHUwMDI2ZGlzay1cdTAwM2VvcGVuX211dGV4KTtcbitcbiBcdHNwaW5fbG9ja19pcnEoXHUwMDI2bG8tXHUwMDNlbG9fbG9jayk7XG4gXHRmaWxwID0gbG8tXHUwMDNlbG9fYmFja2luZ19maWxlO1xuIFx0bG8tXHUwMDNlbG9fYmFja2luZ19maWxlID0gTlVMTDtcbkBAIC0xMTUxLDEyICsxMTc0LDcgQEAgc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuIFx0bG8tXHUwMDNlbG9fc2l6ZWxpbWl0ID0gMDtcbiBcdG1lbXNldChsby1cdTAwM2Vsb19maWxlX25hbWUsIDAsIExPX05BTUVfU0laRSk7XG4gXG4tXHQvKlxuLVx0ICogUmVzZXQgdGhlIGJsb2NrIHNpemUgdG8gdGhlIGRlZmF1bHQuXG4tXHQgKlxuLVx0ICogTm8gcXVldWUgZnJlZXppbmcgbmVlZGVkIGJlY2F1c2UgdGhpcyBpcyBjYWxsZWQgZnJvbSB0aGUgZmluYWxcbi1cdCAqIC1cdTAwM2VyZWxlYXNlIGNhbGwgb25seSwgc28gdGhlcmUgY2FuJ3QgYmUgYW55IG91dHN0YW5kaW5nIEkvTy5cbi1cdCAqL1xuK1x0LyogUmVzZXQgdGhlIGJsb2NrIHNpemUgdG8gdGhlIGRlZmF1bHQuICovXG4gXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGxvLVx1MDAzZWxvX3F1ZXVlKTtcbiBcdGxpbS5sb2dpY2FsX2Jsb2NrX3NpemUgPSBTRUNUT1JfU0laRTtcbiBcdGxpbS5waHlzaWNhbF9ibG9ja19zaXplID0gU0VDVE9SX1NJWkU7XG5AQCAtMTE2OCw4ICsxMTg2LDYgQEAgc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuIFx0LyogbGV0IHVzZXItc3BhY2Uga25vdyBhYm91dCB0aGlzIGNoYW5nZSAqL1xuIFx0a29iamVjdF91ZXZlbnQoXHUwMDI2ZGlza190b19kZXYobG8tXHUwMDNlbG9fZGlzayktXHUwMDNla29iaiwgS09CSl9DSEFOR0UpO1xuIFx0bWFwcGluZ19zZXRfZ2ZwX21hc2soZmlscC1cdTAwM2VmX21hcHBpbmcsIGdmcCk7XG4tXHQvKiBUaGlzIGlzIHNhZmU6IG9wZW4oKSBpcyBzdGlsbCBob2xkaW5nIGEgcmVmZXJlbmNlLiAqL1xuLVx0bW9kdWxlX3B1dChUSElTX01PRFVMRSk7XG4gXG4gXHRkaXNrX2ZvcmNlX21lZGlhX2NoYW5nZShsby1cdTAwM2Vsb19kaXNrKTtcbiBcbkBAIC0xMTk5LDEyICsxMjE1LDI0IEBAIHN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbiBcdFdSSVRFX09OQ0UobG8tXHUwMDNlbG9fc3RhdGUsIExvX3VuYm91bmQpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxvLVx1MDAzZWxvX211dGV4KTtcbiBcbitcdC8qIFN0ZXAgMzogRHJvcCByZWZjb3VudHMsIHdpdGhvdXQgb3Blbl9tdXRleCBoZWxkLiAqL1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmRpc2stXHUwMDNlb3Blbl9tdXRleCk7XG4rXG4rXHRmcHV0KGZpbHApO1xuK1xuIFx0Lypcbi1cdCAqIE5lZWQgbm90IGhvbGQgbG9fbXV0ZXggdG8gZnB1dCBiYWNraW5nIGZpbGUuIENhbGxpbmcgZnB1dCBob2xkaW5nXG4tXHQgKiBsb19tdXRleCB0cmlnZ2VycyBhIGNpcmN1bGFyIGxvY2sgZGVwZW5kZW5jeSBwb3NzaWJpbGl0eSB3YXJuaW5nIGFzXG4tXHQgKiBmcHV0IGNhbiB0YWtlIG9wZW5fbXV0ZXggd2hpY2ggaXMgdXN1YWxseSB0YWtlbiBiZWZvcmUgbG9fbXV0ZXguXG4rXHQgKiBEcm9wIGFsbCByZWZlcmVuY2VzIHRoYXQgd291bGQgaGF2ZSBiZWVuIGRyb3BwZWQgYXMgc29vbiBhc1xuK1x0ICogcmV0dXJuaW5nIGZyb20gbG9fcmVsZWFzZSgpIGFuZCByZWxlYXNpbmcgZGlzay1cdTAwM2VvcGVuX211dGV4LlxuIFx0ICovXG4tXHRmcHV0KGZpbHApO1xuK1x0bW9kdWxlX3B1dChkaXNrLVx1MDAzZWZvcHMtXHUwMDNlb3duZXIpO1xuK1x0cHV0X2RldmljZShkaXNrX3RvX2RldihkaXNrKSk7XG4rXG4rXHQvKlxuK1x0ICogVGhpcyBpcyBzYWZlOiBmbHVzaF93b3JrKCkgZnJvbSBsb29wX3JlbW92ZSgpIGZyb20gbG9vcF9leGl0KCkgd2FpdHNcbitcdCAqIHVudGlsIHRoaXMgZnVuY3Rpb24gcmV0dXJuczsgZWZmZWN0aXZlbHkgZHJvcHBpbmcgdGhlIGZpbmFsIG1vZHVsZVxuK1x0ICogcmVmZXJlbmNlcyBzeW5jaHJvbm91c2x5LlxuK1x0ICovXG4rXHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcbiB9XG4gXG4gc3RhdGljIGludCBsb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuQEAgLTE3NjksOCArMTc5NywyMCBAQCBzdGF0aWMgdm9pZCBsb19yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuIFx0bmVlZF9jbGVhciA9IChsby1cdTAwM2Vsb19zdGF0ZSA9PSBMb19ydW5kb3duKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZsby1cdTAwM2Vsb19tdXRleCk7XG4gXG4tXHRpZiAobmVlZF9jbGVhcilcbi1cdFx0X19sb29wX2Nscl9mZChsbyk7XG4rXHQvKlxuK1x0ICogSW4gb3JkZXIgdG8gZmx1c2ggcGVuZGluZyBJL08gcmVxdWVzdHMgYmVmb3JlIGNsZWFyaW5nIHRoZSBiYWNraW5nXG4rXHQgKiBkZXZpY2UsIGRlZmVyIF9fbG9vcF9jbHJfZmQoKSB0byBXUSBjb250ZXh0LiBUaGUgTG9fcnVuZG93biBzdGF0ZVxuK1x0ICogZ3VhcmFudGVlcyB0aGF0IGxvX29wZW4oKSB3aWxsIGZhaWwgd2l0aCAtRU5YSU8uXG4rXHQgKi9cbitcdGlmIChuZWVkX2NsZWFyKSB7XG4rXHRcdC8qXG4rXHRcdCAqIEdyYWIgYWxsIHJlZmVyZW5jZXMgdGhhdCB3aWxsIGJlIGRyb3BwZWQgYXMgc29vbiBhc1xuK1x0XHQgKiByZXR1cm5pbmcgZnJvbSBsb19yZWxlYXNlKCkgYW5kIHJlbGVhc2luZyBkaXNrLVx1MDAzZW9wZW5fbXV0ZXguXG4rXHRcdCAqL1xuK1x0XHRnZXRfZGV2aWNlKGRpc2tfdG9fZGV2KGRpc2spKTtcbitcdFx0X19tb2R1bGVfZ2V0KGRpc2stXHUwMDNlZm9wcy1cdTAwM2Vvd25lcik7XG4rXHRcdHF1ZXVlX3dvcmsoc3lzdGVtX2xvbmdfd3EsIFx1MDAyNmxvLVx1MDAzZWxvX2Nscl93b3JrKTtcbitcdH1cbiB9XG4gXG4gc3RhdGljIHZvaWQgbG9fZnJlZV9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuQEAgLTIwMzQsNiArMjA3NCw3IEBAIHN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpXG4gXHRsbyA9IGt6YWxsb2Nfb2JqKCpsbyk7XG4gXHRpZiAoIWxvKVxuIFx0XHRnb3RvIG91dDtcbitcdElOSVRfV09SSyhcdTAwMjZsby1cdTAwM2Vsb19jbHJfd29yaywgX19sb29wX2Nscl9mZCk7XG4gXHRsby1cdTAwM2V3b3JrZXJfdHJlZSA9IFJCX1JPT1Q7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZsby1cdTAwM2VpZGxlX3dvcmtlcl9saXN0KTtcbiBcdHRpbWVyX3NldHVwKFx1MDAyNmxvLVx1MDAzZXRpbWVyLCBsb29wX2ZyZWVfaWRsZV93b3JrZXJzX3RpbWVyLCBUSU1FUl9ERUZFUlJBQkxFKTtcbkBAIC0yMTM4LDYgKzIxNzksOSBAQCBzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKVxuIFxuIHN0YXRpYyB2b2lkIGxvb3BfcmVtb3ZlKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4ge1xuK1x0LyogV2FpdCBmb3IgX19sb29wX2Nscl9mZCgpIHRvIGNvbXBsZXRlLiAqL1xuK1x0Zmx1c2hfd29yayhcdTAwMjZsby1cdTAwM2Vsb19jbHJfd29yayk7XG4rXG4gXHQvKiBNYWtlIHRoaXMgbG9vcCBkZXZpY2UgdW5yZWFjaGFibGUgZnJvbSBwYXRobmFtZS4gKi9cbiBcdGRlbF9nZW5kaXNrKGxvLVx1MDAzZWxvX2Rpc2spO1xuIFx0YmxrX21xX2ZyZWVfdGFnX3NldChcdTAwMjZsby1cdTAwM2V0YWdfc2V0KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE4OjAzOjE0LjU1MDQ2OTI0MVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDk3NjU4NDYzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIFNlc3Npb24gQXNzZXNzbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiBpdCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHJ1bi4gRnJvbSB3aGF0IEkgc2VlLCBpdCdzIGZvY3VzZWQgb24gcmVmYWN0b3JpbmcgdGhlIGBsb29wYCBkcml2ZXIsIHNwZWNpZmljYWxseSBgZHJpdmVycy9ibG9jay9sb29wLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlcyBpcyBhc3luY2hyb25vdXMgY2xlYW51cCB1c2luZyBhIHdvcmtxdWV1ZSBhbmQgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byBsb2NraW5nIGFuZCByZWZjb3VudGluZy5cblxuVGhlIHBhdGNoIGludHJvZHVjZXMgYHN0cnVjdCB3b3JrX3N0cnVjdCBsb19jbHJfd29ya2Agd2l0aGluIHRoZSBgc3RydWN0IGxvb3BfZGV2aWNlYC4gVGhlIG1vc3QgcmVsZXZhbnQgY2hhbmdlIGlzIHRoZSBzaGlmdCBmcm9tIHN5bmNocm9ub3VzIGNsZWFudXAgaW4gYGxvX3JlbGVhc2VgICh3aGljaCB3YXMgY2FsbGVkIHVuZGVyIGBvcGVuX211dGV4YCkgdG8gYW4gYXN5bmNocm9ub3VzIGFwcHJvYWNoIHVzaW5nIGBzeXN0ZW1fbG9uZ193cWAuIFdlIG5vdyBoYXZlIGEgYF9fbG9vcF9jbHJfZmRgIHdvcmsgaGFuZGxlciB0aGF0IGNsZWFucyB0aGluZ3MgdXAgKmFmdGVyKiByZWxlYXNpbmcgdGhlIGxvY2sgYW5kIGRvaW5nIHRoZSByZXF1aXJlZCByZWZjb3VudGluZyBhbmQgZGV2aWNlIGxpZmVjeWNsZSB3b3JrLiBUaGUgcGF0Y2ggYWxzbyBhZGRzIHdvcmsgaW5pdGlhbGl6YXRpb24gaW4gYGxvb3BfYWRkYCB3aXRoIGBJTklUX1dPUksoXHUwMDI2bG8tXHUwMDNlbG9fY2xyX3dvcmssIF9fbG9vcF9jbHJfZmQpO2AgYW5kIGZsdXNoaW5nIGluIGBsb29wX3JlbW92ZWAgdXNpbmcgYGZsdXNoX3dvcmsoXHUwMDI2bG8tXHUwMDNlbG9fY2xyX3dvcmspO2AuXG5cblRoZSBjaGFuZ2VzIGFyZSBhbGwgYWJvdXQgY29uY3VycmVuY3ksIHN5bmNocm9uaXphdGlvbiwgd29ya3F1ZXVlcywgcmVmY291bnRpbmcsIGFuZCBsb2NraW5nIG1lY2hhbmlzbXMsIGRlZmVycmluZyBjbGVhbnVwIHRvIGF2b2lkIGRlYWRsb2NrcyBvciBibG9ja2luZy4gVGhlcmUncyBubyBpbnRyb2R1Y3Rpb24gb2YgbmV3IGJ1ZmZlcnMsIHVzZXIgY29waWVzLCBpb2N0bHMgcmV0dXJuaW5nIGRhdGEsIG5vIGxlbmd0aCBvciBib3VuZHMgY2hlY2tzIGJlaW5nIGNoYW5nZWQuIEl0J3Mgc2FmZSB0byBzYXkgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGUgd29yayBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQgY29ycmVjdGx5IGFmdGVyIGFsbG9jYXRpb24sIGFuZCB0aGUgY29udGV4dCBvZiB0aGUgd29yayBpdHNlbGYgYXBwZWFycyBzb3VuZC5cblxuTm93LCBjb25zaWRlcmluZyB0aGUgS01TQU4vS0FTQU4gZGlzdGluY3Rpb24sIHRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBjcnVjaWFsLiBLTVNBTiBpcyBmb3IgZGV0ZWN0aW5nIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvcm1hdGlvbiBsZWFrcy4gS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBkZWJ1Z2dpbmcgdG9vbHMgYXJlIHBlcmZlY3RseSBzdWl0ZWQgdG8gZGV0ZWN0IHRoZSB0eXBlIG9mIGlzc3VlcyBoZXJlIC0gb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlcywgaW52YWxpZCBmcmVlcywgYW5kIGxvY2tpbmcgYnVncy4gKipUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLCBMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLioqXG5cblRoZXJlZm9yZSwgSSB0aGluayB0aGlzIHBhdGNoIGlzIGZpbmUuIE5lZWRzS01TQU4gc2hvdWxkIGJlIGZhbHNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjg0LCJPdXRwdXRUb2tlbnMiOjE3MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc4NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE4OjAzOjI5LjUyNzA1NzUzN1oiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZHJpdmVycy9ibG9jay9sb29wLmMgdG8gZGVmZXIgbG9vcCBkZXZpY2UgdGVhcmRvd24gKF9fbG9vcF9jbHJfZmQpIHRvIGEgd29ya3F1ZXVlIGl0ZW0gKGxvX2Nscl93b3JrKSByYXRoZXIgdGhhbiBleGVjdXRpbmcgaXQgc3luY2hyb25vdXNseSBpbiBsb19yZWxlYXNlLiBUaGUgY2hhbmdlcyBpbnZvbHZlIHdvcmtxdWV1ZSBzY2hlZHVsaW5nLCByZWZlcmVuY2UgY291bnRpbmcsIGFuZCBzeW5jaHJvbml6YXRpb24gKGRyYWluX3dvcmtxdWV1ZSwgZnJlZXplX3F1ZXVlLCBtdXRleCBsb2NraW5nKS4gTm8gdW5pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZXMsIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQW55IHBvdGVudGlhbCBidWdzIHJlc3VsdGluZyBmcm9tIHRoaXMgcGF0Y2ggKHN1Y2ggYXMgcmFjZSBjb25kaXRpb25zLCBkZWFkbG9ja3MsIHVzZS1hZnRlci1mcmVlLCBvciByZWZlcmVuY2UgY291bnQgbGVha3MpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIHNhbml0aXplcnMsIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdW5uZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZHJpdmVycy9ibG9jay9sb29wLmMgdG8gZGVmZXIgbG9vcCBkZXZpY2UgdGVhcmRvd24gKF9fbG9vcF9jbHJfZmQpIHRvIGEgd29ya3F1ZXVlIGl0ZW0gKGxvX2Nscl93b3JrKSByYXRoZXIgdGhhbiBleGVjdXRpbmcgaXQgc3luY2hyb25vdXNseSBpbiBsb19yZWxlYXNlLiBUaGUgY2hhbmdlcyBpbnZvbHZlIHdvcmtxdWV1ZSBzY2hlZHVsaW5nLCByZWZlcmVuY2UgY291bnRpbmcsIGFuZCBzeW5jaHJvbml6YXRpb24gKGRyYWluX3dvcmtxdWV1ZSwgZnJlZXplX3F1ZXVlLCBtdXRleCBsb2NraW5nKS4gTm8gdW5pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZXMsIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQW55IHBvdGVudGlhbCBidWdzIHJlc3VsdGluZyBmcm9tIHRoaXMgcGF0Y2ggKHN1Y2ggYXMgcmFjZSBjb25kaXRpb25zLCBkZWFkbG9ja3MsIHVzZS1hZnRlci1mcmVlLCBvciByZWZlcmVuY2UgY291bnQgbGVha3MpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIHNhbml0aXplcnMsIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdW5uZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowcrhjb[1] Phase: Succeeded StartedAt: 2026-08-28 18:03:41 +0000 UTC FinishedAt: 2026-08-28 18:03:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcrhjb[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-28 18:03:41 +0000 UTC FinishedAt: 2026-08-28 18:03:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcrhjb[2] Phase: Succeeded StartedAt: 2026-08-28 18:03:41 +0000 UTC FinishedAt: 2026-08-28 21:46:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcrhjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lo_release","loop_clr_fd","lo_ioctl","loop_control_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"5c193f99-394b-4fc3-aba1-0640abeec313","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-28 18:03:41 +0000 UTC FinishedAt: 2026-08-28 21:46:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lo_release","loop_clr_fd","lo_ioctl","loop_control_ioctl"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"5c193f99-394b-4fc3-aba1-0640abeec313","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowcrhjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lo_release","loop_clr_fd","lo_ioctl","loop_control_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"5c193f99-394b-4fc3-aba1-0640abeec313","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-28 18:03:41 +0000 UTC FinishedAt: 2026-08-28 18:03:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcrhjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lo_release","loop_clr_fd","lo_ioctl","loop_control_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"5c193f99-394b-4fc3-aba1-0640abeec313","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-28 18:03:41 +0000 UTC FinishedAt: 2026-08-28 18:03:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowcrhjb/series-workflowcrhjb-convert-artifact-1464356751/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcrhjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lo_release","loop_clr_fd","lo_ioctl","loop_control_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"5c193f99-394b-4fc3-aba1-0640abeec313","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-28 18:03:51 +0000 UTC FinishedAt: 2026-08-28 18:20:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcrhjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lo_release","loop_clr_fd","lo_ioctl","loop_control_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"5c193f99-394b-4fc3-aba1-0640abeec313","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-28 18:03:51 +0000 UTC FinishedAt: 2026-08-28 18:20:44 +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:*f279c050-3f78-4e95-866b-596f318f80c5,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-workflowcrhjb/series-workflowcrhjb-convert-artifact-1464356751/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": "a895745b-1534-47a0-9571-6dfd830b0356", "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-workflowcrhjb/series-workflowcrhjb-build-action-108412117/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcrhjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lo_release","loop_clr_fd","lo_ioctl","loop_control_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"5c193f99-394b-4fc3-aba1-0640abeec313","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-28 18:03:51 +0000 UTC FinishedAt: 2026-08-28 18:20:34 +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:*f279c050-3f78-4e95-866b-596f318f80c5,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-workflowcrhjb/series-workflowcrhjb-convert-artifact-1464356751/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": "a895745b-1534-47a0-9571-6dfd830b0356", "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-workflowcrhjb/series-workflowcrhjb-build-action-108412117/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcrhjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lo_release","loop_clr_fd","lo_ioctl","loop_control_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"5c193f99-394b-4fc3-aba1-0640abeec313","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-28 18:20:44 +0000 UTC FinishedAt: 2026-08-28 18:20:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcrhjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lo_release","loop_clr_fd","lo_ioctl","loop_control_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"5c193f99-394b-4fc3-aba1-0640abeec313","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-28 18:20:44 +0000 UTC FinishedAt: 2026-08-28 18:20:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcrhjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lo_release","loop_clr_fd","lo_ioctl","loop_control_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"5c193f99-394b-4fc3-aba1-0640abeec313","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-28 18:20:44 +0000 UTC FinishedAt: 2026-08-28 18:20:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcrhjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lo_release","loop_clr_fd","lo_ioctl","loop_control_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"5c193f99-394b-4fc3-aba1-0640abeec313","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-28 18:20:44 +0000 UTC FinishedAt: 2026-08-28 18:20:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"5c193f99-394b-4fc3-aba1-0640abeec313","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowcrhjb/series-workflowcrhjb-convert-artifact-1629189854/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcrhjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lo_release","loop_clr_fd","lo_ioctl","loop_control_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"5c193f99-394b-4fc3-aba1-0640abeec313","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-28 18:20:54 +0000 UTC FinishedAt: 2026-08-28 18:23:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcrhjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lo_release","loop_clr_fd","lo_ioctl","loop_control_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"5c193f99-394b-4fc3-aba1-0640abeec313","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-28 18:20:54 +0000 UTC FinishedAt: 2026-08-28 18:22:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a895745b-1534-47a0-9571-6dfd830b0356,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-workflowcrhjb/series-workflowcrhjb-build-action-108412117/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-workflowcrhjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lo_release","loop_clr_fd","lo_ioctl","loop_control_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"5c193f99-394b-4fc3-aba1-0640abeec313","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-28 18:23:02 +0000 UTC FinishedAt: 2026-08-28 18:23:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcrhjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lo_release","loop_clr_fd","lo_ioctl","loop_control_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"5c193f99-394b-4fc3-aba1-0640abeec313","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-28 18:23:02 +0000 UTC FinishedAt: 2026-08-28 18:23:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcrhjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lo_release","loop_clr_fd","lo_ioctl","loop_control_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"5c193f99-394b-4fc3-aba1-0640abeec313","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-28 18:23:02 +0000 UTC FinishedAt: 2026-08-28 18:39:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcrhjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lo_release","loop_clr_fd","lo_ioctl","loop_control_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"5c193f99-394b-4fc3-aba1-0640abeec313","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-28 18:23:02 +0000 UTC FinishedAt: 2026-08-28 18:39:27 +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:*f279c050-3f78-4e95-866b-596f318f80c5,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-workflowcrhjb/series-workflowcrhjb-convert-artifact-1629189854/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": "7bf05d79-cf4e-4002-b365-33c4141f51c1", "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-workflowcrhjb/series-workflowcrhjb-build-action-1140637618/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcrhjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lo_release","loop_clr_fd","lo_ioctl","loop_control_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"5c193f99-394b-4fc3-aba1-0640abeec313","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-28 18:23:02 +0000 UTC FinishedAt: 2026-08-28 18:39:17 +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:*f279c050-3f78-4e95-866b-596f318f80c5,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-workflowcrhjb/series-workflowcrhjb-convert-artifact-1629189854/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": "7bf05d79-cf4e-4002-b365-33c4141f51c1", "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-workflowcrhjb/series-workflowcrhjb-build-action-1140637618/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcrhjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lo_release","loop_clr_fd","lo_ioctl","loop_control_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"5c193f99-394b-4fc3-aba1-0640abeec313","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-28 18:39:27 +0000 UTC FinishedAt: 2026-08-28 18:39:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcrhjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lo_release","loop_clr_fd","lo_ioctl","loop_control_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"5c193f99-394b-4fc3-aba1-0640abeec313","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-28 18:39:27 +0000 UTC FinishedAt: 2026-08-28 18:39:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcrhjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lo_release","loop_clr_fd","lo_ioctl","loop_control_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"5c193f99-394b-4fc3-aba1-0640abeec313","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-28 18:39:27 +0000 UTC FinishedAt: 2026-08-28 18:41:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcrhjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lo_release","loop_clr_fd","lo_ioctl","loop_control_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"5c193f99-394b-4fc3-aba1-0640abeec313","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-28 18:39:27 +0000 UTC FinishedAt: 2026-08-28 18:41:12 +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:*7bf05d79-cf4e-4002-b365-33c4141f51c1,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-workflowcrhjb/series-workflowcrhjb-build-action-1140637618/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-workflowcrhjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lo_release","loop_clr_fd","lo_ioctl","loop_control_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"5c193f99-394b-4fc3-aba1-0640abeec313","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-28 18:41:22 +0000 UTC FinishedAt: 2026-08-28 21:46:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcrhjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lo_release","loop_clr_fd","lo_ioctl","loop_control_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"5c193f99-394b-4fc3-aba1-0640abeec313","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-28 18:41:22 +0000 UTC FinishedAt: 2026-08-28 21:46:10 +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":["lo_release","loop_clr_fd","lo_ioctl","loop_control_ioctl"],"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:*a895745b-1534-47a0-9571-6dfd830b0356,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7bf05d79-cf4e-4002-b365-33c4141f51c1,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-workflowcrhjb/series-workflowcrhjb-build-action-108412117/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-workflowcrhjb/series-workflowcrhjb-build-action-1140637618/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowcrhjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lo_release","loop_clr_fd","lo_ioctl","loop_control_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"5c193f99-394b-4fc3-aba1-0640abeec313","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-28 18:41:22 +0000 UTC FinishedAt: 2026-08-28 18:41:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcrhjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lo_release","loop_clr_fd","lo_ioctl","loop_control_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"5c193f99-394b-4fc3-aba1-0640abeec313","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-28 18:41:22 +0000 UTC FinishedAt: 2026-08-28 18:41:27 +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":["lo_release","loop_clr_fd","lo_ioctl","loop_control_ioctl"],"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-workflowcrhjb/series-workflowcrhjb-convert-artifact-2735084003/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcrhjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lo_release","loop_clr_fd","lo_ioctl","loop_control_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"5c193f99-394b-4fc3-aba1-0640abeec313","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-28 18:41:22 +0000 UTC FinishedAt: 2026-08-28 18:41:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcrhjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lo_release","loop_clr_fd","lo_ioctl","loop_control_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"5c193f99-394b-4fc3-aba1-0640abeec313","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-28 18:41:22 +0000 UTC FinishedAt: 2026-08-28 18:41:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcrhjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lo_release","loop_clr_fd","lo_ioctl","loop_control_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"5c193f99-394b-4fc3-aba1-0640abeec313","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-28 18:41:22 +0000 UTC FinishedAt: 2026-08-28 18:41:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcrhjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lo_release","loop_clr_fd","lo_ioctl","loop_control_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"5c193f99-394b-4fc3-aba1-0640abeec313","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-28 18:41:32 +0000 UTC FinishedAt: 2026-08-28 21:46:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcrhjb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lo_release","loop_clr_fd","lo_ioctl","loop_control_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"5c193f99-394b-4fc3-aba1-0640abeec313","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-28 18:41:32 +0000 UTC FinishedAt: 2026-08-28 21:46:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a895745b-1534-47a0-9571-6dfd830b0356,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7bf05d79-cf4e-4002-b365-33c4141f51c1,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-workflowcrhjb/series-workflowcrhjb-build-action-108412117/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-workflowcrhjb/series-workflowcrhjb-build-action-1140637618/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-workflowcrhjb/series-workflowcrhjb-convert-artifact-2735084003/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,}