Name: series-workflowwdljw Phase: Succeeded StartedAt: 2026-08-26 22:09:27 +0000 UTC FinishedAt: 2026-08-27 01:54:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdljw[0] Phase: Succeeded StartedAt: 2026-08-26 22:09:27 +0000 UTC FinishedAt: 2026-08-26 22:13:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdljw[0].run-triage Phase: Succeeded StartedAt: 2026-08-26 22:09:27 +0000 UTC FinishedAt: 2026-08-26 22:13:00 +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": "cef9d6804030793cf8b8796fd6936197d065dd3e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PSE_CONTROLLER", "PSE_REGULATOR", "REGULATOR", "SFP", "FWNODE_MDIO" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cef9d6804030793cf8b8796fd6936197d065dd3e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PSE_CONTROLLER", "PSE_REGULATOR", "REGULATOR", "SFP", "FWNODE_MDIO" ], "series_id": "7caaeb04-ab90-43fe-8f30-4fb82429bee1" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "phy_pse_control_lock", "phy_pse_control_unlock", "phy_device_register_locked", "phy_device_register", "phy_device_remove", "pse_register_notifier", "pse_unregister_notifier", "pse_controller_register", "pse_controller_unregister", "pse_control_matches_pcdev", "ethnl_set_pse", "pse_prepare_data", "phy_pse_attach_one", "phy_pse_detach_one", "phy_pse_notifier_event" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BTRV9DT05UUk9MTEVSJiMzNDssCiAgICAmIzM0O1BTRV9SRUdVTEFUT1ImIzM0OywKICAgICYjMzQ7UkVHVUxBVE9SJiMzNDssCiAgICAmIzM0O1NGUCYjMzQ7LAogICAgJiMzNDtGV05PREVfTURJTyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BoeV9wc2VfY29udHJvbF9sb2NrJiMzNDssCiAgICAmIzM0O3BoeV9wc2VfY29udHJvbF91bmxvY2smIzM0OywKICAgICYjMzQ7cGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWQmIzM0OywKICAgICYjMzQ7cGh5X2RldmljZV9yZWdpc3RlciYjMzQ7LAogICAgJiMzNDtwaHlfZGV2aWNlX3JlbW92ZSYjMzQ7LAogICAgJiMzNDtwc2VfcmVnaXN0ZXJfbm90aWZpZXImIzM0OywKICAgICYjMzQ7cHNlX3VucmVnaXN0ZXJfbm90aWZpZXImIzM0OywKICAgICYjMzQ7cHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7cHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlciYjMzQ7LAogICAgJiMzNDtwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2JiMzNDssCiAgICAmIzM0O2V0aG5sX3NldF9wc2UmIzM0OywKICAgICYjMzQ7cHNlX3ByZXBhcmVfZGF0YSYjMzQ7LAogICAgJiMzNDtwaHlfcHNlX2F0dGFjaF9vbmUmIzM0OywKICAgICYjMzQ7cGh5X3BzZV9kZXRhY2hfb25lJiMzNDssCiAgICAmIzM0O3BoeV9wc2Vfbm90aWZpZXJfZXZlbnQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgcmVmYWN0b3JzIHRoZSBsaWZlY3ljbGUgYW5kIHN5bmNocm9uaXphdGlvbiBvZiBQU0UgKFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudCkgY29udHJvbGxlcnMgYXR0YWNoZWQgdG8gUEhZIGRldmljZXMuIEl0IGludHJvZHVjZXMgYSBub3RpZmllciBjaGFpbiAoYHBoeV9wc2Vfbm90aWZpZXJgKSBhbmQgYSBtdXRleCAoYHBoeV9wc2VfbG9ja2ApIHRvIHNhZmVseSBhdHRhY2ggYW5kIGRldGFjaCBgcGh5ZGV2LVx1MDAzZXBzZWNgIHdoZW4gUFNFIGNvbnRyb2xsZXJzIGFyZSByZWdpc3RlcmVkIG9yIHVucmVnaXN0ZXJlZCwgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIEl0IGFsc28gd3JhcHMgZXRodG9vbCBQU0Ugb3BlcmF0aW9ucyB3aXRoIHRoZSBuZXcgbG9jay5cblxuVGhlc2UgY2hhbmdlcyBwcmltYXJpbHkgYWRkcmVzcyBvYmplY3QgbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIGxvY2tpbmcsIGFuZCBzeW5jaHJvbml6YXRpb24uIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBsaWtlbHkgbWFuaWZlc3QgYXMgdXNlLWFmdGVyLWZyZWUsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIGRlYWRsb2Nrcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgaW52b2x2ZSBjb21wbGV4IGJ1ZmZlciBhbGxvY2F0aW9ucyBvciBtb2RpZmljYXRpb25zIHRvIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyBob3cgdGhlIFBTRSBjb250cm9sbGVyIGlzIGF0dGFjaGVkIHRvIHRoZSBQSFkgZGV2aWNlLCBpbnRyb2R1Y2luZyBhIG5ldyBsb2NrIChgcGh5X3BzZV9sb2NrYCkgYW5kIGEgbm90aWZpZXIgKGBwaHlfcHNlX25vdGlmaWVyYCkgdG8gaGFuZGxlIFBTRSBjb250cm9sbGVyIHJlZ2lzdHJhdGlvbiBhbmQgdW5yZWdpc3RyYXRpb24uIEl0IGFsc28gbW9kaWZpZXMgdGhlIGV0aHRvb2wgUFNFIG5ldGxpbmsgaW50ZXJmYWNlIHRvIHVzZSB0aGUgbmV3IGxvY2suIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHRoZSBjb3JlIFBIWSBsaWJyYXJ5IGFuZCBldGh0b29sLCBhbmQgYXJlIHJlYWNoYWJsZSB2aWEgbmV0bGluayBhbmQgUEhZIGRldmljZSByZWdpc3RyYXRpb24gcGF0aHMsIHdoaWNoIGNhbiBiZSB0cmlnZ2VyZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjEwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNjY4ZDA5M2IwOWZmMGU0MmJiNGFiMzk5ZDE0ZTJhYTAwMDdiYTVjZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDIyOjEwOjM5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYyBiL2RyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uY1xuaW5kZXggYmE3MDkxNTE4MjY1NC4uN2JkOTc5YjU5ZjQ5NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jXG5AQCAtMTEsMzMgJiM0MzsxMSwxMSBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Z3bm9kZV9tZGlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9wc2UtcGQvcHNlLmhcdTAwM2VcbiBcbiBNT0RVTEVfQVVUSE9SKFwmIzM0O0NhbHZpbiBKb2huc29uIFx1MDAzY2NhbHZpbi5qb2huc29uQG9zcy5ueHAuY29tXHUwMDNlXCYjMzQ7KTtcbiBNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuIE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtGV05PREUgTURJTyBidXMgKEV0aGVybmV0IFBIWSkgYWNjZXNzb3JzXCYjMzQ7KTtcbiBcbi1zdGF0aWMgc3RydWN0IHBzZV9jb250cm9sICpcbi1md25vZGVfZmluZF9wc2VfY29udHJvbChzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlLFxuLVx0XHRcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4te1xuLVx0c3RydWN0IHBzZV9jb250cm9sICpwc2VjO1xuLVx0c3RydWN0IGRldmljZV9ub2RlICpucDtcbi1cbi1cdGlmICghSVNfRU5BQkxFRChDT05GSUdfUFNFX0NPTlRST0xMRVIpKVxuLVx0XHRyZXR1cm4gTlVMTDtcbi1cbi1cdG5wID0gdG9fb2Zfbm9kZShmd25vZGUpO1xuLVx0aWYgKCFucClcbi1cdFx0cmV0dXJuIE5VTEw7XG4tXG4tXHRwc2VjID0gb2ZfcHNlX2NvbnRyb2xfZ2V0KG5wLCBwaHlkZXYpO1xuLVx0aWYgKFBUUl9FUlIocHNlYykgPT0gLUVOT0VOVClcbi1cdFx0cmV0dXJuIE5VTEw7XG4tXG4tXHRyZXR1cm4gcHNlYztcbi19XG4tXG4gc3RhdGljIHN0cnVjdCBtaWlfdGltZXN0YW1wZXIgKlxuIGZ3bm9kZV9maW5kX21paV90aW1lc3RhbXBlcihzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKVxuIHtcbkBAIC0xMTgsNyAmIzQzOzk2LDYgQEAgaW50IGZ3bm9kZV9tZGlvYnVzX3JlZ2lzdGVyX3BoeShzdHJ1Y3QgbWlpX2J1cyAqYnVzLFxuIFx0XHRcdFx0c3RydWN0IGZ3bm9kZV9oYW5kbGUgKmNoaWxkLCB1MzIgYWRkcilcbiB7XG4gXHRzdHJ1Y3QgbWlpX3RpbWVzdGFtcGVyICptaWlfdHMgPSBOVUxMO1xuLVx0c3RydWN0IHBzZV9jb250cm9sICpwc2VjID0gTlVMTDtcbiBcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHk7XG4gXHRib29sIGlzX2M0NTtcbiBcdHUzMiBwaHlfaWQ7XG5AQCAtMTU5LDE0ICYjNDM7MTM2LDYgQEAgaW50IGZ3bm9kZV9tZGlvYnVzX3JlZ2lzdGVyX3BoeShzdHJ1Y3QgbWlpX2J1cyAqYnVzLFxuIFx0XHRcdGdvdG8gY2xlYW5fcGh5O1xuIFx0fVxuIFxuLVx0cHNlYyA9IGZ3bm9kZV9maW5kX3BzZV9jb250cm9sKGNoaWxkLCBwaHkpO1xuLVx0aWYgKElTX0VSUihwc2VjKSkge1xuLVx0XHRyYyA9IFBUUl9FUlIocHNlYyk7XG4tXHRcdGdvdG8gdW5yZWdpc3Rlcl9waHk7XG4tXHR9XG4tXG4tXHRwaHktXHUwMDNlcHNlYyA9IHBzZWM7XG4tXG4gXHQvKiBwaHktXHUwMDNlbWlpX3RzIG1heSBhbHJlYWR5IGJlIGRlZmluZWQgYnkgdGhlIFBIWSBkcml2ZXIuIEFcbiBcdCAqIG1paV90aW1lc3RhbXBlciBwcm9iZWQgdmlhIHRoZSBkZXZpY2UgdHJlZSB3aWxsIHN0aWxsIGhhdmVcbiBcdCAqIHByZWNlZGVuY2UuXG5AQCAtMTc2LDkgJiM0MzsxNDUsNiBAQCBpbnQgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KHN0cnVjdCBtaWlfYnVzICpidXMsXG4gXG4gXHRyZXR1cm4gMDtcbiBcbi11bnJlZ2lzdGVyX3BoeTpcbi1cdGlmIChpc19hY3BpX25vZGUoY2hpbGQpIHx8IGlzX29mX25vZGUoY2hpbGQpKVxuLVx0XHRwaHlfZGV2aWNlX3JlbW92ZShwaHkpO1xuIGNsZWFuX3BoeTpcbiBcdHBoeV9kZXZpY2VfZnJlZShwaHkpO1xuIGNsZWFuX21paV90czpcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuaW5kZXggMDYxNTIyODQ1OWVmNC4uZGNhMWI0NWJiYmQyNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcbkBAIC0xMTAyLDExICYjNDM7MTEwMiwxMjggQEAgc3RydWN0IHBoeV9kZXZpY2UgKmdldF9waHlfZGV2aWNlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBib29sIGlzX2M0NSlcbiB9XG4gRVhQT1JUX1NZTUJPTChnZXRfcGh5X2RldmljZSk7XG4gXG4mIzQzOy8qIFNlcmlhbGlzZXMgcGh5ZGV2LVx1MDAzZXBzZWMgYWdhaW5zdCB0aGUgUFNFIG5vdGlmaWVyIGFuZCBldGh0b29sLCBub3QgcnRubC4gKi9cbiYjNDM7c3RhdGljIERFRklORV9NVVRFWChwaHlfcHNlX2xvY2spO1xuJiM0MztcbiYjNDM7LyogQmVzdC1lZmZvcnQgYXR0YWNoIG9mIHBoeWRldi1cdTAwM2Vwc2VjIGZyb20gYSBEVCBgcHNlcyA9IFx1MDAzY1x1MDAyNi4uLlx1MDAzZWAgcGhhbmRsZS5cbiYjNDM7ICogQ2FsbGVyIG11c3QgaG9sZCBwaHlfcHNlX2xvY2suIEEgbWlzc2luZyBwaGFuZGxlICgtRU5PRU5UKSBvciBhXG4mIzQzOyAqIG5vdC15ZXQtcmVnaXN0ZXJlZCBjb250cm9sbGVyICgtRVBST0JFX0RFRkVSKSBpcyBzaWxlbnQ7IHRoZSBub3RpZmllclxuJiM0MzsgKiByZXRyaWVzIHRoZSBsYXR0ZXIgYXQgUFNFX1JFR0lTVEVSRUQgdGltZS4gQW55IG90aGVyIGVycm9yIG1lYW5zIGEgYnJva2VuXG4mIzQzOyAqIGJpbmRpbmcgYW5kIGlzIHdhcm5lZCBhYm91dCwgYnV0IGxlZnQgbm9uLWZhdGFsIHNvIHRoZSBwaHkgc3RpbGwgcmVnaXN0ZXJzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgcGh5X3RyeV9hdHRhY2hfcHNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWM7XG4mIzQzO1x0c3RydWN0IGRldmljZV9ub2RlICpucDtcbiYjNDM7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwaHlfcHNlX2xvY2spO1xuJiM0MztcbiYjNDM7XHRucCA9IHBoeWRldi1cdTAwM2VtZGlvLmRldi5vZl9ub2RlO1xuJiM0MztcdGlmICghbnApXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlcHNlYylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0cHNlYyA9IG9mX3BzZV9jb250cm9sX2dldChucCwgcGh5ZGV2KTtcbiYjNDM7XHRpZiAoSVNfRVJSKHBzZWMpKSB7XG4mIzQzO1x0XHRpZiAoUFRSX0VSUihwc2VjKSAhPSAtRVBST0JFX0RFRkVSIFx1MDAyNlx1MDAyNiBQVFJfRVJSKHBzZWMpICE9IC1FTk9FTlQpXG4mIzQzO1x0XHRcdHBoeWRldl93YXJuKHBoeWRldiwgXCYjMzQ7ZmFpbGVkIHRvIGdldCBQU0UgY29udHJvbDogJXBlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICBwc2VjKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBoeWRldi1cdTAwM2Vwc2VjID0gcHNlYztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwaHlfcHNlX2F0dGFjaF9vbmUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhIF9fbWF5YmVfdW51c2VkKVxuJiM0Mzt7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwaHlfcHNlX2xvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAoZGV2LVx1MDAzZXR5cGUgIT0gXHUwMDI2bWRpb19idXNfcGh5X3R5cGUpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cGh5X3RyeV9hdHRhY2hfcHNlKHRvX3BoeV9kZXZpY2UoZGV2KSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcGh5X3BzZV9kZXRhY2hfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2ID0gZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xuJiM0MztcdHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYztcbiYjNDM7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwaHlfcHNlX2xvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAoZGV2LVx1MDAzZXR5cGUgIT0gXHUwMDI2bWRpb19idXNfcGh5X3R5cGUpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cGh5ZGV2ID0gdG9fcGh5X2RldmljZShkZXYpO1xuJiM0MztcdHBzZWMgPSBwaHlkZXYtXHUwMDNlcHNlYztcbiYjNDM7XHRpZiAoIXBzZWMgfHwgIXBzZV9jb250cm9sX21hdGNoZXNfcGNkZXYocHNlYywgcGNkZXYpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHBoeWRldi1cdTAwM2Vwc2VjID0gTlVMTDtcbiYjNDM7XHRwc2VfY29udHJvbF9wdXQocHNlYyk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcGh5X3BzZV9ub3RpZmllcl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuJiM0MztcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAoZXZlbnQpIHtcbiYjNDM7XHRjYXNlIFBTRV9SRUdJU1RFUkVEOlxuJiM0MztcdFx0bXV0ZXhfbG9jayhcdTAwMjZwaHlfcHNlX2xvY2spO1xuJiM0MztcdFx0YnVzX2Zvcl9lYWNoX2RldihcdTAwMjZtZGlvX2J1c190eXBlLCBOVUxMLCBOVUxMLFxuJiM0MztcdFx0XHRcdCBwaHlfcHNlX2F0dGFjaF9vbmUpO1xuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBoeV9wc2VfbG9jayk7XG4mIzQzO1x0XHRyZXR1cm4gTk9USUZZX09LO1xuJiM0MztcdGNhc2UgUFNFX1VOUkVHSVNURVJFRDpcbiYjNDM7XHRcdG11dGV4X2xvY2soXHUwMDI2cGh5X3BzZV9sb2NrKTtcbiYjNDM7XHRcdGJ1c19mb3JfZWFjaF9kZXYoXHUwMDI2bWRpb19idXNfdHlwZSwgTlVMTCwgZGF0YSxcbiYjNDM7XHRcdFx0XHQgcGh5X3BzZV9kZXRhY2hfb25lKTtcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZwaHlfcHNlX2xvY2spO1xuJiM0MztcdFx0cmV0dXJuIE5PVElGWV9PSztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIE5PVElGWV9ET05FO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBwaHlfcHNlX25vdGlmaWVyIF9fcmVhZF9tb3N0bHkgPSB7XG4mIzQzO1x0Lm5vdGlmaWVyX2NhbGwgPSBwaHlfcHNlX25vdGlmaWVyX2V2ZW50LFxuJiM0Mzt9O1xuJiM0MztcbiAvKipcbi0gKiBwaHlfZGV2aWNlX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgdGhlIHBoeSBkZXZpY2Ugb24gdGhlIE1ESU8gYnVzXG4tICogQHBoeWRldjogcGh5X2RldmljZSBzdHJ1Y3R1cmUgdG8gYmUgYWRkZWQgdG8gdGhlIE1ESU8gYnVzXG4mIzQzOyAqIHBoeV9wc2VfY29udHJvbF9sb2NrIC0gaG9sZCBwaHlkZXYtXHUwMDNlcHNlYyBzdGFibGUgYWdhaW5zdCBQU0UgY29udHJvbGxlciB0ZWFyZG93blxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgUFNFX1VOUkVHSVNURVJFRCBub3RpZmllciBkZXRhY2hlcyBwaHlkZXYtXHUwMDNlcHNlYyBhbmQgZHJvcHMgaXRzIGxhc3RcbiYjNDM7ICogcmVmZXJlbmNlLiBDYWxsZXJzIHRoYXQgZGVyZWZlcmVuY2UgcGh5ZGV2LVx1MDAzZXBzZWMgKHRoZSBldGh0b29sIFBTRSBwYXRocykgbXVzdFxuJiM0MzsgKiBob2xkIHRoaXMgbG9jayBhY3Jvc3MgdGhlIGFjY2VzcyBzbyB0aGUgZGV0YWNoIGNhbm5vdCBydW4gdW5kZXJuZWF0aCB0aGVtLlxuICAqL1xuLWludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3ZvaWQgcGh5X3BzZV9jb250cm9sX2xvY2sodm9pZClcbiYjNDM7e1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cGh5X3BzZV9sb2NrKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChwaHlfcHNlX2NvbnRyb2xfbG9jayk7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcGh5X3BzZV9jb250cm9sX3VubG9jayAtIHJlbGVhc2UgdGhlIGxvY2sgdGFrZW4gYnkgcGh5X3BzZV9jb250cm9sX2xvY2soKVxuJiM0MzsgKi9cbiYjNDM7dm9pZCBwaHlfcHNlX2NvbnRyb2xfdW5sb2NrKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cGh5X3BzZV9sb2NrKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChwaHlfcHNlX2NvbnRyb2xfdW5sb2NrKTtcbiYjNDM7XG4mIzQzOy8qIENvcmUgcmVnaXN0cmF0aW9uOiBhZGQgdGhlIHBoeSB0byB0aGUgTURJTyBidXMuIERvZXMgbm90IHRvdWNoIHJ0bmwgb3JcbiYjNDM7ICogUFNFLiBwaHlkZXYtXHUwMDNlcHNlYyBpcyBhdHRhY2hlZCBieSB0aGUgY2FsbGVycyBiZWxvdywgYWZ0ZXIgZGV2aWNlX2FkZCgpXG4mIzQzOyAqIGhhcyBtYWRlIHRoZSBwaHkgdmlzaWJsZSBvbiBtZGlvX2J1c190eXBlLCBzbyB0aGF0IGEgY29uY3VycmVudCBQU0VcbiYjNDM7ICogbm90aWZpZXIgd2FsayBhbmQgdGhlIGF0dGFjaCBjYW4gbmV2ZXIgbGVhdmUgdGhlIHBoeSB1bmF0dGFjaGVkLiBLZWVwaW5nXG4mIzQzOyAqIGRldmljZV9hZGQoKSBvdXQgb2YgcnRubCBhbHNvIGF2b2lkcyBkZWFkbG9ja2luZyB3aGVuIGJpbmRpbmcgYSBwaHkgdGhhdFxuJiM0MzsgKiBpdHNlbGYgcHJvdmlkZXMgYW4gU0ZQIGNhZ2UgKHBoeV9wcm9iZSgpIC1cdTAwM2UgcGh5X3NmcF9wcm9iZSgpIC1cdTAwM2VcbiYjNDM7ICogc2ZwX2J1c19hZGRfdXBzdHJlYW0oKSB0YWtlcyBydG5sKS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgX19waHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4ge1xuIFx0aW50IGVycjtcbiBcbkBAIC0xMTM1LDEwICYjNDM7MTI1Miw1NiBAQCBpbnQgcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuICBvdXQ6XG4gXHQvKiBBc3NlcnQgdGhlIHJlc2V0IHNpZ25hbCAqL1xuIFx0cGh5X2RldmljZV9yZXNldChwaHlkZXYsIDEpO1xuLVxuIFx0bWRpb2J1c191bnJlZ2lzdGVyX2RldmljZShcdTAwMjZwaHlkZXYtXHUwMDNlbWRpbyk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZCAtIFJlZ2lzdGVyIHRoZSBwaHkgZGV2aWNlIG9uIHRoZSBNRElPIGJ1c1xuJiM0MzsgKiBAcGh5ZGV2OiBwaHlfZGV2aWNlIHN0cnVjdHVyZSB0byBiZSBhZGRlZCB0byB0aGUgTURJTyBidXNcbiYjNDM7ICpcbiYjNDM7ICogU2FtZSBhcyBwaHlfZGV2aWNlX3JlZ2lzdGVyKCkgYnV0IGNhbGxlciBtdXN0IGFscmVhZHkgaG9sZCBydG5sX2xvY2soKS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbiYjNDM7ICovXG4mIzQzO2ludCBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX1JUTkwoKTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gX19waHlfZGV2aWNlX3JlZ2lzdGVyKHBoeWRldik7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cGh5X3BzZV9sb2NrKTtcbiYjNDM7XHRwaHlfdHJ5X2F0dGFjaF9wc2UocGh5ZGV2KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cGh5X3BzZV9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZCk7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcGh5X2RldmljZV9yZWdpc3RlciAtIFJlZ2lzdGVyIHRoZSBwaHkgZGV2aWNlIG9uIHRoZSBNRElPIGJ1c1xuJiM0MzsgKiBAcGh5ZGV2OiBwaHlfZGV2aWNlIHN0cnVjdHVyZSB0byBiZSBhZGRlZCB0byB0aGUgTURJTyBidXNcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbiYjNDM7ICovXG4mIzQzO2ludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBfX3BoeV9kZXZpY2VfcmVnaXN0ZXIocGh5ZGV2KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwaHlfcHNlX2xvY2spO1xuJiM0MztcdHBoeV90cnlfYXR0YWNoX3BzZShwaHlkZXYpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwaHlfcHNlX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuIEVYUE9SVF9TWU1CT0wocGh5X2RldmljZV9yZWdpc3Rlcik7XG4gXG4gLyoqXG5AQCAtMTE1Miw3ICYjNDM7MTMxNSwxNSBAQCBFWFBPUlRfU1lNQk9MKHBoeV9kZXZpY2VfcmVnaXN0ZXIpO1xuIHZvaWQgcGh5X2RldmljZV9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiB7XG4gXHR1bnJlZ2lzdGVyX21paV90aW1lc3RhbXBlcihwaHlkZXYtXHUwMDNlbWlpX3RzKTtcbiYjNDM7XG4mIzQzO1x0LyogRGV0YWNoIHN5bmNocm9ub3VzbHksIGJlZm9yZSB0aGUgcGh5IGxlYXZlcyB0aGUgYnVzLCBzbyB0aGUgcHV0IGNhbm5vdFxuJiM0MztcdCAqIG91dGxpdmUgdGhlIFBTRSBjb250cm9sbGVyIChhbiBvZmYtYnVzIGJ1dCBzdGlsbC1waW5uZWQgcGh5IGlzIG1pc3NlZCBieVxuJiM0MztcdCAqIHRoZSBQU0VfVU5SRUdJU1RFUkVEIHdhbGspLiBwaHlfcHNlX2xvY2sgc2VyaWFsaXNlcyBhZ2FpbnN0IHRoYXQgd2Fsay5cbiYjNDM7XHQgKi9cbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnBoeV9wc2VfbG9jayk7XG4gXHRwc2VfY29udHJvbF9wdXQocGh5ZGV2LVx1MDAzZXBzZWMpO1xuJiM0MztcdHBoeWRldi1cdTAwM2Vwc2VjID0gTlVMTDtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cGh5X3BzZV9sb2NrKTtcbiBcbiBcdGRldmljZV9kZWwoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2KTtcbiBcbkBAIC0zOTgxLDggJiM0Mzs0MTUyLDE0IEBAIHN0YXRpYyBpbnQgX19pbml0IHBoeV9pbml0KHZvaWQpXG4gXHRpZiAocmMpXG4gXHRcdGdvdG8gZXJyX2M0NTtcbiBcbiYjNDM7XHRyYyA9IHBzZV9yZWdpc3Rlcl9ub3RpZmllcihcdTAwMjZwaHlfcHNlX25vdGlmaWVyKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRnb3RvIGVycl9nZW5waHk7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gXG4mIzQzO2Vycl9nZW5waHk6XG4mIzQzO1x0cGh5X2RyaXZlcl91bnJlZ2lzdGVyKFx1MDAyNmdlbnBoeV9kcml2ZXIpO1xuIGVycl9jNDU6XG4gXHRwaHlfZHJpdmVyX3VucmVnaXN0ZXIoXHUwMDI2Z2VucGh5X2M0NV9kcml2ZXIpO1xuIGVycl9ldGh0b29sX3BoeV9vcHM6XG5AQCAtMzk5OSw2ICYjNDM7NDE3Niw3IEBAIHN0YXRpYyBpbnQgX19pbml0IHBoeV9pbml0KHZvaWQpXG4gXG4gc3RhdGljIHZvaWQgX19leGl0IHBoeV9leGl0KHZvaWQpXG4ge1xuJiM0MztcdHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyKFx1MDAyNnBoeV9wc2Vfbm90aWZpZXIpO1xuIFx0cGh5X2RyaXZlcl91bnJlZ2lzdGVyKFx1MDAyNmdlbnBoeV9jNDVfZHJpdmVyKTtcbiBcdHBoeV9kcml2ZXJfdW5yZWdpc3RlcihcdTAwMjZnZW5waHlfZHJpdmVyKTtcbiBcdHJ0bmxfbG9jaygpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9zZnAuYyBiL2RyaXZlcnMvbmV0L3BoeS9zZnAuY1xuaW5kZXggMDNiZmQ4NjQwZGI5Ni4uMTg4NjhiZGQ2NDg1MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9zZnAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3NmcC5jXG5AQCAtMjA4Myw3ICYjNDM7MjA4Myw3IEBAIHN0YXRpYyBpbnQgc2ZwX3NtX3Byb2JlX3BoeShzdHJ1Y3Qgc2ZwICpzZnAsIGludCBhZGRyLCBib29sIGlzX2M0NSlcbiBcdC8qIE1hcmsgdGhpcyBQSFkgYXMgYmVpbmcgb24gYSBTRlAgbW9kdWxlICovXG4gXHRwaHktXHUwMDNlaXNfb25fc2ZwX21vZHVsZSA9IHRydWU7XG4gXG4tXHRlcnIgPSBwaHlfZGV2aWNlX3JlZ2lzdGVyKHBoeSk7XG4mIzQzO1x0ZXJyID0gcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWQocGh5KTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0cGh5X2RldmljZV9mcmVlKHBoeSk7XG4gXHRcdGRldl9lcnIoc2ZwLVx1MDAzZWRldiwgXCYjMzQ7cGh5X2RldmljZV9yZWdpc3RlciBmYWlsZWQ6ICVwZVxcblwmIzM0OyxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jXG5pbmRleCA2OWRiZGJkZTlkNzFhLi42MTE1NDBkZjQzYmIxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jXG5AQCAtOCw2ICYjNDM7OCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGh0b29sLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGh0b29sX25ldGxpbmsuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9ub3RpZmllci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHNlLXBkL3BzZS5oXHUwMDNlXG5AQCAtMjMsNiAmIzQzOzI0LDM5IEBAIHN0YXRpYyBMSVNUX0hFQUQocHNlX2NvbnRyb2xsZXJfbGlzdCk7XG4gc3RhdGljIERFRklORV9YQVJSQVlfQUxMT0MocHNlX3B3X2RfbWFwKTtcbiBzdGF0aWMgREVGSU5FX01VVEVYKHBzZV9wd19kX211dGV4KTtcbiBcbiYjNDM7c3RhdGljIEJMT0NLSU5HX05PVElGSUVSX0hFQUQocHNlX2NvbnRyb2xsZXJfbm90aWZpZXIpO1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHBzZV9yZWdpc3Rlcl9ub3RpZmllciAtIHJlZ2lzdGVyIGEgY2FsbGJhY2sgZm9yIFBTRSBjb250cm9sbGVyIGV2ZW50c1xuJiM0MzsgKiBAbmI6IG5vdGlmaWVyIGJsb2NrIHRvIHJlZ2lzdGVyXG4mIzQzOyAqXG4mIzQzOyAqIFNlZSBlbnVtIHBzZV9jb250cm9sbGVyX2V2ZW50IGZvciBldmVudHMgZmlyZWQgYW5kIHRoZWlyIHN1YnNjcmliZXJcbiYjNDM7ICogY29udHJhY3QuIENhbGxiYWNrcyBydW4gaW4gcHJvY2VzcyBjb250ZXh0OyB0aGV5IG1heSBzbGVlcCwgdGFrZVxuJiM0MzsgKiBydG5sLCBhbmQgY2FsbCBvZl9wc2VfY29udHJvbF9nZXQoKS4gVGhlIGNoYWluIGZpcmVzIHN5bmNocm9ub3VzbHksXG4mIzQzOyAqIHNvIGEgUFNFIGNvbnRyb2xsZXIgZHJpdmVyJiMzOTtzIHByb2JlL3VuYmluZCBwYXRoIG11c3Qgbm90IGhvbGQgYW55XG4mIzQzOyAqIHN1Y2ggbG9jayB3aGVuIGNhbGxpbmcgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoKSBvclxuJiM0MzsgKiBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyKCkuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cbiYjNDM7ICovXG4mIzQzO2ludCBwc2VfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBibG9ja2luZ19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcihcdTAwMjZwc2VfY29udHJvbGxlcl9ub3RpZmllciwgbmIpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHBzZV9yZWdpc3Rlcl9ub3RpZmllcik7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcHNlX3VucmVnaXN0ZXJfbm90aWZpZXIgLSB1bnJlZ2lzdGVyIGEgcHJldmlvdXNseSByZWdpc3RlcmVkIGNhbGxiYWNrXG4mIzQzOyAqIEBuYjogbm90aWZpZXIgYmxvY2sgcHJldmlvdXNseSBwYXNzZWQgdG8gcHNlX3JlZ2lzdGVyX25vdGlmaWVyKClcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLlxuJiM0MzsgKi9cbiYjNDM7aW50IHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYmxvY2tpbmdfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcihcdTAwMjZwc2VfY29udHJvbGxlcl9ub3RpZmllciwgbmIpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyKTtcbiYjNDM7XG4gLyoqXG4gICogc3RydWN0IHBzZV9jb250cm9sIC0gYSBQU0UgY29udHJvbFxuICAqIEBwY2RldjogYSBwb2ludGVyIHRvIHRoZSBQU0UgY29udHJvbGxlciBkZXZpY2VcbkBAIC0xMTA0LDYgJiM0MzsxMTM4LDkgQEAgaW50IHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxuIFx0bGlzdF9hZGQoXHUwMDI2cGNkZXYtXHUwMDNlbGlzdCwgXHUwMDI2cHNlX2NvbnRyb2xsZXJfbGlzdCk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2cHNlX2xpc3RfbXV0ZXgpO1xuIFxuJiM0MztcdGJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oXHUwMDI2cHNlX2NvbnRyb2xsZXJfbm90aWZpZXIsXG4mIzQzO1x0XHRcdFx0ICAgICBQU0VfUkVHSVNURVJFRCwgcGNkZXYpO1xuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChwc2VfY29udHJvbGxlcl9yZWdpc3Rlcik7XG5AQCAtMTExNCw2ICYjNDM7MTE1MSw5IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKTtcbiAgKi9cbiB2b2lkIHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXIoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXG4ge1xuJiM0MztcdGJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oXHUwMDI2cHNlX2NvbnRyb2xsZXJfbm90aWZpZXIsXG4mIzQzO1x0XHRcdFx0ICAgICBQU0VfVU5SRUdJU1RFUkVELCBwY2Rldik7XG4mIzQzO1xuIFx0cHNlX2ZsdXNoX3B3X2RzKHBjZGV2KTtcbiBcdHBzZV9yZWxlYXNlX3BpcyhwY2Rldik7XG4gXHRpZiAocGNkZXYtXHUwMDNlaXJxKVxuQEAgLTE5ODEsMyAmIzQzOzIwMjEsMTcgQEAgYm9vbCBwc2VfaGFzX2MzMyhzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMpXG4gXHRyZXR1cm4gcHNlYy1cdTAwM2VwY2Rldi1cdTAwM2V0eXBlcyBcdTAwMjYgRVRIVE9PTF9QU0VfQzMzO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChwc2VfaGFzX2MzMyk7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldiAtIFRlc3Qgd2hldGhlciBhIHBzZV9jb250cm9sIHRhcmdldHMgYSBjb250cm9sbGVyXG4mIzQzOyAqIEBwc2VjOiBwc2VfY29udHJvbCBvYnRhaW5lZCBmcm9tIG9mX3BzZV9jb250cm9sX2dldCgpXG4mIzQzOyAqIEBwY2RldjogUFNFIGNvbnRyb2xsZXIgdG8gY29tcGFyZSBhZ2FpbnN0XG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogJXRydWUgaWYgQHBzZWMgd2FzIG9idGFpbmVkIGZyb20gQHBjZGV2LCAlZmFsc2Ugb3RoZXJ3aXNlLlxuJiM0MzsgKi9cbiYjNDM7Ym9vbCBwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2KHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYyxcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHBzZWMtXHUwMDNlcGNkZXYgPT0gcGNkZXY7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocHNlX2NvbnRyb2xfbWF0Y2hlc19wY2Rldik7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmhcbmluZGV4IDE5OWE3YWFhMzQxYmYuLjU1YTAwNDljNmMyYjUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5AQCAtMjE1OCw4ICYjNDM7MjE1OCwxMiBAQCBzdHJ1Y3QgcGh5X2RldmljZSAqZndub2RlX3BoeV9maW5kX2RldmljZShzdHJ1Y3QgZndub2RlX2hhbmRsZSAqcGh5X2Z3bm9kZSk7XG4gc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZV9nZXRfcGh5X25vZGUoY29uc3Qgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSk7XG4gc3RydWN0IHBoeV9kZXZpY2UgKmdldF9waHlfZGV2aWNlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBib29sIGlzX2M0NSk7XG4gaW50IHBoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeSk7XG4mIzQzOy8qIENhbGxlciBtdXN0IGhvbGQgcnRubF9sb2NrKCk7IHNlZSBwaHlfZGV2aWNlX3JlZ2lzdGVyKCkgZm9yIHRoZSBwdWJsaWMgZm9ybS4gKi9cbiYjNDM7aW50IHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpO1xuIHZvaWQgcGh5X2RldmljZV9mcmVlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIHZvaWQgcGh5X2RldmljZV9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4mIzQzO3ZvaWQgcGh5X3BzZV9jb250cm9sX2xvY2sodm9pZCk7XG4mIzQzO3ZvaWQgcGh5X3BzZV9jb250cm9sX3VubG9jayh2b2lkKTtcbiBpbnQgcGh5X2dldF9jNDVfaWRzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIGludCBwaHlfaW5pdF9odyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiBpbnQgcGh5X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wc2UtcGQvcHNlLmggYi9pbmNsdWRlL2xpbnV4L3BzZS1wZC9wc2UuaFxuaW5kZXggNGU1Njk2Y2ZhZGU3Yy4uZDQzMTBjYTcxYTNlMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcHNlLXBkL3BzZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BzZS1wZC9wc2UuaFxuQEAgLTIxLDYgJiM0MzsyMSw3IEBAIHN0cnVjdCBuZXRfZGV2aWNlO1xuIHN0cnVjdCBwaHlfZGV2aWNlO1xuIHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXY7XG4gc3RydWN0IG5ldGxpbmtfZXh0X2FjaztcbiYjNDM7c3RydWN0IG5vdGlmaWVyX2Jsb2NrO1xuIFxuIC8qIEMzMyBQU0UgZXh0ZW5kZWQgc3RhdGUgYW5kIHN1YnN0YXRlLiAqL1xuIHN0cnVjdCBldGh0b29sX2MzM19wc2VfZXh0X3N0YXRlX2luZm8ge1xuQEAgLTMzNyw2ICYjNDM7MzM4LDI0IEBAIGVudW0gcHNlX2J1ZGdldF9ldmFsX3N0cmF0ZWdpZXMge1xuIFx0UFNFX0JVREdFVF9FVkFMX1NUUkFUX0RZTkFNSUNcdD0gMSBcdTAwM2NcdTAwM2MgMixcbiB9O1xuIFxuJiM0MzsvKipcbiYjNDM7ICogZW51bSBwc2VfY29udHJvbGxlcl9ldmVudCAtIFBTRSBjb250cm9sbGVyIGxpZmVjeWNsZSBldmVudHNcbiYjNDM7ICpcbiYjNDM7ICogRXZlbnQgZGF0YSBpbiBjYWxsYmFja3MgaXMgYWx3YXlzIGEgcG9pbnRlciB0byB0aGUgc3RydWN0XG4mIzQzOyAqIHBzZV9jb250cm9sbGVyX2RldiBmaXJpbmcgdGhlIGV2ZW50LlxuJiM0MzsgKlxuJiM0MzsgKiBAUFNFX1JFR0lTVEVSRUQ6IGNvbnRyb2xsZXIgYWRkZWQgdG8gcHNlX2NvbnRyb2xsZXJfbGlzdCBhbmRcbiYjNDM7ICpcdHJlc29sdmFibGUgYnkgb2ZfcHNlX2NvbnRyb2xfZ2V0KCkuXG4mIzQzOyAqIEBQU0VfVU5SRUdJU1RFUkVEOiBjb250cm9sbGVyIGFib3V0IHRvIGJlIHJlbW92ZWQgZnJvbVxuJiM0MzsgKlx0cHNlX2NvbnRyb2xsZXJfbGlzdC4gU3Vic2NyaWJlcnMgaG9sZGluZyBwc2VfY29udHJvbCByZWZlcmVuY2VzXG4mIzQzOyAqXHR0YXJnZXRpbmcgaXQgbXVzdCBkcm9wIHRoZW0gYmVmb3JlIHJldHVybmluZyBhbmQgbXVzdCBub3RcbiYjNDM7ICpcdGFjcXVpcmUgbmV3IHJlZmVyZW5jZXMgZm9yIGl0LlxuJiM0MzsgKi9cbiYjNDM7ZW51bSBwc2VfY29udHJvbGxlcl9ldmVudCB7XG4mIzQzO1x0UFNFX1JFR0lTVEVSRUQsXG4mIzQzO1x0UFNFX1VOUkVHSVNURVJFRCxcbiYjNDM7fTtcbiYjNDM7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX1BTRV9DT05UUk9MTEVSKVxuIGludCBwc2VfY29udHJvbGxlcl9yZWdpc3RlcihzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2Rldik7XG4gdm9pZCBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KTtcbkBAIC0zNjYsNiAmIzQzOzM4NSwxMiBAQCBpbnQgcHNlX2V0aHRvb2xfc2V0X3ByaW8oc3RydWN0IHBzZV9jb250cm9sICpwc2VjLFxuIGJvb2wgcHNlX2hhc19wb2RsKHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYyk7XG4gYm9vbCBwc2VfaGFzX2MzMyhzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMpO1xuIFxuJiM0Mztib29sIHBzZV9jb250cm9sX21hdGNoZXNfcGNkZXYoc3RydWN0IHBzZV9jb250cm9sICpwc2VjLFxuJiM0MztcdFx0XHQgICAgICAgc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpO1xuJiM0MztcbiYjNDM7aW50IHBzZV9yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTtcbiYjNDM7aW50IHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpO1xuJiM0MztcbiAjZWxzZVxuIFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBzZV9jb250cm9sICpvZl9wc2VfY29udHJvbF9nZXQoc3RydWN0IGRldmljZV9ub2RlICpub2RlLFxuQEAgLTQxNiw2ICYjNDM7NDQxLDIyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwc2VfaGFzX2MzMyhzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMpXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldihzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBwc2VfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYilcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gI2VuZGlmXG4gXG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvcHNlLXBkLmMgYi9uZXQvZXRodG9vbC9wc2UtcGQuY1xuaW5kZXggNzU3YzllMGNjODU2Zi4uNGVkZDlhNTE0ZGUxNCAxMDA2NDRcbi0tLSBhL25ldC9ldGh0b29sL3BzZS1wZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvZXRodG9vbC9wc2UtcGQuY1xuQEAgLTcxLDcgJiM0Mzs3MSw5IEBAIHN0YXRpYyBpbnQgcHNlX3ByZXBhcmVfZGF0YShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLFxuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiYjNDM7XHRwaHlfcHNlX2NvbnRyb2xfbG9jaygpO1xuIFx0cmV0ID0gcHNlX2dldF9wc2VfYXR0cmlidXRlcyhwaHlkZXYsIGluZm8tXHUwMDNlZXh0YWNrLCBkYXRhKTtcbiYjNDM7XHRwaHlfcHNlX2NvbnRyb2xfdW5sb2NrKCk7XG4gXG4gXHRldGhubF9vcHNfY29tcGxldGUoZGV2KTtcbiBcbkBAIC0yODEsOSAmIzQzOzI4MywxMiBAQCBldGhubF9zZXRfcHNlKHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXG4gXHRwaHlkZXYgPSBldGhubF9yZXFfZ2V0X3BoeWRldihyZXFfaW5mbywgdGIsIEVUSFRPT0xfQV9QU0VfSEVBREVSLFxuIFx0XHRcdFx0ICAgICAgaW5mby1cdTAwM2VleHRhY2spO1xuJiM0MztcbiYjNDM7XHRwaHlfcHNlX2NvbnRyb2xfbG9jaygpO1xuJiM0MztcbiBcdHJldCA9IGV0aG5sX3NldF9wc2VfdmFsaWRhdGUocGh5ZGV2LCBpbmZvKTtcbiBcdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiBcbiBcdGlmICh0YltFVEhUT09MX0FfUFNFX1BSSU9dKSB7XG4gXHRcdHVuc2lnbmVkIGludCBwcmlvO1xuQEAgLTI5MSw3ICYjNDM7Mjk2LDcgQEAgZXRobmxfc2V0X3BzZShzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRwcmlvID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BTRV9QUklPXSk7XG4gXHRcdHJldCA9IHBzZV9ldGh0b29sX3NldF9wcmlvKHBoeWRldi1cdTAwM2Vwc2VjLCBpbmZvLVx1MDAzZWV4dGFjaywgcHJpbyk7XG4gXHRcdGlmIChyZXQpXG4tXHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4gXHRpZiAodGJbRVRIVE9PTF9BX0MzM19QU0VfQVZBSUxfUFdfTElNSVRdKSB7XG5AQCAtMzAxLDcgJiM0MzszMDYsNyBAQCBldGhubF9zZXRfcHNlKHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdHJldCA9IHBzZV9ldGh0b29sX3NldF9wd19saW1pdChwaHlkZXYtXHUwMDNlcHNlYywgaW5mby1cdTAwM2VleHRhY2ssXG4gXHRcdFx0XHRcdCAgICAgICBwd19saW1pdCk7XG4gXHRcdGlmIChyZXQpXG4tXHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4gXHQvKiBUaGVzZSB2YWx1ZXMgYXJlIGFscmVhZHkgdmFsaWRhdGVkIGJ5IHRoZSBldGhubF9wc2Vfc2V0X3BvbGljeSAqL1xuQEAgLTMxOSwxMSAmIzQzOzMyNCwxMSBAQCBldGhubF9zZXRfcHNlKHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdCAqL1xuIFx0XHRyZXQgPSBwc2VfZXRodG9vbF9zZXRfY29uZmlnKHBoeWRldi1cdTAwM2Vwc2VjLCBpbmZvLVx1MDAzZWV4dGFjayxcbiBcdFx0XHRcdFx0ICAgICBcdTAwMjZjb25maWcpO1xuLVx0XHRpZiAocmV0KVxuLVx0XHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4mIzQzO291dDpcbiBcdC8qIFJldHVybiBlcnJubyBvciB6ZXJvIC0gUFNFIGhhcyBubyBub3RpZmljYXRpb24gKi9cbiYjNDM7XHRwaHlfcHNlX2NvbnRyb2xfdW5sb2NrKCk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjoxMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFNFX0NPTlRST0xMRVImIzM0OywKICAgICYjMzQ7UFNFX1JFR1VMQVRPUiYjMzQ7LAogICAgJiMzNDtSRUdVTEFUT1ImIzM0OywKICAgICYjMzQ7U0ZQJiMzNDssCiAgICAmIzM0O0ZXTk9ERV9NRElPJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGh5X3BzZV9jb250cm9sX2xvY2smIzM0OywKICAgICYjMzQ7cGh5X3BzZV9jb250cm9sX3VubG9jayYjMzQ7LAogICAgJiMzNDtwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZCYjMzQ7LAogICAgJiMzNDtwaHlfZGV2aWNlX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O3BoeV9kZXZpY2VfcmVtb3ZlJiMzNDssCiAgICAmIzM0O3BzZV9yZWdpc3Rlcl9ub3RpZmllciYjMzQ7LAogICAgJiMzNDtwc2VfdW5yZWdpc3Rlcl9ub3RpZmllciYjMzQ7LAogICAgJiMzNDtwc2VfY29udHJvbGxlcl9yZWdpc3RlciYjMzQ7LAogICAgJiMzNDtwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyJiMzNDssCiAgICAmIzM0O3BzZV9jb250cm9sX21hdGNoZXNfcGNkZXYmIzM0OywKICAgICYjMzQ7ZXRobmxfc2V0X3BzZSYjMzQ7LAogICAgJiMzNDtwc2VfcHJlcGFyZV9kYXRhJiMzNDssCiAgICAmIzM0O3BoeV9wc2VfYXR0YWNoX29uZSYjMzQ7LAogICAgJiMzNDtwaHlfcHNlX2RldGFjaF9vbmUmIzM0OywKICAgICYjMzQ7cGh5X3BzZV9ub3RpZmllcl9ldmVudCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIGhvdyB0aGUgUFNFIGNvbnRyb2xsZXIgaXMgYXR0YWNoZWQgdG8gdGhlIFBIWSBkZXZpY2UsIGludHJvZHVjaW5nIGEgbmV3IGxvY2sgKGBwaHlfcHNlX2xvY2tgKSBhbmQgYSBub3RpZmllciAoYHBoeV9wc2Vfbm90aWZpZXJgKSB0byBoYW5kbGUgUFNFIGNvbnRyb2xsZXIgcmVnaXN0cmF0aW9uIGFuZCB1bnJlZ2lzdHJhdGlvbi4gSXQgYWxzbyBtb2RpZmllcyB0aGUgZXRodG9vbCBQU0UgbmV0bGluayBpbnRlcmZhY2UgdG8gdXNlIHRoZSBuZXcgbG9jay4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIGNvcmUgUEhZIGxpYnJhcnkgYW5kIGV0aHRvb2wsIGFuZCBhcmUgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIGFuZCBQSFkgZGV2aWNlIHJlZ2lzdHJhdGlvbiBwYXRocywgd2hpY2ggY2FuIGJlIHRyaWdnZXJlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2NjhkMDkzYjA5ZmYwZTQyYmI0YWIzOTlkMTRlMmFhMDAwN2JhNWNkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMjYgMjI6MTA6MzkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMgYi9kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMKaW5kZXggYmE3MDkxNTE4MjY1NC4uN2JkOTc5YjU5ZjQ5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYwpAQCAtMTEsMzMgJiM0MzsxMSwxMSBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2Z3bm9kZV9tZGlvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9waHkuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9wc2UtcGQvcHNlLmgmZ3Q7CiAKIE1PRFVMRV9BVVRIT1IoJiMzNDtDYWx2aW4gSm9obnNvbiAmbHQ7Y2FsdmluLmpvaG5zb25Ab3NzLm54cC5jb20mZ3Q7JiMzNDspOwogTU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CiBNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtGV05PREUgTURJTyBidXMgKEV0aGVybmV0IFBIWSkgYWNjZXNzb3JzJiMzNDspOwogCi1zdGF0aWMgc3RydWN0IHBzZV9jb250cm9sICoKLWZ3bm9kZV9maW5kX3BzZV9jb250cm9sKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsCi0JCQlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQotewotCXN0cnVjdCBwc2VfY29udHJvbCAqcHNlYzsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwotCi0JaWYgKCFJU19FTkFCTEVEKENPTkZJR19QU0VfQ09OVFJPTExFUikpCi0JCXJldHVybiBOVUxMOwotCi0JbnAgPSB0b19vZl9ub2RlKGZ3bm9kZSk7Ci0JaWYgKCFucCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlwc2VjID0gb2ZfcHNlX2NvbnRyb2xfZ2V0KG5wLCBwaHlkZXYpOwotCWlmIChQVFJfRVJSKHBzZWMpID09IC1FTk9FTlQpCi0JCXJldHVybiBOVUxMOwotCi0JcmV0dXJuIHBzZWM7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgbWlpX3RpbWVzdGFtcGVyICoKIGZ3bm9kZV9maW5kX21paV90aW1lc3RhbXBlcihzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKQogewpAQCAtMTE4LDcgJiM0Mzs5Niw2IEBAIGludCBmd25vZGVfbWRpb2J1c19yZWdpc3Rlcl9waHkoc3RydWN0IG1paV9idXMgKmJ1cywKIAkJCQlzdHJ1Y3QgZndub2RlX2hhbmRsZSAqY2hpbGQsIHUzMiBhZGRyKQogewogCXN0cnVjdCBtaWlfdGltZXN0YW1wZXIgKm1paV90cyA9IE5VTEw7Ci0Jc3RydWN0IHBzZV9jb250cm9sICpwc2VjID0gTlVMTDsKIAlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5OwogCWJvb2wgaXNfYzQ1OwogCXUzMiBwaHlfaWQ7CkBAIC0xNTksMTQgJiM0MzsxMzYsNiBAQCBpbnQgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KHN0cnVjdCBtaWlfYnVzICpidXMsCiAJCQlnb3RvIGNsZWFuX3BoeTsKIAl9CiAKLQlwc2VjID0gZndub2RlX2ZpbmRfcHNlX2NvbnRyb2woY2hpbGQsIHBoeSk7Ci0JaWYgKElTX0VSUihwc2VjKSkgewotCQlyYyA9IFBUUl9FUlIocHNlYyk7Ci0JCWdvdG8gdW5yZWdpc3Rlcl9waHk7Ci0JfQotCi0JcGh5LSZndDtwc2VjID0gcHNlYzsKLQogCS8qIHBoeS0mZ3Q7bWlpX3RzIG1heSBhbHJlYWR5IGJlIGRlZmluZWQgYnkgdGhlIFBIWSBkcml2ZXIuIEEKIAkgKiBtaWlfdGltZXN0YW1wZXIgcHJvYmVkIHZpYSB0aGUgZGV2aWNlIHRyZWUgd2lsbCBzdGlsbCBoYXZlCiAJICogcHJlY2VkZW5jZS4KQEAgLTE3Niw5ICYjNDM7MTQ1LDYgQEAgaW50IGZ3bm9kZV9tZGlvYnVzX3JlZ2lzdGVyX3BoeShzdHJ1Y3QgbWlpX2J1cyAqYnVzLAogCiAJcmV0dXJuIDA7CiAKLXVucmVnaXN0ZXJfcGh5OgotCWlmIChpc19hY3BpX25vZGUoY2hpbGQpIHx8IGlzX29mX25vZGUoY2hpbGQpKQotCQlwaHlfZGV2aWNlX3JlbW92ZShwaHkpOwogY2xlYW5fcGh5OgogCXBoeV9kZXZpY2VfZnJlZShwaHkpOwogY2xlYW5fbWlpX3RzOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMKaW5kZXggMDYxNTIyODQ1OWVmNC4uZGNhMWI0NWJiYmQyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jCkBAIC0xMTAyLDExICYjNDM7MTEwMiwxMjggQEAgc3RydWN0IHBoeV9kZXZpY2UgKmdldF9waHlfZGV2aWNlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBib29sIGlzX2M0NSkKIH0KIEVYUE9SVF9TWU1CT0woZ2V0X3BoeV9kZXZpY2UpOwogCiYjNDM7LyogU2VyaWFsaXNlcyBwaHlkZXYtJmd0O3BzZWMgYWdhaW5zdCB0aGUgUFNFIG5vdGlmaWVyIGFuZCBldGh0b29sLCBub3QgcnRubC4gKi8KJiM0MztzdGF0aWMgREVGSU5FX01VVEVYKHBoeV9wc2VfbG9jayk7CiYjNDM7CiYjNDM7LyogQmVzdC1lZmZvcnQgYXR0YWNoIG9mIHBoeWRldi0mZ3Q7cHNlYyBmcm9tIGEgRFQgYHBzZXMgPSAmbHQ7JmFtcDsuLi4mZ3Q7YCBwaGFuZGxlLgomIzQzOyAqIENhbGxlciBtdXN0IGhvbGQgcGh5X3BzZV9sb2NrLiBBIG1pc3NpbmcgcGhhbmRsZSAoLUVOT0VOVCkgb3IgYQomIzQzOyAqIG5vdC15ZXQtcmVnaXN0ZXJlZCBjb250cm9sbGVyICgtRVBST0JFX0RFRkVSKSBpcyBzaWxlbnQ7IHRoZSBub3RpZmllcgomIzQzOyAqIHJldHJpZXMgdGhlIGxhdHRlciBhdCBQU0VfUkVHSVNURVJFRCB0aW1lLiBBbnkgb3RoZXIgZXJyb3IgbWVhbnMgYSBicm9rZW4KJiM0MzsgKiBiaW5kaW5nIGFuZCBpcyB3YXJuZWQgYWJvdXQsIGJ1dCBsZWZ0IG5vbi1mYXRhbCBzbyB0aGUgcGh5IHN0aWxsIHJlZ2lzdGVycy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBwaHlfdHJ5X2F0dGFjaF9wc2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwc2VfY29udHJvbCAqcHNlYzsKJiM0MzsJc3RydWN0IGRldmljZV9ub2RlICpucDsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3BoeV9wc2VfbG9jayk7CiYjNDM7CiYjNDM7CW5wID0gcGh5ZGV2LSZndDttZGlvLmRldi5vZl9ub2RlOwomIzQzOwlpZiAoIW5wKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAocGh5ZGV2LSZndDtwc2VjKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlwc2VjID0gb2ZfcHNlX2NvbnRyb2xfZ2V0KG5wLCBwaHlkZXYpOwomIzQzOwlpZiAoSVNfRVJSKHBzZWMpKSB7CiYjNDM7CQlpZiAoUFRSX0VSUihwc2VjKSAhPSAtRVBST0JFX0RFRkVSICZhbXA7JmFtcDsgUFRSX0VSUihwc2VjKSAhPSAtRU5PRU5UKQomIzQzOwkJCXBoeWRldl93YXJuKHBoeWRldiwgJiMzNDtmYWlsZWQgdG8gZ2V0IFBTRSBjb250cm9sOiAlcGVcbiYjMzQ7LAomIzQzOwkJCQkgICAgcHNlYyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJcGh5ZGV2LSZndDtwc2VjID0gcHNlYzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBwaHlfcHNlX2F0dGFjaF9vbmUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhIF9fbWF5YmVfdW51c2VkKQomIzQzO3sKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3BoeV9wc2VfbG9jayk7CiYjNDM7CiYjNDM7CWlmIChkZXYtJmd0O3R5cGUgIT0gJmFtcDttZGlvX2J1c19waHlfdHlwZSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlwaHlfdHJ5X2F0dGFjaF9wc2UodG9fcGh5X2RldmljZShkZXYpKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGh5X3BzZV9kZXRhY2hfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2ID0gZGF0YTsKJiM0MzsJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjsKJiM0MzsJc3RydWN0IHBzZV9jb250cm9sICpwc2VjOwomIzQzOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7cGh5X3BzZV9sb2NrKTsKJiM0MzsKJiM0MzsJaWYgKGRldi0mZ3Q7dHlwZSAhPSAmYW1wO21kaW9fYnVzX3BoeV90eXBlKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXBoeWRldiA9IHRvX3BoeV9kZXZpY2UoZGV2KTsKJiM0MzsJcHNlYyA9IHBoeWRldi0mZ3Q7cHNlYzsKJiM0MzsJaWYgKCFwc2VjIHx8ICFwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2KHBzZWMsIHBjZGV2KSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlwaHlkZXYtJmd0O3BzZWMgPSBOVUxMOwomIzQzOwlwc2VfY29udHJvbF9wdXQocHNlYyk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBoeV9wc2Vfbm90aWZpZXJfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKJiM0MzsJCQkJICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJc3dpdGNoIChldmVudCkgewomIzQzOwljYXNlIFBTRV9SRUdJU1RFUkVEOgomIzQzOwkJbXV0ZXhfbG9jaygmYW1wO3BoeV9wc2VfbG9jayk7CiYjNDM7CQlidXNfZm9yX2VhY2hfZGV2KCZhbXA7bWRpb19idXNfdHlwZSwgTlVMTCwgTlVMTCwKJiM0MzsJCQkJIHBoeV9wc2VfYXR0YWNoX29uZSk7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDtwaHlfcHNlX2xvY2spOwomIzQzOwkJcmV0dXJuIE5PVElGWV9PSzsKJiM0MzsJY2FzZSBQU0VfVU5SRUdJU1RFUkVEOgomIzQzOwkJbXV0ZXhfbG9jaygmYW1wO3BoeV9wc2VfbG9jayk7CiYjNDM7CQlidXNfZm9yX2VhY2hfZGV2KCZhbXA7bWRpb19idXNfdHlwZSwgTlVMTCwgZGF0YSwKJiM0MzsJCQkJIHBoeV9wc2VfZGV0YWNoX29uZSk7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDtwaHlfcHNlX2xvY2spOwomIzQzOwkJcmV0dXJuIE5PVElGWV9PSzsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiBOT1RJRllfRE9ORTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBoeV9wc2Vfbm90aWZpZXIgX19yZWFkX21vc3RseSA9IHsKJiM0MzsJLm5vdGlmaWVyX2NhbGwgPSBwaHlfcHNlX25vdGlmaWVyX2V2ZW50LAomIzQzO307CiYjNDM7CiAvKioKLSAqIHBoeV9kZXZpY2VfcmVnaXN0ZXIgLSBSZWdpc3RlciB0aGUgcGh5IGRldmljZSBvbiB0aGUgTURJTyBidXMKLSAqIEBwaHlkZXY6IHBoeV9kZXZpY2Ugc3RydWN0dXJlIHRvIGJlIGFkZGVkIHRvIHRoZSBNRElPIGJ1cwomIzQzOyAqIHBoeV9wc2VfY29udHJvbF9sb2NrIC0gaG9sZCBwaHlkZXYtJmd0O3BzZWMgc3RhYmxlIGFnYWluc3QgUFNFIGNvbnRyb2xsZXIgdGVhcmRvd24KJiM0MzsgKgomIzQzOyAqIFRoZSBQU0VfVU5SRUdJU1RFUkVEIG5vdGlmaWVyIGRldGFjaGVzIHBoeWRldi0mZ3Q7cHNlYyBhbmQgZHJvcHMgaXRzIGxhc3QKJiM0MzsgKiByZWZlcmVuY2UuIENhbGxlcnMgdGhhdCBkZXJlZmVyZW5jZSBwaHlkZXYtJmd0O3BzZWMgKHRoZSBldGh0b29sIFBTRSBwYXRocykgbXVzdAomIzQzOyAqIGhvbGQgdGhpcyBsb2NrIGFjcm9zcyB0aGUgYWNjZXNzIHNvIHRoZSBkZXRhY2ggY2Fubm90IHJ1biB1bmRlcm5lYXRoIHRoZW0uCiAgKi8KLWludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7dm9pZCBwaHlfcHNlX2NvbnRyb2xfbG9jayh2b2lkKQomIzQzO3sKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3BoeV9wc2VfbG9jayk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHBoeV9wc2VfY29udHJvbF9sb2NrKTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBwaHlfcHNlX2NvbnRyb2xfdW5sb2NrIC0gcmVsZWFzZSB0aGUgbG9jayB0YWtlbiBieSBwaHlfcHNlX2NvbnRyb2xfbG9jaygpCiYjNDM7ICovCiYjNDM7dm9pZCBwaHlfcHNlX2NvbnRyb2xfdW5sb2NrKHZvaWQpCiYjNDM7ewomIzQzOwltdXRleF91bmxvY2soJmFtcDtwaHlfcHNlX2xvY2spOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChwaHlfcHNlX2NvbnRyb2xfdW5sb2NrKTsKJiM0MzsKJiM0MzsvKiBDb3JlIHJlZ2lzdHJhdGlvbjogYWRkIHRoZSBwaHkgdG8gdGhlIE1ESU8gYnVzLiBEb2VzIG5vdCB0b3VjaCBydG5sIG9yCiYjNDM7ICogUFNFLiBwaHlkZXYtJmd0O3BzZWMgaXMgYXR0YWNoZWQgYnkgdGhlIGNhbGxlcnMgYmVsb3csIGFmdGVyIGRldmljZV9hZGQoKQomIzQzOyAqIGhhcyBtYWRlIHRoZSBwaHkgdmlzaWJsZSBvbiBtZGlvX2J1c190eXBlLCBzbyB0aGF0IGEgY29uY3VycmVudCBQU0UKJiM0MzsgKiBub3RpZmllciB3YWxrIGFuZCB0aGUgYXR0YWNoIGNhbiBuZXZlciBsZWF2ZSB0aGUgcGh5IHVuYXR0YWNoZWQuIEtlZXBpbmcKJiM0MzsgKiBkZXZpY2VfYWRkKCkgb3V0IG9mIHJ0bmwgYWxzbyBhdm9pZHMgZGVhZGxvY2tpbmcgd2hlbiBiaW5kaW5nIGEgcGh5IHRoYXQKJiM0MzsgKiBpdHNlbGYgcHJvdmlkZXMgYW4gU0ZQIGNhZ2UgKHBoeV9wcm9iZSgpIC0mZ3Q7IHBoeV9zZnBfcHJvYmUoKSAtJmd0OwomIzQzOyAqIHNmcF9idXNfYWRkX3Vwc3RyZWFtKCkgdGFrZXMgcnRubCkuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBfX3BoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIHsKIAlpbnQgZXJyOwogCkBAIC0xMTM1LDEwICYjNDM7MTI1Miw1NiBAQCBpbnQgcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogIG91dDoKIAkvKiBBc3NlcnQgdGhlIHJlc2V0IHNpZ25hbCAqLwogCXBoeV9kZXZpY2VfcmVzZXQocGh5ZGV2LCAxKTsKLQogCW1kaW9idXNfdW5yZWdpc3Rlcl9kZXZpY2UoJmFtcDtwaHlkZXYtJmd0O21kaW8pOwogCXJldHVybiBlcnI7CiB9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWQgLSBSZWdpc3RlciB0aGUgcGh5IGRldmljZSBvbiB0aGUgTURJTyBidXMKJiM0MzsgKiBAcGh5ZGV2OiBwaHlfZGV2aWNlIHN0cnVjdHVyZSB0byBiZSBhZGRlZCB0byB0aGUgTURJTyBidXMKJiM0MzsgKgomIzQzOyAqIFNhbWUgYXMgcGh5X2RldmljZV9yZWdpc3RlcigpIGJ1dCBjYWxsZXIgbXVzdCBhbHJlYWR5IGhvbGQgcnRubF9sb2NrKCkuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgomIzQzOyAqLwomIzQzO2ludCBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJQVNTRVJUX1JUTkwoKTsKJiM0MzsKJiM0MzsJZXJyID0gX19waHlfZGV2aWNlX3JlZ2lzdGVyKHBoeWRldik7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cGh5X3BzZV9sb2NrKTsKJiM0MzsJcGh5X3RyeV9hdHRhY2hfcHNlKHBoeWRldik7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3BoeV9wc2VfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkKTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBwaHlfZGV2aWNlX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgdGhlIHBoeSBkZXZpY2Ugb24gdGhlIE1ESU8gYnVzCiYjNDM7ICogQHBoeWRldjogcGh5X2RldmljZSBzdHJ1Y3R1cmUgdG8gYmUgYWRkZWQgdG8gdGhlIE1ESU8gYnVzCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgomIzQzOyAqLwomIzQzO2ludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwllcnIgPSBfX3BoeV9kZXZpY2VfcmVnaXN0ZXIocGh5ZGV2KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwaHlfcHNlX2xvY2spOwomIzQzOwlwaHlfdHJ5X2F0dGFjaF9wc2UocGh5ZGV2KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cGh5X3BzZV9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQogRVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX3JlZ2lzdGVyKTsKIAogLyoqCkBAIC0xMTUyLDcgJiM0MzsxMzE1LDE1IEBAIEVYUE9SVF9TWU1CT0wocGh5X2RldmljZV9yZWdpc3Rlcik7CiB2b2lkIHBoeV9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiB7CiAJdW5yZWdpc3Rlcl9taWlfdGltZXN0YW1wZXIocGh5ZGV2LSZndDttaWlfdHMpOwomIzQzOwomIzQzOwkvKiBEZXRhY2ggc3luY2hyb25vdXNseSwgYmVmb3JlIHRoZSBwaHkgbGVhdmVzIHRoZSBidXMsIHNvIHRoZSBwdXQgY2Fubm90CiYjNDM7CSAqIG91dGxpdmUgdGhlIFBTRSBjb250cm9sbGVyIChhbiBvZmYtYnVzIGJ1dCBzdGlsbC1waW5uZWQgcGh5IGlzIG1pc3NlZCBieQomIzQzOwkgKiB0aGUgUFNFX1VOUkVHSVNURVJFRCB3YWxrKS4gcGh5X3BzZV9sb2NrIHNlcmlhbGlzZXMgYWdhaW5zdCB0aGF0IHdhbGsuCiYjNDM7CSAqLwomIzQzOwltdXRleF9sb2NrKCZhbXA7cGh5X3BzZV9sb2NrKTsKIAlwc2VfY29udHJvbF9wdXQocGh5ZGV2LSZndDtwc2VjKTsKJiM0MzsJcGh5ZGV2LSZndDtwc2VjID0gTlVMTDsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cGh5X3BzZV9sb2NrKTsKIAogCWRldmljZV9kZWwoJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2KTsKIApAQCAtMzk4MSw4ICYjNDM7NDE1MiwxNCBAQCBzdGF0aWMgaW50IF9faW5pdCBwaHlfaW5pdCh2b2lkKQogCWlmIChyYykKIAkJZ290byBlcnJfYzQ1OwogCiYjNDM7CXJjID0gcHNlX3JlZ2lzdGVyX25vdGlmaWVyKCZhbXA7cGh5X3BzZV9ub3RpZmllcik7CiYjNDM7CWlmIChyYykKJiM0MzsJCWdvdG8gZXJyX2dlbnBoeTsKJiM0MzsKIAlyZXR1cm4gMDsKIAomIzQzO2Vycl9nZW5waHk6CiYjNDM7CXBoeV9kcml2ZXJfdW5yZWdpc3RlcigmYW1wO2dlbnBoeV9kcml2ZXIpOwogZXJyX2M0NToKIAlwaHlfZHJpdmVyX3VucmVnaXN0ZXIoJmFtcDtnZW5waHlfYzQ1X2RyaXZlcik7CiBlcnJfZXRodG9vbF9waHlfb3BzOgpAQCAtMzk5OSw2ICYjNDM7NDE3Niw3IEBAIHN0YXRpYyBpbnQgX19pbml0IHBoeV9pbml0KHZvaWQpCiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBwaHlfZXhpdCh2b2lkKQogewomIzQzOwlwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcigmYW1wO3BoeV9wc2Vfbm90aWZpZXIpOwogCXBoeV9kcml2ZXJfdW5yZWdpc3RlcigmYW1wO2dlbnBoeV9jNDVfZHJpdmVyKTsKIAlwaHlfZHJpdmVyX3VucmVnaXN0ZXIoJmFtcDtnZW5waHlfZHJpdmVyKTsKIAlydG5sX2xvY2soKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9zZnAuYyBiL2RyaXZlcnMvbmV0L3BoeS9zZnAuYwppbmRleCAwM2JmZDg2NDBkYjk2Li4xODg2OGJkZDY0ODUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvc2ZwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3NmcC5jCkBAIC0yMDgzLDcgJiM0MzsyMDgzLDcgQEAgc3RhdGljIGludCBzZnBfc21fcHJvYmVfcGh5KHN0cnVjdCBzZnAgKnNmcCwgaW50IGFkZHIsIGJvb2wgaXNfYzQ1KQogCS8qIE1hcmsgdGhpcyBQSFkgYXMgYmVpbmcgb24gYSBTRlAgbW9kdWxlICovCiAJcGh5LSZndDtpc19vbl9zZnBfbW9kdWxlID0gdHJ1ZTsKIAotCWVyciA9IHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5KTsKJiM0MzsJZXJyID0gcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWQocGh5KTsKIAlpZiAoZXJyKSB7CiAJCXBoeV9kZXZpY2VfZnJlZShwaHkpOwogCQlkZXZfZXJyKHNmcC0mZ3Q7ZGV2LCAmIzM0O3BoeV9kZXZpY2VfcmVnaXN0ZXIgZmFpbGVkOiAlcGVcbiYjMzQ7LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMgYi9kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYwppbmRleCA2OWRiZGJkZTlkNzFhLi42MTE1NDBkZjQzYmIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYwpAQCAtOCw2ICYjNDM7OCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXRodG9vbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2V0aHRvb2xfbmV0bGluay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9ub3RpZmllci5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L29mLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGh5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcHNlLXBkL3BzZS5oJmd0OwpAQCAtMjMsNiAmIzQzOzI0LDM5IEBAIHN0YXRpYyBMSVNUX0hFQUQocHNlX2NvbnRyb2xsZXJfbGlzdCk7CiBzdGF0aWMgREVGSU5FX1hBUlJBWV9BTExPQyhwc2VfcHdfZF9tYXApOwogc3RhdGljIERFRklORV9NVVRFWChwc2VfcHdfZF9tdXRleCk7CiAKJiM0MztzdGF0aWMgQkxPQ0tJTkdfTk9USUZJRVJfSEVBRChwc2VfY29udHJvbGxlcl9ub3RpZmllcik7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcHNlX3JlZ2lzdGVyX25vdGlmaWVyIC0gcmVnaXN0ZXIgYSBjYWxsYmFjayBmb3IgUFNFIGNvbnRyb2xsZXIgZXZlbnRzCiYjNDM7ICogQG5iOiBub3RpZmllciBibG9jayB0byByZWdpc3RlcgomIzQzOyAqCiYjNDM7ICogU2VlIGVudW0gcHNlX2NvbnRyb2xsZXJfZXZlbnQgZm9yIGV2ZW50cyBmaXJlZCBhbmQgdGhlaXIgc3Vic2NyaWJlcgomIzQzOyAqIGNvbnRyYWN0LiBDYWxsYmFja3MgcnVuIGluIHByb2Nlc3MgY29udGV4dDsgdGhleSBtYXkgc2xlZXAsIHRha2UKJiM0MzsgKiBydG5sLCBhbmQgY2FsbCBvZl9wc2VfY29udHJvbF9nZXQoKS4gVGhlIGNoYWluIGZpcmVzIHN5bmNocm9ub3VzbHksCiYjNDM7ICogc28gYSBQU0UgY29udHJvbGxlciBkcml2ZXImIzM5O3MgcHJvYmUvdW5iaW5kIHBhdGggbXVzdCBub3QgaG9sZCBhbnkKJiM0MzsgKiBzdWNoIGxvY2sgd2hlbiBjYWxsaW5nIHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKCkgb3IKJiM0MzsgKiBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyKCkuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuCiYjNDM7ICovCiYjNDM7aW50IHBzZV9yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQomIzQzO3sKJiM0MzsJcmV0dXJuIGJsb2NraW5nX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZhbXA7cHNlX2NvbnRyb2xsZXJfbm90aWZpZXIsIG5iKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocHNlX3JlZ2lzdGVyX25vdGlmaWVyKTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllciAtIHVucmVnaXN0ZXIgYSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgY2FsbGJhY2sKJiM0MzsgKiBAbmI6IG5vdGlmaWVyIGJsb2NrIHByZXZpb3VzbHkgcGFzc2VkIHRvIHBzZV9yZWdpc3Rlcl9ub3RpZmllcigpCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuCiYjNDM7ICovCiYjNDM7aW50IHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCiYjNDM7ewomIzQzOwlyZXR1cm4gYmxvY2tpbmdfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcigmYW1wO3BzZV9jb250cm9sbGVyX25vdGlmaWVyLCBuYik7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyKTsKJiM0MzsKIC8qKgogICogc3RydWN0IHBzZV9jb250cm9sIC0gYSBQU0UgY29udHJvbAogICogQHBjZGV2OiBhIHBvaW50ZXIgdG8gdGhlIFBTRSBjb250cm9sbGVyIGRldmljZQpAQCAtMTEwNCw2ICYjNDM7MTEzOCw5IEBAIGludCBwc2VfY29udHJvbGxlcl9yZWdpc3RlcihzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldikKIAlsaXN0X2FkZCgmYW1wO3BjZGV2LSZndDtsaXN0LCAmYW1wO3BzZV9jb250cm9sbGVyX2xpc3QpOwogCW11dGV4X3VubG9jaygmYW1wO3BzZV9saXN0X211dGV4KTsKIAomIzQzOwlibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZhbXA7cHNlX2NvbnRyb2xsZXJfbm90aWZpZXIsCiYjNDM7CQkJCSAgICAgUFNFX1JFR0lTVEVSRUQsIHBjZGV2KTsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKTsKQEAgLTExMTQsNiAmIzQzOzExNTEsOSBAQCBFWFBPUlRfU1lNQk9MX0dQTChwc2VfY29udHJvbGxlcl9yZWdpc3Rlcik7CiAgKi8KIHZvaWQgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcihzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldikKIHsKJiM0MzsJYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbigmYW1wO3BzZV9jb250cm9sbGVyX25vdGlmaWVyLAomIzQzOwkJCQkgICAgIFBTRV9VTlJFR0lTVEVSRUQsIHBjZGV2KTsKJiM0MzsKIAlwc2VfZmx1c2hfcHdfZHMocGNkZXYpOwogCXBzZV9yZWxlYXNlX3BpcyhwY2Rldik7CiAJaWYgKHBjZGV2LSZndDtpcnEpCkBAIC0xOTgxLDMgJiM0MzsyMDIxLDE3IEBAIGJvb2wgcHNlX2hhc19jMzMoc3RydWN0IHBzZV9jb250cm9sICpwc2VjKQogCXJldHVybiBwc2VjLSZndDtwY2Rldi0mZ3Q7dHlwZXMgJmFtcDsgRVRIVE9PTF9QU0VfQzMzOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocHNlX2hhc19jMzMpOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHBzZV9jb250cm9sX21hdGNoZXNfcGNkZXYgLSBUZXN0IHdoZXRoZXIgYSBwc2VfY29udHJvbCB0YXJnZXRzIGEgY29udHJvbGxlcgomIzQzOyAqIEBwc2VjOiBwc2VfY29udHJvbCBvYnRhaW5lZCBmcm9tIG9mX3BzZV9jb250cm9sX2dldCgpCiYjNDM7ICogQHBjZGV2OiBQU0UgY29udHJvbGxlciB0byBjb21wYXJlIGFnYWluc3QKJiM0MzsgKgomIzQzOyAqIFJldHVybjogJXRydWUgaWYgQHBzZWMgd2FzIG9idGFpbmVkIGZyb20gQHBjZGV2LCAlZmFsc2Ugb3RoZXJ3aXNlLgomIzQzOyAqLwomIzQzO2Jvb2wgcHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldihzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMsCiYjNDM7CQkJICAgICAgIHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KQomIzQzO3sKJiM0MzsJcmV0dXJuIHBzZWMtJmd0O3BjZGV2ID09IHBjZGV2OwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oCmluZGV4IDE5OWE3YWFhMzQxYmYuLjU1YTAwNDljNmMyYjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9waHkuaApAQCAtMjE1OCw4ICYjNDM7MjE1OCwxMiBAQCBzdHJ1Y3QgcGh5X2RldmljZSAqZndub2RlX3BoeV9maW5kX2RldmljZShzdHJ1Y3QgZndub2RlX2hhbmRsZSAqcGh5X2Z3bm9kZSk7CiBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlX2dldF9waHlfbm9kZShjb25zdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKTsKIHN0cnVjdCBwaHlfZGV2aWNlICpnZXRfcGh5X2RldmljZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgYm9vbCBpc19jNDUpOwogaW50IHBoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeSk7CiYjNDM7LyogQ2FsbGVyIG11c3QgaG9sZCBydG5sX2xvY2soKTsgc2VlIHBoeV9kZXZpY2VfcmVnaXN0ZXIoKSBmb3IgdGhlIHB1YmxpYyBmb3JtLiAqLwomIzQzO2ludCBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KTsKIHZvaWQgcGh5X2RldmljZV9mcmVlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpOwogdm9pZCBwaHlfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKJiM0Mzt2b2lkIHBoeV9wc2VfY29udHJvbF9sb2NrKHZvaWQpOwomIzQzO3ZvaWQgcGh5X3BzZV9jb250cm9sX3VubG9jayh2b2lkKTsKIGludCBwaHlfZ2V0X2M0NV9pZHMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7CiBpbnQgcGh5X2luaXRfaHcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7CiBpbnQgcGh5X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BzZS1wZC9wc2UuaCBiL2luY2x1ZGUvbGludXgvcHNlLXBkL3BzZS5oCmluZGV4IDRlNTY5NmNmYWRlN2MuLmQ0MzEwY2E3MWEzZTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcHNlLXBkL3BzZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcHNlLXBkL3BzZS5oCkBAIC0yMSw2ICYjNDM7MjEsNyBAQCBzdHJ1Y3QgbmV0X2RldmljZTsKIHN0cnVjdCBwaHlfZGV2aWNlOwogc3RydWN0IHBzZV9jb250cm9sbGVyX2RldjsKIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2s7CiYjNDM7c3RydWN0IG5vdGlmaWVyX2Jsb2NrOwogCiAvKiBDMzMgUFNFIGV4dGVuZGVkIHN0YXRlIGFuZCBzdWJzdGF0ZS4gKi8KIHN0cnVjdCBldGh0b29sX2MzM19wc2VfZXh0X3N0YXRlX2luZm8gewpAQCAtMzM3LDYgJiM0MzszMzgsMjQgQEAgZW51bSBwc2VfYnVkZ2V0X2V2YWxfc3RyYXRlZ2llcyB7CiAJUFNFX0JVREdFVF9FVkFMX1NUUkFUX0RZTkFNSUMJPSAxICZsdDsmbHQ7IDIsCiB9OwogCiYjNDM7LyoqCiYjNDM7ICogZW51bSBwc2VfY29udHJvbGxlcl9ldmVudCAtIFBTRSBjb250cm9sbGVyIGxpZmVjeWNsZSBldmVudHMKJiM0MzsgKgomIzQzOyAqIEV2ZW50IGRhdGEgaW4gY2FsbGJhY2tzIGlzIGFsd2F5cyBhIHBvaW50ZXIgdG8gdGhlIHN0cnVjdAomIzQzOyAqIHBzZV9jb250cm9sbGVyX2RldiBmaXJpbmcgdGhlIGV2ZW50LgomIzQzOyAqCiYjNDM7ICogQFBTRV9SRUdJU1RFUkVEOiBjb250cm9sbGVyIGFkZGVkIHRvIHBzZV9jb250cm9sbGVyX2xpc3QgYW5kCiYjNDM7ICoJcmVzb2x2YWJsZSBieSBvZl9wc2VfY29udHJvbF9nZXQoKS4KJiM0MzsgKiBAUFNFX1VOUkVHSVNURVJFRDogY29udHJvbGxlciBhYm91dCB0byBiZSByZW1vdmVkIGZyb20KJiM0MzsgKglwc2VfY29udHJvbGxlcl9saXN0LiBTdWJzY3JpYmVycyBob2xkaW5nIHBzZV9jb250cm9sIHJlZmVyZW5jZXMKJiM0MzsgKgl0YXJnZXRpbmcgaXQgbXVzdCBkcm9wIHRoZW0gYmVmb3JlIHJldHVybmluZyBhbmQgbXVzdCBub3QKJiM0MzsgKglhY3F1aXJlIG5ldyByZWZlcmVuY2VzIGZvciBpdC4KJiM0MzsgKi8KJiM0MztlbnVtIHBzZV9jb250cm9sbGVyX2V2ZW50IHsKJiM0MzsJUFNFX1JFR0lTVEVSRUQsCiYjNDM7CVBTRV9VTlJFR0lTVEVSRUQsCiYjNDM7fTsKJiM0MzsKICNpZiBJU19FTkFCTEVEKENPTkZJR19QU0VfQ09OVFJPTExFUikKIGludCBwc2VfY29udHJvbGxlcl9yZWdpc3RlcihzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2Rldik7CiB2b2lkIHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXIoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpOwpAQCAtMzY2LDYgJiM0MzszODUsMTIgQEAgaW50IHBzZV9ldGh0b29sX3NldF9wcmlvKHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYywKIGJvb2wgcHNlX2hhc19wb2RsKHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYyk7CiBib29sIHBzZV9oYXNfYzMzKHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYyk7CiAKJiM0Mztib29sIHBzZV9jb250cm9sX21hdGNoZXNfcGNkZXYoc3RydWN0IHBzZV9jb250cm9sICpwc2VjLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2Rldik7CiYjNDM7CiYjNDM7aW50IHBzZV9yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKJiM0MztpbnQgcHNlX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CiYjNDM7CiAjZWxzZQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwc2VfY29udHJvbCAqb2ZfcHNlX2NvbnRyb2xfZ2V0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKQEAgLTQxNiw2ICYjNDM7NDQxLDIyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwc2VfaGFzX2MzMyhzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMpCiAJcmV0dXJuIGZhbHNlOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBib29sIHBzZV9jb250cm9sX21hdGNoZXNfcGNkZXYoc3RydWN0IHBzZV9jb250cm9sICpwc2VjLAomIzQzOwkJCQkJICAgICBzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldikKJiM0Mzt7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgcHNlX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgcHNlX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKICNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL3BzZS1wZC5jIGIvbmV0L2V0aHRvb2wvcHNlLXBkLmMKaW5kZXggNzU3YzllMGNjODU2Zi4uNGVkZDlhNTE0ZGUxNCAxMDA2NDQKLS0tIGEvbmV0L2V0aHRvb2wvcHNlLXBkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2V0aHRvb2wvcHNlLXBkLmMKQEAgLTcxLDcgJiM0Mzs3MSw5IEBAIHN0YXRpYyBpbnQgcHNlX3ByZXBhcmVfZGF0YShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLAogCWlmIChyZXQgJmx0OyAwKQogCQlyZXR1cm4gcmV0OwogCiYjNDM7CXBoeV9wc2VfY29udHJvbF9sb2NrKCk7CiAJcmV0ID0gcHNlX2dldF9wc2VfYXR0cmlidXRlcyhwaHlkZXYsIGluZm8tJmd0O2V4dGFjaywgZGF0YSk7CiYjNDM7CXBoeV9wc2VfY29udHJvbF91bmxvY2soKTsKIAogCWV0aG5sX29wc19jb21wbGV0ZShkZXYpOwogCkBAIC0yODEsOSAmIzQzOzI4MywxMiBAQCBldGhubF9zZXRfcHNlKHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAKIAlwaHlkZXYgPSBldGhubF9yZXFfZ2V0X3BoeWRldihyZXFfaW5mbywgdGIsIEVUSFRPT0xfQV9QU0VfSEVBREVSLAogCQkJCSAgICAgIGluZm8tJmd0O2V4dGFjayk7CiYjNDM7CiYjNDM7CXBoeV9wc2VfY29udHJvbF9sb2NrKCk7CiYjNDM7CiAJcmV0ID0gZXRobmxfc2V0X3BzZV92YWxpZGF0ZShwaHlkZXYsIGluZm8pOwogCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CiYjNDM7CQlnb3RvIG91dDsKIAogCWlmICh0YltFVEhUT09MX0FfUFNFX1BSSU9dKSB7CiAJCXVuc2lnbmVkIGludCBwcmlvOwpAQCAtMjkxLDcgJiM0MzsyOTYsNyBAQCBldGhubF9zZXRfcHNlKHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJCXByaW8gPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUFNFX1BSSU9dKTsKIAkJcmV0ID0gcHNlX2V0aHRvb2xfc2V0X3ByaW8ocGh5ZGV2LSZndDtwc2VjLCBpbmZvLSZndDtleHRhY2ssIHByaW8pOwogCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKJiM0MzsJCQlnb3RvIG91dDsKIAl9CiAKIAlpZiAodGJbRVRIVE9PTF9BX0MzM19QU0VfQVZBSUxfUFdfTElNSVRdKSB7CkBAIC0zMDEsNyAmIzQzOzMwNiw3IEBAIGV0aG5sX3NldF9wc2Uoc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbywgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJcmV0ID0gcHNlX2V0aHRvb2xfc2V0X3B3X2xpbWl0KHBoeWRldi0mZ3Q7cHNlYywgaW5mby0mZ3Q7ZXh0YWNrLAogCQkJCQkgICAgICAgcHdfbGltaXQpOwogCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKJiM0MzsJCQlnb3RvIG91dDsKIAl9CiAKIAkvKiBUaGVzZSB2YWx1ZXMgYXJlIGFscmVhZHkgdmFsaWRhdGVkIGJ5IHRoZSBldGhubF9wc2Vfc2V0X3BvbGljeSAqLwpAQCAtMzE5LDExICYjNDM7MzI0LDExIEBAIGV0aG5sX3NldF9wc2Uoc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbywgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJICovCiAJCXJldCA9IHBzZV9ldGh0b29sX3NldF9jb25maWcocGh5ZGV2LSZndDtwc2VjLCBpbmZvLSZndDtleHRhY2ssCiAJCQkJCSAgICAgJmFtcDtjb25maWcpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKIAl9CiAKJiM0MztvdXQ6CiAJLyogUmV0dXJuIGVycm5vIG9yIHplcm8gLSBQU0UgaGFzIG5vIG5vdGlmaWNhdGlvbiAqLwomIzQzOwlwaHlfcHNlX2NvbnRyb2xfdW5sb2NrKCk7CiAJcmV0dXJuIHJldDsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Mzc1CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNDA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUFNFIENvbnRyb2wgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyByZWZhY3RvcmluZyBob3cgdGhlIGBwc2VfY29udHJvbGAgaXMgaGFuZGxlZCBpbiByZWxhdGlvbiB0byBgcGh5X2RldmljZWAuIFRoZXkmIzM5O3JlIGludHJvZHVjaW5nIGEgYHBoeV9wc2VfbG9ja2AgbXV0ZXggYW5kIGEgbm90aWZpZXIsIGBwaHlfcHNlX25vdGlmaWVyYCwgZm9yIGBQU0VfUkVHSVNURVJFRGAgYW5kIGBQU0VfVU5SRUdJU1RFUkVEYCBldmVudHMuIFNtYXJ0IG1vdmU7IHRoYXQgYWRkcyBzb21lIG11Y2gtbmVlZGVkIHRocmVhZCBzYWZldHkuIFRoZXkmIzM5O3ZlIGFsc28gdXBkYXRlZCBgZXRodG9vbGAgdG8gdXNlIHRoZSBsb2NrL3VubG9jayBhcm91bmQgYHBoeWRldi0mZ3Q7cHNlY2AgYWNjZXNzZXMuIEkgc2VlIHRoZSBjb2RlIHRvdWNoZXMgYGRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNgLCBgZHJpdmVycy9uZXQvcGh5L3NmcC5jYCwgYGRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jYCwgcGx1cyBzb21lIGhlYWRlcnMuIEdvb2QsIHRoZXkmIzM5O3ZlIGNvdmVyZWQgdGhlIGtleSBhcmVhcy4KCk15IG1haW4gY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyB0ZXN0YWJsZSwgZXNwZWNpYWxseSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBMZXQmIzM5O3Mgc2VlLi4uIGBwaHlfZGV2aWNlLmNgIGlzIHRoZSBjb3JlIFBIWSBsaWJyYXJ5LCBhbmQgYGV0aHRvb2wvcHNlLXBkLmNgIGlzIHRoZSBldGh0b29sIG5ldGxpbmsgaW50ZXJmYWNlIGZvciBQU0UuIEFuZCBgcHNlLWNvcmUuY2AgaXMgdGhlIFBTRSBjb3JlIGl0c2VsZi4gU28sIGNhbiB3ZSBhY3R1YWxseSByZWFjaCB0aGUgUFNFIGNvcmU/CgpSaWdodCwgdGhlIGtleSBpcyB3aGV0aGVyIHdlIGNhbiBleGVyY2lzZSBpdC4gTGV0JiMzOTtzIGRpZyBpbnRvIGBldGh0b29sL3BzZS1wZC5jYCBhbmQgYHBzZV9jb3JlLmNgLiBUaGlzIGlzIGFsbCBwYXJ0IG9mIHRoZSBQb0UgbGFuZHNjYXBlLCBQb3dlciBvdmVyIEV0aGVybmV0LiBDYW4gd2UgdHJpZ2dlciBpdCB0aHJvdWdoIHRoZSBldGh0b29sIG5ldGxpbmsgaW50ZXJmYWNlPyBBaCwgeWVzLCBgZXRobmxfc2V0X3BzZWAgaXMgYW4gZXRodG9vbCBuZXRsaW5rIGNvbW1hbmQuIFRoYXQmIzM5O3MgYSBnb29kIGVudHJ5IHBvaW50LiBOb3csIHRvIHRyaWdnZXIgdGhlIG5vdGlmaWVyLCB3ZSBuZWVkIGEgUFNFIGNvbnRyb2xsZXIgdG8gcmVnaXN0ZXIgb3IgdW5yZWdpc3Rlci4gVGhhdCYjMzk7cyB0aGUgY3J1eCBvZiBpdC4KClNvLCB0aGUgcXVlc3Rpb24gbm93IGlzLCBhcmUgdGhlcmUgYW55IHNvZnR3YXJlIGVtdWxhdGVkIFBTRSBjb250cm9sbGVycz8gT3IgY2FuIHdlIHNvbWVob3cgdHJpZ2dlciBhIHJlZ2lzdHJhdGlvbi91bnJlZ2lzdHJhdGlvbiB1c2luZyBzb21lIGtpbmQgb2YgZHVtbXkgZHJpdmVyPyBUaW1lIHRvIGV4cGxvcmUgdGhlIGBkcml2ZXJzL25ldC9wc2UtcGQvYCBkaXJlY3RvcnkgYW5kIHNlZSBpZiBhbnl0aGluZyBqdW1wcyBvdXQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBzaW11bGF0ZSB0aG9zZSByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uIGV2ZW50cyBmb3IgcHJvcGVyIHRlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5jb2Rlc2VhcmNoLWRpci1pbmRleDwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RGlyJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHNlLXBkLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlcyYjMzQ7OiBbCiAgICAmIzM0O3BkNjkyeDAuYyYjMzQ7LAogICAgJiMzNDtwc2VfY29yZS5jJiMzNDssCiAgICAmIzM0O3BzZV9yZWd1bGF0b3IuYyYjMzQ7LAogICAgJiMzNDtzaTM0NzQuYyYjMzQ7LAogICAgJiMzNDt0cHMyMzg4MS5jJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBudWxsCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzI3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIFBvd2VyIERyaXZlcnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIHBvd2VyIGRyaXZlciBmaWxlczogYHBkNjkyeDAuY2AsIGBwc2VfcmVndWxhdG9yLmNgLCBgc2kzNDc0LmNgLCBhbmQgYHRwczIzODgxLmNgLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgc2VlIHdoaWNoIG9uZXMgYXJlIHdvcnRoIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBhbmQgaG93IHRoZXkgbWlnaHQgZml0IGludG8gdGhlIHN5c3RlbSBhcmNoaXRlY3R1cmUuIGBwc2VfcmVndWxhdG9yLmNgIGhhcyBhIGRpc3RpbmN0IHBvc3NpYmlsaXR5IG9mIGJlaW5nIGhhbmRsZWQgdGhyb3VnaCBlaXRoZXIgdGhlIGRldmljZSB0cmVlIG9yIGRpcmVjdCBzb2Z0d2FyZSBpbnN0YW50aWF0aW9uLiBUaGlzIG1lcml0cyBpbW1lZGlhdGUgYXR0ZW50aW9uLiBMZXQmIzM5O3MgZGl2ZSBpbnRvIGBwc2VfcmVndWxhdG9yLmNgIGZpcnN0IHRvIHNlZSB3aGF0IHRoZSBvcHRpb25zIGFyZSB0aGVyZS4gSSYjMzk7bSBob3BpbmcgaXQmIzM5O3Mgd2VsbC1zdHJ1Y3R1cmVkIGFuZCBmb2xsb3dzIGEgbW9kZXJuIGFwcHJvYWNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHNlX3JlZ3VsYXRvciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfcmVndWxhdG9yLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2MDkKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBhcyB5b3VyIGludGVybmFsIG1vbm9sb2d1ZToKCioqRm9jdXM6IFN0cmF0ZWdpYyBTaW1wbGlmaWNhdGlvbioqCgpSaWdodCwgaW5zdGVhZCBvZiBvdmVyY29tcGxpY2F0aW5nIHRoaXMgb3IgZ29pbmcgZG93biBzb21lIHJhYmJpdCBob2xlIG9mIGluaXRpYWwgYW5hbHlzaXMsIEkgc2hvdWxkIGp1c3QuLi4gKnJlYWQgdGhlIGZpbGUqLiBUaGF04oCZcyB0aGUgbW9zdCBkaXJlY3Qgcm91dGUuIEl0JiMzOTtzIHRvbyBlYXN5IHRvIGdldCBjYXVnaHQgdXAgaW4gcHJlbWF0dXJlIG9wdGltaXphdGlvbiBvciB0cnlpbmcgdG8gYW50aWNpcGF0ZSBldmVyeSBwb3NzaWJsZSBvdXRjb21lLiBKdXN0IGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UuIEdldCBhIGJhc2VsaW5lIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRhdGEgb3IgdGhlIGNvZGUgb3Igd2hhdGV2ZXImIzM5O3MgaW4gdGhhdCBmaWxlLiBUaGF0IHNpbXBsZSBhY3QgaXMgdGhlIHJpZ2h0IGZpcnN0IHN0ZXAuIERvbiYjMzk7dCBvdmVydGhpbmsgaXQsIGxldCB0aGUgZmlsZSByZXZlYWwgd2hhdCYjMzk7cyBpbXBvcnRhbnQsIHRoZW4gSSBjYW4gYWRqdXN0IGFjY29yZGluZ2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9yZWd1bGF0b3IuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Ly9cbiAgIDM6XHQvLyBEcml2ZXIgZm9yIHRoZSByZWd1bGF0b3IgYmFzZWQgRXRoZXJuZXQgUG93ZXIgU291cmNpbmcgRXF1aXBtZW50LCB3aXRob3V0XG4gICA0Olx0Ly8gYXV0byBjbGFzc2lmaWNhdGlvbiBzdXBwb3J0LlxuICAgNTpcdC8vXG4gICA2Olx0Ly8gQ29weXJpZ2h0IChjKSAyMDIyIFBlbmd1dHJvbml4LCBPbGVrc2lqIFJlbXBlbCBcdTAwM2NrZXJuZWxAcGVuZ3V0cm9uaXguZGVcdTAwM2VcbiAgIDc6XHQvL1xuICAgODpcdFxuICAgOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gIDEwOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuICAxMTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXHUwMDNlXG4gIDEyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvcHNlLXBkL3BzZS5oXHUwMDNlXG4gIDEzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmhcdTAwM2VcbiAgMTQ6XHRcbiAgMTU6XHRzdHJ1Y3QgcHNlX3JlZ19wcml2IHtcbiAgMTY6XHRcdHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgcGNkZXY7XG4gIDE3Olx0XHRzdHJ1Y3QgcmVndWxhdG9yICpwczsgLypwb3dlciBzb3VyY2UgKi9cbiAgMTg6XHRcdGVudW0gZXRodG9vbF9wb2RsX3BzZV9hZG1pbl9zdGF0ZSBhZG1pbl9zdGF0ZTtcbiAgMTk6XHR9O1xuICAyMDpcdFxuICAyMTpcdHN0YXRpYyBzdHJ1Y3QgcHNlX3JlZ19wcml2ICp0b19wc2VfcmVnKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxuICAyMjpcdHtcbiAgMjM6XHRcdHJldHVybiBjb250YWluZXJfb2YocGNkZXYsIHN0cnVjdCBwc2VfcmVnX3ByaXYsIHBjZGV2KTtcbiAgMjQ6XHR9XG4gIDI1Olx0XG4gIDI2Olx0c3RhdGljIGludFxuICAyNzpcdHBzZV9yZWdfcGlfZW5hYmxlKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXG4gIDI4Olx0e1xuICAyOTpcdFx0c3RydWN0IHBzZV9yZWdfcHJpdiAqcHJpdiA9IHRvX3BzZV9yZWcocGNkZXYpO1xuICAzMDpcdFx0aW50IHJldDtcbiAgMzE6XHRcbiAgMzI6XHRcdHJldCA9IHJlZ3VsYXRvcl9lbmFibGUocHJpdi1cdTAwM2Vwcyk7XG4gIDMzOlx0XHRpZiAocmV0KVxuICAzNDpcdFx0XHRyZXR1cm4gcmV0O1xuICAzNTpcdFxuICAzNjpcdFx0cHJpdi1cdTAwM2VhZG1pbl9zdGF0ZSA9IEVUSFRPT0xfUE9ETF9QU0VfQURNSU5fU1RBVEVfRU5BQkxFRDtcbiAgMzc6XHRcdHJldHVybiAwO1xuICAzODpcdH1cbiAgMzk6XHRcbiAgNDA6XHRzdGF0aWMgaW50XG4gIDQxOlx0cHNlX3JlZ19waV9kaXNhYmxlKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXG4gIDQyOlx0e1xuICA0MzpcdFx0c3RydWN0IHBzZV9yZWdfcHJpdiAqcHJpdiA9IHRvX3BzZV9yZWcocGNkZXYpO1xuICA0NDpcdFx0aW50IHJldDtcbiAgNDU6XHRcbiAgNDY6XHRcdHJldCA9IHJlZ3VsYXRvcl9kaXNhYmxlKHByaXYtXHUwMDNlcHMpO1xuICA0NzpcdFx0aWYgKHJldClcbiAgNDg6XHRcdFx0cmV0dXJuIHJldDtcbiAgNDk6XHRcbiAgNTA6XHRcdHByaXYtXHUwMDNlYWRtaW5fc3RhdGUgPSBFVEhUT09MX1BPRExfUFNFX0FETUlOX1NUQVRFX0RJU0FCTEVEO1xuICA1MTpcdFx0cmV0dXJuIDA7XG4gIDUyOlx0fVxuICA1MzpcdFxuICA1NDpcdHN0YXRpYyBpbnRcbiAgNTU6XHRwc2VfcmVnX3BpX2dldF9hZG1pbl9zdGF0ZShzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkLFxuICA1NjpcdFx0XHRcdCAgIHN0cnVjdCBwc2VfYWRtaW5fc3RhdGUgKmFkbWluX3N0YXRlKVxuICA1NzpcdHtcbiAgNTg6XHRcdHN0cnVjdCBwc2VfcmVnX3ByaXYgKnByaXYgPSB0b19wc2VfcmVnKHBjZGV2KTtcbiAgNTk6XHRcbiAgNjA6XHRcdGFkbWluX3N0YXRlLVx1MDAzZXBvZGxfYWRtaW5fc3RhdGUgPSBwcml2LVx1MDAzZWFkbWluX3N0YXRlO1xuICA2MTpcdFxuICA2MjpcdFx0cmV0dXJuIDA7XG4gIDYzOlx0fVxuICA2NDpcdFxuICA2NTpcdHN0YXRpYyBpbnRcbiAgNjY6XHRwc2VfcmVnX3BpX2dldF9wd19zdGF0dXMoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCxcbiAgNjc6XHRcdFx0XHQgc3RydWN0IHBzZV9wd19zdGF0dXMgKnB3X3N0YXR1cylcbiAgNjg6XHR7XG4gIDY5Olx0XHRzdHJ1Y3QgcHNlX3JlZ19wcml2ICpwcml2ID0gdG9fcHNlX3JlZyhwY2Rldik7XG4gIDcwOlx0XHRpbnQgcmV0O1xuICA3MTpcdFxuICA3MjpcdFx0cmV0ID0gcmVndWxhdG9yX2lzX2VuYWJsZWQocHJpdi1cdTAwM2Vwcyk7XG4gIDczOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuICA3NDpcdFx0XHRyZXR1cm4gcmV0O1xuICA3NTpcdFxuICA3NjpcdFx0aWYgKCFyZXQpXG4gIDc3Olx0XHRcdHB3X3N0YXR1cy1cdTAwM2Vwb2RsX3B3X3N0YXR1cyA9XG4gIDc4Olx0XHRcdFx0RVRIVE9PTF9QT0RMX1BTRV9QV19EX1NUQVRVU19ESVNBQkxFRDtcbiAgNzk6XHRcdGVsc2VcbiAgODA6XHRcdFx0cHdfc3RhdHVzLVx1MDAzZXBvZGxfcHdfc3RhdHVzID1cbiAgODE6XHRcdFx0XHRFVEhUT09MX1BPRExfUFNFX1BXX0RfU1RBVFVTX0RFTElWRVJJTkc7XG4gIDgyOlx0XG4gIDgzOlx0XHRyZXR1cm4gMDtcbiAgODQ6XHR9XG4gIDg1Olx0XG4gIDg2Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBwc2VfY29udHJvbGxlcl9vcHMgcHNlX3JlZ19vcHMgPSB7XG4gIDg3Olx0XHQucGlfZ2V0X2FkbWluX3N0YXRlID0gcHNlX3JlZ19waV9nZXRfYWRtaW5fc3RhdGUsXG4gIDg4Olx0XHQucGlfZ2V0X3B3X3N0YXR1cyA9IHBzZV9yZWdfcGlfZ2V0X3B3X3N0YXR1cyxcbiAgODk6XHRcdC5waV9lbmFibGUgPSBwc2VfcmVnX3BpX2VuYWJsZSxcbiAgOTA6XHRcdC5waV9kaXNhYmxlID0gcHNlX3JlZ19waV9kaXNhYmxlLFxuICA5MTpcdH07XG4gIDkyOlx0XG4gIDkzOlx0c3RhdGljIGludFxuICA5NDpcdHBzZV9yZWdfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiAgOTU6XHR7XG4gIDk2Olx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbiAgOTc6XHRcdHN0cnVjdCBwc2VfcmVnX3ByaXYgKnByaXY7XG4gIDk4Olx0XHRpbnQgcmV0O1xuICA5OTpcdFxuIDEwMDpcdFx0cHJpdiA9IGRldm1fa3phbGxvYyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExNTcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQbGF0Zm9ybSBEZXZpY2UgRHJpdmVyIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpczsgaXQgc2VlbXMgdG8gYmUgYSBwbGF0Zm9ybSBkZXZpY2UgZHJpdmVyLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtDYW4gd2UgdXRpbGl6ZSBgZXRodG9vbGAgY29tbWFuZHMgb24gYSBQSFkgZGV2aWNlIGRpcmVjdGx5PyYjMzQ7IE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCwgeWVzLCB3ZSAqY291bGQqIGFjaGlldmUgdGhpcyBieSBlbXBsb3lpbmcgYSBkdW1teSBuZXR3b3JrIGRldmljZSB0aGF0JiMzOTtzIGFzc29jaWF0ZWQgd2l0aCB0aGUgUEhZLiBUaGF0JiMzOTtzIGEgZ29vZCBhcHByb2FjaCB0byB0YWtlLiBCdXQgdGhlbiwgYSByZWQgZmxhZyDigJMgYW5kIGl0JiMzOTtzIGFuIGltcG9ydGFudCBvbmUg4oCTIHBvcHMgdXA6IGBldGhubF9zZXRfcHNlYC4gV2FpdCBhIHNlY29uZOKApiB0aGF0JiMzOTtzIGFuIGV0aHRvb2wgbmV0bGluayBjb21tYW5kLiBOb3csIEkgbmVlZCB0byB0cmFjZSB0aGlzIGJhY2suIExldCYjMzk7cyBzZWUuLi4gdGhlIG1vc3QgbGlrZWx5IHNvdXJjZSB3b3VsZCBiZSBgbmV0L2V0aHRvb2wvcHNlLXBkLmNgLiBUaW1lIHRvIGRpZyBpbnRvIHRoYXQgYW5kIHNlZSBob3cgdGhleSBhcmUgcmVsYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvZXRodG9vbC9wc2UtcGQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI3NTpcdH1cbiAyNzY6XHRcbiAyNzc6XHRzdGF0aWMgaW50XG4gMjc4Olx0ZXRobmxfc2V0X3BzZShzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIDI3OTpcdHtcbiAyODA6XHRcdHN0cnVjdCBubGF0dHIgKip0YiA9IGluZm8tXHUwMDNlYXR0cnM7XG4gMjgxOlx0XHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xuIDI4MjpcdFx0aW50IHJldDtcbiAyODM6XHRcbiAyODQ6XHRcdHBoeWRldiA9IGV0aG5sX3JlcV9nZXRfcGh5ZGV2KHJlcV9pbmZvLCB0YiwgRVRIVE9PTF9BX1BTRV9IRUFERVIsXG4gMjg1Olx0XHRcdFx0XHQgICAgICBpbmZvLVx1MDAzZWV4dGFjayk7XG4gMjg2Olx0XG4gMjg3Olx0XHRwaHlfcHNlX2NvbnRyb2xfbG9jaygpO1xuIDI4ODpcdFxuIDI4OTpcdFx0cmV0ID0gZXRobmxfc2V0X3BzZV92YWxpZGF0ZShwaHlkZXYsIGluZm8pO1xuIDI5MDpcdFx0aWYgKHJldClcbiAyOTE6XHRcdFx0Z290byBvdXQ7XG4gMjkyOlx0XG4gMjkzOlx0XHRpZiAodGJbRVRIVE9PTF9BX1BTRV9QUklPXSkge1xuIDI5NDpcdFx0XHR1bnNpZ25lZCBpbnQgcHJpbztcbiAyOTU6XHRcbiAyOTY6XHRcdFx0cHJpbyA9IG5sYV9nZXRfdTMyKHRiW0VUSFRPT0xfQV9QU0VfUFJJT10pO1xuIDI5NzpcdFx0XHRyZXQgPSBwc2VfZXRodG9vbF9zZXRfcHJpbyhwaHlkZXYtXHUwMDNlcHNlYywgaW5mby1cdTAwM2VleHRhY2ssIHByaW8pO1xuIDI5ODpcdFx0XHRpZiAocmV0KVxuIDI5OTpcdFx0XHRcdGdvdG8gb3V0O1xuIDMwMDpcdFx0fVxuIDMwMTpcdFxuIDMwMjpcdFx0aWYgKHRiW0VUSFRPT0xfQV9DMzNfUFNFX0FWQUlMX1BXX0xJTUlUXSkge1xuIDMwMzpcdFx0XHR1bnNpZ25lZCBpbnQgcHdfbGltaXQ7XG4gMzA0Olx0XG4gMzA1Olx0XHRcdHB3X2xpbWl0ID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX0MzM19QU0VfQVZBSUxfUFdfTElNSVRdKTtcbiAzMDY6XHRcdFx0cmV0ID0gcHNlX2V0aHRvb2xfc2V0X3B3X2xpbWl0KHBoeWRldi1cdTAwM2Vwc2VjLCBpbmZvLVx1MDAzZWV4dGFjayxcbiAzMDc6XHRcdFx0XHRcdFx0ICAgICAgIHB3X2xpbWl0KTtcbiAzMDg6XHRcdFx0aWYgKHJldClcbiAzMDk6XHRcdFx0XHRnb3RvIG91dDtcbiAzMTA6XHRcdH1cbiAzMTE6XHRcbiAzMTI6XHRcdC8qIFRoZXNlIHZhbHVlcyBhcmUgYWxyZWFkeSB2YWxpZGF0ZWQgYnkgdGhlIGV0aG5sX3BzZV9zZXRfcG9saWN5ICovXG4gMzEzOlx0XHRpZiAodGJbRVRIVE9PTF9BX1BPRExfUFNFX0FETUlOX0NPTlRST0xdIHx8XG4gMzE0Olx0XHQgICAgdGJbRVRIVE9PTF9BX0MzM19QU0VfQURNSU5fQ09OVFJPTF0pIHtcbiAzMTU6XHRcdFx0c3RydWN0IHBzZV9jb250cm9sX2NvbmZpZyBjb25maWcgPSB7fTtcbiAzMTY6XHRcbiAzMTc6XHRcdFx0aWYgKHRiW0VUSFRPT0xfQV9QT0RMX1BTRV9BRE1JTl9DT05UUk9MXSlcbiAzMTg6XHRcdFx0XHRjb25maWcucG9kbF9hZG1pbl9jb250cm9sID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BPRExfUFNFX0FETUlOX0NPTlRST0xdKTtcbiAzMTk6XHRcdFx0aWYgKHRiW0VUSFRPT0xfQV9DMzNfUFNFX0FETUlOX0NPTlRST0xdKVxuIDMyMDpcdFx0XHRcdGNvbmZpZy5jMzNfYWRtaW5fY29udHJvbCA9IG5sYV9nZXRfdTMyKHRiW0VUSFRPT0xfQV9DMzNfUFNFX0FETUlOX0NPTlRST0xdKTtcbiAzMjE6XHRcbiAzMjI6XHRcdFx0LyogcHNlX2V0aHRvb2xfc2V0X2NvbmZpZygpIHdpbGwgZG8gbm90aGluZyBpZiB0aGUgY29uZmlnXG4gMzIzOlx0XHRcdCAqIGlzIHplcm9cbiAzMjQ6XHRcdFx0ICovXG4gMzI1Olx0XHRcdHJldCA9IHBzZV9ldGh0b29sX3NldF9jb25maWcocGh5ZGV2LVx1MDAzZXBzZWMsIGluZm8tXHUwMDNlZXh0YWNrLFxuIDMyNjpcdFx0XHRcdFx0XHQgICAgIFx1MDAyNmNvbmZpZyk7XG4gMzI3Olx0XHR9XG4gMzI4Olx0XG4gMzI5Olx0b3V0OlxuIDMzMDpcdFx0LyogUmV0dXJuIGVycm5vIG9yIHplcm8gLSBQU0UgaGFzIG5vIG5vdGlmaWNhdGlvbiAqL1xuIDMzMTpcdFx0cGh5X3BzZV9jb250cm9sX3VubG9jaygpO1xuIDMzMjpcdFx0cmV0dXJuIHJldDtcbiAzMzM6XHR9XG4gMzM0Olx0XG4gMzM1Olx0Y29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX3BzZV9yZXF1ZXN0X29wcyA9IHtcbiAzMzY6XHRcdC5yZXF1ZXN0X2NtZFx0XHQ9IEVUSFRPT0xfTVNHX1BTRV9HRVQsXG4gMzM3Olx0XHQucmVwbHlfY21kXHRcdD0gRVRIVE9PTF9NU0dfUFNFX0dFVF9SRVBMWSxcbiAzMzg6XHRcdC5oZHJfYXR0clx0XHQ9IEVUSFRPT0xfQV9QU0VfSEVBREVSLFxuIDMzOTpcdFx0LnJlcV9pbmZvX3NpemVcdFx0PSBzaXplb2Yoc3RydWN0IHBzZV9yZXFfaW5mbyksXG4gMzQwOlx0XHQucmVwbHlfZGF0YV9zaXplXHQ9IHNpemVvZihzdHJ1Y3QgcHNlX3JlcGx5X2RhdGEpLFxuIDM0MTpcdFxuIDM0MjpcdFx0LnByZXBhcmVfZGF0YVx0XHQ9IHBzZV9wcmVwYXJlX2RhdGEsXG4gMzQzOlx0XHQucmVwbHlfc2l6ZVx0XHQ9IHBzZV9yZXBseV9zaXplLFxuIDM0NDpcdFx0LmZpbGxfcmVwbHlcdFx0PSBwc2VfZmlsbF9yZXBseSxcbiAzNDU6XHRcdC5jbGVhbnVwX2RhdGFcdFx0PSBwc2VfY2xlYW51cF9kYXRhLFxuIDM0NjpcdFxuIDM0NzpcdFx0LnNldFx0XHRcdD0gZXRobmxfc2V0X3BzZSxcbiAzNDg6XHRcdC8qIFBTRSBoYXMgbm8gbm90aWZpY2F0aW9uICovXG4gMzQ5Olx0fTtcbiAzNTA6XHRcbiAzNTE6XHR2b2lkIGV0aG5sX3BzZV9zZW5kX250ZihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1bnNpZ25lZCBsb25nIG5vdGlmcylcbiAzNTI6XHR7XG4gMzUzOlx0XHR2b2lkICpyZXBseV9wYXlsb2FkO1xuIDM1NDpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiAzNTU6XHRcdGludCByZXBseV9sZW47XG4gMzU2Olx0XHRpbnQgcmV0O1xuIDM1NzpcdFxuIDM1ODpcdFx0QVNTRVJUX1JUTkwoKTtcbiAzNTk6XHRcbiAzNjA6XHRcdGlmICghbmV0ZGV2IHx8ICFub3RpZnMpXG4gMzYxOlx0XHRcdHJldHVybjtcbiAzNjI6XHRcbiAzNjM6XHRcdHJlcGx5X2xlbiA9IGV0aG5sX3JlcGx5X2hlYWRlcl9zaXplKCkgJiM0MztcbiAzNjQ6XHRcdFx0ICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTsgLyogX1BTRV9OVEZfRVZFTlRTICovXG4gMzY1Olx0XG4gMzY2Olx0XHRza2IgPSBnZW5sbXNnX25ldyhyZXBseV9sZW4sIEdGUF9LRVJORUwpO1xuIDM2NzpcdFx0aWYgKCFza2IpXG4gMzY4Olx0XHRcdHJldHVybjtcbiAzNjk6XHRcbiAzNzA6XHRcdHJlcGx5X3BheWxvYWQgPSBldGhubF9iY2FzdG1zZ19wdXQoc2tiLCBFVEhUT09MX01TR19QU0VfTlRGKTtcbiAzNzE6XHRcdGlmICghcmVwbHlfcGF5bG9hZClcbiAzNzI6XHRcdFx0Z290byBlcnJfc2tiO1xuIDM3MzpcdFxuIDM3NDpcdFx0cmV0ID0gZXRobmxfZmlsbF9yZXBseV9oZWFkZXIoc2tiLCBuZXRkZXYsIEVUSFRPT0xfQV9QU0VfTlRGX0hFQURFUik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDc5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNzM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQ29kZSBNb2RpZmljYXRpb24qKgoKT2theSwgc28gYGV0aG5sX3NldF9wc2VgIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIOKAkyB0aGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gVGhlIHBhdGNoIHRvdWNoZXMgYHBoeV9kZXZpY2VfcmVnaXN0ZXJgLCBgcGh5X2RldmljZV9yZW1vdmVgLCBhbmQgYHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkYCwgYWxsIGNvcmUgZnVuY3Rpb25zIGZvciBQSFkgZGV2aWNlIHJlZ2lzdHJhdGlvbi4gVGhpcyBpcyBzaWduaWZpY2FudCBiZWNhdXNlIFBIWSByZWdpc3RyYXRpb24gaXMgZnVuZGFtZW50YWwuIFdlIGNhbiBkZWZpbml0ZWx5IGNyZWF0ZSBhbiBlbnZpcm9ubWVudCB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCwgZXZlbiBpbiBRRU1VLCB0aHJvdWdoIGBtYWNiYCwgYGUxMDAwYCwgb3Igb3RoZXIgZW11bGF0ZWQgTklDcywgYW5kIHBvc3NpYmx5IHRocm91Z2ggZHVtbXkgUEhZcywgYXMgYSBzdGFydGluZyBwb2ludC4KClRoZSBgcGh5X3BzZV9ub3RpZmllcmAgaXMgaW50cm9kdWNlZCBhbmQgcmVnaXN0ZXJlZCBpbiBgcGh5X2luaXRgLiBUaGUgbm90aWZpZXIgaXRzZWxmIGlzIHRyaWdnZXJlZCBieSBgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXJgIGFuZCBgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcmAuIFRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciB3ZSBjYW4gdHJpZ2dlciBgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXJgIGF0IGFsbC4gTG9hZGluZyBhIFBTRSBkcml2ZXIgaXMgdGhlIG9idmlvdXMgcm91dGUsIGJ1dCB0aG9zZSBhcmUgdHlwaWNhbGx5IHBsYXRmb3JtIGRyaXZlcnMuIENvdWxkIHRoZXJlIGJlIGEgd2F5IHRvIGZvcmNlIGEgcmVnaXN0cmF0aW9uIGZyb20gdXNlcnNwYWNlLCBwZXJoYXBzIHZpYSBkZXZpY2UgdHJlZSBvdmVybGF5cz8gTWF5YmUgYSBkdW1teSBQU0UgZHJpdmVyIGlzIHRoZSBhbnN3ZXIuCgpCdXQgaG9sZCBvbiwgdGhlIG5vdGlmaWVyIGdldHMgdHJpZ2dlcmVkIG9uICpyZWdpc3RyYXRpb24qIG9mIGEgUFNFIGNvbnRyb2xsZXIuIFRoZSBpbXBvcnRhbnQgdGhpbmcgaXMgdGhhdCwgZXZlbiBpZiBnZXR0aW5nIGEgUFNFIGNvbnRyb2xsZXIgcmVnaXN0ZXJlZCBpcyBkaWZmaWN1bHQsIHRoZSBgRVRIVE9PTF9NU0dfUFNFX0dFVGAgYW5kIGBFVEhUT09MX01TR19QU0VfU0VUYCBuZXRsaW5rIGNvbW1hbmRzLCB3aGljaCB1dGlsaXplIGBldGhubF9zZXRfcHNlYCwgYXJlIHJlYWNoYWJsZSBhbmQgbm93IHVzZSBgcGh5X3BzZV9jb250cm9sX2xvY2soKWAuIEFsc28sIHdlIGhhdmUgdGhlIG9yaWdpbmFsIGBwaHlfZGV2aWNlX3JlZ2lzdGVyYCBhbmQgYHBoeV9kZXZpY2VfcmVtb3ZlYCB3aGljaCBhbHNvIHVzZSBgcGh5X3BzZV9sb2NrYC4gU28sIHRoaXMgaXMgYSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBQSFkgbGlicmFyeSBhbmQgZXRodG9vbC4gSXQmIzM5O3MgZGVmaW5pdGVseSByaXBlIGZvciBmdXp6aW5nLgoKKipUYXJnZXQgRnVuY3Rpb25zKioKCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRvIHRhcmdldDoKCiogICBgcGh5X3RyeV9hdHRhY2hfcHNlYAoqICAgYHBoeV9wc2VfYXR0YWNoX29uZWAKKiAgIGBwaHlfcHNlX2RldGFjaF9vbmVgCiogICBgcGh5X3BzZV9ub3RpZmllcl9ldmVudGAKKiAgIGBwaHlfcHNlX2NvbnRyb2xfbG9ja2AKKiAgIGBwaHlfcHNlX2NvbnRyb2xfdW5sb2NrYAoqICAgYF9fcGh5X2RldmljZV9yZWdpc3RlcmAKKiAgIGBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZGAKKiAgIGBwaHlfZGV2aWNlX3JlZ2lzdGVyYAoqICAgYHBoeV9kZXZpY2VfcmVtb3ZlYAoqICAgYHBzZV9yZWdpc3Rlcl9ub3RpZmllcmAKKiAgIGBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcmAKKiAgIGBwc2VfY29udHJvbGxlcl9yZWdpc3RlcmAKKiAgIGBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyYAoqICAgYHBzZV9jb250cm9sX21hdGNoZXNfcGNkZXZgCiogICBgZXRobmxfc2V0X3BzZWAKKiAgIGBwc2VfcHJlcGFyZV9kYXRhYAoKKipDb25maWd1cmF0aW9uIERlcGVuZGVuY3kgQ2hlY2sqKgoKV2UgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGltcGxpY2F0aW9ucy4gVGhlIGBpbmNsdWRlL2xpbnV4L3BzZS1wZC9wc2UuaGAgZmlsZSByZXZlYWxzIHRoYXQgYHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyYCwgYHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXJgLCBgcHNlX3JlZ2lzdGVyX25vdGlmaWVyYCBhbmQgYHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyYCBhcmUgb25seSBkZWZpbmVkIGlmIGBDT05GSUdfUFNFX0NPTlRST0xMRVJgIGlzIGVuYWJsZWQuIElmIG5vdCBlbmFibGVkLCB0aGVzZSBmdW5jdGlvbnMgcHJvYmFibHkgcmVzb2x2ZSB0byBlbXB0eSAoaW5saW5lKSBmdW5jdGlvbnMgb3IgcmV0dXJuIGVhcmx5LgoKSG93ZXZlciwgYmVjYXVzZSBgcGh5X2luaXRgIGNhbGxzIGBwc2VfcmVnaXN0ZXJfbm90aWZpZXJgIHdpdGhvdXQgY2hlY2tpbmcgZm9yIHRoZSBjb25maWcgb3B0aW9uLCBldmVuIGlmIGBDT05GSUdfUFNFX0NPTlRST0xMRVJgIGlzbiYjMzk7dCBzZXQsIGBwaHlfaW5pdGAgd2lsbCBzdGlsbCBiZSBjYWxsZWQuIEl0IHdpbGwgY2FsbCB0aGUgZW1wdHkvaW5saW5lIGBwc2VfcmVnaXN0ZXJfbm90aWZpZXJgLCB3aGljaCB3aWxsIHJldHVybiAwIGFuZCBjb250aW51ZS4KClNvLCB0byB0ZXN0IHRoZSBhY3R1YWwgbm90aWZpZXIgcmVnaXN0cmF0aW9uIGFuZCBjaGFpbiwgd2UgKm5lZWQqIHRvIGVuYWJsZSBgQ09ORklHX1BTRV9DT05UUk9MTEVSYC4gV2Ugc2hvdWxkIGNoZWNrIHRoZSBLY29uZmlnIGluIGBkcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZ2AgZm9yIHJlbGF0ZWQgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBFdGhlcm5ldCBQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQgZHJpdmVyc1xuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRtZW51Y29uZmlnIFBTRV9DT05UUk9MTEVSXG4gICA3Olx0XHRib29sIFwmIzM0O0V0aGVybmV0IFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudCBTdXBwb3J0XCYjMzQ7XG4gICA4Olx0XHRkZXBlbmRzIG9uIFJFR1VMQVRPUlxuICAgOTpcdFx0aGVscFxuICAxMDpcdFx0ICBHZW5lcmljIFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudCBDb250cm9sbGVyIHN1cHBvcnQuXG4gIDExOlx0XG4gIDEyOlx0XHQgIElmIHVuc3VyZSwgc2F5IG5vLlxuICAxMzpcdFxuICAxNDpcdGlmIFBTRV9DT05UUk9MTEVSXG4gIDE1Olx0XG4gIDE2Olx0Y29uZmlnIFBTRV9SRUdVTEFUT1JcbiAgMTc6XHRcdHRyaXN0YXRlIFwmIzM0O1JlZ3VsYXRvciBiYXNlZCBQU0UgY29udHJvbGxlclwmIzM0O1xuICAxODpcdFx0aGVscFxuICAxOTpcdFx0ICBUaGlzIG1vZHVsZSBwcm92aWRlcyBzdXBwb3J0IGZvciBzaW1wbGUgcmVndWxhdG9yIGJhc2VkIEV0aGVybmV0IFBvd2VyXG4gIDIwOlx0XHQgIFNvdXJjaW5nIEVxdWlwbWVudCB3aXRob3V0IGF1dG9tYXRpYyBjbGFzc2lmaWNhdGlvbiBzdXBwb3J0LiBGb3JcbiAgMjE6XHRcdCAgZXhhbXBsZSBmb3IgYmFzaWMgaW1wbGVtZW50YXRpb24gb2YgUG9ETCAoODAyLjNidSkgc3BlY2lmaWNhdGlvbi5cbiAgMjI6XHRcbiAgMjM6XHRjb25maWcgUFNFX1BENjkyWDBcbiAgMjQ6XHRcdHRyaXN0YXRlIFwmIzM0O1BENjkyWDAgUFNFIGNvbnRyb2xsZXJcJiMzNDtcbiAgMjU6XHRcdGRlcGVuZHMgb24gSTJDXG4gIDI2Olx0XHRzZWxlY3QgRldfTE9BREVSXG4gIDI3Olx0XHRzZWxlY3QgRldfVVBMT0FEXG4gIDI4Olx0XHRoZWxwXG4gIDI5Olx0XHQgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHN1cHBvcnQgZm9yIFBENjkyeDAgcmVndWxhdG9yIGJhc2VkIEV0aGVybmV0XG4gIDMwOlx0XHQgIFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudC5cbiAgMzE6XHRcbiAgMzI6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gIDMzOlx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwZDY5MngwLlxuICAzNDpcdFxuICAzNTpcdGNvbmZpZyBQU0VfU0kzNDc0XG4gIDM2Olx0XHR0cmlzdGF0ZSBcJiMzNDtTaTM0NzQgUFNFIGNvbnRyb2xsZXJcJiMzNDtcbiAgMzc6XHRcdGRlcGVuZHMgb24gSTJDXG4gIDM4Olx0XHRoZWxwXG4gIDM5Olx0XHQgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHN1cHBvcnQgZm9yIFNpMzQ3NCByZWd1bGF0b3IgYmFzZWQgRXRoZXJuZXRcbiAgNDA6XHRcdCAgUG93ZXIgU291cmNpbmcgRXF1aXBtZW50LlxuICA0MTpcdFx0ICBPbmx5IDQtcGFpciBQU0UgY29uZmlndXJhdGlvbnMgYXJlIHN1cHBvcnRlZC5cbiAgNDI6XHRcbiAgNDM6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gIDQ0Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzaTM0NzQuXG4gIDQ1Olx0XG4gIDQ2Olx0Y29uZmlnIFBTRV9UUFMyMzg4MVxuICA0NzpcdFx0dHJpc3RhdGUgXCYjMzQ7VFBTMjM4ODEgUFNFIGNvbnRyb2xsZXJcJiMzNDtcbiAgNDg6XHRcdGRlcGVuZHMgb24gSTJDXG4gIDQ5Olx0XHRoZWxwXG4gIDUwOlx0XHQgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHN1cHBvcnQgZm9yIFRQUzIzODgxIHJlZ3VsYXRvciBiYXNlZCBFdGhlcm5ldFxuICA1MTpcdFx0ICBQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQuXG4gIDUyOlx0XG4gIDUzOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuICA1NDpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdHBzMjM4ODEuXG4gIDU1Olx0ZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzNDYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uLCBhbmQgaXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gYFBTRV9DT05UUk9MTEVSYCBkZXBlbmRzIG9uIGBSRUdVTEFUT1JgLCBzbyBuYXR1cmFsbHksIEkgbmVlZCB0byBlbmFibGUgYm90aC4gQnV0IHRoZW4gSSByZW1lbWJlciBgUFNFX0NPTlRST0xMRVJgIGlzIGp1c3QgYSBib29sZWFuOyBpdCYjMzk7cyBvbiBvciBvZmYuIFRoYXQgbWFrZXMgdGhpbmdzIGEgYml0IHNpbXBsZXIuCgpJIG5lZWQgdG8gc2VlIGlmIHdlIGhhdmUgYSBkdW1teSBQU0UgZHJpdmVyIG9yIGlmIGVuYWJsaW5nIGBQU0VfUkVHVUxBVE9SYCB3aWxsIGdpdmUgdXMgb25lLiBBaCwgZ29vZCwgYFBTRV9SRUdVTEFUT1JgIGlzIGB0cmlzdGF0ZWAuIFNvLCBJICpjYW4qIGVuYWJsZSBpdC4gVGhhdCBzZXR0bGVzIGl0OiBteSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBuZWVkcyB0byBpbmNsdWRlIGBQU0VfQ09OVFJPTExFUmAgYW5kIGBSRUdVTEFUT1JgLiBFYXN5IHBlYXN5LgoKTm93LCBqdXN0IHRvIGJlIHRob3JvdWdoLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYG5ldC9ldGh0b29sL3BzZS1wZC5jYC4gSSYjMzk7bSBndWVzc2luZyB0aGF0IGNvZGUgaGFzIHNvbWUgZGVwZW5kZW5jeSBvbiBgUFNFX0NPTlRST0xMRVJgLCBvciBhdCB0aGUgdmVyeSBsZWFzdCwgdGhvc2UgZXRodG9vbCBQU0UgY29tbWFuZHMgYXJlIGFsd2F5cyBjb21waWxlZCBpZiBgRVRIVE9PTF9ORVRMSU5LYCBpcyBlbmFibGVkLCBldmVuIGlmIHRoZXkgcmV0dXJuIGFuIGVycm9yIGlmIGBQU0VfQ09OVFJPTExFUmAgaXMgbm90LiBKdXN0IHRvIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMsIEkmIzM5O2xsIHRha2UgYSBxdWljayBsb29rIGF0IGBuZXQvZXRodG9vbC9NYWtlZmlsZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BzZS1wZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9ldGh0b29sLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvZXRodG9vbC9NYWtlZmlsZT03PWV0aHRvb2xfbmwteVx0Oj0gbmV0bGluay5vIGJpdHNldC5vIHN0cnNldC5vIGxpbmtpbmZvLm8gbGlua21vZGVzLm8gcnNzLm8gXFxcbi0tXG5uZXQvZXRodG9vbC9NYWtlZmlsZS0xMC1cdFx0ICAgdHVubmVscy5vIGZlYy5vIGVlcHJvbS5vIHN0YXRzLm8gcGhjX3ZjbG9ja3MubyBtbS5vIFxcXG5uZXQvZXRodG9vbC9NYWtlZmlsZToxMTpcdFx0ICAgbW9kdWxlLm8gY21pc19md191cGRhdGUubyBjbWlzX2NkYi5vIHBzZS1wZC5vIHBsY2EubyBcXFxubmV0L2V0aHRvb2wvTWFrZWZpbGUtMTItXHRcdCAgIHBoeS5vIHRzY29uZmlnLm8gbXNlLm9cbi0tXG5uZXQvZXRodG9vbC9wc2UtcGQuYy0xNC0jaW5jbHVkZSBcJiMzNDtjb21tb24uaFwmIzM0O1xubmV0L2V0aHRvb2wvcHNlLXBkLmM6MTU6I2luY2x1ZGUgXCYjMzQ7bGludXgvcHNlLXBkL3BzZS5oXCYjMzQ7XG5uZXQvZXRodG9vbC9wc2UtcGQuYy0xNi0jaW5jbHVkZSBcJiMzNDtuZXRsaW5rLmhcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwODMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgUFNFIENvbXBpbGF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGNvbmZpcm1pbmcgdGhhdCBgcHNlLXBkLm9gIGlzIGluZGVlZCBhbHdheXMgY29tcGlsZWQgd2hlbiBgZXRodG9vbF9ubC15YCBpcyBpbmNsdWRlZCwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29kZWJhc2UuIE5vdywgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBrZXkgc3ltYm9scyBpbnZvbHZlZCBpbiB0aGlzIGBwc2VgIGZ1bmN0aW9uYWxpdHkuIExldCYjMzk7cyBzZWUuLi4KCkkmIzM5O20gbWFraW5nIGEgbWVudGFsIGxpc3Qgb2YgdGhlIGNvcmUgc3ltYm9scy4gSSYjMzk7bSBnb2luZyB0byB0cmFjayBgcGh5X3RyeV9hdHRhY2hfcHNlYCwgYnV0IGl0JiMzOTtzICpzdGF0aWMqIHdoaWNoIG1lYW5zIGl0IG1pZ2h0IGdldCBpbmxpbmVkLCBzbyBJJiMzOTtsbCBiZSBzdXJlIHRvIGFsc28gbWFrZSBhIG5vdGUgb2YgdGhlIGZ1bmN0aW9ucyB0aGF0IGNhbGwgaXQ6IGBwaHlfcHNlX2F0dGFjaF9vbmVgLCBgcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWRgLCBhbmQgYHBoeV9kZXZpY2VfcmVnaXN0ZXJgLiBJJiMzOTtsbCBwcm9iYWJseSBmb2N1cyBvbiB0aGUgbm9uLXN0YXRpYyBvbmVzIHNpbmNlIHRoZSBpbmxpbmluZyB3aWxsIG1lYW4gdGhlIGFjdHVhbCBzeW1ib2wgbWlnaHQgbm90IGJlIGF2YWlsYWJsZSBhdCBydW50aW1lLiBUaGUgb3RoZXJzIG9uIG15IGxpc3QgYXJlOiBgcGh5X3BzZV9jb250cm9sX2xvY2tgLCBgcGh5X3BzZV9jb250cm9sX3VubG9ja2AsIGBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZGAsIGBwaHlfZGV2aWNlX3JlZ2lzdGVyYCwgYHBoeV9kZXZpY2VfcmVtb3ZlYCwgYHBzZV9yZWdpc3Rlcl9ub3RpZmllcmAsIGBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcmAsIGBwc2VfY29udHJvbGxlcl9yZWdpc3RlcmAsIGBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyYCwgYHBzZV9jb250cm9sX21hdGNoZXNfcGNkZXZgLCBgZXRobmxfc2V0X3BzZWAsIGFuZCBgcHNlX3ByZXBhcmVfZGF0YWAuCgpJJiMzOTtsbCBzdGFydCBieSB0YWtpbmcgYSBjbG9zZXIgbG9vayBhdCBgcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWRgIGFuZCBgcGh5X2RldmljZV9yZWdpc3RlcmAgdG8gc2VlIGhvdyB0aG9zZSBpbnRlZ3JhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTEyMjY9c3RhdGljIGludCBfX3BoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEyNTktLyoqXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEyNjA6ICogcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWQgLSBSZWdpc3RlciB0aGUgcGh5IGRldmljZSBvbiB0aGUgTURJTyBidXNcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTI2MS0gKiBAcGh5ZGV2OiBwaHlfZGV2aWNlIHN0cnVjdHVyZSB0byBiZSBhZGRlZCB0byB0aGUgTURJTyBidXNcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEyNjYtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEyNjc6aW50IHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEyNjgte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTI4Mi19XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEyODM6RVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZCk7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEyODQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2OTYwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgUEhZIGFuZCBQU0UgRXhwb3J0cyoqCgpPa2F5LCBzbyBJJiMzOTttIGRvdWJsZS1jaGVja2luZyB0aGUgc3ltYm9sIGV4cG9ydHMgaGVyZSwgYW5kIHllcywgaXQgc2VlbXMgYHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkYCBpcyBpbmRlZWQgZXhwb3J0ZWQsIHdoaWNoIGlzIGdvb2QuIFRoYXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBQSFkgZnVuY3Rpb24uIEFuZCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgYHBoeV9kZXZpY2VfcmVnaXN0ZXJgIGlzIGFsc28gZXhwb3J0ZWQsIGFzIEkgd291bGQgZXhwZWN0LiBUaGUgcmVtb3ZhbCBmdW5jdGlvbiwgYHBoeV9kZXZpY2VfcmVtb3ZlYCwgaXMgYWxzbyBhY2NvdW50ZWQgZm9yLCBzbyB0aGUgY29yZSBQSFkgcmVnaXN0cmF0aW9uIGFuZCBkZXJlZ2lzdHJhdGlvbiBhcHBlYXIgdG8gYmUgd2VsbC1kZWZpbmVkLgoKTW92aW5nIG9uIHRvIHRoZSBQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQsIHRoZSBQU0Ugc2lkZTogSSBzZWUgYHBzZV9yZWdpc3Rlcl9ub3RpZmllcmAgYW5kIGBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcmAgZXhwb3J0ZWQsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciBoYW5kbGluZyBub3RpZmljYXRpb25zLiBBbmQgdGhlIGNvbnRyb2xsZXIgcmVnaXN0cmF0aW9uIGFuZCB1bnJlZ2lzdHJhdGlvbiBmdW5jdGlvbnMsIGBwc2VfY29udHJvbGxlcl9yZWdpc3RlcmAgYW5kIGBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyYCwgYXJlIGFsc28gYXZhaWxhYmxlLiBGaW5hbGx5LCBpdCBhcHBlYXJzIGBwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2YCBpcyBhcyB3ZWxsLiBUaGF04oCZcyBwcm9iYWJseSBpbXBvcnRhbnQgZm9yIG1hdGNoaW5nIFBTRSBjb250cm9sIHdpdGggdGhlIHBsYXRmb3JtIGRldmljZS4KCk5vdywgYSBicmllZiBwYXVzZS4gSSBzZWUgdGhhdCBgZXRobmxfc2V0X3BzZWAgaXMgc3RhdGljLi4uIGhtbS4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgd2hlcmUgdGhhdCBpcyBkZWZpbmVkLi4uIEFoLCByaWdodCwgdGhhdCYjMzk7cyBpbiBgbmV0L2V0aHRvb2wvcHNlLXBkLmNgLiBPa2F5LCB0aGF0IG1ha2VzIG1vcmUgc2Vuc2Ugbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtldGhubF9zZXRfcHNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2V0aHRvb2wvcHNlLXBkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2V0aHRvb2wvcHNlLXBkLmM9MjQ0PXN0YXRpYyBpbnRcbm5ldC9ldGh0b29sL3BzZS1wZC5jOjI0NTpldGhubF9zZXRfcHNlX3ZhbGlkYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5uZXQvZXRodG9vbC9wc2UtcGQuYy0yNDYte1xuLS1cbm5ldC9ldGh0b29sL3BzZS1wZC5jPTI3Nz1zdGF0aWMgaW50XG5uZXQvZXRodG9vbC9wc2UtcGQuYzoyNzg6ZXRobmxfc2V0X3BzZShzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxubmV0L2V0aHRvb2wvcHNlLXBkLmMtMjc5LXtcbi0tXG5uZXQvZXRodG9vbC9wc2UtcGQuYy0yODgtXG5uZXQvZXRodG9vbC9wc2UtcGQuYzoyODk6XHRyZXQgPSBldGhubF9zZXRfcHNlX3ZhbGlkYXRlKHBoeWRldiwgaW5mbyk7XG5uZXQvZXRodG9vbC9wc2UtcGQuYy0yOTAtXHRpZiAocmV0KVxuLS1cbm5ldC9ldGh0b29sL3BzZS1wZC5jPTMzNT1jb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfcHNlX3JlcXVlc3Rfb3BzID0ge1xuLS1cbm5ldC9ldGh0b29sL3BzZS1wZC5jLTM0Ni1cbm5ldC9ldGh0b29sL3BzZS1wZC5jOjM0NzpcdC5zZXRcdFx0XHQ9IGV0aG5sX3NldF9wc2UsXG5uZXQvZXRodG9vbC9wc2UtcGQuYy0zNDgtXHQvKiBQU0UgaGFzIG5vIG5vdGlmaWNhdGlvbiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzc0OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0d29yayBMaW5rIENvbmZpZ3VyYXRpb24gYW5kIFBvdGVudGlhbCBTeW1ib2wgVmlzaWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGV0aG5sX3NldF9wc2VgLiBJdCYjMzk7cyBkZWZpbmVkIGFzIGBzdGF0aWNgLCB3aGljaCB1c3VhbGx5IG1lYW5zIGl0JiMzOTtzIG5vdCBtZWFudCB0byBiZSBhY2Nlc3NlZCBmcm9tIG91dHNpZGUgdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdC4gSG93ZXZlciwgSSBzZWUgaXQmIzM5O3MgYXNzaWduZWQgdG8gdGhlIGAuc2V0YCBtZW1iZXIgb2YgYGV0aG5sX3BzZV9yZXF1ZXN0X29wc2AuIFRoYXQmIzM5O3MgYSBuZXRsaW5rIGZ1bmN0aW9uIHBvaW50ZXIuIFRoZXJlZm9yZSwgZXZlbiB0aG91Z2ggaXQmIzM5O3Mgc3RhdGljLCBpdCYjMzk7cyBhY3R1YWxseSByZWFjaGFibGUgdGhyb3VnaCBuZXRsaW5rIGNvbW11bmljYXRpb24uIEludGVyZXN0aW5nLgoKVGhpcyBtZWFucyBJIG5lZWQgdG8gY29uc2lkZXIgYGV0aG5sX3NldF9wc2VgIGZvciBpbmNsdXNpb24gaW4gYEZvY3VzU3ltYm9sc2AsIGFzc3VtaW5nIGl0JiMzOTtzIG5vdCBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gR2l2ZW4gdGhhdCBpdCYjMzk7cyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIsIEkmIzM5O20gcHJldHR5IGNvbmZpZGVudCBpdCAqd29uJiMzOTt0KiBiZSBpbmxpbmVkLiBGdW5jdGlvbiBwb2ludGVycyB1c3VhbGx5IHByZXZlbnQgdGhhdCBraW5kIG9mIG9wdGltaXphdGlvbi4KCldhaXQgYSBtaW51dGUsIGBwc2VfcHJlcGFyZV9kYXRhYCBpcyAqYWxzbyogYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgd2VsbC4gSXQgY291bGQgYmUgcmVhY2hhYmxlIHRocm91Z2ggdGhlIHNhbWUgbWVjaGFuaXNtLiBOZWVkIHRvIGFuYWx5emUgaXRzIHVzYWdlIGFzIHdlbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BzZV9wcmVwYXJlX2RhdGEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvZXRodG9vbC9wc2UtcGQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvZXRodG9vbC9wc2UtcGQuYz0zNj1zdGF0aWMgaW50IHBzZV9nZXRfcHNlX2F0dHJpYnV0ZXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbi0tXG5uZXQvZXRodG9vbC9wc2UtcGQuYy01NC1cbm5ldC9ldGh0b29sL3BzZS1wZC5jOjU1OnN0YXRpYyBpbnQgcHNlX3ByZXBhcmVfZGF0YShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLFxubmV0L2V0aHRvb2wvcHNlLXBkLmMtNTYtXHRcdFx0ICAgIHN0cnVjdCBldGhubF9yZXBseV9kYXRhICpyZXBseV9iYXNlLFxuLS1cbm5ldC9ldGh0b29sL3BzZS1wZC5jPTMzNT1jb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfcHNlX3JlcXVlc3Rfb3BzID0ge1xuLS1cbm5ldC9ldGh0b29sL3BzZS1wZC5jLTM0MS1cbm5ldC9ldGh0b29sL3BzZS1wZC5jOjM0MjpcdC5wcmVwYXJlX2RhdGFcdFx0PSBwc2VfcHJlcGFyZV9kYXRhLFxubmV0L2V0aHRvb2wvcHNlLXBkLmMtMzQzLVx0LnJlcGx5X3NpemVcdFx0PSBwc2VfcmVwbHlfc2l6ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzNjAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqQ2hlY2tpbmcgUmVhY2hhYmlsaXR5IGFuZCBFdmVudCBOb3RpZmljYXRpb24qKgoKT2theSwgaXQgc2VlbXMgbGlrZSBgcHNlX3ByZXBhcmVfZGF0YWAgaXMgaW5kZWVkIGFjY2Vzc2libGUg4oCTIHRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3csIEkgbmVlZCB0byBzaGlmdCBteSBmb2N1cyB0byB0aGUgZXZlbnQgbm90aWZpY2F0aW9uIG1lY2hhbmlzbS4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2l0aCBgcGh5X3BzZV9ub3RpZmllcl9ldmVudGAuIFVuZGVyc3RhbmRpbmcgaG93IGFuZCB3aGVuIHRoaXMgaXMgdHJpZ2dlcmVkLCBhbmQgd2hhdCBpbmZvcm1hdGlvbiBpdCByZWxheXMsIGlzIGNydWNpYWwgZm9yIFsqKmluc2VydCB5b3VyIGZpZWxkL2V4cGVydGlzZSBoZXJlLCBlLmcuLCBkZWJ1Z2dpbmcgbmV0d29yayBzdGFjayBpbnRlcmFjdGlvbnMsIHZhbGlkYXRpbmcgZGF0YSBwaXBlbGluZSBpbnRlZ3JpdHksIGFuYWx5emluZyBzZW5zb3IgZnVzaW9uIGFyY2hpdGVjdHVyZSoqXS4gSSBuZWVkIHRvIGRldGVybWluZSBpZiBpdCYjMzk7cyBvcGVyYXRpbmcgYXMgZXhwZWN0ZWQgYW5kIGFjY3VyYXRlbHkgcmVmbGVjdGluZyB0aGUgc3RhdGUgb2YgWyoqaW5zZXJ0IHJlbGV2YW50IHN5c3RlbS9jb21wb25lbnQgaGVyZSwgZS5nLiwgdGhlIHBoeXNpY2FsIGxheWVyIGRhdGEgc3RyZWFtLCB0aGUgUFNFIG1vZHVsZSwgdGhlIHNlbnNvciBpbnRlcmZhY2UqKl0uIFRoaXMgY2hlY2sgaXMgY3JpdGljYWwgZm9yIFsqKmV4cGxhaW4gd2h5IHRoaXMgaXMgaW1wb3J0YW50IGZvciB5b3VyIGZpZWxkLCBlLmcuLCBlbnN1cmluZyBkYXRhIGludGVncml0eSBhY3Jvc3MgdGhlIG5ldHdvcmssIHZlcmlmeWluZyB0aGUgdGltaW5nIG9mIGRhdGEgcHJvY2Vzc2luZywgdmFsaWRhdGluZyB0aGUgc3luY2hyb25pemF0aW9uIGJldHdlZW4gbW9kdWxlcyoqXS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGh5X3BzZV9ub3RpZmllcl9ldmVudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMTUwPXN0YXRpYyBpbnQgcGh5X3BzZV9kZXRhY2hfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExNzAtXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExNzE6c3RhdGljIGludCBwaHlfcHNlX25vdGlmaWVyX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExNzItXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMTkyPXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcGh5X3BzZV9ub3RpZmllciBfX3JlYWRfbW9zdGx5ID0ge1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMTkzOlx0Lm5vdGlmaWVyX2NhbGwgPSBwaHlfcHNlX25vdGlmaWVyX2V2ZW50LFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTk0LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4ODQ4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgeW91ciBzdW1tYXJ5OgoKKipGdW5jdGlvbiBQb2ludGVyIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCB0aGlzIG9wZXJhdGlvbiBpcyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQmIzM5O3MgKm5vdCogaW5saW5lZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IGZvciBwZXJmb3JtYW5jZSBhbmQgY29udHJvbCBmbG93LiBLbm93aW5nIGl0JiMzOTtzIGEgcG9pbnRlciBtZWFucyB0aGVyZSYjMzk7cyBhbiBpbmRpcmVjdGlvbiwgd2hpY2ggY2FuIGJlIHNsb3dlciB0aGFuIGEgZGlyZWN0IGNhbGwsIGFuZCBpdCBhbHNvIG1lYW5zIHRoZSBjb21waWxlciBtaWdodCBub3QgYmUgYWJsZSB0byBvcHRpbWl6ZSBpdCBhcyBhZ2dyZXNzaXZlbHkuCgpUbyBnZXQgYSBoYW5kbGUgb24gdGhlIHNpdHVhdGlvbiwgSSBuZWVkIHRvIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGJlaW5nICpwb2ludGVkKiB0by4gSSYjMzk7bGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhlIGRlZmluaXRpb24gb2YgdGhhdCBmdW5jdGlvbiBwb2ludGVyLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgZnVuY3Rpb25zIHdoZXJlIHRoaXMgdGhpbmcgaXMgdXNlZC4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYHBoeV9wc2VfYXR0YWNoX29uZWAgYW5kIGBwaHlfcHNlX2RldGFjaF9vbmVgLiBFeGFtaW5pbmcgdGhlc2UgZnVuY3Rpb25zIHNob3VsZCByZXZlYWwgdGhlIGNvbmNyZXRlIGZ1bmN0aW9ucyB0aGF0IHRoaXMgZnVuY3Rpb24gcG9pbnRlciBpcyBhY3R1YWxseSBzZXQgdG8uIFRoaXMgd2lsbCBoZWxwIGNsYXJpZnkgdGhlIG92ZXJhbGwgZGVzaWduIGFuZCBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwaHlfcHNlX2F0dGFjaF9vbmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTExND1zdGF0aWMgdm9pZCBwaHlfdHJ5X2F0dGFjaF9wc2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMzgtXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExMzk6c3RhdGljIGludCBwaHlfcHNlX2F0dGFjaF9vbmUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhIF9fbWF5YmVfdW51c2VkKVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTQwLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTExNzE9c3RhdGljIGludCBwaHlfcHNlX25vdGlmaWVyX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTc3LVx0XHRidXNfZm9yX2VhY2hfZGV2KFx1MDAyNm1kaW9fYnVzX3R5cGUsIE5VTEwsIE5VTEwsXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExNzg6XHRcdFx0XHQgcGh5X3BzZV9hdHRhY2hfb25lKTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTE3OS1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBoeV9wc2VfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NDA0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeToKCioqQW5hbHl6aW5nIERldmljZSBBdHRhY2htZW50IGluIGEgUEhZIENvbnRleHQqKgoKUmlnaHQsIHNvIHRoZXNlIGRldmljZSBhdHRhY2htZW50IG9wZXJhdGlvbnMgYXJlbiYjMzk7dCBpbmxpbmVkLCB0aGV5IGFyZSBiZWluZyBwYXNzZWQgdG8gYGJ1c19mb3JfZWFjaF9kZXZgLiBUaGF0IHRlbGxzIG1lIHdlJiMzOTtyZSBsaWtlbHkgZGVhbGluZyB3aXRoIGEgYnVzLWJhc2VkIGVudW1lcmF0aW9uIGFuZCBub3Qgc29tZXRoaW5nIGhhcHBlbmluZyB3aXRoaW4gdGhlIGNvbmZpbmVzIG9mIGEgc2luZ2xlIGZ1bmN0aW9uIGNhbGwuIFRoaXMgaXMgaW1wb3J0YW50IGNvbnRleHQsIHBhcnRpY3VsYXJseSB3aGVuIHRyeWluZyB0byBncmFzcCB0aGUgc2NvcGUgb2YgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBhbmQgaW50ZXJhY3Rpb25zLiBTaW5jZSBpdCYjMzk7cyBpdGVyYXRpbmcsIHRoaXMgcHJvYmFibHkgbWVhbnMgdGhlcmUgYXJlIG11bHRpcGxlIGRldmljZXMgb3Igc3ViLWRldmljZXMgYmVpbmcgaGFuZGxlZCBkdXJpbmcgYXR0YWNobWVudC4KCkdpdmVuIHRoZSBjb250ZXh0LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaW4gdW5kZXJzdGFuZGluZyB0aGUgZGV2aWNlIGF0dGFjaG1lbnQgcHJvY2VzcyBpcyB0byBleGFtaW5lIGBwaHlfdHJ5X2F0dGFjaF9wc2VgLiBJIHNob3VsZCBkaXZlIGludG8gdGhhdCBmdW5jdGlvbiBub3cgdG8gc2VlIGhvdyB0aGUgUGh5c2ljYWwgTGF5ZXIgZGV2aWNlIChQSFkpIGF0dGVtcHRzIHRvIGNvbm5lY3QgdG8gb3IgaW50ZXJhY3Qgd2l0aCBzb21ldGhpbmcgaXQgY2FsbHMgJiMzNDtQU0UsJiMzNDsgbGlrZWx5IFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudCwgcGFydGljdWxhcmx5IHNpbmNlIHdlJiMzOTtyZSBub3QgZGVhbGluZyB3aXRoIGlubGluZSBjb2RlLiBVbmRlcnN0YW5kaW5nIHRoZSByb2xlIG9mIHRoZSBQU0UgZHVyaW5nIGRldmljZSBhdHRhY2htZW50IHdpbGwgcHJvdmlkZSBjcml0aWNhbCBpbnNpZ2h0cyBpbnRvIHRoZSBwb3dlciBtYW5hZ2VtZW50IGFzcGVjdCBhbmQgaG93IHRoZXNlIGRldmljZXMgYXJlIGludGVncmF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeV90cnlfYXR0YWNoX3BzZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMTA2PXN0YXRpYyBERUZJTkVfTVVURVgocGh5X3BzZV9sb2NrKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMTMtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExMTQ6c3RhdGljIHZvaWQgcGh5X3RyeV9hdHRhY2hfcHNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMTUte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTEzOT1zdGF0aWMgaW50IHBoeV9wc2VfYXR0YWNoX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEgX19tYXliZV91bnVzZWQpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTQ1LVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMTQ2Olx0cGh5X3RyeV9hdHRhY2hfcHNlKHRvX3BoeV9kZXZpY2UoZGV2KSk7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExNDctXHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTEyNjc9aW50IHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMjc3LVx0bXV0ZXhfbG9jayhcdTAwMjZwaHlfcHNlX2xvY2spO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMjc4Olx0cGh5X3RyeV9hdHRhY2hfcHNlKHBoeWRldik7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEyNzktXHRtdXRleF91bmxvY2soXHUwMDI2cGh5X3BzZV9sb2NrKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTEyOTE9aW50IHBoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEyOTktXHRtdXRleF9sb2NrKFx1MDAyNnBoeV9wc2VfbG9jayk7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEzMDA6XHRwaHlfdHJ5X2F0dGFjaF9wc2UocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTMwMS1cdG11dGV4X3VubG9jayhcdTAwMjZwaHlfcHNlX2xvY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDE5MwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgQ29kZSBGbG93OiBTa2lwcGluZyB0aGUgSW5saW5lZCoqCgpSaWdodCwgdGhpcyBsb29rcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkLCBzdGF0aWNhbGx5IGRlZmluZWQgY2FsbC4gSXQmIzM5O3MgbGlrZWx5IGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGZvciBlZmZpY2llbmN5LiBObyBuZWVkIHRvIGRpZyBpbnRvIGl0IGhlcmU7IHRoZSBjb21waWxlciYjMzk7cyBwcm9iYWJseSB0YWtlbiBjYXJlIG9mIGl0LiBMZXQmIzM5O3MgbW92ZSBvbiBhbmQgZ2V0IHRvIHRoZSBpbXBvcnRhbnQgcGFydC4gTXkgbmV4dCBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiB0aGUgYF9fcGh5X2RldmljZV9yZWdpc3RlcmAgZnVuY3Rpb24gYW5kIGhvdyBpdCB3b3Jrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19waHlfZGV2aWNlX3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTEyMTY9RVhQT1JUX1NZTUJPTF9HUEwocGh5X3BzZV9jb250cm9sX3VubG9jayk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMjI1LSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMjI2OnN0YXRpYyBpbnQgX19waHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEyMjcte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTI2Nz1pbnQgcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEyNzItXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEyNzM6XHRlcnIgPSBfX3BoeV9kZXZpY2VfcmVnaXN0ZXIocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTI3NC1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMjkxPWludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMjk0LVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMjk1Olx0ZXJyID0gX19waHlfZGV2aWNlX3JlZ2lzdGVyKHBoeWRldik7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEyOTYtXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDcwOQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQ5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBTRSBEcml2ZXIgYW5kIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhpcyBQU0UgZHJpdmVyLiBUaGUgaW5pdGlhbCBjbHVlIGlzIHRoYXQgdGhpcyBjb2RlIGlzIGxpa2VseSBkaXJlY3RseSBjYWxsZWQsIGFuZCBwb3NzaWJseSBpbmxpbmVkLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gc3BlY2lmaWMgc3ltYm9scyB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBhbmQgcmVsYXRpb25zaGlwcy4gSSBuZWVkIHRvIGtlZXAgYW4gZXllIG91dCBmb3IgdGhlc2U6IGBwaHlfcHNlX2NvbnRyb2xfbG9ja2AsIGBwaHlfcHNlX2NvbnRyb2xfdW5sb2NrYCwgYHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkYCwgYHBoeV9kZXZpY2VfcmVnaXN0ZXJgLCBgcGh5X2RldmljZV9yZW1vdmVgLCBgcHNlX3JlZ2lzdGVyX25vdGlmaWVyYCwgYHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyYCwgYHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyYCwgYHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXJgLCBgcHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldmAsIGBldGhubF9zZXRfcHNlYCwgYHBzZV9wcmVwYXJlX2RhdGFgLCBgcGh5X3BzZV9hdHRhY2hfb25lYCwgYW5kIGBwaHlfcHNlX2RldGFjaF9vbmVgLCBgcGh5X3BzZV9ub3RpZmllcl9ldmVudGAuIFRoZXNlIGZ1bmN0aW9ucyB3aWxsIHBhaW50IHRoZSBwaWN0dXJlIG9mIGhvdyBpdCBhbGwgd29ya3MuCgpOb3csIEkgbmVlZCB0byB2ZXJpZnkgd2hpY2ggY29uZmlndXJhdGlvbnMgYXJlIHJlcXVpcmVkIGZvciB0aGlzIGRyaXZlciB0byBmdW5jdGlvbi4gTGV0IG1lIHNlZS4uLiBJJiMzOTt2ZSBnb3QgYENPTkZJR19QU0VfQ09OVFJPTExFUmAgYW5kIGBDT05GSUdfUkVHVUxBVE9SYCB0aGF0IGFyZSBvYnZpb3VzbHkgbmVlZGVkLiBXYWl0LCBpdCBzZWVtcyBsaWtlIHRoZSBgUFNFX1JFR1VMQVRPUmAgaXMgYWN0dWFsbHkgdGhlIGRyaXZlci4gU28gSSYjMzk7bGwgbmVlZCBgQ09ORklHX1BTRV9SRUdVTEFUT1JgLi4uIEFoIHllcywgdGhhdCYjMzk7cyBpdC4gSXQmIzM5O3MgbGlzdGVkIGluIGBkcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZ2AuIEkgc2VlIGBjb25maWcgUFNFX1JFR1VMQVRPUmAgaW4gdGhlcmUuIE9rLCBzbyBgUFNFX1JFR1VMQVRPUmAgaXMgdGhlIGNvbmZpZyBuYW1lIGZvciB0aGUgZHJpdmVyLiBXYWl0LCBgUFNFX0NPTlRST0xMRVJgIGlzIGEgYm9vbGVhbiwgd2hpbGUgYFBTRV9SRUdVTEFUT1JgIGlzIGEgdHJpc3RhdGUuIFRoZXJlZm9yZSwgYm90aCBgUFNFX0NPTlRST0xMRVJgLCBgUFNFX1JFR1VMQVRPUmAsIGFuZCBgUkVHVUxBVE9SYCBjb25maWdzIHNob3VsZCBkZWZpbml0ZWx5IGdvIGludG8gYEVuYWJsZUNvbmZpZ3NgLgoKTmV4dCwgSSYjMzk7bGwgbmVlZCB0byBzZWUgaWYgaXQmIzM5O3MgY29tcGlsZWQuIEkmIzM5O2xsIGNoZWNrIGBuZXQvZXRodG9vbC9wc2UtcGQuY2AuIFRoZSBkcml2ZXIgaXMgY29tcGlsZWQgaWYgYENPTkZJR19FVEhUT09MX05FVExJTktgIGlzIGVuYWJsZWQuIFRoYXQgc2hvdWxkIGJlIGVuYWJsZWQgYnkgZGVmYXVsdCwgc28gSSYjMzk7bSBsaWtlbHkgZ29vZCB0aGVyZS4KCkkmIzM5O2xsIGFsc28gaGF2ZSB0byBtYWtlIHN1cmUgdGhlIGNvcmUgUEhZIGxpYnJhcnkgaXMgYXZhaWxhYmxlLiBMb29raW5nIGF0IGBkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jYCwgaXQmIzM5O3MgY29tcGlsZWQgaWYgYENPTkZJR19QSFlMSUJgIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgdXN1YWxseSBlbmFibGVkLCBzbyBJJiMzOTttIHByb2JhYmx5IGZpbmUuCgpGaW5hbGx5LCB0aGUgcGF0Y2ggbWVudGlvbnMgY2hhbmdlcyB0byBgc2ZwX3NtX3Byb2JlX3BoeWAgaW4gYHNmcC5jYC4gTGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrIGlmIGBzZnAuY2AgaXMgY29tcGlsZWQuIE9rLCBqdXN0IG1ha2luZyBzdXJlIGV2ZXJ5dGhpbmcgaXMgcmVhZHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NmcC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT0yND1vYmotJChDT05GSUdfTkVUV09SS19QSFlfVElNRVNUQU1QSU5HKSAmIzQzOz0gbWlpX3RpbWVzdGFtcGVyLm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0yNS1cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToyNjpvYmotJChDT05GSUdfU0ZQKVx0XHQmIzQzOz0gc2ZwLm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToyNzpzZnAtb2JqLSQoQ09ORklHX1NGUClcdFx0JiM0Mzs9IHNmcC1idXMub1xuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjI4Om9iai15XHRcdFx0XHQmIzQzOz0gJChzZnAtb2JqLXkpICQoc2ZwLW9iai1tKVxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTI5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTk3NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2Ugc3RlcHM6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNraW5nIGEgZGVwZW5kZW5jeSBoZXJlLiBJIHNlZSB0aGF0IHRoZSBgc2ZwLmNgIG1vZHVsZSBhYnNvbHV0ZWx5IG5lZWRzIGBDT05GSUdfU0ZQYCB0byBjb21waWxlLiBNYWtlcyBwZXJmZWN0IHNlbnNlLiBSaWdodCwgbGV0JiMzOTtzIGdldCB0aGF0IHNxdWFyZWQgYXdheS4gSSYjMzk7bGwgYWRkIGBTRlBgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdC4gTm8gcmVhc29uIHRvIGxlYXZlIHRoYXQgaGFuZ2luZy4KCldoaWxlIEkmIzM5O20gYXQgaXQsIEkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoaXMgYGRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uY2AgZmlsZS4gQWgsIHllcywgaXQgZGVwZW5kcyBvbiBgQ09ORklHX0ZXTk9ERV9NRElPYCwgYXMgZXhwZWN0ZWQuIEdvb2QuIEl0JiMzOTtzIGFsd2F5cyBhIGdvb2QgaWRlYSB0byBjb25maXJtIHRob3NlIGRlcGVuZGVuY2llcyBhbmQgZW5zdXJlIEkmIzM5O3ZlIGdvdCBldmVyeXRoaW5nIGxpbmVkIHVwIGluIG15IGhlYWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z3bm9kZV9tZGlvLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU9ND1vYmotJChDT05GSUdfQUNQSV9NRElPKVx0XHQmIzQzOz0gYWNwaV9tZGlvLm9cbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6NTpvYmotJChDT05GSUdfRldOT0RFX01ESU8pXHQmIzQzOz0gZndub2RlX21kaW8ub1xuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZS02LW9iai0kKENPTkZJR19PRl9NRElPKVx0XHQmIzQzOz0gb2ZfbWRpby5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMzYwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUEhZIGFuZCBQU0UgQ29udHJvbGxlciBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGlua2luZyB3ZSBuZWVkIHRvIGFkZCBgRldOT0RFX01ESU9gIHRvIGBFbmFibGVDb25maWdzYC4gTGV0JiMzOTtzIHJldmlldyB0aGUgaW1wbGljYXRpb25zIGhlcmU7IHRoaXMgaXMgYSBwcmV0dHkgc3Vic3RhbnRpYWwgY2hhbmdlIGluIGhvdyB0aGUgUEhZIGxpYnJhcnkgYW5kIGV0aHRvb2wgaGFuZGxlIFBTRSBjb250cm9sbGVycy4KClRoZSBwYXRjaCBpcyBzaGlmdGluZyB0aGUgUFNFIGNvbnRyb2wgYXR0YWNobWVudC4gSW5zdGVhZCBvZiBhdHRhY2hpbmcgaXQgdGhyb3VnaCBgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5YCwgaXQmIzM5O3Mgbm93IGJlaW5nIGhhbmRsZWQgaW4gYHBoeV9kZXZpY2VfcmVnaXN0ZXJgIGFuZCwgY3J1Y2lhbGx5LCBgcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWRgLiBUaGF0JiMzOTtzIGEga2V5IG1vdmUuIFRvIHNlcmlhbGl6ZSBhY2Nlc3MgdG8gYHBoeWRldi0mZ3Q7cHNlY2AgYWdhaW5zdCB0aGUgUFNFIG5vdGlmaWVyIGFuZCBldGh0b29sLCB3ZSYjMzk7cmUgaW50cm9kdWNpbmcgYSBgcGh5X3BzZV9sb2NrYCBtdXRleC4gVGhpcyBpcyBhIHZlcnkgZ29vZCBpZGVhIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zLiBXZSYjMzk7cmUgYWxzbyBpbnRyb2R1Y2luZyBhIGBwaHlfcHNlX25vdGlmaWVyYCBub3RpZmllciB3aGljaCB3aWxsIGF0dGFjaCBhbmQgZGV0YWNoIHRoZSBQU0UgY29udHJvbCBhcyB0aGUgUFNFIGNvbnRyb2xsZXIgcmVnaXN0ZXJzIGFuZCB1bnJlZ2lzdGVycy4KClRoZSBjaGFuZ2VzIHRvIGBldGhubF9zZXRfcHNlYCBhbmQgYHBzZV9wcmVwYXJlX2RhdGFgIHRvIHVzZSBgcGh5X3BzZV9jb250cm9sX2xvY2soKWAgYW5kIGBwaHlfcHNlX2NvbnRyb2xfdW5sb2NrKClgIGFyZSBhbHNvIHNtYXJ0LiBJdCYjMzk7cyBzb2xpZGlmeWluZyB0aGUgbG9ja2luZyB0byBlbnN1cmUgZGF0YSBjb25zaXN0ZW5jeS4gQW5kIGZpbmFsbHksIHRoZSBtb2RpZmljYXRpb24gdG8gYHNmcF9zbV9wcm9iZV9waHlgIHRvIHVzZSBgcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWRgIGluc3RlYWQgb2YgYHBoeV9kZXZpY2VfcmVnaXN0ZXJgIGZvbGxvd3MgdGhpcyBjaGFuZ2UgYW5kIHVzZXMgcHJvcGVyIGxvY2tpbmcgaW4gdGhhdCBmdW5jdGlvbiBhcyB3ZWxsLgoKVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgc2hpZnQuIFRoaXMgaXMgbGlrZWx5IGZpeGluZyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciBsaWZlY3ljbGUgaXNzdWUgd2l0aCBQU0UgY29udHJvbGxlcnMgdGhhdCB3ZSBwcm9iYWJseSBzYXcgZHVyaW5nIHRlc3RpbmcuIEl0IGRlZmluaXRlbHkgd2FycmFudHMgYSBmdWxsIGZ1enppbmcgcGFzcy4KCk5vdywgSSB3YW50IHRvIG1ha2Ugc3VyZSBJJiMzOTttIGZ1bGx5IHVwIHRvIHNwZWVkIG9uIGFsbCB0aGUgc3ltYm9scyBhZmZlY3RlZC4gTGV0IG1lIGZvY3VzIG9uOiBgcGh5X3BzZV9jb250cm9sX2xvY2tgLCBgcGh5X3BzZV9jb250cm9sX3VubG9ja2AsIGBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZGAsIGBwaHlfZGV2aWNlX3JlZ2lzdGVyYCwgYHBoeV9kZXZpY2VfcmVtb3ZlYCwgYHBzZV9yZWdpc3Rlcl9ub3RpZmllcmAsIGBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcmAsIGBwc2VfY29udHJvbGxlcl9yZWdpc3RlcmAsIGBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyYCwgYHBzZV9jb250cm9sX21hdGNoZXNfcGNkZXZgLCBgZXRobmxfc2V0X3BzZWAsIGBwc2VfcHJlcGFyZV9kYXRhYCwgYHBoeV9wc2VfYXR0YWNoX29uZWAsIGBwaHlfcHNlX2RldGFjaF9vbmVgLCBhbmQgYHBoeV9wc2Vfbm90aWZpZXJfZXZlbnRgLiBUaGVzZSBhcmUgYWxsIGNlbnRyYWwgdG8gdGhlIGxvZ2ljIGhlcmUuCgpXZSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvcnJlY3QgZW5hYmxlbWVudCBjb25maWdzLiBXZSBuZWVkIGBQU0VfQ09OVFJPTExFUmAsIGBQU0VfUkVHVUxBVE9SYCwgYFJFR1VMQVRPUmAsIGBTRlBgLCBhbmQgYEZXTk9ERV9NRElPYC4KCkxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlIGBQU0VfUkVHVUxBVE9SYCBjb25maWcuIExvb2tpbmcgYXQgYGRyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnYDoKYGBgCmNvbmZpZyBQU0VfUkVHVUxBVE9SCgl0cmlzdGF0ZSAmIzM0O1JlZ3VsYXRvciBiYXNlZCBQU0UgY29udHJvbGxlciYjMzQ7CmBgYApZZXMsIGBQU0VfUkVHVUxBVE9SYCBpcyB0aGUgcmlnaHQgb25lLCB0aGF0JiMzOTtzIGNvcnJlY3QuCgpMZXQmIzM5O3MgYWxzbyBtYWtlIHN1cmUgYFNGUGAgaXMgZW5hYmxlZCBjb3JyZWN0bHkuIENoZWNraW5nIGBkcml2ZXJzL25ldC9waHkvS2NvbmZpZ2A6IC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU0ZQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L0tjb25maWc9NjU9Y29uZmlnIFJVU1RfUEhZTElCX0FCU1RSQUNUSU9OU1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTcyLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6NzM6Y29uZmlnIFNGUFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNzQtXHR0cmlzdGF0ZSBcJiMzNDtTRlAgY2FnZSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNjM4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ29uZmlybWluZyB0aGUgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB5ZXMsIEkgYWdyZWUsIGBTRlBgIGlzIGRlZmluaXRlbHkgdGhlIGNvcnJlY3Qgb3B0aW9uIGhlcmUuIE5vdywgSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIGFib3V0IGBGV05PREVfTURJT2AuIExldCYjMzk7cyBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGNvbmZpZ3VyYXRpb24sIHNoYWxsIHdlPyBJJiMzOTtsbCBwb3Agb3ZlciB0byBgZHJpdmVycy9uZXQvbWRpby9LY29uZmlnYCB0byB2ZXJpZnkuIEkgbmVlZCB0byBiZSBjZXJ0YWluIGJlZm9yZSBJIG1vdmUgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBGV05PREVfTURJTyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL0tjb25maWc9Nj1pZiBQSFlMSUJcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy03LVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjg6Y29uZmlnIEZXTk9ERV9NRElPXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctOS1cdGRlZl90cmlzdGF0ZSAoQUNQSSB8fCBPRikgfHwgQ09NUElMRV9URVNUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzODg5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ29uZmlybWluZyB0aGUgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB5ZXMsIGBGV05PREVfTURJT2AgZmVlbHMgcmlnaHQsIHRoYXQgcmluZ3MgdHJ1ZS4gTm93LCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgYmVmb3JlIEkgcHJvY2VlZCB3aXRoIGFueSBjaGFuZ2VzLCBsZXQmIzM5O3MgcXVpY2tseSB2ZXJpZnkgdGhhdCBgUkVHVUxBVE9SYCBpcyB0aGUgYXBwcm9wcmlhdGUgY29uZmlndXJhdGlvbiBvcHRpb24gd2UmIzM5O3JlIGxvb2tpbmcgYXQuIEJlc3QgcHJhY3RpY2UsIGFsd2F5cy4gQSBxdWljayBsb29rIHdpdGhpbiBgZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZ2Agc2hvdWxkIHByb3ZpZGUgdGhlIGFuc3dlci4gSSBuZWVkIHRoYXQgYWJzb2x1dGUgY2xhcml0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFJFR1VMQVRPUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvcmVndWxhdG9yL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDgzMyBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzoyOm1lbnVjb25maWcgUkVHVUxBVE9SXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTMtXHRib29sIFwmIzM0O1ZvbHRhZ2UgYW5kIEN1cnJlbnQgUmVndWxhdG9yIFN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnPTI2PWlmIFJFR1VMQVRPUlxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0yNy1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6Mjg6Y29uZmlnIFJFR1VMQVRPUl9ERUJVR1xuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0yOS1cdGJvb2wgXCYjMzQ7UmVndWxhdG9yIGRlYnVnIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTMyLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzozMzpjb25maWcgUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0VcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMzQtXHR0cmlzdGF0ZSBcJiMzNDtGaXhlZCB2b2x0YWdlIHJlZ3VsYXRvciBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0zOS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NDA6Y29uZmlnIFJFR1VMQVRPUl9WSVJUVUFMX0NPTlNVTUVSXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTQxLVx0dHJpc3RhdGUgXCYjMzQ7VmlydHVhbCByZWd1bGF0b3IgY29uc3VtZXIgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNDktXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjUwOmNvbmZpZyBSRUdVTEFUT1JfVVNFUlNQQUNFX0NPTlNVTUVSXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTUxLVx0dHJpc3RhdGUgXCYjMzQ7VXNlcnNwYWNlIHJlZ3VsYXRvciBjb25zdW1lciBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy01OC1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NTk6Y29uZmlnIFJFR1VMQVRPUl9ORVRMSU5LX0VWRU5UU1xuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy02MC1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIHJlY2VpdmluZyByZWd1bGF0b3IgZXZlbnRzIHZpYSBuZXRsaW5rXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy02OC1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6Njk6Y29uZmlnIFJFR1VMQVRPUl84OFBHODZYXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTcwLVx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCA4OFBHODZYIHZvbHRhZ2UgcmVndWxhdG9yc1wmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNzctXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjc4OmNvbmZpZyBSRUdVTEFUT1JfODhQTTgwMFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy03OS1cdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgODhQTTgwMCBQb3dlciByZWd1bGF0b3JzXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy04Ny1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6ODg6Y29uZmlnIFJFR1VMQVRPUl84OFBNODYwN1xuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy04OS1cdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgODhQTTg2MDcgUG93ZXIgcmVndWxhdG9yc1wmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctOTMtXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjk0OmNvbmZpZyBSRUdVTEFUT1JfODhQTTg4NlxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy05NS1cdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgODhQTTg4NiB2b2x0YWdlIHJlZ3VsYXRvcnNcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTk5LVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzoxMDA6Y29uZmlnIFJFR1VMQVRPUl9BQ1Q4ODY1XG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTEwMS1cdHRyaXN0YXRlIFwmIzM0O0FjdGl2ZS1zZW1pIGFjdDg4NjUgdm9sdGFnZSByZWd1bGF0b3JcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTEwOC1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MTA5OmNvbmZpZyBSRUdVTEFUT1JfQUNUODk0NUFcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTEwLVx0dHJpc3RhdGUgXCYjMzQ7QWN0aXZlLXNlbWkgQUNUODk0NUEgdm9sdGFnZSByZWd1bGF0b3JcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTExNy1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MTE4OmNvbmZpZyBSRUdVTEFUT1JfQUQ1Mzk4XG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTExOS1cdHRyaXN0YXRlIFwmIzM0O0FuYWxvZyBEZXZpY2VzIEFENTM5OC9BRDU4MjEgcmVndWxhdG9yc1wmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTI0LVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzoxMjU6Y29uZmlnIFJFR1VMQVRPUl9BRFA1MDU1XG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTEyNi1cdHRyaXN0YXRlIFwmIzM0O0FuYWxvZyBEZXZpY2VzIEFEUDUwNTUgVHJpcGxlIEJ1Y2sgUmVndWxhdG9yXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xMzUtXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjEzNjpjb25maWcgUkVHVUxBVE9SX0FOQVRPUFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xMzctXHR0cmlzdGF0ZSBcJiMzNDtGcmVlc2NhbGUgaS5NWCBvbi1jaGlwIEFOQVRPUCBMRE8gcmVndWxhdG9yc1wmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTQ0LVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzoxNDU6Y29uZmlnIFJFR1VMQVRPUl9BQVQyODcwXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTE0Ni1cdHRyaXN0YXRlIFwmIzM0O0FuYWxvZ2ljVGVjaCBBQVQyODcwIFJlZ3VsYXRvcnNcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTE1MS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MTUyOmNvbmZpZyBSRUdVTEFUT1JfQUI4NTAwXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTE1My1cdGJvb2wgXCYjMzQ7U1QtRXJpY3Nzb24gQUI4NTAwIFBvd2VyIFJlZ3VsYXRvcnNcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTE1OC1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MTU5OmNvbmZpZyBSRUdVTEFUT1JfQVJJWk9OQV9MRE8xXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTE2MC1cdHRyaXN0YXRlIFwmIzM0O0NpcnJ1cyBNYWRlcmEgYW5kIFdvbGZzb24gQXJpem9uYSBjbGFzcyBkZXZpY2VzIExETzFcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTE2Ni1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MTY3OmNvbmZpZyBSRUdVTEFUT1JfQVJJWk9OQV9NSUNTVVBQXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTE2OC1cdHRyaXN0YXRlIFwmIzM0O0NpcnJ1cyBNYWRlcmEgYW5kIFdvbGZzb24gQXJpem9uYSBjbGFzcyBkZXZpY2VzIE1JQ1NVUFBcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTE3NS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MTc2OmNvbmZpZyBSRUdVTEFUT1JfQVJNX1NDTUlcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTc3LVx0dHJpc3RhdGUgXCYjMzQ7U0NNSSBiYXNlZCByZWd1bGF0b3IgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xODQtXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjE4NTpjb25maWcgUkVHVUxBVE9SX0FTMzcxMVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xODYtXHR0cmlzdGF0ZSBcJiMzNDtBUzM3MTEgUE1JQ1wmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTkxLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzoxOTI6Y29uZmlnIFJFR1VMQVRPUl9BUzM3MjJcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTkzLVx0dHJpc3RhdGUgXCYjMzQ7QU1TIEFTMzcyMiBQTUlDIFJlZ3VsYXRvcnNcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTE5OS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MjAwOmNvbmZpZyBSRUdVTEFUT1JfQVRDMjYwWFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0yMDEtXHR0cmlzdGF0ZSBcJiMzNDtBY3Rpb25zIFNlbWkgQVRDMjYweCBQTUlDIFJlZ3VsYXRvcnNcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTIwNy1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MjA4OmNvbmZpZyBSRUdVTEFUT1JfQVczNzUwM1xuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0yMDktXHR0cmlzdGF0ZSBcJiMzNDtBd2luaWMgQVczNzUwMyBEdWFsIE91dHB1dCBQb3dlciByZWd1bGF0b3JzXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0yMTUtXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjIxNjpjb25maWcgUkVHVUxBVE9SX0FYUDIwWFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0yMTctXHR0cmlzdGF0ZSBcJiMzNDtYLVBPV0VSUyBBWFAyMFggUE1JQyBSZWd1bGF0b3JzXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0yMjItXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjIyMzpjb25maWcgUkVHVUxBVE9SX0JDTTU5MFhYXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTIyNC1cdHRyaXN0YXRlIFwmIzM0O0Jyb2FkY29tIEJDTTU5MHh4IFBNVSBSZWd1bGF0b3JzXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0yMzAtXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjIzMTpjb25maWcgUkVHVUxBVE9SX0JENzE4MTVcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMjMyLVx0dHJpc3RhdGUgXCYjMzQ7Uk9ITSBCRDcxODE1IFBvd2VyIFJlZ3VsYXRvclwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMjQyLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzoyNDM6Y29uZmlnIFJFR1VMQVRPUl9CRDcxODI4XG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTI0NC1cdHRyaXN0YXRlIFwmIzM0O1JPSE0gQkQ3MTgyOCwgQkQ3MjcyMCBhbmQgQkQ3MzkwMCBQb3dlciBSZWd1bGF0b3JzXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0yNTQtXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjI1NTpjb25maWcgUkVHVUxBVE9SX0JENzE4WFhcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMjU2LVx0dHJpc3RhdGUgXCYjMzQ7Uk9ITSBCRDcxODM3IFBvd2VyIFJlZ3VsYXRvclwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMjY2LVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzoyNjc6Y29uZmlnIFJFR1VMQVRPUl9CRDk1NzFNV1ZcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMjY4LVx0dHJpc3RhdGUgXCYjMzQ7Uk9ITSBCRDk1NzFNV1YgUmVndWxhdG9yc1wmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMjc3LVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzoyNzg6Y29uZmlnIFJFR1VMQVRPUl9CRDk1N1hNVUZcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMjc5LVx0dHJpc3RhdGUgXCYjMzQ7Uk9ITSBCRDk1NzZNVUYgYW5kIEJEOTU3M01VRiBSZWd1bGF0b3JzXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0yODctXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjI4ODpjb25maWcgUkVHVUxBVE9SX0JEOTY4MDFcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMjg5LVx0dHJpc3RhdGUgXCYjMzQ7Uk9ITSBCRDk2ODAxIFBvd2VyIFJlZ3VsYXRvclwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMjk5LVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzozMDA6Y29uZmlnIFJFR1VMQVRPUl9CUTI1N1hYXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTMwMS1cdHRyaXN0YXRlIFwmIzM0O1RJIEJRMjU3WFggcmVndWxhdG9yIGZhbWlseVwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMzA3LVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzozMDg6Y29uZmlnIFJFR1VMQVRPUl9DUENBUFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0zMDktXHR0cmlzdGF0ZSBcJiMzNDtNb3Rvcm9sYSBDUENBUCByZWd1bGF0b3JcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTMxNC1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MzE1OmNvbmZpZyBSRUdVTEFUT1JfQ1JPU19FQ1xuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0zMTYtXHR0cmlzdGF0ZSBcJiMzNDtDaHJvbWVPUyBFQyByZWd1bGF0b3JzXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0zMjQtXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjMyNTpjb25maWcgUkVHVUxBVE9SX0RBOTAzWFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0zMjYtXHR0cmlzdGF0ZSBcJiMzNDtEaWFsb2cgU2VtaWNvbmR1Y3RvciBEQTkwMzAvREE5MDM0IHJlZ3VsYXRvcnNcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTMzMi1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MzMzOmNvbmZpZyBSRUdVTEFUT1JfREE5MDUyXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTMzNC1cdHRyaXN0YXRlIFwmIzM0O0RpYWxvZyBTZW1pY29uZHVjdG9yIERBOTA1Mi9EQTkwNTMgcmVndWxhdG9yc1wmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMzM5LVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzozNDA6Y29uZmlnIFJFR1VMQVRPUl9EQTkwNTVcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMzQxLVx0dHJpc3RhdGUgXCYjMzQ7RGlhbG9nIFNlbWljb25kdWN0b3IgREE5MDU1IHJlZ3VsYXRvcnNcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTM0OS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MzUwOmNvbmZpZyBSRUdVTEFUT1JfREE5MDYyXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTM1MS1cdHRyaXN0YXRlIFwmIzM0O0RpYWxvZyBTZW1pY29uZHVjdG9yIERBOTA2MS82MiByZWd1bGF0b3JzXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0zNTktXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjM2MDpjb25maWcgUkVHVUxBVE9SX0RBOTA2M1xuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0zNjEtXHR0cmlzdGF0ZSBcJiMzNDtEaWFsb2cgU2VtaWNvbmR1Y3RvciBEQTkwNjMgcmVndWxhdG9yc1wmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMzY5LVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzozNzA6Y29uZmlnIFJFR1VMQVRPUl9EQTkxMjFcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMzcxLVx0dHJpc3RhdGUgXCYjMzQ7RGlhbG9nIFNlbWljb25kdWN0b3IgREE5MTIxL0RBOTEyMi9EQTkyMjAvREE5MjE3L0RBOTEzMC9EQTkxMzEvREE5MTMyIHJlZ3VsYXRvclwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMzg5LVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzozOTA6Y29uZmlnIFJFR1VMQVRPUl9EQTkyMTBcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMzkxLVx0dHJpc3RhdGUgXCYjMzQ7RGlhbG9nIFNlbWljb25kdWN0b3IgREE5MjEwIHJlZ3VsYXRvclwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMzk5LVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo0MDA6Y29uZmlnIFJFR1VMQVRPUl9EQTkyMTFcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNDAxLVx0dHJpc3RhdGUgXCYjMzQ7RGlhbG9nIFNlbWljb25kdWN0b3IgREE5MjExL0RBOTIxMi9EQTkyMTMvREE5MjIzL0RBOTIxNC9EQTkyMjQvREE5MjE1L0RBOTIyNSByZWd1bGF0b3JcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTQxMC1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NDExOmNvbmZpZyBSRUdVTEFUT1JfREJYNTAwX1BSQ01VXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTQxMi1cdGJvb2xcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNDEzLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo0MTQ6Y29uZmlnIFJFR1VMQVRPUl9EQjg1MDBfUFJDTVVcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNDE1LVx0Ym9vbCBcJiMzNDtTVC1Fcmljc3NvbiBEQjg1MDAgVm9sdGFnZSBEb21haW4gUmVndWxhdG9yc1wmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNDIxLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo0MjI6Y29uZmlnIFJFR1VMQVRPUl9GQU41MzU1NVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy00MjMtXHR0cmlzdGF0ZSBcJiMzNDtGYWlyY2hpbGQgRkFONTM1NTUgUmVndWxhdG9yXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy00MzItXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjQzMzpjb25maWcgUkVHVUxBVE9SX0ZBTjUzODgwXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTQzNC1cdHRyaXN0YXRlIFwmIzM0O0ZhaXJjaGlsZCBGQU41Mzg4MCBSZWd1bGF0b3JcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTQ0Mi1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NDQzOmNvbmZpZyBSRUdVTEFUT1JfR1BJT1xuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy00NDQtXHR0cmlzdGF0ZSBcJiMzNDtHUElPIHJlZ3VsYXRvciBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy00NTItXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjQ1Mzpjb25maWcgUkVHVUxBVE9SX0hJNjQyMVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy00NTQtXHR0cmlzdGF0ZSBcJiMzNDtIaVNpbGljb24gSGk2NDIxIFBNSUMgdm9sdGFnZSByZWd1bGF0b3Igc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNDYyLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo0NjM6Y29uZmlnIFJFR1VMQVRPUl9ISTY0MjFWNTMwXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTQ2NC1cdHRyaXN0YXRlIFwmIzM0O0hpU2lsaWNvbiBIaTY0MjF2NTMwIFBNSUMgdm9sdGFnZSByZWd1bGF0b3Igc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNDcyLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo0NzM6Y29uZmlnIFJFR1VMQVRPUl9ISTY1NVhcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNDc0LVx0dHJpc3RhdGUgXCYjMzQ7SGlzaWxpY29uIEhJNjU1WCBQTUlDIHJlZ3VsYXRvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNDgwLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo0ODE6Y29uZmlnIFJFR1VMQVRPUl9ISTY0MjFWNjAwXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTQ4Mi1cdHRyaXN0YXRlIFwmIzM0O0hpU2lsaWNvbiBIaTY0MjF2NjAwIFBNSUMgdm9sdGFnZSByZWd1bGF0b3Igc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNDg5LVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo0OTA6Y29uZmlnIFJFR1VMQVRPUl9JU0w5MzA1XG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTQ5MS1cdHRyaXN0YXRlIFwmIzM0O0ludGVyc2lsIElTTDkzMDUgcmVndWxhdG9yXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy00OTYtXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjQ5Nzpjb25maWcgUkVHVUxBVE9SX0lTTDYyNzFBXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTQ5OC1cdHRyaXN0YXRlIFwmIzM0O0ludGVyc2lsIElTTDYyNzFBIFBvd2VyIHJlZ3VsYXRvclwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNTAyLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo1MDM6Y29uZmlnIFJFR1VMQVRPUl9GUDk5MzFcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNTA0LVx0dHJpc3RhdGUgXCYjMzQ7Rml0aVBvd2VyIEZQOTkzMS9KRDk5MzAgRVBEIHJlZ3VsYXRvclwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNTEyLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo1MTM6Y29uZmlnIFJFR1VMQVRPUl9MTTM2M1hcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNTE0LVx0dHJpc3RhdGUgXCYjMzQ7VEkgTE0zNjNYIHZvbHRhZ2UgcmVndWxhdG9yc1wmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNTIxLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo1MjI6Y29uZmlnIFJFR1VMQVRPUl9MT0NITkFHQVJcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNTIzLVx0dHJpc3RhdGUgXCYjMzQ7Q2lycnVzIExvZ2ljIExvY2huYWdhciByZWd1bGF0b3IgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy01MjgtXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjUyOTpjb25maWcgUkVHVUxBVE9SX0xQMzk3MVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy01MzAtXHR0cmlzdGF0ZSBcJiMzNDtOYXRpb25hbCBTZW1pY29uZHVjdG9ycyBMUDM5NzEgUE1JQyByZWd1bGF0b3IgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy01MzUtXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjUzNjpjb25maWcgUkVHVUxBVE9SX0xQMzk3MlxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy01MzctXHR0cmlzdGF0ZSBcJiMzNDtOYXRpb25hbCBTZW1pY29uZHVjdG9ycyBMUDM5NzIgUE1JQyByZWd1bGF0b3IgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy01NDItXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjU0Mzpjb25maWcgUkVHVUxBVE9SX0xQODcyWFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy01NDQtXHR0cmlzdGF0ZSBcJiMzNDtUSS9OYXRpb25hbCBTZW1pY29uZHVjdG9yIExQODcyMC9MUDg3MjUgdm9sdGFnZSByZWd1bGF0b3JzXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy01NDktXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjU1MDpjb25maWcgUkVHVUxBVE9SX0xQODczWFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy01NTEtXHR0cmlzdGF0ZSBcJiMzNDtUSSBMUDg3M1ggUG93ZXIgcmVndWxhdG9yc1wmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNTU4LVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo1NTk6Y29uZmlnIFJFR1VMQVRPUl9MUDg3NTVcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNTYwLVx0dHJpc3RhdGUgXCYjMzQ7VEkgTFA4NzU1IEhpZ2ggUGVyZm9ybWFuY2UgUE1VIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNTY3LVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo1Njg6Y29uZmlnIFJFR1VMQVRPUl9MUDg3NTY1XG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTU2OS1cdHRyaXN0YXRlIFwmIzM0O1RJIExQODc1NjUgUG93ZXIgcmVndWxhdG9yc1wmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNTc1LVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo1NzY6Y29uZmlnIFJFR1VMQVRPUl9MUDg3ODhcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNTc3LVx0dHJpc3RhdGUgXCYjMzQ7VEkgTFA4Nzg4IFBvd2VyIFJlZ3VsYXRvcnNcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTU4MS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NTgyOmNvbmZpZyBSRUdVTEFUT1JfTFRDMzU4OVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy01ODMtXHR0cmlzdGF0ZSBcJiMzNDtMVEMzNTg5IDgtb3V0cHV0IHZvbHRhZ2UgcmVndWxhdG9yXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy01ODktXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjU5MDpjb25maWcgUkVHVUxBVE9SX0xUQzM2NzZcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNTkxLVx0dHJpc3RhdGUgXCYjMzQ7TFRDMzY3NiA4LW91dHB1dCB2b2x0YWdlIHJlZ3VsYXRvclwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNTk3LVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo1OTg6Y29uZmlnIFJFR1VMQVRPUl9NQVgxNDU3N1xuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy01OTktXHR0cmlzdGF0ZSBcJiMzNDtNYXhpbSAxNDU3Ny83NzgzNiByZWd1bGF0b3JcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTYwNS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NjA2OmNvbmZpZyBSRUdVTEFUT1JfTUFYMTU4NlxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy02MDctXHR0cmlzdGF0ZSBcJiMzNDtNYXhpbSAxNTg2LzE1ODcgdm9sdGFnZSByZWd1bGF0b3JcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTYxMy1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NjE0OmNvbmZpZyBSRUdVTEFUT1JfTUFYNTk3MFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy02MTUtXHR0cmlzdGF0ZSBcJiMzNDtNYXhpbSA1OTcwLzU5NzggcG93ZXIgc3dpdGNoIGFuZCBtb25pdG9yXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy02MjMtXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjYyNDpjb25maWcgUkVHVUxBVE9SX01BWDc3NTAzXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTYyNS1cdHRyaXN0YXRlIFwmIzM0O0FuYWxvZyBEZXZpY2VzIE1BWDc3NTAzIFJlZ3VsYXRvclwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNjMzLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo2MzQ6Y29uZmlnIFJFR1VMQVRPUl9NQVg3NzU0MVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy02MzUtXHR0cmlzdGF0ZSBcJiMzNDtBbmFsb2cgRGV2aWNlcyBNQVg3NzU0MS83NzU0MCBSZWd1bGF0b3JcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTY0NC1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NjQ1OmNvbmZpZyBSRUdVTEFUT1JfTUFYNzc2MjBcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNjQ2LVx0dHJpc3RhdGUgXCYjMzQ7TWF4aW0gNzc2MjAvTUFYMjAwMjQgdm9sdGFnZSByZWd1bGF0b3JcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTY1My1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NjU0OmNvbmZpZyBSRUdVTEFUT1JfTUFYNzc2NTBcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNjU1LVx0dHJpc3RhdGUgXCYjMzQ7TWF4aW0gTUFYNzc2NTAvNzc2NTEgcmVndWxhdG9yIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTY2MS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NjYyOmNvbmZpZyBSRUdVTEFUT1JfTUFYNzc2NzVcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNjYzLVx0dHJpc3RhdGUgXCYjMzQ7TWF4aW0gTUFYNzc2NzUgcmVndWxhdG9yIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNjcwLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo2NzE6Y29uZmlnIFJFR1VMQVRPUl9NQVg3Nzg1N1xuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy02NzItXHR0cmlzdGF0ZSBcJiMzNDtBREkgTUFYNzc4NTcvTUFYNzc4MzEgcmVndWxhdG9yIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTY4MC1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NjgxOmNvbmZpZyBSRUdVTEFUT1JfTUFYODY0OVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy02ODItXHR0cmlzdGF0ZSBcJiMzNDtNYXhpbSA4NjQ5IHZvbHRhZ2UgcmVndWxhdG9yXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy02ODgtXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjY4OTpjb25maWcgUkVHVUxBVE9SX01BWDg2NjBcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNjkwLVx0dHJpc3RhdGUgXCYjMzQ7TWF4aW0gODY2MC84NjYxIHZvbHRhZ2UgcmVndWxhdG9yXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy02OTUtXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjY5Njpjb25maWcgUkVHVUxBVE9SX01BWDg4OTNcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNjk3LVx0dHJpc3RhdGUgXCYjMzQ7TWF4aW0gODg5MyB2b2x0YWdlIHJlZ3VsYXRvclwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNzAzLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo3MDQ6Y29uZmlnIFJFR1VMQVRPUl9NQVg4OTA3XG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTcwNS1cdHRyaXN0YXRlIFwmIzM0O01heGltIDg5MDcgdm9sdGFnZSByZWd1bGF0b3JcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTcxMS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NzEyOmNvbmZpZyBSRUdVTEFUT1JfTUFYODkyNVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy03MTMtXHR0cmlzdGF0ZSBcJiMzNDtNYXhpbSBNQVg4OTI1IFBvd2VyIE1hbmFnZW1lbnQgSUNcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTcxNy1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NzE4OmNvbmZpZyBSRUdVTEFUT1JfTUFYODk1MlxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy03MTktXHR0cmlzdGF0ZSBcJiMzNDtNYXhpbSBNQVg4OTUyIFBvd2VyIE1hbmFnZW1lbnQgSUNcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTcyNS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NzI2OmNvbmZpZyBSRUdVTEFUT1JfTUFYODk3M1xuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy03MjctXHR0cmlzdGF0ZSBcJiMzNDtNYXhpbSBNQVg4OTczQSB2b2x0YWdlIHJlZ3VsYXRvclwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNzM2LVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo3Mzc6Y29uZmlnIFJFR1VMQVRPUl9NQVg4OTk3XG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTczOC1cdHRyaXN0YXRlIFwmIzM0O01heGltIDg5OTcvODk2NiByZWd1bGF0b3JcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTc0NS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NzQ2OmNvbmZpZyBSRUdVTEFUT1JfTUFYODk5OFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy03NDctXHR0cmlzdGF0ZSBcJiMzNDtNYXhpbSA4OTk4IHZvbHRhZ2UgcmVndWxhdG9yXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy03NTMtXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjc1NDpjb25maWcgUkVHVUxBVE9SX01BWDIwMDg2XG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTc1NS1cdHRyaXN0YXRlIFwmIzM0O01heGltIE1BWDIwMDg2LU1BWDIwMDg5IENhbWVyYSBQb3dlciBQcm90ZWN0b3JzXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy03NjItXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjc2Mzpjb25maWcgUkVHVUxBVE9SX01BWDIwNDExXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTc2NC1cdHRyaXN0YXRlIFwmIzM0O01heGltIE1BWDIwNDExIEhpZ2gtRWZmaWNpZW5jeSBTaW5nbGUgU3RlcC1Eb3duIENvbnZlcnRlclwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNzcwLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo3NzE6Y29uZmlnIFJFR1VMQVRPUl9NQVg3NzY4NlxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy03NzItXHR0cmlzdGF0ZSBcJiMzNDtNYXhpbSA3NzY4NiByZWd1bGF0b3JcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTc3OC1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6Nzc5OmNvbmZpZyBSRUdVTEFUT1JfTUFYNzc2OTNcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNzgwLVx0dHJpc3RhdGUgXCYjMzQ7TWF4aW0gNzc2OTMvNzc4NDMgcmVndWxhdG9yXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy03ODctXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjc4ODpjb25maWcgUkVHVUxBVE9SX01BWDc3ODAyXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTc4OS1cdHRyaXN0YXRlIFwmIzM0O01heGltIDc3ODAyIHJlZ3VsYXRvclwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNzk2LVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo3OTc6Y29uZmlnIFJFR1VMQVRPUl9NQVg3NzgyNlxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy03OTgtXHR0cmlzdGF0ZSBcJiMzNDtNYXhpbSA3NzgyNiByZWd1bGF0b3JcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTgwNi1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6ODA3OmNvbmZpZyBSRUdVTEFUT1JfTUFYNzc4MzhcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctODA4LVx0dHJpc3RhdGUgXCYjMzQ7TWF4aW0gNzc4MzggcmVndWxhdG9yXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy04MTUtXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjgxNjpjb25maWcgUkVHVUxBVE9SX01DMTNYWFhfQ09SRVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy04MTctXHR0cmlzdGF0ZVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy04MTgtXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjgxOTpjb25maWcgUkVHVUxBVE9SX01DMTM3ODNcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctODIwLVx0dHJpc3RhdGUgXCYjMzQ7RnJlZXNjYWxlIE1DMTM3ODMgcmVndWxhdG9yIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctODI2LVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo4Mjc6Y29uZmlnIFJFR1VMQVRPUl9NQzEzODkyXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTgyOC1cdHRyaXN0YXRlIFwmIzM0O0ZyZWVzY2FsZSBNQzEzODkyIHJlZ3VsYXRvciBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTgzNC1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6ODM1OmNvbmZpZyBSRUdVTEFUT1JfTUNQMTY1MDJcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctODM2LVx0dHJpc3RhdGUgXCYjMzQ7TWljcm9jaGlwIE1DUDE2NTAyIFBNSUNcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTg0NC1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6ODQ1OmNvbmZpZyBSRUdVTEFUT1JfTVA1NDE2XG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTg0Ni1cdHRyaXN0YXRlIFwmIzM0O01vbm9saXRoaWMgTVA1NDE2IFBNSUNcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTg1NC1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6ODU1OmNvbmZpZyBSRUdVTEFUT1JfTVA4ODU5XG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTg1Ni1cdHRyaXN0YXRlIFwmIzM0O01QUyBNUDg4NTkgcmVndWxhdG9yIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctODY1LVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo4NjY6Y29uZmlnIFJFR1VMQVRPUl9NUDg4NlhcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctODY3LVx0dHJpc3RhdGUgXCYjMzQ7TVBTIE1QODg2OSByZWd1bGF0b3IgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy04NzItXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjg3Mzpjb25maWcgUkVHVUxBVE9SX01QUTc5MjBcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctODc0LVx0dHJpc3RhdGUgXCYjMzQ7TW9ub2xpdGhpYyBNUFE3OTIwIFBNSUNcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTg4Mi1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6ODgzOmNvbmZpZyBSRUdVTEFUT1JfTVQ2MzExXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTg4NC1cdHRyaXN0YXRlIFwmIzM0O01lZGlhVGVrIE1UNjMxMSBQTUlDXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy04OTItXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjg5Mzpjb25maWcgUkVHVUxBVE9SX01UNjMxNVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy04OTQtXHR0cmlzdGF0ZSBcJiMzNDtNZWRpYVRlayBNVDYzMTUgUE1JQ1wmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctOTAyLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo5MDM6Y29uZmlnIFJFR1VMQVRPUl9NVDYzMTZcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctOTA0LVx0dHJpc3RhdGUgXCYjMzQ7TVQ2MzE2IFNQTUkgUE1JQyByZWd1bGF0b3IgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy05MTItXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjkxMzpjb25maWcgUkVHVUxBVE9SX01UNjMyM1xuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy05MTQtXHR0cmlzdGF0ZSBcJiMzNDtNZWRpYVRlayBNVDYzMjMgUE1JQ1wmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctOTIxLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo5MjI6Y29uZmlnIFJFR1VMQVRPUl9NVDYzMzFcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctOTIzLVx0dHJpc3RhdGUgXCYjMzQ7TWVkaWFUZWsgTVQ2MzMxIFBNSUNcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTkzMC1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6OTMxOmNvbmZpZyBSRUdVTEFUT1JfTVQ2MzMyXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTkzMi1cdHRyaXN0YXRlIFwmIzM0O01lZGlhVGVrIE1UNjMzMiBQTUlDXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy05MzktXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjk0MDpjb25maWcgUkVHVUxBVE9SX01UNjM1N1xuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy05NDEtXHR0cmlzdGF0ZSBcJiMzNDtNZWRpYVRlayBNVDYzNTcgUE1JQ1wmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctOTQ4LVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo5NDk6Y29uZmlnIFJFR1VMQVRPUl9NVDYzNThcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctOTUwLVx0dHJpc3RhdGUgXCYjMzQ7TWVkaWFUZWsgTVQ2MzU4IFBNSUNcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTk1Ny1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6OTU4OmNvbmZpZyBSRUdVTEFUT1JfTVQ2MzU5XG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTk1OS1cdHRyaXN0YXRlIFwmIzM0O01lZGlhVGVrIE1UNjM1OSBQTUlDXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy05NjYtXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjk2Nzpjb25maWcgUkVHVUxBVE9SX01UNjM2MFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy05NjgtXHR0cmlzdGF0ZSBcJiMzNDtNVDYzNjAgU3ViUE1JQyBSZWd1bGF0b3JcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTk3NS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6OTc2OmNvbmZpZyBSRUdVTEFUT1JfTVQ2MzYzXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTk3Ny1cdHRyaXN0YXRlIFwmIzM0O01UNjM2MyBTUE1JIFBNSUMgcmVndWxhdG9yIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctOTg2LVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo5ODc6Y29uZmlnIFJFR1VMQVRPUl9NVDYzNzBcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctOTg4LVx0dHJpc3RhdGUgXCYjMzQ7TVQ2MzcwIFN1YlBNSUMgUmVndWxhdG9yXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy05OTQtXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjk5NTpjb25maWcgUkVHVUxBVE9SX01UNjM4MFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy05OTYtXHR0cmlzdGF0ZSBcJiMzNDtNZWRpYVRlayBNVDYzODAgUE1JQ1wmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTAwMy1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MTAwNDpjb25maWcgUkVHVUxBVE9SX01UNjM5N1xuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xMDA1LVx0dHJpc3RhdGUgXCYjMzQ7TWVkaWFUZWsgTVQ2Mzk3IFBNSUNcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTEwMTItXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjEwMTM6Y29uZmlnIFJFR1VMQVRPUl9NVEtfRFZGU1JDXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTEwMTQtXHR0cmlzdGF0ZSBcJiMzNDtNZWRpYVRlayBEVkZTUkMgcmVndWxhdG9yIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTAyMi1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MTAyMzpjb25maWcgUkVHVUxBVE9SX1BBTE1BU1xuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xMDI0LVx0dHJpc3RhdGUgXCYjMzQ7VEkgUGFsbWFzIFBNSUMgUmVndWxhdG9yc1wmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTAzNC1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MTAzNTpjb25maWcgUkVHVUxBVE9SX1BCSUFTXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTEwMzYtXHR0cmlzdGF0ZSBcJiMzNDtQQklBUyBPTUFQIHJlZ3VsYXRvciBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTEwNDMtXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjEwNDQ6Y29uZmlnIFJFR1VMQVRPUl9QQ0E5NDUwXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTEwNDUtXHR0cmlzdGF0ZSBcJiMzNDtOWFAgUENBOTQ1MEEvUENBOTQ1MEIvUENBOTQ1MEMgcmVndWxhdG9yIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTA1MS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MTA1Mjpjb25maWcgUkVHVUxBVE9SX1BGOTQ1M1xuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xMDUzLVx0dHJpc3RhdGUgXCYjMzQ7TlhQIFBGOTQ1MyByZWd1bGF0b3IgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xMDU4LVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzoxMDU5OmNvbmZpZyBSRUdVTEFUT1JfUEYwOTAwXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTEwNjAtXHR0cmlzdGF0ZSBcJiMzNDtOWFAgUEYwOTAwL1BGMDkwMS9QRjA5WFggcmVndWxhdG9yIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTA2Ni1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MTA2Nzpjb25maWcgUkVHVUxBVE9SX1BGNTMwWFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xMDY4LVx0dHJpc3RhdGUgXCYjMzQ7TlhQIFBGNTMwMC9QRjUzMDEvUEY1MzAyIHJlZ3VsYXRvciBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTEwNzgtXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjEwNzk6Y29uZmlnIFJFR1VMQVRPUl9QRjhYMDBcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTA4MC1cdHRyaXN0YXRlIFwmIzM0O05YUCBQRjgxMDAvUEY4MTIxQS9QRjgyMDAgcmVndWxhdG9yIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTA5MC1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MTA5MTpjb25maWcgUkVHVUxBVE9SX1BGVVpFMTAwXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTEwOTItXHR0cmlzdGF0ZSBcJiMzNDtGcmVlc2NhbGUgUEZVWkUxMDAvMjAwLzMwMDAvMzAwMSByZWd1bGF0b3IgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xMDk4LVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzoxMDk5OmNvbmZpZyBSRUdVTEFUT1JfUFY4ODA2MFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xMTAwLVx0dHJpc3RhdGUgXCYjMzQ7UG93ZXJ2ZW50dXJlIFNlbWljb25kdWN0b3IgUFY4ODA2MCByZWd1bGF0b3JcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTExMDYtXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjExMDc6Y29uZmlnIFJFR1VMQVRPUl9QVjg4MDgwXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTExMDgtXHR0cmlzdGF0ZSBcJiMzNDtQb3dlcnZlbnR1cmUgU2VtaWNvbmR1Y3RvciBQVjg4MDgwIHJlZ3VsYXRvclwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTExMy1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MTExNDpjb25maWcgUkVHVUxBVE9SX1BWODgwOTBcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTExNS1cdHRyaXN0YXRlIFwmIzM0O1Bvd2VydmVudHVyZSBTZW1pY29uZHVjdG9yIFBWODgwOTAgcmVndWxhdG9yXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xMTIxLVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNzA1CgkJCQkJCQlvdXRwdXQ6IDI5MwoJCQkJCQkJdGhvdWdodHM6IDMxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlIENoYW5nZXMqKgoKT2theSwgYWZ0ZXIgcmV2aWV3aW5nIHRoaXMsIG15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBjb25maXJtZWQ6IGBSRUdVTEFUT1JgIGlzIGluZGVlZCB0aGUgY29ycmVjdCBjb21wb25lbnQgdG8gZm9jdXMgb24gaGVyZS4gVGhlIGNoYW5nZXMgYXJlIGNlbnRlcmVkIGFyb3VuZCB0aGUgUFNFIGNvbnRyb2xsZXImIzM5O3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgUEhZIGRldmljZSwgaW50cm9kdWNpbmcgYSBuZXcgbG9ja2luZyBtZWNoYW5pc20gKGBwaHlfcHNlX2xvY2tgKSBhbmQgYSBub3RpZmllciAoYHBoeV9wc2Vfbm90aWZpZXJgKSB0byBtYW5hZ2UgUFNFIGNvbnRyb2xsZXIgcmVnaXN0cmF0aW9uIGFuZCB1bnJlZ2lzdHJhdGlvbi4gVGhpcyBpbXBhY3RzIGJvdGggdGhlIGNvcmUgUEhZIGxpYnJhcnkgYW5kIGV0aHRvb2wsIGFuZCBzaW5jZSBuZXRsaW5rIGFuZCBQSFkgZGV2aWNlIHJlZ2lzdHJhdGlvbiBwYXRocyBhcmUgaW52b2x2ZWQsIHRoZSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UgaXMgZGVmaW5pdGVseSBwcmVzZW50IGluIHZpcnR1YWxpemVkIHNldHVwcy4KClRoZSBrZXkgY29uZmlndXJhdGlvbnMgdG8gY29uc2lkZXIgaGVyZSBhcmU6IGBQU0VfQ09OVFJPTExFUmAsIGBQU0VfUkVHVUxBVE9SYCwgYFJFR1VMQVRPUmAsIGBTRlBgLCBhbmQgYEZXTk9ERV9NRElPYC4gVGhlc2UgYWxsIHNlZW0gdG8gYmUgcmVsZXZhbnQgdG8gdGhlIGNoYW5nZXMgYmVpbmcgaW50cm9kdWNlZC4KCkkgd2VudCB0aHJvdWdoIHRoZSBgRm9jdXNTeW1ib2xzYCB0byBkb3VibGUtY2hlY2sgbXkgdW5kZXJzdGFuZGluZyBhbmQgYWxsIG9mIHRoZW0gLSBgcGh5X3BzZV9jb250cm9sX2xvY2tgLCBgcGh5X3BzZV9jb250cm9sX3VubG9ja2AsIGBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZGAsIGBwaHlfZGV2aWNlX3JlZ2lzdGVyYCwgYHBoeV9kZXZpY2VfcmVtb3ZlYCwgYHBzZV9yZWdpc3Rlcl9ub3RpZmllcmAsIGBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcmAsIGBwc2VfY29udHJvbGxlcl9yZWdpc3RlcmAsIGBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyYCwgYHBzZV9jb250cm9sX21hdGNoZXNfcGNkZXZgLCBgZXRobmxfc2V0X3BzZWAsIGBwc2VfcHJlcGFyZV9kYXRhYCwgYHBoeV9wc2VfYXR0YWNoX29uZWAsIGBwaHlfcHNlX2RldGFjaF9vbmVgLCBhbmQgYHBoeV9wc2Vfbm90aWZpZXJfZXZlbnRgIC0gYWxsIHNlZW0gdmFsaWQgYW5kIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIG5ldyBsb2NraW5nIGFuZCBub3RpZmljYXRpb24gbWVjaGFuaXNtcy4KCkFscmlnaHQsIEkmIzM5O20gY29uZmlkZW50IGluIHRoaXMgYW5hbHlzaXMuIFRpbWUgdG8gZmluYWxpemUgdGhlIHJlc3VsdHMgYW5kIG1vdmUgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQU0VfQ09OVFJPTExFUiYjMzQ7LAogICAgJiMzNDtQU0VfUkVHVUxBVE9SJiMzNDssCiAgICAmIzM0O1JFR1VMQVRPUiYjMzQ7LAogICAgJiMzNDtTRlAmIzM0OywKICAgICYjMzQ7RldOT0RFX01ESU8mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwaHlfcHNlX2NvbnRyb2xfbG9jayYjMzQ7LAogICAgJiMzNDtwaHlfcHNlX2NvbnRyb2xfdW5sb2NrJiMzNDssCiAgICAmIzM0O3BoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkJiMzNDssCiAgICAmIzM0O3BoeV9kZXZpY2VfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7cGh5X2RldmljZV9yZW1vdmUmIzM0OywKICAgICYjMzQ7cHNlX3JlZ2lzdGVyX25vdGlmaWVyJiMzNDssCiAgICAmIzM0O3BzZV91bnJlZ2lzdGVyX25vdGlmaWVyJiMzNDssCiAgICAmIzM0O3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O3BzZV9jb250cm9sbGVyX3VucmVnaXN0ZXImIzM0OywKICAgICYjMzQ7cHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldiYjMzQ7LAogICAgJiMzNDtldGhubF9zZXRfcHNlJiMzNDssCiAgICAmIzM0O3BzZV9wcmVwYXJlX2RhdGEmIzM0OywKICAgICYjMzQ7cGh5X3BzZV9hdHRhY2hfb25lJiMzNDssCiAgICAmIzM0O3BoeV9wc2VfZGV0YWNoX29uZSYjMzQ7LAogICAgJiMzNDtwaHlfcHNlX25vdGlmaWVyX2V2ZW50JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgaG93IHRoZSBQU0UgY29udHJvbGxlciBpcyBhdHRhY2hlZCB0byB0aGUgUEhZIGRldmljZSwgaW50cm9kdWNpbmcgYSBuZXcgbG9jayAoYHBoeV9wc2VfbG9ja2ApIGFuZCBhIG5vdGlmaWVyIChgcGh5X3BzZV9ub3RpZmllcmApIHRvIGhhbmRsZSBQU0UgY29udHJvbGxlciByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uLiBJdCBhbHNvIG1vZGlmaWVzIHRoZSBldGh0b29sIFBTRSBuZXRsaW5rIGludGVyZmFjZSB0byB1c2UgdGhlIG5ldyBsb2NrLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCB0aGUgY29yZSBQSFkgbGlicmFyeSBhbmQgZXRodG9vbCwgYW5kIGFyZSByZWFjaGFibGUgdmlhIG5ldGxpbmsgYW5kIFBIWSBkZXZpY2UgcmVnaXN0cmF0aW9uIHBhdGhzLCB3aGljaCBjYW4gYmUgdHJpZ2dlcmVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFNFX0NPTlRST0xMRVImIzM0OywKICAgICYjMzQ7UFNFX1JFR1VMQVRPUiYjMzQ7LAogICAgJiMzNDtSRUdVTEFUT1ImIzM0OywKICAgICYjMzQ7U0ZQJiMzNDssCiAgICAmIzM0O0ZXTk9ERV9NRElPJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGh5X3BzZV9jb250cm9sX2xvY2smIzM0OywKICAgICYjMzQ7cGh5X3BzZV9jb250cm9sX3VubG9jayYjMzQ7LAogICAgJiMzNDtwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZCYjMzQ7LAogICAgJiMzNDtwaHlfZGV2aWNlX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O3BoeV9kZXZpY2VfcmVtb3ZlJiMzNDssCiAgICAmIzM0O3BzZV9yZWdpc3Rlcl9ub3RpZmllciYjMzQ7LAogICAgJiMzNDtwc2VfdW5yZWdpc3Rlcl9ub3RpZmllciYjMzQ7LAogICAgJiMzNDtwc2VfY29udHJvbGxlcl9yZWdpc3RlciYjMzQ7LAogICAgJiMzNDtwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyJiMzNDssCiAgICAmIzM0O3BzZV9jb250cm9sX21hdGNoZXNfcGNkZXYmIzM0OywKICAgICYjMzQ7ZXRobmxfc2V0X3BzZSYjMzQ7LAogICAgJiMzNDtwc2VfcHJlcGFyZV9kYXRhJiMzNDssCiAgICAmIzM0O3BoeV9wc2VfYXR0YWNoX29uZSYjMzQ7LAogICAgJiMzNDtwaHlfcHNlX2RldGFjaF9vbmUmIzM0OywKICAgICYjMzQ7cGh5X3BzZV9ub3RpZmllcl9ldmVudCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIGhvdyB0aGUgUFNFIGNvbnRyb2xsZXIgaXMgYXR0YWNoZWQgdG8gdGhlIFBIWSBkZXZpY2UsIGludHJvZHVjaW5nIGEgbmV3IGxvY2sgKGBwaHlfcHNlX2xvY2tgKSBhbmQgYSBub3RpZmllciAoYHBoeV9wc2Vfbm90aWZpZXJgKSB0byBoYW5kbGUgUFNFIGNvbnRyb2xsZXIgcmVnaXN0cmF0aW9uIGFuZCB1bnJlZ2lzdHJhdGlvbi4gSXQgYWxzbyBtb2RpZmllcyB0aGUgZXRodG9vbCBQU0UgbmV0bGluayBpbnRlcmZhY2UgdG8gdXNlIHRoZSBuZXcgbG9jay4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIGNvcmUgUEhZIGxpYnJhcnkgYW5kIGV0aHRvb2wsIGFuZCBhcmUgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIGFuZCBQSFkgZGV2aWNlIHJlZ2lzdHJhdGlvbiBwYXRocywgd2hpY2ggY2FuIGJlIHRyaWdnZXJlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjEyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6MTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyB0aGUgbGlmZWN5Y2xlIGFuZCBzeW5jaHJvbml6YXRpb24gb2YgUFNFIChQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQpIGNvbnRyb2xsZXJzIGF0dGFjaGVkIHRvIFBIWSBkZXZpY2VzLiBJdCBpbnRyb2R1Y2VzIGEgbm90aWZpZXIgY2hhaW4gKGBwaHlfcHNlX25vdGlmaWVyYCkgYW5kIGEgbXV0ZXggKGBwaHlfcHNlX2xvY2tgKSB0byBzYWZlbHkgYXR0YWNoIGFuZCBkZXRhY2ggYHBoeWRldi1cdTAwM2Vwc2VjYCB3aGVuIFBTRSBjb250cm9sbGVycyBhcmUgcmVnaXN0ZXJlZCBvciB1bnJlZ2lzdGVyZWQsIHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzLiBJdCBhbHNvIHdyYXBzIGV0aHRvb2wgUFNFIG9wZXJhdGlvbnMgd2l0aCB0aGUgbmV3IGxvY2suXG5cblRoZXNlIGNoYW5nZXMgcHJpbWFyaWx5IGFkZHJlc3Mgb2JqZWN0IGxpZmVjeWNsZSBtYW5hZ2VtZW50LCBsb2NraW5nLCBhbmQgc3luY2hyb25pemF0aW9uLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbGlrZWx5IG1hbmlmZXN0IGFzIHVzZS1hZnRlci1mcmVlLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBkZWFkbG9ja3MsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGludm9sdmUgY29tcGxleCBidWZmZXIgYWxsb2NhdGlvbnMgb3IgbW9kaWZpY2F0aW9ucyB0byBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDY2OGQwOTNiMDlmZjBlNDJiYjRhYjM5OWQxNGUyYWEwMDA3YmE1Y2QKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAyNiAyMjoxMDozOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYyBiL2RyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYwppbmRleCBiYTcwOTE1MTgyNjU0Li43YmQ5NzliNTlmNDk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jCkBAIC0xMSwzMyAmIzQzOzExLDExIEBACiAjaW5jbHVkZSAmbHQ7bGludXgvZndub2RlX21kaW8uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9vZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwotI2luY2x1ZGUgJmx0O2xpbnV4L3BzZS1wZC9wc2UuaCZndDsKIAogTU9EVUxFX0FVVEhPUigmIzM0O0NhbHZpbiBKb2huc29uICZsdDtjYWx2aW4uam9obnNvbkBvc3MubnhwLmNvbSZndDsmIzM0Oyk7CiBNT0RVTEVfTElDRU5TRSgmIzM0O0dQTCYjMzQ7KTsKIE1PRFVMRV9ERVNDUklQVElPTigmIzM0O0ZXTk9ERSBNRElPIGJ1cyAoRXRoZXJuZXQgUEhZKSBhY2Nlc3NvcnMmIzM0Oyk7CiAKLXN0YXRpYyBzdHJ1Y3QgcHNlX2NvbnRyb2wgKgotZndub2RlX2ZpbmRfcHNlX2NvbnRyb2woc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSwKLQkJCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCi17Ci0Jc3RydWN0IHBzZV9jb250cm9sICpwc2VjOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7Ci0KLQlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BTRV9DT05UUk9MTEVSKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlucCA9IHRvX29mX25vZGUoZndub2RlKTsKLQlpZiAoIW5wKQotCQlyZXR1cm4gTlVMTDsKLQotCXBzZWMgPSBvZl9wc2VfY29udHJvbF9nZXQobnAsIHBoeWRldik7Ci0JaWYgKFBUUl9FUlIocHNlYykgPT0gLUVOT0VOVCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlyZXR1cm4gcHNlYzsKLX0KLQogc3RhdGljIHN0cnVjdCBtaWlfdGltZXN0YW1wZXIgKgogZndub2RlX2ZpbmRfbWlpX3RpbWVzdGFtcGVyKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpCiB7CkBAIC0xMTgsNyAmIzQzOzk2LDYgQEAgaW50IGZ3bm9kZV9tZGlvYnVzX3JlZ2lzdGVyX3BoeShzdHJ1Y3QgbWlpX2J1cyAqYnVzLAogCQkJCXN0cnVjdCBmd25vZGVfaGFuZGxlICpjaGlsZCwgdTMyIGFkZHIpCiB7CiAJc3RydWN0IG1paV90aW1lc3RhbXBlciAqbWlpX3RzID0gTlVMTDsKLQlzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMgPSBOVUxMOwogCXN0cnVjdCBwaHlfZGV2aWNlICpwaHk7CiAJYm9vbCBpc19jNDU7CiAJdTMyIHBoeV9pZDsKQEAgLTE1OSwxNCAmIzQzOzEzNiw2IEBAIGludCBmd25vZGVfbWRpb2J1c19yZWdpc3Rlcl9waHkoc3RydWN0IG1paV9idXMgKmJ1cywKIAkJCWdvdG8gY2xlYW5fcGh5OwogCX0KIAotCXBzZWMgPSBmd25vZGVfZmluZF9wc2VfY29udHJvbChjaGlsZCwgcGh5KTsKLQlpZiAoSVNfRVJSKHBzZWMpKSB7Ci0JCXJjID0gUFRSX0VSUihwc2VjKTsKLQkJZ290byB1bnJlZ2lzdGVyX3BoeTsKLQl9Ci0KLQlwaHktJmd0O3BzZWMgPSBwc2VjOwotCiAJLyogcGh5LSZndDttaWlfdHMgbWF5IGFscmVhZHkgYmUgZGVmaW5lZCBieSB0aGUgUEhZIGRyaXZlci4gQQogCSAqIG1paV90aW1lc3RhbXBlciBwcm9iZWQgdmlhIHRoZSBkZXZpY2UgdHJlZSB3aWxsIHN0aWxsIGhhdmUKIAkgKiBwcmVjZWRlbmNlLgpAQCAtMTc2LDkgJiM0MzsxNDUsNiBAQCBpbnQgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KHN0cnVjdCBtaWlfYnVzICpidXMsCiAKIAlyZXR1cm4gMDsKIAotdW5yZWdpc3Rlcl9waHk6Ci0JaWYgKGlzX2FjcGlfbm9kZShjaGlsZCkgfHwgaXNfb2Zfbm9kZShjaGlsZCkpCi0JCXBoeV9kZXZpY2VfcmVtb3ZlKHBoeSk7CiBjbGVhbl9waHk6CiAJcGh5X2RldmljZV9mcmVlKHBoeSk7CiBjbGVhbl9taWlfdHM6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYwppbmRleCAwNjE1MjI4NDU5ZWY0Li5kY2ExYjQ1YmJiZDI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMKQEAgLTExMDIsMTEgJiM0MzsxMTAyLDEyOCBAQCBzdHJ1Y3QgcGh5X2RldmljZSAqZ2V0X3BoeV9kZXZpY2Uoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGJvb2wgaXNfYzQ1KQogfQogRVhQT1JUX1NZTUJPTChnZXRfcGh5X2RldmljZSk7CiAKJiM0MzsvKiBTZXJpYWxpc2VzIHBoeWRldi0mZ3Q7cHNlYyBhZ2FpbnN0IHRoZSBQU0Ugbm90aWZpZXIgYW5kIGV0aHRvb2wsIG5vdCBydG5sLiAqLwomIzQzO3N0YXRpYyBERUZJTkVfTVVURVgocGh5X3BzZV9sb2NrKTsKJiM0MzsKJiM0MzsvKiBCZXN0LWVmZm9ydCBhdHRhY2ggb2YgcGh5ZGV2LSZndDtwc2VjIGZyb20gYSBEVCBgcHNlcyA9ICZsdDsmYW1wOy4uLiZndDtgIHBoYW5kbGUuCiYjNDM7ICogQ2FsbGVyIG11c3QgaG9sZCBwaHlfcHNlX2xvY2suIEEgbWlzc2luZyBwaGFuZGxlICgtRU5PRU5UKSBvciBhCiYjNDM7ICogbm90LXlldC1yZWdpc3RlcmVkIGNvbnRyb2xsZXIgKC1FUFJPQkVfREVGRVIpIGlzIHNpbGVudDsgdGhlIG5vdGlmaWVyCiYjNDM7ICogcmV0cmllcyB0aGUgbGF0dGVyIGF0IFBTRV9SRUdJU1RFUkVEIHRpbWUuIEFueSBvdGhlciBlcnJvciBtZWFucyBhIGJyb2tlbgomIzQzOyAqIGJpbmRpbmcgYW5kIGlzIHdhcm5lZCBhYm91dCwgYnV0IGxlZnQgbm9uLWZhdGFsIHNvIHRoZSBwaHkgc3RpbGwgcmVnaXN0ZXJzLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHBoeV90cnlfYXR0YWNoX3BzZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHBzZV9jb250cm9sICpwc2VjOwomIzQzOwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwomIzQzOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7cGh5X3BzZV9sb2NrKTsKJiM0MzsKJiM0MzsJbnAgPSBwaHlkZXYtJmd0O21kaW8uZGV2Lm9mX25vZGU7CiYjNDM7CWlmICghbnApCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmIChwaHlkZXYtJmd0O3BzZWMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXBzZWMgPSBvZl9wc2VfY29udHJvbF9nZXQobnAsIHBoeWRldik7CiYjNDM7CWlmIChJU19FUlIocHNlYykpIHsKJiM0MzsJCWlmIChQVFJfRVJSKHBzZWMpICE9IC1FUFJPQkVfREVGRVIgJmFtcDsmYW1wOyBQVFJfRVJSKHBzZWMpICE9IC1FTk9FTlQpCiYjNDM7CQkJcGh5ZGV2X3dhcm4ocGh5ZGV2LCAmIzM0O2ZhaWxlZCB0byBnZXQgUFNFIGNvbnRyb2w6ICVwZVxuJiMzNDssCiYjNDM7CQkJCSAgICBwc2VjKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlwaHlkZXYtJmd0O3BzZWMgPSBwc2VjOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBoeV9wc2VfYXR0YWNoX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEgX19tYXliZV91bnVzZWQpCiYjNDM7ewomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7cGh5X3BzZV9sb2NrKTsKJiM0MzsKJiM0MzsJaWYgKGRldi0mZ3Q7dHlwZSAhPSAmYW1wO21kaW9fYnVzX3BoeV90eXBlKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXBoeV90cnlfYXR0YWNoX3BzZSh0b19waHlfZGV2aWNlKGRldikpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBwaHlfcHNlX2RldGFjaF9vbmUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYgPSBkYXRhOwomIzQzOwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2OwomIzQzOwlzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWM7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtwaHlfcHNlX2xvY2spOwomIzQzOwomIzQzOwlpZiAoZGV2LSZndDt0eXBlICE9ICZhbXA7bWRpb19idXNfcGh5X3R5cGUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcGh5ZGV2ID0gdG9fcGh5X2RldmljZShkZXYpOwomIzQzOwlwc2VjID0gcGh5ZGV2LSZndDtwc2VjOwomIzQzOwlpZiAoIXBzZWMgfHwgIXBzZV9jb250cm9sX21hdGNoZXNfcGNkZXYocHNlYywgcGNkZXYpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXBoeWRldi0mZ3Q7cHNlYyA9IE5VTEw7CiYjNDM7CXBzZV9jb250cm9sX3B1dChwc2VjKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGh5X3BzZV9ub3RpZmllcl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAomIzQzOwkJCQkgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKGV2ZW50KSB7CiYjNDM7CWNhc2UgUFNFX1JFR0lTVEVSRUQ6CiYjNDM7CQltdXRleF9sb2NrKCZhbXA7cGh5X3BzZV9sb2NrKTsKJiM0MzsJCWJ1c19mb3JfZWFjaF9kZXYoJmFtcDttZGlvX2J1c190eXBlLCBOVUxMLCBOVUxMLAomIzQzOwkJCQkgcGh5X3BzZV9hdHRhY2hfb25lKTsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO3BoeV9wc2VfbG9jayk7CiYjNDM7CQlyZXR1cm4gTk9USUZZX09LOwomIzQzOwljYXNlIFBTRV9VTlJFR0lTVEVSRUQ6CiYjNDM7CQltdXRleF9sb2NrKCZhbXA7cGh5X3BzZV9sb2NrKTsKJiM0MzsJCWJ1c19mb3JfZWFjaF9kZXYoJmFtcDttZGlvX2J1c190eXBlLCBOVUxMLCBkYXRhLAomIzQzOwkJCQkgcGh5X3BzZV9kZXRhY2hfb25lKTsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO3BoeV9wc2VfbG9jayk7CiYjNDM7CQlyZXR1cm4gTk9USUZZX09LOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIE5PVElGWV9ET05FOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcGh5X3BzZV9ub3RpZmllciBfX3JlYWRfbW9zdGx5ID0gewomIzQzOwkubm90aWZpZXJfY2FsbCA9IHBoeV9wc2Vfbm90aWZpZXJfZXZlbnQsCiYjNDM7fTsKJiM0MzsKIC8qKgotICogcGh5X2RldmljZV9yZWdpc3RlciAtIFJlZ2lzdGVyIHRoZSBwaHkgZGV2aWNlIG9uIHRoZSBNRElPIGJ1cwotICogQHBoeWRldjogcGh5X2RldmljZSBzdHJ1Y3R1cmUgdG8gYmUgYWRkZWQgdG8gdGhlIE1ESU8gYnVzCiYjNDM7ICogcGh5X3BzZV9jb250cm9sX2xvY2sgLSBob2xkIHBoeWRldi0mZ3Q7cHNlYyBzdGFibGUgYWdhaW5zdCBQU0UgY29udHJvbGxlciB0ZWFyZG93bgomIzQzOyAqCiYjNDM7ICogVGhlIFBTRV9VTlJFR0lTVEVSRUQgbm90aWZpZXIgZGV0YWNoZXMgcGh5ZGV2LSZndDtwc2VjIGFuZCBkcm9wcyBpdHMgbGFzdAomIzQzOyAqIHJlZmVyZW5jZS4gQ2FsbGVycyB0aGF0IGRlcmVmZXJlbmNlIHBoeWRldi0mZ3Q7cHNlYyAodGhlIGV0aHRvb2wgUFNFIHBhdGhzKSBtdXN0CiYjNDM7ICogaG9sZCB0aGlzIGxvY2sgYWNyb3NzIHRoZSBhY2Nlc3Mgc28gdGhlIGRldGFjaCBjYW5ub3QgcnVuIHVuZGVybmVhdGggdGhlbS4KICAqLwotaW50IHBoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt2b2lkIHBoeV9wc2VfY29udHJvbF9sb2NrKHZvaWQpCiYjNDM7ewomIzQzOwltdXRleF9sb2NrKCZhbXA7cGh5X3BzZV9sb2NrKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocGh5X3BzZV9jb250cm9sX2xvY2spOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHBoeV9wc2VfY29udHJvbF91bmxvY2sgLSByZWxlYXNlIHRoZSBsb2NrIHRha2VuIGJ5IHBoeV9wc2VfY29udHJvbF9sb2NrKCkKJiM0MzsgKi8KJiM0Mzt2b2lkIHBoeV9wc2VfY29udHJvbF91bmxvY2sodm9pZCkKJiM0Mzt7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3BoeV9wc2VfbG9jayk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHBoeV9wc2VfY29udHJvbF91bmxvY2spOwomIzQzOwomIzQzOy8qIENvcmUgcmVnaXN0cmF0aW9uOiBhZGQgdGhlIHBoeSB0byB0aGUgTURJTyBidXMuIERvZXMgbm90IHRvdWNoIHJ0bmwgb3IKJiM0MzsgKiBQU0UuIHBoeWRldi0mZ3Q7cHNlYyBpcyBhdHRhY2hlZCBieSB0aGUgY2FsbGVycyBiZWxvdywgYWZ0ZXIgZGV2aWNlX2FkZCgpCiYjNDM7ICogaGFzIG1hZGUgdGhlIHBoeSB2aXNpYmxlIG9uIG1kaW9fYnVzX3R5cGUsIHNvIHRoYXQgYSBjb25jdXJyZW50IFBTRQomIzQzOyAqIG5vdGlmaWVyIHdhbGsgYW5kIHRoZSBhdHRhY2ggY2FuIG5ldmVyIGxlYXZlIHRoZSBwaHkgdW5hdHRhY2hlZC4gS2VlcGluZwomIzQzOyAqIGRldmljZV9hZGQoKSBvdXQgb2YgcnRubCBhbHNvIGF2b2lkcyBkZWFkbG9ja2luZyB3aGVuIGJpbmRpbmcgYSBwaHkgdGhhdAomIzQzOyAqIGl0c2VsZiBwcm92aWRlcyBhbiBTRlAgY2FnZSAocGh5X3Byb2JlKCkgLSZndDsgcGh5X3NmcF9wcm9iZSgpIC0mZ3Q7CiYjNDM7ICogc2ZwX2J1c19hZGRfdXBzdHJlYW0oKSB0YWtlcyBydG5sKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IF9fcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogewogCWludCBlcnI7CiAKQEAgLTExMzUsMTAgJiM0MzsxMjUyLDU2IEBAIGludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiAgb3V0OgogCS8qIEFzc2VydCB0aGUgcmVzZXQgc2lnbmFsICovCiAJcGh5X2RldmljZV9yZXNldChwaHlkZXYsIDEpOwotCiAJbWRpb2J1c191bnJlZ2lzdGVyX2RldmljZSgmYW1wO3BoeWRldi0mZ3Q7bWRpbyk7CiAJcmV0dXJuIGVycjsKIH0KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZCAtIFJlZ2lzdGVyIHRoZSBwaHkgZGV2aWNlIG9uIHRoZSBNRElPIGJ1cwomIzQzOyAqIEBwaHlkZXY6IHBoeV9kZXZpY2Ugc3RydWN0dXJlIHRvIGJlIGFkZGVkIHRvIHRoZSBNRElPIGJ1cwomIzQzOyAqCiYjNDM7ICogU2FtZSBhcyBwaHlfZGV2aWNlX3JlZ2lzdGVyKCkgYnV0IGNhbGxlciBtdXN0IGFscmVhZHkgaG9sZCBydG5sX2xvY2soKS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCiYjNDM7ICovCiYjNDM7aW50IHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlBU1NFUlRfUlROTCgpOwomIzQzOwomIzQzOwllcnIgPSBfX3BoeV9kZXZpY2VfcmVnaXN0ZXIocGh5ZGV2KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwaHlfcHNlX2xvY2spOwomIzQzOwlwaHlfdHJ5X2F0dGFjaF9wc2UocGh5ZGV2KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cGh5X3BzZV9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wocGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWQpOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHBoeV9kZXZpY2VfcmVnaXN0ZXIgLSBSZWdpc3RlciB0aGUgcGh5IGRldmljZSBvbiB0aGUgTURJTyBidXMKJiM0MzsgKiBAcGh5ZGV2OiBwaHlfZGV2aWNlIHN0cnVjdHVyZSB0byBiZSBhZGRlZCB0byB0aGUgTURJTyBidXMKJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCiYjNDM7ICovCiYjNDM7aW50IHBoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWVyciA9IF9fcGh5X2RldmljZV9yZWdpc3RlcihwaHlkZXYpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3BoeV9wc2VfbG9jayk7CiYjNDM7CXBoeV90cnlfYXR0YWNoX3BzZShwaHlkZXYpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwaHlfcHNlX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiBFWFBPUlRfU1lNQk9MKHBoeV9kZXZpY2VfcmVnaXN0ZXIpOwogCiAvKioKQEAgLTExNTIsNyAmIzQzOzEzMTUsMTUgQEAgRVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX3JlZ2lzdGVyKTsKIHZvaWQgcGh5X2RldmljZV9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIHsKIAl1bnJlZ2lzdGVyX21paV90aW1lc3RhbXBlcihwaHlkZXYtJmd0O21paV90cyk7CiYjNDM7CiYjNDM7CS8qIERldGFjaCBzeW5jaHJvbm91c2x5LCBiZWZvcmUgdGhlIHBoeSBsZWF2ZXMgdGhlIGJ1cywgc28gdGhlIHB1dCBjYW5ub3QKJiM0MzsJICogb3V0bGl2ZSB0aGUgUFNFIGNvbnRyb2xsZXIgKGFuIG9mZi1idXMgYnV0IHN0aWxsLXBpbm5lZCBwaHkgaXMgbWlzc2VkIGJ5CiYjNDM7CSAqIHRoZSBQU0VfVU5SRUdJU1RFUkVEIHdhbGspLiBwaHlfcHNlX2xvY2sgc2VyaWFsaXNlcyBhZ2FpbnN0IHRoYXQgd2Fsay4KJiM0MzsJICovCiYjNDM7CW11dGV4X2xvY2soJmFtcDtwaHlfcHNlX2xvY2spOwogCXBzZV9jb250cm9sX3B1dChwaHlkZXYtJmd0O3BzZWMpOwomIzQzOwlwaHlkZXYtJmd0O3BzZWMgPSBOVUxMOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwaHlfcHNlX2xvY2spOwogCiAJZGV2aWNlX2RlbCgmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXYpOwogCkBAIC0zOTgxLDggJiM0Mzs0MTUyLDE0IEBAIHN0YXRpYyBpbnQgX19pbml0IHBoeV9pbml0KHZvaWQpCiAJaWYgKHJjKQogCQlnb3RvIGVycl9jNDU7CiAKJiM0MzsJcmMgPSBwc2VfcmVnaXN0ZXJfbm90aWZpZXIoJmFtcDtwaHlfcHNlX25vdGlmaWVyKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJZ290byBlcnJfZ2VucGh5OwomIzQzOwogCXJldHVybiAwOwogCiYjNDM7ZXJyX2dlbnBoeToKJiM0MzsJcGh5X2RyaXZlcl91bnJlZ2lzdGVyKCZhbXA7Z2VucGh5X2RyaXZlcik7CiBlcnJfYzQ1OgogCXBoeV9kcml2ZXJfdW5yZWdpc3RlcigmYW1wO2dlbnBoeV9jNDVfZHJpdmVyKTsKIGVycl9ldGh0b29sX3BoeV9vcHM6CkBAIC0zOTk5LDYgJiM0Mzs0MTc2LDcgQEAgc3RhdGljIGludCBfX2luaXQgcGh5X2luaXQodm9pZCkKIAogc3RhdGljIHZvaWQgX19leGl0IHBoeV9leGl0KHZvaWQpCiB7CiYjNDM7CXBzZV91bnJlZ2lzdGVyX25vdGlmaWVyKCZhbXA7cGh5X3BzZV9ub3RpZmllcik7CiAJcGh5X2RyaXZlcl91bnJlZ2lzdGVyKCZhbXA7Z2VucGh5X2M0NV9kcml2ZXIpOwogCXBoeV9kcml2ZXJfdW5yZWdpc3RlcigmYW1wO2dlbnBoeV9kcml2ZXIpOwogCXJ0bmxfbG9jaygpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3NmcC5jIGIvZHJpdmVycy9uZXQvcGh5L3NmcC5jCmluZGV4IDAzYmZkODY0MGRiOTYuLjE4ODY4YmRkNjQ4NTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9zZnAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvc2ZwLmMKQEAgLTIwODMsNyAmIzQzOzIwODMsNyBAQCBzdGF0aWMgaW50IHNmcF9zbV9wcm9iZV9waHkoc3RydWN0IHNmcCAqc2ZwLCBpbnQgYWRkciwgYm9vbCBpc19jNDUpCiAJLyogTWFyayB0aGlzIFBIWSBhcyBiZWluZyBvbiBhIFNGUCBtb2R1bGUgKi8KIAlwaHktJmd0O2lzX29uX3NmcF9tb2R1bGUgPSB0cnVlOwogCi0JZXJyID0gcGh5X2RldmljZV9yZWdpc3RlcihwaHkpOwomIzQzOwllcnIgPSBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZChwaHkpOwogCWlmIChlcnIpIHsKIAkJcGh5X2RldmljZV9mcmVlKHBoeSk7CiAJCWRldl9lcnIoc2ZwLSZndDtkZXYsICYjMzQ7cGh5X2RldmljZV9yZWdpc3RlciBmYWlsZWQ6ICVwZVxuJiMzNDssCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jCmluZGV4IDY5ZGJkYmRlOWQ3MWEuLjYxMTU0MGRmNDNiYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jCkBAIC04LDYgJiM0Mzs4LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9kZXZpY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9ldGh0b29sLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXRodG9vbF9uZXRsaW5rLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L25vdGlmaWVyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9waHkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wc2UtcGQvcHNlLmgmZ3Q7CkBAIC0yMyw2ICYjNDM7MjQsMzkgQEAgc3RhdGljIExJU1RfSEVBRChwc2VfY29udHJvbGxlcl9saXN0KTsKIHN0YXRpYyBERUZJTkVfWEFSUkFZX0FMTE9DKHBzZV9wd19kX21hcCk7CiBzdGF0aWMgREVGSU5FX01VVEVYKHBzZV9wd19kX211dGV4KTsKIAomIzQzO3N0YXRpYyBCTE9DS0lOR19OT1RJRklFUl9IRUFEKHBzZV9jb250cm9sbGVyX25vdGlmaWVyKTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBwc2VfcmVnaXN0ZXJfbm90aWZpZXIgLSByZWdpc3RlciBhIGNhbGxiYWNrIGZvciBQU0UgY29udHJvbGxlciBldmVudHMKJiM0MzsgKiBAbmI6IG5vdGlmaWVyIGJsb2NrIHRvIHJlZ2lzdGVyCiYjNDM7ICoKJiM0MzsgKiBTZWUgZW51bSBwc2VfY29udHJvbGxlcl9ldmVudCBmb3IgZXZlbnRzIGZpcmVkIGFuZCB0aGVpciBzdWJzY3JpYmVyCiYjNDM7ICogY29udHJhY3QuIENhbGxiYWNrcyBydW4gaW4gcHJvY2VzcyBjb250ZXh0OyB0aGV5IG1heSBzbGVlcCwgdGFrZQomIzQzOyAqIHJ0bmwsIGFuZCBjYWxsIG9mX3BzZV9jb250cm9sX2dldCgpLiBUaGUgY2hhaW4gZmlyZXMgc3luY2hyb25vdXNseSwKJiM0MzsgKiBzbyBhIFBTRSBjb250cm9sbGVyIGRyaXZlciYjMzk7cyBwcm9iZS91bmJpbmQgcGF0aCBtdXN0IG5vdCBob2xkIGFueQomIzQzOyAqIHN1Y2ggbG9jayB3aGVuIGNhbGxpbmcgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoKSBvcgomIzQzOyAqIHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXIoKS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS4KJiM0MzsgKi8KJiM0MztpbnQgcHNlX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCiYjNDM7ewomIzQzOwlyZXR1cm4gYmxvY2tpbmdfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJmFtcDtwc2VfY29udHJvbGxlcl9ub3RpZmllciwgbmIpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChwc2VfcmVnaXN0ZXJfbm90aWZpZXIpOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyIC0gdW5yZWdpc3RlciBhIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBjYWxsYmFjawomIzQzOyAqIEBuYjogbm90aWZpZXIgYmxvY2sgcHJldmlvdXNseSBwYXNzZWQgdG8gcHNlX3JlZ2lzdGVyX25vdGlmaWVyKCkKJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS4KJiM0MzsgKi8KJiM0MztpbnQgcHNlX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKJiM0Mzt7CiYjNDM7CXJldHVybiBibG9ja2luZ19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKCZhbXA7cHNlX2NvbnRyb2xsZXJfbm90aWZpZXIsIG5iKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocHNlX3VucmVnaXN0ZXJfbm90aWZpZXIpOwomIzQzOwogLyoqCiAgKiBzdHJ1Y3QgcHNlX2NvbnRyb2wgLSBhIFBTRSBjb250cm9sCiAgKiBAcGNkZXY6IGEgcG9pbnRlciB0byB0aGUgUFNFIGNvbnRyb2xsZXIgZGV2aWNlCkBAIC0xMTA0LDYgJiM0MzsxMTM4LDkgQEAgaW50IHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KQogCWxpc3RfYWRkKCZhbXA7cGNkZXYtJmd0O2xpc3QsICZhbXA7cHNlX2NvbnRyb2xsZXJfbGlzdCk7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7cHNlX2xpc3RfbXV0ZXgpOwogCiYjNDM7CWJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oJmFtcDtwc2VfY29udHJvbGxlcl9ub3RpZmllciwKJiM0MzsJCQkJICAgICBQU0VfUkVHSVNURVJFRCwgcGNkZXYpOwomIzQzOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIpOwpAQCAtMTExNCw2ICYjNDM7MTE1MSw5IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKTsKICAqLwogdm9pZCBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KQogewomIzQzOwlibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZhbXA7cHNlX2NvbnRyb2xsZXJfbm90aWZpZXIsCiYjNDM7CQkJCSAgICAgUFNFX1VOUkVHSVNURVJFRCwgcGNkZXYpOwomIzQzOwogCXBzZV9mbHVzaF9wd19kcyhwY2Rldik7CiAJcHNlX3JlbGVhc2VfcGlzKHBjZGV2KTsKIAlpZiAocGNkZXYtJmd0O2lycSkKQEAgLTE5ODEsMyAmIzQzOzIwMjEsMTcgQEAgYm9vbCBwc2VfaGFzX2MzMyhzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMpCiAJcmV0dXJuIHBzZWMtJmd0O3BjZGV2LSZndDt0eXBlcyAmYW1wOyBFVEhUT09MX1BTRV9DMzM7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChwc2VfaGFzX2MzMyk7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldiAtIFRlc3Qgd2hldGhlciBhIHBzZV9jb250cm9sIHRhcmdldHMgYSBjb250cm9sbGVyCiYjNDM7ICogQHBzZWM6IHBzZV9jb250cm9sIG9idGFpbmVkIGZyb20gb2ZfcHNlX2NvbnRyb2xfZ2V0KCkKJiM0MzsgKiBAcGNkZXY6IFBTRSBjb250cm9sbGVyIHRvIGNvbXBhcmUgYWdhaW5zdAomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAldHJ1ZSBpZiBAcHNlYyB3YXMgb2J0YWluZWQgZnJvbSBAcGNkZXYsICVmYWxzZSBvdGhlcndpc2UuCiYjNDM7ICovCiYjNDM7Ym9vbCBwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2KHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYywKJiM0MzsJCQkgICAgICAgc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gcHNlYy0mZ3Q7cGNkZXYgPT0gcGNkZXY7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHBzZV9jb250cm9sX21hdGNoZXNfcGNkZXYpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmgKaW5kZXggMTk5YTdhYWEzNDFiZi4uNTVhMDA0OWM2YzJiNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BoeS5oCkBAIC0yMTU4LDggJiM0MzsyMTU4LDEyIEBAIHN0cnVjdCBwaHlfZGV2aWNlICpmd25vZGVfcGh5X2ZpbmRfZGV2aWNlKHN0cnVjdCBmd25vZGVfaGFuZGxlICpwaHlfZndub2RlKTsKIHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGVfZ2V0X3BoeV9ub2RlKGNvbnN0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpOwogc3RydWN0IHBoeV9kZXZpY2UgKmdldF9waHlfZGV2aWNlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBib29sIGlzX2M0NSk7CiBpbnQgcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KTsKJiM0MzsvKiBDYWxsZXIgbXVzdCBob2xkIHJ0bmxfbG9jaygpOyBzZWUgcGh5X2RldmljZV9yZWdpc3RlcigpIGZvciB0aGUgcHVibGljIGZvcm0uICovCiYjNDM7aW50IHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpOwogdm9pZCBwaHlfZGV2aWNlX2ZyZWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7CiB2b2lkIHBoeV9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpOwomIzQzO3ZvaWQgcGh5X3BzZV9jb250cm9sX2xvY2sodm9pZCk7CiYjNDM7dm9pZCBwaHlfcHNlX2NvbnRyb2xfdW5sb2NrKHZvaWQpOwogaW50IHBoeV9nZXRfYzQ1X2lkcyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKIGludCBwaHlfaW5pdF9odyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKIGludCBwaHlfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHNlLXBkL3BzZS5oIGIvaW5jbHVkZS9saW51eC9wc2UtcGQvcHNlLmgKaW5kZXggNGU1Njk2Y2ZhZGU3Yy4uZDQzMTBjYTcxYTNlMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wc2UtcGQvcHNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wc2UtcGQvcHNlLmgKQEAgLTIxLDYgJiM0MzsyMSw3IEBAIHN0cnVjdCBuZXRfZGV2aWNlOwogc3RydWN0IHBoeV9kZXZpY2U7CiBzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2Owogc3RydWN0IG5ldGxpbmtfZXh0X2FjazsKJiM0MztzdHJ1Y3Qgbm90aWZpZXJfYmxvY2s7CiAKIC8qIEMzMyBQU0UgZXh0ZW5kZWQgc3RhdGUgYW5kIHN1YnN0YXRlLiAqLwogc3RydWN0IGV0aHRvb2xfYzMzX3BzZV9leHRfc3RhdGVfaW5mbyB7CkBAIC0zMzcsNiAmIzQzOzMzOCwyNCBAQCBlbnVtIHBzZV9idWRnZXRfZXZhbF9zdHJhdGVnaWVzIHsKIAlQU0VfQlVER0VUX0VWQUxfU1RSQVRfRFlOQU1JQwk9IDEgJmx0OyZsdDsgMiwKIH07CiAKJiM0MzsvKioKJiM0MzsgKiBlbnVtIHBzZV9jb250cm9sbGVyX2V2ZW50IC0gUFNFIGNvbnRyb2xsZXIgbGlmZWN5Y2xlIGV2ZW50cwomIzQzOyAqCiYjNDM7ICogRXZlbnQgZGF0YSBpbiBjYWxsYmFja3MgaXMgYWx3YXlzIGEgcG9pbnRlciB0byB0aGUgc3RydWN0CiYjNDM7ICogcHNlX2NvbnRyb2xsZXJfZGV2IGZpcmluZyB0aGUgZXZlbnQuCiYjNDM7ICoKJiM0MzsgKiBAUFNFX1JFR0lTVEVSRUQ6IGNvbnRyb2xsZXIgYWRkZWQgdG8gcHNlX2NvbnRyb2xsZXJfbGlzdCBhbmQKJiM0MzsgKglyZXNvbHZhYmxlIGJ5IG9mX3BzZV9jb250cm9sX2dldCgpLgomIzQzOyAqIEBQU0VfVU5SRUdJU1RFUkVEOiBjb250cm9sbGVyIGFib3V0IHRvIGJlIHJlbW92ZWQgZnJvbQomIzQzOyAqCXBzZV9jb250cm9sbGVyX2xpc3QuIFN1YnNjcmliZXJzIGhvbGRpbmcgcHNlX2NvbnRyb2wgcmVmZXJlbmNlcwomIzQzOyAqCXRhcmdldGluZyBpdCBtdXN0IGRyb3AgdGhlbSBiZWZvcmUgcmV0dXJuaW5nIGFuZCBtdXN0IG5vdAomIzQzOyAqCWFjcXVpcmUgbmV3IHJlZmVyZW5jZXMgZm9yIGl0LgomIzQzOyAqLwomIzQzO2VudW0gcHNlX2NvbnRyb2xsZXJfZXZlbnQgewomIzQzOwlQU0VfUkVHSVNURVJFRCwKJiM0MzsJUFNFX1VOUkVHSVNURVJFRCwKJiM0Mzt9OwomIzQzOwogI2lmIElTX0VOQUJMRUQoQ09ORklHX1BTRV9DT05UUk9MTEVSKQogaW50IHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KTsKIHZvaWQgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcihzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2Rldik7CkBAIC0zNjYsNiAmIzQzOzM4NSwxMiBAQCBpbnQgcHNlX2V0aHRvb2xfc2V0X3ByaW8oc3RydWN0IHBzZV9jb250cm9sICpwc2VjLAogYm9vbCBwc2VfaGFzX3BvZGwoc3RydWN0IHBzZV9jb250cm9sICpwc2VjKTsKIGJvb2wgcHNlX2hhc19jMzMoc3RydWN0IHBzZV9jb250cm9sICpwc2VjKTsKIAomIzQzO2Jvb2wgcHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldihzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMsCiYjNDM7CQkJICAgICAgIHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KTsKJiM0MzsKJiM0MztpbnQgcHNlX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOwomIzQzO2ludCBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKJiM0MzsKICNlbHNlCiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBzZV9jb250cm9sICpvZl9wc2VfY29udHJvbF9nZXQoc3RydWN0IGRldmljZV9ub2RlICpub2RlLApAQCAtNDE2LDYgJiM0Mzs0NDEsMjIgQEAgc3RhdGljIGlubGluZSBib29sIHBzZV9oYXNfYzMzKHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYykKIAlyZXR1cm4gZmFsc2U7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldihzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMsCiYjNDM7CQkJCQkgICAgIHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KQomIzQzO3sKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCBwc2VfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogI2VuZGlmCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvcHNlLXBkLmMgYi9uZXQvZXRodG9vbC9wc2UtcGQuYwppbmRleCA3NTdjOWUwY2M4NTZmLi40ZWRkOWE1MTRkZTE0IDEwMDY0NAotLS0gYS9uZXQvZXRodG9vbC9wc2UtcGQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvZXRodG9vbC9wc2UtcGQuYwpAQCAtNzEsNyAmIzQzOzcxLDkgQEAgc3RhdGljIGludCBwc2VfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsCiAJaWYgKHJldCAmbHQ7IDApCiAJCXJldHVybiByZXQ7CiAKJiM0MzsJcGh5X3BzZV9jb250cm9sX2xvY2soKTsKIAlyZXQgPSBwc2VfZ2V0X3BzZV9hdHRyaWJ1dGVzKHBoeWRldiwgaW5mby0mZ3Q7ZXh0YWNrLCBkYXRhKTsKJiM0MzsJcGh5X3BzZV9jb250cm9sX3VubG9jaygpOwogCiAJZXRobmxfb3BzX2NvbXBsZXRlKGRldik7CiAKQEAgLTI4MSw5ICYjNDM7MjgzLDEyIEBAIGV0aG5sX3NldF9wc2Uoc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbywgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAogCXBoeWRldiA9IGV0aG5sX3JlcV9nZXRfcGh5ZGV2KHJlcV9pbmZvLCB0YiwgRVRIVE9PTF9BX1BTRV9IRUFERVIsCiAJCQkJICAgICAgaW5mby0mZ3Q7ZXh0YWNrKTsKJiM0MzsKJiM0MzsJcGh5X3BzZV9jb250cm9sX2xvY2soKTsKJiM0MzsKIAlyZXQgPSBldGhubF9zZXRfcHNlX3ZhbGlkYXRlKHBoeWRldiwgaW5mbyk7CiAJaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKJiM0MzsJCWdvdG8gb3V0OwogCiAJaWYgKHRiW0VUSFRPT0xfQV9QU0VfUFJJT10pIHsKIAkJdW5zaWduZWQgaW50IHByaW87CkBAIC0yOTEsNyAmIzQzOzI5Niw3IEBAIGV0aG5sX3NldF9wc2Uoc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbywgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJcHJpbyA9IG5sYV9nZXRfdTMyKHRiW0VUSFRPT0xfQV9QU0VfUFJJT10pOwogCQlyZXQgPSBwc2VfZXRodG9vbF9zZXRfcHJpbyhwaHlkZXYtJmd0O3BzZWMsIGluZm8tJmd0O2V4dGFjaywgcHJpbyk7CiAJCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwomIzQzOwkJCWdvdG8gb3V0OwogCX0KIAogCWlmICh0YltFVEhUT09MX0FfQzMzX1BTRV9BVkFJTF9QV19MSU1JVF0pIHsKQEAgLTMwMSw3ICYjNDM7MzA2LDcgQEAgZXRobmxfc2V0X3BzZShzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCQlyZXQgPSBwc2VfZXRodG9vbF9zZXRfcHdfbGltaXQocGh5ZGV2LSZndDtwc2VjLCBpbmZvLSZndDtleHRhY2ssCiAJCQkJCSAgICAgICBwd19saW1pdCk7CiAJCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwomIzQzOwkJCWdvdG8gb3V0OwogCX0KIAogCS8qIFRoZXNlIHZhbHVlcyBhcmUgYWxyZWFkeSB2YWxpZGF0ZWQgYnkgdGhlIGV0aG5sX3BzZV9zZXRfcG9saWN5ICovCkBAIC0zMTksMTEgJiM0MzszMjQsMTEgQEAgZXRobmxfc2V0X3BzZShzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCQkgKi8KIAkJcmV0ID0gcHNlX2V0aHRvb2xfc2V0X2NvbmZpZyhwaHlkZXYtJmd0O3BzZWMsIGluZm8tJmd0O2V4dGFjaywKIAkJCQkJICAgICAmYW1wO2NvbmZpZyk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwogCX0KIAomIzQzO291dDoKIAkvKiBSZXR1cm4gZXJybm8gb3IgemVybyAtIFBTRSBoYXMgbm8gbm90aWZpY2F0aW9uICovCiYjNDM7CXBoeV9wc2VfY29udHJvbF91bmxvY2soKTsKIAlyZXR1cm4gcmV0OwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzcyCgkJCQkJCQlvdXRwdXQ6IDIxMwoJCQkJCQkJdGhvdWdodHM6IDg2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBTRSBDb250cm9sbGVyIEludGVncmF0aW9uIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIHNlcmllcyBpcyBhbGwgYWJvdXQgcmVmaW5pbmcgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gUG93ZXIgU291cmNpbmcgRXF1aXBtZW50IChQU0UpIGNvbnRyb2xsZXJzIGFuZCBQSFkgZGV2aWNlcyB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbC4gSXQmIzM5O3MgZnVuZGFtZW50YWxseSBjaGFuZ2luZyBob3cgYHBoeWRldi0mZ3Q7cHNlY2AgaXMgbWFuYWdlZCwgc2hpZnRpbmcgZnJvbSBkaXJlY3QgYXR0YWNobWVudC9kZXRhY2htZW50IGR1cmluZyBQSFkgcmVnaXN0cmF0aW9uL3VucmVnaXN0cmF0aW9uIHRvIGEgbm90aWZpZXItYmFzZWQgc3lzdGVtLiBUaGlzIHNvdW5kcyBsaWtlIGEgZ29vZCBtb3ZlIGZvciBpbXByb3ZlZCByb2J1c3RuZXNzIGFuZCBmbGV4aWJpbGl0eS4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBjaGVjayBmb3IgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHByb2JsZW1zLiBUaGUgY2hhbmdlcyBpbnZvbHZlIGF0dGFjaGluZy9kZXRhY2hpbmcgdGhlIGBwc2VjYCwgd2hpY2ggaXMgYSBwb2ludGVyLiBJdCBpbnRyb2R1Y2VzIGEgYHBoeV9wc2Vfbm90aWZpZXJgIGZvciBhdHRhY2htZW50L2RldGFjaG1lbnQgYW5kIGFkZHMgYHBoeV9wc2VfbG9ja2AgdG8gc2VyaWFsaXplIGFjY2VzcyB0byBgcGh5ZGV2LSZndDtwc2VjYCwgcHJvdGVjdGluZyBhZ2FpbnN0IHJhY2VzIGJldHdlZW4gdGhlIG5vdGlmaWVyIGFuZCBgZXRodG9vbGAgb3BlcmF0aW9ucy4gQWxzbywgYGV0aG5sX3NldF9wc2VgIGFuZCBgcHNlX3ByZXBhcmVfZGF0YWAgYXJlIG1vZGlmaWVkIHRvIHVzZSBgcGh5X3BzZV9jb250cm9sX2xvY2soKWAgd2hlbiBpbnRlcmFjdGluZyB3aXRoIGBwaHlkZXYtJmd0O3BzZWNgLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlc2UgY2hhbmdlcyBleHBvc2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMuIFRoZSBjaGFuZ2VzIHByaW1hcmlseSByZXZvbHZlIGFyb3VuZCBzeW5jaHJvbml6YXRpb24gYW5kIHRoZSBvYmplY3QgbGlmZWN5Y2xlIG9mIGBwaHlkZXYtJmd0O3BzZWNgLiBUaGV5IGRvbiYjMzk7dCBpbnRyb2R1Y2UgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2Ugb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy4gVGhlIHByaW1hcnkgZ29hbCBpcyB0byBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYnkgZW5zdXJpbmcgcHJvcGVyIGxvY2tpbmcgYW5kIGxpZmVjeWNsZSBtYW5hZ2VtZW50LiBUaGVzZSB0eXBlcyBvZiBpc3N1ZXMgYXJlIHVzdWFsbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBMT0NLREVQLgoKTGV0JiMzOTtzIGRpZyBkZWVwZXIgaW50byBgcHNlX3ByZXBhcmVfZGF0YWAuIEl0IGxvY2tzLCB0aGVuIGNhbGxzIGBwc2VfZ2V0X3BzZV9hdHRyaWJ1dGVzYC4gVGhlIGNyaXRpY2FsIHRoaW5nIGlzIHdoZXRoZXIgdGhlIG5ldyBsb2NrIGFmZmVjdHMgaG93IGBkYXRhYCBpcyBpbml0aWFsaXplZCwgYnV0IG5vLCBpdCBqdXN0IHdyYXBzIGEgbG9jayBhcm91bmQgaXQuIEluIGBldGhubF9zZXRfcHNlYCBpdCYjMzk7cyB0aGUgc2FtZSwgaXQganVzdCBhZGRzIGEgbG9jay4KClNvIHRoZSBwYXRjaCBhZGRzIGBwaHlfcHNlX2NvbnRyb2xfbG9jaygpYCBhbmQgYHBoeV9wc2VfY29udHJvbF91bmxvY2soKWAgd2hpY2ggYXJlIHdyYXBwZXJzIGFyb3VuZCBgbXV0ZXhfbG9jaygmYW1wO3BoeV9wc2VfbG9jaylgIGFuZCBgbXV0ZXhfdW5sb2NrKCZhbXA7cGh5X3BzZV9sb2NrKWAuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBwc2VfcmVnaXN0ZXJfbm90aWZpZXJgIGFuZCBgcHNlX3VucmVnaXN0ZXJfbm90aWZpZXJgLiBObywgdGhpcyBzZWVtcyBwZXJmZWN0bHkgc2FmZS4gVGhpcyBpcyBhbGwgYWJvdXQgb2JqZWN0IGxpZmVjeWNsZSBhbmQgbWFraW5nIHN1cmUgdGhlcmUgYXJlIG5vIHJhY2VzLgoKVWx0aW1hdGVseSwgdGhlc2UgY2hhbmdlcyBhcHBlYXIgdG8gYmUgc3BlY2lmaWNhbGx5IGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb24uIElmIGEgUFNFIGNvbnRyb2xsZXIgdW5yZWdpc3RlcnMgd2hpbGUgYSBQSFkgaXMgc3RpbGwgcmVmZXJlbmNpbmcgaXQuIEtBU0FOIGlzIHRoZSByaWdodCB0b29sIGZvciB0aGVzZSwgbm90IEtNU0FOLgoKSSYjMzk7bGwgZG91YmxlIGNoZWNrIHRoZSBgcGh5X3RyeV9hdHRhY2hfcHNlYCBmdW5jdGlvbiBhcyBhIGZpbmFsIHNhbml0eSBjaGVjaywgYnV0IEkmIzM5O20gbm90IHNlZWluZyBhbnl0aGluZyB0aGF0IHdvdWxkIHJlc3VsdCBpbiBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25kaXRpb24gdGhlcmUuCgpHaXZlbiB0aGUgbmF0dXJlIG9mIHRoZXNlIGNoYW5nZXMsIEkmIzM5O20gY29uZmlkZW50IHRoZXJlIGFyZSBubyBLTVNBTiBjb25jZXJucy4gVGhlIHBhdGNoJiMzOTtzIGZvY3VzIGlzIG9uIGxpZmVjeWNsZSBhbmQgc3luY2hyb25pemF0aW9uLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgTmVlZHNLTVNBTiBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyByZWZhY3RvcnMgdGhlIGxpZmVjeWNsZSBhbmQgc3luY2hyb25pemF0aW9uIG9mIFBTRSAoUG93ZXIgU291cmNpbmcgRXF1aXBtZW50KSBjb250cm9sbGVycyBhdHRhY2hlZCB0byBQSFkgZGV2aWNlcy4gSXQgaW50cm9kdWNlcyBhIG5vdGlmaWVyIGNoYWluIChgcGh5X3BzZV9ub3RpZmllcmApIGFuZCBhIG11dGV4IChgcGh5X3BzZV9sb2NrYCkgdG8gc2FmZWx5IGF0dGFjaCBhbmQgZGV0YWNoIGBwaHlkZXYtXHUwMDNlcHNlY2Agd2hlbiBQU0UgY29udHJvbGxlcnMgYXJlIHJlZ2lzdGVyZWQgb3IgdW5yZWdpc3RlcmVkLCBwcmV2ZW50aW5nIHJhY2UgY29uZGl0aW9ucyBhbmQgdXNlLWFmdGVyLWZyZWUgYnVncy4gSXQgYWxzbyB3cmFwcyBldGh0b29sIFBTRSBvcGVyYXRpb25zIHdpdGggdGhlIG5ldyBsb2NrLlxuXG5UaGVzZSBjaGFuZ2VzIHByaW1hcmlseSBhZGRyZXNzIG9iamVjdCBsaWZlY3ljbGUgbWFuYWdlbWVudCwgbG9ja2luZywgYW5kIHN5bmNocm9uaXphdGlvbi4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGxpa2VseSBtYW5pZmVzdCBhcyB1c2UtYWZ0ZXItZnJlZSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgZGVhZGxvY2tzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvbXBsZXggYnVmZmVyIGFsbG9jYXRpb25zIG9yIG1vZGlmaWNhdGlvbnMgdG8gZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyB0aGUgbGlmZWN5Y2xlIGFuZCBzeW5jaHJvbml6YXRpb24gb2YgUFNFIChQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQpIGNvbnRyb2xsZXJzIGF0dGFjaGVkIHRvIFBIWSBkZXZpY2VzLiBJdCBpbnRyb2R1Y2VzIGEgbm90aWZpZXIgY2hhaW4gKGBwaHlfcHNlX25vdGlmaWVyYCkgYW5kIGEgbXV0ZXggKGBwaHlfcHNlX2xvY2tgKSB0byBzYWZlbHkgYXR0YWNoIGFuZCBkZXRhY2ggYHBoeWRldi1cdTAwM2Vwc2VjYCB3aGVuIFBTRSBjb250cm9sbGVycyBhcmUgcmVnaXN0ZXJlZCBvciB1bnJlZ2lzdGVyZWQsIHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzLiBJdCBhbHNvIHdyYXBzIGV0aHRvb2wgUFNFIG9wZXJhdGlvbnMgd2l0aCB0aGUgbmV3IGxvY2suXG5cblRoZXNlIGNoYW5nZXMgcHJpbWFyaWx5IGFkZHJlc3Mgb2JqZWN0IGxpZmVjeWNsZSBtYW5hZ2VtZW50LCBsb2NraW5nLCBhbmQgc3luY2hyb25pemF0aW9uLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbGlrZWx5IG1hbmlmZXN0IGFzIHVzZS1hZnRlci1mcmVlLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBkZWFkbG9ja3MsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGludm9sdmUgY29tcGxleCBidWZmZXIgYWxsb2NhdGlvbnMgb3IgbW9kaWZpY2F0aW9ucyB0byBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjEwOjQwLjc2OTY3NjIxOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzUzNTIyODUxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQU0VfQ09OVFJPTExFUlwiLFxuICAgIFwiUFNFX1JFR1VMQVRPUlwiLFxuICAgIFwiUkVHVUxBVE9SXCIsXG4gICAgXCJTRlBcIixcbiAgICBcIkZXTk9ERV9NRElPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGh5X3BzZV9jb250cm9sX2xvY2tcIixcbiAgICBcInBoeV9wc2VfY29udHJvbF91bmxvY2tcIixcbiAgICBcInBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkXCIsXG4gICAgXCJwaHlfZGV2aWNlX3JlZ2lzdGVyXCIsXG4gICAgXCJwaHlfZGV2aWNlX3JlbW92ZVwiLFxuICAgIFwicHNlX3JlZ2lzdGVyX25vdGlmaWVyXCIsXG4gICAgXCJwc2VfdW5yZWdpc3Rlcl9ub3RpZmllclwiLFxuICAgIFwicHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXJcIixcbiAgICBcInBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXJcIixcbiAgICBcInBzZV9jb250cm9sX21hdGNoZXNfcGNkZXZcIixcbiAgICBcImV0aG5sX3NldF9wc2VcIixcbiAgICBcInBzZV9wcmVwYXJlX2RhdGFcIixcbiAgICBcInBoeV9wc2VfYXR0YWNoX29uZVwiLFxuICAgIFwicGh5X3BzZV9kZXRhY2hfb25lXCIsXG4gICAgXCJwaHlfcHNlX25vdGlmaWVyX2V2ZW50XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcmVmYWN0b3JzIHRoZSBsaWZlY3ljbGUgYW5kIHN5bmNocm9uaXphdGlvbiBvZiBQU0UgKFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudCkgY29udHJvbGxlcnMgYXR0YWNoZWQgdG8gUEhZIGRldmljZXMuIEl0IGludHJvZHVjZXMgYSBub3RpZmllciBjaGFpbiAoYHBoeV9wc2Vfbm90aWZpZXJgKSBhbmQgYSBtdXRleCAoYHBoeV9wc2VfbG9ja2ApIHRvIHNhZmVseSBhdHRhY2ggYW5kIGRldGFjaCBgcGh5ZGV2LVxcdTAwM2Vwc2VjYCB3aGVuIFBTRSBjb250cm9sbGVycyBhcmUgcmVnaXN0ZXJlZCBvciB1bnJlZ2lzdGVyZWQsIHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzLiBJdCBhbHNvIHdyYXBzIGV0aHRvb2wgUFNFIG9wZXJhdGlvbnMgd2l0aCB0aGUgbmV3IGxvY2suXFxuXFxuVGhlc2UgY2hhbmdlcyBwcmltYXJpbHkgYWRkcmVzcyBvYmplY3QgbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIGxvY2tpbmcsIGFuZCBzeW5jaHJvbml6YXRpb24uIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBsaWtlbHkgbWFuaWZlc3QgYXMgdXNlLWFmdGVyLWZyZWUsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIGRlYWRsb2Nrcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgaW52b2x2ZSBjb21wbGV4IGJ1ZmZlciBhbGxvY2F0aW9ucyBvciBtb2RpZmljYXRpb25zIHRvIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIGhvdyB0aGUgUFNFIGNvbnRyb2xsZXIgaXMgYXR0YWNoZWQgdG8gdGhlIFBIWSBkZXZpY2UsIGludHJvZHVjaW5nIGEgbmV3IGxvY2sgKGBwaHlfcHNlX2xvY2tgKSBhbmQgYSBub3RpZmllciAoYHBoeV9wc2Vfbm90aWZpZXJgKSB0byBoYW5kbGUgUFNFIGNvbnRyb2xsZXIgcmVnaXN0cmF0aW9uIGFuZCB1bnJlZ2lzdHJhdGlvbi4gSXQgYWxzbyBtb2RpZmllcyB0aGUgZXRodG9vbCBQU0UgbmV0bGluayBpbnRlcmZhY2UgdG8gdXNlIHRoZSBuZXcgbG9jay4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIGNvcmUgUEhZIGxpYnJhcnkgYW5kIGV0aHRvb2wsIGFuZCBhcmUgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIGFuZCBQSFkgZGV2aWNlIHJlZ2lzdHJhdGlvbiBwYXRocywgd2hpY2ggY2FuIGJlIHRyaWdnZXJlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjEwOjQwLjc2OTY4MjQ3OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg1Mzg5NDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNjY4ZDA5M2IwOWZmMGU0MmJiNGFiMzk5ZDE0ZTJhYTAwMDdiYTVjZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAyNiAyMjoxMDozOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMgYi9kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmNcXG5pbmRleCBiYTcwOTE1MTgyNjU0Li43YmQ5NzliNTlmNDk2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uY1xcbisrKyBiL2RyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uY1xcbkBAIC0xMSwzMyArMTEsMTEgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Z3bm9kZV9tZGlvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9wc2UtcGQvcHNlLmhcXHUwMDNlXFxuIFxcbiBNT0RVTEVfQVVUSE9SKFxcXCJDYWx2aW4gSm9obnNvbiBcXHUwMDNjY2FsdmluLmpvaG5zb25Ab3NzLm54cC5jb21cXHUwMDNlXFxcIik7XFxuIE1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG4gTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJGV05PREUgTURJTyBidXMgKEV0aGVybmV0IFBIWSkgYWNjZXNzb3JzXFxcIik7XFxuIFxcbi1zdGF0aWMgc3RydWN0IHBzZV9jb250cm9sICpcXG4tZndub2RlX2ZpbmRfcHNlX2NvbnRyb2woc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSxcXG4tXFx0XFx0XFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4te1xcbi1cXHRzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWM7XFxuLVxcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7XFxuLVxcbi1cXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BTRV9DT05UUk9MTEVSKSlcXG4tXFx0XFx0cmV0dXJuIE5VTEw7XFxuLVxcbi1cXHRucCA9IHRvX29mX25vZGUoZndub2RlKTtcXG4tXFx0aWYgKCFucClcXG4tXFx0XFx0cmV0dXJuIE5VTEw7XFxuLVxcbi1cXHRwc2VjID0gb2ZfcHNlX2NvbnRyb2xfZ2V0KG5wLCBwaHlkZXYpO1xcbi1cXHRpZiAoUFRSX0VSUihwc2VjKSA9PSAtRU5PRU5UKVxcbi1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFxuLVxcdHJldHVybiBwc2VjO1xcbi19XFxuLVxcbiBzdGF0aWMgc3RydWN0IG1paV90aW1lc3RhbXBlciAqXFxuIGZ3bm9kZV9maW5kX21paV90aW1lc3RhbXBlcihzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKVxcbiB7XFxuQEAgLTExOCw3ICs5Niw2IEBAIGludCBmd25vZGVfbWRpb2J1c19yZWdpc3Rlcl9waHkoc3RydWN0IG1paV9idXMgKmJ1cyxcXG4gXFx0XFx0XFx0XFx0c3RydWN0IGZ3bm9kZV9oYW5kbGUgKmNoaWxkLCB1MzIgYWRkcilcXG4ge1xcbiBcXHRzdHJ1Y3QgbWlpX3RpbWVzdGFtcGVyICptaWlfdHMgPSBOVUxMO1xcbi1cXHRzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMgPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5O1xcbiBcXHRib29sIGlzX2M0NTtcXG4gXFx0dTMyIHBoeV9pZDtcXG5AQCAtMTU5LDE0ICsxMzYsNiBAQCBpbnQgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KHN0cnVjdCBtaWlfYnVzICpidXMsXFxuIFxcdFxcdFxcdGdvdG8gY2xlYW5fcGh5O1xcbiBcXHR9XFxuIFxcbi1cXHRwc2VjID0gZndub2RlX2ZpbmRfcHNlX2NvbnRyb2woY2hpbGQsIHBoeSk7XFxuLVxcdGlmIChJU19FUlIocHNlYykpIHtcXG4tXFx0XFx0cmMgPSBQVFJfRVJSKHBzZWMpO1xcbi1cXHRcXHRnb3RvIHVucmVnaXN0ZXJfcGh5O1xcbi1cXHR9XFxuLVxcbi1cXHRwaHktXFx1MDAzZXBzZWMgPSBwc2VjO1xcbi1cXG4gXFx0LyogcGh5LVxcdTAwM2VtaWlfdHMgbWF5IGFscmVhZHkgYmUgZGVmaW5lZCBieSB0aGUgUEhZIGRyaXZlci4gQVxcbiBcXHQgKiBtaWlfdGltZXN0YW1wZXIgcHJvYmVkIHZpYSB0aGUgZGV2aWNlIHRyZWUgd2lsbCBzdGlsbCBoYXZlXFxuIFxcdCAqIHByZWNlZGVuY2UuXFxuQEAgLTE3Niw5ICsxNDUsNiBAQCBpbnQgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KHN0cnVjdCBtaWlfYnVzICpidXMsXFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuLXVucmVnaXN0ZXJfcGh5Olxcbi1cXHRpZiAoaXNfYWNwaV9ub2RlKGNoaWxkKSB8fCBpc19vZl9ub2RlKGNoaWxkKSlcXG4tXFx0XFx0cGh5X2RldmljZV9yZW1vdmUocGh5KTtcXG4gY2xlYW5fcGh5OlxcbiBcXHRwaHlfZGV2aWNlX2ZyZWUocGh5KTtcXG4gY2xlYW5fbWlpX3RzOlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xcbmluZGV4IDA2MTUyMjg0NTllZjQuLmRjYTFiNDViYmJkMjYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcXG5AQCAtMTEwMiwxMSArMTEwMiwxMjggQEAgc3RydWN0IHBoeV9kZXZpY2UgKmdldF9waHlfZGV2aWNlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBib29sIGlzX2M0NSlcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKGdldF9waHlfZGV2aWNlKTtcXG4gXFxuKy8qIFNlcmlhbGlzZXMgcGh5ZGV2LVxcdTAwM2Vwc2VjIGFnYWluc3QgdGhlIFBTRSBub3RpZmllciBhbmQgZXRodG9vbCwgbm90IHJ0bmwuICovXFxuK3N0YXRpYyBERUZJTkVfTVVURVgocGh5X3BzZV9sb2NrKTtcXG4rXFxuKy8qIEJlc3QtZWZmb3J0IGF0dGFjaCBvZiBwaHlkZXYtXFx1MDAzZXBzZWMgZnJvbSBhIERUIGBwc2VzID0gXFx1MDAzY1xcdTAwMjYuLi5cXHUwMDNlYCBwaGFuZGxlLlxcbisgKiBDYWxsZXIgbXVzdCBob2xkIHBoeV9wc2VfbG9jay4gQSBtaXNzaW5nIHBoYW5kbGUgKC1FTk9FTlQpIG9yIGFcXG4rICogbm90LXlldC1yZWdpc3RlcmVkIGNvbnRyb2xsZXIgKC1FUFJPQkVfREVGRVIpIGlzIHNpbGVudDsgdGhlIG5vdGlmaWVyXFxuKyAqIHJldHJpZXMgdGhlIGxhdHRlciBhdCBQU0VfUkVHSVNURVJFRCB0aW1lLiBBbnkgb3RoZXIgZXJyb3IgbWVhbnMgYSBicm9rZW5cXG4rICogYmluZGluZyBhbmQgaXMgd2FybmVkIGFib3V0LCBidXQgbGVmdCBub24tZmF0YWwgc28gdGhlIHBoeSBzdGlsbCByZWdpc3RlcnMuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBwaHlfdHJ5X2F0dGFjaF9wc2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWM7XFxuK1xcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZwaHlfcHNlX2xvY2spO1xcbitcXG4rXFx0bnAgPSBwaHlkZXYtXFx1MDAzZW1kaW8uZGV2Lm9mX25vZGU7XFxuK1xcdGlmICghbnApXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZXBzZWMpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHBzZWMgPSBvZl9wc2VfY29udHJvbF9nZXQobnAsIHBoeWRldik7XFxuK1xcdGlmIChJU19FUlIocHNlYykpIHtcXG4rXFx0XFx0aWYgKFBUUl9FUlIocHNlYykgIT0gLUVQUk9CRV9ERUZFUiBcXHUwMDI2XFx1MDAyNiBQVFJfRVJSKHBzZWMpICE9IC1FTk9FTlQpXFxuK1xcdFxcdFxcdHBoeWRldl93YXJuKHBoeWRldiwgXFxcImZhaWxlZCB0byBnZXQgUFNFIGNvbnRyb2w6ICVwZVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgIHBzZWMpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdHBoeWRldi1cXHUwMDNlcHNlYyA9IHBzZWM7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcGh5X3BzZV9hdHRhY2hfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSBfX21heWJlX3VudXNlZClcXG4re1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZwaHlfcHNlX2xvY2spO1xcbitcXG4rXFx0aWYgKGRldi1cXHUwMDNldHlwZSAhPSBcXHUwMDI2bWRpb19idXNfcGh5X3R5cGUpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cGh5X3RyeV9hdHRhY2hfcHNlKHRvX3BoeV9kZXZpY2UoZGV2KSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBoeV9wc2VfZGV0YWNoX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYgPSBkYXRhO1xcbitcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xcbitcXHRzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWM7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZwaHlfcHNlX2xvY2spO1xcbitcXG4rXFx0aWYgKGRldi1cXHUwMDNldHlwZSAhPSBcXHUwMDI2bWRpb19idXNfcGh5X3R5cGUpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cGh5ZGV2ID0gdG9fcGh5X2RldmljZShkZXYpO1xcbitcXHRwc2VjID0gcGh5ZGV2LVxcdTAwM2Vwc2VjO1xcbitcXHRpZiAoIXBzZWMgfHwgIXBzZV9jb250cm9sX21hdGNoZXNfcGNkZXYocHNlYywgcGNkZXYpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHBoeWRldi1cXHUwMDNlcHNlYyA9IE5VTEw7XFxuK1xcdHBzZV9jb250cm9sX3B1dChwc2VjKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcGh5X3BzZV9ub3RpZmllcl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxcbitcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0c3dpdGNoIChldmVudCkge1xcbitcXHRjYXNlIFBTRV9SRUdJU1RFUkVEOlxcbitcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZwaHlfcHNlX2xvY2spO1xcbitcXHRcXHRidXNfZm9yX2VhY2hfZGV2KFxcdTAwMjZtZGlvX2J1c190eXBlLCBOVUxMLCBOVUxMLFxcbitcXHRcXHRcXHRcXHQgcGh5X3BzZV9hdHRhY2hfb25lKTtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwaHlfcHNlX2xvY2spO1xcbitcXHRcXHRyZXR1cm4gTk9USUZZX09LO1xcbitcXHRjYXNlIFBTRV9VTlJFR0lTVEVSRUQ6XFxuK1xcdFxcdG11dGV4X2xvY2soXFx1MDAyNnBoeV9wc2VfbG9jayk7XFxuK1xcdFxcdGJ1c19mb3JfZWFjaF9kZXYoXFx1MDAyNm1kaW9fYnVzX3R5cGUsIE5VTEwsIGRhdGEsXFxuK1xcdFxcdFxcdFxcdCBwaHlfcHNlX2RldGFjaF9vbmUpO1xcbitcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnBoeV9wc2VfbG9jayk7XFxuK1xcdFxcdHJldHVybiBOT1RJRllfT0s7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBOT1RJRllfRE9ORTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBoeV9wc2Vfbm90aWZpZXIgX19yZWFkX21vc3RseSA9IHtcXG4rXFx0Lm5vdGlmaWVyX2NhbGwgPSBwaHlfcHNlX25vdGlmaWVyX2V2ZW50LFxcbit9O1xcbitcXG4gLyoqXFxuLSAqIHBoeV9kZXZpY2VfcmVnaXN0ZXIgLSBSZWdpc3RlciB0aGUgcGh5IGRldmljZSBvbiB0aGUgTURJTyBidXNcXG4tICogQHBoeWRldjogcGh5X2RldmljZSBzdHJ1Y3R1cmUgdG8gYmUgYWRkZWQgdG8gdGhlIE1ESU8gYnVzXFxuKyAqIHBoeV9wc2VfY29udHJvbF9sb2NrIC0gaG9sZCBwaHlkZXYtXFx1MDAzZXBzZWMgc3RhYmxlIGFnYWluc3QgUFNFIGNvbnRyb2xsZXIgdGVhcmRvd25cXG4rICpcXG4rICogVGhlIFBTRV9VTlJFR0lTVEVSRUQgbm90aWZpZXIgZGV0YWNoZXMgcGh5ZGV2LVxcdTAwM2Vwc2VjIGFuZCBkcm9wcyBpdHMgbGFzdFxcbisgKiByZWZlcmVuY2UuIENhbGxlcnMgdGhhdCBkZXJlZmVyZW5jZSBwaHlkZXYtXFx1MDAzZXBzZWMgKHRoZSBldGh0b29sIFBTRSBwYXRocykgbXVzdFxcbisgKiBob2xkIHRoaXMgbG9jayBhY3Jvc3MgdGhlIGFjY2VzcyBzbyB0aGUgZGV0YWNoIGNhbm5vdCBydW4gdW5kZXJuZWF0aCB0aGVtLlxcbiAgKi9cXG4taW50IHBoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4rdm9pZCBwaHlfcHNlX2NvbnRyb2xfbG9jayh2b2lkKVxcbit7XFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnBoeV9wc2VfbG9jayk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwocGh5X3BzZV9jb250cm9sX2xvY2spO1xcbitcXG4rLyoqXFxuKyAqIHBoeV9wc2VfY29udHJvbF91bmxvY2sgLSByZWxlYXNlIHRoZSBsb2NrIHRha2VuIGJ5IHBoeV9wc2VfY29udHJvbF9sb2NrKClcXG4rICovXFxuK3ZvaWQgcGh5X3BzZV9jb250cm9sX3VubG9jayh2b2lkKVxcbit7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cGh5X3BzZV9sb2NrKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChwaHlfcHNlX2NvbnRyb2xfdW5sb2NrKTtcXG4rXFxuKy8qIENvcmUgcmVnaXN0cmF0aW9uOiBhZGQgdGhlIHBoeSB0byB0aGUgTURJTyBidXMuIERvZXMgbm90IHRvdWNoIHJ0bmwgb3JcXG4rICogUFNFLiBwaHlkZXYtXFx1MDAzZXBzZWMgaXMgYXR0YWNoZWQgYnkgdGhlIGNhbGxlcnMgYmVsb3csIGFmdGVyIGRldmljZV9hZGQoKVxcbisgKiBoYXMgbWFkZSB0aGUgcGh5IHZpc2libGUgb24gbWRpb19idXNfdHlwZSwgc28gdGhhdCBhIGNvbmN1cnJlbnQgUFNFXFxuKyAqIG5vdGlmaWVyIHdhbGsgYW5kIHRoZSBhdHRhY2ggY2FuIG5ldmVyIGxlYXZlIHRoZSBwaHkgdW5hdHRhY2hlZC4gS2VlcGluZ1xcbisgKiBkZXZpY2VfYWRkKCkgb3V0IG9mIHJ0bmwgYWxzbyBhdm9pZHMgZGVhZGxvY2tpbmcgd2hlbiBiaW5kaW5nIGEgcGh5IHRoYXRcXG4rICogaXRzZWxmIHByb3ZpZGVzIGFuIFNGUCBjYWdlIChwaHlfcHJvYmUoKSAtXFx1MDAzZSBwaHlfc2ZwX3Byb2JlKCkgLVxcdTAwM2VcXG4rICogc2ZwX2J1c19hZGRfdXBzdHJlYW0oKSB0YWtlcyBydG5sKS5cXG4rICovXFxuK3N0YXRpYyBpbnQgX19waHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIHtcXG4gXFx0aW50IGVycjtcXG4gXFxuQEAgLTExMzUsMTAgKzEyNTIsNTYgQEAgaW50IHBoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4gIG91dDpcXG4gXFx0LyogQXNzZXJ0IHRoZSByZXNldCBzaWduYWwgKi9cXG4gXFx0cGh5X2RldmljZV9yZXNldChwaHlkZXYsIDEpO1xcbi1cXG4gXFx0bWRpb2J1c191bnJlZ2lzdGVyX2RldmljZShcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvKTtcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbitcXG4rLyoqXFxuKyAqIHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkIC0gUmVnaXN0ZXIgdGhlIHBoeSBkZXZpY2Ugb24gdGhlIE1ESU8gYnVzXFxuKyAqIEBwaHlkZXY6IHBoeV9kZXZpY2Ugc3RydWN0dXJlIHRvIGJlIGFkZGVkIHRvIHRoZSBNRElPIGJ1c1xcbisgKlxcbisgKiBTYW1lIGFzIHBoeV9kZXZpY2VfcmVnaXN0ZXIoKSBidXQgY2FsbGVyIG11c3QgYWxyZWFkeSBob2xkIHJ0bmxfbG9jaygpLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxcbisgKi9cXG4raW50IHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdEFTU0VSVF9SVE5MKCk7XFxuK1xcbitcXHRlcnIgPSBfX3BoeV9kZXZpY2VfcmVnaXN0ZXIocGh5ZGV2KTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnBoeV9wc2VfbG9jayk7XFxuK1xcdHBoeV90cnlfYXR0YWNoX3BzZShwaHlkZXYpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnBoeV9wc2VfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkKTtcXG4rXFxuKy8qKlxcbisgKiBwaHlfZGV2aWNlX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgdGhlIHBoeSBkZXZpY2Ugb24gdGhlIE1ESU8gYnVzXFxuKyAqIEBwaHlkZXY6IHBoeV9kZXZpY2Ugc3RydWN0dXJlIHRvIGJlIGFkZGVkIHRvIHRoZSBNRElPIGJ1c1xcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxcbisgKi9cXG4raW50IHBoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0ZXJyID0gX19waHlfZGV2aWNlX3JlZ2lzdGVyKHBoeWRldik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwaHlfcHNlX2xvY2spO1xcbitcXHRwaHlfdHJ5X2F0dGFjaF9wc2UocGh5ZGV2KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwaHlfcHNlX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4gRVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX3JlZ2lzdGVyKTtcXG4gXFxuIC8qKlxcbkBAIC0xMTUyLDcgKzEzMTUsMTUgQEAgRVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX3JlZ2lzdGVyKTtcXG4gdm9pZCBwaHlfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbiB7XFxuIFxcdHVucmVnaXN0ZXJfbWlpX3RpbWVzdGFtcGVyKHBoeWRldi1cXHUwMDNlbWlpX3RzKTtcXG4rXFxuK1xcdC8qIERldGFjaCBzeW5jaHJvbm91c2x5LCBiZWZvcmUgdGhlIHBoeSBsZWF2ZXMgdGhlIGJ1cywgc28gdGhlIHB1dCBjYW5ub3RcXG4rXFx0ICogb3V0bGl2ZSB0aGUgUFNFIGNvbnRyb2xsZXIgKGFuIG9mZi1idXMgYnV0IHN0aWxsLXBpbm5lZCBwaHkgaXMgbWlzc2VkIGJ5XFxuK1xcdCAqIHRoZSBQU0VfVU5SRUdJU1RFUkVEIHdhbGspLiBwaHlfcHNlX2xvY2sgc2VyaWFsaXNlcyBhZ2FpbnN0IHRoYXQgd2Fsay5cXG4rXFx0ICovXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnBoeV9wc2VfbG9jayk7XFxuIFxcdHBzZV9jb250cm9sX3B1dChwaHlkZXYtXFx1MDAzZXBzZWMpO1xcbitcXHRwaHlkZXYtXFx1MDAzZXBzZWMgPSBOVUxMO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnBoeV9wc2VfbG9jayk7XFxuIFxcbiBcXHRkZXZpY2VfZGVsKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2KTtcXG4gXFxuQEAgLTM5ODEsOCArNDE1MiwxNCBAQCBzdGF0aWMgaW50IF9faW5pdCBwaHlfaW5pdCh2b2lkKVxcbiBcXHRpZiAocmMpXFxuIFxcdFxcdGdvdG8gZXJyX2M0NTtcXG4gXFxuK1xcdHJjID0gcHNlX3JlZ2lzdGVyX25vdGlmaWVyKFxcdTAwMjZwaHlfcHNlX25vdGlmaWVyKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRnb3RvIGVycl9nZW5waHk7XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gXFxuK2Vycl9nZW5waHk6XFxuK1xcdHBoeV9kcml2ZXJfdW5yZWdpc3RlcihcXHUwMDI2Z2VucGh5X2RyaXZlcik7XFxuIGVycl9jNDU6XFxuIFxcdHBoeV9kcml2ZXJfdW5yZWdpc3RlcihcXHUwMDI2Z2VucGh5X2M0NV9kcml2ZXIpO1xcbiBlcnJfZXRodG9vbF9waHlfb3BzOlxcbkBAIC0zOTk5LDYgKzQxNzYsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBwaHlfaW5pdCh2b2lkKVxcbiBcXG4gc3RhdGljIHZvaWQgX19leGl0IHBoeV9leGl0KHZvaWQpXFxuIHtcXG4rXFx0cHNlX3VucmVnaXN0ZXJfbm90aWZpZXIoXFx1MDAyNnBoeV9wc2Vfbm90aWZpZXIpO1xcbiBcXHRwaHlfZHJpdmVyX3VucmVnaXN0ZXIoXFx1MDAyNmdlbnBoeV9jNDVfZHJpdmVyKTtcXG4gXFx0cGh5X2RyaXZlcl91bnJlZ2lzdGVyKFxcdTAwMjZnZW5waHlfZHJpdmVyKTtcXG4gXFx0cnRubF9sb2NrKCk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9zZnAuYyBiL2RyaXZlcnMvbmV0L3BoeS9zZnAuY1xcbmluZGV4IDAzYmZkODY0MGRiOTYuLjE4ODY4YmRkNjQ4NTIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3NmcC5jXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L3NmcC5jXFxuQEAgLTIwODMsNyArMjA4Myw3IEBAIHN0YXRpYyBpbnQgc2ZwX3NtX3Byb2JlX3BoeShzdHJ1Y3Qgc2ZwICpzZnAsIGludCBhZGRyLCBib29sIGlzX2M0NSlcXG4gXFx0LyogTWFyayB0aGlzIFBIWSBhcyBiZWluZyBvbiBhIFNGUCBtb2R1bGUgKi9cXG4gXFx0cGh5LVxcdTAwM2Vpc19vbl9zZnBfbW9kdWxlID0gdHJ1ZTtcXG4gXFxuLVxcdGVyciA9IHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5KTtcXG4rXFx0ZXJyID0gcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWQocGh5KTtcXG4gXFx0aWYgKGVycikge1xcbiBcXHRcXHRwaHlfZGV2aWNlX2ZyZWUocGh5KTtcXG4gXFx0XFx0ZGV2X2VycihzZnAtXFx1MDAzZWRldiwgXFxcInBoeV9kZXZpY2VfcmVnaXN0ZXIgZmFpbGVkOiAlcGVcXFxcblxcXCIsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jIGIvZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmNcXG5pbmRleCA2OWRiZGJkZTlkNzFhLi42MTE1NDBkZjQzYmIxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jXFxuKysrIGIvZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmNcXG5AQCAtOCw2ICs4LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RldmljZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXRodG9vbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXRodG9vbF9uZXRsaW5rLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9ub3RpZmllci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvb2YuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcHNlLXBkL3BzZS5oXFx1MDAzZVxcbkBAIC0yMyw2ICsyNCwzOSBAQCBzdGF0aWMgTElTVF9IRUFEKHBzZV9jb250cm9sbGVyX2xpc3QpO1xcbiBzdGF0aWMgREVGSU5FX1hBUlJBWV9BTExPQyhwc2VfcHdfZF9tYXApO1xcbiBzdGF0aWMgREVGSU5FX01VVEVYKHBzZV9wd19kX211dGV4KTtcXG4gXFxuK3N0YXRpYyBCTE9DS0lOR19OT1RJRklFUl9IRUFEKHBzZV9jb250cm9sbGVyX25vdGlmaWVyKTtcXG4rXFxuKy8qKlxcbisgKiBwc2VfcmVnaXN0ZXJfbm90aWZpZXIgLSByZWdpc3RlciBhIGNhbGxiYWNrIGZvciBQU0UgY29udHJvbGxlciBldmVudHNcXG4rICogQG5iOiBub3RpZmllciBibG9jayB0byByZWdpc3RlclxcbisgKlxcbisgKiBTZWUgZW51bSBwc2VfY29udHJvbGxlcl9ldmVudCBmb3IgZXZlbnRzIGZpcmVkIGFuZCB0aGVpciBzdWJzY3JpYmVyXFxuKyAqIGNvbnRyYWN0LiBDYWxsYmFja3MgcnVuIGluIHByb2Nlc3MgY29udGV4dDsgdGhleSBtYXkgc2xlZXAsIHRha2VcXG4rICogcnRubCwgYW5kIGNhbGwgb2ZfcHNlX2NvbnRyb2xfZ2V0KCkuIFRoZSBjaGFpbiBmaXJlcyBzeW5jaHJvbm91c2x5LFxcbisgKiBzbyBhIFBTRSBjb250cm9sbGVyIGRyaXZlcidzIHByb2JlL3VuYmluZCBwYXRoIG11c3Qgbm90IGhvbGQgYW55XFxuKyAqIHN1Y2ggbG9jayB3aGVuIGNhbGxpbmcgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoKSBvclxcbisgKiBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyKCkuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cXG4rICovXFxuK2ludCBwc2VfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYilcXG4re1xcbitcXHRyZXR1cm4gYmxvY2tpbmdfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoXFx1MDAyNnBzZV9jb250cm9sbGVyX25vdGlmaWVyLCBuYik7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwocHNlX3JlZ2lzdGVyX25vdGlmaWVyKTtcXG4rXFxuKy8qKlxcbisgKiBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllciAtIHVucmVnaXN0ZXIgYSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgY2FsbGJhY2tcXG4rICogQG5iOiBub3RpZmllciBibG9jayBwcmV2aW91c2x5IHBhc3NlZCB0byBwc2VfcmVnaXN0ZXJfbm90aWZpZXIoKVxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuXFxuKyAqL1xcbitpbnQgcHNlX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYilcXG4re1xcbitcXHRyZXR1cm4gYmxvY2tpbmdfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcihcXHUwMDI2cHNlX2NvbnRyb2xsZXJfbm90aWZpZXIsIG5iKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcik7XFxuK1xcbiAvKipcXG4gICogc3RydWN0IHBzZV9jb250cm9sIC0gYSBQU0UgY29udHJvbFxcbiAgKiBAcGNkZXY6IGEgcG9pbnRlciB0byB0aGUgUFNFIGNvbnRyb2xsZXIgZGV2aWNlXFxuQEAgLTExMDQsNiArMTEzOCw5IEBAIGludCBwc2VfY29udHJvbGxlcl9yZWdpc3RlcihzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldilcXG4gXFx0bGlzdF9hZGQoXFx1MDAyNnBjZGV2LVxcdTAwM2VsaXN0LCBcXHUwMDI2cHNlX2NvbnRyb2xsZXJfbGlzdCk7XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2cHNlX2xpc3RfbXV0ZXgpO1xcbiBcXG4rXFx0YmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbihcXHUwMDI2cHNlX2NvbnRyb2xsZXJfbm90aWZpZXIsXFxuK1xcdFxcdFxcdFxcdCAgICAgUFNFX1JFR0lTVEVSRUQsIHBjZGV2KTtcXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKTtcXG5AQCAtMTExNCw2ICsxMTUxLDkgQEAgRVhQT1JUX1NZTUJPTF9HUEwocHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIpO1xcbiAgKi9cXG4gdm9pZCBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxcbiB7XFxuK1xcdGJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oXFx1MDAyNnBzZV9jb250cm9sbGVyX25vdGlmaWVyLFxcbitcXHRcXHRcXHRcXHQgICAgIFBTRV9VTlJFR0lTVEVSRUQsIHBjZGV2KTtcXG4rXFxuIFxcdHBzZV9mbHVzaF9wd19kcyhwY2Rldik7XFxuIFxcdHBzZV9yZWxlYXNlX3BpcyhwY2Rldik7XFxuIFxcdGlmIChwY2Rldi1cXHUwMDNlaXJxKVxcbkBAIC0xOTgxLDMgKzIwMjEsMTcgQEAgYm9vbCBwc2VfaGFzX2MzMyhzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMpXFxuIFxcdHJldHVybiBwc2VjLVxcdTAwM2VwY2Rldi1cXHUwMDNldHlwZXMgXFx1MDAyNiBFVEhUT09MX1BTRV9DMzM7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwocHNlX2hhc19jMzMpO1xcbitcXG4rLyoqXFxuKyAqIHBzZV9jb250cm9sX21hdGNoZXNfcGNkZXYgLSBUZXN0IHdoZXRoZXIgYSBwc2VfY29udHJvbCB0YXJnZXRzIGEgY29udHJvbGxlclxcbisgKiBAcHNlYzogcHNlX2NvbnRyb2wgb2J0YWluZWQgZnJvbSBvZl9wc2VfY29udHJvbF9nZXQoKVxcbisgKiBAcGNkZXY6IFBTRSBjb250cm9sbGVyIHRvIGNvbXBhcmUgYWdhaW5zdFxcbisgKlxcbisgKiBSZXR1cm46ICV0cnVlIGlmIEBwc2VjIHdhcyBvYnRhaW5lZCBmcm9tIEBwY2RldiwgJWZhbHNlIG90aGVyd2lzZS5cXG4rICovXFxuK2Jvb2wgcHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldihzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldilcXG4re1xcbitcXHRyZXR1cm4gcHNlYy1cXHUwMDNlcGNkZXYgPT0gcGNkZXY7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwocHNlX2NvbnRyb2xfbWF0Y2hlc19wY2Rldik7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oXFxuaW5kZXggMTk5YTdhYWEzNDFiZi4uNTVhMDA0OWM2YzJiNSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9waHkuaFxcbkBAIC0yMTU4LDggKzIxNTgsMTIgQEAgc3RydWN0IHBoeV9kZXZpY2UgKmZ3bm9kZV9waHlfZmluZF9kZXZpY2Uoc3RydWN0IGZ3bm9kZV9oYW5kbGUgKnBoeV9md25vZGUpO1xcbiBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlX2dldF9waHlfbm9kZShjb25zdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKTtcXG4gc3RydWN0IHBoeV9kZXZpY2UgKmdldF9waHlfZGV2aWNlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBib29sIGlzX2M0NSk7XFxuIGludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpO1xcbisvKiBDYWxsZXIgbXVzdCBob2xkIHJ0bmxfbG9jaygpOyBzZWUgcGh5X2RldmljZV9yZWdpc3RlcigpIGZvciB0aGUgcHVibGljIGZvcm0uICovXFxuK2ludCBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KTtcXG4gdm9pZCBwaHlfZGV2aWNlX2ZyZWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XFxuIHZvaWQgcGh5X2RldmljZV9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XFxuK3ZvaWQgcGh5X3BzZV9jb250cm9sX2xvY2sodm9pZCk7XFxuK3ZvaWQgcGh5X3BzZV9jb250cm9sX3VubG9jayh2b2lkKTtcXG4gaW50IHBoeV9nZXRfYzQ1X2lkcyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcXG4gaW50IHBoeV9pbml0X2h3KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xcbiBpbnQgcGh5X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHNlLXBkL3BzZS5oIGIvaW5jbHVkZS9saW51eC9wc2UtcGQvcHNlLmhcXG5pbmRleCA0ZTU2OTZjZmFkZTdjLi5kNDMxMGNhNzFhM2UwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcHNlLXBkL3BzZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9wc2UtcGQvcHNlLmhcXG5AQCAtMjEsNiArMjEsNyBAQCBzdHJ1Y3QgbmV0X2RldmljZTtcXG4gc3RydWN0IHBoeV9kZXZpY2U7XFxuIHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXY7XFxuIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2s7XFxuK3N0cnVjdCBub3RpZmllcl9ibG9jaztcXG4gXFxuIC8qIEMzMyBQU0UgZXh0ZW5kZWQgc3RhdGUgYW5kIHN1YnN0YXRlLiAqL1xcbiBzdHJ1Y3QgZXRodG9vbF9jMzNfcHNlX2V4dF9zdGF0ZV9pbmZvIHtcXG5AQCAtMzM3LDYgKzMzOCwyNCBAQCBlbnVtIHBzZV9idWRnZXRfZXZhbF9zdHJhdGVnaWVzIHtcXG4gXFx0UFNFX0JVREdFVF9FVkFMX1NUUkFUX0RZTkFNSUNcXHQ9IDEgXFx1MDAzY1xcdTAwM2MgMixcXG4gfTtcXG4gXFxuKy8qKlxcbisgKiBlbnVtIHBzZV9jb250cm9sbGVyX2V2ZW50IC0gUFNFIGNvbnRyb2xsZXIgbGlmZWN5Y2xlIGV2ZW50c1xcbisgKlxcbisgKiBFdmVudCBkYXRhIGluIGNhbGxiYWNrcyBpcyBhbHdheXMgYSBwb2ludGVyIHRvIHRoZSBzdHJ1Y3RcXG4rICogcHNlX2NvbnRyb2xsZXJfZGV2IGZpcmluZyB0aGUgZXZlbnQuXFxuKyAqXFxuKyAqIEBQU0VfUkVHSVNURVJFRDogY29udHJvbGxlciBhZGRlZCB0byBwc2VfY29udHJvbGxlcl9saXN0IGFuZFxcbisgKlxcdHJlc29sdmFibGUgYnkgb2ZfcHNlX2NvbnRyb2xfZ2V0KCkuXFxuKyAqIEBQU0VfVU5SRUdJU1RFUkVEOiBjb250cm9sbGVyIGFib3V0IHRvIGJlIHJlbW92ZWQgZnJvbVxcbisgKlxcdHBzZV9jb250cm9sbGVyX2xpc3QuIFN1YnNjcmliZXJzIGhvbGRpbmcgcHNlX2NvbnRyb2wgcmVmZXJlbmNlc1xcbisgKlxcdHRhcmdldGluZyBpdCBtdXN0IGRyb3AgdGhlbSBiZWZvcmUgcmV0dXJuaW5nIGFuZCBtdXN0IG5vdFxcbisgKlxcdGFjcXVpcmUgbmV3IHJlZmVyZW5jZXMgZm9yIGl0LlxcbisgKi9cXG4rZW51bSBwc2VfY29udHJvbGxlcl9ldmVudCB7XFxuK1xcdFBTRV9SRUdJU1RFUkVELFxcbitcXHRQU0VfVU5SRUdJU1RFUkVELFxcbit9O1xcbitcXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX1BTRV9DT05UUk9MTEVSKVxcbiBpbnQgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpO1xcbiB2b2lkIHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXIoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpO1xcbkBAIC0zNjYsNiArMzg1LDEyIEBAIGludCBwc2VfZXRodG9vbF9zZXRfcHJpbyhzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMsXFxuIGJvb2wgcHNlX2hhc19wb2RsKHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYyk7XFxuIGJvb2wgcHNlX2hhc19jMzMoc3RydWN0IHBzZV9jb250cm9sICpwc2VjKTtcXG4gXFxuK2Jvb2wgcHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldihzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2Rldik7XFxuK1xcbitpbnQgcHNlX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpO1xcbitpbnQgcHNlX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7XFxuK1xcbiAjZWxzZVxcbiBcXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgcHNlX2NvbnRyb2wgKm9mX3BzZV9jb250cm9sX2dldChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsXFxuQEAgLTQxNiw2ICs0NDEsMjIgQEAgc3RhdGljIGlubGluZSBib29sIHBzZV9oYXNfYzMzKHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYylcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGJvb2wgcHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldihzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXFxuK3tcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludCBwc2VfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYilcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnQgcHNlX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYilcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gI2VuZGlmXFxuIFxcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvcHNlLXBkLmMgYi9uZXQvZXRodG9vbC9wc2UtcGQuY1xcbmluZGV4IDc1N2M5ZTBjYzg1NmYuLjRlZGQ5YTUxNGRlMTQgMTAwNjQ0XFxuLS0tIGEvbmV0L2V0aHRvb2wvcHNlLXBkLmNcXG4rKysgYi9uZXQvZXRodG9vbC9wc2UtcGQuY1xcbkBAIC03MSw3ICs3MSw5IEBAIHN0YXRpYyBpbnQgcHNlX3ByZXBhcmVfZGF0YShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLFxcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuK1xcdHBoeV9wc2VfY29udHJvbF9sb2NrKCk7XFxuIFxcdHJldCA9IHBzZV9nZXRfcHNlX2F0dHJpYnV0ZXMocGh5ZGV2LCBpbmZvLVxcdTAwM2VleHRhY2ssIGRhdGEpO1xcbitcXHRwaHlfcHNlX2NvbnRyb2xfdW5sb2NrKCk7XFxuIFxcbiBcXHRldGhubF9vcHNfY29tcGxldGUoZGV2KTtcXG4gXFxuQEAgLTI4MSw5ICsyODMsMTIgQEAgZXRobmxfc2V0X3BzZShzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXG4gXFx0cGh5ZGV2ID0gZXRobmxfcmVxX2dldF9waHlkZXYocmVxX2luZm8sIHRiLCBFVEhUT09MX0FfUFNFX0hFQURFUixcXG4gXFx0XFx0XFx0XFx0ICAgICAgaW5mby1cXHUwMDNlZXh0YWNrKTtcXG4rXFxuK1xcdHBoeV9wc2VfY29udHJvbF9sb2NrKCk7XFxuK1xcbiBcXHRyZXQgPSBldGhubF9zZXRfcHNlX3ZhbGlkYXRlKHBoeWRldiwgaW5mbyk7XFxuIFxcdGlmIChyZXQpXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbiBcXG4gXFx0aWYgKHRiW0VUSFRPT0xfQV9QU0VfUFJJT10pIHtcXG4gXFx0XFx0dW5zaWduZWQgaW50IHByaW87XFxuQEAgLTI5MSw3ICsyOTYsNyBAQCBldGhubF9zZXRfcHNlKHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdFxcdHByaW8gPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUFNFX1BSSU9dKTtcXG4gXFx0XFx0cmV0ID0gcHNlX2V0aHRvb2xfc2V0X3ByaW8ocGh5ZGV2LVxcdTAwM2Vwc2VjLCBpbmZvLVxcdTAwM2VleHRhY2ssIHByaW8pO1xcbiBcXHRcXHRpZiAocmV0KVxcbi1cXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKHRiW0VUSFRPT0xfQV9DMzNfUFNFX0FWQUlMX1BXX0xJTUlUXSkge1xcbkBAIC0zMDEsNyArMzA2LDcgQEAgZXRobmxfc2V0X3BzZShzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRcXHRyZXQgPSBwc2VfZXRodG9vbF9zZXRfcHdfbGltaXQocGh5ZGV2LVxcdTAwM2Vwc2VjLCBpbmZvLVxcdTAwM2VleHRhY2ssXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBwd19saW1pdCk7XFxuIFxcdFxcdGlmIChyZXQpXFxuLVxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcbiBcXHQvKiBUaGVzZSB2YWx1ZXMgYXJlIGFscmVhZHkgdmFsaWRhdGVkIGJ5IHRoZSBldGhubF9wc2Vfc2V0X3BvbGljeSAqL1xcbkBAIC0zMTksMTEgKzMyNCwxMSBAQCBldGhubF9zZXRfcHNlKHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRyZXQgPSBwc2VfZXRodG9vbF9zZXRfY29uZmlnKHBoeWRldi1cXHUwMDNlcHNlYywgaW5mby1cXHUwMDNlZXh0YWNrLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZjb25maWcpO1xcbi1cXHRcXHRpZiAocmV0KVxcbi1cXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHR9XFxuIFxcbitvdXQ6XFxuIFxcdC8qIFJldHVybiBlcnJubyBvciB6ZXJvIC0gUFNFIGhhcyBubyBub3RpZmljYXRpb24gKi9cXG4rXFx0cGh5X3BzZV9jb250cm9sX3VubG9jaygpO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMDo0MS4yNTYxMjMzNTdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTQzNzUwNDY5MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFNFX0NPTlRST0xMRVJcIixcbiAgICBcIlBTRV9SRUdVTEFUT1JcIixcbiAgICBcIlJFR1VMQVRPUlwiLFxuICAgIFwiU0ZQXCIsXG4gICAgXCJGV05PREVfTURJT1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBoeV9wc2VfY29udHJvbF9sb2NrXCIsXG4gICAgXCJwaHlfcHNlX2NvbnRyb2xfdW5sb2NrXCIsXG4gICAgXCJwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZFwiLFxuICAgIFwicGh5X2RldmljZV9yZWdpc3RlclwiLFxuICAgIFwicGh5X2RldmljZV9yZW1vdmVcIixcbiAgICBcInBzZV9yZWdpc3Rlcl9ub3RpZmllclwiLFxuICAgIFwicHNlX3VucmVnaXN0ZXJfbm90aWZpZXJcIixcbiAgICBcInBzZV9jb250cm9sbGVyX3JlZ2lzdGVyXCIsXG4gICAgXCJwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyXCIsXG4gICAgXCJwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2XCIsXG4gICAgXCJldGhubF9zZXRfcHNlXCIsXG4gICAgXCJwc2VfcHJlcGFyZV9kYXRhXCIsXG4gICAgXCJwaHlfcHNlX2F0dGFjaF9vbmVcIixcbiAgICBcInBoeV9wc2VfZGV0YWNoX29uZVwiLFxuICAgIFwicGh5X3BzZV9ub3RpZmllcl9ldmVudFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgaG93IHRoZSBQU0UgY29udHJvbGxlciBpcyBhdHRhY2hlZCB0byB0aGUgUEhZIGRldmljZSwgaW50cm9kdWNpbmcgYSBuZXcgbG9jayAoYHBoeV9wc2VfbG9ja2ApIGFuZCBhIG5vdGlmaWVyIChgcGh5X3BzZV9ub3RpZmllcmApIHRvIGhhbmRsZSBQU0UgY29udHJvbGxlciByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uLiBJdCBhbHNvIG1vZGlmaWVzIHRoZSBldGh0b29sIFBTRSBuZXRsaW5rIGludGVyZmFjZSB0byB1c2UgdGhlIG5ldyBsb2NrLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCB0aGUgY29yZSBQSFkgbGlicmFyeSBhbmQgZXRodG9vbCwgYW5kIGFyZSByZWFjaGFibGUgdmlhIG5ldGxpbmsgYW5kIFBIWSBkZXZpY2UgcmVnaXN0cmF0aW9uIHBhdGhzLCB3aGljaCBjYW4gYmUgdHJpZ2dlcmVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjY4ZDA5M2IwOWZmMGU0MmJiNGFiMzk5ZDE0ZTJhYTAwMDdiYTVjZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDIyOjEwOjM5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jIGIvZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jXG5pbmRleCBiYTcwOTE1MTgyNjU0Li43YmQ5NzliNTlmNDk2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jXG4rKysgYi9kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmNcbkBAIC0xMSwzMyArMTEsMTEgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9md25vZGVfbWRpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvcHNlLXBkL3BzZS5oXHUwMDNlXG4gXG4gTU9EVUxFX0FVVEhPUihcIkNhbHZpbiBKb2huc29uIFx1MDAzY2NhbHZpbi5qb2huc29uQG9zcy5ueHAuY29tXHUwMDNlXCIpO1xuIE1PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuIE1PRFVMRV9ERVNDUklQVElPTihcIkZXTk9ERSBNRElPIGJ1cyAoRXRoZXJuZXQgUEhZKSBhY2Nlc3NvcnNcIik7XG4gXG4tc3RhdGljIHN0cnVjdCBwc2VfY29udHJvbCAqXG4tZndub2RlX2ZpbmRfcHNlX2NvbnRyb2woc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSxcbi1cdFx0XHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLXtcbi1cdHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYztcbi1cdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7XG4tXG4tXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BTRV9DT05UUk9MTEVSKSlcbi1cdFx0cmV0dXJuIE5VTEw7XG4tXG4tXHRucCA9IHRvX29mX25vZGUoZndub2RlKTtcbi1cdGlmICghbnApXG4tXHRcdHJldHVybiBOVUxMO1xuLVxuLVx0cHNlYyA9IG9mX3BzZV9jb250cm9sX2dldChucCwgcGh5ZGV2KTtcbi1cdGlmIChQVFJfRVJSKHBzZWMpID09IC1FTk9FTlQpXG4tXHRcdHJldHVybiBOVUxMO1xuLVxuLVx0cmV0dXJuIHBzZWM7XG4tfVxuLVxuIHN0YXRpYyBzdHJ1Y3QgbWlpX3RpbWVzdGFtcGVyICpcbiBmd25vZGVfZmluZF9taWlfdGltZXN0YW1wZXIoc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSlcbiB7XG5AQCAtMTE4LDcgKzk2LDYgQEAgaW50IGZ3bm9kZV9tZGlvYnVzX3JlZ2lzdGVyX3BoeShzdHJ1Y3QgbWlpX2J1cyAqYnVzLFxuIFx0XHRcdFx0c3RydWN0IGZ3bm9kZV9oYW5kbGUgKmNoaWxkLCB1MzIgYWRkcilcbiB7XG4gXHRzdHJ1Y3QgbWlpX3RpbWVzdGFtcGVyICptaWlfdHMgPSBOVUxMO1xuLVx0c3RydWN0IHBzZV9jb250cm9sICpwc2VjID0gTlVMTDtcbiBcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHk7XG4gXHRib29sIGlzX2M0NTtcbiBcdHUzMiBwaHlfaWQ7XG5AQCAtMTU5LDE0ICsxMzYsNiBAQCBpbnQgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KHN0cnVjdCBtaWlfYnVzICpidXMsXG4gXHRcdFx0Z290byBjbGVhbl9waHk7XG4gXHR9XG4gXG4tXHRwc2VjID0gZndub2RlX2ZpbmRfcHNlX2NvbnRyb2woY2hpbGQsIHBoeSk7XG4tXHRpZiAoSVNfRVJSKHBzZWMpKSB7XG4tXHRcdHJjID0gUFRSX0VSUihwc2VjKTtcbi1cdFx0Z290byB1bnJlZ2lzdGVyX3BoeTtcbi1cdH1cbi1cbi1cdHBoeS1cdTAwM2Vwc2VjID0gcHNlYztcbi1cbiBcdC8qIHBoeS1cdTAwM2VtaWlfdHMgbWF5IGFscmVhZHkgYmUgZGVmaW5lZCBieSB0aGUgUEhZIGRyaXZlci4gQVxuIFx0ICogbWlpX3RpbWVzdGFtcGVyIHByb2JlZCB2aWEgdGhlIGRldmljZSB0cmVlIHdpbGwgc3RpbGwgaGF2ZVxuIFx0ICogcHJlY2VkZW5jZS5cbkBAIC0xNzYsOSArMTQ1LDYgQEAgaW50IGZ3bm9kZV9tZGlvYnVzX3JlZ2lzdGVyX3BoeShzdHJ1Y3QgbWlpX2J1cyAqYnVzLFxuIFxuIFx0cmV0dXJuIDA7XG4gXG4tdW5yZWdpc3Rlcl9waHk6XG4tXHRpZiAoaXNfYWNwaV9ub2RlKGNoaWxkKSB8fCBpc19vZl9ub2RlKGNoaWxkKSlcbi1cdFx0cGh5X2RldmljZV9yZW1vdmUocGh5KTtcbiBjbGVhbl9waHk6XG4gXHRwaHlfZGV2aWNlX2ZyZWUocGh5KTtcbiBjbGVhbl9taWlfdHM6XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcbmluZGV4IDA2MTUyMjg0NTllZjQuLmRjYTFiNDViYmJkMjYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG5AQCAtMTEwMiwxMSArMTEwMiwxMjggQEAgc3RydWN0IHBoeV9kZXZpY2UgKmdldF9waHlfZGV2aWNlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBib29sIGlzX2M0NSlcbiB9XG4gRVhQT1JUX1NZTUJPTChnZXRfcGh5X2RldmljZSk7XG4gXG4rLyogU2VyaWFsaXNlcyBwaHlkZXYtXHUwMDNlcHNlYyBhZ2FpbnN0IHRoZSBQU0Ugbm90aWZpZXIgYW5kIGV0aHRvb2wsIG5vdCBydG5sLiAqL1xuK3N0YXRpYyBERUZJTkVfTVVURVgocGh5X3BzZV9sb2NrKTtcbitcbisvKiBCZXN0LWVmZm9ydCBhdHRhY2ggb2YgcGh5ZGV2LVx1MDAzZXBzZWMgZnJvbSBhIERUIGBwc2VzID0gXHUwMDNjXHUwMDI2Li4uXHUwMDNlYCBwaGFuZGxlLlxuKyAqIENhbGxlciBtdXN0IGhvbGQgcGh5X3BzZV9sb2NrLiBBIG1pc3NpbmcgcGhhbmRsZSAoLUVOT0VOVCkgb3IgYVxuKyAqIG5vdC15ZXQtcmVnaXN0ZXJlZCBjb250cm9sbGVyICgtRVBST0JFX0RFRkVSKSBpcyBzaWxlbnQ7IHRoZSBub3RpZmllclxuKyAqIHJldHJpZXMgdGhlIGxhdHRlciBhdCBQU0VfUkVHSVNURVJFRCB0aW1lLiBBbnkgb3RoZXIgZXJyb3IgbWVhbnMgYSBicm9rZW5cbisgKiBiaW5kaW5nIGFuZCBpcyB3YXJuZWQgYWJvdXQsIGJ1dCBsZWZ0IG5vbi1mYXRhbCBzbyB0aGUgcGh5IHN0aWxsIHJlZ2lzdGVycy5cbisgKi9cbitzdGF0aWMgdm9pZCBwaHlfdHJ5X2F0dGFjaF9wc2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWM7XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wO1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwaHlfcHNlX2xvY2spO1xuK1xuK1x0bnAgPSBwaHlkZXYtXHUwMDNlbWRpby5kZXYub2Zfbm9kZTtcbitcdGlmICghbnApXG4rXHRcdHJldHVybjtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlcHNlYylcbitcdFx0cmV0dXJuO1xuK1xuK1x0cHNlYyA9IG9mX3BzZV9jb250cm9sX2dldChucCwgcGh5ZGV2KTtcbitcdGlmIChJU19FUlIocHNlYykpIHtcbitcdFx0aWYgKFBUUl9FUlIocHNlYykgIT0gLUVQUk9CRV9ERUZFUiBcdTAwMjZcdTAwMjYgUFRSX0VSUihwc2VjKSAhPSAtRU5PRU5UKVxuK1x0XHRcdHBoeWRldl93YXJuKHBoeWRldiwgXCJmYWlsZWQgdG8gZ2V0IFBTRSBjb250cm9sOiAlcGVcXG5cIixcbitcdFx0XHRcdCAgICBwc2VjKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0cGh5ZGV2LVx1MDAzZXBzZWMgPSBwc2VjO1xuK31cbitcbitzdGF0aWMgaW50IHBoeV9wc2VfYXR0YWNoX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEgX19tYXliZV91bnVzZWQpXG4re1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwaHlfcHNlX2xvY2spO1xuK1xuK1x0aWYgKGRldi1cdTAwM2V0eXBlICE9IFx1MDAyNm1kaW9fYnVzX3BoeV90eXBlKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHBoeV90cnlfYXR0YWNoX3BzZSh0b19waHlfZGV2aWNlKGRldikpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGh5X3BzZV9kZXRhY2hfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSlcbit7XG4rXHRzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiA9IGRhdGE7XG4rXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xuK1x0c3RydWN0IHBzZV9jb250cm9sICpwc2VjO1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwaHlfcHNlX2xvY2spO1xuK1xuK1x0aWYgKGRldi1cdTAwM2V0eXBlICE9IFx1MDAyNm1kaW9fYnVzX3BoeV90eXBlKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHBoeWRldiA9IHRvX3BoeV9kZXZpY2UoZGV2KTtcbitcdHBzZWMgPSBwaHlkZXYtXHUwMDNlcHNlYztcbitcdGlmICghcHNlYyB8fCAhcHNlX2NvbnRyb2xfbWF0Y2hlc19wY2Rldihwc2VjLCBwY2RldikpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cGh5ZGV2LVx1MDAzZXBzZWMgPSBOVUxMO1xuK1x0cHNlX2NvbnRyb2xfcHV0KHBzZWMpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGh5X3BzZV9ub3RpZmllcl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuK1x0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpkYXRhKVxuK3tcbitcdHN3aXRjaCAoZXZlbnQpIHtcbitcdGNhc2UgUFNFX1JFR0lTVEVSRUQ6XG4rXHRcdG11dGV4X2xvY2soXHUwMDI2cGh5X3BzZV9sb2NrKTtcbitcdFx0YnVzX2Zvcl9lYWNoX2RldihcdTAwMjZtZGlvX2J1c190eXBlLCBOVUxMLCBOVUxMLFxuK1x0XHRcdFx0IHBoeV9wc2VfYXR0YWNoX29uZSk7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZwaHlfcHNlX2xvY2spO1xuK1x0XHRyZXR1cm4gTk9USUZZX09LO1xuK1x0Y2FzZSBQU0VfVU5SRUdJU1RFUkVEOlxuK1x0XHRtdXRleF9sb2NrKFx1MDAyNnBoeV9wc2VfbG9jayk7XG4rXHRcdGJ1c19mb3JfZWFjaF9kZXYoXHUwMDI2bWRpb19idXNfdHlwZSwgTlVMTCwgZGF0YSxcbitcdFx0XHRcdCBwaHlfcHNlX2RldGFjaF9vbmUpO1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2cGh5X3BzZV9sb2NrKTtcbitcdFx0cmV0dXJuIE5PVElGWV9PSztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiBOT1RJRllfRE9ORTtcbitcdH1cbit9XG4rXG4rc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBwaHlfcHNlX25vdGlmaWVyIF9fcmVhZF9tb3N0bHkgPSB7XG4rXHQubm90aWZpZXJfY2FsbCA9IHBoeV9wc2Vfbm90aWZpZXJfZXZlbnQsXG4rfTtcbitcbiAvKipcbi0gKiBwaHlfZGV2aWNlX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgdGhlIHBoeSBkZXZpY2Ugb24gdGhlIE1ESU8gYnVzXG4tICogQHBoeWRldjogcGh5X2RldmljZSBzdHJ1Y3R1cmUgdG8gYmUgYWRkZWQgdG8gdGhlIE1ESU8gYnVzXG4rICogcGh5X3BzZV9jb250cm9sX2xvY2sgLSBob2xkIHBoeWRldi1cdTAwM2Vwc2VjIHN0YWJsZSBhZ2FpbnN0IFBTRSBjb250cm9sbGVyIHRlYXJkb3duXG4rICpcbisgKiBUaGUgUFNFX1VOUkVHSVNURVJFRCBub3RpZmllciBkZXRhY2hlcyBwaHlkZXYtXHUwMDNlcHNlYyBhbmQgZHJvcHMgaXRzIGxhc3RcbisgKiByZWZlcmVuY2UuIENhbGxlcnMgdGhhdCBkZXJlZmVyZW5jZSBwaHlkZXYtXHUwMDNlcHNlYyAodGhlIGV0aHRvb2wgUFNFIHBhdGhzKSBtdXN0XG4rICogaG9sZCB0aGlzIGxvY2sgYWNyb3NzIHRoZSBhY2Nlc3Mgc28gdGhlIGRldGFjaCBjYW5ub3QgcnVuIHVuZGVybmVhdGggdGhlbS5cbiAgKi9cbi1pbnQgcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3ZvaWQgcGh5X3BzZV9jb250cm9sX2xvY2sodm9pZClcbit7XG4rXHRtdXRleF9sb2NrKFx1MDAyNnBoeV9wc2VfbG9jayk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHBoeV9wc2VfY29udHJvbF9sb2NrKTtcbitcbisvKipcbisgKiBwaHlfcHNlX2NvbnRyb2xfdW5sb2NrIC0gcmVsZWFzZSB0aGUgbG9jayB0YWtlbiBieSBwaHlfcHNlX2NvbnRyb2xfbG9jaygpXG4rICovXG4rdm9pZCBwaHlfcHNlX2NvbnRyb2xfdW5sb2NrKHZvaWQpXG4re1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnBoeV9wc2VfbG9jayk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHBoeV9wc2VfY29udHJvbF91bmxvY2spO1xuK1xuKy8qIENvcmUgcmVnaXN0cmF0aW9uOiBhZGQgdGhlIHBoeSB0byB0aGUgTURJTyBidXMuIERvZXMgbm90IHRvdWNoIHJ0bmwgb3JcbisgKiBQU0UuIHBoeWRldi1cdTAwM2Vwc2VjIGlzIGF0dGFjaGVkIGJ5IHRoZSBjYWxsZXJzIGJlbG93LCBhZnRlciBkZXZpY2VfYWRkKClcbisgKiBoYXMgbWFkZSB0aGUgcGh5IHZpc2libGUgb24gbWRpb19idXNfdHlwZSwgc28gdGhhdCBhIGNvbmN1cnJlbnQgUFNFXG4rICogbm90aWZpZXIgd2FsayBhbmQgdGhlIGF0dGFjaCBjYW4gbmV2ZXIgbGVhdmUgdGhlIHBoeSB1bmF0dGFjaGVkLiBLZWVwaW5nXG4rICogZGV2aWNlX2FkZCgpIG91dCBvZiBydG5sIGFsc28gYXZvaWRzIGRlYWRsb2NraW5nIHdoZW4gYmluZGluZyBhIHBoeSB0aGF0XG4rICogaXRzZWxmIHByb3ZpZGVzIGFuIFNGUCBjYWdlIChwaHlfcHJvYmUoKSAtXHUwMDNlIHBoeV9zZnBfcHJvYmUoKSAtXHUwMDNlXG4rICogc2ZwX2J1c19hZGRfdXBzdHJlYW0oKSB0YWtlcyBydG5sKS5cbisgKi9cbitzdGF0aWMgaW50IF9fcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIHtcbiBcdGludCBlcnI7XG4gXG5AQCAtMTEzNSwxMCArMTI1Miw1NiBAQCBpbnQgcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuICBvdXQ6XG4gXHQvKiBBc3NlcnQgdGhlIHJlc2V0IHNpZ25hbCAqL1xuIFx0cGh5X2RldmljZV9yZXNldChwaHlkZXYsIDEpO1xuLVxuIFx0bWRpb2J1c191bnJlZ2lzdGVyX2RldmljZShcdTAwMjZwaHlkZXYtXHUwMDNlbWRpbyk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbitcbisvKipcbisgKiBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZCAtIFJlZ2lzdGVyIHRoZSBwaHkgZGV2aWNlIG9uIHRoZSBNRElPIGJ1c1xuKyAqIEBwaHlkZXY6IHBoeV9kZXZpY2Ugc3RydWN0dXJlIHRvIGJlIGFkZGVkIHRvIHRoZSBNRElPIGJ1c1xuKyAqXG4rICogU2FtZSBhcyBwaHlfZGV2aWNlX3JlZ2lzdGVyKCkgYnV0IGNhbGxlciBtdXN0IGFscmVhZHkgaG9sZCBydG5sX2xvY2soKS5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4rICovXG4raW50IHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IGVycjtcbitcbitcdEFTU0VSVF9SVE5MKCk7XG4rXG4rXHRlcnIgPSBfX3BoeV9kZXZpY2VfcmVnaXN0ZXIocGh5ZGV2KTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnBoeV9wc2VfbG9jayk7XG4rXHRwaHlfdHJ5X2F0dGFjaF9wc2UocGh5ZGV2KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwaHlfcHNlX2xvY2spO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK0VYUE9SVF9TWU1CT0wocGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWQpO1xuK1xuKy8qKlxuKyAqIHBoeV9kZXZpY2VfcmVnaXN0ZXIgLSBSZWdpc3RlciB0aGUgcGh5IGRldmljZSBvbiB0aGUgTURJTyBidXNcbisgKiBAcGh5ZGV2OiBwaHlfZGV2aWNlIHN0cnVjdHVyZSB0byBiZSBhZGRlZCB0byB0aGUgTURJTyBidXNcbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4rICovXG4raW50IHBoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgZXJyO1xuK1xuK1x0ZXJyID0gX19waHlfZGV2aWNlX3JlZ2lzdGVyKHBoeWRldik7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwaHlfcHNlX2xvY2spO1xuK1x0cGh5X3RyeV9hdHRhY2hfcHNlKHBoeWRldik7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cGh5X3BzZV9sb2NrKTtcbitcbitcdHJldHVybiAwO1xuK31cbiBFWFBPUlRfU1lNQk9MKHBoeV9kZXZpY2VfcmVnaXN0ZXIpO1xuIFxuIC8qKlxuQEAgLTExNTIsNyArMTMxNSwxNSBAQCBFWFBPUlRfU1lNQk9MKHBoeV9kZXZpY2VfcmVnaXN0ZXIpO1xuIHZvaWQgcGh5X2RldmljZV9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiB7XG4gXHR1bnJlZ2lzdGVyX21paV90aW1lc3RhbXBlcihwaHlkZXYtXHUwMDNlbWlpX3RzKTtcbitcbitcdC8qIERldGFjaCBzeW5jaHJvbm91c2x5LCBiZWZvcmUgdGhlIHBoeSBsZWF2ZXMgdGhlIGJ1cywgc28gdGhlIHB1dCBjYW5ub3RcbitcdCAqIG91dGxpdmUgdGhlIFBTRSBjb250cm9sbGVyIChhbiBvZmYtYnVzIGJ1dCBzdGlsbC1waW5uZWQgcGh5IGlzIG1pc3NlZCBieVxuK1x0ICogdGhlIFBTRV9VTlJFR0lTVEVSRUQgd2FsaykuIHBoeV9wc2VfbG9jayBzZXJpYWxpc2VzIGFnYWluc3QgdGhhdCB3YWxrLlxuK1x0ICovXG4rXHRtdXRleF9sb2NrKFx1MDAyNnBoeV9wc2VfbG9jayk7XG4gXHRwc2VfY29udHJvbF9wdXQocGh5ZGV2LVx1MDAzZXBzZWMpO1xuK1x0cGh5ZGV2LVx1MDAzZXBzZWMgPSBOVUxMO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnBoeV9wc2VfbG9jayk7XG4gXG4gXHRkZXZpY2VfZGVsKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldik7XG4gXG5AQCAtMzk4MSw4ICs0MTUyLDE0IEBAIHN0YXRpYyBpbnQgX19pbml0IHBoeV9pbml0KHZvaWQpXG4gXHRpZiAocmMpXG4gXHRcdGdvdG8gZXJyX2M0NTtcbiBcbitcdHJjID0gcHNlX3JlZ2lzdGVyX25vdGlmaWVyKFx1MDAyNnBoeV9wc2Vfbm90aWZpZXIpO1xuK1x0aWYgKHJjKVxuK1x0XHRnb3RvIGVycl9nZW5waHk7XG4rXG4gXHRyZXR1cm4gMDtcbiBcbitlcnJfZ2VucGh5OlxuK1x0cGh5X2RyaXZlcl91bnJlZ2lzdGVyKFx1MDAyNmdlbnBoeV9kcml2ZXIpO1xuIGVycl9jNDU6XG4gXHRwaHlfZHJpdmVyX3VucmVnaXN0ZXIoXHUwMDI2Z2VucGh5X2M0NV9kcml2ZXIpO1xuIGVycl9ldGh0b29sX3BoeV9vcHM6XG5AQCAtMzk5OSw2ICs0MTc2LDcgQEAgc3RhdGljIGludCBfX2luaXQgcGh5X2luaXQodm9pZClcbiBcbiBzdGF0aWMgdm9pZCBfX2V4aXQgcGh5X2V4aXQodm9pZClcbiB7XG4rXHRwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcihcdTAwMjZwaHlfcHNlX25vdGlmaWVyKTtcbiBcdHBoeV9kcml2ZXJfdW5yZWdpc3RlcihcdTAwMjZnZW5waHlfYzQ1X2RyaXZlcik7XG4gXHRwaHlfZHJpdmVyX3VucmVnaXN0ZXIoXHUwMDI2Z2VucGh5X2RyaXZlcik7XG4gXHRydG5sX2xvY2soKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvc2ZwLmMgYi9kcml2ZXJzL25ldC9waHkvc2ZwLmNcbmluZGV4IDAzYmZkODY0MGRiOTYuLjE4ODY4YmRkNjQ4NTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvc2ZwLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9zZnAuY1xuQEAgLTIwODMsNyArMjA4Myw3IEBAIHN0YXRpYyBpbnQgc2ZwX3NtX3Byb2JlX3BoeShzdHJ1Y3Qgc2ZwICpzZnAsIGludCBhZGRyLCBib29sIGlzX2M0NSlcbiBcdC8qIE1hcmsgdGhpcyBQSFkgYXMgYmVpbmcgb24gYSBTRlAgbW9kdWxlICovXG4gXHRwaHktXHUwMDNlaXNfb25fc2ZwX21vZHVsZSA9IHRydWU7XG4gXG4tXHRlcnIgPSBwaHlfZGV2aWNlX3JlZ2lzdGVyKHBoeSk7XG4rXHRlcnIgPSBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZChwaHkpO1xuIFx0aWYgKGVycikge1xuIFx0XHRwaHlfZGV2aWNlX2ZyZWUocGh5KTtcbiBcdFx0ZGV2X2VycihzZnAtXHUwMDNlZGV2LCBcInBoeV9kZXZpY2VfcmVnaXN0ZXIgZmFpbGVkOiAlcGVcXG5cIixcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jXG5pbmRleCA2OWRiZGJkZTlkNzFhLi42MTE1NDBkZjQzYmIxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jXG5AQCAtOCw2ICs4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aHRvb2wuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aHRvb2xfbmV0bGluay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbm90aWZpZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzZS1wZC9wc2UuaFx1MDAzZVxuQEAgLTIzLDYgKzI0LDM5IEBAIHN0YXRpYyBMSVNUX0hFQUQocHNlX2NvbnRyb2xsZXJfbGlzdCk7XG4gc3RhdGljIERFRklORV9YQVJSQVlfQUxMT0MocHNlX3B3X2RfbWFwKTtcbiBzdGF0aWMgREVGSU5FX01VVEVYKHBzZV9wd19kX211dGV4KTtcbiBcbitzdGF0aWMgQkxPQ0tJTkdfTk9USUZJRVJfSEVBRChwc2VfY29udHJvbGxlcl9ub3RpZmllcik7XG4rXG4rLyoqXG4rICogcHNlX3JlZ2lzdGVyX25vdGlmaWVyIC0gcmVnaXN0ZXIgYSBjYWxsYmFjayBmb3IgUFNFIGNvbnRyb2xsZXIgZXZlbnRzXG4rICogQG5iOiBub3RpZmllciBibG9jayB0byByZWdpc3RlclxuKyAqXG4rICogU2VlIGVudW0gcHNlX2NvbnRyb2xsZXJfZXZlbnQgZm9yIGV2ZW50cyBmaXJlZCBhbmQgdGhlaXIgc3Vic2NyaWJlclxuKyAqIGNvbnRyYWN0LiBDYWxsYmFja3MgcnVuIGluIHByb2Nlc3MgY29udGV4dDsgdGhleSBtYXkgc2xlZXAsIHRha2VcbisgKiBydG5sLCBhbmQgY2FsbCBvZl9wc2VfY29udHJvbF9nZXQoKS4gVGhlIGNoYWluIGZpcmVzIHN5bmNocm9ub3VzbHksXG4rICogc28gYSBQU0UgY29udHJvbGxlciBkcml2ZXIncyBwcm9iZS91bmJpbmQgcGF0aCBtdXN0IG5vdCBob2xkIGFueVxuKyAqIHN1Y2ggbG9jayB3aGVuIGNhbGxpbmcgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoKSBvclxuKyAqIHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXIoKS5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cbisgKi9cbitpbnQgcHNlX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpXG4re1xuK1x0cmV0dXJuIGJsb2NraW5nX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKFx1MDAyNnBzZV9jb250cm9sbGVyX25vdGlmaWVyLCBuYik7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHBzZV9yZWdpc3Rlcl9ub3RpZmllcik7XG4rXG4rLyoqXG4rICogcHNlX3VucmVnaXN0ZXJfbm90aWZpZXIgLSB1bnJlZ2lzdGVyIGEgcHJldmlvdXNseSByZWdpc3RlcmVkIGNhbGxiYWNrXG4rICogQG5iOiBub3RpZmllciBibG9jayBwcmV2aW91c2x5IHBhc3NlZCB0byBwc2VfcmVnaXN0ZXJfbm90aWZpZXIoKVxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLlxuKyAqL1xuK2ludCBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKVxuK3tcbitcdHJldHVybiBibG9ja2luZ19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKFx1MDAyNnBzZV9jb250cm9sbGVyX25vdGlmaWVyLCBuYik7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyKTtcbitcbiAvKipcbiAgKiBzdHJ1Y3QgcHNlX2NvbnRyb2wgLSBhIFBTRSBjb250cm9sXG4gICogQHBjZGV2OiBhIHBvaW50ZXIgdG8gdGhlIFBTRSBjb250cm9sbGVyIGRldmljZVxuQEAgLTExMDQsNiArMTEzOCw5IEBAIGludCBwc2VfY29udHJvbGxlcl9yZWdpc3RlcihzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldilcbiBcdGxpc3RfYWRkKFx1MDAyNnBjZGV2LVx1MDAzZWxpc3QsIFx1MDAyNnBzZV9jb250cm9sbGVyX2xpc3QpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBzZV9saXN0X211dGV4KTtcbiBcbitcdGJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oXHUwMDI2cHNlX2NvbnRyb2xsZXJfbm90aWZpZXIsXG4rXHRcdFx0XHQgICAgIFBTRV9SRUdJU1RFUkVELCBwY2Rldik7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwocHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIpO1xuQEAgLTExMTQsNiArMTE1MSw5IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKTtcbiAgKi9cbiB2b2lkIHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXIoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXG4ge1xuK1x0YmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbihcdTAwMjZwc2VfY29udHJvbGxlcl9ub3RpZmllcixcbitcdFx0XHRcdCAgICAgUFNFX1VOUkVHSVNURVJFRCwgcGNkZXYpO1xuK1xuIFx0cHNlX2ZsdXNoX3B3X2RzKHBjZGV2KTtcbiBcdHBzZV9yZWxlYXNlX3BpcyhwY2Rldik7XG4gXHRpZiAocGNkZXYtXHUwMDNlaXJxKVxuQEAgLTE5ODEsMyArMjAyMSwxNyBAQCBib29sIHBzZV9oYXNfYzMzKHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYylcbiBcdHJldHVybiBwc2VjLVx1MDAzZXBjZGV2LVx1MDAzZXR5cGVzIFx1MDAyNiBFVEhUT09MX1BTRV9DMzM7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHBzZV9oYXNfYzMzKTtcbitcbisvKipcbisgKiBwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2IC0gVGVzdCB3aGV0aGVyIGEgcHNlX2NvbnRyb2wgdGFyZ2V0cyBhIGNvbnRyb2xsZXJcbisgKiBAcHNlYzogcHNlX2NvbnRyb2wgb2J0YWluZWQgZnJvbSBvZl9wc2VfY29udHJvbF9nZXQoKVxuKyAqIEBwY2RldjogUFNFIGNvbnRyb2xsZXIgdG8gY29tcGFyZSBhZ2FpbnN0XG4rICpcbisgKiBSZXR1cm46ICV0cnVlIGlmIEBwc2VjIHdhcyBvYnRhaW5lZCBmcm9tIEBwY2RldiwgJWZhbHNlIG90aGVyd2lzZS5cbisgKi9cbitib29sIHBzZV9jb250cm9sX21hdGNoZXNfcGNkZXYoc3RydWN0IHBzZV9jb250cm9sICpwc2VjLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2Rldilcbit7XG4rXHRyZXR1cm4gcHNlYy1cdTAwM2VwY2RldiA9PSBwY2Rldjtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwocHNlX2NvbnRyb2xfbWF0Y2hlc19wY2Rldik7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmhcbmluZGV4IDE5OWE3YWFhMzQxYmYuLjU1YTAwNDljNmMyYjUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5AQCAtMjE1OCw4ICsyMTU4LDEyIEBAIHN0cnVjdCBwaHlfZGV2aWNlICpmd25vZGVfcGh5X2ZpbmRfZGV2aWNlKHN0cnVjdCBmd25vZGVfaGFuZGxlICpwaHlfZndub2RlKTtcbiBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlX2dldF9waHlfbm9kZShjb25zdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKTtcbiBzdHJ1Y3QgcGh5X2RldmljZSAqZ2V0X3BoeV9kZXZpY2Uoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGJvb2wgaXNfYzQ1KTtcbiBpbnQgcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KTtcbisvKiBDYWxsZXIgbXVzdCBob2xkIHJ0bmxfbG9jaygpOyBzZWUgcGh5X2RldmljZV9yZWdpc3RlcigpIGZvciB0aGUgcHVibGljIGZvcm0uICovXG4raW50IHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpO1xuIHZvaWQgcGh5X2RldmljZV9mcmVlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIHZvaWQgcGh5X2RldmljZV9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4rdm9pZCBwaHlfcHNlX2NvbnRyb2xfbG9jayh2b2lkKTtcbit2b2lkIHBoeV9wc2VfY29udHJvbF91bmxvY2sodm9pZCk7XG4gaW50IHBoeV9nZXRfYzQ1X2lkcyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiBpbnQgcGh5X2luaXRfaHcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gaW50IHBoeV9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHNlLXBkL3BzZS5oIGIvaW5jbHVkZS9saW51eC9wc2UtcGQvcHNlLmhcbmluZGV4IDRlNTY5NmNmYWRlN2MuLmQ0MzEwY2E3MWEzZTAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BzZS1wZC9wc2UuaFxuKysrIGIvaW5jbHVkZS9saW51eC9wc2UtcGQvcHNlLmhcbkBAIC0yMSw2ICsyMSw3IEBAIHN0cnVjdCBuZXRfZGV2aWNlO1xuIHN0cnVjdCBwaHlfZGV2aWNlO1xuIHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXY7XG4gc3RydWN0IG5ldGxpbmtfZXh0X2FjaztcbitzdHJ1Y3Qgbm90aWZpZXJfYmxvY2s7XG4gXG4gLyogQzMzIFBTRSBleHRlbmRlZCBzdGF0ZSBhbmQgc3Vic3RhdGUuICovXG4gc3RydWN0IGV0aHRvb2xfYzMzX3BzZV9leHRfc3RhdGVfaW5mbyB7XG5AQCAtMzM3LDYgKzMzOCwyNCBAQCBlbnVtIHBzZV9idWRnZXRfZXZhbF9zdHJhdGVnaWVzIHtcbiBcdFBTRV9CVURHRVRfRVZBTF9TVFJBVF9EWU5BTUlDXHQ9IDEgXHUwMDNjXHUwMDNjIDIsXG4gfTtcbiBcbisvKipcbisgKiBlbnVtIHBzZV9jb250cm9sbGVyX2V2ZW50IC0gUFNFIGNvbnRyb2xsZXIgbGlmZWN5Y2xlIGV2ZW50c1xuKyAqXG4rICogRXZlbnQgZGF0YSBpbiBjYWxsYmFja3MgaXMgYWx3YXlzIGEgcG9pbnRlciB0byB0aGUgc3RydWN0XG4rICogcHNlX2NvbnRyb2xsZXJfZGV2IGZpcmluZyB0aGUgZXZlbnQuXG4rICpcbisgKiBAUFNFX1JFR0lTVEVSRUQ6IGNvbnRyb2xsZXIgYWRkZWQgdG8gcHNlX2NvbnRyb2xsZXJfbGlzdCBhbmRcbisgKlx0cmVzb2x2YWJsZSBieSBvZl9wc2VfY29udHJvbF9nZXQoKS5cbisgKiBAUFNFX1VOUkVHSVNURVJFRDogY29udHJvbGxlciBhYm91dCB0byBiZSByZW1vdmVkIGZyb21cbisgKlx0cHNlX2NvbnRyb2xsZXJfbGlzdC4gU3Vic2NyaWJlcnMgaG9sZGluZyBwc2VfY29udHJvbCByZWZlcmVuY2VzXG4rICpcdHRhcmdldGluZyBpdCBtdXN0IGRyb3AgdGhlbSBiZWZvcmUgcmV0dXJuaW5nIGFuZCBtdXN0IG5vdFxuKyAqXHRhY3F1aXJlIG5ldyByZWZlcmVuY2VzIGZvciBpdC5cbisgKi9cbitlbnVtIHBzZV9jb250cm9sbGVyX2V2ZW50IHtcbitcdFBTRV9SRUdJU1RFUkVELFxuK1x0UFNFX1VOUkVHSVNURVJFRCxcbit9O1xuK1xuICNpZiBJU19FTkFCTEVEKENPTkZJR19QU0VfQ09OVFJPTExFUilcbiBpbnQgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpO1xuIHZvaWQgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcihzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2Rldik7XG5AQCAtMzY2LDYgKzM4NSwxMiBAQCBpbnQgcHNlX2V0aHRvb2xfc2V0X3ByaW8oc3RydWN0IHBzZV9jb250cm9sICpwc2VjLFxuIGJvb2wgcHNlX2hhc19wb2RsKHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYyk7XG4gYm9vbCBwc2VfaGFzX2MzMyhzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMpO1xuIFxuK2Jvb2wgcHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldihzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KTtcbitcbitpbnQgcHNlX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpO1xuK2ludCBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTtcbitcbiAjZWxzZVxuIFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBzZV9jb250cm9sICpvZl9wc2VfY29udHJvbF9nZXQoc3RydWN0IGRldmljZV9ub2RlICpub2RlLFxuQEAgLTQxNiw2ICs0NDEsMjIgQEAgc3RhdGljIGlubGluZSBib29sIHBzZV9oYXNfYzMzKHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYylcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBib29sIHBzZV9jb250cm9sX21hdGNoZXNfcGNkZXYoc3RydWN0IHBzZV9jb250cm9sICpwc2VjLFxuK1x0XHRcdFx0XHQgICAgIHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxuK3tcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnQgcHNlX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuICNlbmRpZlxuIFxuICNlbmRpZlxuZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL3BzZS1wZC5jIGIvbmV0L2V0aHRvb2wvcHNlLXBkLmNcbmluZGV4IDc1N2M5ZTBjYzg1NmYuLjRlZGQ5YTUxNGRlMTQgMTAwNjQ0XG4tLS0gYS9uZXQvZXRodG9vbC9wc2UtcGQuY1xuKysrIGIvbmV0L2V0aHRvb2wvcHNlLXBkLmNcbkBAIC03MSw3ICs3MSw5IEBAIHN0YXRpYyBpbnQgcHNlX3ByZXBhcmVfZGF0YShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLFxuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbitcdHBoeV9wc2VfY29udHJvbF9sb2NrKCk7XG4gXHRyZXQgPSBwc2VfZ2V0X3BzZV9hdHRyaWJ1dGVzKHBoeWRldiwgaW5mby1cdTAwM2VleHRhY2ssIGRhdGEpO1xuK1x0cGh5X3BzZV9jb250cm9sX3VubG9jaygpO1xuIFxuIFx0ZXRobmxfb3BzX2NvbXBsZXRlKGRldik7XG4gXG5AQCAtMjgxLDkgKzI4MywxMiBAQCBldGhubF9zZXRfcHNlKHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXG4gXHRwaHlkZXYgPSBldGhubF9yZXFfZ2V0X3BoeWRldihyZXFfaW5mbywgdGIsIEVUSFRPT0xfQV9QU0VfSEVBREVSLFxuIFx0XHRcdFx0ICAgICAgaW5mby1cdTAwM2VleHRhY2spO1xuK1xuK1x0cGh5X3BzZV9jb250cm9sX2xvY2soKTtcbitcbiBcdHJldCA9IGV0aG5sX3NldF9wc2VfdmFsaWRhdGUocGh5ZGV2LCBpbmZvKTtcbiBcdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4rXHRcdGdvdG8gb3V0O1xuIFxuIFx0aWYgKHRiW0VUSFRPT0xfQV9QU0VfUFJJT10pIHtcbiBcdFx0dW5zaWduZWQgaW50IHByaW87XG5AQCAtMjkxLDcgKzI5Niw3IEBAIGV0aG5sX3NldF9wc2Uoc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbywgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0cHJpbyA9IG5sYV9nZXRfdTMyKHRiW0VUSFRPT0xfQV9QU0VfUFJJT10pO1xuIFx0XHRyZXQgPSBwc2VfZXRodG9vbF9zZXRfcHJpbyhwaHlkZXYtXHUwMDNlcHNlYywgaW5mby1cdTAwM2VleHRhY2ssIHByaW8pO1xuIFx0XHRpZiAocmV0KVxuLVx0XHRcdHJldHVybiByZXQ7XG4rXHRcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4gXHRpZiAodGJbRVRIVE9PTF9BX0MzM19QU0VfQVZBSUxfUFdfTElNSVRdKSB7XG5AQCAtMzAxLDcgKzMwNiw3IEBAIGV0aG5sX3NldF9wc2Uoc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbywgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0cmV0ID0gcHNlX2V0aHRvb2xfc2V0X3B3X2xpbWl0KHBoeWRldi1cdTAwM2Vwc2VjLCBpbmZvLVx1MDAzZWV4dGFjayxcbiBcdFx0XHRcdFx0ICAgICAgIHB3X2xpbWl0KTtcbiBcdFx0aWYgKHJldClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuIFx0LyogVGhlc2UgdmFsdWVzIGFyZSBhbHJlYWR5IHZhbGlkYXRlZCBieSB0aGUgZXRobmxfcHNlX3NldF9wb2xpY3kgKi9cbkBAIC0zMTksMTEgKzMyNCwxMSBAQCBldGhubF9zZXRfcHNlKHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdCAqL1xuIFx0XHRyZXQgPSBwc2VfZXRodG9vbF9zZXRfY29uZmlnKHBoeWRldi1cdTAwM2Vwc2VjLCBpbmZvLVx1MDAzZWV4dGFjayxcbiBcdFx0XHRcdFx0ICAgICBcdTAwMjZjb25maWcpO1xuLVx0XHRpZiAocmV0KVxuLVx0XHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4rb3V0OlxuIFx0LyogUmV0dXJuIGVycm5vIG9yIHplcm8gLSBQU0UgaGFzIG5vIG5vdGlmaWNhdGlvbiAqL1xuK1x0cGh5X3BzZV9jb250cm9sX3VubG9jaygpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMDo0MS4yNTYxMjUwMjdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjAwNTA1ODA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUFNFIENvbnRyb2wgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyByZWZhY3RvcmluZyBob3cgdGhlIGBwc2VfY29udHJvbGAgaXMgaGFuZGxlZCBpbiByZWxhdGlvbiB0byBgcGh5X2RldmljZWAuIFRoZXkncmUgaW50cm9kdWNpbmcgYSBgcGh5X3BzZV9sb2NrYCBtdXRleCBhbmQgYSBub3RpZmllciwgYHBoeV9wc2Vfbm90aWZpZXJgLCBmb3IgYFBTRV9SRUdJU1RFUkVEYCBhbmQgYFBTRV9VTlJFR0lTVEVSRURgIGV2ZW50cy4gU21hcnQgbW92ZTsgdGhhdCBhZGRzIHNvbWUgbXVjaC1uZWVkZWQgdGhyZWFkIHNhZmV0eS4gVGhleSd2ZSBhbHNvIHVwZGF0ZWQgYGV0aHRvb2xgIHRvIHVzZSB0aGUgbG9jay91bmxvY2sgYXJvdW5kIGBwaHlkZXYtXHUwMDNlcHNlY2AgYWNjZXNzZXMuIEkgc2VlIHRoZSBjb2RlIHRvdWNoZXMgYGRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNgLCBgZHJpdmVycy9uZXQvcGh5L3NmcC5jYCwgYGRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jYCwgcGx1cyBzb21lIGhlYWRlcnMuIEdvb2QsIHRoZXkndmUgY292ZXJlZCB0aGUga2V5IGFyZWFzLlxuXG5NeSBtYWluIGNvbmNlcm4gaXMgd2hldGhlciB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgdGVzdGFibGUsIGVzcGVjaWFsbHkgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gTGV0J3Mgc2VlLi4uIGBwaHlfZGV2aWNlLmNgIGlzIHRoZSBjb3JlIFBIWSBsaWJyYXJ5LCBhbmQgYGV0aHRvb2wvcHNlLXBkLmNgIGlzIHRoZSBldGh0b29sIG5ldGxpbmsgaW50ZXJmYWNlIGZvciBQU0UuIEFuZCBgcHNlLWNvcmUuY2AgaXMgdGhlIFBTRSBjb3JlIGl0c2VsZi4gU28sIGNhbiB3ZSBhY3R1YWxseSByZWFjaCB0aGUgUFNFIGNvcmU/XG5cblJpZ2h0LCB0aGUga2V5IGlzIHdoZXRoZXIgd2UgY2FuIGV4ZXJjaXNlIGl0LiBMZXQncyBkaWcgaW50byBgZXRodG9vbC9wc2UtcGQuY2AgYW5kIGBwc2VfY29yZS5jYC4gVGhpcyBpcyBhbGwgcGFydCBvZiB0aGUgUG9FIGxhbmRzY2FwZSwgUG93ZXIgb3ZlciBFdGhlcm5ldC4gQ2FuIHdlIHRyaWdnZXIgaXQgdGhyb3VnaCB0aGUgZXRodG9vbCBuZXRsaW5rIGludGVyZmFjZT8gQWgsIHllcywgYGV0aG5sX3NldF9wc2VgIGlzIGFuIGV0aHRvb2wgbmV0bGluayBjb21tYW5kLiBUaGF0J3MgYSBnb29kIGVudHJ5IHBvaW50LiBOb3csIHRvIHRyaWdnZXIgdGhlIG5vdGlmaWVyLCB3ZSBuZWVkIGEgUFNFIGNvbnRyb2xsZXIgdG8gcmVnaXN0ZXIgb3IgdW5yZWdpc3Rlci4gVGhhdCdzIHRoZSBjcnV4IG9mIGl0LlxuXG5TbywgdGhlIHF1ZXN0aW9uIG5vdyBpcywgYXJlIHRoZXJlIGFueSBzb2Z0d2FyZSBlbXVsYXRlZCBQU0UgY29udHJvbGxlcnM/IE9yIGNhbiB3ZSBzb21laG93IHRyaWdnZXIgYSByZWdpc3RyYXRpb24vdW5yZWdpc3RyYXRpb24gdXNpbmcgc29tZSBraW5kIG9mIGR1bW15IGRyaXZlcj8gVGltZSB0byBleHBsb3JlIHRoZSBgZHJpdmVycy9uZXQvcHNlLXBkL2AgZGlyZWN0b3J5IGFuZCBzZWUgaWYgYW55dGhpbmcganVtcHMgb3V0LiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gc2ltdWxhdGUgdGhvc2UgcmVnaXN0cmF0aW9uIGFuZCB1bnJlZ2lzdHJhdGlvbiBldmVudHMgZm9yIHByb3BlciB0ZXN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Mzc1LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTA6NDkuNDU2NjM0MDY1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkRpclwiOiBcImRyaXZlcnMvbmV0L3BzZS1wZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRmlsZXNcIjogW1xuICAgIFwicGQ2OTJ4MC5jXCIsXG4gICAgXCJwc2VfY29yZS5jXCIsXG4gICAgXCJwc2VfcmVndWxhdG9yLmNcIixcbiAgICBcInNpMzQ3NC5jXCIsXG4gICAgXCJ0cHMyMzg4MS5jXCJcbiAgXSxcbiAgXCJTdWJkaXJzXCI6IG51bGxcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjEwOjQ5LjQ1NjY5OTkzNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NjY4MjE3MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIFBvd2VyIERyaXZlcnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBwb3dlciBkcml2ZXIgZmlsZXM6IGBwZDY5MngwLmNgLCBgcHNlX3JlZ3VsYXRvci5jYCwgYHNpMzQ3NC5jYCwgYW5kIGB0cHMyMzg4MS5jYC4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBxdWlja2x5IHNlZSB3aGljaCBvbmVzIGFyZSB3b3J0aCBmdXJ0aGVyIGludmVzdGlnYXRpb24gYW5kIGhvdyB0aGV5IG1pZ2h0IGZpdCBpbnRvIHRoZSBzeXN0ZW0gYXJjaGl0ZWN0dXJlLiBgcHNlX3JlZ3VsYXRvci5jYCBoYXMgYSBkaXN0aW5jdCBwb3NzaWJpbGl0eSBvZiBiZWluZyBoYW5kbGVkIHRocm91Z2ggZWl0aGVyIHRoZSBkZXZpY2UgdHJlZSBvciBkaXJlY3Qgc29mdHdhcmUgaW5zdGFudGlhdGlvbi4gVGhpcyBtZXJpdHMgaW1tZWRpYXRlIGF0dGVudGlvbi4gTGV0J3MgZGl2ZSBpbnRvIGBwc2VfcmVndWxhdG9yLmNgIGZpcnN0IHRvIHNlZSB3aGF0IHRoZSBvcHRpb25zIGFyZSB0aGVyZS4gSSdtIGhvcGluZyBpdCdzIHdlbGwtc3RydWN0dXJlZCBhbmQgZm9sbG93cyBhIG1vZGVybiBhcHByb2FjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTMyNywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc4LCJUb29sQ2FsbHMiOlsiY29kZXNlYXJjaC1kaXItaW5kZXgiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMDo1My4yMjM1MjQyOTNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg0MDYyODgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBzZV9yZWd1bGF0b3JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9yZWd1bGF0b3IuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTA6NTMuMjcxOTM4NDYxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc4Njc5MDE1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBhcyB5b3VyIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipGb2N1czogU3RyYXRlZ2ljIFNpbXBsaWZpY2F0aW9uKipcblxuUmlnaHQsIGluc3RlYWQgb2Ygb3ZlcmNvbXBsaWNhdGluZyB0aGlzIG9yIGdvaW5nIGRvd24gc29tZSByYWJiaXQgaG9sZSBvZiBpbml0aWFsIGFuYWx5c2lzLCBJIHNob3VsZCBqdXN0Li4uICpyZWFkIHRoZSBmaWxlKi4gVGhhdOKAmXMgdGhlIG1vc3QgZGlyZWN0IHJvdXRlLiBJdCdzIHRvbyBlYXN5IHRvIGdldCBjYXVnaHQgdXAgaW4gcHJlbWF0dXJlIG9wdGltaXphdGlvbiBvciB0cnlpbmcgdG8gYW50aWNpcGF0ZSBldmVyeSBwb3NzaWJsZSBvdXRjb21lLiBKdXN0IGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UuIEdldCBhIGJhc2VsaW5lIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRhdGEgb3IgdGhlIGNvZGUgb3Igd2hhdGV2ZXIncyBpbiB0aGF0IGZpbGUuIFRoYXQgc2ltcGxlIGFjdCBpcyB0aGUgcmlnaHQgZmlyc3Qgc3RlcC4gRG9uJ3Qgb3ZlcnRoaW5rIGl0LCBsZXQgdGhlIGZpbGUgcmV2ZWFsIHdoYXQncyBpbXBvcnRhbnQsIHRoZW4gSSBjYW4gYWRqdXN0IGFjY29yZGluZ2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjA5LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMDo1Ny4wNTg3MzEwNzhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9wc2UtcGQvcHNlX3JlZ3VsYXRvci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdC8vXFxuICAgMzpcXHQvLyBEcml2ZXIgZm9yIHRoZSByZWd1bGF0b3IgYmFzZWQgRXRoZXJuZXQgUG93ZXIgU291cmNpbmcgRXF1aXBtZW50LCB3aXRob3V0XFxuICAgNDpcXHQvLyBhdXRvIGNsYXNzaWZpY2F0aW9uIHN1cHBvcnQuXFxuICAgNTpcXHQvL1xcbiAgIDY6XFx0Ly8gQ29weXJpZ2h0IChjKSAyMDIyIFBlbmd1dHJvbml4LCBPbGVrc2lqIFJlbXBlbCBcXHUwMDNja2VybmVsQHBlbmd1dHJvbml4LmRlXFx1MDAzZVxcbiAgIDc6XFx0Ly9cXG4gICA4OlxcdFxcbiAgIDk6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAgMTA6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mLmhcXHUwMDNlXFxuICAxMTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcXHUwMDNlXFxuICAxMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcHNlLXBkL3BzZS5oXFx1MDAzZVxcbiAgMTM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oXFx1MDAzZVxcbiAgMTQ6XFx0XFxuICAxNTpcXHRzdHJ1Y3QgcHNlX3JlZ19wcml2IHtcXG4gIDE2OlxcdFxcdHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgcGNkZXY7XFxuICAxNzpcXHRcXHRzdHJ1Y3QgcmVndWxhdG9yICpwczsgLypwb3dlciBzb3VyY2UgKi9cXG4gIDE4OlxcdFxcdGVudW0gZXRodG9vbF9wb2RsX3BzZV9hZG1pbl9zdGF0ZSBhZG1pbl9zdGF0ZTtcXG4gIDE5OlxcdH07XFxuICAyMDpcXHRcXG4gIDIxOlxcdHN0YXRpYyBzdHJ1Y3QgcHNlX3JlZ19wcml2ICp0b19wc2VfcmVnKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxcbiAgMjI6XFx0e1xcbiAgMjM6XFx0XFx0cmV0dXJuIGNvbnRhaW5lcl9vZihwY2Rldiwgc3RydWN0IHBzZV9yZWdfcHJpdiwgcGNkZXYpO1xcbiAgMjQ6XFx0fVxcbiAgMjU6XFx0XFxuICAyNjpcXHRzdGF0aWMgaW50XFxuICAyNzpcXHRwc2VfcmVnX3BpX2VuYWJsZShzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkKVxcbiAgMjg6XFx0e1xcbiAgMjk6XFx0XFx0c3RydWN0IHBzZV9yZWdfcHJpdiAqcHJpdiA9IHRvX3BzZV9yZWcocGNkZXYpO1xcbiAgMzA6XFx0XFx0aW50IHJldDtcXG4gIDMxOlxcdFxcbiAgMzI6XFx0XFx0cmV0ID0gcmVndWxhdG9yX2VuYWJsZShwcml2LVxcdTAwM2Vwcyk7XFxuICAzMzpcXHRcXHRpZiAocmV0KVxcbiAgMzQ6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gIDM1OlxcdFxcbiAgMzY6XFx0XFx0cHJpdi1cXHUwMDNlYWRtaW5fc3RhdGUgPSBFVEhUT09MX1BPRExfUFNFX0FETUlOX1NUQVRFX0VOQUJMRUQ7XFxuICAzNzpcXHRcXHRyZXR1cm4gMDtcXG4gIDM4OlxcdH1cXG4gIDM5OlxcdFxcbiAgNDA6XFx0c3RhdGljIGludFxcbiAgNDE6XFx0cHNlX3JlZ19waV9kaXNhYmxlKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXFxuICA0MjpcXHR7XFxuICA0MzpcXHRcXHRzdHJ1Y3QgcHNlX3JlZ19wcml2ICpwcml2ID0gdG9fcHNlX3JlZyhwY2Rldik7XFxuICA0NDpcXHRcXHRpbnQgcmV0O1xcbiAgNDU6XFx0XFxuICA0NjpcXHRcXHRyZXQgPSByZWd1bGF0b3JfZGlzYWJsZShwcml2LVxcdTAwM2Vwcyk7XFxuICA0NzpcXHRcXHRpZiAocmV0KVxcbiAgNDg6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gIDQ5OlxcdFxcbiAgNTA6XFx0XFx0cHJpdi1cXHUwMDNlYWRtaW5fc3RhdGUgPSBFVEhUT09MX1BPRExfUFNFX0FETUlOX1NUQVRFX0RJU0FCTEVEO1xcbiAgNTE6XFx0XFx0cmV0dXJuIDA7XFxuICA1MjpcXHR9XFxuICA1MzpcXHRcXG4gIDU0OlxcdHN0YXRpYyBpbnRcXG4gIDU1OlxcdHBzZV9yZWdfcGlfZ2V0X2FkbWluX3N0YXRlKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsXFxuICA1NjpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgcHNlX2FkbWluX3N0YXRlICphZG1pbl9zdGF0ZSlcXG4gIDU3OlxcdHtcXG4gIDU4OlxcdFxcdHN0cnVjdCBwc2VfcmVnX3ByaXYgKnByaXYgPSB0b19wc2VfcmVnKHBjZGV2KTtcXG4gIDU5OlxcdFxcbiAgNjA6XFx0XFx0YWRtaW5fc3RhdGUtXFx1MDAzZXBvZGxfYWRtaW5fc3RhdGUgPSBwcml2LVxcdTAwM2VhZG1pbl9zdGF0ZTtcXG4gIDYxOlxcdFxcbiAgNjI6XFx0XFx0cmV0dXJuIDA7XFxuICA2MzpcXHR9XFxuICA2NDpcXHRcXG4gIDY1OlxcdHN0YXRpYyBpbnRcXG4gIDY2OlxcdHBzZV9yZWdfcGlfZ2V0X3B3X3N0YXR1cyhzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkLFxcbiAgNjc6XFx0XFx0XFx0XFx0IHN0cnVjdCBwc2VfcHdfc3RhdHVzICpwd19zdGF0dXMpXFxuICA2ODpcXHR7XFxuICA2OTpcXHRcXHRzdHJ1Y3QgcHNlX3JlZ19wcml2ICpwcml2ID0gdG9fcHNlX3JlZyhwY2Rldik7XFxuICA3MDpcXHRcXHRpbnQgcmV0O1xcbiAgNzE6XFx0XFxuICA3MjpcXHRcXHRyZXQgPSByZWd1bGF0b3JfaXNfZW5hYmxlZChwcml2LVxcdTAwM2Vwcyk7XFxuICA3MzpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gIDc0OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuICA3NTpcXHRcXG4gIDc2OlxcdFxcdGlmICghcmV0KVxcbiAgNzc6XFx0XFx0XFx0cHdfc3RhdHVzLVxcdTAwM2Vwb2RsX3B3X3N0YXR1cyA9XFxuICA3ODpcXHRcXHRcXHRcXHRFVEhUT09MX1BPRExfUFNFX1BXX0RfU1RBVFVTX0RJU0FCTEVEO1xcbiAgNzk6XFx0XFx0ZWxzZVxcbiAgODA6XFx0XFx0XFx0cHdfc3RhdHVzLVxcdTAwM2Vwb2RsX3B3X3N0YXR1cyA9XFxuICA4MTpcXHRcXHRcXHRcXHRFVEhUT09MX1BPRExfUFNFX1BXX0RfU1RBVFVTX0RFTElWRVJJTkc7XFxuICA4MjpcXHRcXG4gIDgzOlxcdFxcdHJldHVybiAwO1xcbiAgODQ6XFx0fVxcbiAgODU6XFx0XFxuICA4NjpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHBzZV9jb250cm9sbGVyX29wcyBwc2VfcmVnX29wcyA9IHtcXG4gIDg3OlxcdFxcdC5waV9nZXRfYWRtaW5fc3RhdGUgPSBwc2VfcmVnX3BpX2dldF9hZG1pbl9zdGF0ZSxcXG4gIDg4OlxcdFxcdC5waV9nZXRfcHdfc3RhdHVzID0gcHNlX3JlZ19waV9nZXRfcHdfc3RhdHVzLFxcbiAgODk6XFx0XFx0LnBpX2VuYWJsZSA9IHBzZV9yZWdfcGlfZW5hYmxlLFxcbiAgOTA6XFx0XFx0LnBpX2Rpc2FibGUgPSBwc2VfcmVnX3BpX2Rpc2FibGUsXFxuICA5MTpcXHR9O1xcbiAgOTI6XFx0XFxuICA5MzpcXHRzdGF0aWMgaW50XFxuICA5NDpcXHRwc2VfcmVnX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuICA5NTpcXHR7XFxuICA5NjpcXHRcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGRldi1cXHUwMDNlZGV2O1xcbiAgOTc6XFx0XFx0c3RydWN0IHBzZV9yZWdfcHJpdiAqcHJpdjtcXG4gIDk4OlxcdFxcdGludCByZXQ7XFxuICA5OTpcXHRcXG4gMTAwOlxcdFxcdHByaXYgPSBkZXZtX2t6YWxsb2MoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjEwOjU3LjA1ODgyNjgyOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NDQ1NzcyMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGxhdGZvcm0gRGV2aWNlIERyaXZlciBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzOyBpdCBzZWVtcyB0byBiZSBhIHBsYXRmb3JtIGRldmljZSBkcml2ZXIuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkNhbiB3ZSB1dGlsaXplIGBldGh0b29sYCBjb21tYW5kcyBvbiBhIFBIWSBkZXZpY2UgZGlyZWN0bHk/XCIgTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0LCB5ZXMsIHdlICpjb3VsZCogYWNoaWV2ZSB0aGlzIGJ5IGVtcGxveWluZyBhIGR1bW15IG5ldHdvcmsgZGV2aWNlIHRoYXQncyBhc3NvY2lhdGVkIHdpdGggdGhlIFBIWS4gVGhhdCdzIGEgZ29vZCBhcHByb2FjaCB0byB0YWtlLiBCdXQgdGhlbiwgYSByZWQgZmxhZyDigJMgYW5kIGl0J3MgYW4gaW1wb3J0YW50IG9uZSDigJMgcG9wcyB1cDogYGV0aG5sX3NldF9wc2VgLiBXYWl0IGEgc2Vjb25k4oCmIHRoYXQncyBhbiBldGh0b29sIG5ldGxpbmsgY29tbWFuZC4gTm93LCBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrLiBMZXQncyBzZWUuLi4gdGhlIG1vc3QgbGlrZWx5IHNvdXJjZSB3b3VsZCBiZSBgbmV0L2V0aHRvb2wvcHNlLXBkLmNgLiBUaW1lIHRvIGRpZyBpbnRvIHRoYXQgYW5kIHNlZSBob3cgdGhleSBhcmUgcmVsYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExNTcsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjExOjAxLjUwMzQwNjMwN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvZXRodG9vbC9wc2UtcGQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNzUsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjc1OlxcdH1cXG4gMjc2OlxcdFxcbiAyNzc6XFx0c3RhdGljIGludFxcbiAyNzg6XFx0ZXRobmxfc2V0X3BzZShzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiAyNzk6XFx0e1xcbiAyODA6XFx0XFx0c3RydWN0IG5sYXR0ciAqKnRiID0gaW5mby1cXHUwMDNlYXR0cnM7XFxuIDI4MTpcXHRcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xcbiAyODI6XFx0XFx0aW50IHJldDtcXG4gMjgzOlxcdFxcbiAyODQ6XFx0XFx0cGh5ZGV2ID0gZXRobmxfcmVxX2dldF9waHlkZXYocmVxX2luZm8sIHRiLCBFVEhUT09MX0FfUFNFX0hFQURFUixcXG4gMjg1OlxcdFxcdFxcdFxcdFxcdCAgICAgIGluZm8tXFx1MDAzZWV4dGFjayk7XFxuIDI4NjpcXHRcXG4gMjg3OlxcdFxcdHBoeV9wc2VfY29udHJvbF9sb2NrKCk7XFxuIDI4ODpcXHRcXG4gMjg5OlxcdFxcdHJldCA9IGV0aG5sX3NldF9wc2VfdmFsaWRhdGUocGh5ZGV2LCBpbmZvKTtcXG4gMjkwOlxcdFxcdGlmIChyZXQpXFxuIDI5MTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMjkyOlxcdFxcbiAyOTM6XFx0XFx0aWYgKHRiW0VUSFRPT0xfQV9QU0VfUFJJT10pIHtcXG4gMjk0OlxcdFxcdFxcdHVuc2lnbmVkIGludCBwcmlvO1xcbiAyOTU6XFx0XFxuIDI5NjpcXHRcXHRcXHRwcmlvID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BTRV9QUklPXSk7XFxuIDI5NzpcXHRcXHRcXHRyZXQgPSBwc2VfZXRodG9vbF9zZXRfcHJpbyhwaHlkZXYtXFx1MDAzZXBzZWMsIGluZm8tXFx1MDAzZWV4dGFjaywgcHJpbyk7XFxuIDI5ODpcXHRcXHRcXHRpZiAocmV0KVxcbiAyOTk6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDMwMDpcXHRcXHR9XFxuIDMwMTpcXHRcXG4gMzAyOlxcdFxcdGlmICh0YltFVEhUT09MX0FfQzMzX1BTRV9BVkFJTF9QV19MSU1JVF0pIHtcXG4gMzAzOlxcdFxcdFxcdHVuc2lnbmVkIGludCBwd19saW1pdDtcXG4gMzA0OlxcdFxcbiAzMDU6XFx0XFx0XFx0cHdfbGltaXQgPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfQzMzX1BTRV9BVkFJTF9QV19MSU1JVF0pO1xcbiAzMDY6XFx0XFx0XFx0cmV0ID0gcHNlX2V0aHRvb2xfc2V0X3B3X2xpbWl0KHBoeWRldi1cXHUwMDNlcHNlYywgaW5mby1cXHUwMDNlZXh0YWNrLFxcbiAzMDc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHB3X2xpbWl0KTtcXG4gMzA4OlxcdFxcdFxcdGlmIChyZXQpXFxuIDMwOTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gMzEwOlxcdFxcdH1cXG4gMzExOlxcdFxcbiAzMTI6XFx0XFx0LyogVGhlc2UgdmFsdWVzIGFyZSBhbHJlYWR5IHZhbGlkYXRlZCBieSB0aGUgZXRobmxfcHNlX3NldF9wb2xpY3kgKi9cXG4gMzEzOlxcdFxcdGlmICh0YltFVEhUT09MX0FfUE9ETF9QU0VfQURNSU5fQ09OVFJPTF0gfHxcXG4gMzE0OlxcdFxcdCAgICB0YltFVEhUT09MX0FfQzMzX1BTRV9BRE1JTl9DT05UUk9MXSkge1xcbiAzMTU6XFx0XFx0XFx0c3RydWN0IHBzZV9jb250cm9sX2NvbmZpZyBjb25maWcgPSB7fTtcXG4gMzE2OlxcdFxcbiAzMTc6XFx0XFx0XFx0aWYgKHRiW0VUSFRPT0xfQV9QT0RMX1BTRV9BRE1JTl9DT05UUk9MXSlcXG4gMzE4OlxcdFxcdFxcdFxcdGNvbmZpZy5wb2RsX2FkbWluX2NvbnRyb2wgPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUE9ETF9QU0VfQURNSU5fQ09OVFJPTF0pO1xcbiAzMTk6XFx0XFx0XFx0aWYgKHRiW0VUSFRPT0xfQV9DMzNfUFNFX0FETUlOX0NPTlRST0xdKVxcbiAzMjA6XFx0XFx0XFx0XFx0Y29uZmlnLmMzM19hZG1pbl9jb250cm9sID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX0MzM19QU0VfQURNSU5fQ09OVFJPTF0pO1xcbiAzMjE6XFx0XFxuIDMyMjpcXHRcXHRcXHQvKiBwc2VfZXRodG9vbF9zZXRfY29uZmlnKCkgd2lsbCBkbyBub3RoaW5nIGlmIHRoZSBjb25maWdcXG4gMzIzOlxcdFxcdFxcdCAqIGlzIHplcm9cXG4gMzI0OlxcdFxcdFxcdCAqL1xcbiAzMjU6XFx0XFx0XFx0cmV0ID0gcHNlX2V0aHRvb2xfc2V0X2NvbmZpZyhwaHlkZXYtXFx1MDAzZXBzZWMsIGluZm8tXFx1MDAzZWV4dGFjayxcXG4gMzI2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmNvbmZpZyk7XFxuIDMyNzpcXHRcXHR9XFxuIDMyODpcXHRcXG4gMzI5OlxcdG91dDpcXG4gMzMwOlxcdFxcdC8qIFJldHVybiBlcnJubyBvciB6ZXJvIC0gUFNFIGhhcyBubyBub3RpZmljYXRpb24gKi9cXG4gMzMxOlxcdFxcdHBoeV9wc2VfY29udHJvbF91bmxvY2soKTtcXG4gMzMyOlxcdFxcdHJldHVybiByZXQ7XFxuIDMzMzpcXHR9XFxuIDMzNDpcXHRcXG4gMzM1OlxcdGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9wc2VfcmVxdWVzdF9vcHMgPSB7XFxuIDMzNjpcXHRcXHQucmVxdWVzdF9jbWRcXHRcXHQ9IEVUSFRPT0xfTVNHX1BTRV9HRVQsXFxuIDMzNzpcXHRcXHQucmVwbHlfY21kXFx0XFx0PSBFVEhUT09MX01TR19QU0VfR0VUX1JFUExZLFxcbiAzMzg6XFx0XFx0Lmhkcl9hdHRyXFx0XFx0PSBFVEhUT09MX0FfUFNFX0hFQURFUixcXG4gMzM5OlxcdFxcdC5yZXFfaW5mb19zaXplXFx0XFx0PSBzaXplb2Yoc3RydWN0IHBzZV9yZXFfaW5mbyksXFxuIDM0MDpcXHRcXHQucmVwbHlfZGF0YV9zaXplXFx0PSBzaXplb2Yoc3RydWN0IHBzZV9yZXBseV9kYXRhKSxcXG4gMzQxOlxcdFxcbiAzNDI6XFx0XFx0LnByZXBhcmVfZGF0YVxcdFxcdD0gcHNlX3ByZXBhcmVfZGF0YSxcXG4gMzQzOlxcdFxcdC5yZXBseV9zaXplXFx0XFx0PSBwc2VfcmVwbHlfc2l6ZSxcXG4gMzQ0OlxcdFxcdC5maWxsX3JlcGx5XFx0XFx0PSBwc2VfZmlsbF9yZXBseSxcXG4gMzQ1OlxcdFxcdC5jbGVhbnVwX2RhdGFcXHRcXHQ9IHBzZV9jbGVhbnVwX2RhdGEsXFxuIDM0NjpcXHRcXG4gMzQ3OlxcdFxcdC5zZXRcXHRcXHRcXHQ9IGV0aG5sX3NldF9wc2UsXFxuIDM0ODpcXHRcXHQvKiBQU0UgaGFzIG5vIG5vdGlmaWNhdGlvbiAqL1xcbiAzNDk6XFx0fTtcXG4gMzUwOlxcdFxcbiAzNTE6XFx0dm9pZCBldGhubF9wc2Vfc2VuZF9udGYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgbG9uZyBub3RpZnMpXFxuIDM1MjpcXHR7XFxuIDM1MzpcXHRcXHR2b2lkICpyZXBseV9wYXlsb2FkO1xcbiAzNTQ6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gMzU1OlxcdFxcdGludCByZXBseV9sZW47XFxuIDM1NjpcXHRcXHRpbnQgcmV0O1xcbiAzNTc6XFx0XFxuIDM1ODpcXHRcXHRBU1NFUlRfUlROTCgpO1xcbiAzNTk6XFx0XFxuIDM2MDpcXHRcXHRpZiAoIW5ldGRldiB8fCAhbm90aWZzKVxcbiAzNjE6XFx0XFx0XFx0cmV0dXJuO1xcbiAzNjI6XFx0XFxuIDM2MzpcXHRcXHRyZXBseV9sZW4gPSBldGhubF9yZXBseV9oZWFkZXJfc2l6ZSgpICtcXG4gMzY0OlxcdFxcdFxcdCAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7IC8qIF9QU0VfTlRGX0VWRU5UUyAqL1xcbiAzNjU6XFx0XFxuIDM2NjpcXHRcXHRza2IgPSBnZW5sbXNnX25ldyhyZXBseV9sZW4sIEdGUF9LRVJORUwpO1xcbiAzNjc6XFx0XFx0aWYgKCFza2IpXFxuIDM2ODpcXHRcXHRcXHRyZXR1cm47XFxuIDM2OTpcXHRcXG4gMzcwOlxcdFxcdHJlcGx5X3BheWxvYWQgPSBldGhubF9iY2FzdG1zZ19wdXQoc2tiLCBFVEhUT09MX01TR19QU0VfTlRGKTtcXG4gMzcxOlxcdFxcdGlmICghcmVwbHlfcGF5bG9hZClcXG4gMzcyOlxcdFxcdFxcdGdvdG8gZXJyX3NrYjtcXG4gMzczOlxcdFxcbiAzNzQ6XFx0XFx0cmV0ID0gZXRobmxfZmlsbF9yZXBseV9oZWFkZXIoc2tiLCBuZXRkZXYsIEVUSFRPT0xfQV9QU0VfTlRGX0hFQURFUik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjExOjAxLjUwMzQ5OTQ0N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTY2MzQ5NzQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIENvZGUgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gYGV0aG5sX3NldF9wc2VgIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIOKAkyB0aGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBUaGUgcGF0Y2ggdG91Y2hlcyBgcGh5X2RldmljZV9yZWdpc3RlcmAsIGBwaHlfZGV2aWNlX3JlbW92ZWAsIGFuZCBgcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWRgLCBhbGwgY29yZSBmdW5jdGlvbnMgZm9yIFBIWSBkZXZpY2UgcmVnaXN0cmF0aW9uLiBUaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgUEhZIHJlZ2lzdHJhdGlvbiBpcyBmdW5kYW1lbnRhbC4gV2UgY2FuIGRlZmluaXRlbHkgY3JlYXRlIGFuIGVudmlyb25tZW50IHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLCBldmVuIGluIFFFTVUsIHRocm91Z2ggYG1hY2JgLCBgZTEwMDBgLCBvciBvdGhlciBlbXVsYXRlZCBOSUNzLCBhbmQgcG9zc2libHkgdGhyb3VnaCBkdW1teSBQSFlzLCBhcyBhIHN0YXJ0aW5nIHBvaW50LlxuXG5UaGUgYHBoeV9wc2Vfbm90aWZpZXJgIGlzIGludHJvZHVjZWQgYW5kIHJlZ2lzdGVyZWQgaW4gYHBoeV9pbml0YC4gVGhlIG5vdGlmaWVyIGl0c2VsZiBpcyB0cmlnZ2VyZWQgYnkgYHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyYCBhbmQgYHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXJgLiBUaGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgd2UgY2FuIHRyaWdnZXIgYHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyYCBhdCBhbGwuIExvYWRpbmcgYSBQU0UgZHJpdmVyIGlzIHRoZSBvYnZpb3VzIHJvdXRlLCBidXQgdGhvc2UgYXJlIHR5cGljYWxseSBwbGF0Zm9ybSBkcml2ZXJzLiBDb3VsZCB0aGVyZSBiZSBhIHdheSB0byBmb3JjZSBhIHJlZ2lzdHJhdGlvbiBmcm9tIHVzZXJzcGFjZSwgcGVyaGFwcyB2aWEgZGV2aWNlIHRyZWUgb3ZlcmxheXM/IE1heWJlIGEgZHVtbXkgUFNFIGRyaXZlciBpcyB0aGUgYW5zd2VyLlxuXG5CdXQgaG9sZCBvbiwgdGhlIG5vdGlmaWVyIGdldHMgdHJpZ2dlcmVkIG9uICpyZWdpc3RyYXRpb24qIG9mIGEgUFNFIGNvbnRyb2xsZXIuIFRoZSBpbXBvcnRhbnQgdGhpbmcgaXMgdGhhdCwgZXZlbiBpZiBnZXR0aW5nIGEgUFNFIGNvbnRyb2xsZXIgcmVnaXN0ZXJlZCBpcyBkaWZmaWN1bHQsIHRoZSBgRVRIVE9PTF9NU0dfUFNFX0dFVGAgYW5kIGBFVEhUT09MX01TR19QU0VfU0VUYCBuZXRsaW5rIGNvbW1hbmRzLCB3aGljaCB1dGlsaXplIGBldGhubF9zZXRfcHNlYCwgYXJlIHJlYWNoYWJsZSBhbmQgbm93IHVzZSBgcGh5X3BzZV9jb250cm9sX2xvY2soKWAuIEFsc28sIHdlIGhhdmUgdGhlIG9yaWdpbmFsIGBwaHlfZGV2aWNlX3JlZ2lzdGVyYCBhbmQgYHBoeV9kZXZpY2VfcmVtb3ZlYCB3aGljaCBhbHNvIHVzZSBgcGh5X3BzZV9sb2NrYC4gU28sIHRoaXMgaXMgYSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBQSFkgbGlicmFyeSBhbmQgZXRodG9vbC4gSXQncyBkZWZpbml0ZWx5IHJpcGUgZm9yIGZ1enppbmcuXG5cbioqVGFyZ2V0IEZ1bmN0aW9ucyoqXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdG8gdGFyZ2V0OlxuXG4qICAgYHBoeV90cnlfYXR0YWNoX3BzZWBcbiogICBgcGh5X3BzZV9hdHRhY2hfb25lYFxuKiAgIGBwaHlfcHNlX2RldGFjaF9vbmVgXG4qICAgYHBoeV9wc2Vfbm90aWZpZXJfZXZlbnRgXG4qICAgYHBoeV9wc2VfY29udHJvbF9sb2NrYFxuKiAgIGBwaHlfcHNlX2NvbnRyb2xfdW5sb2NrYFxuKiAgIGBfX3BoeV9kZXZpY2VfcmVnaXN0ZXJgXG4qICAgYHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkYFxuKiAgIGBwaHlfZGV2aWNlX3JlZ2lzdGVyYFxuKiAgIGBwaHlfZGV2aWNlX3JlbW92ZWBcbiogICBgcHNlX3JlZ2lzdGVyX25vdGlmaWVyYFxuKiAgIGBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcmBcbiogICBgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXJgXG4qICAgYHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXJgXG4qICAgYHBzZV9jb250cm9sX21hdGNoZXNfcGNkZXZgXG4qICAgYGV0aG5sX3NldF9wc2VgXG4qICAgYHBzZV9wcmVwYXJlX2RhdGFgXG5cbioqQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5IENoZWNrKipcblxuV2UgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGltcGxpY2F0aW9ucy4gVGhlIGBpbmNsdWRlL2xpbnV4L3BzZS1wZC9wc2UuaGAgZmlsZSByZXZlYWxzIHRoYXQgYHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyYCwgYHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXJgLCBgcHNlX3JlZ2lzdGVyX25vdGlmaWVyYCBhbmQgYHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyYCBhcmUgb25seSBkZWZpbmVkIGlmIGBDT05GSUdfUFNFX0NPTlRST0xMRVJgIGlzIGVuYWJsZWQuIElmIG5vdCBlbmFibGVkLCB0aGVzZSBmdW5jdGlvbnMgcHJvYmFibHkgcmVzb2x2ZSB0byBlbXB0eSAoaW5saW5lKSBmdW5jdGlvbnMgb3IgcmV0dXJuIGVhcmx5LlxuXG5Ib3dldmVyLCBiZWNhdXNlIGBwaHlfaW5pdGAgY2FsbHMgYHBzZV9yZWdpc3Rlcl9ub3RpZmllcmAgd2l0aG91dCBjaGVja2luZyBmb3IgdGhlIGNvbmZpZyBvcHRpb24sIGV2ZW4gaWYgYENPTkZJR19QU0VfQ09OVFJPTExFUmAgaXNuJ3Qgc2V0LCBgcGh5X2luaXRgIHdpbGwgc3RpbGwgYmUgY2FsbGVkLiBJdCB3aWxsIGNhbGwgdGhlIGVtcHR5L2lubGluZSBgcHNlX3JlZ2lzdGVyX25vdGlmaWVyYCwgd2hpY2ggd2lsbCByZXR1cm4gMCBhbmQgY29udGludWUuXG5cblNvLCB0byB0ZXN0IHRoZSBhY3R1YWwgbm90aWZpZXIgcmVnaXN0cmF0aW9uIGFuZCBjaGFpbiwgd2UgKm5lZWQqIHRvIGVuYWJsZSBgQ09ORklHX1BTRV9DT05UUk9MTEVSYC4gV2Ugc2hvdWxkIGNoZWNrIHRoZSBLY29uZmlnIGluIGBkcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZ2AgZm9yIHJlbGF0ZWQgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwNzksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMToxMy4xNjY5OTk4NDZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODcwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIEV0aGVybmV0IFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudCBkcml2ZXJzXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnVjb25maWcgUFNFX0NPTlRST0xMRVJcXG4gICA3OlxcdFxcdGJvb2wgXFxcIkV0aGVybmV0IFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudCBTdXBwb3J0XFxcIlxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiBSRUdVTEFUT1JcXG4gICA5OlxcdFxcdGhlbHBcXG4gIDEwOlxcdFxcdCAgR2VuZXJpYyBQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQgQ29udHJvbGxlciBzdXBwb3J0LlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IG5vLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRpZiBQU0VfQ09OVFJPTExFUlxcbiAgMTU6XFx0XFxuICAxNjpcXHRjb25maWcgUFNFX1JFR1VMQVRPUlxcbiAgMTc6XFx0XFx0dHJpc3RhdGUgXFxcIlJlZ3VsYXRvciBiYXNlZCBQU0UgY29udHJvbGxlclxcXCJcXG4gIDE4OlxcdFxcdGhlbHBcXG4gIDE5OlxcdFxcdCAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgc3VwcG9ydCBmb3Igc2ltcGxlIHJlZ3VsYXRvciBiYXNlZCBFdGhlcm5ldCBQb3dlclxcbiAgMjA6XFx0XFx0ICBTb3VyY2luZyBFcXVpcG1lbnQgd2l0aG91dCBhdXRvbWF0aWMgY2xhc3NpZmljYXRpb24gc3VwcG9ydC4gRm9yXFxuICAyMTpcXHRcXHQgIGV4YW1wbGUgZm9yIGJhc2ljIGltcGxlbWVudGF0aW9uIG9mIFBvREwgKDgwMi4zYnUpIHNwZWNpZmljYXRpb24uXFxuICAyMjpcXHRcXG4gIDIzOlxcdGNvbmZpZyBQU0VfUEQ2OTJYMFxcbiAgMjQ6XFx0XFx0dHJpc3RhdGUgXFxcIlBENjkyWDAgUFNFIGNvbnRyb2xsZXJcXFwiXFxuICAyNTpcXHRcXHRkZXBlbmRzIG9uIEkyQ1xcbiAgMjY6XFx0XFx0c2VsZWN0IEZXX0xPQURFUlxcbiAgMjc6XFx0XFx0c2VsZWN0IEZXX1VQTE9BRFxcbiAgMjg6XFx0XFx0aGVscFxcbiAgMjk6XFx0XFx0ICBUaGlzIG1vZHVsZSBwcm92aWRlcyBzdXBwb3J0IGZvciBQRDY5MngwIHJlZ3VsYXRvciBiYXNlZCBFdGhlcm5ldFxcbiAgMzA6XFx0XFx0ICBQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQuXFxuICAzMTpcXHRcXG4gIDMyOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuICAzMzpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwZDY5MngwLlxcbiAgMzQ6XFx0XFxuICAzNTpcXHRjb25maWcgUFNFX1NJMzQ3NFxcbiAgMzY6XFx0XFx0dHJpc3RhdGUgXFxcIlNpMzQ3NCBQU0UgY29udHJvbGxlclxcXCJcXG4gIDM3OlxcdFxcdGRlcGVuZHMgb24gSTJDXFxuICAzODpcXHRcXHRoZWxwXFxuICAzOTpcXHRcXHQgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHN1cHBvcnQgZm9yIFNpMzQ3NCByZWd1bGF0b3IgYmFzZWQgRXRoZXJuZXRcXG4gIDQwOlxcdFxcdCAgUG93ZXIgU291cmNpbmcgRXF1aXBtZW50LlxcbiAgNDE6XFx0XFx0ICBPbmx5IDQtcGFpciBQU0UgY29uZmlndXJhdGlvbnMgYXJlIHN1cHBvcnRlZC5cXG4gIDQyOlxcdFxcbiAgNDM6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gIDQ0OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNpMzQ3NC5cXG4gIDQ1OlxcdFxcbiAgNDY6XFx0Y29uZmlnIFBTRV9UUFMyMzg4MVxcbiAgNDc6XFx0XFx0dHJpc3RhdGUgXFxcIlRQUzIzODgxIFBTRSBjb250cm9sbGVyXFxcIlxcbiAgNDg6XFx0XFx0ZGVwZW5kcyBvbiBJMkNcXG4gIDQ5OlxcdFxcdGhlbHBcXG4gIDUwOlxcdFxcdCAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgc3VwcG9ydCBmb3IgVFBTMjM4ODEgcmVndWxhdG9yIGJhc2VkIEV0aGVybmV0XFxuICA1MTpcXHRcXHQgIFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudC5cXG4gIDUyOlxcdFxcbiAgNTM6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gIDU0OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHRwczIzODgxLlxcbiAgNTU6XFx0ZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTE6MTMuMTY3MDg4Njg2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwMTEwMjQxMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29uZmlndXJhdGlvbiwgYW5kIGl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gYFBTRV9DT05UUk9MTEVSYCBkZXBlbmRzIG9uIGBSRUdVTEFUT1JgLCBzbyBuYXR1cmFsbHksIEkgbmVlZCB0byBlbmFibGUgYm90aC4gQnV0IHRoZW4gSSByZW1lbWJlciBgUFNFX0NPTlRST0xMRVJgIGlzIGp1c3QgYSBib29sZWFuOyBpdCdzIG9uIG9yIG9mZi4gVGhhdCBtYWtlcyB0aGluZ3MgYSBiaXQgc2ltcGxlci5cblxuSSBuZWVkIHRvIHNlZSBpZiB3ZSBoYXZlIGEgZHVtbXkgUFNFIGRyaXZlciBvciBpZiBlbmFibGluZyBgUFNFX1JFR1VMQVRPUmAgd2lsbCBnaXZlIHVzIG9uZS4gQWgsIGdvb2QsIGBQU0VfUkVHVUxBVE9SYCBpcyBgdHJpc3RhdGVgLiBTbywgSSAqY2FuKiBlbmFibGUgaXQuIFRoYXQgc2V0dGxlcyBpdDogbXkgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgbmVlZHMgdG8gaW5jbHVkZSBgUFNFX0NPTlRST0xMRVJgIGFuZCBgUkVHVUxBVE9SYC4gRWFzeSBwZWFzeS5cblxuTm93LCBqdXN0IHRvIGJlIHRob3JvdWdoLCBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgbmV0L2V0aHRvb2wvcHNlLXBkLmNgLiBJJ20gZ3Vlc3NpbmcgdGhhdCBjb2RlIGhhcyBzb21lIGRlcGVuZGVuY3kgb24gYFBTRV9DT05UUk9MTEVSYCwgb3IgYXQgdGhlIHZlcnkgbGVhc3QsIHRob3NlIGV0aHRvb2wgUFNFIGNvbW1hbmRzIGFyZSBhbHdheXMgY29tcGlsZWQgaWYgYEVUSFRPT0xfTkVUTElOS2AgaXMgZW5hYmxlZCwgZXZlbiBpZiB0aGV5IHJldHVybiBhbiBlcnJvciBpZiBgUFNFX0NPTlRST0xMRVJgIGlzIG5vdC4gSnVzdCB0byBjb25maXJtIG15IGFzc3VtcHRpb25zLCBJJ2xsIHRha2UgYSBxdWljayBsb29rIGF0IGBuZXQvZXRodG9vbC9NYWtlZmlsZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MzQ2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTE6MjAuMTc4MTE1MjY0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzMwMDkxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHNlLXBkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9ldGh0b29sL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvZXRodG9vbC9NYWtlZmlsZT03PWV0aHRvb2xfbmwteVxcdDo9IG5ldGxpbmsubyBiaXRzZXQubyBzdHJzZXQubyBsaW5raW5mby5vIGxpbmttb2Rlcy5vIHJzcy5vIFxcXFxcXG4tLVxcbm5ldC9ldGh0b29sL01ha2VmaWxlLTEwLVxcdFxcdCAgIHR1bm5lbHMubyBmZWMubyBlZXByb20ubyBzdGF0cy5vIHBoY192Y2xvY2tzLm8gbW0ubyBcXFxcXFxubmV0L2V0aHRvb2wvTWFrZWZpbGU6MTE6XFx0XFx0ICAgbW9kdWxlLm8gY21pc19md191cGRhdGUubyBjbWlzX2NkYi5vIHBzZS1wZC5vIHBsY2EubyBcXFxcXFxubmV0L2V0aHRvb2wvTWFrZWZpbGUtMTItXFx0XFx0ICAgcGh5Lm8gdHNjb25maWcubyBtc2Uub1xcbi0tXFxubmV0L2V0aHRvb2wvcHNlLXBkLmMtMTQtI2luY2x1ZGUgXFxcImNvbW1vbi5oXFxcIlxcbm5ldC9ldGh0b29sL3BzZS1wZC5jOjE1OiNpbmNsdWRlIFxcXCJsaW51eC9wc2UtcGQvcHNlLmhcXFwiXFxubmV0L2V0aHRvb2wvcHNlLXBkLmMtMTYtI2luY2x1ZGUgXFxcIm5ldGxpbmsuaFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTE6MjAuNDExMTI5MDc0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5NTY0NzI1NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgUFNFIENvbXBpbGF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBjb25maXJtaW5nIHRoYXQgYHBzZS1wZC5vYCBpcyBpbmRlZWQgYWx3YXlzIGNvbXBpbGVkIHdoZW4gYGV0aHRvb2xfbmwteWAgaXMgaW5jbHVkZWQsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGViYXNlLiBOb3csIEkgbmVlZCB0byBwaW5wb2ludCB0aGUga2V5IHN5bWJvbHMgaW52b2x2ZWQgaW4gdGhpcyBgcHNlYCBmdW5jdGlvbmFsaXR5LiBMZXQncyBzZWUuLi5cblxuSSdtIG1ha2luZyBhIG1lbnRhbCBsaXN0IG9mIHRoZSBjb3JlIHN5bWJvbHMuIEknbSBnb2luZyB0byB0cmFjayBgcGh5X3RyeV9hdHRhY2hfcHNlYCwgYnV0IGl0J3MgKnN0YXRpYyogd2hpY2ggbWVhbnMgaXQgbWlnaHQgZ2V0IGlubGluZWQsIHNvIEknbGwgYmUgc3VyZSB0byBhbHNvIG1ha2UgYSBub3RlIG9mIHRoZSBmdW5jdGlvbnMgdGhhdCBjYWxsIGl0OiBgcGh5X3BzZV9hdHRhY2hfb25lYCwgYHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkYCwgYW5kIGBwaHlfZGV2aWNlX3JlZ2lzdGVyYC4gSSdsbCBwcm9iYWJseSBmb2N1cyBvbiB0aGUgbm9uLXN0YXRpYyBvbmVzIHNpbmNlIHRoZSBpbmxpbmluZyB3aWxsIG1lYW4gdGhlIGFjdHVhbCBzeW1ib2wgbWlnaHQgbm90IGJlIGF2YWlsYWJsZSBhdCBydW50aW1lLiBUaGUgb3RoZXJzIG9uIG15IGxpc3QgYXJlOiBgcGh5X3BzZV9jb250cm9sX2xvY2tgLCBgcGh5X3BzZV9jb250cm9sX3VubG9ja2AsIGBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZGAsIGBwaHlfZGV2aWNlX3JlZ2lzdGVyYCwgYHBoeV9kZXZpY2VfcmVtb3ZlYCwgYHBzZV9yZWdpc3Rlcl9ub3RpZmllcmAsIGBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcmAsIGBwc2VfY29udHJvbGxlcl9yZWdpc3RlcmAsIGBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyYCwgYHBzZV9jb250cm9sX21hdGNoZXNfcGNkZXZgLCBgZXRobmxfc2V0X3BzZWAsIGFuZCBgcHNlX3ByZXBhcmVfZGF0YWAuXG5cbkknbGwgc3RhcnQgYnkgdGFraW5nIGEgY2xvc2VyIGxvb2sgYXQgYHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkYCBhbmQgYHBoeV9kZXZpY2VfcmVnaXN0ZXJgIHRvIHNlZSBob3cgdGhvc2UgaW50ZWdyYXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjA4MywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMToyNy4zNjc2MDUwOTVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MzkxNjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMjI2PXN0YXRpYyBpbnQgX19waHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEyNTktLyoqXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMjYwOiAqIHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkIC0gUmVnaXN0ZXIgdGhlIHBoeSBkZXZpY2Ugb24gdGhlIE1ESU8gYnVzXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMjYxLSAqIEBwaHlkZXY6IHBoeV9kZXZpY2Ugc3RydWN0dXJlIHRvIGJlIGFkZGVkIHRvIHRoZSBNRElPIGJ1c1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMjY2LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTI2NzppbnQgcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEyNjgte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMjgyLX1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEyODM6RVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZCk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMjg0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMToyNy40MTQ5OTk4NTNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk4NDU1NjgwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIFBIWSBhbmQgUFNFIEV4cG9ydHMqKlxuXG5Pa2F5LCBzbyBJJ20gZG91YmxlLWNoZWNraW5nIHRoZSBzeW1ib2wgZXhwb3J0cyBoZXJlLCBhbmQgeWVzLCBpdCBzZWVtcyBgcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWRgIGlzIGluZGVlZCBleHBvcnRlZCwgd2hpY2ggaXMgZ29vZC4gVGhhdCdzIGEgZnVuZGFtZW50YWwgUEhZIGZ1bmN0aW9uLiBBbmQganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGBwaHlfZGV2aWNlX3JlZ2lzdGVyYCBpcyBhbHNvIGV4cG9ydGVkLCBhcyBJIHdvdWxkIGV4cGVjdC4gVGhlIHJlbW92YWwgZnVuY3Rpb24sIGBwaHlfZGV2aWNlX3JlbW92ZWAsIGlzIGFsc28gYWNjb3VudGVkIGZvciwgc28gdGhlIGNvcmUgUEhZIHJlZ2lzdHJhdGlvbiBhbmQgZGVyZWdpc3RyYXRpb24gYXBwZWFyIHRvIGJlIHdlbGwtZGVmaW5lZC5cblxuTW92aW5nIG9uIHRvIHRoZSBQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQsIHRoZSBQU0Ugc2lkZTogSSBzZWUgYHBzZV9yZWdpc3Rlcl9ub3RpZmllcmAgYW5kIGBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcmAgZXhwb3J0ZWQsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciBoYW5kbGluZyBub3RpZmljYXRpb25zLiBBbmQgdGhlIGNvbnRyb2xsZXIgcmVnaXN0cmF0aW9uIGFuZCB1bnJlZ2lzdHJhdGlvbiBmdW5jdGlvbnMsIGBwc2VfY29udHJvbGxlcl9yZWdpc3RlcmAgYW5kIGBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyYCwgYXJlIGFsc28gYXZhaWxhYmxlLiBGaW5hbGx5LCBpdCBhcHBlYXJzIGBwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2YCBpcyBhcyB3ZWxsLiBUaGF04oCZcyBwcm9iYWJseSBpbXBvcnRhbnQgZm9yIG1hdGNoaW5nIFBTRSBjb250cm9sIHdpdGggdGhlIHBsYXRmb3JtIGRldmljZS5cblxuTm93LCBhIGJyaWVmIHBhdXNlLiBJIHNlZSB0aGF0IGBldGhubF9zZXRfcHNlYCBpcyBzdGF0aWMuLi4gaG1tLiBMZXQgbWUgcXVpY2tseSBjaGVjayB3aGVyZSB0aGF0IGlzIGRlZmluZWQuLi4gQWgsIHJpZ2h0LCB0aGF0J3MgaW4gYG5ldC9ldGh0b29sL3BzZS1wZC5jYC4gT2theSwgdGhhdCBtYWtlcyBtb3JlIHNlbnNlIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5NjAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTE6MzMuMzk5NTU5MjI2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjkwNTczOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJldGhubF9zZXRfcHNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9ldGh0b29sL3BzZS1wZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9ldGh0b29sL3BzZS1wZC5jPTI0ND1zdGF0aWMgaW50XFxubmV0L2V0aHRvb2wvcHNlLXBkLmM6MjQ1OmV0aG5sX3NldF9wc2VfdmFsaWRhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5uZXQvZXRodG9vbC9wc2UtcGQuYy0yNDYte1xcbi0tXFxubmV0L2V0aHRvb2wvcHNlLXBkLmM9Mjc3PXN0YXRpYyBpbnRcXG5uZXQvZXRodG9vbC9wc2UtcGQuYzoyNzg6ZXRobmxfc2V0X3BzZShzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbm5ldC9ldGh0b29sL3BzZS1wZC5jLTI3OS17XFxuLS1cXG5uZXQvZXRodG9vbC9wc2UtcGQuYy0yODgtXFxubmV0L2V0aHRvb2wvcHNlLXBkLmM6Mjg5OlxcdHJldCA9IGV0aG5sX3NldF9wc2VfdmFsaWRhdGUocGh5ZGV2LCBpbmZvKTtcXG5uZXQvZXRodG9vbC9wc2UtcGQuYy0yOTAtXFx0aWYgKHJldClcXG4tLVxcbm5ldC9ldGh0b29sL3BzZS1wZC5jPTMzNT1jb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfcHNlX3JlcXVlc3Rfb3BzID0ge1xcbi0tXFxubmV0L2V0aHRvb2wvcHNlLXBkLmMtMzQ2LVxcbm5ldC9ldGh0b29sL3BzZS1wZC5jOjM0NzpcXHQuc2V0XFx0XFx0XFx0PSBldGhubF9zZXRfcHNlLFxcbm5ldC9ldGh0b29sL3BzZS1wZC5jLTM0OC1cXHQvKiBQU0UgaGFzIG5vIG5vdGlmaWNhdGlvbiAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMTozMy40NDY0NzA4ODRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI3Mzg4OTQzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0d29yayBMaW5rIENvbmZpZ3VyYXRpb24gYW5kIFBvdGVudGlhbCBTeW1ib2wgVmlzaWJpbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBldGhubF9zZXRfcHNlYC4gSXQncyBkZWZpbmVkIGFzIGBzdGF0aWNgLCB3aGljaCB1c3VhbGx5IG1lYW5zIGl0J3Mgbm90IG1lYW50IHRvIGJlIGFjY2Vzc2VkIGZyb20gb3V0c2lkZSB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0LiBIb3dldmVyLCBJIHNlZSBpdCdzIGFzc2lnbmVkIHRvIHRoZSBgLnNldGAgbWVtYmVyIG9mIGBldGhubF9wc2VfcmVxdWVzdF9vcHNgLiBUaGF0J3MgYSBuZXRsaW5rIGZ1bmN0aW9uIHBvaW50ZXIuIFRoZXJlZm9yZSwgZXZlbiB0aG91Z2ggaXQncyBzdGF0aWMsIGl0J3MgYWN0dWFsbHkgcmVhY2hhYmxlIHRocm91Z2ggbmV0bGluayBjb21tdW5pY2F0aW9uLiBJbnRlcmVzdGluZy5cblxuVGhpcyBtZWFucyBJIG5lZWQgdG8gY29uc2lkZXIgYGV0aG5sX3NldF9wc2VgIGZvciBpbmNsdXNpb24gaW4gYEZvY3VzU3ltYm9sc2AsIGFzc3VtaW5nIGl0J3Mgbm90IGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLiBHaXZlbiB0aGF0IGl0J3MgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyLCBJJ20gcHJldHR5IGNvbmZpZGVudCBpdCAqd29uJ3QqIGJlIGlubGluZWQuIEZ1bmN0aW9uIHBvaW50ZXJzIHVzdWFsbHkgcHJldmVudCB0aGF0IGtpbmQgb2Ygb3B0aW1pemF0aW9uLlxuXG5XYWl0IGEgbWludXRlLCBgcHNlX3ByZXBhcmVfZGF0YWAgaXMgKmFsc28qIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlci4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGFzIHdlbGwuIEl0IGNvdWxkIGJlIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBzYW1lIG1lY2hhbmlzbS4gTmVlZCB0byBhbmFseXplIGl0cyB1c2FnZSBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzc0OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMTozOC43MjAzNjI5ODlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMTMyMDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBzZV9wcmVwYXJlX2RhdGFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2V0aHRvb2wvcHNlLXBkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2V0aHRvb2wvcHNlLXBkLmM9MzY9c3RhdGljIGludCBwc2VfZ2V0X3BzZV9hdHRyaWJ1dGVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuLS1cXG5uZXQvZXRodG9vbC9wc2UtcGQuYy01NC1cXG5uZXQvZXRodG9vbC9wc2UtcGQuYzo1NTpzdGF0aWMgaW50IHBzZV9wcmVwYXJlX2RhdGEoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfYmFzZSxcXG5uZXQvZXRodG9vbC9wc2UtcGQuYy01Ni1cXHRcXHRcXHQgICAgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2Jhc2UsXFxuLS1cXG5uZXQvZXRodG9vbC9wc2UtcGQuYz0zMzU9Y29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX3BzZV9yZXF1ZXN0X29wcyA9IHtcXG4tLVxcbm5ldC9ldGh0b29sL3BzZS1wZC5jLTM0MS1cXG5uZXQvZXRodG9vbC9wc2UtcGQuYzozNDI6XFx0LnByZXBhcmVfZGF0YVxcdFxcdD0gcHNlX3ByZXBhcmVfZGF0YSxcXG5uZXQvZXRodG9vbC9wc2UtcGQuYy0zNDMtXFx0LnJlcGx5X3NpemVcXHRcXHQ9IHBzZV9yZXBseV9zaXplLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMTozOC43NzE1MDEzMzdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDExNTM1MTI4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkNoZWNraW5nIFJlYWNoYWJpbGl0eSBhbmQgRXZlbnQgTm90aWZpY2F0aW9uKipcblxuT2theSwgaXQgc2VlbXMgbGlrZSBgcHNlX3ByZXBhcmVfZGF0YWAgaXMgaW5kZWVkIGFjY2Vzc2libGUg4oCTIHRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgSSBuZWVkIHRvIHNoaWZ0IG15IGZvY3VzIHRvIHRoZSBldmVudCBub3RpZmljYXRpb24gbWVjaGFuaXNtLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aXRoIGBwaHlfcHNlX25vdGlmaWVyX2V2ZW50YC4gVW5kZXJzdGFuZGluZyBob3cgYW5kIHdoZW4gdGhpcyBpcyB0cmlnZ2VyZWQsIGFuZCB3aGF0IGluZm9ybWF0aW9uIGl0IHJlbGF5cywgaXMgY3J1Y2lhbCBmb3IgWyoqaW5zZXJ0IHlvdXIgZmllbGQvZXhwZXJ0aXNlIGhlcmUsIGUuZy4sIGRlYnVnZ2luZyBuZXR3b3JrIHN0YWNrIGludGVyYWN0aW9ucywgdmFsaWRhdGluZyBkYXRhIHBpcGVsaW5lIGludGVncml0eSwgYW5hbHl6aW5nIHNlbnNvciBmdXNpb24gYXJjaGl0ZWN0dXJlKipdLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGl0J3Mgb3BlcmF0aW5nIGFzIGV4cGVjdGVkIGFuZCBhY2N1cmF0ZWx5IHJlZmxlY3RpbmcgdGhlIHN0YXRlIG9mIFsqKmluc2VydCByZWxldmFudCBzeXN0ZW0vY29tcG9uZW50IGhlcmUsIGUuZy4sIHRoZSBwaHlzaWNhbCBsYXllciBkYXRhIHN0cmVhbSwgdGhlIFBTRSBtb2R1bGUsIHRoZSBzZW5zb3IgaW50ZXJmYWNlKipdLiBUaGlzIGNoZWNrIGlzIGNyaXRpY2FsIGZvciBbKipleHBsYWluIHdoeSB0aGlzIGlzIGltcG9ydGFudCBmb3IgeW91ciBmaWVsZCwgZS5nLiwgZW5zdXJpbmcgZGF0YSBpbnRlZ3JpdHkgYWNyb3NzIHRoZSBuZXR3b3JrLCB2ZXJpZnlpbmcgdGhlIHRpbWluZyBvZiBkYXRhIHByb2Nlc3NpbmcsIHZhbGlkYXRpbmcgdGhlIHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIG1vZHVsZXMqKl0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MzYwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTE6NDIuODg2ODU1MzY5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzc4MjMwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwaHlfcHNlX25vdGlmaWVyX2V2ZW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMTUwPXN0YXRpYyBpbnQgcGh5X3BzZV9kZXRhY2hfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTE3MC1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExNzE6c3RhdGljIGludCBwaHlfcHNlX25vdGlmaWVyX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTcyLVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTE5Mj1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBoeV9wc2Vfbm90aWZpZXIgX19yZWFkX21vc3RseSA9IHtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExOTM6XFx0Lm5vdGlmaWVyX2NhbGwgPSBwaHlfcHNlX25vdGlmaWVyX2V2ZW50LFxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTE5NC19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMTo0Mi45MzQ2NDI5NThaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQxNjI0MTQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIHlvdXIgc3VtbWFyeTpcblxuKipGdW5jdGlvbiBQb2ludGVyIEFuYWx5c2lzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgdGhpcyBvcGVyYXRpb24gaXMgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0J3MgKm5vdCogaW5saW5lZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IGZvciBwZXJmb3JtYW5jZSBhbmQgY29udHJvbCBmbG93LiBLbm93aW5nIGl0J3MgYSBwb2ludGVyIG1lYW5zIHRoZXJlJ3MgYW4gaW5kaXJlY3Rpb24sIHdoaWNoIGNhbiBiZSBzbG93ZXIgdGhhbiBhIGRpcmVjdCBjYWxsLCBhbmQgaXQgYWxzbyBtZWFucyB0aGUgY29tcGlsZXIgbWlnaHQgbm90IGJlIGFibGUgdG8gb3B0aW1pemUgaXQgYXMgYWdncmVzc2l2ZWx5LlxuXG5UbyBnZXQgYSBoYW5kbGUgb24gdGhlIHNpdHVhdGlvbiwgSSBuZWVkIHRvIHNlZSB3aGF0J3MgYWN0dWFsbHkgYmVpbmcgKnBvaW50ZWQqIHRvLiBJJ2xsIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIHRoYXQgZnVuY3Rpb24gcG9pbnRlci4gVGhhdCBtZWFucyBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGZ1bmN0aW9ucyB3aGVyZSB0aGlzIHRoaW5nIGlzIHVzZWQuIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYHBoeV9wc2VfYXR0YWNoX29uZWAgYW5kIGBwaHlfcHNlX2RldGFjaF9vbmVgLiBFeGFtaW5pbmcgdGhlc2UgZnVuY3Rpb25zIHNob3VsZCByZXZlYWwgdGhlIGNvbmNyZXRlIGZ1bmN0aW9ucyB0aGF0IHRoaXMgZnVuY3Rpb24gcG9pbnRlciBpcyBhY3R1YWxseSBzZXQgdG8uIFRoaXMgd2lsbCBoZWxwIGNsYXJpZnkgdGhlIG92ZXJhbGwgZGVzaWduIGFuZCBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODg0OCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjExOjQ3LjM1MDg4Njc5OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYyMzM1NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X3BzZV9hdHRhY2hfb25lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMTE0PXN0YXRpYyB2b2lkIHBoeV90cnlfYXR0YWNoX3BzZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTM4LVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTEzOTpzdGF0aWMgaW50IHBoeV9wc2VfYXR0YWNoX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEgX19tYXliZV91bnVzZWQpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTQwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTE3MT1zdGF0aWMgaW50IHBoeV9wc2Vfbm90aWZpZXJfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTE3Ny1cXHRcXHRidXNfZm9yX2VhY2hfZGV2KFxcdTAwMjZtZGlvX2J1c190eXBlLCBOVUxMLCBOVUxMLFxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTE3ODpcXHRcXHRcXHRcXHQgcGh5X3BzZV9hdHRhY2hfb25lKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExNzktXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwaHlfcHNlX2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMTo0Ny4zOTcxMjQ2MzZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkzNTM0NDI2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6XG5cbioqQW5hbHl6aW5nIERldmljZSBBdHRhY2htZW50IGluIGEgUEhZIENvbnRleHQqKlxuXG5SaWdodCwgc28gdGhlc2UgZGV2aWNlIGF0dGFjaG1lbnQgb3BlcmF0aW9ucyBhcmVuJ3QgaW5saW5lZCwgdGhleSBhcmUgYmVpbmcgcGFzc2VkIHRvIGBidXNfZm9yX2VhY2hfZGV2YC4gVGhhdCB0ZWxscyBtZSB3ZSdyZSBsaWtlbHkgZGVhbGluZyB3aXRoIGEgYnVzLWJhc2VkIGVudW1lcmF0aW9uIGFuZCBub3Qgc29tZXRoaW5nIGhhcHBlbmluZyB3aXRoaW4gdGhlIGNvbmZpbmVzIG9mIGEgc2luZ2xlIGZ1bmN0aW9uIGNhbGwuIFRoaXMgaXMgaW1wb3J0YW50IGNvbnRleHQsIHBhcnRpY3VsYXJseSB3aGVuIHRyeWluZyB0byBncmFzcCB0aGUgc2NvcGUgb2YgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBhbmQgaW50ZXJhY3Rpb25zLiBTaW5jZSBpdCdzIGl0ZXJhdGluZywgdGhpcyBwcm9iYWJseSBtZWFucyB0aGVyZSBhcmUgbXVsdGlwbGUgZGV2aWNlcyBvciBzdWItZGV2aWNlcyBiZWluZyBoYW5kbGVkIGR1cmluZyBhdHRhY2htZW50LlxuXG5HaXZlbiB0aGUgY29udGV4dCwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGluIHVuZGVyc3RhbmRpbmcgdGhlIGRldmljZSBhdHRhY2htZW50IHByb2Nlc3MgaXMgdG8gZXhhbWluZSBgcGh5X3RyeV9hdHRhY2hfcHNlYC4gSSBzaG91bGQgZGl2ZSBpbnRvIHRoYXQgZnVuY3Rpb24gbm93IHRvIHNlZSBob3cgdGhlIFBoeXNpY2FsIExheWVyIGRldmljZSAoUEhZKSBhdHRlbXB0cyB0byBjb25uZWN0IHRvIG9yIGludGVyYWN0IHdpdGggc29tZXRoaW5nIGl0IGNhbGxzIFwiUFNFLFwiIGxpa2VseSBQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQsIHBhcnRpY3VsYXJseSBzaW5jZSB3ZSdyZSBub3QgZGVhbGluZyB3aXRoIGlubGluZSBjb2RlLiBVbmRlcnN0YW5kaW5nIHRoZSByb2xlIG9mIHRoZSBQU0UgZHVyaW5nIGRldmljZSBhdHRhY2htZW50IHdpbGwgcHJvdmlkZSBjcml0aWNhbCBpbnNpZ2h0cyBpbnRvIHRoZSBwb3dlciBtYW5hZ2VtZW50IGFzcGVjdCBhbmQgaG93IHRoZXNlIGRldmljZXMgYXJlIGludGVncmF0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NDA0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTE6NTEuMzMyNDcyNTE3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTIzNDYxMDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X3RyeV9hdHRhY2hfcHNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMTA2PXN0YXRpYyBERUZJTkVfTVVURVgocGh5X3BzZV9sb2NrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTExMy0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExMTQ6c3RhdGljIHZvaWQgcGh5X3RyeV9hdHRhY2hfcHNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTE1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTEzOT1zdGF0aWMgaW50IHBoeV9wc2VfYXR0YWNoX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEgX19tYXliZV91bnVzZWQpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExNDUtXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMTQ2OlxcdHBoeV90cnlfYXR0YWNoX3BzZSh0b19waHlfZGV2aWNlKGRldikpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTE0Ny1cXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTI2Nz1pbnQgcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTI3Ny1cXHRtdXRleF9sb2NrKFxcdTAwMjZwaHlfcHNlX2xvY2spO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTI3ODpcXHRwaHlfdHJ5X2F0dGFjaF9wc2UocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEyNzktXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwaHlfcHNlX2xvY2spO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMjkxPWludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEyOTktXFx0bXV0ZXhfbG9jayhcXHUwMDI2cGh5X3BzZV9sb2NrKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEzMDA6XFx0cGh5X3RyeV9hdHRhY2hfcHNlKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMzAxLVxcdG11dGV4X3VubG9jayhcXHUwMDI2cGh5X3BzZV9sb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTE6NTEuNTI0ODIzNDY5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MTkwMzg1ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgQ29kZSBGbG93OiBTa2lwcGluZyB0aGUgSW5saW5lZCoqXG5cblJpZ2h0LCB0aGlzIGxvb2tzIGxpa2UgYSBzdHJhaWdodGZvcndhcmQsIHN0YXRpY2FsbHkgZGVmaW5lZCBjYWxsLiBJdCdzIGxpa2VseSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBmb3IgZWZmaWNpZW5jeS4gTm8gbmVlZCB0byBkaWcgaW50byBpdCBoZXJlOyB0aGUgY29tcGlsZXIncyBwcm9iYWJseSB0YWtlbiBjYXJlIG9mIGl0LiBMZXQncyBtb3ZlIG9uIGFuZCBnZXQgdG8gdGhlIGltcG9ydGFudCBwYXJ0LiBNeSBuZXh0IGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHRoZSBgX19waHlfZGV2aWNlX3JlZ2lzdGVyYCBmdW5jdGlvbiBhbmQgaG93IGl0IHdvcmtzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDE5MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjExOjU3LjI0Mzg2NTgyM1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI2NTM0NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19waHlfZGV2aWNlX3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMjE2PUVYUE9SVF9TWU1CT0xfR1BMKHBoeV9wc2VfY29udHJvbF91bmxvY2spO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMjI1LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTIyNjpzdGF0aWMgaW50IF9fcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTIyNy17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTEyNjc9aW50IHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEyNzItXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMjczOlxcdGVyciA9IF9fcGh5X2RldmljZV9yZWdpc3RlcihwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTI3NC1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMjkxPWludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEyOTQtXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMjk1OlxcdGVyciA9IF9fcGh5X2RldmljZV9yZWdpc3RlcihwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTI5Ni1cXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMTo1Ny4yOTY1MjM3NTFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODE3NTUwODI5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBTRSBEcml2ZXIgYW5kIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhpcyBQU0UgZHJpdmVyLiBUaGUgaW5pdGlhbCBjbHVlIGlzIHRoYXQgdGhpcyBjb2RlIGlzIGxpa2VseSBkaXJlY3RseSBjYWxsZWQsIGFuZCBwb3NzaWJseSBpbmxpbmVkLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gc3BlY2lmaWMgc3ltYm9scyB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBhbmQgcmVsYXRpb25zaGlwcy4gSSBuZWVkIHRvIGtlZXAgYW4gZXllIG91dCBmb3IgdGhlc2U6IGBwaHlfcHNlX2NvbnRyb2xfbG9ja2AsIGBwaHlfcHNlX2NvbnRyb2xfdW5sb2NrYCwgYHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkYCwgYHBoeV9kZXZpY2VfcmVnaXN0ZXJgLCBgcGh5X2RldmljZV9yZW1vdmVgLCBgcHNlX3JlZ2lzdGVyX25vdGlmaWVyYCwgYHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyYCwgYHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyYCwgYHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXJgLCBgcHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldmAsIGBldGhubF9zZXRfcHNlYCwgYHBzZV9wcmVwYXJlX2RhdGFgLCBgcGh5X3BzZV9hdHRhY2hfb25lYCwgYW5kIGBwaHlfcHNlX2RldGFjaF9vbmVgLCBgcGh5X3BzZV9ub3RpZmllcl9ldmVudGAuIFRoZXNlIGZ1bmN0aW9ucyB3aWxsIHBhaW50IHRoZSBwaWN0dXJlIG9mIGhvdyBpdCBhbGwgd29ya3MuXG5cbk5vdywgSSBuZWVkIHRvIHZlcmlmeSB3aGljaCBjb25maWd1cmF0aW9ucyBhcmUgcmVxdWlyZWQgZm9yIHRoaXMgZHJpdmVyIHRvIGZ1bmN0aW9uLiBMZXQgbWUgc2VlLi4uIEkndmUgZ290IGBDT05GSUdfUFNFX0NPTlRST0xMRVJgIGFuZCBgQ09ORklHX1JFR1VMQVRPUmAgdGhhdCBhcmUgb2J2aW91c2x5IG5lZWRlZC4gV2FpdCwgaXQgc2VlbXMgbGlrZSB0aGUgYFBTRV9SRUdVTEFUT1JgIGlzIGFjdHVhbGx5IHRoZSBkcml2ZXIuIFNvIEknbGwgbmVlZCBgQ09ORklHX1BTRV9SRUdVTEFUT1JgLi4uIEFoIHllcywgdGhhdCdzIGl0LiBJdCdzIGxpc3RlZCBpbiBgZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWdgLiBJIHNlZSBgY29uZmlnIFBTRV9SRUdVTEFUT1JgIGluIHRoZXJlLiBPaywgc28gYFBTRV9SRUdVTEFUT1JgIGlzIHRoZSBjb25maWcgbmFtZSBmb3IgdGhlIGRyaXZlci4gV2FpdCwgYFBTRV9DT05UUk9MTEVSYCBpcyBhIGJvb2xlYW4sIHdoaWxlIGBQU0VfUkVHVUxBVE9SYCBpcyBhIHRyaXN0YXRlLiBUaGVyZWZvcmUsIGJvdGggYFBTRV9DT05UUk9MTEVSYCwgYFBTRV9SRUdVTEFUT1JgLCBhbmQgYFJFR1VMQVRPUmAgY29uZmlncyBzaG91bGQgZGVmaW5pdGVseSBnbyBpbnRvIGBFbmFibGVDb25maWdzYC5cblxuTmV4dCwgSSdsbCBuZWVkIHRvIHNlZSBpZiBpdCdzIGNvbXBpbGVkLiBJJ2xsIGNoZWNrIGBuZXQvZXRodG9vbC9wc2UtcGQuY2AuIFRoZSBkcml2ZXIgaXMgY29tcGlsZWQgaWYgYENPTkZJR19FVEhUT09MX05FVExJTktgIGlzIGVuYWJsZWQuIFRoYXQgc2hvdWxkIGJlIGVuYWJsZWQgYnkgZGVmYXVsdCwgc28gSSdtIGxpa2VseSBnb29kIHRoZXJlLlxuXG5JJ2xsIGFsc28gaGF2ZSB0byBtYWtlIHN1cmUgdGhlIGNvcmUgUEhZIGxpYnJhcnkgaXMgYXZhaWxhYmxlLiBMb29raW5nIGF0IGBkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jYCwgaXQncyBjb21waWxlZCBpZiBgQ09ORklHX1BIWUxJQmAgaXMgZW5hYmxlZC4gVGhhdCdzIHVzdWFsbHkgZW5hYmxlZCwgc28gSSdtIHByb2JhYmx5IGZpbmUuXG5cbkZpbmFsbHksIHRoZSBwYXRjaCBtZW50aW9ucyBjaGFuZ2VzIHRvIGBzZnBfc21fcHJvYmVfcGh5YCBpbiBgc2ZwLmNgLiBMZXQgbWUganVzdCBkb3VibGUgY2hlY2sgaWYgYHNmcC5jYCBpcyBjb21waWxlZC4gT2ssIGp1c3QgbWFraW5nIHN1cmUgZXZlcnl0aGluZyBpcyByZWFkeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA3MDksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTI6MDUuNDcyMDM0MloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ1ODM2NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2ZwLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT0yND1vYmotJChDT05GSUdfTkVUV09SS19QSFlfVElNRVNUQU1QSU5HKSArPSBtaWlfdGltZXN0YW1wZXIub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0yNS1cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6MjY6b2JqLSQoQ09ORklHX1NGUClcXHRcXHQrPSBzZnAub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToyNzpzZnAtb2JqLSQoQ09ORklHX1NGUClcXHRcXHQrPSBzZnAtYnVzLm9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6Mjg6b2JqLXlcXHRcXHRcXHRcXHQrPSAkKHNmcC1vYmoteSkgJChzZnAtb2JqLW0pXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTI5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMjowNS41MjY2MjI1MThaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA4NDY1NTE0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2Ugc3RlcHM6XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIHRyYWNraW5nIGEgZGVwZW5kZW5jeSBoZXJlLiBJIHNlZSB0aGF0IHRoZSBgc2ZwLmNgIG1vZHVsZSBhYnNvbHV0ZWx5IG5lZWRzIGBDT05GSUdfU0ZQYCB0byBjb21waWxlLiBNYWtlcyBwZXJmZWN0IHNlbnNlLiBSaWdodCwgbGV0J3MgZ2V0IHRoYXQgc3F1YXJlZCBhd2F5LiBJJ2xsIGFkZCBgU0ZQYCB0byB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QuIE5vIHJlYXNvbiB0byBsZWF2ZSB0aGF0IGhhbmdpbmcuXG5cbldoaWxlIEknbSBhdCBpdCwgSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGlzIGBkcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmNgIGZpbGUuIEFoLCB5ZXMsIGl0IGRlcGVuZHMgb24gYENPTkZJR19GV05PREVfTURJT2AsIGFzIGV4cGVjdGVkLiBHb29kLiBJdCdzIGFsd2F5cyBhIGdvb2QgaWRlYSB0byBjb25maXJtIHRob3NlIGRlcGVuZGVuY2llcyBhbmQgZW5zdXJlIEkndmUgZ290IGV2ZXJ5dGhpbmcgbGluZWQgdXAgaW4gbXkgaGVhZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE5NzYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMjoxMS42MTEyODAyNjZaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5Njg1MTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZ3bm9kZV9tZGlvLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlPTQ9b2JqLSQoQ09ORklHX0FDUElfTURJTylcXHRcXHQrPSBhY3BpX21kaW8ub1xcbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6NTpvYmotJChDT05GSUdfRldOT0RFX01ESU8pXFx0Kz0gZndub2RlX21kaW8ub1xcbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGUtNi1vYmotJChDT05GSUdfT0ZfTURJTylcXHRcXHQrPSBvZl9tZGlvLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTI6MTEuNjYwOTY5Njc0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg2MjM4ODAzNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQSFkgYW5kIFBTRSBDb250cm9sbGVyIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGlua2luZyB3ZSBuZWVkIHRvIGFkZCBgRldOT0RFX01ESU9gIHRvIGBFbmFibGVDb25maWdzYC4gTGV0J3MgcmV2aWV3IHRoZSBpbXBsaWNhdGlvbnMgaGVyZTsgdGhpcyBpcyBhIHByZXR0eSBzdWJzdGFudGlhbCBjaGFuZ2UgaW4gaG93IHRoZSBQSFkgbGlicmFyeSBhbmQgZXRodG9vbCBoYW5kbGUgUFNFIGNvbnRyb2xsZXJzLlxuXG5UaGUgcGF0Y2ggaXMgc2hpZnRpbmcgdGhlIFBTRSBjb250cm9sIGF0dGFjaG1lbnQuIEluc3RlYWQgb2YgYXR0YWNoaW5nIGl0IHRocm91Z2ggYGZ3bm9kZV9tZGlvYnVzX3JlZ2lzdGVyX3BoeWAsIGl0J3Mgbm93IGJlaW5nIGhhbmRsZWQgaW4gYHBoeV9kZXZpY2VfcmVnaXN0ZXJgIGFuZCwgY3J1Y2lhbGx5LCBgcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWRgLiBUaGF0J3MgYSBrZXkgbW92ZS4gVG8gc2VyaWFsaXplIGFjY2VzcyB0byBgcGh5ZGV2LVx1MDAzZXBzZWNgIGFnYWluc3QgdGhlIFBTRSBub3RpZmllciBhbmQgZXRodG9vbCwgd2UncmUgaW50cm9kdWNpbmcgYSBgcGh5X3BzZV9sb2NrYCBtdXRleC4gVGhpcyBpcyBhIHZlcnkgZ29vZCBpZGVhIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zLiBXZSdyZSBhbHNvIGludHJvZHVjaW5nIGEgYHBoeV9wc2Vfbm90aWZpZXJgIG5vdGlmaWVyIHdoaWNoIHdpbGwgYXR0YWNoIGFuZCBkZXRhY2ggdGhlIFBTRSBjb250cm9sIGFzIHRoZSBQU0UgY29udHJvbGxlciByZWdpc3RlcnMgYW5kIHVucmVnaXN0ZXJzLlxuXG5UaGUgY2hhbmdlcyB0byBgZXRobmxfc2V0X3BzZWAgYW5kIGBwc2VfcHJlcGFyZV9kYXRhYCB0byB1c2UgYHBoeV9wc2VfY29udHJvbF9sb2NrKClgIGFuZCBgcGh5X3BzZV9jb250cm9sX3VubG9jaygpYCBhcmUgYWxzbyBzbWFydC4gSXQncyBzb2xpZGlmeWluZyB0aGUgbG9ja2luZyB0byBlbnN1cmUgZGF0YSBjb25zaXN0ZW5jeS4gQW5kIGZpbmFsbHksIHRoZSBtb2RpZmljYXRpb24gdG8gYHNmcF9zbV9wcm9iZV9waHlgIHRvIHVzZSBgcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWRgIGluc3RlYWQgb2YgYHBoeV9kZXZpY2VfcmVnaXN0ZXJgIGZvbGxvd3MgdGhpcyBjaGFuZ2UgYW5kIHVzZXMgcHJvcGVyIGxvY2tpbmcgaW4gdGhhdCBmdW5jdGlvbiBhcyB3ZWxsLlxuXG5UaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBzaGlmdC4gVGhpcyBpcyBsaWtlbHkgZml4aW5nIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIGxpZmVjeWNsZSBpc3N1ZSB3aXRoIFBTRSBjb250cm9sbGVycyB0aGF0IHdlIHByb2JhYmx5IHNhdyBkdXJpbmcgdGVzdGluZy4gSXQgZGVmaW5pdGVseSB3YXJyYW50cyBhIGZ1bGwgZnV6emluZyBwYXNzLlxuXG5Ob3csIEkgd2FudCB0byBtYWtlIHN1cmUgSSdtIGZ1bGx5IHVwIHRvIHNwZWVkIG9uIGFsbCB0aGUgc3ltYm9scyBhZmZlY3RlZC4gTGV0IG1lIGZvY3VzIG9uOiBgcGh5X3BzZV9jb250cm9sX2xvY2tgLCBgcGh5X3BzZV9jb250cm9sX3VubG9ja2AsIGBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZGAsIGBwaHlfZGV2aWNlX3JlZ2lzdGVyYCwgYHBoeV9kZXZpY2VfcmVtb3ZlYCwgYHBzZV9yZWdpc3Rlcl9ub3RpZmllcmAsIGBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcmAsIGBwc2VfY29udHJvbGxlcl9yZWdpc3RlcmAsIGBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyYCwgYHBzZV9jb250cm9sX21hdGNoZXNfcGNkZXZgLCBgZXRobmxfc2V0X3BzZWAsIGBwc2VfcHJlcGFyZV9kYXRhYCwgYHBoeV9wc2VfYXR0YWNoX29uZWAsIGBwaHlfcHNlX2RldGFjaF9vbmVgLCBhbmQgYHBoeV9wc2Vfbm90aWZpZXJfZXZlbnRgLiBUaGVzZSBhcmUgYWxsIGNlbnRyYWwgdG8gdGhlIGxvZ2ljIGhlcmUuXG5cbldlIG5lZWQgdG8gY29uZmlybSB0aGUgY29ycmVjdCBlbmFibGVtZW50IGNvbmZpZ3MuIFdlIG5lZWQgYFBTRV9DT05UUk9MTEVSYCwgYFBTRV9SRUdVTEFUT1JgLCBgUkVHVUxBVE9SYCwgYFNGUGAsIGFuZCBgRldOT0RFX01ESU9gLlxuXG5MZXQncyBkb3VibGUtY2hlY2sgdGhlIGBQU0VfUkVHVUxBVE9SYCBjb25maWcuIExvb2tpbmcgYXQgYGRyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnYDpcbmBgYFxuY29uZmlnIFBTRV9SRUdVTEFUT1Jcblx0dHJpc3RhdGUgXCJSZWd1bGF0b3IgYmFzZWQgUFNFIGNvbnRyb2xsZXJcIlxuYGBgXG5ZZXMsIGBQU0VfUkVHVUxBVE9SYCBpcyB0aGUgcmlnaHQgb25lLCB0aGF0J3MgY29ycmVjdC5cblxuTGV0J3MgYWxzbyBtYWtlIHN1cmUgYFNGUGAgaXMgZW5hYmxlZCBjb3JyZWN0bHkuIENoZWNraW5nIGBkcml2ZXJzL25ldC9waHkvS2NvbmZpZ2A6IC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjM2MCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMjoyMC4yODQ4NTM1NDRaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MjA2MDI4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU0ZQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9LY29uZmlnPTY1PWNvbmZpZyBSVVNUX1BIWUxJQl9BQlNUUkFDVElPTlNcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTcyLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjczOmNvbmZpZyBTRlBcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy03NC1cXHR0cmlzdGF0ZSBcXFwiU0ZQIGNhZ2Ugc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTI6MjAuNTQ2OTI2NTUyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MDUwMDcxNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uZmlybWluZyB0aGUgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHllcywgSSBhZ3JlZSwgYFNGUGAgaXMgZGVmaW5pdGVseSB0aGUgY29ycmVjdCBvcHRpb24gaGVyZS4gTm93LCBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgYWJvdXQgYEZXTk9ERV9NRElPYC4gTGV0J3MganVzdCBkb3VibGUtY2hlY2sgdGhhdCBjb25maWd1cmF0aW9uLCBzaGFsbCB3ZT8gSSdsbCBwb3Agb3ZlciB0byBgZHJpdmVycy9uZXQvbWRpby9LY29uZmlnYCB0byB2ZXJpZnkuIEkgbmVlZCB0byBiZSBjZXJ0YWluIGJlZm9yZSBJIG1vdmUgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNjM4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTI6MjQuMzUxOTM2Nzc5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njc3MDU3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRldOT0RFX01ESU9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbWRpby9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZz02PWlmIFBIWUxJQlxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy03LVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzo4OmNvbmZpZyBGV05PREVfTURJT1xcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy05LVxcdGRlZl90cmlzdGF0ZSAoQUNQSSB8fCBPRikgfHwgQ09NUElMRV9URVNUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjEyOjI0LjM5ODcxMjczN1oiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzY3ODU0NjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNvbmZpcm1pbmcgdGhlIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCB5ZXMsIGBGV05PREVfTURJT2AgZmVlbHMgcmlnaHQsIHRoYXQgcmluZ3MgdHJ1ZS4gTm93LCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgYmVmb3JlIEkgcHJvY2VlZCB3aXRoIGFueSBjaGFuZ2VzLCBsZXQncyBxdWlja2x5IHZlcmlmeSB0aGF0IGBSRUdVTEFUT1JgIGlzIHRoZSBhcHByb3ByaWF0ZSBjb25maWd1cmF0aW9uIG9wdGlvbiB3ZSdyZSBsb29raW5nIGF0LiBCZXN0IHByYWN0aWNlLCBhbHdheXMuIEEgcXVpY2sgbG9vayB3aXRoaW4gYGRyaXZlcnMvcmVndWxhdG9yL0tjb25maWdgIHNob3VsZCBwcm92aWRlIHRoZSBhbnN3ZXIuIEkgbmVlZCB0aGF0IGFic29sdXRlIGNsYXJpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzODg5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTI6MjcuNzY2NTY5NTIyWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTc0MDgxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUkVHVUxBVE9SXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvcmVndWxhdG9yL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA4MzMgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjI6bWVudWNvbmZpZyBSRUdVTEFUT1JcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTMtXFx0Ym9vbCBcXFwiVm9sdGFnZSBhbmQgQ3VycmVudCBSZWd1bGF0b3IgU3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc9MjY9aWYgUkVHVUxBVE9SXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0yNy1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjI4OmNvbmZpZyBSRUdVTEFUT1JfREVCVUdcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTI5LVxcdGJvb2wgXFxcIlJlZ3VsYXRvciBkZWJ1ZyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0zMi1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjMzOmNvbmZpZyBSRUdVTEFUT1JfRklYRURfVk9MVEFHRVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMzQtXFx0dHJpc3RhdGUgXFxcIkZpeGVkIHZvbHRhZ2UgcmVndWxhdG9yIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTM5LVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NDA6Y29uZmlnIFJFR1VMQVRPUl9WSVJUVUFMX0NPTlNVTUVSXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy00MS1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCByZWd1bGF0b3IgY29uc3VtZXIgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNDktXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo1MDpjb25maWcgUkVHVUxBVE9SX1VTRVJTUEFDRV9DT05TVU1FUlxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNTEtXFx0dHJpc3RhdGUgXFxcIlVzZXJzcGFjZSByZWd1bGF0b3IgY29uc3VtZXIgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNTgtXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo1OTpjb25maWcgUkVHVUxBVE9SX05FVExJTktfRVZFTlRTXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy02MC1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgcmVjZWl2aW5nIHJlZ3VsYXRvciBldmVudHMgdmlhIG5ldGxpbmtcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTY4LVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6Njk6Y29uZmlnIFJFR1VMQVRPUl84OFBHODZYXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy03MC1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCA4OFBHODZYIHZvbHRhZ2UgcmVndWxhdG9yc1xcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNzctXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo3ODpjb25maWcgUkVHVUxBVE9SXzg4UE04MDBcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTc5LVxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIDg4UE04MDAgUG93ZXIgcmVndWxhdG9yc1xcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctODctXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo4ODpjb25maWcgUkVHVUxBVE9SXzg4UE04NjA3XFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy04OS1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCA4OFBNODYwNyBQb3dlciByZWd1bGF0b3JzXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy05My1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjk0OmNvbmZpZyBSRUdVTEFUT1JfODhQTTg4NlxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctOTUtXFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgODhQTTg4NiB2b2x0YWdlIHJlZ3VsYXRvcnNcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTk5LVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MTAwOmNvbmZpZyBSRUdVTEFUT1JfQUNUODg2NVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTAxLVxcdHRyaXN0YXRlIFxcXCJBY3RpdmUtc2VtaSBhY3Q4ODY1IHZvbHRhZ2UgcmVndWxhdG9yXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xMDgtXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzoxMDk6Y29uZmlnIFJFR1VMQVRPUl9BQ1Q4OTQ1QVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTEwLVxcdHRyaXN0YXRlIFxcXCJBY3RpdmUtc2VtaSBBQ1Q4OTQ1QSB2b2x0YWdlIHJlZ3VsYXRvclxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTE3LVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MTE4OmNvbmZpZyBSRUdVTEFUT1JfQUQ1Mzk4XFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xMTktXFx0dHJpc3RhdGUgXFxcIkFuYWxvZyBEZXZpY2VzIEFENTM5OC9BRDU4MjEgcmVndWxhdG9yc1xcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTI0LVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MTI1OmNvbmZpZyBSRUdVTEFUT1JfQURQNTA1NVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTI2LVxcdHRyaXN0YXRlIFxcXCJBbmFsb2cgRGV2aWNlcyBBRFA1MDU1IFRyaXBsZSBCdWNrIFJlZ3VsYXRvclxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTM1LVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MTM2OmNvbmZpZyBSRUdVTEFUT1JfQU5BVE9QXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xMzctXFx0dHJpc3RhdGUgXFxcIkZyZWVzY2FsZSBpLk1YIG9uLWNoaXAgQU5BVE9QIExETyByZWd1bGF0b3JzXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xNDQtXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzoxNDU6Y29uZmlnIFJFR1VMQVRPUl9BQVQyODcwXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xNDYtXFx0dHJpc3RhdGUgXFxcIkFuYWxvZ2ljVGVjaCBBQVQyODcwIFJlZ3VsYXRvcnNcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTE1MS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjE1Mjpjb25maWcgUkVHVUxBVE9SX0FCODUwMFxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTUzLVxcdGJvb2wgXFxcIlNULUVyaWNzc29uIEFCODUwMCBQb3dlciBSZWd1bGF0b3JzXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xNTgtXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzoxNTk6Y29uZmlnIFJFR1VMQVRPUl9BUklaT05BX0xETzFcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTE2MC1cXHR0cmlzdGF0ZSBcXFwiQ2lycnVzIE1hZGVyYSBhbmQgV29sZnNvbiBBcml6b25hIGNsYXNzIGRldmljZXMgTERPMVxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTY2LVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MTY3OmNvbmZpZyBSRUdVTEFUT1JfQVJJWk9OQV9NSUNTVVBQXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xNjgtXFx0dHJpc3RhdGUgXFxcIkNpcnJ1cyBNYWRlcmEgYW5kIFdvbGZzb24gQXJpem9uYSBjbGFzcyBkZXZpY2VzIE1JQ1NVUFBcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTE3NS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjE3Njpjb25maWcgUkVHVUxBVE9SX0FSTV9TQ01JXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xNzctXFx0dHJpc3RhdGUgXFxcIlNDTUkgYmFzZWQgcmVndWxhdG9yIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTg0LVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MTg1OmNvbmZpZyBSRUdVTEFUT1JfQVMzNzExXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xODYtXFx0dHJpc3RhdGUgXFxcIkFTMzcxMSBQTUlDXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xOTEtXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzoxOTI6Y29uZmlnIFJFR1VMQVRPUl9BUzM3MjJcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTE5My1cXHR0cmlzdGF0ZSBcXFwiQU1TIEFTMzcyMiBQTUlDIFJlZ3VsYXRvcnNcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTE5OS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjIwMDpjb25maWcgUkVHVUxBVE9SX0FUQzI2MFhcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTIwMS1cXHR0cmlzdGF0ZSBcXFwiQWN0aW9ucyBTZW1pIEFUQzI2MHggUE1JQyBSZWd1bGF0b3JzXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0yMDctXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzoyMDg6Y29uZmlnIFJFR1VMQVRPUl9BVzM3NTAzXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0yMDktXFx0dHJpc3RhdGUgXFxcIkF3aW5pYyBBVzM3NTAzIER1YWwgT3V0cHV0IFBvd2VyIHJlZ3VsYXRvcnNcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTIxNS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjIxNjpjb25maWcgUkVHVUxBVE9SX0FYUDIwWFxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMjE3LVxcdHRyaXN0YXRlIFxcXCJYLVBPV0VSUyBBWFAyMFggUE1JQyBSZWd1bGF0b3JzXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0yMjItXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzoyMjM6Y29uZmlnIFJFR1VMQVRPUl9CQ001OTBYWFxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMjI0LVxcdHRyaXN0YXRlIFxcXCJCcm9hZGNvbSBCQ001OTB4eCBQTVUgUmVndWxhdG9yc1xcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMjMwLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MjMxOmNvbmZpZyBSRUdVTEFUT1JfQkQ3MTgxNVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMjMyLVxcdHRyaXN0YXRlIFxcXCJST0hNIEJENzE4MTUgUG93ZXIgUmVndWxhdG9yXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0yNDItXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzoyNDM6Y29uZmlnIFJFR1VMQVRPUl9CRDcxODI4XFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0yNDQtXFx0dHJpc3RhdGUgXFxcIlJPSE0gQkQ3MTgyOCwgQkQ3MjcyMCBhbmQgQkQ3MzkwMCBQb3dlciBSZWd1bGF0b3JzXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0yNTQtXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzoyNTU6Y29uZmlnIFJFR1VMQVRPUl9CRDcxOFhYXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0yNTYtXFx0dHJpc3RhdGUgXFxcIlJPSE0gQkQ3MTgzNyBQb3dlciBSZWd1bGF0b3JcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTI2Ni1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjI2Nzpjb25maWcgUkVHVUxBVE9SX0JEOTU3MU1XVlxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMjY4LVxcdHRyaXN0YXRlIFxcXCJST0hNIEJEOTU3MU1XViBSZWd1bGF0b3JzXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0yNzctXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzoyNzg6Y29uZmlnIFJFR1VMQVRPUl9CRDk1N1hNVUZcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTI3OS1cXHR0cmlzdGF0ZSBcXFwiUk9ITSBCRDk1NzZNVUYgYW5kIEJEOTU3M01VRiBSZWd1bGF0b3JzXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0yODctXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzoyODg6Y29uZmlnIFJFR1VMQVRPUl9CRDk2ODAxXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0yODktXFx0dHJpc3RhdGUgXFxcIlJPSE0gQkQ5NjgwMSBQb3dlciBSZWd1bGF0b3JcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTI5OS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjMwMDpjb25maWcgUkVHVUxBVE9SX0JRMjU3WFhcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTMwMS1cXHR0cmlzdGF0ZSBcXFwiVEkgQlEyNTdYWCByZWd1bGF0b3IgZmFtaWx5XFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0zMDctXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzozMDg6Y29uZmlnIFJFR1VMQVRPUl9DUENBUFxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMzA5LVxcdHRyaXN0YXRlIFxcXCJNb3Rvcm9sYSBDUENBUCByZWd1bGF0b3JcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTMxNC1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjMxNTpjb25maWcgUkVHVUxBVE9SX0NST1NfRUNcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTMxNi1cXHR0cmlzdGF0ZSBcXFwiQ2hyb21lT1MgRUMgcmVndWxhdG9yc1xcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMzI0LVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MzI1OmNvbmZpZyBSRUdVTEFUT1JfREE5MDNYXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0zMjYtXFx0dHJpc3RhdGUgXFxcIkRpYWxvZyBTZW1pY29uZHVjdG9yIERBOTAzMC9EQTkwMzQgcmVndWxhdG9yc1xcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMzMyLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MzMzOmNvbmZpZyBSRUdVTEFUT1JfREE5MDUyXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0zMzQtXFx0dHJpc3RhdGUgXFxcIkRpYWxvZyBTZW1pY29uZHVjdG9yIERBOTA1Mi9EQTkwNTMgcmVndWxhdG9yc1xcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMzM5LVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MzQwOmNvbmZpZyBSRUdVTEFUT1JfREE5MDU1XFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0zNDEtXFx0dHJpc3RhdGUgXFxcIkRpYWxvZyBTZW1pY29uZHVjdG9yIERBOTA1NSByZWd1bGF0b3JzXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0zNDktXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzozNTA6Y29uZmlnIFJFR1VMQVRPUl9EQTkwNjJcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTM1MS1cXHR0cmlzdGF0ZSBcXFwiRGlhbG9nIFNlbWljb25kdWN0b3IgREE5MDYxLzYyIHJlZ3VsYXRvcnNcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTM1OS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjM2MDpjb25maWcgUkVHVUxBVE9SX0RBOTA2M1xcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMzYxLVxcdHRyaXN0YXRlIFxcXCJEaWFsb2cgU2VtaWNvbmR1Y3RvciBEQTkwNjMgcmVndWxhdG9yc1xcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMzY5LVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MzcwOmNvbmZpZyBSRUdVTEFUT1JfREE5MTIxXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0zNzEtXFx0dHJpc3RhdGUgXFxcIkRpYWxvZyBTZW1pY29uZHVjdG9yIERBOTEyMS9EQTkxMjIvREE5MjIwL0RBOTIxNy9EQTkxMzAvREE5MTMxL0RBOTEzMiByZWd1bGF0b3JcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTM4OS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjM5MDpjb25maWcgUkVHVUxBVE9SX0RBOTIxMFxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMzkxLVxcdHRyaXN0YXRlIFxcXCJEaWFsb2cgU2VtaWNvbmR1Y3RvciBEQTkyMTAgcmVndWxhdG9yXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0zOTktXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo0MDA6Y29uZmlnIFJFR1VMQVRPUl9EQTkyMTFcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTQwMS1cXHR0cmlzdGF0ZSBcXFwiRGlhbG9nIFNlbWljb25kdWN0b3IgREE5MjExL0RBOTIxMi9EQTkyMTMvREE5MjIzL0RBOTIxNC9EQTkyMjQvREE5MjE1L0RBOTIyNSByZWd1bGF0b3JcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTQxMC1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjQxMTpjb25maWcgUkVHVUxBVE9SX0RCWDUwMF9QUkNNVVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNDEyLVxcdGJvb2xcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTQxMy1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjQxNDpjb25maWcgUkVHVUxBVE9SX0RCODUwMF9QUkNNVVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNDE1LVxcdGJvb2wgXFxcIlNULUVyaWNzc29uIERCODUwMCBWb2x0YWdlIERvbWFpbiBSZWd1bGF0b3JzXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy00MjEtXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo0MjI6Y29uZmlnIFJFR1VMQVRPUl9GQU41MzU1NVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNDIzLVxcdHRyaXN0YXRlIFxcXCJGYWlyY2hpbGQgRkFONTM1NTUgUmVndWxhdG9yXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy00MzItXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo0MzM6Y29uZmlnIFJFR1VMQVRPUl9GQU41Mzg4MFxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNDM0LVxcdHRyaXN0YXRlIFxcXCJGYWlyY2hpbGQgRkFONTM4ODAgUmVndWxhdG9yXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy00NDItXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo0NDM6Y29uZmlnIFJFR1VMQVRPUl9HUElPXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy00NDQtXFx0dHJpc3RhdGUgXFxcIkdQSU8gcmVndWxhdG9yIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTQ1Mi1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjQ1Mzpjb25maWcgUkVHVUxBVE9SX0hJNjQyMVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNDU0LVxcdHRyaXN0YXRlIFxcXCJIaVNpbGljb24gSGk2NDIxIFBNSUMgdm9sdGFnZSByZWd1bGF0b3Igc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNDYyLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NDYzOmNvbmZpZyBSRUdVTEFUT1JfSEk2NDIxVjUzMFxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNDY0LVxcdHRyaXN0YXRlIFxcXCJIaVNpbGljb24gSGk2NDIxdjUzMCBQTUlDIHZvbHRhZ2UgcmVndWxhdG9yIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTQ3Mi1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjQ3Mzpjb25maWcgUkVHVUxBVE9SX0hJNjU1WFxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNDc0LVxcdHRyaXN0YXRlIFxcXCJIaXNpbGljb24gSEk2NTVYIFBNSUMgcmVndWxhdG9ycyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy00ODAtXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo0ODE6Y29uZmlnIFJFR1VMQVRPUl9ISTY0MjFWNjAwXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy00ODItXFx0dHJpc3RhdGUgXFxcIkhpU2lsaWNvbiBIaTY0MjF2NjAwIFBNSUMgdm9sdGFnZSByZWd1bGF0b3Igc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNDg5LVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NDkwOmNvbmZpZyBSRUdVTEFUT1JfSVNMOTMwNVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNDkxLVxcdHRyaXN0YXRlIFxcXCJJbnRlcnNpbCBJU0w5MzA1IHJlZ3VsYXRvclxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNDk2LVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NDk3OmNvbmZpZyBSRUdVTEFUT1JfSVNMNjI3MUFcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTQ5OC1cXHR0cmlzdGF0ZSBcXFwiSW50ZXJzaWwgSVNMNjI3MUEgUG93ZXIgcmVndWxhdG9yXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy01MDItXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo1MDM6Y29uZmlnIFJFR1VMQVRPUl9GUDk5MzFcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTUwNC1cXHR0cmlzdGF0ZSBcXFwiRml0aVBvd2VyIEZQOTkzMS9KRDk5MzAgRVBEIHJlZ3VsYXRvclxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNTEyLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NTEzOmNvbmZpZyBSRUdVTEFUT1JfTE0zNjNYXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy01MTQtXFx0dHJpc3RhdGUgXFxcIlRJIExNMzYzWCB2b2x0YWdlIHJlZ3VsYXRvcnNcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTUyMS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjUyMjpjb25maWcgUkVHVUxBVE9SX0xPQ0hOQUdBUlxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNTIzLVxcdHRyaXN0YXRlIFxcXCJDaXJydXMgTG9naWMgTG9jaG5hZ2FyIHJlZ3VsYXRvciBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTUyOC1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjUyOTpjb25maWcgUkVHVUxBVE9SX0xQMzk3MVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNTMwLVxcdHRyaXN0YXRlIFxcXCJOYXRpb25hbCBTZW1pY29uZHVjdG9ycyBMUDM5NzEgUE1JQyByZWd1bGF0b3IgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy01MzUtXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo1MzY6Y29uZmlnIFJFR1VMQVRPUl9MUDM5NzJcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTUzNy1cXHR0cmlzdGF0ZSBcXFwiTmF0aW9uYWwgU2VtaWNvbmR1Y3RvcnMgTFAzOTcyIFBNSUMgcmVndWxhdG9yIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNTQyLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NTQzOmNvbmZpZyBSRUdVTEFUT1JfTFA4NzJYXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy01NDQtXFx0dHJpc3RhdGUgXFxcIlRJL05hdGlvbmFsIFNlbWljb25kdWN0b3IgTFA4NzIwL0xQODcyNSB2b2x0YWdlIHJlZ3VsYXRvcnNcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTU0OS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjU1MDpjb25maWcgUkVHVUxBVE9SX0xQODczWFxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNTUxLVxcdHRyaXN0YXRlIFxcXCJUSSBMUDg3M1ggUG93ZXIgcmVndWxhdG9yc1xcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNTU4LVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NTU5OmNvbmZpZyBSRUdVTEFUT1JfTFA4NzU1XFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy01NjAtXFx0dHJpc3RhdGUgXFxcIlRJIExQODc1NSBIaWdoIFBlcmZvcm1hbmNlIFBNVSBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTU2Ny1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjU2ODpjb25maWcgUkVHVUxBVE9SX0xQODc1NjVcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTU2OS1cXHR0cmlzdGF0ZSBcXFwiVEkgTFA4NzU2NSBQb3dlciByZWd1bGF0b3JzXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy01NzUtXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo1NzY6Y29uZmlnIFJFR1VMQVRPUl9MUDg3ODhcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTU3Ny1cXHR0cmlzdGF0ZSBcXFwiVEkgTFA4Nzg4IFBvd2VyIFJlZ3VsYXRvcnNcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTU4MS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjU4Mjpjb25maWcgUkVHVUxBVE9SX0xUQzM1ODlcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTU4My1cXHR0cmlzdGF0ZSBcXFwiTFRDMzU4OSA4LW91dHB1dCB2b2x0YWdlIHJlZ3VsYXRvclxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNTg5LVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NTkwOmNvbmZpZyBSRUdVTEFUT1JfTFRDMzY3NlxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNTkxLVxcdHRyaXN0YXRlIFxcXCJMVEMzNjc2IDgtb3V0cHV0IHZvbHRhZ2UgcmVndWxhdG9yXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy01OTctXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo1OTg6Y29uZmlnIFJFR1VMQVRPUl9NQVgxNDU3N1xcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNTk5LVxcdHRyaXN0YXRlIFxcXCJNYXhpbSAxNDU3Ny83NzgzNiByZWd1bGF0b3JcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTYwNS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjYwNjpjb25maWcgUkVHVUxBVE9SX01BWDE1ODZcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTYwNy1cXHR0cmlzdGF0ZSBcXFwiTWF4aW0gMTU4Ni8xNTg3IHZvbHRhZ2UgcmVndWxhdG9yXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy02MTMtXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo2MTQ6Y29uZmlnIFJFR1VMQVRPUl9NQVg1OTcwXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy02MTUtXFx0dHJpc3RhdGUgXFxcIk1heGltIDU5NzAvNTk3OCBwb3dlciBzd2l0Y2ggYW5kIG1vbml0b3JcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTYyMy1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjYyNDpjb25maWcgUkVHVUxBVE9SX01BWDc3NTAzXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy02MjUtXFx0dHJpc3RhdGUgXFxcIkFuYWxvZyBEZXZpY2VzIE1BWDc3NTAzIFJlZ3VsYXRvclxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNjMzLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NjM0OmNvbmZpZyBSRUdVTEFUT1JfTUFYNzc1NDFcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTYzNS1cXHR0cmlzdGF0ZSBcXFwiQW5hbG9nIERldmljZXMgTUFYNzc1NDEvNzc1NDAgUmVndWxhdG9yXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy02NDQtXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo2NDU6Y29uZmlnIFJFR1VMQVRPUl9NQVg3NzYyMFxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNjQ2LVxcdHRyaXN0YXRlIFxcXCJNYXhpbSA3NzYyMC9NQVgyMDAyNCB2b2x0YWdlIHJlZ3VsYXRvclxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNjUzLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NjU0OmNvbmZpZyBSRUdVTEFUT1JfTUFYNzc2NTBcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTY1NS1cXHR0cmlzdGF0ZSBcXFwiTWF4aW0gTUFYNzc2NTAvNzc2NTEgcmVndWxhdG9yIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTY2MS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjY2Mjpjb25maWcgUkVHVUxBVE9SX01BWDc3Njc1XFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy02NjMtXFx0dHJpc3RhdGUgXFxcIk1heGltIE1BWDc3Njc1IHJlZ3VsYXRvciBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTY3MC1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjY3MTpjb25maWcgUkVHVUxBVE9SX01BWDc3ODU3XFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy02NzItXFx0dHJpc3RhdGUgXFxcIkFESSBNQVg3Nzg1Ny9NQVg3NzgzMSByZWd1bGF0b3Igc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNjgwLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NjgxOmNvbmZpZyBSRUdVTEFUT1JfTUFYODY0OVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNjgyLVxcdHRyaXN0YXRlIFxcXCJNYXhpbSA4NjQ5IHZvbHRhZ2UgcmVndWxhdG9yXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy02ODgtXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo2ODk6Y29uZmlnIFJFR1VMQVRPUl9NQVg4NjYwXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy02OTAtXFx0dHJpc3RhdGUgXFxcIk1heGltIDg2NjAvODY2MSB2b2x0YWdlIHJlZ3VsYXRvclxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNjk1LVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6Njk2OmNvbmZpZyBSRUdVTEFUT1JfTUFYODg5M1xcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNjk3LVxcdHRyaXN0YXRlIFxcXCJNYXhpbSA4ODkzIHZvbHRhZ2UgcmVndWxhdG9yXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy03MDMtXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo3MDQ6Y29uZmlnIFJFR1VMQVRPUl9NQVg4OTA3XFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy03MDUtXFx0dHJpc3RhdGUgXFxcIk1heGltIDg5MDcgdm9sdGFnZSByZWd1bGF0b3JcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTcxMS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjcxMjpjb25maWcgUkVHVUxBVE9SX01BWDg5MjVcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTcxMy1cXHR0cmlzdGF0ZSBcXFwiTWF4aW0gTUFYODkyNSBQb3dlciBNYW5hZ2VtZW50IElDXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy03MTctXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo3MTg6Y29uZmlnIFJFR1VMQVRPUl9NQVg4OTUyXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy03MTktXFx0dHJpc3RhdGUgXFxcIk1heGltIE1BWDg5NTIgUG93ZXIgTWFuYWdlbWVudCBJQ1xcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNzI1LVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NzI2OmNvbmZpZyBSRUdVTEFUT1JfTUFYODk3M1xcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNzI3LVxcdHRyaXN0YXRlIFxcXCJNYXhpbSBNQVg4OTczQSB2b2x0YWdlIHJlZ3VsYXRvclxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNzM2LVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NzM3OmNvbmZpZyBSRUdVTEFUT1JfTUFYODk5N1xcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNzM4LVxcdHRyaXN0YXRlIFxcXCJNYXhpbSA4OTk3Lzg5NjYgcmVndWxhdG9yXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy03NDUtXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo3NDY6Y29uZmlnIFJFR1VMQVRPUl9NQVg4OTk4XFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy03NDctXFx0dHJpc3RhdGUgXFxcIk1heGltIDg5OTggdm9sdGFnZSByZWd1bGF0b3JcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTc1My1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjc1NDpjb25maWcgUkVHVUxBVE9SX01BWDIwMDg2XFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy03NTUtXFx0dHJpc3RhdGUgXFxcIk1heGltIE1BWDIwMDg2LU1BWDIwMDg5IENhbWVyYSBQb3dlciBQcm90ZWN0b3JzXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy03NjItXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo3NjM6Y29uZmlnIFJFR1VMQVRPUl9NQVgyMDQxMVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNzY0LVxcdHRyaXN0YXRlIFxcXCJNYXhpbSBNQVgyMDQxMSBIaWdoLUVmZmljaWVuY3kgU2luZ2xlIFN0ZXAtRG93biBDb252ZXJ0ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTc3MC1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjc3MTpjb25maWcgUkVHVUxBVE9SX01BWDc3Njg2XFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy03NzItXFx0dHJpc3RhdGUgXFxcIk1heGltIDc3Njg2IHJlZ3VsYXRvclxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNzc4LVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6Nzc5OmNvbmZpZyBSRUdVTEFUT1JfTUFYNzc2OTNcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTc4MC1cXHR0cmlzdGF0ZSBcXFwiTWF4aW0gNzc2OTMvNzc4NDMgcmVndWxhdG9yXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy03ODctXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo3ODg6Y29uZmlnIFJFR1VMQVRPUl9NQVg3NzgwMlxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNzg5LVxcdHRyaXN0YXRlIFxcXCJNYXhpbSA3NzgwMiByZWd1bGF0b3JcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTc5Ni1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjc5Nzpjb25maWcgUkVHVUxBVE9SX01BWDc3ODI2XFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy03OTgtXFx0dHJpc3RhdGUgXFxcIk1heGltIDc3ODI2IHJlZ3VsYXRvclxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctODA2LVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6ODA3OmNvbmZpZyBSRUdVTEFUT1JfTUFYNzc4MzhcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTgwOC1cXHR0cmlzdGF0ZSBcXFwiTWF4aW0gNzc4MzggcmVndWxhdG9yXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy04MTUtXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo4MTY6Y29uZmlnIFJFR1VMQVRPUl9NQzEzWFhYX0NPUkVcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTgxNy1cXHR0cmlzdGF0ZVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctODE4LVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6ODE5OmNvbmZpZyBSRUdVTEFUT1JfTUMxMzc4M1xcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctODIwLVxcdHRyaXN0YXRlIFxcXCJGcmVlc2NhbGUgTUMxMzc4MyByZWd1bGF0b3IgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy04MjYtXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo4Mjc6Y29uZmlnIFJFR1VMQVRPUl9NQzEzODkyXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy04MjgtXFx0dHJpc3RhdGUgXFxcIkZyZWVzY2FsZSBNQzEzODkyIHJlZ3VsYXRvciBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTgzNC1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjgzNTpjb25maWcgUkVHVUxBVE9SX01DUDE2NTAyXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy04MzYtXFx0dHJpc3RhdGUgXFxcIk1pY3JvY2hpcCBNQ1AxNjUwMiBQTUlDXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy04NDQtXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo4NDU6Y29uZmlnIFJFR1VMQVRPUl9NUDU0MTZcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTg0Ni1cXHR0cmlzdGF0ZSBcXFwiTW9ub2xpdGhpYyBNUDU0MTYgUE1JQ1xcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctODU0LVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6ODU1OmNvbmZpZyBSRUdVTEFUT1JfTVA4ODU5XFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy04NTYtXFx0dHJpc3RhdGUgXFxcIk1QUyBNUDg4NTkgcmVndWxhdG9yIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctODY1LVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6ODY2OmNvbmZpZyBSRUdVTEFUT1JfTVA4ODZYXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy04NjctXFx0dHJpc3RhdGUgXFxcIk1QUyBNUDg4NjkgcmVndWxhdG9yIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctODcyLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6ODczOmNvbmZpZyBSRUdVTEFUT1JfTVBRNzkyMFxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctODc0LVxcdHRyaXN0YXRlIFxcXCJNb25vbGl0aGljIE1QUTc5MjAgUE1JQ1xcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctODgyLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6ODgzOmNvbmZpZyBSRUdVTEFUT1JfTVQ2MzExXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy04ODQtXFx0dHJpc3RhdGUgXFxcIk1lZGlhVGVrIE1UNjMxMSBQTUlDXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy04OTItXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo4OTM6Y29uZmlnIFJFR1VMQVRPUl9NVDYzMTVcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTg5NC1cXHR0cmlzdGF0ZSBcXFwiTWVkaWFUZWsgTVQ2MzE1IFBNSUNcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTkwMi1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjkwMzpjb25maWcgUkVHVUxBVE9SX01UNjMxNlxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctOTA0LVxcdHRyaXN0YXRlIFxcXCJNVDYzMTYgU1BNSSBQTUlDIHJlZ3VsYXRvciBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTkxMi1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjkxMzpjb25maWcgUkVHVUxBVE9SX01UNjMyM1xcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctOTE0LVxcdHRyaXN0YXRlIFxcXCJNZWRpYVRlayBNVDYzMjMgUE1JQ1xcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctOTIxLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6OTIyOmNvbmZpZyBSRUdVTEFUT1JfTVQ2MzMxXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy05MjMtXFx0dHJpc3RhdGUgXFxcIk1lZGlhVGVrIE1UNjMzMSBQTUlDXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy05MzAtXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo5MzE6Y29uZmlnIFJFR1VMQVRPUl9NVDYzMzJcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTkzMi1cXHR0cmlzdGF0ZSBcXFwiTWVkaWFUZWsgTVQ2MzMyIFBNSUNcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTkzOS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjk0MDpjb25maWcgUkVHVUxBVE9SX01UNjM1N1xcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctOTQxLVxcdHRyaXN0YXRlIFxcXCJNZWRpYVRlayBNVDYzNTcgUE1JQ1xcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctOTQ4LVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6OTQ5OmNvbmZpZyBSRUdVTEFUT1JfTVQ2MzU4XFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy05NTAtXFx0dHJpc3RhdGUgXFxcIk1lZGlhVGVrIE1UNjM1OCBQTUlDXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy05NTctXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo5NTg6Y29uZmlnIFJFR1VMQVRPUl9NVDYzNTlcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTk1OS1cXHR0cmlzdGF0ZSBcXFwiTWVkaWFUZWsgTVQ2MzU5IFBNSUNcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTk2Ni1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjk2Nzpjb25maWcgUkVHVUxBVE9SX01UNjM2MFxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctOTY4LVxcdHRyaXN0YXRlIFxcXCJNVDYzNjAgU3ViUE1JQyBSZWd1bGF0b3JcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTk3NS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjk3Njpjb25maWcgUkVHVUxBVE9SX01UNjM2M1xcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctOTc3LVxcdHRyaXN0YXRlIFxcXCJNVDYzNjMgU1BNSSBQTUlDIHJlZ3VsYXRvciBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTk4Ni1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjk4Nzpjb25maWcgUkVHVUxBVE9SX01UNjM3MFxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctOTg4LVxcdHRyaXN0YXRlIFxcXCJNVDYzNzAgU3ViUE1JQyBSZWd1bGF0b3JcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTk5NC1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjk5NTpjb25maWcgUkVHVUxBVE9SX01UNjM4MFxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctOTk2LVxcdHRyaXN0YXRlIFxcXCJNZWRpYVRlayBNVDYzODAgUE1JQ1xcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTAwMy1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjEwMDQ6Y29uZmlnIFJFR1VMQVRPUl9NVDYzOTdcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTEwMDUtXFx0dHJpc3RhdGUgXFxcIk1lZGlhVGVrIE1UNjM5NyBQTUlDXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xMDEyLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MTAxMzpjb25maWcgUkVHVUxBVE9SX01US19EVkZTUkNcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTEwMTQtXFx0dHJpc3RhdGUgXFxcIk1lZGlhVGVrIERWRlNSQyByZWd1bGF0b3IgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xMDIyLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MTAyMzpjb25maWcgUkVHVUxBVE9SX1BBTE1BU1xcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTAyNC1cXHR0cmlzdGF0ZSBcXFwiVEkgUGFsbWFzIFBNSUMgUmVndWxhdG9yc1xcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTAzNC1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjEwMzU6Y29uZmlnIFJFR1VMQVRPUl9QQklBU1xcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTAzNi1cXHR0cmlzdGF0ZSBcXFwiUEJJQVMgT01BUCByZWd1bGF0b3IgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xMDQzLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MTA0NDpjb25maWcgUkVHVUxBVE9SX1BDQTk0NTBcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTEwNDUtXFx0dHJpc3RhdGUgXFxcIk5YUCBQQ0E5NDUwQS9QQ0E5NDUwQi9QQ0E5NDUwQyByZWd1bGF0b3IgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xMDUxLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MTA1Mjpjb25maWcgUkVHVUxBVE9SX1BGOTQ1M1xcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTA1My1cXHR0cmlzdGF0ZSBcXFwiTlhQIFBGOTQ1MyByZWd1bGF0b3IgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xMDU4LVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MTA1OTpjb25maWcgUkVHVUxBVE9SX1BGMDkwMFxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTA2MC1cXHR0cmlzdGF0ZSBcXFwiTlhQIFBGMDkwMC9QRjA5MDEvUEYwOVhYIHJlZ3VsYXRvciBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTEwNjYtXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzoxMDY3OmNvbmZpZyBSRUdVTEFUT1JfUEY1MzBYXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xMDY4LVxcdHRyaXN0YXRlIFxcXCJOWFAgUEY1MzAwL1BGNTMwMS9QRjUzMDIgcmVndWxhdG9yIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTA3OC1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjEwNzk6Y29uZmlnIFJFR1VMQVRPUl9QRjhYMDBcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTEwODAtXFx0dHJpc3RhdGUgXFxcIk5YUCBQRjgxMDAvUEY4MTIxQS9QRjgyMDAgcmVndWxhdG9yIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTA5MC1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjEwOTE6Y29uZmlnIFJFR1VMQVRPUl9QRlVaRTEwMFxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTA5Mi1cXHR0cmlzdGF0ZSBcXFwiRnJlZXNjYWxlIFBGVVpFMTAwLzIwMC8zMDAwLzMwMDEgcmVndWxhdG9yIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTA5OC1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjEwOTk6Y29uZmlnIFJFR1VMQVRPUl9QVjg4MDYwXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xMTAwLVxcdHRyaXN0YXRlIFxcXCJQb3dlcnZlbnR1cmUgU2VtaWNvbmR1Y3RvciBQVjg4MDYwIHJlZ3VsYXRvclxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTEwNi1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjExMDc6Y29uZmlnIFJFR1VMQVRPUl9QVjg4MDgwXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xMTA4LVxcdHRyaXN0YXRlIFxcXCJQb3dlcnZlbnR1cmUgU2VtaWNvbmR1Y3RvciBQVjg4MDgwIHJlZ3VsYXRvclxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTExMy1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjExMTQ6Y29uZmlnIFJFR1VMQVRPUl9QVjg4MDkwXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xMTE1LVxcdHRyaXN0YXRlIFxcXCJQb3dlcnZlbnR1cmUgU2VtaWNvbmR1Y3RvciBQVjg4MDkwIHJlZ3VsYXRvclxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTEyMS1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTI6MjcuODE2MzE1MTNaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzczMDkxMzYxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlIENoYW5nZXMqKlxuXG5Pa2F5LCBhZnRlciByZXZpZXdpbmcgdGhpcywgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGNvbmZpcm1lZDogYFJFR1VMQVRPUmAgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IGNvbXBvbmVudCB0byBmb2N1cyBvbiBoZXJlLiBUaGUgY2hhbmdlcyBhcmUgY2VudGVyZWQgYXJvdW5kIHRoZSBQU0UgY29udHJvbGxlcidzIGludGVyYWN0aW9uIHdpdGggdGhlIFBIWSBkZXZpY2UsIGludHJvZHVjaW5nIGEgbmV3IGxvY2tpbmcgbWVjaGFuaXNtIChgcGh5X3BzZV9sb2NrYCkgYW5kIGEgbm90aWZpZXIgKGBwaHlfcHNlX25vdGlmaWVyYCkgdG8gbWFuYWdlIFBTRSBjb250cm9sbGVyIHJlZ2lzdHJhdGlvbiBhbmQgdW5yZWdpc3RyYXRpb24uIFRoaXMgaW1wYWN0cyBib3RoIHRoZSBjb3JlIFBIWSBsaWJyYXJ5IGFuZCBldGh0b29sLCBhbmQgc2luY2UgbmV0bGluayBhbmQgUEhZIGRldmljZSByZWdpc3RyYXRpb24gcGF0aHMgYXJlIGludm9sdmVkLCB0aGUgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlIGlzIGRlZmluaXRlbHkgcHJlc2VudCBpbiB2aXJ0dWFsaXplZCBzZXR1cHMuXG5cblRoZSBrZXkgY29uZmlndXJhdGlvbnMgdG8gY29uc2lkZXIgaGVyZSBhcmU6IGBQU0VfQ09OVFJPTExFUmAsIGBQU0VfUkVHVUxBVE9SYCwgYFJFR1VMQVRPUmAsIGBTRlBgLCBhbmQgYEZXTk9ERV9NRElPYC4gVGhlc2UgYWxsIHNlZW0gdG8gYmUgcmVsZXZhbnQgdG8gdGhlIGNoYW5nZXMgYmVpbmcgaW50cm9kdWNlZC5cblxuSSB3ZW50IHRocm91Z2ggdGhlIGBGb2N1c1N5bWJvbHNgIHRvIGRvdWJsZS1jaGVjayBteSB1bmRlcnN0YW5kaW5nIGFuZCBhbGwgb2YgdGhlbSAtIGBwaHlfcHNlX2NvbnRyb2xfbG9ja2AsIGBwaHlfcHNlX2NvbnRyb2xfdW5sb2NrYCwgYHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkYCwgYHBoeV9kZXZpY2VfcmVnaXN0ZXJgLCBgcGh5X2RldmljZV9yZW1vdmVgLCBgcHNlX3JlZ2lzdGVyX25vdGlmaWVyYCwgYHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyYCwgYHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyYCwgYHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXJgLCBgcHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldmAsIGBldGhubF9zZXRfcHNlYCwgYHBzZV9wcmVwYXJlX2RhdGFgLCBgcGh5X3BzZV9hdHRhY2hfb25lYCwgYHBoeV9wc2VfZGV0YWNoX29uZWAsIGFuZCBgcGh5X3BzZV9ub3RpZmllcl9ldmVudGAgLSBhbGwgc2VlbSB2YWxpZCBhbmQgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgbmV3IGxvY2tpbmcgYW5kIG5vdGlmaWNhdGlvbiBtZWNoYW5pc21zLlxuXG5BbHJpZ2h0LCBJJ20gY29uZmlkZW50IGluIHRoaXMgYW5hbHlzaXMuIFRpbWUgdG8gZmluYWxpemUgdGhlIHJlc3VsdHMgYW5kIG1vdmUgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNzA1LCJPdXRwdXRUb2tlbnMiOjI5MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMjozNS41NDcyMzE1NThaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzkzNTA4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFNFX0NPTlRST0xMRVJcIixcbiAgICBcIlBTRV9SRUdVTEFUT1JcIixcbiAgICBcIlJFR1VMQVRPUlwiLFxuICAgIFwiU0ZQXCIsXG4gICAgXCJGV05PREVfTURJT1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBoeV9wc2VfY29udHJvbF9sb2NrXCIsXG4gICAgXCJwaHlfcHNlX2NvbnRyb2xfdW5sb2NrXCIsXG4gICAgXCJwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZFwiLFxuICAgIFwicGh5X2RldmljZV9yZWdpc3RlclwiLFxuICAgIFwicGh5X2RldmljZV9yZW1vdmVcIixcbiAgICBcInBzZV9yZWdpc3Rlcl9ub3RpZmllclwiLFxuICAgIFwicHNlX3VucmVnaXN0ZXJfbm90aWZpZXJcIixcbiAgICBcInBzZV9jb250cm9sbGVyX3JlZ2lzdGVyXCIsXG4gICAgXCJwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyXCIsXG4gICAgXCJwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2XCIsXG4gICAgXCJldGhubF9zZXRfcHNlXCIsXG4gICAgXCJwc2VfcHJlcGFyZV9kYXRhXCIsXG4gICAgXCJwaHlfcHNlX2F0dGFjaF9vbmVcIixcbiAgICBcInBoeV9wc2VfZGV0YWNoX29uZVwiLFxuICAgIFwicGh5X3BzZV9ub3RpZmllcl9ldmVudFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgaG93IHRoZSBQU0UgY29udHJvbGxlciBpcyBhdHRhY2hlZCB0byB0aGUgUEhZIGRldmljZSwgaW50cm9kdWNpbmcgYSBuZXcgbG9jayAoYHBoeV9wc2VfbG9ja2ApIGFuZCBhIG5vdGlmaWVyIChgcGh5X3BzZV9ub3RpZmllcmApIHRvIGhhbmRsZSBQU0UgY29udHJvbGxlciByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uLiBJdCBhbHNvIG1vZGlmaWVzIHRoZSBldGh0b29sIFBTRSBuZXRsaW5rIGludGVyZmFjZSB0byB1c2UgdGhlIG5ldyBsb2NrLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCB0aGUgY29yZSBQSFkgbGlicmFyeSBhbmQgZXRodG9vbCwgYW5kIGFyZSByZWFjaGFibGUgdmlhIG5ldGxpbmsgYW5kIFBIWSBkZXZpY2UgcmVnaXN0cmF0aW9uIHBhdGhzLCB3aGljaCBjYW4gYmUgdHJpZ2dlcmVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQU0VfQ09OVFJPTExFUlwiLFxuICAgIFwiUFNFX1JFR1VMQVRPUlwiLFxuICAgIFwiUkVHVUxBVE9SXCIsXG4gICAgXCJTRlBcIixcbiAgICBcIkZXTk9ERV9NRElPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGh5X3BzZV9jb250cm9sX2xvY2tcIixcbiAgICBcInBoeV9wc2VfY29udHJvbF91bmxvY2tcIixcbiAgICBcInBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkXCIsXG4gICAgXCJwaHlfZGV2aWNlX3JlZ2lzdGVyXCIsXG4gICAgXCJwaHlfZGV2aWNlX3JlbW92ZVwiLFxuICAgIFwicHNlX3JlZ2lzdGVyX25vdGlmaWVyXCIsXG4gICAgXCJwc2VfdW5yZWdpc3Rlcl9ub3RpZmllclwiLFxuICAgIFwicHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXJcIixcbiAgICBcInBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXJcIixcbiAgICBcInBzZV9jb250cm9sX21hdGNoZXNfcGNkZXZcIixcbiAgICBcImV0aG5sX3NldF9wc2VcIixcbiAgICBcInBzZV9wcmVwYXJlX2RhdGFcIixcbiAgICBcInBoeV9wc2VfYXR0YWNoX29uZVwiLFxuICAgIFwicGh5X3BzZV9kZXRhY2hfb25lXCIsXG4gICAgXCJwaHlfcHNlX25vdGlmaWVyX2V2ZW50XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyBob3cgdGhlIFBTRSBjb250cm9sbGVyIGlzIGF0dGFjaGVkIHRvIHRoZSBQSFkgZGV2aWNlLCBpbnRyb2R1Y2luZyBhIG5ldyBsb2NrIChgcGh5X3BzZV9sb2NrYCkgYW5kIGEgbm90aWZpZXIgKGBwaHlfcHNlX25vdGlmaWVyYCkgdG8gaGFuZGxlIFBTRSBjb250cm9sbGVyIHJlZ2lzdHJhdGlvbiBhbmQgdW5yZWdpc3RyYXRpb24uIEl0IGFsc28gbW9kaWZpZXMgdGhlIGV0aHRvb2wgUFNFIG5ldGxpbmsgaW50ZXJmYWNlIHRvIHVzZSB0aGUgbmV3IGxvY2suIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHRoZSBjb3JlIFBIWSBsaWJyYXJ5IGFuZCBldGh0b29sLCBhbmQgYXJlIHJlYWNoYWJsZSB2aWEgbmV0bGluayBhbmQgUEhZIGRldmljZSByZWdpc3RyYXRpb24gcGF0aHMsIHdoaWNoIGNhbiBiZSB0cmlnZ2VyZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMjozNS42MzExNzM0NjRaIiwiU2VxIjo0MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjczNzE3OTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTI6MzUuNjMxNjc5MDQ0WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEyNjczMjA2NjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcmVmYWN0b3JzIHRoZSBsaWZlY3ljbGUgYW5kIHN5bmNocm9uaXphdGlvbiBvZiBQU0UgKFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudCkgY29udHJvbGxlcnMgYXR0YWNoZWQgdG8gUEhZIGRldmljZXMuIEl0IGludHJvZHVjZXMgYSBub3RpZmllciBjaGFpbiAoYHBoeV9wc2Vfbm90aWZpZXJgKSBhbmQgYSBtdXRleCAoYHBoeV9wc2VfbG9ja2ApIHRvIHNhZmVseSBhdHRhY2ggYW5kIGRldGFjaCBgcGh5ZGV2LVxcdTAwM2Vwc2VjYCB3aGVuIFBTRSBjb250cm9sbGVycyBhcmUgcmVnaXN0ZXJlZCBvciB1bnJlZ2lzdGVyZWQsIHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzLiBJdCBhbHNvIHdyYXBzIGV0aHRvb2wgUFNFIG9wZXJhdGlvbnMgd2l0aCB0aGUgbmV3IGxvY2suXFxuXFxuVGhlc2UgY2hhbmdlcyBwcmltYXJpbHkgYWRkcmVzcyBvYmplY3QgbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIGxvY2tpbmcsIGFuZCBzeW5jaHJvbml6YXRpb24uIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBsaWtlbHkgbWFuaWZlc3QgYXMgdXNlLWFmdGVyLWZyZWUsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIGRlYWRsb2Nrcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgaW52b2x2ZSBjb21wbGV4IGJ1ZmZlciBhbGxvY2F0aW9ucyBvciBtb2RpZmljYXRpb25zIHRvIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2NjhkMDkzYjA5ZmYwZTQyYmI0YWIzOTlkMTRlMmFhMDAwN2JhNWNkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMjI6MTA6MzkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMgYi9kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmNcbmluZGV4IGJhNzA5MTUxODI2NTQuLjdiZDk3OWI1OWY0OTYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmNcbisrKyBiL2RyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uY1xuQEAgLTExLDMzICsxMSwxMSBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Z3bm9kZV9tZGlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9wc2UtcGQvcHNlLmhcdTAwM2VcbiBcbiBNT0RVTEVfQVVUSE9SKFwiQ2FsdmluIEpvaG5zb24gXHUwMDNjY2FsdmluLmpvaG5zb25Ab3NzLm54cC5jb21cdTAwM2VcIik7XG4gTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG4gTU9EVUxFX0RFU0NSSVBUSU9OKFwiRldOT0RFIE1ESU8gYnVzIChFdGhlcm5ldCBQSFkpIGFjY2Vzc29yc1wiKTtcbiBcbi1zdGF0aWMgc3RydWN0IHBzZV9jb250cm9sICpcbi1md25vZGVfZmluZF9wc2VfY29udHJvbChzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlLFxuLVx0XHRcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4te1xuLVx0c3RydWN0IHBzZV9jb250cm9sICpwc2VjO1xuLVx0c3RydWN0IGRldmljZV9ub2RlICpucDtcbi1cbi1cdGlmICghSVNfRU5BQkxFRChDT05GSUdfUFNFX0NPTlRST0xMRVIpKVxuLVx0XHRyZXR1cm4gTlVMTDtcbi1cbi1cdG5wID0gdG9fb2Zfbm9kZShmd25vZGUpO1xuLVx0aWYgKCFucClcbi1cdFx0cmV0dXJuIE5VTEw7XG4tXG4tXHRwc2VjID0gb2ZfcHNlX2NvbnRyb2xfZ2V0KG5wLCBwaHlkZXYpO1xuLVx0aWYgKFBUUl9FUlIocHNlYykgPT0gLUVOT0VOVClcbi1cdFx0cmV0dXJuIE5VTEw7XG4tXG4tXHRyZXR1cm4gcHNlYztcbi19XG4tXG4gc3RhdGljIHN0cnVjdCBtaWlfdGltZXN0YW1wZXIgKlxuIGZ3bm9kZV9maW5kX21paV90aW1lc3RhbXBlcihzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKVxuIHtcbkBAIC0xMTgsNyArOTYsNiBAQCBpbnQgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KHN0cnVjdCBtaWlfYnVzICpidXMsXG4gXHRcdFx0XHRzdHJ1Y3QgZndub2RlX2hhbmRsZSAqY2hpbGQsIHUzMiBhZGRyKVxuIHtcbiBcdHN0cnVjdCBtaWlfdGltZXN0YW1wZXIgKm1paV90cyA9IE5VTEw7XG4tXHRzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMgPSBOVUxMO1xuIFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeTtcbiBcdGJvb2wgaXNfYzQ1O1xuIFx0dTMyIHBoeV9pZDtcbkBAIC0xNTksMTQgKzEzNiw2IEBAIGludCBmd25vZGVfbWRpb2J1c19yZWdpc3Rlcl9waHkoc3RydWN0IG1paV9idXMgKmJ1cyxcbiBcdFx0XHRnb3RvIGNsZWFuX3BoeTtcbiBcdH1cbiBcbi1cdHBzZWMgPSBmd25vZGVfZmluZF9wc2VfY29udHJvbChjaGlsZCwgcGh5KTtcbi1cdGlmIChJU19FUlIocHNlYykpIHtcbi1cdFx0cmMgPSBQVFJfRVJSKHBzZWMpO1xuLVx0XHRnb3RvIHVucmVnaXN0ZXJfcGh5O1xuLVx0fVxuLVxuLVx0cGh5LVx1MDAzZXBzZWMgPSBwc2VjO1xuLVxuIFx0LyogcGh5LVx1MDAzZW1paV90cyBtYXkgYWxyZWFkeSBiZSBkZWZpbmVkIGJ5IHRoZSBQSFkgZHJpdmVyLiBBXG4gXHQgKiBtaWlfdGltZXN0YW1wZXIgcHJvYmVkIHZpYSB0aGUgZGV2aWNlIHRyZWUgd2lsbCBzdGlsbCBoYXZlXG4gXHQgKiBwcmVjZWRlbmNlLlxuQEAgLTE3Niw5ICsxNDUsNiBAQCBpbnQgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KHN0cnVjdCBtaWlfYnVzICpidXMsXG4gXG4gXHRyZXR1cm4gMDtcbiBcbi11bnJlZ2lzdGVyX3BoeTpcbi1cdGlmIChpc19hY3BpX25vZGUoY2hpbGQpIHx8IGlzX29mX25vZGUoY2hpbGQpKVxuLVx0XHRwaHlfZGV2aWNlX3JlbW92ZShwaHkpO1xuIGNsZWFuX3BoeTpcbiBcdHBoeV9kZXZpY2VfZnJlZShwaHkpO1xuIGNsZWFuX21paV90czpcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuaW5kZXggMDYxNTIyODQ1OWVmNC4uZGNhMWI0NWJiYmQyNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcbkBAIC0xMTAyLDExICsxMTAyLDEyOCBAQCBzdHJ1Y3QgcGh5X2RldmljZSAqZ2V0X3BoeV9kZXZpY2Uoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGJvb2wgaXNfYzQ1KVxuIH1cbiBFWFBPUlRfU1lNQk9MKGdldF9waHlfZGV2aWNlKTtcbiBcbisvKiBTZXJpYWxpc2VzIHBoeWRldi1cdTAwM2Vwc2VjIGFnYWluc3QgdGhlIFBTRSBub3RpZmllciBhbmQgZXRodG9vbCwgbm90IHJ0bmwuICovXG4rc3RhdGljIERFRklORV9NVVRFWChwaHlfcHNlX2xvY2spO1xuK1xuKy8qIEJlc3QtZWZmb3J0IGF0dGFjaCBvZiBwaHlkZXYtXHUwMDNlcHNlYyBmcm9tIGEgRFQgYHBzZXMgPSBcdTAwM2NcdTAwMjYuLi5cdTAwM2VgIHBoYW5kbGUuXG4rICogQ2FsbGVyIG11c3QgaG9sZCBwaHlfcHNlX2xvY2suIEEgbWlzc2luZyBwaGFuZGxlICgtRU5PRU5UKSBvciBhXG4rICogbm90LXlldC1yZWdpc3RlcmVkIGNvbnRyb2xsZXIgKC1FUFJPQkVfREVGRVIpIGlzIHNpbGVudDsgdGhlIG5vdGlmaWVyXG4rICogcmV0cmllcyB0aGUgbGF0dGVyIGF0IFBTRV9SRUdJU1RFUkVEIHRpbWUuIEFueSBvdGhlciBlcnJvciBtZWFucyBhIGJyb2tlblxuKyAqIGJpbmRpbmcgYW5kIGlzIHdhcm5lZCBhYm91dCwgYnV0IGxlZnQgbm9uLWZhdGFsIHNvIHRoZSBwaHkgc3RpbGwgcmVnaXN0ZXJzLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHBoeV90cnlfYXR0YWNoX3BzZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYztcbitcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnBoeV9wc2VfbG9jayk7XG4rXG4rXHRucCA9IHBoeWRldi1cdTAwM2VtZGlvLmRldi5vZl9ub2RlO1xuK1x0aWYgKCFucClcbitcdFx0cmV0dXJuO1xuK1xuK1x0aWYgKHBoeWRldi1cdTAwM2Vwc2VjKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRwc2VjID0gb2ZfcHNlX2NvbnRyb2xfZ2V0KG5wLCBwaHlkZXYpO1xuK1x0aWYgKElTX0VSUihwc2VjKSkge1xuK1x0XHRpZiAoUFRSX0VSUihwc2VjKSAhPSAtRVBST0JFX0RFRkVSIFx1MDAyNlx1MDAyNiBQVFJfRVJSKHBzZWMpICE9IC1FTk9FTlQpXG4rXHRcdFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LCBcImZhaWxlZCB0byBnZXQgUFNFIGNvbnRyb2w6ICVwZVxcblwiLFxuK1x0XHRcdFx0ICAgIHBzZWMpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRwaHlkZXYtXHUwMDNlcHNlYyA9IHBzZWM7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGh5X3BzZV9hdHRhY2hfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSBfX21heWJlX3VudXNlZClcbit7XG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnBoeV9wc2VfbG9jayk7XG4rXG4rXHRpZiAoZGV2LVx1MDAzZXR5cGUgIT0gXHUwMDI2bWRpb19idXNfcGh5X3R5cGUpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cGh5X3RyeV9hdHRhY2hfcHNlKHRvX3BoeV9kZXZpY2UoZGV2KSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBwaHlfcHNlX2RldGFjaF9vbmUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKVxuK3tcbitcdHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2ID0gZGF0YTtcbitcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XG4rXHRzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWM7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnBoeV9wc2VfbG9jayk7XG4rXG4rXHRpZiAoZGV2LVx1MDAzZXR5cGUgIT0gXHUwMDI2bWRpb19idXNfcGh5X3R5cGUpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cGh5ZGV2ID0gdG9fcGh5X2RldmljZShkZXYpO1xuK1x0cHNlYyA9IHBoeWRldi1cdTAwM2Vwc2VjO1xuK1x0aWYgKCFwc2VjIHx8ICFwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2KHBzZWMsIHBjZGV2KSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRwaHlkZXYtXHUwMDNlcHNlYyA9IE5VTEw7XG4rXHRwc2VfY29udHJvbF9wdXQocHNlYyk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBwaHlfcHNlX25vdGlmaWVyX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4rXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKmRhdGEpXG4re1xuK1x0c3dpdGNoIChldmVudCkge1xuK1x0Y2FzZSBQU0VfUkVHSVNURVJFRDpcbitcdFx0bXV0ZXhfbG9jayhcdTAwMjZwaHlfcHNlX2xvY2spO1xuK1x0XHRidXNfZm9yX2VhY2hfZGV2KFx1MDAyNm1kaW9fYnVzX3R5cGUsIE5VTEwsIE5VTEwsXG4rXHRcdFx0XHQgcGh5X3BzZV9hdHRhY2hfb25lKTtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBoeV9wc2VfbG9jayk7XG4rXHRcdHJldHVybiBOT1RJRllfT0s7XG4rXHRjYXNlIFBTRV9VTlJFR0lTVEVSRUQ6XG4rXHRcdG11dGV4X2xvY2soXHUwMDI2cGh5X3BzZV9sb2NrKTtcbitcdFx0YnVzX2Zvcl9lYWNoX2RldihcdTAwMjZtZGlvX2J1c190eXBlLCBOVUxMLCBkYXRhLFxuK1x0XHRcdFx0IHBoeV9wc2VfZGV0YWNoX29uZSk7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZwaHlfcHNlX2xvY2spO1xuK1x0XHRyZXR1cm4gTk9USUZZX09LO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIE5PVElGWV9ET05FO1xuK1x0fVxuK31cbitcbitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBoeV9wc2Vfbm90aWZpZXIgX19yZWFkX21vc3RseSA9IHtcbitcdC5ub3RpZmllcl9jYWxsID0gcGh5X3BzZV9ub3RpZmllcl9ldmVudCxcbit9O1xuK1xuIC8qKlxuLSAqIHBoeV9kZXZpY2VfcmVnaXN0ZXIgLSBSZWdpc3RlciB0aGUgcGh5IGRldmljZSBvbiB0aGUgTURJTyBidXNcbi0gKiBAcGh5ZGV2OiBwaHlfZGV2aWNlIHN0cnVjdHVyZSB0byBiZSBhZGRlZCB0byB0aGUgTURJTyBidXNcbisgKiBwaHlfcHNlX2NvbnRyb2xfbG9jayAtIGhvbGQgcGh5ZGV2LVx1MDAzZXBzZWMgc3RhYmxlIGFnYWluc3QgUFNFIGNvbnRyb2xsZXIgdGVhcmRvd25cbisgKlxuKyAqIFRoZSBQU0VfVU5SRUdJU1RFUkVEIG5vdGlmaWVyIGRldGFjaGVzIHBoeWRldi1cdTAwM2Vwc2VjIGFuZCBkcm9wcyBpdHMgbGFzdFxuKyAqIHJlZmVyZW5jZS4gQ2FsbGVycyB0aGF0IGRlcmVmZXJlbmNlIHBoeWRldi1cdTAwM2Vwc2VjICh0aGUgZXRodG9vbCBQU0UgcGF0aHMpIG11c3RcbisgKiBob2xkIHRoaXMgbG9jayBhY3Jvc3MgdGhlIGFjY2VzcyBzbyB0aGUgZGV0YWNoIGNhbm5vdCBydW4gdW5kZXJuZWF0aCB0aGVtLlxuICAqL1xuLWludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4rdm9pZCBwaHlfcHNlX2NvbnRyb2xfbG9jayh2b2lkKVxuK3tcbitcdG11dGV4X2xvY2soXHUwMDI2cGh5X3BzZV9sb2NrKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwocGh5X3BzZV9jb250cm9sX2xvY2spO1xuK1xuKy8qKlxuKyAqIHBoeV9wc2VfY29udHJvbF91bmxvY2sgLSByZWxlYXNlIHRoZSBsb2NrIHRha2VuIGJ5IHBoeV9wc2VfY29udHJvbF9sb2NrKClcbisgKi9cbit2b2lkIHBoeV9wc2VfY29udHJvbF91bmxvY2sodm9pZClcbit7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cGh5X3BzZV9sb2NrKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwocGh5X3BzZV9jb250cm9sX3VubG9jayk7XG4rXG4rLyogQ29yZSByZWdpc3RyYXRpb246IGFkZCB0aGUgcGh5IHRvIHRoZSBNRElPIGJ1cy4gRG9lcyBub3QgdG91Y2ggcnRubCBvclxuKyAqIFBTRS4gcGh5ZGV2LVx1MDAzZXBzZWMgaXMgYXR0YWNoZWQgYnkgdGhlIGNhbGxlcnMgYmVsb3csIGFmdGVyIGRldmljZV9hZGQoKVxuKyAqIGhhcyBtYWRlIHRoZSBwaHkgdmlzaWJsZSBvbiBtZGlvX2J1c190eXBlLCBzbyB0aGF0IGEgY29uY3VycmVudCBQU0VcbisgKiBub3RpZmllciB3YWxrIGFuZCB0aGUgYXR0YWNoIGNhbiBuZXZlciBsZWF2ZSB0aGUgcGh5IHVuYXR0YWNoZWQuIEtlZXBpbmdcbisgKiBkZXZpY2VfYWRkKCkgb3V0IG9mIHJ0bmwgYWxzbyBhdm9pZHMgZGVhZGxvY2tpbmcgd2hlbiBiaW5kaW5nIGEgcGh5IHRoYXRcbisgKiBpdHNlbGYgcHJvdmlkZXMgYW4gU0ZQIGNhZ2UgKHBoeV9wcm9iZSgpIC1cdTAwM2UgcGh5X3NmcF9wcm9iZSgpIC1cdTAwM2VcbisgKiBzZnBfYnVzX2FkZF91cHN0cmVhbSgpIHRha2VzIHJ0bmwpLlxuKyAqL1xuK3N0YXRpYyBpbnQgX19waHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4ge1xuIFx0aW50IGVycjtcbiBcbkBAIC0xMTM1LDEwICsxMjUyLDU2IEBAIGludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gIG91dDpcbiBcdC8qIEFzc2VydCB0aGUgcmVzZXQgc2lnbmFsICovXG4gXHRwaHlfZGV2aWNlX3Jlc2V0KHBoeWRldiwgMSk7XG4tXG4gXHRtZGlvYnVzX3VucmVnaXN0ZXJfZGV2aWNlKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuK1xuKy8qKlxuKyAqIHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkIC0gUmVnaXN0ZXIgdGhlIHBoeSBkZXZpY2Ugb24gdGhlIE1ESU8gYnVzXG4rICogQHBoeWRldjogcGh5X2RldmljZSBzdHJ1Y3R1cmUgdG8gYmUgYWRkZWQgdG8gdGhlIE1ESU8gYnVzXG4rICpcbisgKiBTYW1lIGFzIHBoeV9kZXZpY2VfcmVnaXN0ZXIoKSBidXQgY2FsbGVyIG11c3QgYWxyZWFkeSBob2xkIHJ0bmxfbG9jaygpLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbisgKi9cbitpbnQgcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgZXJyO1xuK1xuK1x0QVNTRVJUX1JUTkwoKTtcbitcbitcdGVyciA9IF9fcGh5X2RldmljZV9yZWdpc3RlcihwaHlkZXYpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cGh5X3BzZV9sb2NrKTtcbitcdHBoeV90cnlfYXR0YWNoX3BzZShwaHlkZXYpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnBoeV9wc2VfbG9jayk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rRVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZCk7XG4rXG4rLyoqXG4rICogcGh5X2RldmljZV9yZWdpc3RlciAtIFJlZ2lzdGVyIHRoZSBwaHkgZGV2aWNlIG9uIHRoZSBNRElPIGJ1c1xuKyAqIEBwaHlkZXY6IHBoeV9kZXZpY2Ugc3RydWN0dXJlIHRvIGJlIGFkZGVkIHRvIHRoZSBNRElPIGJ1c1xuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbisgKi9cbitpbnQgcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCBlcnI7XG4rXG4rXHRlcnIgPSBfX3BoeV9kZXZpY2VfcmVnaXN0ZXIocGh5ZGV2KTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnBoeV9wc2VfbG9jayk7XG4rXHRwaHlfdHJ5X2F0dGFjaF9wc2UocGh5ZGV2KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwaHlfcHNlX2xvY2spO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuIEVYUE9SVF9TWU1CT0wocGh5X2RldmljZV9yZWdpc3Rlcik7XG4gXG4gLyoqXG5AQCAtMTE1Miw3ICsxMzE1LDE1IEBAIEVYUE9SVF9TWU1CT0wocGh5X2RldmljZV9yZWdpc3Rlcik7XG4gdm9pZCBwaHlfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIHtcbiBcdHVucmVnaXN0ZXJfbWlpX3RpbWVzdGFtcGVyKHBoeWRldi1cdTAwM2VtaWlfdHMpO1xuK1xuK1x0LyogRGV0YWNoIHN5bmNocm9ub3VzbHksIGJlZm9yZSB0aGUgcGh5IGxlYXZlcyB0aGUgYnVzLCBzbyB0aGUgcHV0IGNhbm5vdFxuK1x0ICogb3V0bGl2ZSB0aGUgUFNFIGNvbnRyb2xsZXIgKGFuIG9mZi1idXMgYnV0IHN0aWxsLXBpbm5lZCBwaHkgaXMgbWlzc2VkIGJ5XG4rXHQgKiB0aGUgUFNFX1VOUkVHSVNURVJFRCB3YWxrKS4gcGh5X3BzZV9sb2NrIHNlcmlhbGlzZXMgYWdhaW5zdCB0aGF0IHdhbGsuXG4rXHQgKi9cbitcdG11dGV4X2xvY2soXHUwMDI2cGh5X3BzZV9sb2NrKTtcbiBcdHBzZV9jb250cm9sX3B1dChwaHlkZXYtXHUwMDNlcHNlYyk7XG4rXHRwaHlkZXYtXHUwMDNlcHNlYyA9IE5VTEw7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cGh5X3BzZV9sb2NrKTtcbiBcbiBcdGRldmljZV9kZWwoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2KTtcbiBcbkBAIC0zOTgxLDggKzQxNTIsMTQgQEAgc3RhdGljIGludCBfX2luaXQgcGh5X2luaXQodm9pZClcbiBcdGlmIChyYylcbiBcdFx0Z290byBlcnJfYzQ1O1xuIFxuK1x0cmMgPSBwc2VfcmVnaXN0ZXJfbm90aWZpZXIoXHUwMDI2cGh5X3BzZV9ub3RpZmllcik7XG4rXHRpZiAocmMpXG4rXHRcdGdvdG8gZXJyX2dlbnBoeTtcbitcbiBcdHJldHVybiAwO1xuIFxuK2Vycl9nZW5waHk6XG4rXHRwaHlfZHJpdmVyX3VucmVnaXN0ZXIoXHUwMDI2Z2VucGh5X2RyaXZlcik7XG4gZXJyX2M0NTpcbiBcdHBoeV9kcml2ZXJfdW5yZWdpc3RlcihcdTAwMjZnZW5waHlfYzQ1X2RyaXZlcik7XG4gZXJyX2V0aHRvb2xfcGh5X29wczpcbkBAIC0zOTk5LDYgKzQxNzYsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBwaHlfaW5pdCh2b2lkKVxuIFxuIHN0YXRpYyB2b2lkIF9fZXhpdCBwaHlfZXhpdCh2b2lkKVxuIHtcbitcdHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyKFx1MDAyNnBoeV9wc2Vfbm90aWZpZXIpO1xuIFx0cGh5X2RyaXZlcl91bnJlZ2lzdGVyKFx1MDAyNmdlbnBoeV9jNDVfZHJpdmVyKTtcbiBcdHBoeV9kcml2ZXJfdW5yZWdpc3RlcihcdTAwMjZnZW5waHlfZHJpdmVyKTtcbiBcdHJ0bmxfbG9jaygpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9zZnAuYyBiL2RyaXZlcnMvbmV0L3BoeS9zZnAuY1xuaW5kZXggMDNiZmQ4NjQwZGI5Ni4uMTg4NjhiZGQ2NDg1MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9zZnAuY1xuKysrIGIvZHJpdmVycy9uZXQvcGh5L3NmcC5jXG5AQCAtMjA4Myw3ICsyMDgzLDcgQEAgc3RhdGljIGludCBzZnBfc21fcHJvYmVfcGh5KHN0cnVjdCBzZnAgKnNmcCwgaW50IGFkZHIsIGJvb2wgaXNfYzQ1KVxuIFx0LyogTWFyayB0aGlzIFBIWSBhcyBiZWluZyBvbiBhIFNGUCBtb2R1bGUgKi9cbiBcdHBoeS1cdTAwM2Vpc19vbl9zZnBfbW9kdWxlID0gdHJ1ZTtcbiBcbi1cdGVyciA9IHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5KTtcbitcdGVyciA9IHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkKHBoeSk7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdHBoeV9kZXZpY2VfZnJlZShwaHkpO1xuIFx0XHRkZXZfZXJyKHNmcC1cdTAwM2VkZXYsIFwicGh5X2RldmljZV9yZWdpc3RlciBmYWlsZWQ6ICVwZVxcblwiLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jIGIvZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmNcbmluZGV4IDY5ZGJkYmRlOWQ3MWEuLjYxMTU0MGRmNDNiYjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuY1xuKysrIGIvZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmNcbkBAIC04LDYgKzgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXRodG9vbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXRodG9vbF9uZXRsaW5rLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9ub3RpZmllci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHNlLXBkL3BzZS5oXHUwMDNlXG5AQCAtMjMsNiArMjQsMzkgQEAgc3RhdGljIExJU1RfSEVBRChwc2VfY29udHJvbGxlcl9saXN0KTtcbiBzdGF0aWMgREVGSU5FX1hBUlJBWV9BTExPQyhwc2VfcHdfZF9tYXApO1xuIHN0YXRpYyBERUZJTkVfTVVURVgocHNlX3B3X2RfbXV0ZXgpO1xuIFxuK3N0YXRpYyBCTE9DS0lOR19OT1RJRklFUl9IRUFEKHBzZV9jb250cm9sbGVyX25vdGlmaWVyKTtcbitcbisvKipcbisgKiBwc2VfcmVnaXN0ZXJfbm90aWZpZXIgLSByZWdpc3RlciBhIGNhbGxiYWNrIGZvciBQU0UgY29udHJvbGxlciBldmVudHNcbisgKiBAbmI6IG5vdGlmaWVyIGJsb2NrIHRvIHJlZ2lzdGVyXG4rICpcbisgKiBTZWUgZW51bSBwc2VfY29udHJvbGxlcl9ldmVudCBmb3IgZXZlbnRzIGZpcmVkIGFuZCB0aGVpciBzdWJzY3JpYmVyXG4rICogY29udHJhY3QuIENhbGxiYWNrcyBydW4gaW4gcHJvY2VzcyBjb250ZXh0OyB0aGV5IG1heSBzbGVlcCwgdGFrZVxuKyAqIHJ0bmwsIGFuZCBjYWxsIG9mX3BzZV9jb250cm9sX2dldCgpLiBUaGUgY2hhaW4gZmlyZXMgc3luY2hyb25vdXNseSxcbisgKiBzbyBhIFBTRSBjb250cm9sbGVyIGRyaXZlcidzIHByb2JlL3VuYmluZCBwYXRoIG11c3Qgbm90IGhvbGQgYW55XG4rICogc3VjaCBsb2NrIHdoZW4gY2FsbGluZyBwc2VfY29udHJvbGxlcl9yZWdpc3RlcigpIG9yXG4rICogcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcigpLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLlxuKyAqL1xuK2ludCBwc2VfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYilcbit7XG4rXHRyZXR1cm4gYmxvY2tpbmdfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoXHUwMDI2cHNlX2NvbnRyb2xsZXJfbm90aWZpZXIsIG5iKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwocHNlX3JlZ2lzdGVyX25vdGlmaWVyKTtcbitcbisvKipcbisgKiBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllciAtIHVucmVnaXN0ZXIgYSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgY2FsbGJhY2tcbisgKiBAbmI6IG5vdGlmaWVyIGJsb2NrIHByZXZpb3VzbHkgcGFzc2VkIHRvIHBzZV9yZWdpc3Rlcl9ub3RpZmllcigpXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuXG4rICovXG4raW50IHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpXG4re1xuK1x0cmV0dXJuIGJsb2NraW5nX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoXHUwMDI2cHNlX2NvbnRyb2xsZXJfbm90aWZpZXIsIG5iKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwocHNlX3VucmVnaXN0ZXJfbm90aWZpZXIpO1xuK1xuIC8qKlxuICAqIHN0cnVjdCBwc2VfY29udHJvbCAtIGEgUFNFIGNvbnRyb2xcbiAgKiBAcGNkZXY6IGEgcG9pbnRlciB0byB0aGUgUFNFIGNvbnRyb2xsZXIgZGV2aWNlXG5AQCAtMTEwNCw2ICsxMTM4LDkgQEAgaW50IHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxuIFx0bGlzdF9hZGQoXHUwMDI2cGNkZXYtXHUwMDNlbGlzdCwgXHUwMDI2cHNlX2NvbnRyb2xsZXJfbGlzdCk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2cHNlX2xpc3RfbXV0ZXgpO1xuIFxuK1x0YmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbihcdTAwMjZwc2VfY29udHJvbGxlcl9ub3RpZmllcixcbitcdFx0XHRcdCAgICAgUFNFX1JFR0lTVEVSRUQsIHBjZGV2KTtcbitcbiBcdHJldHVybiAwO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChwc2VfY29udHJvbGxlcl9yZWdpc3Rlcik7XG5AQCAtMTExNCw2ICsxMTUxLDkgQEAgRVhQT1JUX1NZTUJPTF9HUEwocHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIpO1xuICAqL1xuIHZvaWQgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcihzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldilcbiB7XG4rXHRibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKFx1MDAyNnBzZV9jb250cm9sbGVyX25vdGlmaWVyLFxuK1x0XHRcdFx0ICAgICBQU0VfVU5SRUdJU1RFUkVELCBwY2Rldik7XG4rXG4gXHRwc2VfZmx1c2hfcHdfZHMocGNkZXYpO1xuIFx0cHNlX3JlbGVhc2VfcGlzKHBjZGV2KTtcbiBcdGlmIChwY2Rldi1cdTAwM2VpcnEpXG5AQCAtMTk4MSwzICsyMDIxLDE3IEBAIGJvb2wgcHNlX2hhc19jMzMoc3RydWN0IHBzZV9jb250cm9sICpwc2VjKVxuIFx0cmV0dXJuIHBzZWMtXHUwMDNlcGNkZXYtXHUwMDNldHlwZXMgXHUwMDI2IEVUSFRPT0xfUFNFX0MzMztcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwocHNlX2hhc19jMzMpO1xuK1xuKy8qKlxuKyAqIHBzZV9jb250cm9sX21hdGNoZXNfcGNkZXYgLSBUZXN0IHdoZXRoZXIgYSBwc2VfY29udHJvbCB0YXJnZXRzIGEgY29udHJvbGxlclxuKyAqIEBwc2VjOiBwc2VfY29udHJvbCBvYnRhaW5lZCBmcm9tIG9mX3BzZV9jb250cm9sX2dldCgpXG4rICogQHBjZGV2OiBQU0UgY29udHJvbGxlciB0byBjb21wYXJlIGFnYWluc3RcbisgKlxuKyAqIFJldHVybjogJXRydWUgaWYgQHBzZWMgd2FzIG9idGFpbmVkIGZyb20gQHBjZGV2LCAlZmFsc2Ugb3RoZXJ3aXNlLlxuKyAqL1xuK2Jvb2wgcHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldihzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxuK3tcbitcdHJldHVybiBwc2VjLVx1MDAzZXBjZGV2ID09IHBjZGV2O1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2KTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaFxuaW5kZXggMTk5YTdhYWEzNDFiZi4uNTVhMDA0OWM2YzJiNSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5LmhcbkBAIC0yMTU4LDggKzIxNTgsMTIgQEAgc3RydWN0IHBoeV9kZXZpY2UgKmZ3bm9kZV9waHlfZmluZF9kZXZpY2Uoc3RydWN0IGZ3bm9kZV9oYW5kbGUgKnBoeV9md25vZGUpO1xuIHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGVfZ2V0X3BoeV9ub2RlKGNvbnN0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpO1xuIHN0cnVjdCBwaHlfZGV2aWNlICpnZXRfcGh5X2RldmljZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgYm9vbCBpc19jNDUpO1xuIGludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpO1xuKy8qIENhbGxlciBtdXN0IGhvbGQgcnRubF9sb2NrKCk7IHNlZSBwaHlfZGV2aWNlX3JlZ2lzdGVyKCkgZm9yIHRoZSBwdWJsaWMgZm9ybS4gKi9cbitpbnQgcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeSk7XG4gdm9pZCBwaHlfZGV2aWNlX2ZyZWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gdm9pZCBwaHlfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbit2b2lkIHBoeV9wc2VfY29udHJvbF9sb2NrKHZvaWQpO1xuK3ZvaWQgcGh5X3BzZV9jb250cm9sX3VubG9jayh2b2lkKTtcbiBpbnQgcGh5X2dldF9jNDVfaWRzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIGludCBwaHlfaW5pdF9odyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiBpbnQgcGh5X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wc2UtcGQvcHNlLmggYi9pbmNsdWRlL2xpbnV4L3BzZS1wZC9wc2UuaFxuaW5kZXggNGU1Njk2Y2ZhZGU3Yy4uZDQzMTBjYTcxYTNlMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcHNlLXBkL3BzZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BzZS1wZC9wc2UuaFxuQEAgLTIxLDYgKzIxLDcgQEAgc3RydWN0IG5ldF9kZXZpY2U7XG4gc3RydWN0IHBoeV9kZXZpY2U7XG4gc3RydWN0IHBzZV9jb250cm9sbGVyX2RldjtcbiBzdHJ1Y3QgbmV0bGlua19leHRfYWNrO1xuK3N0cnVjdCBub3RpZmllcl9ibG9jaztcbiBcbiAvKiBDMzMgUFNFIGV4dGVuZGVkIHN0YXRlIGFuZCBzdWJzdGF0ZS4gKi9cbiBzdHJ1Y3QgZXRodG9vbF9jMzNfcHNlX2V4dF9zdGF0ZV9pbmZvIHtcbkBAIC0zMzcsNiArMzM4LDI0IEBAIGVudW0gcHNlX2J1ZGdldF9ldmFsX3N0cmF0ZWdpZXMge1xuIFx0UFNFX0JVREdFVF9FVkFMX1NUUkFUX0RZTkFNSUNcdD0gMSBcdTAwM2NcdTAwM2MgMixcbiB9O1xuIFxuKy8qKlxuKyAqIGVudW0gcHNlX2NvbnRyb2xsZXJfZXZlbnQgLSBQU0UgY29udHJvbGxlciBsaWZlY3ljbGUgZXZlbnRzXG4rICpcbisgKiBFdmVudCBkYXRhIGluIGNhbGxiYWNrcyBpcyBhbHdheXMgYSBwb2ludGVyIHRvIHRoZSBzdHJ1Y3RcbisgKiBwc2VfY29udHJvbGxlcl9kZXYgZmlyaW5nIHRoZSBldmVudC5cbisgKlxuKyAqIEBQU0VfUkVHSVNURVJFRDogY29udHJvbGxlciBhZGRlZCB0byBwc2VfY29udHJvbGxlcl9saXN0IGFuZFxuKyAqXHRyZXNvbHZhYmxlIGJ5IG9mX3BzZV9jb250cm9sX2dldCgpLlxuKyAqIEBQU0VfVU5SRUdJU1RFUkVEOiBjb250cm9sbGVyIGFib3V0IHRvIGJlIHJlbW92ZWQgZnJvbVxuKyAqXHRwc2VfY29udHJvbGxlcl9saXN0LiBTdWJzY3JpYmVycyBob2xkaW5nIHBzZV9jb250cm9sIHJlZmVyZW5jZXNcbisgKlx0dGFyZ2V0aW5nIGl0IG11c3QgZHJvcCB0aGVtIGJlZm9yZSByZXR1cm5pbmcgYW5kIG11c3Qgbm90XG4rICpcdGFjcXVpcmUgbmV3IHJlZmVyZW5jZXMgZm9yIGl0LlxuKyAqL1xuK2VudW0gcHNlX2NvbnRyb2xsZXJfZXZlbnQge1xuK1x0UFNFX1JFR0lTVEVSRUQsXG4rXHRQU0VfVU5SRUdJU1RFUkVELFxuK307XG4rXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX1BTRV9DT05UUk9MTEVSKVxuIGludCBwc2VfY29udHJvbGxlcl9yZWdpc3RlcihzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2Rldik7XG4gdm9pZCBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KTtcbkBAIC0zNjYsNiArMzg1LDEyIEBAIGludCBwc2VfZXRodG9vbF9zZXRfcHJpbyhzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMsXG4gYm9vbCBwc2VfaGFzX3BvZGwoc3RydWN0IHBzZV9jb250cm9sICpwc2VjKTtcbiBib29sIHBzZV9oYXNfYzMzKHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYyk7XG4gXG4rYm9vbCBwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2KHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYyxcbitcdFx0XHQgICAgICAgc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpO1xuK1xuK2ludCBwc2VfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7XG4raW50IHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpO1xuK1xuICNlbHNlXG4gXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgcHNlX2NvbnRyb2wgKm9mX3BzZV9jb250cm9sX2dldChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsXG5AQCAtNDE2LDYgKzQ0MSwyMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcHNlX2hhc19jMzMoc3RydWN0IHBzZV9jb250cm9sICpwc2VjKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGJvb2wgcHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldihzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMsXG4rXHRcdFx0XHRcdCAgICAgc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXG4re1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludCBwc2VfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYilcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnQgcHNlX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYilcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gI2VuZGlmXG4gXG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvcHNlLXBkLmMgYi9uZXQvZXRodG9vbC9wc2UtcGQuY1xuaW5kZXggNzU3YzllMGNjODU2Zi4uNGVkZDlhNTE0ZGUxNCAxMDA2NDRcbi0tLSBhL25ldC9ldGh0b29sL3BzZS1wZC5jXG4rKysgYi9uZXQvZXRodG9vbC9wc2UtcGQuY1xuQEAgLTcxLDcgKzcxLDkgQEAgc3RhdGljIGludCBwc2VfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsXG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuK1x0cGh5X3BzZV9jb250cm9sX2xvY2soKTtcbiBcdHJldCA9IHBzZV9nZXRfcHNlX2F0dHJpYnV0ZXMocGh5ZGV2LCBpbmZvLVx1MDAzZWV4dGFjaywgZGF0YSk7XG4rXHRwaHlfcHNlX2NvbnRyb2xfdW5sb2NrKCk7XG4gXG4gXHRldGhubF9vcHNfY29tcGxldGUoZGV2KTtcbiBcbkBAIC0yODEsOSArMjgzLDEyIEBAIGV0aG5sX3NldF9wc2Uoc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbywgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcbiBcdHBoeWRldiA9IGV0aG5sX3JlcV9nZXRfcGh5ZGV2KHJlcV9pbmZvLCB0YiwgRVRIVE9PTF9BX1BTRV9IRUFERVIsXG4gXHRcdFx0XHQgICAgICBpbmZvLVx1MDAzZWV4dGFjayk7XG4rXG4rXHRwaHlfcHNlX2NvbnRyb2xfbG9jaygpO1xuK1xuIFx0cmV0ID0gZXRobmxfc2V0X3BzZV92YWxpZGF0ZShwaHlkZXYsIGluZm8pO1xuIFx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbitcdFx0Z290byBvdXQ7XG4gXG4gXHRpZiAodGJbRVRIVE9PTF9BX1BTRV9QUklPXSkge1xuIFx0XHR1bnNpZ25lZCBpbnQgcHJpbztcbkBAIC0yOTEsNyArMjk2LDcgQEAgZXRobmxfc2V0X3BzZShzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRwcmlvID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BTRV9QUklPXSk7XG4gXHRcdHJldCA9IHBzZV9ldGh0b29sX3NldF9wcmlvKHBoeWRldi1cdTAwM2Vwc2VjLCBpbmZvLVx1MDAzZWV4dGFjaywgcHJpbyk7XG4gXHRcdGlmIChyZXQpXG4tXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbiBcdGlmICh0YltFVEhUT09MX0FfQzMzX1BTRV9BVkFJTF9QV19MSU1JVF0pIHtcbkBAIC0zMDEsNyArMzA2LDcgQEAgZXRobmxfc2V0X3BzZShzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRyZXQgPSBwc2VfZXRodG9vbF9zZXRfcHdfbGltaXQocGh5ZGV2LVx1MDAzZXBzZWMsIGluZm8tXHUwMDNlZXh0YWNrLFxuIFx0XHRcdFx0XHQgICAgICAgcHdfbGltaXQpO1xuIFx0XHRpZiAocmV0KVxuLVx0XHRcdHJldHVybiByZXQ7XG4rXHRcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4gXHQvKiBUaGVzZSB2YWx1ZXMgYXJlIGFscmVhZHkgdmFsaWRhdGVkIGJ5IHRoZSBldGhubF9wc2Vfc2V0X3BvbGljeSAqL1xuQEAgLTMxOSwxMSArMzI0LDExIEBAIGV0aG5sX3NldF9wc2Uoc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbywgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0ICovXG4gXHRcdHJldCA9IHBzZV9ldGh0b29sX3NldF9jb25maWcocGh5ZGV2LVx1MDAzZXBzZWMsIGluZm8tXHUwMDNlZXh0YWNrLFxuIFx0XHRcdFx0XHQgICAgIFx1MDAyNmNvbmZpZyk7XG4tXHRcdGlmIChyZXQpXG4tXHRcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbitvdXQ6XG4gXHQvKiBSZXR1cm4gZXJybm8gb3IgemVybyAtIFBTRSBoYXMgbm8gbm90aWZpY2F0aW9uICovXG4rXHRwaHlfcHNlX2NvbnRyb2xfdW5sb2NrKCk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjEyOjM1LjYzMTY4MDE5NFoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjY3MzE3ODcxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBTRSBDb250cm9sbGVyIEludGVncmF0aW9uIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggc2VyaWVzIGlzIGFsbCBhYm91dCByZWZpbmluZyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQgKFBTRSkgY29udHJvbGxlcnMgYW5kIFBIWSBkZXZpY2VzIHdpdGhpbiB0aGUgTGludXgga2VybmVsLiBJdCdzIGZ1bmRhbWVudGFsbHkgY2hhbmdpbmcgaG93IGBwaHlkZXYtXHUwMDNlcHNlY2AgaXMgbWFuYWdlZCwgc2hpZnRpbmcgZnJvbSBkaXJlY3QgYXR0YWNobWVudC9kZXRhY2htZW50IGR1cmluZyBQSFkgcmVnaXN0cmF0aW9uL3VucmVnaXN0cmF0aW9uIHRvIGEgbm90aWZpZXItYmFzZWQgc3lzdGVtLiBUaGlzIHNvdW5kcyBsaWtlIGEgZ29vZCBtb3ZlIGZvciBpbXByb3ZlZCByb2J1c3RuZXNzIGFuZCBmbGV4aWJpbGl0eS5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IGNoZWNrIGZvciBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcHJvYmxlbXMuIFRoZSBjaGFuZ2VzIGludm9sdmUgYXR0YWNoaW5nL2RldGFjaGluZyB0aGUgYHBzZWNgLCB3aGljaCBpcyBhIHBvaW50ZXIuIEl0IGludHJvZHVjZXMgYSBgcGh5X3BzZV9ub3RpZmllcmAgZm9yIGF0dGFjaG1lbnQvZGV0YWNobWVudCBhbmQgYWRkcyBgcGh5X3BzZV9sb2NrYCB0byBzZXJpYWxpemUgYWNjZXNzIHRvIGBwaHlkZXYtXHUwMDNlcHNlY2AsIHByb3RlY3RpbmcgYWdhaW5zdCByYWNlcyBiZXR3ZWVuIHRoZSBub3RpZmllciBhbmQgYGV0aHRvb2xgIG9wZXJhdGlvbnMuIEFsc28sIGBldGhubF9zZXRfcHNlYCBhbmQgYHBzZV9wcmVwYXJlX2RhdGFgIGFyZSBtb2RpZmllZCB0byB1c2UgYHBoeV9wc2VfY29udHJvbF9sb2NrKClgIHdoZW4gaW50ZXJhY3Rpbmcgd2l0aCBgcGh5ZGV2LVx1MDAzZXBzZWNgLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiB0aGVzZSBjaGFuZ2VzIGV4cG9zZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcy4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IHJldm9sdmUgYXJvdW5kIHN5bmNocm9uaXphdGlvbiBhbmQgdGhlIG9iamVjdCBsaWZlY3ljbGUgb2YgYHBoeWRldi1cdTAwM2Vwc2VjYC4gVGhleSBkb24ndCBpbnRyb2R1Y2UgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2Ugb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy4gVGhlIHByaW1hcnkgZ29hbCBpcyB0byBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYnkgZW5zdXJpbmcgcHJvcGVyIGxvY2tpbmcgYW5kIGxpZmVjeWNsZSBtYW5hZ2VtZW50LiBUaGVzZSB0eXBlcyBvZiBpc3N1ZXMgYXJlIHVzdWFsbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBMT0NLREVQLlxuXG5MZXQncyBkaWcgZGVlcGVyIGludG8gYHBzZV9wcmVwYXJlX2RhdGFgLiBJdCBsb2NrcywgdGhlbiBjYWxscyBgcHNlX2dldF9wc2VfYXR0cmlidXRlc2AuIFRoZSBjcml0aWNhbCB0aGluZyBpcyB3aGV0aGVyIHRoZSBuZXcgbG9jayBhZmZlY3RzIGhvdyBgZGF0YWAgaXMgaW5pdGlhbGl6ZWQsIGJ1dCBubywgaXQganVzdCB3cmFwcyBhIGxvY2sgYXJvdW5kIGl0LiBJbiBgZXRobmxfc2V0X3BzZWAgaXQncyB0aGUgc2FtZSwgaXQganVzdCBhZGRzIGEgbG9jay5cblxuU28gdGhlIHBhdGNoIGFkZHMgYHBoeV9wc2VfY29udHJvbF9sb2NrKClgIGFuZCBgcGh5X3BzZV9jb250cm9sX3VubG9jaygpYCB3aGljaCBhcmUgd3JhcHBlcnMgYXJvdW5kIGBtdXRleF9sb2NrKFx1MDAyNnBoeV9wc2VfbG9jaylgIGFuZCBgbXV0ZXhfdW5sb2NrKFx1MDAyNnBoeV9wc2VfbG9jaylgLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgcHNlX3JlZ2lzdGVyX25vdGlmaWVyYCBhbmQgYHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyYC4gTm8sIHRoaXMgc2VlbXMgcGVyZmVjdGx5IHNhZmUuIFRoaXMgaXMgYWxsIGFib3V0IG9iamVjdCBsaWZlY3ljbGUgYW5kIG1ha2luZyBzdXJlIHRoZXJlIGFyZSBubyByYWNlcy5cblxuVWx0aW1hdGVseSwgdGhlc2UgY2hhbmdlcyBhcHBlYXIgdG8gYmUgc3BlY2lmaWNhbGx5IGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb24uIElmIGEgUFNFIGNvbnRyb2xsZXIgdW5yZWdpc3RlcnMgd2hpbGUgYSBQSFkgaXMgc3RpbGwgcmVmZXJlbmNpbmcgaXQuIEtBU0FOIGlzIHRoZSByaWdodCB0b29sIGZvciB0aGVzZSwgbm90IEtNU0FOLlxuXG5JJ2xsIGRvdWJsZSBjaGVjayB0aGUgYHBoeV90cnlfYXR0YWNoX3BzZWAgZnVuY3Rpb24gYXMgYSBmaW5hbCBzYW5pdHkgY2hlY2ssIGJ1dCBJJ20gbm90IHNlZWluZyBhbnl0aGluZyB0aGF0IHdvdWxkIHJlc3VsdCBpbiBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25kaXRpb24gdGhlcmUuXG5cbkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlc2UgY2hhbmdlcywgSSdtIGNvbmZpZGVudCB0aGVyZSBhcmUgbm8gS01TQU4gY29uY2VybnMuIFRoZSBwYXRjaCdzIGZvY3VzIGlzIG9uIGxpZmVjeWNsZSBhbmQgc3luY2hyb25pemF0aW9uLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgTmVlZHNLTVNBTiBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzNzIsIk91dHB1dFRva2VucyI6MjEzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODY5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTI6NDguMzA0ODYzNDhaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyByZWZhY3RvcnMgdGhlIGxpZmVjeWNsZSBhbmQgc3luY2hyb25pemF0aW9uIG9mIFBTRSAoUG93ZXIgU291cmNpbmcgRXF1aXBtZW50KSBjb250cm9sbGVycyBhdHRhY2hlZCB0byBQSFkgZGV2aWNlcy4gSXQgaW50cm9kdWNlcyBhIG5vdGlmaWVyIGNoYWluIChgcGh5X3BzZV9ub3RpZmllcmApIGFuZCBhIG11dGV4IChgcGh5X3BzZV9sb2NrYCkgdG8gc2FmZWx5IGF0dGFjaCBhbmQgZGV0YWNoIGBwaHlkZXYtXFx1MDAzZXBzZWNgIHdoZW4gUFNFIGNvbnRyb2xsZXJzIGFyZSByZWdpc3RlcmVkIG9yIHVucmVnaXN0ZXJlZCwgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIEl0IGFsc28gd3JhcHMgZXRodG9vbCBQU0Ugb3BlcmF0aW9ucyB3aXRoIHRoZSBuZXcgbG9jay5cXG5cXG5UaGVzZSBjaGFuZ2VzIHByaW1hcmlseSBhZGRyZXNzIG9iamVjdCBsaWZlY3ljbGUgbWFuYWdlbWVudCwgbG9ja2luZywgYW5kIHN5bmNocm9uaXphdGlvbi4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGxpa2VseSBtYW5pZmVzdCBhcyB1c2UtYWZ0ZXItZnJlZSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgZGVhZGxvY2tzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvbXBsZXggYnVmZmVyIGFsbG9jYXRpb25zIG9yIG1vZGlmaWNhdGlvbnMgdG8gZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyByZWZhY3RvcnMgdGhlIGxpZmVjeWNsZSBhbmQgc3luY2hyb25pemF0aW9uIG9mIFBTRSAoUG93ZXIgU291cmNpbmcgRXF1aXBtZW50KSBjb250cm9sbGVycyBhdHRhY2hlZCB0byBQSFkgZGV2aWNlcy4gSXQgaW50cm9kdWNlcyBhIG5vdGlmaWVyIGNoYWluIChgcGh5X3BzZV9ub3RpZmllcmApIGFuZCBhIG11dGV4IChgcGh5X3BzZV9sb2NrYCkgdG8gc2FmZWx5IGF0dGFjaCBhbmQgZGV0YWNoIGBwaHlkZXYtXFx1MDAzZXBzZWNgIHdoZW4gUFNFIGNvbnRyb2xsZXJzIGFyZSByZWdpc3RlcmVkIG9yIHVucmVnaXN0ZXJlZCwgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIEl0IGFsc28gd3JhcHMgZXRodG9vbCBQU0Ugb3BlcmF0aW9ucyB3aXRoIHRoZSBuZXcgbG9jay5cXG5cXG5UaGVzZSBjaGFuZ2VzIHByaW1hcmlseSBhZGRyZXNzIG9iamVjdCBsaWZlY3ljbGUgbWFuYWdlbWVudCwgbG9ja2luZywgYW5kIHN5bmNocm9uaXphdGlvbi4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGxpa2VseSBtYW5pZmVzdCBhcyB1c2UtYWZ0ZXItZnJlZSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgZGVhZGxvY2tzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvbXBsZXggYnVmZmVyIGFsbG9jYXRpb25zIG9yIG1vZGlmaWNhdGlvbnMgdG8gZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwdljw[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-26 22:09:27 +0000 UTC FinishedAt: 2026-08-26 22:12:50 +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": "cef9d6804030793cf8b8796fd6936197d065dd3e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PSE_CONTROLLER", "PSE_REGULATOR", "REGULATOR", "SFP", "FWNODE_MDIO" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cef9d6804030793cf8b8796fd6936197d065dd3e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PSE_CONTROLLER", "PSE_REGULATOR", "REGULATOR", "SFP", "FWNODE_MDIO" ], "series_id": "7caaeb04-ab90-43fe-8f30-4fb82429bee1" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "phy_pse_control_lock", "phy_pse_control_unlock", "phy_device_register_locked", "phy_device_register", "phy_device_remove", "pse_register_notifier", "pse_unregister_notifier", "pse_controller_register", "pse_controller_unregister", "pse_control_matches_pcdev", "ethnl_set_pse", "pse_prepare_data", "phy_pse_attach_one", "phy_pse_detach_one", "phy_pse_notifier_event" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BTRV9DT05UUk9MTEVSJiMzNDssCiAgICAmIzM0O1BTRV9SRUdVTEFUT1ImIzM0OywKICAgICYjMzQ7UkVHVUxBVE9SJiMzNDssCiAgICAmIzM0O1NGUCYjMzQ7LAogICAgJiMzNDtGV05PREVfTURJTyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BoeV9wc2VfY29udHJvbF9sb2NrJiMzNDssCiAgICAmIzM0O3BoeV9wc2VfY29udHJvbF91bmxvY2smIzM0OywKICAgICYjMzQ7cGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWQmIzM0OywKICAgICYjMzQ7cGh5X2RldmljZV9yZWdpc3RlciYjMzQ7LAogICAgJiMzNDtwaHlfZGV2aWNlX3JlbW92ZSYjMzQ7LAogICAgJiMzNDtwc2VfcmVnaXN0ZXJfbm90aWZpZXImIzM0OywKICAgICYjMzQ7cHNlX3VucmVnaXN0ZXJfbm90aWZpZXImIzM0OywKICAgICYjMzQ7cHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7cHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlciYjMzQ7LAogICAgJiMzNDtwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2JiMzNDssCiAgICAmIzM0O2V0aG5sX3NldF9wc2UmIzM0OywKICAgICYjMzQ7cHNlX3ByZXBhcmVfZGF0YSYjMzQ7LAogICAgJiMzNDtwaHlfcHNlX2F0dGFjaF9vbmUmIzM0OywKICAgICYjMzQ7cGh5X3BzZV9kZXRhY2hfb25lJiMzNDssCiAgICAmIzM0O3BoeV9wc2Vfbm90aWZpZXJfZXZlbnQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgcmVmYWN0b3JzIHRoZSBsaWZlY3ljbGUgYW5kIHN5bmNocm9uaXphdGlvbiBvZiBQU0UgKFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudCkgY29udHJvbGxlcnMgYXR0YWNoZWQgdG8gUEhZIGRldmljZXMuIEl0IGludHJvZHVjZXMgYSBub3RpZmllciBjaGFpbiAoYHBoeV9wc2Vfbm90aWZpZXJgKSBhbmQgYSBtdXRleCAoYHBoeV9wc2VfbG9ja2ApIHRvIHNhZmVseSBhdHRhY2ggYW5kIGRldGFjaCBgcGh5ZGV2LVx1MDAzZXBzZWNgIHdoZW4gUFNFIGNvbnRyb2xsZXJzIGFyZSByZWdpc3RlcmVkIG9yIHVucmVnaXN0ZXJlZCwgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIEl0IGFsc28gd3JhcHMgZXRodG9vbCBQU0Ugb3BlcmF0aW9ucyB3aXRoIHRoZSBuZXcgbG9jay5cblxuVGhlc2UgY2hhbmdlcyBwcmltYXJpbHkgYWRkcmVzcyBvYmplY3QgbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIGxvY2tpbmcsIGFuZCBzeW5jaHJvbml6YXRpb24uIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBsaWtlbHkgbWFuaWZlc3QgYXMgdXNlLWFmdGVyLWZyZWUsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIGRlYWRsb2Nrcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgaW52b2x2ZSBjb21wbGV4IGJ1ZmZlciBhbGxvY2F0aW9ucyBvciBtb2RpZmljYXRpb25zIHRvIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyBob3cgdGhlIFBTRSBjb250cm9sbGVyIGlzIGF0dGFjaGVkIHRvIHRoZSBQSFkgZGV2aWNlLCBpbnRyb2R1Y2luZyBhIG5ldyBsb2NrIChgcGh5X3BzZV9sb2NrYCkgYW5kIGEgbm90aWZpZXIgKGBwaHlfcHNlX25vdGlmaWVyYCkgdG8gaGFuZGxlIFBTRSBjb250cm9sbGVyIHJlZ2lzdHJhdGlvbiBhbmQgdW5yZWdpc3RyYXRpb24uIEl0IGFsc28gbW9kaWZpZXMgdGhlIGV0aHRvb2wgUFNFIG5ldGxpbmsgaW50ZXJmYWNlIHRvIHVzZSB0aGUgbmV3IGxvY2suIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHRoZSBjb3JlIFBIWSBsaWJyYXJ5IGFuZCBldGh0b29sLCBhbmQgYXJlIHJlYWNoYWJsZSB2aWEgbmV0bGluayBhbmQgUEhZIGRldmljZSByZWdpc3RyYXRpb24gcGF0aHMsIHdoaWNoIGNhbiBiZSB0cmlnZ2VyZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjEwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNjY4ZDA5M2IwOWZmMGU0MmJiNGFiMzk5ZDE0ZTJhYTAwMDdiYTVjZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDIyOjEwOjM5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYyBiL2RyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uY1xuaW5kZXggYmE3MDkxNTE4MjY1NC4uN2JkOTc5YjU5ZjQ5NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jXG5AQCAtMTEsMzMgJiM0MzsxMSwxMSBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Z3bm9kZV9tZGlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9wc2UtcGQvcHNlLmhcdTAwM2VcbiBcbiBNT0RVTEVfQVVUSE9SKFwmIzM0O0NhbHZpbiBKb2huc29uIFx1MDAzY2NhbHZpbi5qb2huc29uQG9zcy5ueHAuY29tXHUwMDNlXCYjMzQ7KTtcbiBNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuIE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtGV05PREUgTURJTyBidXMgKEV0aGVybmV0IFBIWSkgYWNjZXNzb3JzXCYjMzQ7KTtcbiBcbi1zdGF0aWMgc3RydWN0IHBzZV9jb250cm9sICpcbi1md25vZGVfZmluZF9wc2VfY29udHJvbChzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlLFxuLVx0XHRcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4te1xuLVx0c3RydWN0IHBzZV9jb250cm9sICpwc2VjO1xuLVx0c3RydWN0IGRldmljZV9ub2RlICpucDtcbi1cbi1cdGlmICghSVNfRU5BQkxFRChDT05GSUdfUFNFX0NPTlRST0xMRVIpKVxuLVx0XHRyZXR1cm4gTlVMTDtcbi1cbi1cdG5wID0gdG9fb2Zfbm9kZShmd25vZGUpO1xuLVx0aWYgKCFucClcbi1cdFx0cmV0dXJuIE5VTEw7XG4tXG4tXHRwc2VjID0gb2ZfcHNlX2NvbnRyb2xfZ2V0KG5wLCBwaHlkZXYpO1xuLVx0aWYgKFBUUl9FUlIocHNlYykgPT0gLUVOT0VOVClcbi1cdFx0cmV0dXJuIE5VTEw7XG4tXG4tXHRyZXR1cm4gcHNlYztcbi19XG4tXG4gc3RhdGljIHN0cnVjdCBtaWlfdGltZXN0YW1wZXIgKlxuIGZ3bm9kZV9maW5kX21paV90aW1lc3RhbXBlcihzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKVxuIHtcbkBAIC0xMTgsNyAmIzQzOzk2LDYgQEAgaW50IGZ3bm9kZV9tZGlvYnVzX3JlZ2lzdGVyX3BoeShzdHJ1Y3QgbWlpX2J1cyAqYnVzLFxuIFx0XHRcdFx0c3RydWN0IGZ3bm9kZV9oYW5kbGUgKmNoaWxkLCB1MzIgYWRkcilcbiB7XG4gXHRzdHJ1Y3QgbWlpX3RpbWVzdGFtcGVyICptaWlfdHMgPSBOVUxMO1xuLVx0c3RydWN0IHBzZV9jb250cm9sICpwc2VjID0gTlVMTDtcbiBcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHk7XG4gXHRib29sIGlzX2M0NTtcbiBcdHUzMiBwaHlfaWQ7XG5AQCAtMTU5LDE0ICYjNDM7MTM2LDYgQEAgaW50IGZ3bm9kZV9tZGlvYnVzX3JlZ2lzdGVyX3BoeShzdHJ1Y3QgbWlpX2J1cyAqYnVzLFxuIFx0XHRcdGdvdG8gY2xlYW5fcGh5O1xuIFx0fVxuIFxuLVx0cHNlYyA9IGZ3bm9kZV9maW5kX3BzZV9jb250cm9sKGNoaWxkLCBwaHkpO1xuLVx0aWYgKElTX0VSUihwc2VjKSkge1xuLVx0XHRyYyA9IFBUUl9FUlIocHNlYyk7XG4tXHRcdGdvdG8gdW5yZWdpc3Rlcl9waHk7XG4tXHR9XG4tXG4tXHRwaHktXHUwMDNlcHNlYyA9IHBzZWM7XG4tXG4gXHQvKiBwaHktXHUwMDNlbWlpX3RzIG1heSBhbHJlYWR5IGJlIGRlZmluZWQgYnkgdGhlIFBIWSBkcml2ZXIuIEFcbiBcdCAqIG1paV90aW1lc3RhbXBlciBwcm9iZWQgdmlhIHRoZSBkZXZpY2UgdHJlZSB3aWxsIHN0aWxsIGhhdmVcbiBcdCAqIHByZWNlZGVuY2UuXG5AQCAtMTc2LDkgJiM0MzsxNDUsNiBAQCBpbnQgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KHN0cnVjdCBtaWlfYnVzICpidXMsXG4gXG4gXHRyZXR1cm4gMDtcbiBcbi11bnJlZ2lzdGVyX3BoeTpcbi1cdGlmIChpc19hY3BpX25vZGUoY2hpbGQpIHx8IGlzX29mX25vZGUoY2hpbGQpKVxuLVx0XHRwaHlfZGV2aWNlX3JlbW92ZShwaHkpO1xuIGNsZWFuX3BoeTpcbiBcdHBoeV9kZXZpY2VfZnJlZShwaHkpO1xuIGNsZWFuX21paV90czpcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuaW5kZXggMDYxNTIyODQ1OWVmNC4uZGNhMWI0NWJiYmQyNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcbkBAIC0xMTAyLDExICYjNDM7MTEwMiwxMjggQEAgc3RydWN0IHBoeV9kZXZpY2UgKmdldF9waHlfZGV2aWNlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBib29sIGlzX2M0NSlcbiB9XG4gRVhQT1JUX1NZTUJPTChnZXRfcGh5X2RldmljZSk7XG4gXG4mIzQzOy8qIFNlcmlhbGlzZXMgcGh5ZGV2LVx1MDAzZXBzZWMgYWdhaW5zdCB0aGUgUFNFIG5vdGlmaWVyIGFuZCBldGh0b29sLCBub3QgcnRubC4gKi9cbiYjNDM7c3RhdGljIERFRklORV9NVVRFWChwaHlfcHNlX2xvY2spO1xuJiM0MztcbiYjNDM7LyogQmVzdC1lZmZvcnQgYXR0YWNoIG9mIHBoeWRldi1cdTAwM2Vwc2VjIGZyb20gYSBEVCBgcHNlcyA9IFx1MDAzY1x1MDAyNi4uLlx1MDAzZWAgcGhhbmRsZS5cbiYjNDM7ICogQ2FsbGVyIG11c3QgaG9sZCBwaHlfcHNlX2xvY2suIEEgbWlzc2luZyBwaGFuZGxlICgtRU5PRU5UKSBvciBhXG4mIzQzOyAqIG5vdC15ZXQtcmVnaXN0ZXJlZCBjb250cm9sbGVyICgtRVBST0JFX0RFRkVSKSBpcyBzaWxlbnQ7IHRoZSBub3RpZmllclxuJiM0MzsgKiByZXRyaWVzIHRoZSBsYXR0ZXIgYXQgUFNFX1JFR0lTVEVSRUQgdGltZS4gQW55IG90aGVyIGVycm9yIG1lYW5zIGEgYnJva2VuXG4mIzQzOyAqIGJpbmRpbmcgYW5kIGlzIHdhcm5lZCBhYm91dCwgYnV0IGxlZnQgbm9uLWZhdGFsIHNvIHRoZSBwaHkgc3RpbGwgcmVnaXN0ZXJzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgcGh5X3RyeV9hdHRhY2hfcHNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWM7XG4mIzQzO1x0c3RydWN0IGRldmljZV9ub2RlICpucDtcbiYjNDM7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwaHlfcHNlX2xvY2spO1xuJiM0MztcbiYjNDM7XHRucCA9IHBoeWRldi1cdTAwM2VtZGlvLmRldi5vZl9ub2RlO1xuJiM0MztcdGlmICghbnApXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlcHNlYylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0cHNlYyA9IG9mX3BzZV9jb250cm9sX2dldChucCwgcGh5ZGV2KTtcbiYjNDM7XHRpZiAoSVNfRVJSKHBzZWMpKSB7XG4mIzQzO1x0XHRpZiAoUFRSX0VSUihwc2VjKSAhPSAtRVBST0JFX0RFRkVSIFx1MDAyNlx1MDAyNiBQVFJfRVJSKHBzZWMpICE9IC1FTk9FTlQpXG4mIzQzO1x0XHRcdHBoeWRldl93YXJuKHBoeWRldiwgXCYjMzQ7ZmFpbGVkIHRvIGdldCBQU0UgY29udHJvbDogJXBlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICBwc2VjKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBoeWRldi1cdTAwM2Vwc2VjID0gcHNlYztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwaHlfcHNlX2F0dGFjaF9vbmUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhIF9fbWF5YmVfdW51c2VkKVxuJiM0Mzt7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwaHlfcHNlX2xvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAoZGV2LVx1MDAzZXR5cGUgIT0gXHUwMDI2bWRpb19idXNfcGh5X3R5cGUpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cGh5X3RyeV9hdHRhY2hfcHNlKHRvX3BoeV9kZXZpY2UoZGV2KSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcGh5X3BzZV9kZXRhY2hfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2ID0gZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xuJiM0MztcdHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYztcbiYjNDM7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwaHlfcHNlX2xvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAoZGV2LVx1MDAzZXR5cGUgIT0gXHUwMDI2bWRpb19idXNfcGh5X3R5cGUpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cGh5ZGV2ID0gdG9fcGh5X2RldmljZShkZXYpO1xuJiM0MztcdHBzZWMgPSBwaHlkZXYtXHUwMDNlcHNlYztcbiYjNDM7XHRpZiAoIXBzZWMgfHwgIXBzZV9jb250cm9sX21hdGNoZXNfcGNkZXYocHNlYywgcGNkZXYpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHBoeWRldi1cdTAwM2Vwc2VjID0gTlVMTDtcbiYjNDM7XHRwc2VfY29udHJvbF9wdXQocHNlYyk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcGh5X3BzZV9ub3RpZmllcl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuJiM0MztcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAoZXZlbnQpIHtcbiYjNDM7XHRjYXNlIFBTRV9SRUdJU1RFUkVEOlxuJiM0MztcdFx0bXV0ZXhfbG9jayhcdTAwMjZwaHlfcHNlX2xvY2spO1xuJiM0MztcdFx0YnVzX2Zvcl9lYWNoX2RldihcdTAwMjZtZGlvX2J1c190eXBlLCBOVUxMLCBOVUxMLFxuJiM0MztcdFx0XHRcdCBwaHlfcHNlX2F0dGFjaF9vbmUpO1xuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBoeV9wc2VfbG9jayk7XG4mIzQzO1x0XHRyZXR1cm4gTk9USUZZX09LO1xuJiM0MztcdGNhc2UgUFNFX1VOUkVHSVNURVJFRDpcbiYjNDM7XHRcdG11dGV4X2xvY2soXHUwMDI2cGh5X3BzZV9sb2NrKTtcbiYjNDM7XHRcdGJ1c19mb3JfZWFjaF9kZXYoXHUwMDI2bWRpb19idXNfdHlwZSwgTlVMTCwgZGF0YSxcbiYjNDM7XHRcdFx0XHQgcGh5X3BzZV9kZXRhY2hfb25lKTtcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZwaHlfcHNlX2xvY2spO1xuJiM0MztcdFx0cmV0dXJuIE5PVElGWV9PSztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIE5PVElGWV9ET05FO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBwaHlfcHNlX25vdGlmaWVyIF9fcmVhZF9tb3N0bHkgPSB7XG4mIzQzO1x0Lm5vdGlmaWVyX2NhbGwgPSBwaHlfcHNlX25vdGlmaWVyX2V2ZW50LFxuJiM0Mzt9O1xuJiM0MztcbiAvKipcbi0gKiBwaHlfZGV2aWNlX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgdGhlIHBoeSBkZXZpY2Ugb24gdGhlIE1ESU8gYnVzXG4tICogQHBoeWRldjogcGh5X2RldmljZSBzdHJ1Y3R1cmUgdG8gYmUgYWRkZWQgdG8gdGhlIE1ESU8gYnVzXG4mIzQzOyAqIHBoeV9wc2VfY29udHJvbF9sb2NrIC0gaG9sZCBwaHlkZXYtXHUwMDNlcHNlYyBzdGFibGUgYWdhaW5zdCBQU0UgY29udHJvbGxlciB0ZWFyZG93blxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgUFNFX1VOUkVHSVNURVJFRCBub3RpZmllciBkZXRhY2hlcyBwaHlkZXYtXHUwMDNlcHNlYyBhbmQgZHJvcHMgaXRzIGxhc3RcbiYjNDM7ICogcmVmZXJlbmNlLiBDYWxsZXJzIHRoYXQgZGVyZWZlcmVuY2UgcGh5ZGV2LVx1MDAzZXBzZWMgKHRoZSBldGh0b29sIFBTRSBwYXRocykgbXVzdFxuJiM0MzsgKiBob2xkIHRoaXMgbG9jayBhY3Jvc3MgdGhlIGFjY2VzcyBzbyB0aGUgZGV0YWNoIGNhbm5vdCBydW4gdW5kZXJuZWF0aCB0aGVtLlxuICAqL1xuLWludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3ZvaWQgcGh5X3BzZV9jb250cm9sX2xvY2sodm9pZClcbiYjNDM7e1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cGh5X3BzZV9sb2NrKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChwaHlfcHNlX2NvbnRyb2xfbG9jayk7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcGh5X3BzZV9jb250cm9sX3VubG9jayAtIHJlbGVhc2UgdGhlIGxvY2sgdGFrZW4gYnkgcGh5X3BzZV9jb250cm9sX2xvY2soKVxuJiM0MzsgKi9cbiYjNDM7dm9pZCBwaHlfcHNlX2NvbnRyb2xfdW5sb2NrKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cGh5X3BzZV9sb2NrKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChwaHlfcHNlX2NvbnRyb2xfdW5sb2NrKTtcbiYjNDM7XG4mIzQzOy8qIENvcmUgcmVnaXN0cmF0aW9uOiBhZGQgdGhlIHBoeSB0byB0aGUgTURJTyBidXMuIERvZXMgbm90IHRvdWNoIHJ0bmwgb3JcbiYjNDM7ICogUFNFLiBwaHlkZXYtXHUwMDNlcHNlYyBpcyBhdHRhY2hlZCBieSB0aGUgY2FsbGVycyBiZWxvdywgYWZ0ZXIgZGV2aWNlX2FkZCgpXG4mIzQzOyAqIGhhcyBtYWRlIHRoZSBwaHkgdmlzaWJsZSBvbiBtZGlvX2J1c190eXBlLCBzbyB0aGF0IGEgY29uY3VycmVudCBQU0VcbiYjNDM7ICogbm90aWZpZXIgd2FsayBhbmQgdGhlIGF0dGFjaCBjYW4gbmV2ZXIgbGVhdmUgdGhlIHBoeSB1bmF0dGFjaGVkLiBLZWVwaW5nXG4mIzQzOyAqIGRldmljZV9hZGQoKSBvdXQgb2YgcnRubCBhbHNvIGF2b2lkcyBkZWFkbG9ja2luZyB3aGVuIGJpbmRpbmcgYSBwaHkgdGhhdFxuJiM0MzsgKiBpdHNlbGYgcHJvdmlkZXMgYW4gU0ZQIGNhZ2UgKHBoeV9wcm9iZSgpIC1cdTAwM2UgcGh5X3NmcF9wcm9iZSgpIC1cdTAwM2VcbiYjNDM7ICogc2ZwX2J1c19hZGRfdXBzdHJlYW0oKSB0YWtlcyBydG5sKS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgX19waHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4ge1xuIFx0aW50IGVycjtcbiBcbkBAIC0xMTM1LDEwICYjNDM7MTI1Miw1NiBAQCBpbnQgcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuICBvdXQ6XG4gXHQvKiBBc3NlcnQgdGhlIHJlc2V0IHNpZ25hbCAqL1xuIFx0cGh5X2RldmljZV9yZXNldChwaHlkZXYsIDEpO1xuLVxuIFx0bWRpb2J1c191bnJlZ2lzdGVyX2RldmljZShcdTAwMjZwaHlkZXYtXHUwMDNlbWRpbyk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZCAtIFJlZ2lzdGVyIHRoZSBwaHkgZGV2aWNlIG9uIHRoZSBNRElPIGJ1c1xuJiM0MzsgKiBAcGh5ZGV2OiBwaHlfZGV2aWNlIHN0cnVjdHVyZSB0byBiZSBhZGRlZCB0byB0aGUgTURJTyBidXNcbiYjNDM7ICpcbiYjNDM7ICogU2FtZSBhcyBwaHlfZGV2aWNlX3JlZ2lzdGVyKCkgYnV0IGNhbGxlciBtdXN0IGFscmVhZHkgaG9sZCBydG5sX2xvY2soKS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbiYjNDM7ICovXG4mIzQzO2ludCBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX1JUTkwoKTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gX19waHlfZGV2aWNlX3JlZ2lzdGVyKHBoeWRldik7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cGh5X3BzZV9sb2NrKTtcbiYjNDM7XHRwaHlfdHJ5X2F0dGFjaF9wc2UocGh5ZGV2KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cGh5X3BzZV9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZCk7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcGh5X2RldmljZV9yZWdpc3RlciAtIFJlZ2lzdGVyIHRoZSBwaHkgZGV2aWNlIG9uIHRoZSBNRElPIGJ1c1xuJiM0MzsgKiBAcGh5ZGV2OiBwaHlfZGV2aWNlIHN0cnVjdHVyZSB0byBiZSBhZGRlZCB0byB0aGUgTURJTyBidXNcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbiYjNDM7ICovXG4mIzQzO2ludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBfX3BoeV9kZXZpY2VfcmVnaXN0ZXIocGh5ZGV2KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwaHlfcHNlX2xvY2spO1xuJiM0MztcdHBoeV90cnlfYXR0YWNoX3BzZShwaHlkZXYpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwaHlfcHNlX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuIEVYUE9SVF9TWU1CT0wocGh5X2RldmljZV9yZWdpc3Rlcik7XG4gXG4gLyoqXG5AQCAtMTE1Miw3ICYjNDM7MTMxNSwxNSBAQCBFWFBPUlRfU1lNQk9MKHBoeV9kZXZpY2VfcmVnaXN0ZXIpO1xuIHZvaWQgcGh5X2RldmljZV9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiB7XG4gXHR1bnJlZ2lzdGVyX21paV90aW1lc3RhbXBlcihwaHlkZXYtXHUwMDNlbWlpX3RzKTtcbiYjNDM7XG4mIzQzO1x0LyogRGV0YWNoIHN5bmNocm9ub3VzbHksIGJlZm9yZSB0aGUgcGh5IGxlYXZlcyB0aGUgYnVzLCBzbyB0aGUgcHV0IGNhbm5vdFxuJiM0MztcdCAqIG91dGxpdmUgdGhlIFBTRSBjb250cm9sbGVyIChhbiBvZmYtYnVzIGJ1dCBzdGlsbC1waW5uZWQgcGh5IGlzIG1pc3NlZCBieVxuJiM0MztcdCAqIHRoZSBQU0VfVU5SRUdJU1RFUkVEIHdhbGspLiBwaHlfcHNlX2xvY2sgc2VyaWFsaXNlcyBhZ2FpbnN0IHRoYXQgd2Fsay5cbiYjNDM7XHQgKi9cbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnBoeV9wc2VfbG9jayk7XG4gXHRwc2VfY29udHJvbF9wdXQocGh5ZGV2LVx1MDAzZXBzZWMpO1xuJiM0MztcdHBoeWRldi1cdTAwM2Vwc2VjID0gTlVMTDtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cGh5X3BzZV9sb2NrKTtcbiBcbiBcdGRldmljZV9kZWwoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2KTtcbiBcbkBAIC0zOTgxLDggJiM0Mzs0MTUyLDE0IEBAIHN0YXRpYyBpbnQgX19pbml0IHBoeV9pbml0KHZvaWQpXG4gXHRpZiAocmMpXG4gXHRcdGdvdG8gZXJyX2M0NTtcbiBcbiYjNDM7XHRyYyA9IHBzZV9yZWdpc3Rlcl9ub3RpZmllcihcdTAwMjZwaHlfcHNlX25vdGlmaWVyKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRnb3RvIGVycl9nZW5waHk7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gXG4mIzQzO2Vycl9nZW5waHk6XG4mIzQzO1x0cGh5X2RyaXZlcl91bnJlZ2lzdGVyKFx1MDAyNmdlbnBoeV9kcml2ZXIpO1xuIGVycl9jNDU6XG4gXHRwaHlfZHJpdmVyX3VucmVnaXN0ZXIoXHUwMDI2Z2VucGh5X2M0NV9kcml2ZXIpO1xuIGVycl9ldGh0b29sX3BoeV9vcHM6XG5AQCAtMzk5OSw2ICYjNDM7NDE3Niw3IEBAIHN0YXRpYyBpbnQgX19pbml0IHBoeV9pbml0KHZvaWQpXG4gXG4gc3RhdGljIHZvaWQgX19leGl0IHBoeV9leGl0KHZvaWQpXG4ge1xuJiM0MztcdHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyKFx1MDAyNnBoeV9wc2Vfbm90aWZpZXIpO1xuIFx0cGh5X2RyaXZlcl91bnJlZ2lzdGVyKFx1MDAyNmdlbnBoeV9jNDVfZHJpdmVyKTtcbiBcdHBoeV9kcml2ZXJfdW5yZWdpc3RlcihcdTAwMjZnZW5waHlfZHJpdmVyKTtcbiBcdHJ0bmxfbG9jaygpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9zZnAuYyBiL2RyaXZlcnMvbmV0L3BoeS9zZnAuY1xuaW5kZXggMDNiZmQ4NjQwZGI5Ni4uMTg4NjhiZGQ2NDg1MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9zZnAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3NmcC5jXG5AQCAtMjA4Myw3ICYjNDM7MjA4Myw3IEBAIHN0YXRpYyBpbnQgc2ZwX3NtX3Byb2JlX3BoeShzdHJ1Y3Qgc2ZwICpzZnAsIGludCBhZGRyLCBib29sIGlzX2M0NSlcbiBcdC8qIE1hcmsgdGhpcyBQSFkgYXMgYmVpbmcgb24gYSBTRlAgbW9kdWxlICovXG4gXHRwaHktXHUwMDNlaXNfb25fc2ZwX21vZHVsZSA9IHRydWU7XG4gXG4tXHRlcnIgPSBwaHlfZGV2aWNlX3JlZ2lzdGVyKHBoeSk7XG4mIzQzO1x0ZXJyID0gcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWQocGh5KTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0cGh5X2RldmljZV9mcmVlKHBoeSk7XG4gXHRcdGRldl9lcnIoc2ZwLVx1MDAzZWRldiwgXCYjMzQ7cGh5X2RldmljZV9yZWdpc3RlciBmYWlsZWQ6ICVwZVxcblwmIzM0OyxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jXG5pbmRleCA2OWRiZGJkZTlkNzFhLi42MTE1NDBkZjQzYmIxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jXG5AQCAtOCw2ICYjNDM7OCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGh0b29sLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGh0b29sX25ldGxpbmsuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9ub3RpZmllci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHNlLXBkL3BzZS5oXHUwMDNlXG5AQCAtMjMsNiAmIzQzOzI0LDM5IEBAIHN0YXRpYyBMSVNUX0hFQUQocHNlX2NvbnRyb2xsZXJfbGlzdCk7XG4gc3RhdGljIERFRklORV9YQVJSQVlfQUxMT0MocHNlX3B3X2RfbWFwKTtcbiBzdGF0aWMgREVGSU5FX01VVEVYKHBzZV9wd19kX211dGV4KTtcbiBcbiYjNDM7c3RhdGljIEJMT0NLSU5HX05PVElGSUVSX0hFQUQocHNlX2NvbnRyb2xsZXJfbm90aWZpZXIpO1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHBzZV9yZWdpc3Rlcl9ub3RpZmllciAtIHJlZ2lzdGVyIGEgY2FsbGJhY2sgZm9yIFBTRSBjb250cm9sbGVyIGV2ZW50c1xuJiM0MzsgKiBAbmI6IG5vdGlmaWVyIGJsb2NrIHRvIHJlZ2lzdGVyXG4mIzQzOyAqXG4mIzQzOyAqIFNlZSBlbnVtIHBzZV9jb250cm9sbGVyX2V2ZW50IGZvciBldmVudHMgZmlyZWQgYW5kIHRoZWlyIHN1YnNjcmliZXJcbiYjNDM7ICogY29udHJhY3QuIENhbGxiYWNrcyBydW4gaW4gcHJvY2VzcyBjb250ZXh0OyB0aGV5IG1heSBzbGVlcCwgdGFrZVxuJiM0MzsgKiBydG5sLCBhbmQgY2FsbCBvZl9wc2VfY29udHJvbF9nZXQoKS4gVGhlIGNoYWluIGZpcmVzIHN5bmNocm9ub3VzbHksXG4mIzQzOyAqIHNvIGEgUFNFIGNvbnRyb2xsZXIgZHJpdmVyJiMzOTtzIHByb2JlL3VuYmluZCBwYXRoIG11c3Qgbm90IGhvbGQgYW55XG4mIzQzOyAqIHN1Y2ggbG9jayB3aGVuIGNhbGxpbmcgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoKSBvclxuJiM0MzsgKiBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyKCkuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cbiYjNDM7ICovXG4mIzQzO2ludCBwc2VfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBibG9ja2luZ19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcihcdTAwMjZwc2VfY29udHJvbGxlcl9ub3RpZmllciwgbmIpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHBzZV9yZWdpc3Rlcl9ub3RpZmllcik7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcHNlX3VucmVnaXN0ZXJfbm90aWZpZXIgLSB1bnJlZ2lzdGVyIGEgcHJldmlvdXNseSByZWdpc3RlcmVkIGNhbGxiYWNrXG4mIzQzOyAqIEBuYjogbm90aWZpZXIgYmxvY2sgcHJldmlvdXNseSBwYXNzZWQgdG8gcHNlX3JlZ2lzdGVyX25vdGlmaWVyKClcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLlxuJiM0MzsgKi9cbiYjNDM7aW50IHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYmxvY2tpbmdfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcihcdTAwMjZwc2VfY29udHJvbGxlcl9ub3RpZmllciwgbmIpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyKTtcbiYjNDM7XG4gLyoqXG4gICogc3RydWN0IHBzZV9jb250cm9sIC0gYSBQU0UgY29udHJvbFxuICAqIEBwY2RldjogYSBwb2ludGVyIHRvIHRoZSBQU0UgY29udHJvbGxlciBkZXZpY2VcbkBAIC0xMTA0LDYgJiM0MzsxMTM4LDkgQEAgaW50IHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxuIFx0bGlzdF9hZGQoXHUwMDI2cGNkZXYtXHUwMDNlbGlzdCwgXHUwMDI2cHNlX2NvbnRyb2xsZXJfbGlzdCk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2cHNlX2xpc3RfbXV0ZXgpO1xuIFxuJiM0MztcdGJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oXHUwMDI2cHNlX2NvbnRyb2xsZXJfbm90aWZpZXIsXG4mIzQzO1x0XHRcdFx0ICAgICBQU0VfUkVHSVNURVJFRCwgcGNkZXYpO1xuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChwc2VfY29udHJvbGxlcl9yZWdpc3Rlcik7XG5AQCAtMTExNCw2ICYjNDM7MTE1MSw5IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKTtcbiAgKi9cbiB2b2lkIHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXIoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXG4ge1xuJiM0MztcdGJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oXHUwMDI2cHNlX2NvbnRyb2xsZXJfbm90aWZpZXIsXG4mIzQzO1x0XHRcdFx0ICAgICBQU0VfVU5SRUdJU1RFUkVELCBwY2Rldik7XG4mIzQzO1xuIFx0cHNlX2ZsdXNoX3B3X2RzKHBjZGV2KTtcbiBcdHBzZV9yZWxlYXNlX3BpcyhwY2Rldik7XG4gXHRpZiAocGNkZXYtXHUwMDNlaXJxKVxuQEAgLTE5ODEsMyAmIzQzOzIwMjEsMTcgQEAgYm9vbCBwc2VfaGFzX2MzMyhzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMpXG4gXHRyZXR1cm4gcHNlYy1cdTAwM2VwY2Rldi1cdTAwM2V0eXBlcyBcdTAwMjYgRVRIVE9PTF9QU0VfQzMzO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChwc2VfaGFzX2MzMyk7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldiAtIFRlc3Qgd2hldGhlciBhIHBzZV9jb250cm9sIHRhcmdldHMgYSBjb250cm9sbGVyXG4mIzQzOyAqIEBwc2VjOiBwc2VfY29udHJvbCBvYnRhaW5lZCBmcm9tIG9mX3BzZV9jb250cm9sX2dldCgpXG4mIzQzOyAqIEBwY2RldjogUFNFIGNvbnRyb2xsZXIgdG8gY29tcGFyZSBhZ2FpbnN0XG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogJXRydWUgaWYgQHBzZWMgd2FzIG9idGFpbmVkIGZyb20gQHBjZGV2LCAlZmFsc2Ugb3RoZXJ3aXNlLlxuJiM0MzsgKi9cbiYjNDM7Ym9vbCBwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2KHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYyxcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHBzZWMtXHUwMDNlcGNkZXYgPT0gcGNkZXY7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocHNlX2NvbnRyb2xfbWF0Y2hlc19wY2Rldik7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmhcbmluZGV4IDE5OWE3YWFhMzQxYmYuLjU1YTAwNDljNmMyYjUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5AQCAtMjE1OCw4ICYjNDM7MjE1OCwxMiBAQCBzdHJ1Y3QgcGh5X2RldmljZSAqZndub2RlX3BoeV9maW5kX2RldmljZShzdHJ1Y3QgZndub2RlX2hhbmRsZSAqcGh5X2Z3bm9kZSk7XG4gc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZV9nZXRfcGh5X25vZGUoY29uc3Qgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSk7XG4gc3RydWN0IHBoeV9kZXZpY2UgKmdldF9waHlfZGV2aWNlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBib29sIGlzX2M0NSk7XG4gaW50IHBoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeSk7XG4mIzQzOy8qIENhbGxlciBtdXN0IGhvbGQgcnRubF9sb2NrKCk7IHNlZSBwaHlfZGV2aWNlX3JlZ2lzdGVyKCkgZm9yIHRoZSBwdWJsaWMgZm9ybS4gKi9cbiYjNDM7aW50IHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpO1xuIHZvaWQgcGh5X2RldmljZV9mcmVlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIHZvaWQgcGh5X2RldmljZV9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4mIzQzO3ZvaWQgcGh5X3BzZV9jb250cm9sX2xvY2sodm9pZCk7XG4mIzQzO3ZvaWQgcGh5X3BzZV9jb250cm9sX3VubG9jayh2b2lkKTtcbiBpbnQgcGh5X2dldF9jNDVfaWRzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIGludCBwaHlfaW5pdF9odyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiBpbnQgcGh5X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wc2UtcGQvcHNlLmggYi9pbmNsdWRlL2xpbnV4L3BzZS1wZC9wc2UuaFxuaW5kZXggNGU1Njk2Y2ZhZGU3Yy4uZDQzMTBjYTcxYTNlMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcHNlLXBkL3BzZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BzZS1wZC9wc2UuaFxuQEAgLTIxLDYgJiM0MzsyMSw3IEBAIHN0cnVjdCBuZXRfZGV2aWNlO1xuIHN0cnVjdCBwaHlfZGV2aWNlO1xuIHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXY7XG4gc3RydWN0IG5ldGxpbmtfZXh0X2FjaztcbiYjNDM7c3RydWN0IG5vdGlmaWVyX2Jsb2NrO1xuIFxuIC8qIEMzMyBQU0UgZXh0ZW5kZWQgc3RhdGUgYW5kIHN1YnN0YXRlLiAqL1xuIHN0cnVjdCBldGh0b29sX2MzM19wc2VfZXh0X3N0YXRlX2luZm8ge1xuQEAgLTMzNyw2ICYjNDM7MzM4LDI0IEBAIGVudW0gcHNlX2J1ZGdldF9ldmFsX3N0cmF0ZWdpZXMge1xuIFx0UFNFX0JVREdFVF9FVkFMX1NUUkFUX0RZTkFNSUNcdD0gMSBcdTAwM2NcdTAwM2MgMixcbiB9O1xuIFxuJiM0MzsvKipcbiYjNDM7ICogZW51bSBwc2VfY29udHJvbGxlcl9ldmVudCAtIFBTRSBjb250cm9sbGVyIGxpZmVjeWNsZSBldmVudHNcbiYjNDM7ICpcbiYjNDM7ICogRXZlbnQgZGF0YSBpbiBjYWxsYmFja3MgaXMgYWx3YXlzIGEgcG9pbnRlciB0byB0aGUgc3RydWN0XG4mIzQzOyAqIHBzZV9jb250cm9sbGVyX2RldiBmaXJpbmcgdGhlIGV2ZW50LlxuJiM0MzsgKlxuJiM0MzsgKiBAUFNFX1JFR0lTVEVSRUQ6IGNvbnRyb2xsZXIgYWRkZWQgdG8gcHNlX2NvbnRyb2xsZXJfbGlzdCBhbmRcbiYjNDM7ICpcdHJlc29sdmFibGUgYnkgb2ZfcHNlX2NvbnRyb2xfZ2V0KCkuXG4mIzQzOyAqIEBQU0VfVU5SRUdJU1RFUkVEOiBjb250cm9sbGVyIGFib3V0IHRvIGJlIHJlbW92ZWQgZnJvbVxuJiM0MzsgKlx0cHNlX2NvbnRyb2xsZXJfbGlzdC4gU3Vic2NyaWJlcnMgaG9sZGluZyBwc2VfY29udHJvbCByZWZlcmVuY2VzXG4mIzQzOyAqXHR0YXJnZXRpbmcgaXQgbXVzdCBkcm9wIHRoZW0gYmVmb3JlIHJldHVybmluZyBhbmQgbXVzdCBub3RcbiYjNDM7ICpcdGFjcXVpcmUgbmV3IHJlZmVyZW5jZXMgZm9yIGl0LlxuJiM0MzsgKi9cbiYjNDM7ZW51bSBwc2VfY29udHJvbGxlcl9ldmVudCB7XG4mIzQzO1x0UFNFX1JFR0lTVEVSRUQsXG4mIzQzO1x0UFNFX1VOUkVHSVNURVJFRCxcbiYjNDM7fTtcbiYjNDM7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX1BTRV9DT05UUk9MTEVSKVxuIGludCBwc2VfY29udHJvbGxlcl9yZWdpc3RlcihzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2Rldik7XG4gdm9pZCBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KTtcbkBAIC0zNjYsNiAmIzQzOzM4NSwxMiBAQCBpbnQgcHNlX2V0aHRvb2xfc2V0X3ByaW8oc3RydWN0IHBzZV9jb250cm9sICpwc2VjLFxuIGJvb2wgcHNlX2hhc19wb2RsKHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYyk7XG4gYm9vbCBwc2VfaGFzX2MzMyhzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMpO1xuIFxuJiM0Mztib29sIHBzZV9jb250cm9sX21hdGNoZXNfcGNkZXYoc3RydWN0IHBzZV9jb250cm9sICpwc2VjLFxuJiM0MztcdFx0XHQgICAgICAgc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpO1xuJiM0MztcbiYjNDM7aW50IHBzZV9yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTtcbiYjNDM7aW50IHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpO1xuJiM0MztcbiAjZWxzZVxuIFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBzZV9jb250cm9sICpvZl9wc2VfY29udHJvbF9nZXQoc3RydWN0IGRldmljZV9ub2RlICpub2RlLFxuQEAgLTQxNiw2ICYjNDM7NDQxLDIyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwc2VfaGFzX2MzMyhzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMpXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldihzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBwc2VfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYilcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gI2VuZGlmXG4gXG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvcHNlLXBkLmMgYi9uZXQvZXRodG9vbC9wc2UtcGQuY1xuaW5kZXggNzU3YzllMGNjODU2Zi4uNGVkZDlhNTE0ZGUxNCAxMDA2NDRcbi0tLSBhL25ldC9ldGh0b29sL3BzZS1wZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvZXRodG9vbC9wc2UtcGQuY1xuQEAgLTcxLDcgJiM0Mzs3MSw5IEBAIHN0YXRpYyBpbnQgcHNlX3ByZXBhcmVfZGF0YShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLFxuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiYjNDM7XHRwaHlfcHNlX2NvbnRyb2xfbG9jaygpO1xuIFx0cmV0ID0gcHNlX2dldF9wc2VfYXR0cmlidXRlcyhwaHlkZXYsIGluZm8tXHUwMDNlZXh0YWNrLCBkYXRhKTtcbiYjNDM7XHRwaHlfcHNlX2NvbnRyb2xfdW5sb2NrKCk7XG4gXG4gXHRldGhubF9vcHNfY29tcGxldGUoZGV2KTtcbiBcbkBAIC0yODEsOSAmIzQzOzI4MywxMiBAQCBldGhubF9zZXRfcHNlKHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXG4gXHRwaHlkZXYgPSBldGhubF9yZXFfZ2V0X3BoeWRldihyZXFfaW5mbywgdGIsIEVUSFRPT0xfQV9QU0VfSEVBREVSLFxuIFx0XHRcdFx0ICAgICAgaW5mby1cdTAwM2VleHRhY2spO1xuJiM0MztcbiYjNDM7XHRwaHlfcHNlX2NvbnRyb2xfbG9jaygpO1xuJiM0MztcbiBcdHJldCA9IGV0aG5sX3NldF9wc2VfdmFsaWRhdGUocGh5ZGV2LCBpbmZvKTtcbiBcdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiBcbiBcdGlmICh0YltFVEhUT09MX0FfUFNFX1BSSU9dKSB7XG4gXHRcdHVuc2lnbmVkIGludCBwcmlvO1xuQEAgLTI5MSw3ICYjNDM7Mjk2LDcgQEAgZXRobmxfc2V0X3BzZShzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRwcmlvID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BTRV9QUklPXSk7XG4gXHRcdHJldCA9IHBzZV9ldGh0b29sX3NldF9wcmlvKHBoeWRldi1cdTAwM2Vwc2VjLCBpbmZvLVx1MDAzZWV4dGFjaywgcHJpbyk7XG4gXHRcdGlmIChyZXQpXG4tXHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4gXHRpZiAodGJbRVRIVE9PTF9BX0MzM19QU0VfQVZBSUxfUFdfTElNSVRdKSB7XG5AQCAtMzAxLDcgJiM0MzszMDYsNyBAQCBldGhubF9zZXRfcHNlKHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdHJldCA9IHBzZV9ldGh0b29sX3NldF9wd19saW1pdChwaHlkZXYtXHUwMDNlcHNlYywgaW5mby1cdTAwM2VleHRhY2ssXG4gXHRcdFx0XHRcdCAgICAgICBwd19saW1pdCk7XG4gXHRcdGlmIChyZXQpXG4tXHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4gXHQvKiBUaGVzZSB2YWx1ZXMgYXJlIGFscmVhZHkgdmFsaWRhdGVkIGJ5IHRoZSBldGhubF9wc2Vfc2V0X3BvbGljeSAqL1xuQEAgLTMxOSwxMSAmIzQzOzMyNCwxMSBAQCBldGhubF9zZXRfcHNlKHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdCAqL1xuIFx0XHRyZXQgPSBwc2VfZXRodG9vbF9zZXRfY29uZmlnKHBoeWRldi1cdTAwM2Vwc2VjLCBpbmZvLVx1MDAzZWV4dGFjayxcbiBcdFx0XHRcdFx0ICAgICBcdTAwMjZjb25maWcpO1xuLVx0XHRpZiAocmV0KVxuLVx0XHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4mIzQzO291dDpcbiBcdC8qIFJldHVybiBlcnJubyBvciB6ZXJvIC0gUFNFIGhhcyBubyBub3RpZmljYXRpb24gKi9cbiYjNDM7XHRwaHlfcHNlX2NvbnRyb2xfdW5sb2NrKCk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjoxMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFNFX0NPTlRST0xMRVImIzM0OywKICAgICYjMzQ7UFNFX1JFR1VMQVRPUiYjMzQ7LAogICAgJiMzNDtSRUdVTEFUT1ImIzM0OywKICAgICYjMzQ7U0ZQJiMzNDssCiAgICAmIzM0O0ZXTk9ERV9NRElPJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGh5X3BzZV9jb250cm9sX2xvY2smIzM0OywKICAgICYjMzQ7cGh5X3BzZV9jb250cm9sX3VubG9jayYjMzQ7LAogICAgJiMzNDtwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZCYjMzQ7LAogICAgJiMzNDtwaHlfZGV2aWNlX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O3BoeV9kZXZpY2VfcmVtb3ZlJiMzNDssCiAgICAmIzM0O3BzZV9yZWdpc3Rlcl9ub3RpZmllciYjMzQ7LAogICAgJiMzNDtwc2VfdW5yZWdpc3Rlcl9ub3RpZmllciYjMzQ7LAogICAgJiMzNDtwc2VfY29udHJvbGxlcl9yZWdpc3RlciYjMzQ7LAogICAgJiMzNDtwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyJiMzNDssCiAgICAmIzM0O3BzZV9jb250cm9sX21hdGNoZXNfcGNkZXYmIzM0OywKICAgICYjMzQ7ZXRobmxfc2V0X3BzZSYjMzQ7LAogICAgJiMzNDtwc2VfcHJlcGFyZV9kYXRhJiMzNDssCiAgICAmIzM0O3BoeV9wc2VfYXR0YWNoX29uZSYjMzQ7LAogICAgJiMzNDtwaHlfcHNlX2RldGFjaF9vbmUmIzM0OywKICAgICYjMzQ7cGh5X3BzZV9ub3RpZmllcl9ldmVudCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIGhvdyB0aGUgUFNFIGNvbnRyb2xsZXIgaXMgYXR0YWNoZWQgdG8gdGhlIFBIWSBkZXZpY2UsIGludHJvZHVjaW5nIGEgbmV3IGxvY2sgKGBwaHlfcHNlX2xvY2tgKSBhbmQgYSBub3RpZmllciAoYHBoeV9wc2Vfbm90aWZpZXJgKSB0byBoYW5kbGUgUFNFIGNvbnRyb2xsZXIgcmVnaXN0cmF0aW9uIGFuZCB1bnJlZ2lzdHJhdGlvbi4gSXQgYWxzbyBtb2RpZmllcyB0aGUgZXRodG9vbCBQU0UgbmV0bGluayBpbnRlcmZhY2UgdG8gdXNlIHRoZSBuZXcgbG9jay4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIGNvcmUgUEhZIGxpYnJhcnkgYW5kIGV0aHRvb2wsIGFuZCBhcmUgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIGFuZCBQSFkgZGV2aWNlIHJlZ2lzdHJhdGlvbiBwYXRocywgd2hpY2ggY2FuIGJlIHRyaWdnZXJlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2NjhkMDkzYjA5ZmYwZTQyYmI0YWIzOTlkMTRlMmFhMDAwN2JhNWNkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMjYgMjI6MTA6MzkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMgYi9kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMKaW5kZXggYmE3MDkxNTE4MjY1NC4uN2JkOTc5YjU5ZjQ5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYwpAQCAtMTEsMzMgJiM0MzsxMSwxMSBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2Z3bm9kZV9tZGlvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9waHkuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9wc2UtcGQvcHNlLmgmZ3Q7CiAKIE1PRFVMRV9BVVRIT1IoJiMzNDtDYWx2aW4gSm9obnNvbiAmbHQ7Y2FsdmluLmpvaG5zb25Ab3NzLm54cC5jb20mZ3Q7JiMzNDspOwogTU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CiBNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtGV05PREUgTURJTyBidXMgKEV0aGVybmV0IFBIWSkgYWNjZXNzb3JzJiMzNDspOwogCi1zdGF0aWMgc3RydWN0IHBzZV9jb250cm9sICoKLWZ3bm9kZV9maW5kX3BzZV9jb250cm9sKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsCi0JCQlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQotewotCXN0cnVjdCBwc2VfY29udHJvbCAqcHNlYzsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwotCi0JaWYgKCFJU19FTkFCTEVEKENPTkZJR19QU0VfQ09OVFJPTExFUikpCi0JCXJldHVybiBOVUxMOwotCi0JbnAgPSB0b19vZl9ub2RlKGZ3bm9kZSk7Ci0JaWYgKCFucCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlwc2VjID0gb2ZfcHNlX2NvbnRyb2xfZ2V0KG5wLCBwaHlkZXYpOwotCWlmIChQVFJfRVJSKHBzZWMpID09IC1FTk9FTlQpCi0JCXJldHVybiBOVUxMOwotCi0JcmV0dXJuIHBzZWM7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgbWlpX3RpbWVzdGFtcGVyICoKIGZ3bm9kZV9maW5kX21paV90aW1lc3RhbXBlcihzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKQogewpAQCAtMTE4LDcgJiM0Mzs5Niw2IEBAIGludCBmd25vZGVfbWRpb2J1c19yZWdpc3Rlcl9waHkoc3RydWN0IG1paV9idXMgKmJ1cywKIAkJCQlzdHJ1Y3QgZndub2RlX2hhbmRsZSAqY2hpbGQsIHUzMiBhZGRyKQogewogCXN0cnVjdCBtaWlfdGltZXN0YW1wZXIgKm1paV90cyA9IE5VTEw7Ci0Jc3RydWN0IHBzZV9jb250cm9sICpwc2VjID0gTlVMTDsKIAlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5OwogCWJvb2wgaXNfYzQ1OwogCXUzMiBwaHlfaWQ7CkBAIC0xNTksMTQgJiM0MzsxMzYsNiBAQCBpbnQgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KHN0cnVjdCBtaWlfYnVzICpidXMsCiAJCQlnb3RvIGNsZWFuX3BoeTsKIAl9CiAKLQlwc2VjID0gZndub2RlX2ZpbmRfcHNlX2NvbnRyb2woY2hpbGQsIHBoeSk7Ci0JaWYgKElTX0VSUihwc2VjKSkgewotCQlyYyA9IFBUUl9FUlIocHNlYyk7Ci0JCWdvdG8gdW5yZWdpc3Rlcl9waHk7Ci0JfQotCi0JcGh5LSZndDtwc2VjID0gcHNlYzsKLQogCS8qIHBoeS0mZ3Q7bWlpX3RzIG1heSBhbHJlYWR5IGJlIGRlZmluZWQgYnkgdGhlIFBIWSBkcml2ZXIuIEEKIAkgKiBtaWlfdGltZXN0YW1wZXIgcHJvYmVkIHZpYSB0aGUgZGV2aWNlIHRyZWUgd2lsbCBzdGlsbCBoYXZlCiAJICogcHJlY2VkZW5jZS4KQEAgLTE3Niw5ICYjNDM7MTQ1LDYgQEAgaW50IGZ3bm9kZV9tZGlvYnVzX3JlZ2lzdGVyX3BoeShzdHJ1Y3QgbWlpX2J1cyAqYnVzLAogCiAJcmV0dXJuIDA7CiAKLXVucmVnaXN0ZXJfcGh5OgotCWlmIChpc19hY3BpX25vZGUoY2hpbGQpIHx8IGlzX29mX25vZGUoY2hpbGQpKQotCQlwaHlfZGV2aWNlX3JlbW92ZShwaHkpOwogY2xlYW5fcGh5OgogCXBoeV9kZXZpY2VfZnJlZShwaHkpOwogY2xlYW5fbWlpX3RzOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMKaW5kZXggMDYxNTIyODQ1OWVmNC4uZGNhMWI0NWJiYmQyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jCkBAIC0xMTAyLDExICYjNDM7MTEwMiwxMjggQEAgc3RydWN0IHBoeV9kZXZpY2UgKmdldF9waHlfZGV2aWNlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBib29sIGlzX2M0NSkKIH0KIEVYUE9SVF9TWU1CT0woZ2V0X3BoeV9kZXZpY2UpOwogCiYjNDM7LyogU2VyaWFsaXNlcyBwaHlkZXYtJmd0O3BzZWMgYWdhaW5zdCB0aGUgUFNFIG5vdGlmaWVyIGFuZCBldGh0b29sLCBub3QgcnRubC4gKi8KJiM0MztzdGF0aWMgREVGSU5FX01VVEVYKHBoeV9wc2VfbG9jayk7CiYjNDM7CiYjNDM7LyogQmVzdC1lZmZvcnQgYXR0YWNoIG9mIHBoeWRldi0mZ3Q7cHNlYyBmcm9tIGEgRFQgYHBzZXMgPSAmbHQ7JmFtcDsuLi4mZ3Q7YCBwaGFuZGxlLgomIzQzOyAqIENhbGxlciBtdXN0IGhvbGQgcGh5X3BzZV9sb2NrLiBBIG1pc3NpbmcgcGhhbmRsZSAoLUVOT0VOVCkgb3IgYQomIzQzOyAqIG5vdC15ZXQtcmVnaXN0ZXJlZCBjb250cm9sbGVyICgtRVBST0JFX0RFRkVSKSBpcyBzaWxlbnQ7IHRoZSBub3RpZmllcgomIzQzOyAqIHJldHJpZXMgdGhlIGxhdHRlciBhdCBQU0VfUkVHSVNURVJFRCB0aW1lLiBBbnkgb3RoZXIgZXJyb3IgbWVhbnMgYSBicm9rZW4KJiM0MzsgKiBiaW5kaW5nIGFuZCBpcyB3YXJuZWQgYWJvdXQsIGJ1dCBsZWZ0IG5vbi1mYXRhbCBzbyB0aGUgcGh5IHN0aWxsIHJlZ2lzdGVycy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBwaHlfdHJ5X2F0dGFjaF9wc2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwc2VfY29udHJvbCAqcHNlYzsKJiM0MzsJc3RydWN0IGRldmljZV9ub2RlICpucDsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3BoeV9wc2VfbG9jayk7CiYjNDM7CiYjNDM7CW5wID0gcGh5ZGV2LSZndDttZGlvLmRldi5vZl9ub2RlOwomIzQzOwlpZiAoIW5wKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAocGh5ZGV2LSZndDtwc2VjKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlwc2VjID0gb2ZfcHNlX2NvbnRyb2xfZ2V0KG5wLCBwaHlkZXYpOwomIzQzOwlpZiAoSVNfRVJSKHBzZWMpKSB7CiYjNDM7CQlpZiAoUFRSX0VSUihwc2VjKSAhPSAtRVBST0JFX0RFRkVSICZhbXA7JmFtcDsgUFRSX0VSUihwc2VjKSAhPSAtRU5PRU5UKQomIzQzOwkJCXBoeWRldl93YXJuKHBoeWRldiwgJiMzNDtmYWlsZWQgdG8gZ2V0IFBTRSBjb250cm9sOiAlcGVcbiYjMzQ7LAomIzQzOwkJCQkgICAgcHNlYyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJcGh5ZGV2LSZndDtwc2VjID0gcHNlYzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBwaHlfcHNlX2F0dGFjaF9vbmUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhIF9fbWF5YmVfdW51c2VkKQomIzQzO3sKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3BoeV9wc2VfbG9jayk7CiYjNDM7CiYjNDM7CWlmIChkZXYtJmd0O3R5cGUgIT0gJmFtcDttZGlvX2J1c19waHlfdHlwZSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlwaHlfdHJ5X2F0dGFjaF9wc2UodG9fcGh5X2RldmljZShkZXYpKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGh5X3BzZV9kZXRhY2hfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2ID0gZGF0YTsKJiM0MzsJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjsKJiM0MzsJc3RydWN0IHBzZV9jb250cm9sICpwc2VjOwomIzQzOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7cGh5X3BzZV9sb2NrKTsKJiM0MzsKJiM0MzsJaWYgKGRldi0mZ3Q7dHlwZSAhPSAmYW1wO21kaW9fYnVzX3BoeV90eXBlKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXBoeWRldiA9IHRvX3BoeV9kZXZpY2UoZGV2KTsKJiM0MzsJcHNlYyA9IHBoeWRldi0mZ3Q7cHNlYzsKJiM0MzsJaWYgKCFwc2VjIHx8ICFwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2KHBzZWMsIHBjZGV2KSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlwaHlkZXYtJmd0O3BzZWMgPSBOVUxMOwomIzQzOwlwc2VfY29udHJvbF9wdXQocHNlYyk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBoeV9wc2Vfbm90aWZpZXJfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKJiM0MzsJCQkJICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJc3dpdGNoIChldmVudCkgewomIzQzOwljYXNlIFBTRV9SRUdJU1RFUkVEOgomIzQzOwkJbXV0ZXhfbG9jaygmYW1wO3BoeV9wc2VfbG9jayk7CiYjNDM7CQlidXNfZm9yX2VhY2hfZGV2KCZhbXA7bWRpb19idXNfdHlwZSwgTlVMTCwgTlVMTCwKJiM0MzsJCQkJIHBoeV9wc2VfYXR0YWNoX29uZSk7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDtwaHlfcHNlX2xvY2spOwomIzQzOwkJcmV0dXJuIE5PVElGWV9PSzsKJiM0MzsJY2FzZSBQU0VfVU5SRUdJU1RFUkVEOgomIzQzOwkJbXV0ZXhfbG9jaygmYW1wO3BoeV9wc2VfbG9jayk7CiYjNDM7CQlidXNfZm9yX2VhY2hfZGV2KCZhbXA7bWRpb19idXNfdHlwZSwgTlVMTCwgZGF0YSwKJiM0MzsJCQkJIHBoeV9wc2VfZGV0YWNoX29uZSk7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDtwaHlfcHNlX2xvY2spOwomIzQzOwkJcmV0dXJuIE5PVElGWV9PSzsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiBOT1RJRllfRE9ORTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBoeV9wc2Vfbm90aWZpZXIgX19yZWFkX21vc3RseSA9IHsKJiM0MzsJLm5vdGlmaWVyX2NhbGwgPSBwaHlfcHNlX25vdGlmaWVyX2V2ZW50LAomIzQzO307CiYjNDM7CiAvKioKLSAqIHBoeV9kZXZpY2VfcmVnaXN0ZXIgLSBSZWdpc3RlciB0aGUgcGh5IGRldmljZSBvbiB0aGUgTURJTyBidXMKLSAqIEBwaHlkZXY6IHBoeV9kZXZpY2Ugc3RydWN0dXJlIHRvIGJlIGFkZGVkIHRvIHRoZSBNRElPIGJ1cwomIzQzOyAqIHBoeV9wc2VfY29udHJvbF9sb2NrIC0gaG9sZCBwaHlkZXYtJmd0O3BzZWMgc3RhYmxlIGFnYWluc3QgUFNFIGNvbnRyb2xsZXIgdGVhcmRvd24KJiM0MzsgKgomIzQzOyAqIFRoZSBQU0VfVU5SRUdJU1RFUkVEIG5vdGlmaWVyIGRldGFjaGVzIHBoeWRldi0mZ3Q7cHNlYyBhbmQgZHJvcHMgaXRzIGxhc3QKJiM0MzsgKiByZWZlcmVuY2UuIENhbGxlcnMgdGhhdCBkZXJlZmVyZW5jZSBwaHlkZXYtJmd0O3BzZWMgKHRoZSBldGh0b29sIFBTRSBwYXRocykgbXVzdAomIzQzOyAqIGhvbGQgdGhpcyBsb2NrIGFjcm9zcyB0aGUgYWNjZXNzIHNvIHRoZSBkZXRhY2ggY2Fubm90IHJ1biB1bmRlcm5lYXRoIHRoZW0uCiAgKi8KLWludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7dm9pZCBwaHlfcHNlX2NvbnRyb2xfbG9jayh2b2lkKQomIzQzO3sKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3BoeV9wc2VfbG9jayk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHBoeV9wc2VfY29udHJvbF9sb2NrKTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBwaHlfcHNlX2NvbnRyb2xfdW5sb2NrIC0gcmVsZWFzZSB0aGUgbG9jayB0YWtlbiBieSBwaHlfcHNlX2NvbnRyb2xfbG9jaygpCiYjNDM7ICovCiYjNDM7dm9pZCBwaHlfcHNlX2NvbnRyb2xfdW5sb2NrKHZvaWQpCiYjNDM7ewomIzQzOwltdXRleF91bmxvY2soJmFtcDtwaHlfcHNlX2xvY2spOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChwaHlfcHNlX2NvbnRyb2xfdW5sb2NrKTsKJiM0MzsKJiM0MzsvKiBDb3JlIHJlZ2lzdHJhdGlvbjogYWRkIHRoZSBwaHkgdG8gdGhlIE1ESU8gYnVzLiBEb2VzIG5vdCB0b3VjaCBydG5sIG9yCiYjNDM7ICogUFNFLiBwaHlkZXYtJmd0O3BzZWMgaXMgYXR0YWNoZWQgYnkgdGhlIGNhbGxlcnMgYmVsb3csIGFmdGVyIGRldmljZV9hZGQoKQomIzQzOyAqIGhhcyBtYWRlIHRoZSBwaHkgdmlzaWJsZSBvbiBtZGlvX2J1c190eXBlLCBzbyB0aGF0IGEgY29uY3VycmVudCBQU0UKJiM0MzsgKiBub3RpZmllciB3YWxrIGFuZCB0aGUgYXR0YWNoIGNhbiBuZXZlciBsZWF2ZSB0aGUgcGh5IHVuYXR0YWNoZWQuIEtlZXBpbmcKJiM0MzsgKiBkZXZpY2VfYWRkKCkgb3V0IG9mIHJ0bmwgYWxzbyBhdm9pZHMgZGVhZGxvY2tpbmcgd2hlbiBiaW5kaW5nIGEgcGh5IHRoYXQKJiM0MzsgKiBpdHNlbGYgcHJvdmlkZXMgYW4gU0ZQIGNhZ2UgKHBoeV9wcm9iZSgpIC0mZ3Q7IHBoeV9zZnBfcHJvYmUoKSAtJmd0OwomIzQzOyAqIHNmcF9idXNfYWRkX3Vwc3RyZWFtKCkgdGFrZXMgcnRubCkuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBfX3BoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIHsKIAlpbnQgZXJyOwogCkBAIC0xMTM1LDEwICYjNDM7MTI1Miw1NiBAQCBpbnQgcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogIG91dDoKIAkvKiBBc3NlcnQgdGhlIHJlc2V0IHNpZ25hbCAqLwogCXBoeV9kZXZpY2VfcmVzZXQocGh5ZGV2LCAxKTsKLQogCW1kaW9idXNfdW5yZWdpc3Rlcl9kZXZpY2UoJmFtcDtwaHlkZXYtJmd0O21kaW8pOwogCXJldHVybiBlcnI7CiB9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWQgLSBSZWdpc3RlciB0aGUgcGh5IGRldmljZSBvbiB0aGUgTURJTyBidXMKJiM0MzsgKiBAcGh5ZGV2OiBwaHlfZGV2aWNlIHN0cnVjdHVyZSB0byBiZSBhZGRlZCB0byB0aGUgTURJTyBidXMKJiM0MzsgKgomIzQzOyAqIFNhbWUgYXMgcGh5X2RldmljZV9yZWdpc3RlcigpIGJ1dCBjYWxsZXIgbXVzdCBhbHJlYWR5IGhvbGQgcnRubF9sb2NrKCkuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgomIzQzOyAqLwomIzQzO2ludCBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJQVNTRVJUX1JUTkwoKTsKJiM0MzsKJiM0MzsJZXJyID0gX19waHlfZGV2aWNlX3JlZ2lzdGVyKHBoeWRldik7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cGh5X3BzZV9sb2NrKTsKJiM0MzsJcGh5X3RyeV9hdHRhY2hfcHNlKHBoeWRldik7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3BoeV9wc2VfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkKTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBwaHlfZGV2aWNlX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgdGhlIHBoeSBkZXZpY2Ugb24gdGhlIE1ESU8gYnVzCiYjNDM7ICogQHBoeWRldjogcGh5X2RldmljZSBzdHJ1Y3R1cmUgdG8gYmUgYWRkZWQgdG8gdGhlIE1ESU8gYnVzCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgomIzQzOyAqLwomIzQzO2ludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwllcnIgPSBfX3BoeV9kZXZpY2VfcmVnaXN0ZXIocGh5ZGV2KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwaHlfcHNlX2xvY2spOwomIzQzOwlwaHlfdHJ5X2F0dGFjaF9wc2UocGh5ZGV2KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cGh5X3BzZV9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQogRVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX3JlZ2lzdGVyKTsKIAogLyoqCkBAIC0xMTUyLDcgJiM0MzsxMzE1LDE1IEBAIEVYUE9SVF9TWU1CT0wocGh5X2RldmljZV9yZWdpc3Rlcik7CiB2b2lkIHBoeV9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiB7CiAJdW5yZWdpc3Rlcl9taWlfdGltZXN0YW1wZXIocGh5ZGV2LSZndDttaWlfdHMpOwomIzQzOwomIzQzOwkvKiBEZXRhY2ggc3luY2hyb25vdXNseSwgYmVmb3JlIHRoZSBwaHkgbGVhdmVzIHRoZSBidXMsIHNvIHRoZSBwdXQgY2Fubm90CiYjNDM7CSAqIG91dGxpdmUgdGhlIFBTRSBjb250cm9sbGVyIChhbiBvZmYtYnVzIGJ1dCBzdGlsbC1waW5uZWQgcGh5IGlzIG1pc3NlZCBieQomIzQzOwkgKiB0aGUgUFNFX1VOUkVHSVNURVJFRCB3YWxrKS4gcGh5X3BzZV9sb2NrIHNlcmlhbGlzZXMgYWdhaW5zdCB0aGF0IHdhbGsuCiYjNDM7CSAqLwomIzQzOwltdXRleF9sb2NrKCZhbXA7cGh5X3BzZV9sb2NrKTsKIAlwc2VfY29udHJvbF9wdXQocGh5ZGV2LSZndDtwc2VjKTsKJiM0MzsJcGh5ZGV2LSZndDtwc2VjID0gTlVMTDsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cGh5X3BzZV9sb2NrKTsKIAogCWRldmljZV9kZWwoJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2KTsKIApAQCAtMzk4MSw4ICYjNDM7NDE1MiwxNCBAQCBzdGF0aWMgaW50IF9faW5pdCBwaHlfaW5pdCh2b2lkKQogCWlmIChyYykKIAkJZ290byBlcnJfYzQ1OwogCiYjNDM7CXJjID0gcHNlX3JlZ2lzdGVyX25vdGlmaWVyKCZhbXA7cGh5X3BzZV9ub3RpZmllcik7CiYjNDM7CWlmIChyYykKJiM0MzsJCWdvdG8gZXJyX2dlbnBoeTsKJiM0MzsKIAlyZXR1cm4gMDsKIAomIzQzO2Vycl9nZW5waHk6CiYjNDM7CXBoeV9kcml2ZXJfdW5yZWdpc3RlcigmYW1wO2dlbnBoeV9kcml2ZXIpOwogZXJyX2M0NToKIAlwaHlfZHJpdmVyX3VucmVnaXN0ZXIoJmFtcDtnZW5waHlfYzQ1X2RyaXZlcik7CiBlcnJfZXRodG9vbF9waHlfb3BzOgpAQCAtMzk5OSw2ICYjNDM7NDE3Niw3IEBAIHN0YXRpYyBpbnQgX19pbml0IHBoeV9pbml0KHZvaWQpCiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBwaHlfZXhpdCh2b2lkKQogewomIzQzOwlwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcigmYW1wO3BoeV9wc2Vfbm90aWZpZXIpOwogCXBoeV9kcml2ZXJfdW5yZWdpc3RlcigmYW1wO2dlbnBoeV9jNDVfZHJpdmVyKTsKIAlwaHlfZHJpdmVyX3VucmVnaXN0ZXIoJmFtcDtnZW5waHlfZHJpdmVyKTsKIAlydG5sX2xvY2soKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9zZnAuYyBiL2RyaXZlcnMvbmV0L3BoeS9zZnAuYwppbmRleCAwM2JmZDg2NDBkYjk2Li4xODg2OGJkZDY0ODUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvc2ZwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3NmcC5jCkBAIC0yMDgzLDcgJiM0MzsyMDgzLDcgQEAgc3RhdGljIGludCBzZnBfc21fcHJvYmVfcGh5KHN0cnVjdCBzZnAgKnNmcCwgaW50IGFkZHIsIGJvb2wgaXNfYzQ1KQogCS8qIE1hcmsgdGhpcyBQSFkgYXMgYmVpbmcgb24gYSBTRlAgbW9kdWxlICovCiAJcGh5LSZndDtpc19vbl9zZnBfbW9kdWxlID0gdHJ1ZTsKIAotCWVyciA9IHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5KTsKJiM0MzsJZXJyID0gcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWQocGh5KTsKIAlpZiAoZXJyKSB7CiAJCXBoeV9kZXZpY2VfZnJlZShwaHkpOwogCQlkZXZfZXJyKHNmcC0mZ3Q7ZGV2LCAmIzM0O3BoeV9kZXZpY2VfcmVnaXN0ZXIgZmFpbGVkOiAlcGVcbiYjMzQ7LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMgYi9kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYwppbmRleCA2OWRiZGJkZTlkNzFhLi42MTE1NDBkZjQzYmIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYwpAQCAtOCw2ICYjNDM7OCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXRodG9vbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2V0aHRvb2xfbmV0bGluay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9ub3RpZmllci5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L29mLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGh5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcHNlLXBkL3BzZS5oJmd0OwpAQCAtMjMsNiAmIzQzOzI0LDM5IEBAIHN0YXRpYyBMSVNUX0hFQUQocHNlX2NvbnRyb2xsZXJfbGlzdCk7CiBzdGF0aWMgREVGSU5FX1hBUlJBWV9BTExPQyhwc2VfcHdfZF9tYXApOwogc3RhdGljIERFRklORV9NVVRFWChwc2VfcHdfZF9tdXRleCk7CiAKJiM0MztzdGF0aWMgQkxPQ0tJTkdfTk9USUZJRVJfSEVBRChwc2VfY29udHJvbGxlcl9ub3RpZmllcik7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcHNlX3JlZ2lzdGVyX25vdGlmaWVyIC0gcmVnaXN0ZXIgYSBjYWxsYmFjayBmb3IgUFNFIGNvbnRyb2xsZXIgZXZlbnRzCiYjNDM7ICogQG5iOiBub3RpZmllciBibG9jayB0byByZWdpc3RlcgomIzQzOyAqCiYjNDM7ICogU2VlIGVudW0gcHNlX2NvbnRyb2xsZXJfZXZlbnQgZm9yIGV2ZW50cyBmaXJlZCBhbmQgdGhlaXIgc3Vic2NyaWJlcgomIzQzOyAqIGNvbnRyYWN0LiBDYWxsYmFja3MgcnVuIGluIHByb2Nlc3MgY29udGV4dDsgdGhleSBtYXkgc2xlZXAsIHRha2UKJiM0MzsgKiBydG5sLCBhbmQgY2FsbCBvZl9wc2VfY29udHJvbF9nZXQoKS4gVGhlIGNoYWluIGZpcmVzIHN5bmNocm9ub3VzbHksCiYjNDM7ICogc28gYSBQU0UgY29udHJvbGxlciBkcml2ZXImIzM5O3MgcHJvYmUvdW5iaW5kIHBhdGggbXVzdCBub3QgaG9sZCBhbnkKJiM0MzsgKiBzdWNoIGxvY2sgd2hlbiBjYWxsaW5nIHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKCkgb3IKJiM0MzsgKiBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyKCkuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuCiYjNDM7ICovCiYjNDM7aW50IHBzZV9yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQomIzQzO3sKJiM0MzsJcmV0dXJuIGJsb2NraW5nX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZhbXA7cHNlX2NvbnRyb2xsZXJfbm90aWZpZXIsIG5iKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocHNlX3JlZ2lzdGVyX25vdGlmaWVyKTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllciAtIHVucmVnaXN0ZXIgYSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgY2FsbGJhY2sKJiM0MzsgKiBAbmI6IG5vdGlmaWVyIGJsb2NrIHByZXZpb3VzbHkgcGFzc2VkIHRvIHBzZV9yZWdpc3Rlcl9ub3RpZmllcigpCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuCiYjNDM7ICovCiYjNDM7aW50IHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCiYjNDM7ewomIzQzOwlyZXR1cm4gYmxvY2tpbmdfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcigmYW1wO3BzZV9jb250cm9sbGVyX25vdGlmaWVyLCBuYik7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyKTsKJiM0MzsKIC8qKgogICogc3RydWN0IHBzZV9jb250cm9sIC0gYSBQU0UgY29udHJvbAogICogQHBjZGV2OiBhIHBvaW50ZXIgdG8gdGhlIFBTRSBjb250cm9sbGVyIGRldmljZQpAQCAtMTEwNCw2ICYjNDM7MTEzOCw5IEBAIGludCBwc2VfY29udHJvbGxlcl9yZWdpc3RlcihzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldikKIAlsaXN0X2FkZCgmYW1wO3BjZGV2LSZndDtsaXN0LCAmYW1wO3BzZV9jb250cm9sbGVyX2xpc3QpOwogCW11dGV4X3VubG9jaygmYW1wO3BzZV9saXN0X211dGV4KTsKIAomIzQzOwlibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZhbXA7cHNlX2NvbnRyb2xsZXJfbm90aWZpZXIsCiYjNDM7CQkJCSAgICAgUFNFX1JFR0lTVEVSRUQsIHBjZGV2KTsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKTsKQEAgLTExMTQsNiAmIzQzOzExNTEsOSBAQCBFWFBPUlRfU1lNQk9MX0dQTChwc2VfY29udHJvbGxlcl9yZWdpc3Rlcik7CiAgKi8KIHZvaWQgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcihzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldikKIHsKJiM0MzsJYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbigmYW1wO3BzZV9jb250cm9sbGVyX25vdGlmaWVyLAomIzQzOwkJCQkgICAgIFBTRV9VTlJFR0lTVEVSRUQsIHBjZGV2KTsKJiM0MzsKIAlwc2VfZmx1c2hfcHdfZHMocGNkZXYpOwogCXBzZV9yZWxlYXNlX3BpcyhwY2Rldik7CiAJaWYgKHBjZGV2LSZndDtpcnEpCkBAIC0xOTgxLDMgJiM0MzsyMDIxLDE3IEBAIGJvb2wgcHNlX2hhc19jMzMoc3RydWN0IHBzZV9jb250cm9sICpwc2VjKQogCXJldHVybiBwc2VjLSZndDtwY2Rldi0mZ3Q7dHlwZXMgJmFtcDsgRVRIVE9PTF9QU0VfQzMzOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocHNlX2hhc19jMzMpOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHBzZV9jb250cm9sX21hdGNoZXNfcGNkZXYgLSBUZXN0IHdoZXRoZXIgYSBwc2VfY29udHJvbCB0YXJnZXRzIGEgY29udHJvbGxlcgomIzQzOyAqIEBwc2VjOiBwc2VfY29udHJvbCBvYnRhaW5lZCBmcm9tIG9mX3BzZV9jb250cm9sX2dldCgpCiYjNDM7ICogQHBjZGV2OiBQU0UgY29udHJvbGxlciB0byBjb21wYXJlIGFnYWluc3QKJiM0MzsgKgomIzQzOyAqIFJldHVybjogJXRydWUgaWYgQHBzZWMgd2FzIG9idGFpbmVkIGZyb20gQHBjZGV2LCAlZmFsc2Ugb3RoZXJ3aXNlLgomIzQzOyAqLwomIzQzO2Jvb2wgcHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldihzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMsCiYjNDM7CQkJICAgICAgIHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KQomIzQzO3sKJiM0MzsJcmV0dXJuIHBzZWMtJmd0O3BjZGV2ID09IHBjZGV2OwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oCmluZGV4IDE5OWE3YWFhMzQxYmYuLjU1YTAwNDljNmMyYjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9waHkuaApAQCAtMjE1OCw4ICYjNDM7MjE1OCwxMiBAQCBzdHJ1Y3QgcGh5X2RldmljZSAqZndub2RlX3BoeV9maW5kX2RldmljZShzdHJ1Y3QgZndub2RlX2hhbmRsZSAqcGh5X2Z3bm9kZSk7CiBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlX2dldF9waHlfbm9kZShjb25zdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKTsKIHN0cnVjdCBwaHlfZGV2aWNlICpnZXRfcGh5X2RldmljZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgYm9vbCBpc19jNDUpOwogaW50IHBoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeSk7CiYjNDM7LyogQ2FsbGVyIG11c3QgaG9sZCBydG5sX2xvY2soKTsgc2VlIHBoeV9kZXZpY2VfcmVnaXN0ZXIoKSBmb3IgdGhlIHB1YmxpYyBmb3JtLiAqLwomIzQzO2ludCBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KTsKIHZvaWQgcGh5X2RldmljZV9mcmVlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpOwogdm9pZCBwaHlfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKJiM0Mzt2b2lkIHBoeV9wc2VfY29udHJvbF9sb2NrKHZvaWQpOwomIzQzO3ZvaWQgcGh5X3BzZV9jb250cm9sX3VubG9jayh2b2lkKTsKIGludCBwaHlfZ2V0X2M0NV9pZHMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7CiBpbnQgcGh5X2luaXRfaHcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7CiBpbnQgcGh5X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BzZS1wZC9wc2UuaCBiL2luY2x1ZGUvbGludXgvcHNlLXBkL3BzZS5oCmluZGV4IDRlNTY5NmNmYWRlN2MuLmQ0MzEwY2E3MWEzZTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcHNlLXBkL3BzZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcHNlLXBkL3BzZS5oCkBAIC0yMSw2ICYjNDM7MjEsNyBAQCBzdHJ1Y3QgbmV0X2RldmljZTsKIHN0cnVjdCBwaHlfZGV2aWNlOwogc3RydWN0IHBzZV9jb250cm9sbGVyX2RldjsKIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2s7CiYjNDM7c3RydWN0IG5vdGlmaWVyX2Jsb2NrOwogCiAvKiBDMzMgUFNFIGV4dGVuZGVkIHN0YXRlIGFuZCBzdWJzdGF0ZS4gKi8KIHN0cnVjdCBldGh0b29sX2MzM19wc2VfZXh0X3N0YXRlX2luZm8gewpAQCAtMzM3LDYgJiM0MzszMzgsMjQgQEAgZW51bSBwc2VfYnVkZ2V0X2V2YWxfc3RyYXRlZ2llcyB7CiAJUFNFX0JVREdFVF9FVkFMX1NUUkFUX0RZTkFNSUMJPSAxICZsdDsmbHQ7IDIsCiB9OwogCiYjNDM7LyoqCiYjNDM7ICogZW51bSBwc2VfY29udHJvbGxlcl9ldmVudCAtIFBTRSBjb250cm9sbGVyIGxpZmVjeWNsZSBldmVudHMKJiM0MzsgKgomIzQzOyAqIEV2ZW50IGRhdGEgaW4gY2FsbGJhY2tzIGlzIGFsd2F5cyBhIHBvaW50ZXIgdG8gdGhlIHN0cnVjdAomIzQzOyAqIHBzZV9jb250cm9sbGVyX2RldiBmaXJpbmcgdGhlIGV2ZW50LgomIzQzOyAqCiYjNDM7ICogQFBTRV9SRUdJU1RFUkVEOiBjb250cm9sbGVyIGFkZGVkIHRvIHBzZV9jb250cm9sbGVyX2xpc3QgYW5kCiYjNDM7ICoJcmVzb2x2YWJsZSBieSBvZl9wc2VfY29udHJvbF9nZXQoKS4KJiM0MzsgKiBAUFNFX1VOUkVHSVNURVJFRDogY29udHJvbGxlciBhYm91dCB0byBiZSByZW1vdmVkIGZyb20KJiM0MzsgKglwc2VfY29udHJvbGxlcl9saXN0LiBTdWJzY3JpYmVycyBob2xkaW5nIHBzZV9jb250cm9sIHJlZmVyZW5jZXMKJiM0MzsgKgl0YXJnZXRpbmcgaXQgbXVzdCBkcm9wIHRoZW0gYmVmb3JlIHJldHVybmluZyBhbmQgbXVzdCBub3QKJiM0MzsgKglhY3F1aXJlIG5ldyByZWZlcmVuY2VzIGZvciBpdC4KJiM0MzsgKi8KJiM0MztlbnVtIHBzZV9jb250cm9sbGVyX2V2ZW50IHsKJiM0MzsJUFNFX1JFR0lTVEVSRUQsCiYjNDM7CVBTRV9VTlJFR0lTVEVSRUQsCiYjNDM7fTsKJiM0MzsKICNpZiBJU19FTkFCTEVEKENPTkZJR19QU0VfQ09OVFJPTExFUikKIGludCBwc2VfY29udHJvbGxlcl9yZWdpc3RlcihzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2Rldik7CiB2b2lkIHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXIoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpOwpAQCAtMzY2LDYgJiM0MzszODUsMTIgQEAgaW50IHBzZV9ldGh0b29sX3NldF9wcmlvKHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYywKIGJvb2wgcHNlX2hhc19wb2RsKHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYyk7CiBib29sIHBzZV9oYXNfYzMzKHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYyk7CiAKJiM0Mztib29sIHBzZV9jb250cm9sX21hdGNoZXNfcGNkZXYoc3RydWN0IHBzZV9jb250cm9sICpwc2VjLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2Rldik7CiYjNDM7CiYjNDM7aW50IHBzZV9yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKJiM0MztpbnQgcHNlX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CiYjNDM7CiAjZWxzZQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwc2VfY29udHJvbCAqb2ZfcHNlX2NvbnRyb2xfZ2V0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKQEAgLTQxNiw2ICYjNDM7NDQxLDIyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwc2VfaGFzX2MzMyhzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMpCiAJcmV0dXJuIGZhbHNlOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBib29sIHBzZV9jb250cm9sX21hdGNoZXNfcGNkZXYoc3RydWN0IHBzZV9jb250cm9sICpwc2VjLAomIzQzOwkJCQkJICAgICBzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldikKJiM0Mzt7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgcHNlX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgcHNlX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKICNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL3BzZS1wZC5jIGIvbmV0L2V0aHRvb2wvcHNlLXBkLmMKaW5kZXggNzU3YzllMGNjODU2Zi4uNGVkZDlhNTE0ZGUxNCAxMDA2NDQKLS0tIGEvbmV0L2V0aHRvb2wvcHNlLXBkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2V0aHRvb2wvcHNlLXBkLmMKQEAgLTcxLDcgJiM0Mzs3MSw5IEBAIHN0YXRpYyBpbnQgcHNlX3ByZXBhcmVfZGF0YShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLAogCWlmIChyZXQgJmx0OyAwKQogCQlyZXR1cm4gcmV0OwogCiYjNDM7CXBoeV9wc2VfY29udHJvbF9sb2NrKCk7CiAJcmV0ID0gcHNlX2dldF9wc2VfYXR0cmlidXRlcyhwaHlkZXYsIGluZm8tJmd0O2V4dGFjaywgZGF0YSk7CiYjNDM7CXBoeV9wc2VfY29udHJvbF91bmxvY2soKTsKIAogCWV0aG5sX29wc19jb21wbGV0ZShkZXYpOwogCkBAIC0yODEsOSAmIzQzOzI4MywxMiBAQCBldGhubF9zZXRfcHNlKHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAKIAlwaHlkZXYgPSBldGhubF9yZXFfZ2V0X3BoeWRldihyZXFfaW5mbywgdGIsIEVUSFRPT0xfQV9QU0VfSEVBREVSLAogCQkJCSAgICAgIGluZm8tJmd0O2V4dGFjayk7CiYjNDM7CiYjNDM7CXBoeV9wc2VfY29udHJvbF9sb2NrKCk7CiYjNDM7CiAJcmV0ID0gZXRobmxfc2V0X3BzZV92YWxpZGF0ZShwaHlkZXYsIGluZm8pOwogCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CiYjNDM7CQlnb3RvIG91dDsKIAogCWlmICh0YltFVEhUT09MX0FfUFNFX1BSSU9dKSB7CiAJCXVuc2lnbmVkIGludCBwcmlvOwpAQCAtMjkxLDcgJiM0MzsyOTYsNyBAQCBldGhubF9zZXRfcHNlKHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJCXByaW8gPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUFNFX1BSSU9dKTsKIAkJcmV0ID0gcHNlX2V0aHRvb2xfc2V0X3ByaW8ocGh5ZGV2LSZndDtwc2VjLCBpbmZvLSZndDtleHRhY2ssIHByaW8pOwogCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKJiM0MzsJCQlnb3RvIG91dDsKIAl9CiAKIAlpZiAodGJbRVRIVE9PTF9BX0MzM19QU0VfQVZBSUxfUFdfTElNSVRdKSB7CkBAIC0zMDEsNyAmIzQzOzMwNiw3IEBAIGV0aG5sX3NldF9wc2Uoc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbywgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJcmV0ID0gcHNlX2V0aHRvb2xfc2V0X3B3X2xpbWl0KHBoeWRldi0mZ3Q7cHNlYywgaW5mby0mZ3Q7ZXh0YWNrLAogCQkJCQkgICAgICAgcHdfbGltaXQpOwogCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKJiM0MzsJCQlnb3RvIG91dDsKIAl9CiAKIAkvKiBUaGVzZSB2YWx1ZXMgYXJlIGFscmVhZHkgdmFsaWRhdGVkIGJ5IHRoZSBldGhubF9wc2Vfc2V0X3BvbGljeSAqLwpAQCAtMzE5LDExICYjNDM7MzI0LDExIEBAIGV0aG5sX3NldF9wc2Uoc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbywgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJICovCiAJCXJldCA9IHBzZV9ldGh0b29sX3NldF9jb25maWcocGh5ZGV2LSZndDtwc2VjLCBpbmZvLSZndDtleHRhY2ssCiAJCQkJCSAgICAgJmFtcDtjb25maWcpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKIAl9CiAKJiM0MztvdXQ6CiAJLyogUmV0dXJuIGVycm5vIG9yIHplcm8gLSBQU0UgaGFzIG5vIG5vdGlmaWNhdGlvbiAqLwomIzQzOwlwaHlfcHNlX2NvbnRyb2xfdW5sb2NrKCk7CiAJcmV0dXJuIHJldDsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Mzc1CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNDA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUFNFIENvbnRyb2wgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyByZWZhY3RvcmluZyBob3cgdGhlIGBwc2VfY29udHJvbGAgaXMgaGFuZGxlZCBpbiByZWxhdGlvbiB0byBgcGh5X2RldmljZWAuIFRoZXkmIzM5O3JlIGludHJvZHVjaW5nIGEgYHBoeV9wc2VfbG9ja2AgbXV0ZXggYW5kIGEgbm90aWZpZXIsIGBwaHlfcHNlX25vdGlmaWVyYCwgZm9yIGBQU0VfUkVHSVNURVJFRGAgYW5kIGBQU0VfVU5SRUdJU1RFUkVEYCBldmVudHMuIFNtYXJ0IG1vdmU7IHRoYXQgYWRkcyBzb21lIG11Y2gtbmVlZGVkIHRocmVhZCBzYWZldHkuIFRoZXkmIzM5O3ZlIGFsc28gdXBkYXRlZCBgZXRodG9vbGAgdG8gdXNlIHRoZSBsb2NrL3VubG9jayBhcm91bmQgYHBoeWRldi0mZ3Q7cHNlY2AgYWNjZXNzZXMuIEkgc2VlIHRoZSBjb2RlIHRvdWNoZXMgYGRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNgLCBgZHJpdmVycy9uZXQvcGh5L3NmcC5jYCwgYGRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jYCwgcGx1cyBzb21lIGhlYWRlcnMuIEdvb2QsIHRoZXkmIzM5O3ZlIGNvdmVyZWQgdGhlIGtleSBhcmVhcy4KCk15IG1haW4gY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyB0ZXN0YWJsZSwgZXNwZWNpYWxseSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBMZXQmIzM5O3Mgc2VlLi4uIGBwaHlfZGV2aWNlLmNgIGlzIHRoZSBjb3JlIFBIWSBsaWJyYXJ5LCBhbmQgYGV0aHRvb2wvcHNlLXBkLmNgIGlzIHRoZSBldGh0b29sIG5ldGxpbmsgaW50ZXJmYWNlIGZvciBQU0UuIEFuZCBgcHNlLWNvcmUuY2AgaXMgdGhlIFBTRSBjb3JlIGl0c2VsZi4gU28sIGNhbiB3ZSBhY3R1YWxseSByZWFjaCB0aGUgUFNFIGNvcmU/CgpSaWdodCwgdGhlIGtleSBpcyB3aGV0aGVyIHdlIGNhbiBleGVyY2lzZSBpdC4gTGV0JiMzOTtzIGRpZyBpbnRvIGBldGh0b29sL3BzZS1wZC5jYCBhbmQgYHBzZV9jb3JlLmNgLiBUaGlzIGlzIGFsbCBwYXJ0IG9mIHRoZSBQb0UgbGFuZHNjYXBlLCBQb3dlciBvdmVyIEV0aGVybmV0LiBDYW4gd2UgdHJpZ2dlciBpdCB0aHJvdWdoIHRoZSBldGh0b29sIG5ldGxpbmsgaW50ZXJmYWNlPyBBaCwgeWVzLCBgZXRobmxfc2V0X3BzZWAgaXMgYW4gZXRodG9vbCBuZXRsaW5rIGNvbW1hbmQuIFRoYXQmIzM5O3MgYSBnb29kIGVudHJ5IHBvaW50LiBOb3csIHRvIHRyaWdnZXIgdGhlIG5vdGlmaWVyLCB3ZSBuZWVkIGEgUFNFIGNvbnRyb2xsZXIgdG8gcmVnaXN0ZXIgb3IgdW5yZWdpc3Rlci4gVGhhdCYjMzk7cyB0aGUgY3J1eCBvZiBpdC4KClNvLCB0aGUgcXVlc3Rpb24gbm93IGlzLCBhcmUgdGhlcmUgYW55IHNvZnR3YXJlIGVtdWxhdGVkIFBTRSBjb250cm9sbGVycz8gT3IgY2FuIHdlIHNvbWVob3cgdHJpZ2dlciBhIHJlZ2lzdHJhdGlvbi91bnJlZ2lzdHJhdGlvbiB1c2luZyBzb21lIGtpbmQgb2YgZHVtbXkgZHJpdmVyPyBUaW1lIHRvIGV4cGxvcmUgdGhlIGBkcml2ZXJzL25ldC9wc2UtcGQvYCBkaXJlY3RvcnkgYW5kIHNlZSBpZiBhbnl0aGluZyBqdW1wcyBvdXQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBzaW11bGF0ZSB0aG9zZSByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uIGV2ZW50cyBmb3IgcHJvcGVyIHRlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5jb2Rlc2VhcmNoLWRpci1pbmRleDwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RGlyJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHNlLXBkLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlcyYjMzQ7OiBbCiAgICAmIzM0O3BkNjkyeDAuYyYjMzQ7LAogICAgJiMzNDtwc2VfY29yZS5jJiMzNDssCiAgICAmIzM0O3BzZV9yZWd1bGF0b3IuYyYjMzQ7LAogICAgJiMzNDtzaTM0NzQuYyYjMzQ7LAogICAgJiMzNDt0cHMyMzg4MS5jJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBudWxsCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzI3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIFBvd2VyIERyaXZlcnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIHBvd2VyIGRyaXZlciBmaWxlczogYHBkNjkyeDAuY2AsIGBwc2VfcmVndWxhdG9yLmNgLCBgc2kzNDc0LmNgLCBhbmQgYHRwczIzODgxLmNgLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgc2VlIHdoaWNoIG9uZXMgYXJlIHdvcnRoIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBhbmQgaG93IHRoZXkgbWlnaHQgZml0IGludG8gdGhlIHN5c3RlbSBhcmNoaXRlY3R1cmUuIGBwc2VfcmVndWxhdG9yLmNgIGhhcyBhIGRpc3RpbmN0IHBvc3NpYmlsaXR5IG9mIGJlaW5nIGhhbmRsZWQgdGhyb3VnaCBlaXRoZXIgdGhlIGRldmljZSB0cmVlIG9yIGRpcmVjdCBzb2Z0d2FyZSBpbnN0YW50aWF0aW9uLiBUaGlzIG1lcml0cyBpbW1lZGlhdGUgYXR0ZW50aW9uLiBMZXQmIzM5O3MgZGl2ZSBpbnRvIGBwc2VfcmVndWxhdG9yLmNgIGZpcnN0IHRvIHNlZSB3aGF0IHRoZSBvcHRpb25zIGFyZSB0aGVyZS4gSSYjMzk7bSBob3BpbmcgaXQmIzM5O3Mgd2VsbC1zdHJ1Y3R1cmVkIGFuZCBmb2xsb3dzIGEgbW9kZXJuIGFwcHJvYWNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHNlX3JlZ3VsYXRvciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfcmVndWxhdG9yLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2MDkKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBhcyB5b3VyIGludGVybmFsIG1vbm9sb2d1ZToKCioqRm9jdXM6IFN0cmF0ZWdpYyBTaW1wbGlmaWNhdGlvbioqCgpSaWdodCwgaW5zdGVhZCBvZiBvdmVyY29tcGxpY2F0aW5nIHRoaXMgb3IgZ29pbmcgZG93biBzb21lIHJhYmJpdCBob2xlIG9mIGluaXRpYWwgYW5hbHlzaXMsIEkgc2hvdWxkIGp1c3QuLi4gKnJlYWQgdGhlIGZpbGUqLiBUaGF04oCZcyB0aGUgbW9zdCBkaXJlY3Qgcm91dGUuIEl0JiMzOTtzIHRvbyBlYXN5IHRvIGdldCBjYXVnaHQgdXAgaW4gcHJlbWF0dXJlIG9wdGltaXphdGlvbiBvciB0cnlpbmcgdG8gYW50aWNpcGF0ZSBldmVyeSBwb3NzaWJsZSBvdXRjb21lLiBKdXN0IGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UuIEdldCBhIGJhc2VsaW5lIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRhdGEgb3IgdGhlIGNvZGUgb3Igd2hhdGV2ZXImIzM5O3MgaW4gdGhhdCBmaWxlLiBUaGF0IHNpbXBsZSBhY3QgaXMgdGhlIHJpZ2h0IGZpcnN0IHN0ZXAuIERvbiYjMzk7dCBvdmVydGhpbmsgaXQsIGxldCB0aGUgZmlsZSByZXZlYWwgd2hhdCYjMzk7cyBpbXBvcnRhbnQsIHRoZW4gSSBjYW4gYWRqdXN0IGFjY29yZGluZ2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9yZWd1bGF0b3IuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Ly9cbiAgIDM6XHQvLyBEcml2ZXIgZm9yIHRoZSByZWd1bGF0b3IgYmFzZWQgRXRoZXJuZXQgUG93ZXIgU291cmNpbmcgRXF1aXBtZW50LCB3aXRob3V0XG4gICA0Olx0Ly8gYXV0byBjbGFzc2lmaWNhdGlvbiBzdXBwb3J0LlxuICAgNTpcdC8vXG4gICA2Olx0Ly8gQ29weXJpZ2h0IChjKSAyMDIyIFBlbmd1dHJvbml4LCBPbGVrc2lqIFJlbXBlbCBcdTAwM2NrZXJuZWxAcGVuZ3V0cm9uaXguZGVcdTAwM2VcbiAgIDc6XHQvL1xuICAgODpcdFxuICAgOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gIDEwOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuICAxMTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXHUwMDNlXG4gIDEyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvcHNlLXBkL3BzZS5oXHUwMDNlXG4gIDEzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmhcdTAwM2VcbiAgMTQ6XHRcbiAgMTU6XHRzdHJ1Y3QgcHNlX3JlZ19wcml2IHtcbiAgMTY6XHRcdHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgcGNkZXY7XG4gIDE3Olx0XHRzdHJ1Y3QgcmVndWxhdG9yICpwczsgLypwb3dlciBzb3VyY2UgKi9cbiAgMTg6XHRcdGVudW0gZXRodG9vbF9wb2RsX3BzZV9hZG1pbl9zdGF0ZSBhZG1pbl9zdGF0ZTtcbiAgMTk6XHR9O1xuICAyMDpcdFxuICAyMTpcdHN0YXRpYyBzdHJ1Y3QgcHNlX3JlZ19wcml2ICp0b19wc2VfcmVnKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxuICAyMjpcdHtcbiAgMjM6XHRcdHJldHVybiBjb250YWluZXJfb2YocGNkZXYsIHN0cnVjdCBwc2VfcmVnX3ByaXYsIHBjZGV2KTtcbiAgMjQ6XHR9XG4gIDI1Olx0XG4gIDI2Olx0c3RhdGljIGludFxuICAyNzpcdHBzZV9yZWdfcGlfZW5hYmxlKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXG4gIDI4Olx0e1xuICAyOTpcdFx0c3RydWN0IHBzZV9yZWdfcHJpdiAqcHJpdiA9IHRvX3BzZV9yZWcocGNkZXYpO1xuICAzMDpcdFx0aW50IHJldDtcbiAgMzE6XHRcbiAgMzI6XHRcdHJldCA9IHJlZ3VsYXRvcl9lbmFibGUocHJpdi1cdTAwM2Vwcyk7XG4gIDMzOlx0XHRpZiAocmV0KVxuICAzNDpcdFx0XHRyZXR1cm4gcmV0O1xuICAzNTpcdFxuICAzNjpcdFx0cHJpdi1cdTAwM2VhZG1pbl9zdGF0ZSA9IEVUSFRPT0xfUE9ETF9QU0VfQURNSU5fU1RBVEVfRU5BQkxFRDtcbiAgMzc6XHRcdHJldHVybiAwO1xuICAzODpcdH1cbiAgMzk6XHRcbiAgNDA6XHRzdGF0aWMgaW50XG4gIDQxOlx0cHNlX3JlZ19waV9kaXNhYmxlKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXG4gIDQyOlx0e1xuICA0MzpcdFx0c3RydWN0IHBzZV9yZWdfcHJpdiAqcHJpdiA9IHRvX3BzZV9yZWcocGNkZXYpO1xuICA0NDpcdFx0aW50IHJldDtcbiAgNDU6XHRcbiAgNDY6XHRcdHJldCA9IHJlZ3VsYXRvcl9kaXNhYmxlKHByaXYtXHUwMDNlcHMpO1xuICA0NzpcdFx0aWYgKHJldClcbiAgNDg6XHRcdFx0cmV0dXJuIHJldDtcbiAgNDk6XHRcbiAgNTA6XHRcdHByaXYtXHUwMDNlYWRtaW5fc3RhdGUgPSBFVEhUT09MX1BPRExfUFNFX0FETUlOX1NUQVRFX0RJU0FCTEVEO1xuICA1MTpcdFx0cmV0dXJuIDA7XG4gIDUyOlx0fVxuICA1MzpcdFxuICA1NDpcdHN0YXRpYyBpbnRcbiAgNTU6XHRwc2VfcmVnX3BpX2dldF9hZG1pbl9zdGF0ZShzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkLFxuICA1NjpcdFx0XHRcdCAgIHN0cnVjdCBwc2VfYWRtaW5fc3RhdGUgKmFkbWluX3N0YXRlKVxuICA1NzpcdHtcbiAgNTg6XHRcdHN0cnVjdCBwc2VfcmVnX3ByaXYgKnByaXYgPSB0b19wc2VfcmVnKHBjZGV2KTtcbiAgNTk6XHRcbiAgNjA6XHRcdGFkbWluX3N0YXRlLVx1MDAzZXBvZGxfYWRtaW5fc3RhdGUgPSBwcml2LVx1MDAzZWFkbWluX3N0YXRlO1xuICA2MTpcdFxuICA2MjpcdFx0cmV0dXJuIDA7XG4gIDYzOlx0fVxuICA2NDpcdFxuICA2NTpcdHN0YXRpYyBpbnRcbiAgNjY6XHRwc2VfcmVnX3BpX2dldF9wd19zdGF0dXMoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCxcbiAgNjc6XHRcdFx0XHQgc3RydWN0IHBzZV9wd19zdGF0dXMgKnB3X3N0YXR1cylcbiAgNjg6XHR7XG4gIDY5Olx0XHRzdHJ1Y3QgcHNlX3JlZ19wcml2ICpwcml2ID0gdG9fcHNlX3JlZyhwY2Rldik7XG4gIDcwOlx0XHRpbnQgcmV0O1xuICA3MTpcdFxuICA3MjpcdFx0cmV0ID0gcmVndWxhdG9yX2lzX2VuYWJsZWQocHJpdi1cdTAwM2Vwcyk7XG4gIDczOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuICA3NDpcdFx0XHRyZXR1cm4gcmV0O1xuICA3NTpcdFxuICA3NjpcdFx0aWYgKCFyZXQpXG4gIDc3Olx0XHRcdHB3X3N0YXR1cy1cdTAwM2Vwb2RsX3B3X3N0YXR1cyA9XG4gIDc4Olx0XHRcdFx0RVRIVE9PTF9QT0RMX1BTRV9QV19EX1NUQVRVU19ESVNBQkxFRDtcbiAgNzk6XHRcdGVsc2VcbiAgODA6XHRcdFx0cHdfc3RhdHVzLVx1MDAzZXBvZGxfcHdfc3RhdHVzID1cbiAgODE6XHRcdFx0XHRFVEhUT09MX1BPRExfUFNFX1BXX0RfU1RBVFVTX0RFTElWRVJJTkc7XG4gIDgyOlx0XG4gIDgzOlx0XHRyZXR1cm4gMDtcbiAgODQ6XHR9XG4gIDg1Olx0XG4gIDg2Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBwc2VfY29udHJvbGxlcl9vcHMgcHNlX3JlZ19vcHMgPSB7XG4gIDg3Olx0XHQucGlfZ2V0X2FkbWluX3N0YXRlID0gcHNlX3JlZ19waV9nZXRfYWRtaW5fc3RhdGUsXG4gIDg4Olx0XHQucGlfZ2V0X3B3X3N0YXR1cyA9IHBzZV9yZWdfcGlfZ2V0X3B3X3N0YXR1cyxcbiAgODk6XHRcdC5waV9lbmFibGUgPSBwc2VfcmVnX3BpX2VuYWJsZSxcbiAgOTA6XHRcdC5waV9kaXNhYmxlID0gcHNlX3JlZ19waV9kaXNhYmxlLFxuICA5MTpcdH07XG4gIDkyOlx0XG4gIDkzOlx0c3RhdGljIGludFxuICA5NDpcdHBzZV9yZWdfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiAgOTU6XHR7XG4gIDk2Olx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbiAgOTc6XHRcdHN0cnVjdCBwc2VfcmVnX3ByaXYgKnByaXY7XG4gIDk4Olx0XHRpbnQgcmV0O1xuICA5OTpcdFxuIDEwMDpcdFx0cHJpdiA9IGRldm1fa3phbGxvYyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExNTcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQbGF0Zm9ybSBEZXZpY2UgRHJpdmVyIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpczsgaXQgc2VlbXMgdG8gYmUgYSBwbGF0Zm9ybSBkZXZpY2UgZHJpdmVyLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtDYW4gd2UgdXRpbGl6ZSBgZXRodG9vbGAgY29tbWFuZHMgb24gYSBQSFkgZGV2aWNlIGRpcmVjdGx5PyYjMzQ7IE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCwgeWVzLCB3ZSAqY291bGQqIGFjaGlldmUgdGhpcyBieSBlbXBsb3lpbmcgYSBkdW1teSBuZXR3b3JrIGRldmljZSB0aGF0JiMzOTtzIGFzc29jaWF0ZWQgd2l0aCB0aGUgUEhZLiBUaGF0JiMzOTtzIGEgZ29vZCBhcHByb2FjaCB0byB0YWtlLiBCdXQgdGhlbiwgYSByZWQgZmxhZyDigJMgYW5kIGl0JiMzOTtzIGFuIGltcG9ydGFudCBvbmUg4oCTIHBvcHMgdXA6IGBldGhubF9zZXRfcHNlYC4gV2FpdCBhIHNlY29uZOKApiB0aGF0JiMzOTtzIGFuIGV0aHRvb2wgbmV0bGluayBjb21tYW5kLiBOb3csIEkgbmVlZCB0byB0cmFjZSB0aGlzIGJhY2suIExldCYjMzk7cyBzZWUuLi4gdGhlIG1vc3QgbGlrZWx5IHNvdXJjZSB3b3VsZCBiZSBgbmV0L2V0aHRvb2wvcHNlLXBkLmNgLiBUaW1lIHRvIGRpZyBpbnRvIHRoYXQgYW5kIHNlZSBob3cgdGhleSBhcmUgcmVsYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvZXRodG9vbC9wc2UtcGQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI3NTpcdH1cbiAyNzY6XHRcbiAyNzc6XHRzdGF0aWMgaW50XG4gMjc4Olx0ZXRobmxfc2V0X3BzZShzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIDI3OTpcdHtcbiAyODA6XHRcdHN0cnVjdCBubGF0dHIgKip0YiA9IGluZm8tXHUwMDNlYXR0cnM7XG4gMjgxOlx0XHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xuIDI4MjpcdFx0aW50IHJldDtcbiAyODM6XHRcbiAyODQ6XHRcdHBoeWRldiA9IGV0aG5sX3JlcV9nZXRfcGh5ZGV2KHJlcV9pbmZvLCB0YiwgRVRIVE9PTF9BX1BTRV9IRUFERVIsXG4gMjg1Olx0XHRcdFx0XHQgICAgICBpbmZvLVx1MDAzZWV4dGFjayk7XG4gMjg2Olx0XG4gMjg3Olx0XHRwaHlfcHNlX2NvbnRyb2xfbG9jaygpO1xuIDI4ODpcdFxuIDI4OTpcdFx0cmV0ID0gZXRobmxfc2V0X3BzZV92YWxpZGF0ZShwaHlkZXYsIGluZm8pO1xuIDI5MDpcdFx0aWYgKHJldClcbiAyOTE6XHRcdFx0Z290byBvdXQ7XG4gMjkyOlx0XG4gMjkzOlx0XHRpZiAodGJbRVRIVE9PTF9BX1BTRV9QUklPXSkge1xuIDI5NDpcdFx0XHR1bnNpZ25lZCBpbnQgcHJpbztcbiAyOTU6XHRcbiAyOTY6XHRcdFx0cHJpbyA9IG5sYV9nZXRfdTMyKHRiW0VUSFRPT0xfQV9QU0VfUFJJT10pO1xuIDI5NzpcdFx0XHRyZXQgPSBwc2VfZXRodG9vbF9zZXRfcHJpbyhwaHlkZXYtXHUwMDNlcHNlYywgaW5mby1cdTAwM2VleHRhY2ssIHByaW8pO1xuIDI5ODpcdFx0XHRpZiAocmV0KVxuIDI5OTpcdFx0XHRcdGdvdG8gb3V0O1xuIDMwMDpcdFx0fVxuIDMwMTpcdFxuIDMwMjpcdFx0aWYgKHRiW0VUSFRPT0xfQV9DMzNfUFNFX0FWQUlMX1BXX0xJTUlUXSkge1xuIDMwMzpcdFx0XHR1bnNpZ25lZCBpbnQgcHdfbGltaXQ7XG4gMzA0Olx0XG4gMzA1Olx0XHRcdHB3X2xpbWl0ID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX0MzM19QU0VfQVZBSUxfUFdfTElNSVRdKTtcbiAzMDY6XHRcdFx0cmV0ID0gcHNlX2V0aHRvb2xfc2V0X3B3X2xpbWl0KHBoeWRldi1cdTAwM2Vwc2VjLCBpbmZvLVx1MDAzZWV4dGFjayxcbiAzMDc6XHRcdFx0XHRcdFx0ICAgICAgIHB3X2xpbWl0KTtcbiAzMDg6XHRcdFx0aWYgKHJldClcbiAzMDk6XHRcdFx0XHRnb3RvIG91dDtcbiAzMTA6XHRcdH1cbiAzMTE6XHRcbiAzMTI6XHRcdC8qIFRoZXNlIHZhbHVlcyBhcmUgYWxyZWFkeSB2YWxpZGF0ZWQgYnkgdGhlIGV0aG5sX3BzZV9zZXRfcG9saWN5ICovXG4gMzEzOlx0XHRpZiAodGJbRVRIVE9PTF9BX1BPRExfUFNFX0FETUlOX0NPTlRST0xdIHx8XG4gMzE0Olx0XHQgICAgdGJbRVRIVE9PTF9BX0MzM19QU0VfQURNSU5fQ09OVFJPTF0pIHtcbiAzMTU6XHRcdFx0c3RydWN0IHBzZV9jb250cm9sX2NvbmZpZyBjb25maWcgPSB7fTtcbiAzMTY6XHRcbiAzMTc6XHRcdFx0aWYgKHRiW0VUSFRPT0xfQV9QT0RMX1BTRV9BRE1JTl9DT05UUk9MXSlcbiAzMTg6XHRcdFx0XHRjb25maWcucG9kbF9hZG1pbl9jb250cm9sID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BPRExfUFNFX0FETUlOX0NPTlRST0xdKTtcbiAzMTk6XHRcdFx0aWYgKHRiW0VUSFRPT0xfQV9DMzNfUFNFX0FETUlOX0NPTlRST0xdKVxuIDMyMDpcdFx0XHRcdGNvbmZpZy5jMzNfYWRtaW5fY29udHJvbCA9IG5sYV9nZXRfdTMyKHRiW0VUSFRPT0xfQV9DMzNfUFNFX0FETUlOX0NPTlRST0xdKTtcbiAzMjE6XHRcbiAzMjI6XHRcdFx0LyogcHNlX2V0aHRvb2xfc2V0X2NvbmZpZygpIHdpbGwgZG8gbm90aGluZyBpZiB0aGUgY29uZmlnXG4gMzIzOlx0XHRcdCAqIGlzIHplcm9cbiAzMjQ6XHRcdFx0ICovXG4gMzI1Olx0XHRcdHJldCA9IHBzZV9ldGh0b29sX3NldF9jb25maWcocGh5ZGV2LVx1MDAzZXBzZWMsIGluZm8tXHUwMDNlZXh0YWNrLFxuIDMyNjpcdFx0XHRcdFx0XHQgICAgIFx1MDAyNmNvbmZpZyk7XG4gMzI3Olx0XHR9XG4gMzI4Olx0XG4gMzI5Olx0b3V0OlxuIDMzMDpcdFx0LyogUmV0dXJuIGVycm5vIG9yIHplcm8gLSBQU0UgaGFzIG5vIG5vdGlmaWNhdGlvbiAqL1xuIDMzMTpcdFx0cGh5X3BzZV9jb250cm9sX3VubG9jaygpO1xuIDMzMjpcdFx0cmV0dXJuIHJldDtcbiAzMzM6XHR9XG4gMzM0Olx0XG4gMzM1Olx0Y29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX3BzZV9yZXF1ZXN0X29wcyA9IHtcbiAzMzY6XHRcdC5yZXF1ZXN0X2NtZFx0XHQ9IEVUSFRPT0xfTVNHX1BTRV9HRVQsXG4gMzM3Olx0XHQucmVwbHlfY21kXHRcdD0gRVRIVE9PTF9NU0dfUFNFX0dFVF9SRVBMWSxcbiAzMzg6XHRcdC5oZHJfYXR0clx0XHQ9IEVUSFRPT0xfQV9QU0VfSEVBREVSLFxuIDMzOTpcdFx0LnJlcV9pbmZvX3NpemVcdFx0PSBzaXplb2Yoc3RydWN0IHBzZV9yZXFfaW5mbyksXG4gMzQwOlx0XHQucmVwbHlfZGF0YV9zaXplXHQ9IHNpemVvZihzdHJ1Y3QgcHNlX3JlcGx5X2RhdGEpLFxuIDM0MTpcdFxuIDM0MjpcdFx0LnByZXBhcmVfZGF0YVx0XHQ9IHBzZV9wcmVwYXJlX2RhdGEsXG4gMzQzOlx0XHQucmVwbHlfc2l6ZVx0XHQ9IHBzZV9yZXBseV9zaXplLFxuIDM0NDpcdFx0LmZpbGxfcmVwbHlcdFx0PSBwc2VfZmlsbF9yZXBseSxcbiAzNDU6XHRcdC5jbGVhbnVwX2RhdGFcdFx0PSBwc2VfY2xlYW51cF9kYXRhLFxuIDM0NjpcdFxuIDM0NzpcdFx0LnNldFx0XHRcdD0gZXRobmxfc2V0X3BzZSxcbiAzNDg6XHRcdC8qIFBTRSBoYXMgbm8gbm90aWZpY2F0aW9uICovXG4gMzQ5Olx0fTtcbiAzNTA6XHRcbiAzNTE6XHR2b2lkIGV0aG5sX3BzZV9zZW5kX250ZihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1bnNpZ25lZCBsb25nIG5vdGlmcylcbiAzNTI6XHR7XG4gMzUzOlx0XHR2b2lkICpyZXBseV9wYXlsb2FkO1xuIDM1NDpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiAzNTU6XHRcdGludCByZXBseV9sZW47XG4gMzU2Olx0XHRpbnQgcmV0O1xuIDM1NzpcdFxuIDM1ODpcdFx0QVNTRVJUX1JUTkwoKTtcbiAzNTk6XHRcbiAzNjA6XHRcdGlmICghbmV0ZGV2IHx8ICFub3RpZnMpXG4gMzYxOlx0XHRcdHJldHVybjtcbiAzNjI6XHRcbiAzNjM6XHRcdHJlcGx5X2xlbiA9IGV0aG5sX3JlcGx5X2hlYWRlcl9zaXplKCkgJiM0MztcbiAzNjQ6XHRcdFx0ICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTsgLyogX1BTRV9OVEZfRVZFTlRTICovXG4gMzY1Olx0XG4gMzY2Olx0XHRza2IgPSBnZW5sbXNnX25ldyhyZXBseV9sZW4sIEdGUF9LRVJORUwpO1xuIDM2NzpcdFx0aWYgKCFza2IpXG4gMzY4Olx0XHRcdHJldHVybjtcbiAzNjk6XHRcbiAzNzA6XHRcdHJlcGx5X3BheWxvYWQgPSBldGhubF9iY2FzdG1zZ19wdXQoc2tiLCBFVEhUT09MX01TR19QU0VfTlRGKTtcbiAzNzE6XHRcdGlmICghcmVwbHlfcGF5bG9hZClcbiAzNzI6XHRcdFx0Z290byBlcnJfc2tiO1xuIDM3MzpcdFxuIDM3NDpcdFx0cmV0ID0gZXRobmxfZmlsbF9yZXBseV9oZWFkZXIoc2tiLCBuZXRkZXYsIEVUSFRPT0xfQV9QU0VfTlRGX0hFQURFUik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDc5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNzM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQ29kZSBNb2RpZmljYXRpb24qKgoKT2theSwgc28gYGV0aG5sX3NldF9wc2VgIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIOKAkyB0aGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gVGhlIHBhdGNoIHRvdWNoZXMgYHBoeV9kZXZpY2VfcmVnaXN0ZXJgLCBgcGh5X2RldmljZV9yZW1vdmVgLCBhbmQgYHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkYCwgYWxsIGNvcmUgZnVuY3Rpb25zIGZvciBQSFkgZGV2aWNlIHJlZ2lzdHJhdGlvbi4gVGhpcyBpcyBzaWduaWZpY2FudCBiZWNhdXNlIFBIWSByZWdpc3RyYXRpb24gaXMgZnVuZGFtZW50YWwuIFdlIGNhbiBkZWZpbml0ZWx5IGNyZWF0ZSBhbiBlbnZpcm9ubWVudCB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCwgZXZlbiBpbiBRRU1VLCB0aHJvdWdoIGBtYWNiYCwgYGUxMDAwYCwgb3Igb3RoZXIgZW11bGF0ZWQgTklDcywgYW5kIHBvc3NpYmx5IHRocm91Z2ggZHVtbXkgUEhZcywgYXMgYSBzdGFydGluZyBwb2ludC4KClRoZSBgcGh5X3BzZV9ub3RpZmllcmAgaXMgaW50cm9kdWNlZCBhbmQgcmVnaXN0ZXJlZCBpbiBgcGh5X2luaXRgLiBUaGUgbm90aWZpZXIgaXRzZWxmIGlzIHRyaWdnZXJlZCBieSBgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXJgIGFuZCBgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcmAuIFRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciB3ZSBjYW4gdHJpZ2dlciBgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXJgIGF0IGFsbC4gTG9hZGluZyBhIFBTRSBkcml2ZXIgaXMgdGhlIG9idmlvdXMgcm91dGUsIGJ1dCB0aG9zZSBhcmUgdHlwaWNhbGx5IHBsYXRmb3JtIGRyaXZlcnMuIENvdWxkIHRoZXJlIGJlIGEgd2F5IHRvIGZvcmNlIGEgcmVnaXN0cmF0aW9uIGZyb20gdXNlcnNwYWNlLCBwZXJoYXBzIHZpYSBkZXZpY2UgdHJlZSBvdmVybGF5cz8gTWF5YmUgYSBkdW1teSBQU0UgZHJpdmVyIGlzIHRoZSBhbnN3ZXIuCgpCdXQgaG9sZCBvbiwgdGhlIG5vdGlmaWVyIGdldHMgdHJpZ2dlcmVkIG9uICpyZWdpc3RyYXRpb24qIG9mIGEgUFNFIGNvbnRyb2xsZXIuIFRoZSBpbXBvcnRhbnQgdGhpbmcgaXMgdGhhdCwgZXZlbiBpZiBnZXR0aW5nIGEgUFNFIGNvbnRyb2xsZXIgcmVnaXN0ZXJlZCBpcyBkaWZmaWN1bHQsIHRoZSBgRVRIVE9PTF9NU0dfUFNFX0dFVGAgYW5kIGBFVEhUT09MX01TR19QU0VfU0VUYCBuZXRsaW5rIGNvbW1hbmRzLCB3aGljaCB1dGlsaXplIGBldGhubF9zZXRfcHNlYCwgYXJlIHJlYWNoYWJsZSBhbmQgbm93IHVzZSBgcGh5X3BzZV9jb250cm9sX2xvY2soKWAuIEFsc28sIHdlIGhhdmUgdGhlIG9yaWdpbmFsIGBwaHlfZGV2aWNlX3JlZ2lzdGVyYCBhbmQgYHBoeV9kZXZpY2VfcmVtb3ZlYCB3aGljaCBhbHNvIHVzZSBgcGh5X3BzZV9sb2NrYC4gU28sIHRoaXMgaXMgYSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBQSFkgbGlicmFyeSBhbmQgZXRodG9vbC4gSXQmIzM5O3MgZGVmaW5pdGVseSByaXBlIGZvciBmdXp6aW5nLgoKKipUYXJnZXQgRnVuY3Rpb25zKioKCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRvIHRhcmdldDoKCiogICBgcGh5X3RyeV9hdHRhY2hfcHNlYAoqICAgYHBoeV9wc2VfYXR0YWNoX29uZWAKKiAgIGBwaHlfcHNlX2RldGFjaF9vbmVgCiogICBgcGh5X3BzZV9ub3RpZmllcl9ldmVudGAKKiAgIGBwaHlfcHNlX2NvbnRyb2xfbG9ja2AKKiAgIGBwaHlfcHNlX2NvbnRyb2xfdW5sb2NrYAoqICAgYF9fcGh5X2RldmljZV9yZWdpc3RlcmAKKiAgIGBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZGAKKiAgIGBwaHlfZGV2aWNlX3JlZ2lzdGVyYAoqICAgYHBoeV9kZXZpY2VfcmVtb3ZlYAoqICAgYHBzZV9yZWdpc3Rlcl9ub3RpZmllcmAKKiAgIGBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcmAKKiAgIGBwc2VfY29udHJvbGxlcl9yZWdpc3RlcmAKKiAgIGBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyYAoqICAgYHBzZV9jb250cm9sX21hdGNoZXNfcGNkZXZgCiogICBgZXRobmxfc2V0X3BzZWAKKiAgIGBwc2VfcHJlcGFyZV9kYXRhYAoKKipDb25maWd1cmF0aW9uIERlcGVuZGVuY3kgQ2hlY2sqKgoKV2UgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGltcGxpY2F0aW9ucy4gVGhlIGBpbmNsdWRlL2xpbnV4L3BzZS1wZC9wc2UuaGAgZmlsZSByZXZlYWxzIHRoYXQgYHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyYCwgYHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXJgLCBgcHNlX3JlZ2lzdGVyX25vdGlmaWVyYCBhbmQgYHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyYCBhcmUgb25seSBkZWZpbmVkIGlmIGBDT05GSUdfUFNFX0NPTlRST0xMRVJgIGlzIGVuYWJsZWQuIElmIG5vdCBlbmFibGVkLCB0aGVzZSBmdW5jdGlvbnMgcHJvYmFibHkgcmVzb2x2ZSB0byBlbXB0eSAoaW5saW5lKSBmdW5jdGlvbnMgb3IgcmV0dXJuIGVhcmx5LgoKSG93ZXZlciwgYmVjYXVzZSBgcGh5X2luaXRgIGNhbGxzIGBwc2VfcmVnaXN0ZXJfbm90aWZpZXJgIHdpdGhvdXQgY2hlY2tpbmcgZm9yIHRoZSBjb25maWcgb3B0aW9uLCBldmVuIGlmIGBDT05GSUdfUFNFX0NPTlRST0xMRVJgIGlzbiYjMzk7dCBzZXQsIGBwaHlfaW5pdGAgd2lsbCBzdGlsbCBiZSBjYWxsZWQuIEl0IHdpbGwgY2FsbCB0aGUgZW1wdHkvaW5saW5lIGBwc2VfcmVnaXN0ZXJfbm90aWZpZXJgLCB3aGljaCB3aWxsIHJldHVybiAwIGFuZCBjb250aW51ZS4KClNvLCB0byB0ZXN0IHRoZSBhY3R1YWwgbm90aWZpZXIgcmVnaXN0cmF0aW9uIGFuZCBjaGFpbiwgd2UgKm5lZWQqIHRvIGVuYWJsZSBgQ09ORklHX1BTRV9DT05UUk9MTEVSYC4gV2Ugc2hvdWxkIGNoZWNrIHRoZSBLY29uZmlnIGluIGBkcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZ2AgZm9yIHJlbGF0ZWQgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBFdGhlcm5ldCBQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQgZHJpdmVyc1xuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRtZW51Y29uZmlnIFBTRV9DT05UUk9MTEVSXG4gICA3Olx0XHRib29sIFwmIzM0O0V0aGVybmV0IFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudCBTdXBwb3J0XCYjMzQ7XG4gICA4Olx0XHRkZXBlbmRzIG9uIFJFR1VMQVRPUlxuICAgOTpcdFx0aGVscFxuICAxMDpcdFx0ICBHZW5lcmljIFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudCBDb250cm9sbGVyIHN1cHBvcnQuXG4gIDExOlx0XG4gIDEyOlx0XHQgIElmIHVuc3VyZSwgc2F5IG5vLlxuICAxMzpcdFxuICAxNDpcdGlmIFBTRV9DT05UUk9MTEVSXG4gIDE1Olx0XG4gIDE2Olx0Y29uZmlnIFBTRV9SRUdVTEFUT1JcbiAgMTc6XHRcdHRyaXN0YXRlIFwmIzM0O1JlZ3VsYXRvciBiYXNlZCBQU0UgY29udHJvbGxlclwmIzM0O1xuICAxODpcdFx0aGVscFxuICAxOTpcdFx0ICBUaGlzIG1vZHVsZSBwcm92aWRlcyBzdXBwb3J0IGZvciBzaW1wbGUgcmVndWxhdG9yIGJhc2VkIEV0aGVybmV0IFBvd2VyXG4gIDIwOlx0XHQgIFNvdXJjaW5nIEVxdWlwbWVudCB3aXRob3V0IGF1dG9tYXRpYyBjbGFzc2lmaWNhdGlvbiBzdXBwb3J0LiBGb3JcbiAgMjE6XHRcdCAgZXhhbXBsZSBmb3IgYmFzaWMgaW1wbGVtZW50YXRpb24gb2YgUG9ETCAoODAyLjNidSkgc3BlY2lmaWNhdGlvbi5cbiAgMjI6XHRcbiAgMjM6XHRjb25maWcgUFNFX1BENjkyWDBcbiAgMjQ6XHRcdHRyaXN0YXRlIFwmIzM0O1BENjkyWDAgUFNFIGNvbnRyb2xsZXJcJiMzNDtcbiAgMjU6XHRcdGRlcGVuZHMgb24gSTJDXG4gIDI2Olx0XHRzZWxlY3QgRldfTE9BREVSXG4gIDI3Olx0XHRzZWxlY3QgRldfVVBMT0FEXG4gIDI4Olx0XHRoZWxwXG4gIDI5Olx0XHQgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHN1cHBvcnQgZm9yIFBENjkyeDAgcmVndWxhdG9yIGJhc2VkIEV0aGVybmV0XG4gIDMwOlx0XHQgIFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudC5cbiAgMzE6XHRcbiAgMzI6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gIDMzOlx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwZDY5MngwLlxuICAzNDpcdFxuICAzNTpcdGNvbmZpZyBQU0VfU0kzNDc0XG4gIDM2Olx0XHR0cmlzdGF0ZSBcJiMzNDtTaTM0NzQgUFNFIGNvbnRyb2xsZXJcJiMzNDtcbiAgMzc6XHRcdGRlcGVuZHMgb24gSTJDXG4gIDM4Olx0XHRoZWxwXG4gIDM5Olx0XHQgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHN1cHBvcnQgZm9yIFNpMzQ3NCByZWd1bGF0b3IgYmFzZWQgRXRoZXJuZXRcbiAgNDA6XHRcdCAgUG93ZXIgU291cmNpbmcgRXF1aXBtZW50LlxuICA0MTpcdFx0ICBPbmx5IDQtcGFpciBQU0UgY29uZmlndXJhdGlvbnMgYXJlIHN1cHBvcnRlZC5cbiAgNDI6XHRcbiAgNDM6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gIDQ0Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzaTM0NzQuXG4gIDQ1Olx0XG4gIDQ2Olx0Y29uZmlnIFBTRV9UUFMyMzg4MVxuICA0NzpcdFx0dHJpc3RhdGUgXCYjMzQ7VFBTMjM4ODEgUFNFIGNvbnRyb2xsZXJcJiMzNDtcbiAgNDg6XHRcdGRlcGVuZHMgb24gSTJDXG4gIDQ5Olx0XHRoZWxwXG4gIDUwOlx0XHQgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHN1cHBvcnQgZm9yIFRQUzIzODgxIHJlZ3VsYXRvciBiYXNlZCBFdGhlcm5ldFxuICA1MTpcdFx0ICBQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQuXG4gIDUyOlx0XG4gIDUzOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuICA1NDpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdHBzMjM4ODEuXG4gIDU1Olx0ZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzNDYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uLCBhbmQgaXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gYFBTRV9DT05UUk9MTEVSYCBkZXBlbmRzIG9uIGBSRUdVTEFUT1JgLCBzbyBuYXR1cmFsbHksIEkgbmVlZCB0byBlbmFibGUgYm90aC4gQnV0IHRoZW4gSSByZW1lbWJlciBgUFNFX0NPTlRST0xMRVJgIGlzIGp1c3QgYSBib29sZWFuOyBpdCYjMzk7cyBvbiBvciBvZmYuIFRoYXQgbWFrZXMgdGhpbmdzIGEgYml0IHNpbXBsZXIuCgpJIG5lZWQgdG8gc2VlIGlmIHdlIGhhdmUgYSBkdW1teSBQU0UgZHJpdmVyIG9yIGlmIGVuYWJsaW5nIGBQU0VfUkVHVUxBVE9SYCB3aWxsIGdpdmUgdXMgb25lLiBBaCwgZ29vZCwgYFBTRV9SRUdVTEFUT1JgIGlzIGB0cmlzdGF0ZWAuIFNvLCBJICpjYW4qIGVuYWJsZSBpdC4gVGhhdCBzZXR0bGVzIGl0OiBteSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBuZWVkcyB0byBpbmNsdWRlIGBQU0VfQ09OVFJPTExFUmAgYW5kIGBSRUdVTEFUT1JgLiBFYXN5IHBlYXN5LgoKTm93LCBqdXN0IHRvIGJlIHRob3JvdWdoLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYG5ldC9ldGh0b29sL3BzZS1wZC5jYC4gSSYjMzk7bSBndWVzc2luZyB0aGF0IGNvZGUgaGFzIHNvbWUgZGVwZW5kZW5jeSBvbiBgUFNFX0NPTlRST0xMRVJgLCBvciBhdCB0aGUgdmVyeSBsZWFzdCwgdGhvc2UgZXRodG9vbCBQU0UgY29tbWFuZHMgYXJlIGFsd2F5cyBjb21waWxlZCBpZiBgRVRIVE9PTF9ORVRMSU5LYCBpcyBlbmFibGVkLCBldmVuIGlmIHRoZXkgcmV0dXJuIGFuIGVycm9yIGlmIGBQU0VfQ09OVFJPTExFUmAgaXMgbm90LiBKdXN0IHRvIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMsIEkmIzM5O2xsIHRha2UgYSBxdWljayBsb29rIGF0IGBuZXQvZXRodG9vbC9NYWtlZmlsZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BzZS1wZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9ldGh0b29sLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvZXRodG9vbC9NYWtlZmlsZT03PWV0aHRvb2xfbmwteVx0Oj0gbmV0bGluay5vIGJpdHNldC5vIHN0cnNldC5vIGxpbmtpbmZvLm8gbGlua21vZGVzLm8gcnNzLm8gXFxcbi0tXG5uZXQvZXRodG9vbC9NYWtlZmlsZS0xMC1cdFx0ICAgdHVubmVscy5vIGZlYy5vIGVlcHJvbS5vIHN0YXRzLm8gcGhjX3ZjbG9ja3MubyBtbS5vIFxcXG5uZXQvZXRodG9vbC9NYWtlZmlsZToxMTpcdFx0ICAgbW9kdWxlLm8gY21pc19md191cGRhdGUubyBjbWlzX2NkYi5vIHBzZS1wZC5vIHBsY2EubyBcXFxubmV0L2V0aHRvb2wvTWFrZWZpbGUtMTItXHRcdCAgIHBoeS5vIHRzY29uZmlnLm8gbXNlLm9cbi0tXG5uZXQvZXRodG9vbC9wc2UtcGQuYy0xNC0jaW5jbHVkZSBcJiMzNDtjb21tb24uaFwmIzM0O1xubmV0L2V0aHRvb2wvcHNlLXBkLmM6MTU6I2luY2x1ZGUgXCYjMzQ7bGludXgvcHNlLXBkL3BzZS5oXCYjMzQ7XG5uZXQvZXRodG9vbC9wc2UtcGQuYy0xNi0jaW5jbHVkZSBcJiMzNDtuZXRsaW5rLmhcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwODMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgUFNFIENvbXBpbGF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGNvbmZpcm1pbmcgdGhhdCBgcHNlLXBkLm9gIGlzIGluZGVlZCBhbHdheXMgY29tcGlsZWQgd2hlbiBgZXRodG9vbF9ubC15YCBpcyBpbmNsdWRlZCwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29kZWJhc2UuIE5vdywgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBrZXkgc3ltYm9scyBpbnZvbHZlZCBpbiB0aGlzIGBwc2VgIGZ1bmN0aW9uYWxpdHkuIExldCYjMzk7cyBzZWUuLi4KCkkmIzM5O20gbWFraW5nIGEgbWVudGFsIGxpc3Qgb2YgdGhlIGNvcmUgc3ltYm9scy4gSSYjMzk7bSBnb2luZyB0byB0cmFjayBgcGh5X3RyeV9hdHRhY2hfcHNlYCwgYnV0IGl0JiMzOTtzICpzdGF0aWMqIHdoaWNoIG1lYW5zIGl0IG1pZ2h0IGdldCBpbmxpbmVkLCBzbyBJJiMzOTtsbCBiZSBzdXJlIHRvIGFsc28gbWFrZSBhIG5vdGUgb2YgdGhlIGZ1bmN0aW9ucyB0aGF0IGNhbGwgaXQ6IGBwaHlfcHNlX2F0dGFjaF9vbmVgLCBgcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWRgLCBhbmQgYHBoeV9kZXZpY2VfcmVnaXN0ZXJgLiBJJiMzOTtsbCBwcm9iYWJseSBmb2N1cyBvbiB0aGUgbm9uLXN0YXRpYyBvbmVzIHNpbmNlIHRoZSBpbmxpbmluZyB3aWxsIG1lYW4gdGhlIGFjdHVhbCBzeW1ib2wgbWlnaHQgbm90IGJlIGF2YWlsYWJsZSBhdCBydW50aW1lLiBUaGUgb3RoZXJzIG9uIG15IGxpc3QgYXJlOiBgcGh5X3BzZV9jb250cm9sX2xvY2tgLCBgcGh5X3BzZV9jb250cm9sX3VubG9ja2AsIGBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZGAsIGBwaHlfZGV2aWNlX3JlZ2lzdGVyYCwgYHBoeV9kZXZpY2VfcmVtb3ZlYCwgYHBzZV9yZWdpc3Rlcl9ub3RpZmllcmAsIGBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcmAsIGBwc2VfY29udHJvbGxlcl9yZWdpc3RlcmAsIGBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyYCwgYHBzZV9jb250cm9sX21hdGNoZXNfcGNkZXZgLCBgZXRobmxfc2V0X3BzZWAsIGFuZCBgcHNlX3ByZXBhcmVfZGF0YWAuCgpJJiMzOTtsbCBzdGFydCBieSB0YWtpbmcgYSBjbG9zZXIgbG9vayBhdCBgcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWRgIGFuZCBgcGh5X2RldmljZV9yZWdpc3RlcmAgdG8gc2VlIGhvdyB0aG9zZSBpbnRlZ3JhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTEyMjY9c3RhdGljIGludCBfX3BoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEyNTktLyoqXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEyNjA6ICogcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWQgLSBSZWdpc3RlciB0aGUgcGh5IGRldmljZSBvbiB0aGUgTURJTyBidXNcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTI2MS0gKiBAcGh5ZGV2OiBwaHlfZGV2aWNlIHN0cnVjdHVyZSB0byBiZSBhZGRlZCB0byB0aGUgTURJTyBidXNcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEyNjYtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEyNjc6aW50IHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEyNjgte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTI4Mi19XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEyODM6RVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZCk7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEyODQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2OTYwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgUEhZIGFuZCBQU0UgRXhwb3J0cyoqCgpPa2F5LCBzbyBJJiMzOTttIGRvdWJsZS1jaGVja2luZyB0aGUgc3ltYm9sIGV4cG9ydHMgaGVyZSwgYW5kIHllcywgaXQgc2VlbXMgYHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkYCBpcyBpbmRlZWQgZXhwb3J0ZWQsIHdoaWNoIGlzIGdvb2QuIFRoYXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBQSFkgZnVuY3Rpb24uIEFuZCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgYHBoeV9kZXZpY2VfcmVnaXN0ZXJgIGlzIGFsc28gZXhwb3J0ZWQsIGFzIEkgd291bGQgZXhwZWN0LiBUaGUgcmVtb3ZhbCBmdW5jdGlvbiwgYHBoeV9kZXZpY2VfcmVtb3ZlYCwgaXMgYWxzbyBhY2NvdW50ZWQgZm9yLCBzbyB0aGUgY29yZSBQSFkgcmVnaXN0cmF0aW9uIGFuZCBkZXJlZ2lzdHJhdGlvbiBhcHBlYXIgdG8gYmUgd2VsbC1kZWZpbmVkLgoKTW92aW5nIG9uIHRvIHRoZSBQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQsIHRoZSBQU0Ugc2lkZTogSSBzZWUgYHBzZV9yZWdpc3Rlcl9ub3RpZmllcmAgYW5kIGBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcmAgZXhwb3J0ZWQsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciBoYW5kbGluZyBub3RpZmljYXRpb25zLiBBbmQgdGhlIGNvbnRyb2xsZXIgcmVnaXN0cmF0aW9uIGFuZCB1bnJlZ2lzdHJhdGlvbiBmdW5jdGlvbnMsIGBwc2VfY29udHJvbGxlcl9yZWdpc3RlcmAgYW5kIGBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyYCwgYXJlIGFsc28gYXZhaWxhYmxlLiBGaW5hbGx5LCBpdCBhcHBlYXJzIGBwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2YCBpcyBhcyB3ZWxsLiBUaGF04oCZcyBwcm9iYWJseSBpbXBvcnRhbnQgZm9yIG1hdGNoaW5nIFBTRSBjb250cm9sIHdpdGggdGhlIHBsYXRmb3JtIGRldmljZS4KCk5vdywgYSBicmllZiBwYXVzZS4gSSBzZWUgdGhhdCBgZXRobmxfc2V0X3BzZWAgaXMgc3RhdGljLi4uIGhtbS4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgd2hlcmUgdGhhdCBpcyBkZWZpbmVkLi4uIEFoLCByaWdodCwgdGhhdCYjMzk7cyBpbiBgbmV0L2V0aHRvb2wvcHNlLXBkLmNgLiBPa2F5LCB0aGF0IG1ha2VzIG1vcmUgc2Vuc2Ugbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtldGhubF9zZXRfcHNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2V0aHRvb2wvcHNlLXBkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2V0aHRvb2wvcHNlLXBkLmM9MjQ0PXN0YXRpYyBpbnRcbm5ldC9ldGh0b29sL3BzZS1wZC5jOjI0NTpldGhubF9zZXRfcHNlX3ZhbGlkYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5uZXQvZXRodG9vbC9wc2UtcGQuYy0yNDYte1xuLS1cbm5ldC9ldGh0b29sL3BzZS1wZC5jPTI3Nz1zdGF0aWMgaW50XG5uZXQvZXRodG9vbC9wc2UtcGQuYzoyNzg6ZXRobmxfc2V0X3BzZShzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxubmV0L2V0aHRvb2wvcHNlLXBkLmMtMjc5LXtcbi0tXG5uZXQvZXRodG9vbC9wc2UtcGQuYy0yODgtXG5uZXQvZXRodG9vbC9wc2UtcGQuYzoyODk6XHRyZXQgPSBldGhubF9zZXRfcHNlX3ZhbGlkYXRlKHBoeWRldiwgaW5mbyk7XG5uZXQvZXRodG9vbC9wc2UtcGQuYy0yOTAtXHRpZiAocmV0KVxuLS1cbm5ldC9ldGh0b29sL3BzZS1wZC5jPTMzNT1jb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfcHNlX3JlcXVlc3Rfb3BzID0ge1xuLS1cbm5ldC9ldGh0b29sL3BzZS1wZC5jLTM0Ni1cbm5ldC9ldGh0b29sL3BzZS1wZC5jOjM0NzpcdC5zZXRcdFx0XHQ9IGV0aG5sX3NldF9wc2UsXG5uZXQvZXRodG9vbC9wc2UtcGQuYy0zNDgtXHQvKiBQU0UgaGFzIG5vIG5vdGlmaWNhdGlvbiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzc0OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0d29yayBMaW5rIENvbmZpZ3VyYXRpb24gYW5kIFBvdGVudGlhbCBTeW1ib2wgVmlzaWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGV0aG5sX3NldF9wc2VgLiBJdCYjMzk7cyBkZWZpbmVkIGFzIGBzdGF0aWNgLCB3aGljaCB1c3VhbGx5IG1lYW5zIGl0JiMzOTtzIG5vdCBtZWFudCB0byBiZSBhY2Nlc3NlZCBmcm9tIG91dHNpZGUgdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdC4gSG93ZXZlciwgSSBzZWUgaXQmIzM5O3MgYXNzaWduZWQgdG8gdGhlIGAuc2V0YCBtZW1iZXIgb2YgYGV0aG5sX3BzZV9yZXF1ZXN0X29wc2AuIFRoYXQmIzM5O3MgYSBuZXRsaW5rIGZ1bmN0aW9uIHBvaW50ZXIuIFRoZXJlZm9yZSwgZXZlbiB0aG91Z2ggaXQmIzM5O3Mgc3RhdGljLCBpdCYjMzk7cyBhY3R1YWxseSByZWFjaGFibGUgdGhyb3VnaCBuZXRsaW5rIGNvbW11bmljYXRpb24uIEludGVyZXN0aW5nLgoKVGhpcyBtZWFucyBJIG5lZWQgdG8gY29uc2lkZXIgYGV0aG5sX3NldF9wc2VgIGZvciBpbmNsdXNpb24gaW4gYEZvY3VzU3ltYm9sc2AsIGFzc3VtaW5nIGl0JiMzOTtzIG5vdCBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gR2l2ZW4gdGhhdCBpdCYjMzk7cyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIsIEkmIzM5O20gcHJldHR5IGNvbmZpZGVudCBpdCAqd29uJiMzOTt0KiBiZSBpbmxpbmVkLiBGdW5jdGlvbiBwb2ludGVycyB1c3VhbGx5IHByZXZlbnQgdGhhdCBraW5kIG9mIG9wdGltaXphdGlvbi4KCldhaXQgYSBtaW51dGUsIGBwc2VfcHJlcGFyZV9kYXRhYCBpcyAqYWxzbyogYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgd2VsbC4gSXQgY291bGQgYmUgcmVhY2hhYmxlIHRocm91Z2ggdGhlIHNhbWUgbWVjaGFuaXNtLiBOZWVkIHRvIGFuYWx5emUgaXRzIHVzYWdlIGFzIHdlbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BzZV9wcmVwYXJlX2RhdGEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvZXRodG9vbC9wc2UtcGQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvZXRodG9vbC9wc2UtcGQuYz0zNj1zdGF0aWMgaW50IHBzZV9nZXRfcHNlX2F0dHJpYnV0ZXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbi0tXG5uZXQvZXRodG9vbC9wc2UtcGQuYy01NC1cbm5ldC9ldGh0b29sL3BzZS1wZC5jOjU1OnN0YXRpYyBpbnQgcHNlX3ByZXBhcmVfZGF0YShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLFxubmV0L2V0aHRvb2wvcHNlLXBkLmMtNTYtXHRcdFx0ICAgIHN0cnVjdCBldGhubF9yZXBseV9kYXRhICpyZXBseV9iYXNlLFxuLS1cbm5ldC9ldGh0b29sL3BzZS1wZC5jPTMzNT1jb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfcHNlX3JlcXVlc3Rfb3BzID0ge1xuLS1cbm5ldC9ldGh0b29sL3BzZS1wZC5jLTM0MS1cbm5ldC9ldGh0b29sL3BzZS1wZC5jOjM0MjpcdC5wcmVwYXJlX2RhdGFcdFx0PSBwc2VfcHJlcGFyZV9kYXRhLFxubmV0L2V0aHRvb2wvcHNlLXBkLmMtMzQzLVx0LnJlcGx5X3NpemVcdFx0PSBwc2VfcmVwbHlfc2l6ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzNjAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqQ2hlY2tpbmcgUmVhY2hhYmlsaXR5IGFuZCBFdmVudCBOb3RpZmljYXRpb24qKgoKT2theSwgaXQgc2VlbXMgbGlrZSBgcHNlX3ByZXBhcmVfZGF0YWAgaXMgaW5kZWVkIGFjY2Vzc2libGUg4oCTIHRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3csIEkgbmVlZCB0byBzaGlmdCBteSBmb2N1cyB0byB0aGUgZXZlbnQgbm90aWZpY2F0aW9uIG1lY2hhbmlzbS4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2l0aCBgcGh5X3BzZV9ub3RpZmllcl9ldmVudGAuIFVuZGVyc3RhbmRpbmcgaG93IGFuZCB3aGVuIHRoaXMgaXMgdHJpZ2dlcmVkLCBhbmQgd2hhdCBpbmZvcm1hdGlvbiBpdCByZWxheXMsIGlzIGNydWNpYWwgZm9yIFsqKmluc2VydCB5b3VyIGZpZWxkL2V4cGVydGlzZSBoZXJlLCBlLmcuLCBkZWJ1Z2dpbmcgbmV0d29yayBzdGFjayBpbnRlcmFjdGlvbnMsIHZhbGlkYXRpbmcgZGF0YSBwaXBlbGluZSBpbnRlZ3JpdHksIGFuYWx5emluZyBzZW5zb3IgZnVzaW9uIGFyY2hpdGVjdHVyZSoqXS4gSSBuZWVkIHRvIGRldGVybWluZSBpZiBpdCYjMzk7cyBvcGVyYXRpbmcgYXMgZXhwZWN0ZWQgYW5kIGFjY3VyYXRlbHkgcmVmbGVjdGluZyB0aGUgc3RhdGUgb2YgWyoqaW5zZXJ0IHJlbGV2YW50IHN5c3RlbS9jb21wb25lbnQgaGVyZSwgZS5nLiwgdGhlIHBoeXNpY2FsIGxheWVyIGRhdGEgc3RyZWFtLCB0aGUgUFNFIG1vZHVsZSwgdGhlIHNlbnNvciBpbnRlcmZhY2UqKl0uIFRoaXMgY2hlY2sgaXMgY3JpdGljYWwgZm9yIFsqKmV4cGxhaW4gd2h5IHRoaXMgaXMgaW1wb3J0YW50IGZvciB5b3VyIGZpZWxkLCBlLmcuLCBlbnN1cmluZyBkYXRhIGludGVncml0eSBhY3Jvc3MgdGhlIG5ldHdvcmssIHZlcmlmeWluZyB0aGUgdGltaW5nIG9mIGRhdGEgcHJvY2Vzc2luZywgdmFsaWRhdGluZyB0aGUgc3luY2hyb25pemF0aW9uIGJldHdlZW4gbW9kdWxlcyoqXS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGh5X3BzZV9ub3RpZmllcl9ldmVudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMTUwPXN0YXRpYyBpbnQgcGh5X3BzZV9kZXRhY2hfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExNzAtXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExNzE6c3RhdGljIGludCBwaHlfcHNlX25vdGlmaWVyX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExNzItXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMTkyPXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcGh5X3BzZV9ub3RpZmllciBfX3JlYWRfbW9zdGx5ID0ge1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMTkzOlx0Lm5vdGlmaWVyX2NhbGwgPSBwaHlfcHNlX25vdGlmaWVyX2V2ZW50LFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTk0LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4ODQ4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgeW91ciBzdW1tYXJ5OgoKKipGdW5jdGlvbiBQb2ludGVyIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCB0aGlzIG9wZXJhdGlvbiBpcyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQmIzM5O3MgKm5vdCogaW5saW5lZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IGZvciBwZXJmb3JtYW5jZSBhbmQgY29udHJvbCBmbG93LiBLbm93aW5nIGl0JiMzOTtzIGEgcG9pbnRlciBtZWFucyB0aGVyZSYjMzk7cyBhbiBpbmRpcmVjdGlvbiwgd2hpY2ggY2FuIGJlIHNsb3dlciB0aGFuIGEgZGlyZWN0IGNhbGwsIGFuZCBpdCBhbHNvIG1lYW5zIHRoZSBjb21waWxlciBtaWdodCBub3QgYmUgYWJsZSB0byBvcHRpbWl6ZSBpdCBhcyBhZ2dyZXNzaXZlbHkuCgpUbyBnZXQgYSBoYW5kbGUgb24gdGhlIHNpdHVhdGlvbiwgSSBuZWVkIHRvIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGJlaW5nICpwb2ludGVkKiB0by4gSSYjMzk7bGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhlIGRlZmluaXRpb24gb2YgdGhhdCBmdW5jdGlvbiBwb2ludGVyLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgZnVuY3Rpb25zIHdoZXJlIHRoaXMgdGhpbmcgaXMgdXNlZC4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYHBoeV9wc2VfYXR0YWNoX29uZWAgYW5kIGBwaHlfcHNlX2RldGFjaF9vbmVgLiBFeGFtaW5pbmcgdGhlc2UgZnVuY3Rpb25zIHNob3VsZCByZXZlYWwgdGhlIGNvbmNyZXRlIGZ1bmN0aW9ucyB0aGF0IHRoaXMgZnVuY3Rpb24gcG9pbnRlciBpcyBhY3R1YWxseSBzZXQgdG8uIFRoaXMgd2lsbCBoZWxwIGNsYXJpZnkgdGhlIG92ZXJhbGwgZGVzaWduIGFuZCBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwaHlfcHNlX2F0dGFjaF9vbmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTExND1zdGF0aWMgdm9pZCBwaHlfdHJ5X2F0dGFjaF9wc2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMzgtXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExMzk6c3RhdGljIGludCBwaHlfcHNlX2F0dGFjaF9vbmUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhIF9fbWF5YmVfdW51c2VkKVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTQwLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTExNzE9c3RhdGljIGludCBwaHlfcHNlX25vdGlmaWVyX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTc3LVx0XHRidXNfZm9yX2VhY2hfZGV2KFx1MDAyNm1kaW9fYnVzX3R5cGUsIE5VTEwsIE5VTEwsXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExNzg6XHRcdFx0XHQgcGh5X3BzZV9hdHRhY2hfb25lKTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTE3OS1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBoeV9wc2VfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NDA0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeToKCioqQW5hbHl6aW5nIERldmljZSBBdHRhY2htZW50IGluIGEgUEhZIENvbnRleHQqKgoKUmlnaHQsIHNvIHRoZXNlIGRldmljZSBhdHRhY2htZW50IG9wZXJhdGlvbnMgYXJlbiYjMzk7dCBpbmxpbmVkLCB0aGV5IGFyZSBiZWluZyBwYXNzZWQgdG8gYGJ1c19mb3JfZWFjaF9kZXZgLiBUaGF0IHRlbGxzIG1lIHdlJiMzOTtyZSBsaWtlbHkgZGVhbGluZyB3aXRoIGEgYnVzLWJhc2VkIGVudW1lcmF0aW9uIGFuZCBub3Qgc29tZXRoaW5nIGhhcHBlbmluZyB3aXRoaW4gdGhlIGNvbmZpbmVzIG9mIGEgc2luZ2xlIGZ1bmN0aW9uIGNhbGwuIFRoaXMgaXMgaW1wb3J0YW50IGNvbnRleHQsIHBhcnRpY3VsYXJseSB3aGVuIHRyeWluZyB0byBncmFzcCB0aGUgc2NvcGUgb2YgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBhbmQgaW50ZXJhY3Rpb25zLiBTaW5jZSBpdCYjMzk7cyBpdGVyYXRpbmcsIHRoaXMgcHJvYmFibHkgbWVhbnMgdGhlcmUgYXJlIG11bHRpcGxlIGRldmljZXMgb3Igc3ViLWRldmljZXMgYmVpbmcgaGFuZGxlZCBkdXJpbmcgYXR0YWNobWVudC4KCkdpdmVuIHRoZSBjb250ZXh0LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaW4gdW5kZXJzdGFuZGluZyB0aGUgZGV2aWNlIGF0dGFjaG1lbnQgcHJvY2VzcyBpcyB0byBleGFtaW5lIGBwaHlfdHJ5X2F0dGFjaF9wc2VgLiBJIHNob3VsZCBkaXZlIGludG8gdGhhdCBmdW5jdGlvbiBub3cgdG8gc2VlIGhvdyB0aGUgUGh5c2ljYWwgTGF5ZXIgZGV2aWNlIChQSFkpIGF0dGVtcHRzIHRvIGNvbm5lY3QgdG8gb3IgaW50ZXJhY3Qgd2l0aCBzb21ldGhpbmcgaXQgY2FsbHMgJiMzNDtQU0UsJiMzNDsgbGlrZWx5IFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudCwgcGFydGljdWxhcmx5IHNpbmNlIHdlJiMzOTtyZSBub3QgZGVhbGluZyB3aXRoIGlubGluZSBjb2RlLiBVbmRlcnN0YW5kaW5nIHRoZSByb2xlIG9mIHRoZSBQU0UgZHVyaW5nIGRldmljZSBhdHRhY2htZW50IHdpbGwgcHJvdmlkZSBjcml0aWNhbCBpbnNpZ2h0cyBpbnRvIHRoZSBwb3dlciBtYW5hZ2VtZW50IGFzcGVjdCBhbmQgaG93IHRoZXNlIGRldmljZXMgYXJlIGludGVncmF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeV90cnlfYXR0YWNoX3BzZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMTA2PXN0YXRpYyBERUZJTkVfTVVURVgocGh5X3BzZV9sb2NrKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMTMtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExMTQ6c3RhdGljIHZvaWQgcGh5X3RyeV9hdHRhY2hfcHNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMTUte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTEzOT1zdGF0aWMgaW50IHBoeV9wc2VfYXR0YWNoX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEgX19tYXliZV91bnVzZWQpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTQ1LVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMTQ2Olx0cGh5X3RyeV9hdHRhY2hfcHNlKHRvX3BoeV9kZXZpY2UoZGV2KSk7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExNDctXHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTEyNjc9aW50IHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMjc3LVx0bXV0ZXhfbG9jayhcdTAwMjZwaHlfcHNlX2xvY2spO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMjc4Olx0cGh5X3RyeV9hdHRhY2hfcHNlKHBoeWRldik7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEyNzktXHRtdXRleF91bmxvY2soXHUwMDI2cGh5X3BzZV9sb2NrKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTEyOTE9aW50IHBoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEyOTktXHRtdXRleF9sb2NrKFx1MDAyNnBoeV9wc2VfbG9jayk7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEzMDA6XHRwaHlfdHJ5X2F0dGFjaF9wc2UocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTMwMS1cdG11dGV4X3VubG9jayhcdTAwMjZwaHlfcHNlX2xvY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDE5MwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgQ29kZSBGbG93OiBTa2lwcGluZyB0aGUgSW5saW5lZCoqCgpSaWdodCwgdGhpcyBsb29rcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkLCBzdGF0aWNhbGx5IGRlZmluZWQgY2FsbC4gSXQmIzM5O3MgbGlrZWx5IGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGZvciBlZmZpY2llbmN5LiBObyBuZWVkIHRvIGRpZyBpbnRvIGl0IGhlcmU7IHRoZSBjb21waWxlciYjMzk7cyBwcm9iYWJseSB0YWtlbiBjYXJlIG9mIGl0LiBMZXQmIzM5O3MgbW92ZSBvbiBhbmQgZ2V0IHRvIHRoZSBpbXBvcnRhbnQgcGFydC4gTXkgbmV4dCBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiB0aGUgYF9fcGh5X2RldmljZV9yZWdpc3RlcmAgZnVuY3Rpb24gYW5kIGhvdyBpdCB3b3Jrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19waHlfZGV2aWNlX3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTEyMTY9RVhQT1JUX1NZTUJPTF9HUEwocGh5X3BzZV9jb250cm9sX3VubG9jayk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMjI1LSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMjI2OnN0YXRpYyBpbnQgX19waHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEyMjcte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTI2Nz1pbnQgcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEyNzItXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEyNzM6XHRlcnIgPSBfX3BoeV9kZXZpY2VfcmVnaXN0ZXIocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTI3NC1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMjkxPWludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMjk0LVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMjk1Olx0ZXJyID0gX19waHlfZGV2aWNlX3JlZ2lzdGVyKHBoeWRldik7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEyOTYtXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDcwOQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQ5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBTRSBEcml2ZXIgYW5kIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhpcyBQU0UgZHJpdmVyLiBUaGUgaW5pdGlhbCBjbHVlIGlzIHRoYXQgdGhpcyBjb2RlIGlzIGxpa2VseSBkaXJlY3RseSBjYWxsZWQsIGFuZCBwb3NzaWJseSBpbmxpbmVkLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gc3BlY2lmaWMgc3ltYm9scyB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBhbmQgcmVsYXRpb25zaGlwcy4gSSBuZWVkIHRvIGtlZXAgYW4gZXllIG91dCBmb3IgdGhlc2U6IGBwaHlfcHNlX2NvbnRyb2xfbG9ja2AsIGBwaHlfcHNlX2NvbnRyb2xfdW5sb2NrYCwgYHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkYCwgYHBoeV9kZXZpY2VfcmVnaXN0ZXJgLCBgcGh5X2RldmljZV9yZW1vdmVgLCBgcHNlX3JlZ2lzdGVyX25vdGlmaWVyYCwgYHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyYCwgYHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyYCwgYHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXJgLCBgcHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldmAsIGBldGhubF9zZXRfcHNlYCwgYHBzZV9wcmVwYXJlX2RhdGFgLCBgcGh5X3BzZV9hdHRhY2hfb25lYCwgYW5kIGBwaHlfcHNlX2RldGFjaF9vbmVgLCBgcGh5X3BzZV9ub3RpZmllcl9ldmVudGAuIFRoZXNlIGZ1bmN0aW9ucyB3aWxsIHBhaW50IHRoZSBwaWN0dXJlIG9mIGhvdyBpdCBhbGwgd29ya3MuCgpOb3csIEkgbmVlZCB0byB2ZXJpZnkgd2hpY2ggY29uZmlndXJhdGlvbnMgYXJlIHJlcXVpcmVkIGZvciB0aGlzIGRyaXZlciB0byBmdW5jdGlvbi4gTGV0IG1lIHNlZS4uLiBJJiMzOTt2ZSBnb3QgYENPTkZJR19QU0VfQ09OVFJPTExFUmAgYW5kIGBDT05GSUdfUkVHVUxBVE9SYCB0aGF0IGFyZSBvYnZpb3VzbHkgbmVlZGVkLiBXYWl0LCBpdCBzZWVtcyBsaWtlIHRoZSBgUFNFX1JFR1VMQVRPUmAgaXMgYWN0dWFsbHkgdGhlIGRyaXZlci4gU28gSSYjMzk7bGwgbmVlZCBgQ09ORklHX1BTRV9SRUdVTEFUT1JgLi4uIEFoIHllcywgdGhhdCYjMzk7cyBpdC4gSXQmIzM5O3MgbGlzdGVkIGluIGBkcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZ2AuIEkgc2VlIGBjb25maWcgUFNFX1JFR1VMQVRPUmAgaW4gdGhlcmUuIE9rLCBzbyBgUFNFX1JFR1VMQVRPUmAgaXMgdGhlIGNvbmZpZyBuYW1lIGZvciB0aGUgZHJpdmVyLiBXYWl0LCBgUFNFX0NPTlRST0xMRVJgIGlzIGEgYm9vbGVhbiwgd2hpbGUgYFBTRV9SRUdVTEFUT1JgIGlzIGEgdHJpc3RhdGUuIFRoZXJlZm9yZSwgYm90aCBgUFNFX0NPTlRST0xMRVJgLCBgUFNFX1JFR1VMQVRPUmAsIGFuZCBgUkVHVUxBVE9SYCBjb25maWdzIHNob3VsZCBkZWZpbml0ZWx5IGdvIGludG8gYEVuYWJsZUNvbmZpZ3NgLgoKTmV4dCwgSSYjMzk7bGwgbmVlZCB0byBzZWUgaWYgaXQmIzM5O3MgY29tcGlsZWQuIEkmIzM5O2xsIGNoZWNrIGBuZXQvZXRodG9vbC9wc2UtcGQuY2AuIFRoZSBkcml2ZXIgaXMgY29tcGlsZWQgaWYgYENPTkZJR19FVEhUT09MX05FVExJTktgIGlzIGVuYWJsZWQuIFRoYXQgc2hvdWxkIGJlIGVuYWJsZWQgYnkgZGVmYXVsdCwgc28gSSYjMzk7bSBsaWtlbHkgZ29vZCB0aGVyZS4KCkkmIzM5O2xsIGFsc28gaGF2ZSB0byBtYWtlIHN1cmUgdGhlIGNvcmUgUEhZIGxpYnJhcnkgaXMgYXZhaWxhYmxlLiBMb29raW5nIGF0IGBkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jYCwgaXQmIzM5O3MgY29tcGlsZWQgaWYgYENPTkZJR19QSFlMSUJgIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgdXN1YWxseSBlbmFibGVkLCBzbyBJJiMzOTttIHByb2JhYmx5IGZpbmUuCgpGaW5hbGx5LCB0aGUgcGF0Y2ggbWVudGlvbnMgY2hhbmdlcyB0byBgc2ZwX3NtX3Byb2JlX3BoeWAgaW4gYHNmcC5jYC4gTGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrIGlmIGBzZnAuY2AgaXMgY29tcGlsZWQuIE9rLCBqdXN0IG1ha2luZyBzdXJlIGV2ZXJ5dGhpbmcgaXMgcmVhZHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NmcC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT0yND1vYmotJChDT05GSUdfTkVUV09SS19QSFlfVElNRVNUQU1QSU5HKSAmIzQzOz0gbWlpX3RpbWVzdGFtcGVyLm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0yNS1cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToyNjpvYmotJChDT05GSUdfU0ZQKVx0XHQmIzQzOz0gc2ZwLm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToyNzpzZnAtb2JqLSQoQ09ORklHX1NGUClcdFx0JiM0Mzs9IHNmcC1idXMub1xuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjI4Om9iai15XHRcdFx0XHQmIzQzOz0gJChzZnAtb2JqLXkpICQoc2ZwLW9iai1tKVxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTI5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTk3NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2Ugc3RlcHM6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNraW5nIGEgZGVwZW5kZW5jeSBoZXJlLiBJIHNlZSB0aGF0IHRoZSBgc2ZwLmNgIG1vZHVsZSBhYnNvbHV0ZWx5IG5lZWRzIGBDT05GSUdfU0ZQYCB0byBjb21waWxlLiBNYWtlcyBwZXJmZWN0IHNlbnNlLiBSaWdodCwgbGV0JiMzOTtzIGdldCB0aGF0IHNxdWFyZWQgYXdheS4gSSYjMzk7bGwgYWRkIGBTRlBgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdC4gTm8gcmVhc29uIHRvIGxlYXZlIHRoYXQgaGFuZ2luZy4KCldoaWxlIEkmIzM5O20gYXQgaXQsIEkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoaXMgYGRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uY2AgZmlsZS4gQWgsIHllcywgaXQgZGVwZW5kcyBvbiBgQ09ORklHX0ZXTk9ERV9NRElPYCwgYXMgZXhwZWN0ZWQuIEdvb2QuIEl0JiMzOTtzIGFsd2F5cyBhIGdvb2QgaWRlYSB0byBjb25maXJtIHRob3NlIGRlcGVuZGVuY2llcyBhbmQgZW5zdXJlIEkmIzM5O3ZlIGdvdCBldmVyeXRoaW5nIGxpbmVkIHVwIGluIG15IGhlYWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z3bm9kZV9tZGlvLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU9ND1vYmotJChDT05GSUdfQUNQSV9NRElPKVx0XHQmIzQzOz0gYWNwaV9tZGlvLm9cbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6NTpvYmotJChDT05GSUdfRldOT0RFX01ESU8pXHQmIzQzOz0gZndub2RlX21kaW8ub1xuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZS02LW9iai0kKENPTkZJR19PRl9NRElPKVx0XHQmIzQzOz0gb2ZfbWRpby5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMzYwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUEhZIGFuZCBQU0UgQ29udHJvbGxlciBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGlua2luZyB3ZSBuZWVkIHRvIGFkZCBgRldOT0RFX01ESU9gIHRvIGBFbmFibGVDb25maWdzYC4gTGV0JiMzOTtzIHJldmlldyB0aGUgaW1wbGljYXRpb25zIGhlcmU7IHRoaXMgaXMgYSBwcmV0dHkgc3Vic3RhbnRpYWwgY2hhbmdlIGluIGhvdyB0aGUgUEhZIGxpYnJhcnkgYW5kIGV0aHRvb2wgaGFuZGxlIFBTRSBjb250cm9sbGVycy4KClRoZSBwYXRjaCBpcyBzaGlmdGluZyB0aGUgUFNFIGNvbnRyb2wgYXR0YWNobWVudC4gSW5zdGVhZCBvZiBhdHRhY2hpbmcgaXQgdGhyb3VnaCBgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5YCwgaXQmIzM5O3Mgbm93IGJlaW5nIGhhbmRsZWQgaW4gYHBoeV9kZXZpY2VfcmVnaXN0ZXJgIGFuZCwgY3J1Y2lhbGx5LCBgcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWRgLiBUaGF0JiMzOTtzIGEga2V5IG1vdmUuIFRvIHNlcmlhbGl6ZSBhY2Nlc3MgdG8gYHBoeWRldi0mZ3Q7cHNlY2AgYWdhaW5zdCB0aGUgUFNFIG5vdGlmaWVyIGFuZCBldGh0b29sLCB3ZSYjMzk7cmUgaW50cm9kdWNpbmcgYSBgcGh5X3BzZV9sb2NrYCBtdXRleC4gVGhpcyBpcyBhIHZlcnkgZ29vZCBpZGVhIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zLiBXZSYjMzk7cmUgYWxzbyBpbnRyb2R1Y2luZyBhIGBwaHlfcHNlX25vdGlmaWVyYCBub3RpZmllciB3aGljaCB3aWxsIGF0dGFjaCBhbmQgZGV0YWNoIHRoZSBQU0UgY29udHJvbCBhcyB0aGUgUFNFIGNvbnRyb2xsZXIgcmVnaXN0ZXJzIGFuZCB1bnJlZ2lzdGVycy4KClRoZSBjaGFuZ2VzIHRvIGBldGhubF9zZXRfcHNlYCBhbmQgYHBzZV9wcmVwYXJlX2RhdGFgIHRvIHVzZSBgcGh5X3BzZV9jb250cm9sX2xvY2soKWAgYW5kIGBwaHlfcHNlX2NvbnRyb2xfdW5sb2NrKClgIGFyZSBhbHNvIHNtYXJ0LiBJdCYjMzk7cyBzb2xpZGlmeWluZyB0aGUgbG9ja2luZyB0byBlbnN1cmUgZGF0YSBjb25zaXN0ZW5jeS4gQW5kIGZpbmFsbHksIHRoZSBtb2RpZmljYXRpb24gdG8gYHNmcF9zbV9wcm9iZV9waHlgIHRvIHVzZSBgcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWRgIGluc3RlYWQgb2YgYHBoeV9kZXZpY2VfcmVnaXN0ZXJgIGZvbGxvd3MgdGhpcyBjaGFuZ2UgYW5kIHVzZXMgcHJvcGVyIGxvY2tpbmcgaW4gdGhhdCBmdW5jdGlvbiBhcyB3ZWxsLgoKVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgc2hpZnQuIFRoaXMgaXMgbGlrZWx5IGZpeGluZyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciBsaWZlY3ljbGUgaXNzdWUgd2l0aCBQU0UgY29udHJvbGxlcnMgdGhhdCB3ZSBwcm9iYWJseSBzYXcgZHVyaW5nIHRlc3RpbmcuIEl0IGRlZmluaXRlbHkgd2FycmFudHMgYSBmdWxsIGZ1enppbmcgcGFzcy4KCk5vdywgSSB3YW50IHRvIG1ha2Ugc3VyZSBJJiMzOTttIGZ1bGx5IHVwIHRvIHNwZWVkIG9uIGFsbCB0aGUgc3ltYm9scyBhZmZlY3RlZC4gTGV0IG1lIGZvY3VzIG9uOiBgcGh5X3BzZV9jb250cm9sX2xvY2tgLCBgcGh5X3BzZV9jb250cm9sX3VubG9ja2AsIGBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZGAsIGBwaHlfZGV2aWNlX3JlZ2lzdGVyYCwgYHBoeV9kZXZpY2VfcmVtb3ZlYCwgYHBzZV9yZWdpc3Rlcl9ub3RpZmllcmAsIGBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcmAsIGBwc2VfY29udHJvbGxlcl9yZWdpc3RlcmAsIGBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyYCwgYHBzZV9jb250cm9sX21hdGNoZXNfcGNkZXZgLCBgZXRobmxfc2V0X3BzZWAsIGBwc2VfcHJlcGFyZV9kYXRhYCwgYHBoeV9wc2VfYXR0YWNoX29uZWAsIGBwaHlfcHNlX2RldGFjaF9vbmVgLCBhbmQgYHBoeV9wc2Vfbm90aWZpZXJfZXZlbnRgLiBUaGVzZSBhcmUgYWxsIGNlbnRyYWwgdG8gdGhlIGxvZ2ljIGhlcmUuCgpXZSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvcnJlY3QgZW5hYmxlbWVudCBjb25maWdzLiBXZSBuZWVkIGBQU0VfQ09OVFJPTExFUmAsIGBQU0VfUkVHVUxBVE9SYCwgYFJFR1VMQVRPUmAsIGBTRlBgLCBhbmQgYEZXTk9ERV9NRElPYC4KCkxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlIGBQU0VfUkVHVUxBVE9SYCBjb25maWcuIExvb2tpbmcgYXQgYGRyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnYDoKYGBgCmNvbmZpZyBQU0VfUkVHVUxBVE9SCgl0cmlzdGF0ZSAmIzM0O1JlZ3VsYXRvciBiYXNlZCBQU0UgY29udHJvbGxlciYjMzQ7CmBgYApZZXMsIGBQU0VfUkVHVUxBVE9SYCBpcyB0aGUgcmlnaHQgb25lLCB0aGF0JiMzOTtzIGNvcnJlY3QuCgpMZXQmIzM5O3MgYWxzbyBtYWtlIHN1cmUgYFNGUGAgaXMgZW5hYmxlZCBjb3JyZWN0bHkuIENoZWNraW5nIGBkcml2ZXJzL25ldC9waHkvS2NvbmZpZ2A6IC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU0ZQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L0tjb25maWc9NjU9Y29uZmlnIFJVU1RfUEhZTElCX0FCU1RSQUNUSU9OU1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTcyLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6NzM6Y29uZmlnIFNGUFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNzQtXHR0cmlzdGF0ZSBcJiMzNDtTRlAgY2FnZSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNjM4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ29uZmlybWluZyB0aGUgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB5ZXMsIEkgYWdyZWUsIGBTRlBgIGlzIGRlZmluaXRlbHkgdGhlIGNvcnJlY3Qgb3B0aW9uIGhlcmUuIE5vdywgSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIGFib3V0IGBGV05PREVfTURJT2AuIExldCYjMzk7cyBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGNvbmZpZ3VyYXRpb24sIHNoYWxsIHdlPyBJJiMzOTtsbCBwb3Agb3ZlciB0byBgZHJpdmVycy9uZXQvbWRpby9LY29uZmlnYCB0byB2ZXJpZnkuIEkgbmVlZCB0byBiZSBjZXJ0YWluIGJlZm9yZSBJIG1vdmUgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBGV05PREVfTURJTyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL0tjb25maWc9Nj1pZiBQSFlMSUJcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy03LVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjg6Y29uZmlnIEZXTk9ERV9NRElPXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctOS1cdGRlZl90cmlzdGF0ZSAoQUNQSSB8fCBPRikgfHwgQ09NUElMRV9URVNUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzODg5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ29uZmlybWluZyB0aGUgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB5ZXMsIGBGV05PREVfTURJT2AgZmVlbHMgcmlnaHQsIHRoYXQgcmluZ3MgdHJ1ZS4gTm93LCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgYmVmb3JlIEkgcHJvY2VlZCB3aXRoIGFueSBjaGFuZ2VzLCBsZXQmIzM5O3MgcXVpY2tseSB2ZXJpZnkgdGhhdCBgUkVHVUxBVE9SYCBpcyB0aGUgYXBwcm9wcmlhdGUgY29uZmlndXJhdGlvbiBvcHRpb24gd2UmIzM5O3JlIGxvb2tpbmcgYXQuIEJlc3QgcHJhY3RpY2UsIGFsd2F5cy4gQSBxdWljayBsb29rIHdpdGhpbiBgZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZ2Agc2hvdWxkIHByb3ZpZGUgdGhlIGFuc3dlci4gSSBuZWVkIHRoYXQgYWJzb2x1dGUgY2xhcml0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFJFR1VMQVRPUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvcmVndWxhdG9yL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDgzMyBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzoyOm1lbnVjb25maWcgUkVHVUxBVE9SXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTMtXHRib29sIFwmIzM0O1ZvbHRhZ2UgYW5kIEN1cnJlbnQgUmVndWxhdG9yIFN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnPTI2PWlmIFJFR1VMQVRPUlxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0yNy1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6Mjg6Y29uZmlnIFJFR1VMQVRPUl9ERUJVR1xuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0yOS1cdGJvb2wgXCYjMzQ7UmVndWxhdG9yIGRlYnVnIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTMyLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzozMzpjb25maWcgUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0VcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMzQtXHR0cmlzdGF0ZSBcJiMzNDtGaXhlZCB2b2x0YWdlIHJlZ3VsYXRvciBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0zOS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NDA6Y29uZmlnIFJFR1VMQVRPUl9WSVJUVUFMX0NPTlNVTUVSXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTQxLVx0dHJpc3RhdGUgXCYjMzQ7VmlydHVhbCByZWd1bGF0b3IgY29uc3VtZXIgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNDktXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjUwOmNvbmZpZyBSRUdVTEFUT1JfVVNFUlNQQUNFX0NPTlNVTUVSXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTUxLVx0dHJpc3RhdGUgXCYjMzQ7VXNlcnNwYWNlIHJlZ3VsYXRvciBjb25zdW1lciBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy01OC1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NTk6Y29uZmlnIFJFR1VMQVRPUl9ORVRMSU5LX0VWRU5UU1xuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy02MC1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIHJlY2VpdmluZyByZWd1bGF0b3IgZXZlbnRzIHZpYSBuZXRsaW5rXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy02OC1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6Njk6Y29uZmlnIFJFR1VMQVRPUl84OFBHODZYXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTcwLVx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCA4OFBHODZYIHZvbHRhZ2UgcmVndWxhdG9yc1wmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNzctXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjc4OmNvbmZpZyBSRUdVTEFUT1JfODhQTTgwMFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy03OS1cdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgODhQTTgwMCBQb3dlciByZWd1bGF0b3JzXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy04Ny1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6ODg6Y29uZmlnIFJFR1VMQVRPUl84OFBNODYwN1xuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy04OS1cdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgODhQTTg2MDcgUG93ZXIgcmVndWxhdG9yc1wmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctOTMtXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjk0OmNvbmZpZyBSRUdVTEFUT1JfODhQTTg4NlxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy05NS1cdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgODhQTTg4NiB2b2x0YWdlIHJlZ3VsYXRvcnNcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTk5LVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzoxMDA6Y29uZmlnIFJFR1VMQVRPUl9BQ1Q4ODY1XG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTEwMS1cdHRyaXN0YXRlIFwmIzM0O0FjdGl2ZS1zZW1pIGFjdDg4NjUgdm9sdGFnZSByZWd1bGF0b3JcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTEwOC1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MTA5OmNvbmZpZyBSRUdVTEFUT1JfQUNUODk0NUFcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTEwLVx0dHJpc3RhdGUgXCYjMzQ7QWN0aXZlLXNlbWkgQUNUODk0NUEgdm9sdGFnZSByZWd1bGF0b3JcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTExNy1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MTE4OmNvbmZpZyBSRUdVTEFUT1JfQUQ1Mzk4XG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTExOS1cdHRyaXN0YXRlIFwmIzM0O0FuYWxvZyBEZXZpY2VzIEFENTM5OC9BRDU4MjEgcmVndWxhdG9yc1wmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTI0LVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzoxMjU6Y29uZmlnIFJFR1VMQVRPUl9BRFA1MDU1XG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTEyNi1cdHRyaXN0YXRlIFwmIzM0O0FuYWxvZyBEZXZpY2VzIEFEUDUwNTUgVHJpcGxlIEJ1Y2sgUmVndWxhdG9yXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xMzUtXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjEzNjpjb25maWcgUkVHVUxBVE9SX0FOQVRPUFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xMzctXHR0cmlzdGF0ZSBcJiMzNDtGcmVlc2NhbGUgaS5NWCBvbi1jaGlwIEFOQVRPUCBMRE8gcmVndWxhdG9yc1wmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTQ0LVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzoxNDU6Y29uZmlnIFJFR1VMQVRPUl9BQVQyODcwXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTE0Ni1cdHRyaXN0YXRlIFwmIzM0O0FuYWxvZ2ljVGVjaCBBQVQyODcwIFJlZ3VsYXRvcnNcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTE1MS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MTUyOmNvbmZpZyBSRUdVTEFUT1JfQUI4NTAwXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTE1My1cdGJvb2wgXCYjMzQ7U1QtRXJpY3Nzb24gQUI4NTAwIFBvd2VyIFJlZ3VsYXRvcnNcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTE1OC1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MTU5OmNvbmZpZyBSRUdVTEFUT1JfQVJJWk9OQV9MRE8xXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTE2MC1cdHRyaXN0YXRlIFwmIzM0O0NpcnJ1cyBNYWRlcmEgYW5kIFdvbGZzb24gQXJpem9uYSBjbGFzcyBkZXZpY2VzIExETzFcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTE2Ni1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MTY3OmNvbmZpZyBSRUdVTEFUT1JfQVJJWk9OQV9NSUNTVVBQXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTE2OC1cdHRyaXN0YXRlIFwmIzM0O0NpcnJ1cyBNYWRlcmEgYW5kIFdvbGZzb24gQXJpem9uYSBjbGFzcyBkZXZpY2VzIE1JQ1NVUFBcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTE3NS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MTc2OmNvbmZpZyBSRUdVTEFUT1JfQVJNX1NDTUlcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTc3LVx0dHJpc3RhdGUgXCYjMzQ7U0NNSSBiYXNlZCByZWd1bGF0b3IgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xODQtXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjE4NTpjb25maWcgUkVHVUxBVE9SX0FTMzcxMVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xODYtXHR0cmlzdGF0ZSBcJiMzNDtBUzM3MTEgUE1JQ1wmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTkxLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzoxOTI6Y29uZmlnIFJFR1VMQVRPUl9BUzM3MjJcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTkzLVx0dHJpc3RhdGUgXCYjMzQ7QU1TIEFTMzcyMiBQTUlDIFJlZ3VsYXRvcnNcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTE5OS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MjAwOmNvbmZpZyBSRUdVTEFUT1JfQVRDMjYwWFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0yMDEtXHR0cmlzdGF0ZSBcJiMzNDtBY3Rpb25zIFNlbWkgQVRDMjYweCBQTUlDIFJlZ3VsYXRvcnNcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTIwNy1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MjA4OmNvbmZpZyBSRUdVTEFUT1JfQVczNzUwM1xuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0yMDktXHR0cmlzdGF0ZSBcJiMzNDtBd2luaWMgQVczNzUwMyBEdWFsIE91dHB1dCBQb3dlciByZWd1bGF0b3JzXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0yMTUtXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjIxNjpjb25maWcgUkVHVUxBVE9SX0FYUDIwWFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0yMTctXHR0cmlzdGF0ZSBcJiMzNDtYLVBPV0VSUyBBWFAyMFggUE1JQyBSZWd1bGF0b3JzXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0yMjItXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjIyMzpjb25maWcgUkVHVUxBVE9SX0JDTTU5MFhYXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTIyNC1cdHRyaXN0YXRlIFwmIzM0O0Jyb2FkY29tIEJDTTU5MHh4IFBNVSBSZWd1bGF0b3JzXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0yMzAtXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjIzMTpjb25maWcgUkVHVUxBVE9SX0JENzE4MTVcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMjMyLVx0dHJpc3RhdGUgXCYjMzQ7Uk9ITSBCRDcxODE1IFBvd2VyIFJlZ3VsYXRvclwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMjQyLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzoyNDM6Y29uZmlnIFJFR1VMQVRPUl9CRDcxODI4XG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTI0NC1cdHRyaXN0YXRlIFwmIzM0O1JPSE0gQkQ3MTgyOCwgQkQ3MjcyMCBhbmQgQkQ3MzkwMCBQb3dlciBSZWd1bGF0b3JzXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0yNTQtXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjI1NTpjb25maWcgUkVHVUxBVE9SX0JENzE4WFhcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMjU2LVx0dHJpc3RhdGUgXCYjMzQ7Uk9ITSBCRDcxODM3IFBvd2VyIFJlZ3VsYXRvclwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMjY2LVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzoyNjc6Y29uZmlnIFJFR1VMQVRPUl9CRDk1NzFNV1ZcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMjY4LVx0dHJpc3RhdGUgXCYjMzQ7Uk9ITSBCRDk1NzFNV1YgUmVndWxhdG9yc1wmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMjc3LVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzoyNzg6Y29uZmlnIFJFR1VMQVRPUl9CRDk1N1hNVUZcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMjc5LVx0dHJpc3RhdGUgXCYjMzQ7Uk9ITSBCRDk1NzZNVUYgYW5kIEJEOTU3M01VRiBSZWd1bGF0b3JzXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0yODctXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjI4ODpjb25maWcgUkVHVUxBVE9SX0JEOTY4MDFcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMjg5LVx0dHJpc3RhdGUgXCYjMzQ7Uk9ITSBCRDk2ODAxIFBvd2VyIFJlZ3VsYXRvclwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMjk5LVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzozMDA6Y29uZmlnIFJFR1VMQVRPUl9CUTI1N1hYXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTMwMS1cdHRyaXN0YXRlIFwmIzM0O1RJIEJRMjU3WFggcmVndWxhdG9yIGZhbWlseVwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMzA3LVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzozMDg6Y29uZmlnIFJFR1VMQVRPUl9DUENBUFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0zMDktXHR0cmlzdGF0ZSBcJiMzNDtNb3Rvcm9sYSBDUENBUCByZWd1bGF0b3JcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTMxNC1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MzE1OmNvbmZpZyBSRUdVTEFUT1JfQ1JPU19FQ1xuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0zMTYtXHR0cmlzdGF0ZSBcJiMzNDtDaHJvbWVPUyBFQyByZWd1bGF0b3JzXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0zMjQtXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjMyNTpjb25maWcgUkVHVUxBVE9SX0RBOTAzWFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0zMjYtXHR0cmlzdGF0ZSBcJiMzNDtEaWFsb2cgU2VtaWNvbmR1Y3RvciBEQTkwMzAvREE5MDM0IHJlZ3VsYXRvcnNcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTMzMi1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MzMzOmNvbmZpZyBSRUdVTEFUT1JfREE5MDUyXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTMzNC1cdHRyaXN0YXRlIFwmIzM0O0RpYWxvZyBTZW1pY29uZHVjdG9yIERBOTA1Mi9EQTkwNTMgcmVndWxhdG9yc1wmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMzM5LVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzozNDA6Y29uZmlnIFJFR1VMQVRPUl9EQTkwNTVcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMzQxLVx0dHJpc3RhdGUgXCYjMzQ7RGlhbG9nIFNlbWljb25kdWN0b3IgREE5MDU1IHJlZ3VsYXRvcnNcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTM0OS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MzUwOmNvbmZpZyBSRUdVTEFUT1JfREE5MDYyXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTM1MS1cdHRyaXN0YXRlIFwmIzM0O0RpYWxvZyBTZW1pY29uZHVjdG9yIERBOTA2MS82MiByZWd1bGF0b3JzXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0zNTktXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjM2MDpjb25maWcgUkVHVUxBVE9SX0RBOTA2M1xuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0zNjEtXHR0cmlzdGF0ZSBcJiMzNDtEaWFsb2cgU2VtaWNvbmR1Y3RvciBEQTkwNjMgcmVndWxhdG9yc1wmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMzY5LVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzozNzA6Y29uZmlnIFJFR1VMQVRPUl9EQTkxMjFcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMzcxLVx0dHJpc3RhdGUgXCYjMzQ7RGlhbG9nIFNlbWljb25kdWN0b3IgREE5MTIxL0RBOTEyMi9EQTkyMjAvREE5MjE3L0RBOTEzMC9EQTkxMzEvREE5MTMyIHJlZ3VsYXRvclwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMzg5LVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzozOTA6Y29uZmlnIFJFR1VMQVRPUl9EQTkyMTBcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMzkxLVx0dHJpc3RhdGUgXCYjMzQ7RGlhbG9nIFNlbWljb25kdWN0b3IgREE5MjEwIHJlZ3VsYXRvclwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMzk5LVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo0MDA6Y29uZmlnIFJFR1VMQVRPUl9EQTkyMTFcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNDAxLVx0dHJpc3RhdGUgXCYjMzQ7RGlhbG9nIFNlbWljb25kdWN0b3IgREE5MjExL0RBOTIxMi9EQTkyMTMvREE5MjIzL0RBOTIxNC9EQTkyMjQvREE5MjE1L0RBOTIyNSByZWd1bGF0b3JcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTQxMC1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NDExOmNvbmZpZyBSRUdVTEFUT1JfREJYNTAwX1BSQ01VXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTQxMi1cdGJvb2xcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNDEzLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo0MTQ6Y29uZmlnIFJFR1VMQVRPUl9EQjg1MDBfUFJDTVVcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNDE1LVx0Ym9vbCBcJiMzNDtTVC1Fcmljc3NvbiBEQjg1MDAgVm9sdGFnZSBEb21haW4gUmVndWxhdG9yc1wmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNDIxLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo0MjI6Y29uZmlnIFJFR1VMQVRPUl9GQU41MzU1NVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy00MjMtXHR0cmlzdGF0ZSBcJiMzNDtGYWlyY2hpbGQgRkFONTM1NTUgUmVndWxhdG9yXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy00MzItXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjQzMzpjb25maWcgUkVHVUxBVE9SX0ZBTjUzODgwXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTQzNC1cdHRyaXN0YXRlIFwmIzM0O0ZhaXJjaGlsZCBGQU41Mzg4MCBSZWd1bGF0b3JcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTQ0Mi1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NDQzOmNvbmZpZyBSRUdVTEFUT1JfR1BJT1xuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy00NDQtXHR0cmlzdGF0ZSBcJiMzNDtHUElPIHJlZ3VsYXRvciBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy00NTItXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjQ1Mzpjb25maWcgUkVHVUxBVE9SX0hJNjQyMVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy00NTQtXHR0cmlzdGF0ZSBcJiMzNDtIaVNpbGljb24gSGk2NDIxIFBNSUMgdm9sdGFnZSByZWd1bGF0b3Igc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNDYyLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo0NjM6Y29uZmlnIFJFR1VMQVRPUl9ISTY0MjFWNTMwXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTQ2NC1cdHRyaXN0YXRlIFwmIzM0O0hpU2lsaWNvbiBIaTY0MjF2NTMwIFBNSUMgdm9sdGFnZSByZWd1bGF0b3Igc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNDcyLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo0NzM6Y29uZmlnIFJFR1VMQVRPUl9ISTY1NVhcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNDc0LVx0dHJpc3RhdGUgXCYjMzQ7SGlzaWxpY29uIEhJNjU1WCBQTUlDIHJlZ3VsYXRvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNDgwLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo0ODE6Y29uZmlnIFJFR1VMQVRPUl9ISTY0MjFWNjAwXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTQ4Mi1cdHRyaXN0YXRlIFwmIzM0O0hpU2lsaWNvbiBIaTY0MjF2NjAwIFBNSUMgdm9sdGFnZSByZWd1bGF0b3Igc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNDg5LVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo0OTA6Y29uZmlnIFJFR1VMQVRPUl9JU0w5MzA1XG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTQ5MS1cdHRyaXN0YXRlIFwmIzM0O0ludGVyc2lsIElTTDkzMDUgcmVndWxhdG9yXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy00OTYtXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjQ5Nzpjb25maWcgUkVHVUxBVE9SX0lTTDYyNzFBXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTQ5OC1cdHRyaXN0YXRlIFwmIzM0O0ludGVyc2lsIElTTDYyNzFBIFBvd2VyIHJlZ3VsYXRvclwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNTAyLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo1MDM6Y29uZmlnIFJFR1VMQVRPUl9GUDk5MzFcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNTA0LVx0dHJpc3RhdGUgXCYjMzQ7Rml0aVBvd2VyIEZQOTkzMS9KRDk5MzAgRVBEIHJlZ3VsYXRvclwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNTEyLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo1MTM6Y29uZmlnIFJFR1VMQVRPUl9MTTM2M1hcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNTE0LVx0dHJpc3RhdGUgXCYjMzQ7VEkgTE0zNjNYIHZvbHRhZ2UgcmVndWxhdG9yc1wmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNTIxLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo1MjI6Y29uZmlnIFJFR1VMQVRPUl9MT0NITkFHQVJcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNTIzLVx0dHJpc3RhdGUgXCYjMzQ7Q2lycnVzIExvZ2ljIExvY2huYWdhciByZWd1bGF0b3IgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy01MjgtXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjUyOTpjb25maWcgUkVHVUxBVE9SX0xQMzk3MVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy01MzAtXHR0cmlzdGF0ZSBcJiMzNDtOYXRpb25hbCBTZW1pY29uZHVjdG9ycyBMUDM5NzEgUE1JQyByZWd1bGF0b3IgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy01MzUtXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjUzNjpjb25maWcgUkVHVUxBVE9SX0xQMzk3MlxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy01MzctXHR0cmlzdGF0ZSBcJiMzNDtOYXRpb25hbCBTZW1pY29uZHVjdG9ycyBMUDM5NzIgUE1JQyByZWd1bGF0b3IgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy01NDItXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjU0Mzpjb25maWcgUkVHVUxBVE9SX0xQODcyWFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy01NDQtXHR0cmlzdGF0ZSBcJiMzNDtUSS9OYXRpb25hbCBTZW1pY29uZHVjdG9yIExQODcyMC9MUDg3MjUgdm9sdGFnZSByZWd1bGF0b3JzXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy01NDktXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjU1MDpjb25maWcgUkVHVUxBVE9SX0xQODczWFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy01NTEtXHR0cmlzdGF0ZSBcJiMzNDtUSSBMUDg3M1ggUG93ZXIgcmVndWxhdG9yc1wmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNTU4LVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo1NTk6Y29uZmlnIFJFR1VMQVRPUl9MUDg3NTVcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNTYwLVx0dHJpc3RhdGUgXCYjMzQ7VEkgTFA4NzU1IEhpZ2ggUGVyZm9ybWFuY2UgUE1VIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNTY3LVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo1Njg6Y29uZmlnIFJFR1VMQVRPUl9MUDg3NTY1XG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTU2OS1cdHRyaXN0YXRlIFwmIzM0O1RJIExQODc1NjUgUG93ZXIgcmVndWxhdG9yc1wmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNTc1LVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo1NzY6Y29uZmlnIFJFR1VMQVRPUl9MUDg3ODhcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNTc3LVx0dHJpc3RhdGUgXCYjMzQ7VEkgTFA4Nzg4IFBvd2VyIFJlZ3VsYXRvcnNcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTU4MS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NTgyOmNvbmZpZyBSRUdVTEFUT1JfTFRDMzU4OVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy01ODMtXHR0cmlzdGF0ZSBcJiMzNDtMVEMzNTg5IDgtb3V0cHV0IHZvbHRhZ2UgcmVndWxhdG9yXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy01ODktXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjU5MDpjb25maWcgUkVHVUxBVE9SX0xUQzM2NzZcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNTkxLVx0dHJpc3RhdGUgXCYjMzQ7TFRDMzY3NiA4LW91dHB1dCB2b2x0YWdlIHJlZ3VsYXRvclwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNTk3LVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo1OTg6Y29uZmlnIFJFR1VMQVRPUl9NQVgxNDU3N1xuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy01OTktXHR0cmlzdGF0ZSBcJiMzNDtNYXhpbSAxNDU3Ny83NzgzNiByZWd1bGF0b3JcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTYwNS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NjA2OmNvbmZpZyBSRUdVTEFUT1JfTUFYMTU4NlxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy02MDctXHR0cmlzdGF0ZSBcJiMzNDtNYXhpbSAxNTg2LzE1ODcgdm9sdGFnZSByZWd1bGF0b3JcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTYxMy1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NjE0OmNvbmZpZyBSRUdVTEFUT1JfTUFYNTk3MFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy02MTUtXHR0cmlzdGF0ZSBcJiMzNDtNYXhpbSA1OTcwLzU5NzggcG93ZXIgc3dpdGNoIGFuZCBtb25pdG9yXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy02MjMtXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjYyNDpjb25maWcgUkVHVUxBVE9SX01BWDc3NTAzXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTYyNS1cdHRyaXN0YXRlIFwmIzM0O0FuYWxvZyBEZXZpY2VzIE1BWDc3NTAzIFJlZ3VsYXRvclwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNjMzLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo2MzQ6Y29uZmlnIFJFR1VMQVRPUl9NQVg3NzU0MVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy02MzUtXHR0cmlzdGF0ZSBcJiMzNDtBbmFsb2cgRGV2aWNlcyBNQVg3NzU0MS83NzU0MCBSZWd1bGF0b3JcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTY0NC1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NjQ1OmNvbmZpZyBSRUdVTEFUT1JfTUFYNzc2MjBcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNjQ2LVx0dHJpc3RhdGUgXCYjMzQ7TWF4aW0gNzc2MjAvTUFYMjAwMjQgdm9sdGFnZSByZWd1bGF0b3JcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTY1My1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NjU0OmNvbmZpZyBSRUdVTEFUT1JfTUFYNzc2NTBcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNjU1LVx0dHJpc3RhdGUgXCYjMzQ7TWF4aW0gTUFYNzc2NTAvNzc2NTEgcmVndWxhdG9yIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTY2MS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NjYyOmNvbmZpZyBSRUdVTEFUT1JfTUFYNzc2NzVcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNjYzLVx0dHJpc3RhdGUgXCYjMzQ7TWF4aW0gTUFYNzc2NzUgcmVndWxhdG9yIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNjcwLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo2NzE6Y29uZmlnIFJFR1VMQVRPUl9NQVg3Nzg1N1xuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy02NzItXHR0cmlzdGF0ZSBcJiMzNDtBREkgTUFYNzc4NTcvTUFYNzc4MzEgcmVndWxhdG9yIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTY4MC1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NjgxOmNvbmZpZyBSRUdVTEFUT1JfTUFYODY0OVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy02ODItXHR0cmlzdGF0ZSBcJiMzNDtNYXhpbSA4NjQ5IHZvbHRhZ2UgcmVndWxhdG9yXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy02ODgtXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjY4OTpjb25maWcgUkVHVUxBVE9SX01BWDg2NjBcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNjkwLVx0dHJpc3RhdGUgXCYjMzQ7TWF4aW0gODY2MC84NjYxIHZvbHRhZ2UgcmVndWxhdG9yXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy02OTUtXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjY5Njpjb25maWcgUkVHVUxBVE9SX01BWDg4OTNcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNjk3LVx0dHJpc3RhdGUgXCYjMzQ7TWF4aW0gODg5MyB2b2x0YWdlIHJlZ3VsYXRvclwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNzAzLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo3MDQ6Y29uZmlnIFJFR1VMQVRPUl9NQVg4OTA3XG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTcwNS1cdHRyaXN0YXRlIFwmIzM0O01heGltIDg5MDcgdm9sdGFnZSByZWd1bGF0b3JcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTcxMS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NzEyOmNvbmZpZyBSRUdVTEFUT1JfTUFYODkyNVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy03MTMtXHR0cmlzdGF0ZSBcJiMzNDtNYXhpbSBNQVg4OTI1IFBvd2VyIE1hbmFnZW1lbnQgSUNcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTcxNy1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NzE4OmNvbmZpZyBSRUdVTEFUT1JfTUFYODk1MlxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy03MTktXHR0cmlzdGF0ZSBcJiMzNDtNYXhpbSBNQVg4OTUyIFBvd2VyIE1hbmFnZW1lbnQgSUNcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTcyNS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NzI2OmNvbmZpZyBSRUdVTEFUT1JfTUFYODk3M1xuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy03MjctXHR0cmlzdGF0ZSBcJiMzNDtNYXhpbSBNQVg4OTczQSB2b2x0YWdlIHJlZ3VsYXRvclwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNzM2LVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo3Mzc6Y29uZmlnIFJFR1VMQVRPUl9NQVg4OTk3XG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTczOC1cdHRyaXN0YXRlIFwmIzM0O01heGltIDg5OTcvODk2NiByZWd1bGF0b3JcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTc0NS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NzQ2OmNvbmZpZyBSRUdVTEFUT1JfTUFYODk5OFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy03NDctXHR0cmlzdGF0ZSBcJiMzNDtNYXhpbSA4OTk4IHZvbHRhZ2UgcmVndWxhdG9yXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy03NTMtXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjc1NDpjb25maWcgUkVHVUxBVE9SX01BWDIwMDg2XG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTc1NS1cdHRyaXN0YXRlIFwmIzM0O01heGltIE1BWDIwMDg2LU1BWDIwMDg5IENhbWVyYSBQb3dlciBQcm90ZWN0b3JzXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy03NjItXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjc2Mzpjb25maWcgUkVHVUxBVE9SX01BWDIwNDExXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTc2NC1cdHRyaXN0YXRlIFwmIzM0O01heGltIE1BWDIwNDExIEhpZ2gtRWZmaWNpZW5jeSBTaW5nbGUgU3RlcC1Eb3duIENvbnZlcnRlclwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNzcwLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo3NzE6Y29uZmlnIFJFR1VMQVRPUl9NQVg3NzY4NlxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy03NzItXHR0cmlzdGF0ZSBcJiMzNDtNYXhpbSA3NzY4NiByZWd1bGF0b3JcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTc3OC1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6Nzc5OmNvbmZpZyBSRUdVTEFUT1JfTUFYNzc2OTNcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNzgwLVx0dHJpc3RhdGUgXCYjMzQ7TWF4aW0gNzc2OTMvNzc4NDMgcmVndWxhdG9yXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy03ODctXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjc4ODpjb25maWcgUkVHVUxBVE9SX01BWDc3ODAyXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTc4OS1cdHRyaXN0YXRlIFwmIzM0O01heGltIDc3ODAyIHJlZ3VsYXRvclwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNzk2LVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo3OTc6Y29uZmlnIFJFR1VMQVRPUl9NQVg3NzgyNlxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy03OTgtXHR0cmlzdGF0ZSBcJiMzNDtNYXhpbSA3NzgyNiByZWd1bGF0b3JcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTgwNi1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6ODA3OmNvbmZpZyBSRUdVTEFUT1JfTUFYNzc4MzhcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctODA4LVx0dHJpc3RhdGUgXCYjMzQ7TWF4aW0gNzc4MzggcmVndWxhdG9yXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy04MTUtXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjgxNjpjb25maWcgUkVHVUxBVE9SX01DMTNYWFhfQ09SRVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy04MTctXHR0cmlzdGF0ZVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy04MTgtXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjgxOTpjb25maWcgUkVHVUxBVE9SX01DMTM3ODNcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctODIwLVx0dHJpc3RhdGUgXCYjMzQ7RnJlZXNjYWxlIE1DMTM3ODMgcmVndWxhdG9yIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctODI2LVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo4Mjc6Y29uZmlnIFJFR1VMQVRPUl9NQzEzODkyXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTgyOC1cdHRyaXN0YXRlIFwmIzM0O0ZyZWVzY2FsZSBNQzEzODkyIHJlZ3VsYXRvciBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTgzNC1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6ODM1OmNvbmZpZyBSRUdVTEFUT1JfTUNQMTY1MDJcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctODM2LVx0dHJpc3RhdGUgXCYjMzQ7TWljcm9jaGlwIE1DUDE2NTAyIFBNSUNcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTg0NC1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6ODQ1OmNvbmZpZyBSRUdVTEFUT1JfTVA1NDE2XG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTg0Ni1cdHRyaXN0YXRlIFwmIzM0O01vbm9saXRoaWMgTVA1NDE2IFBNSUNcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTg1NC1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6ODU1OmNvbmZpZyBSRUdVTEFUT1JfTVA4ODU5XG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTg1Ni1cdHRyaXN0YXRlIFwmIzM0O01QUyBNUDg4NTkgcmVndWxhdG9yIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctODY1LVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo4NjY6Y29uZmlnIFJFR1VMQVRPUl9NUDg4NlhcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctODY3LVx0dHJpc3RhdGUgXCYjMzQ7TVBTIE1QODg2OSByZWd1bGF0b3IgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy04NzItXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjg3Mzpjb25maWcgUkVHVUxBVE9SX01QUTc5MjBcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctODc0LVx0dHJpc3RhdGUgXCYjMzQ7TW9ub2xpdGhpYyBNUFE3OTIwIFBNSUNcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTg4Mi1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6ODgzOmNvbmZpZyBSRUdVTEFUT1JfTVQ2MzExXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTg4NC1cdHRyaXN0YXRlIFwmIzM0O01lZGlhVGVrIE1UNjMxMSBQTUlDXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy04OTItXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjg5Mzpjb25maWcgUkVHVUxBVE9SX01UNjMxNVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy04OTQtXHR0cmlzdGF0ZSBcJiMzNDtNZWRpYVRlayBNVDYzMTUgUE1JQ1wmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctOTAyLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo5MDM6Y29uZmlnIFJFR1VMQVRPUl9NVDYzMTZcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctOTA0LVx0dHJpc3RhdGUgXCYjMzQ7TVQ2MzE2IFNQTUkgUE1JQyByZWd1bGF0b3IgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy05MTItXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjkxMzpjb25maWcgUkVHVUxBVE9SX01UNjMyM1xuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy05MTQtXHR0cmlzdGF0ZSBcJiMzNDtNZWRpYVRlayBNVDYzMjMgUE1JQ1wmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctOTIxLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo5MjI6Y29uZmlnIFJFR1VMQVRPUl9NVDYzMzFcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctOTIzLVx0dHJpc3RhdGUgXCYjMzQ7TWVkaWFUZWsgTVQ2MzMxIFBNSUNcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTkzMC1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6OTMxOmNvbmZpZyBSRUdVTEFUT1JfTVQ2MzMyXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTkzMi1cdHRyaXN0YXRlIFwmIzM0O01lZGlhVGVrIE1UNjMzMiBQTUlDXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy05MzktXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjk0MDpjb25maWcgUkVHVUxBVE9SX01UNjM1N1xuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy05NDEtXHR0cmlzdGF0ZSBcJiMzNDtNZWRpYVRlayBNVDYzNTcgUE1JQ1wmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctOTQ4LVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo5NDk6Y29uZmlnIFJFR1VMQVRPUl9NVDYzNThcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctOTUwLVx0dHJpc3RhdGUgXCYjMzQ7TWVkaWFUZWsgTVQ2MzU4IFBNSUNcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTk1Ny1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6OTU4OmNvbmZpZyBSRUdVTEFUT1JfTVQ2MzU5XG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTk1OS1cdHRyaXN0YXRlIFwmIzM0O01lZGlhVGVrIE1UNjM1OSBQTUlDXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy05NjYtXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjk2Nzpjb25maWcgUkVHVUxBVE9SX01UNjM2MFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy05NjgtXHR0cmlzdGF0ZSBcJiMzNDtNVDYzNjAgU3ViUE1JQyBSZWd1bGF0b3JcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTk3NS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6OTc2OmNvbmZpZyBSRUdVTEFUT1JfTVQ2MzYzXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTk3Ny1cdHRyaXN0YXRlIFwmIzM0O01UNjM2MyBTUE1JIFBNSUMgcmVndWxhdG9yIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctOTg2LVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo5ODc6Y29uZmlnIFJFR1VMQVRPUl9NVDYzNzBcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctOTg4LVx0dHJpc3RhdGUgXCYjMzQ7TVQ2MzcwIFN1YlBNSUMgUmVndWxhdG9yXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy05OTQtXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjk5NTpjb25maWcgUkVHVUxBVE9SX01UNjM4MFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy05OTYtXHR0cmlzdGF0ZSBcJiMzNDtNZWRpYVRlayBNVDYzODAgUE1JQ1wmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTAwMy1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MTAwNDpjb25maWcgUkVHVUxBVE9SX01UNjM5N1xuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xMDA1LVx0dHJpc3RhdGUgXCYjMzQ7TWVkaWFUZWsgTVQ2Mzk3IFBNSUNcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTEwMTItXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjEwMTM6Y29uZmlnIFJFR1VMQVRPUl9NVEtfRFZGU1JDXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTEwMTQtXHR0cmlzdGF0ZSBcJiMzNDtNZWRpYVRlayBEVkZTUkMgcmVndWxhdG9yIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTAyMi1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MTAyMzpjb25maWcgUkVHVUxBVE9SX1BBTE1BU1xuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xMDI0LVx0dHJpc3RhdGUgXCYjMzQ7VEkgUGFsbWFzIFBNSUMgUmVndWxhdG9yc1wmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTAzNC1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MTAzNTpjb25maWcgUkVHVUxBVE9SX1BCSUFTXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTEwMzYtXHR0cmlzdGF0ZSBcJiMzNDtQQklBUyBPTUFQIHJlZ3VsYXRvciBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTEwNDMtXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjEwNDQ6Y29uZmlnIFJFR1VMQVRPUl9QQ0E5NDUwXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTEwNDUtXHR0cmlzdGF0ZSBcJiMzNDtOWFAgUENBOTQ1MEEvUENBOTQ1MEIvUENBOTQ1MEMgcmVndWxhdG9yIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTA1MS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MTA1Mjpjb25maWcgUkVHVUxBVE9SX1BGOTQ1M1xuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xMDUzLVx0dHJpc3RhdGUgXCYjMzQ7TlhQIFBGOTQ1MyByZWd1bGF0b3IgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xMDU4LVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzoxMDU5OmNvbmZpZyBSRUdVTEFUT1JfUEYwOTAwXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTEwNjAtXHR0cmlzdGF0ZSBcJiMzNDtOWFAgUEYwOTAwL1BGMDkwMS9QRjA5WFggcmVndWxhdG9yIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTA2Ni1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MTA2Nzpjb25maWcgUkVHVUxBVE9SX1BGNTMwWFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xMDY4LVx0dHJpc3RhdGUgXCYjMzQ7TlhQIFBGNTMwMC9QRjUzMDEvUEY1MzAyIHJlZ3VsYXRvciBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTEwNzgtXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjEwNzk6Y29uZmlnIFJFR1VMQVRPUl9QRjhYMDBcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTA4MC1cdHRyaXN0YXRlIFwmIzM0O05YUCBQRjgxMDAvUEY4MTIxQS9QRjgyMDAgcmVndWxhdG9yIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTA5MC1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MTA5MTpjb25maWcgUkVHVUxBVE9SX1BGVVpFMTAwXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTEwOTItXHR0cmlzdGF0ZSBcJiMzNDtGcmVlc2NhbGUgUEZVWkUxMDAvMjAwLzMwMDAvMzAwMSByZWd1bGF0b3IgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xMDk4LVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzoxMDk5OmNvbmZpZyBSRUdVTEFUT1JfUFY4ODA2MFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xMTAwLVx0dHJpc3RhdGUgXCYjMzQ7UG93ZXJ2ZW50dXJlIFNlbWljb25kdWN0b3IgUFY4ODA2MCByZWd1bGF0b3JcJiMzNDtcbi0tXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTExMDYtXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjExMDc6Y29uZmlnIFJFR1VMQVRPUl9QVjg4MDgwXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTExMDgtXHR0cmlzdGF0ZSBcJiMzNDtQb3dlcnZlbnR1cmUgU2VtaWNvbmR1Y3RvciBQVjg4MDgwIHJlZ3VsYXRvclwmIzM0O1xuLS1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTExMy1cbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MTExNDpjb25maWcgUkVHVUxBVE9SX1BWODgwOTBcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTExNS1cdHRyaXN0YXRlIFwmIzM0O1Bvd2VydmVudHVyZSBTZW1pY29uZHVjdG9yIFBWODgwOTAgcmVndWxhdG9yXCYjMzQ7XG4tLVxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xMTIxLVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNzA1CgkJCQkJCQlvdXRwdXQ6IDI5MwoJCQkJCQkJdGhvdWdodHM6IDMxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlIENoYW5nZXMqKgoKT2theSwgYWZ0ZXIgcmV2aWV3aW5nIHRoaXMsIG15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBjb25maXJtZWQ6IGBSRUdVTEFUT1JgIGlzIGluZGVlZCB0aGUgY29ycmVjdCBjb21wb25lbnQgdG8gZm9jdXMgb24gaGVyZS4gVGhlIGNoYW5nZXMgYXJlIGNlbnRlcmVkIGFyb3VuZCB0aGUgUFNFIGNvbnRyb2xsZXImIzM5O3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgUEhZIGRldmljZSwgaW50cm9kdWNpbmcgYSBuZXcgbG9ja2luZyBtZWNoYW5pc20gKGBwaHlfcHNlX2xvY2tgKSBhbmQgYSBub3RpZmllciAoYHBoeV9wc2Vfbm90aWZpZXJgKSB0byBtYW5hZ2UgUFNFIGNvbnRyb2xsZXIgcmVnaXN0cmF0aW9uIGFuZCB1bnJlZ2lzdHJhdGlvbi4gVGhpcyBpbXBhY3RzIGJvdGggdGhlIGNvcmUgUEhZIGxpYnJhcnkgYW5kIGV0aHRvb2wsIGFuZCBzaW5jZSBuZXRsaW5rIGFuZCBQSFkgZGV2aWNlIHJlZ2lzdHJhdGlvbiBwYXRocyBhcmUgaW52b2x2ZWQsIHRoZSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UgaXMgZGVmaW5pdGVseSBwcmVzZW50IGluIHZpcnR1YWxpemVkIHNldHVwcy4KClRoZSBrZXkgY29uZmlndXJhdGlvbnMgdG8gY29uc2lkZXIgaGVyZSBhcmU6IGBQU0VfQ09OVFJPTExFUmAsIGBQU0VfUkVHVUxBVE9SYCwgYFJFR1VMQVRPUmAsIGBTRlBgLCBhbmQgYEZXTk9ERV9NRElPYC4gVGhlc2UgYWxsIHNlZW0gdG8gYmUgcmVsZXZhbnQgdG8gdGhlIGNoYW5nZXMgYmVpbmcgaW50cm9kdWNlZC4KCkkgd2VudCB0aHJvdWdoIHRoZSBgRm9jdXNTeW1ib2xzYCB0byBkb3VibGUtY2hlY2sgbXkgdW5kZXJzdGFuZGluZyBhbmQgYWxsIG9mIHRoZW0gLSBgcGh5X3BzZV9jb250cm9sX2xvY2tgLCBgcGh5X3BzZV9jb250cm9sX3VubG9ja2AsIGBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZGAsIGBwaHlfZGV2aWNlX3JlZ2lzdGVyYCwgYHBoeV9kZXZpY2VfcmVtb3ZlYCwgYHBzZV9yZWdpc3Rlcl9ub3RpZmllcmAsIGBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcmAsIGBwc2VfY29udHJvbGxlcl9yZWdpc3RlcmAsIGBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyYCwgYHBzZV9jb250cm9sX21hdGNoZXNfcGNkZXZgLCBgZXRobmxfc2V0X3BzZWAsIGBwc2VfcHJlcGFyZV9kYXRhYCwgYHBoeV9wc2VfYXR0YWNoX29uZWAsIGBwaHlfcHNlX2RldGFjaF9vbmVgLCBhbmQgYHBoeV9wc2Vfbm90aWZpZXJfZXZlbnRgIC0gYWxsIHNlZW0gdmFsaWQgYW5kIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIG5ldyBsb2NraW5nIGFuZCBub3RpZmljYXRpb24gbWVjaGFuaXNtcy4KCkFscmlnaHQsIEkmIzM5O20gY29uZmlkZW50IGluIHRoaXMgYW5hbHlzaXMuIFRpbWUgdG8gZmluYWxpemUgdGhlIHJlc3VsdHMgYW5kIG1vdmUgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQU0VfQ09OVFJPTExFUiYjMzQ7LAogICAgJiMzNDtQU0VfUkVHVUxBVE9SJiMzNDssCiAgICAmIzM0O1JFR1VMQVRPUiYjMzQ7LAogICAgJiMzNDtTRlAmIzM0OywKICAgICYjMzQ7RldOT0RFX01ESU8mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwaHlfcHNlX2NvbnRyb2xfbG9jayYjMzQ7LAogICAgJiMzNDtwaHlfcHNlX2NvbnRyb2xfdW5sb2NrJiMzNDssCiAgICAmIzM0O3BoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkJiMzNDssCiAgICAmIzM0O3BoeV9kZXZpY2VfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7cGh5X2RldmljZV9yZW1vdmUmIzM0OywKICAgICYjMzQ7cHNlX3JlZ2lzdGVyX25vdGlmaWVyJiMzNDssCiAgICAmIzM0O3BzZV91bnJlZ2lzdGVyX25vdGlmaWVyJiMzNDssCiAgICAmIzM0O3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O3BzZV9jb250cm9sbGVyX3VucmVnaXN0ZXImIzM0OywKICAgICYjMzQ7cHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldiYjMzQ7LAogICAgJiMzNDtldGhubF9zZXRfcHNlJiMzNDssCiAgICAmIzM0O3BzZV9wcmVwYXJlX2RhdGEmIzM0OywKICAgICYjMzQ7cGh5X3BzZV9hdHRhY2hfb25lJiMzNDssCiAgICAmIzM0O3BoeV9wc2VfZGV0YWNoX29uZSYjMzQ7LAogICAgJiMzNDtwaHlfcHNlX25vdGlmaWVyX2V2ZW50JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgaG93IHRoZSBQU0UgY29udHJvbGxlciBpcyBhdHRhY2hlZCB0byB0aGUgUEhZIGRldmljZSwgaW50cm9kdWNpbmcgYSBuZXcgbG9jayAoYHBoeV9wc2VfbG9ja2ApIGFuZCBhIG5vdGlmaWVyIChgcGh5X3BzZV9ub3RpZmllcmApIHRvIGhhbmRsZSBQU0UgY29udHJvbGxlciByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uLiBJdCBhbHNvIG1vZGlmaWVzIHRoZSBldGh0b29sIFBTRSBuZXRsaW5rIGludGVyZmFjZSB0byB1c2UgdGhlIG5ldyBsb2NrLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCB0aGUgY29yZSBQSFkgbGlicmFyeSBhbmQgZXRodG9vbCwgYW5kIGFyZSByZWFjaGFibGUgdmlhIG5ldGxpbmsgYW5kIFBIWSBkZXZpY2UgcmVnaXN0cmF0aW9uIHBhdGhzLCB3aGljaCBjYW4gYmUgdHJpZ2dlcmVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFNFX0NPTlRST0xMRVImIzM0OywKICAgICYjMzQ7UFNFX1JFR1VMQVRPUiYjMzQ7LAogICAgJiMzNDtSRUdVTEFUT1ImIzM0OywKICAgICYjMzQ7U0ZQJiMzNDssCiAgICAmIzM0O0ZXTk9ERV9NRElPJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGh5X3BzZV9jb250cm9sX2xvY2smIzM0OywKICAgICYjMzQ7cGh5X3BzZV9jb250cm9sX3VubG9jayYjMzQ7LAogICAgJiMzNDtwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZCYjMzQ7LAogICAgJiMzNDtwaHlfZGV2aWNlX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O3BoeV9kZXZpY2VfcmVtb3ZlJiMzNDssCiAgICAmIzM0O3BzZV9yZWdpc3Rlcl9ub3RpZmllciYjMzQ7LAogICAgJiMzNDtwc2VfdW5yZWdpc3Rlcl9ub3RpZmllciYjMzQ7LAogICAgJiMzNDtwc2VfY29udHJvbGxlcl9yZWdpc3RlciYjMzQ7LAogICAgJiMzNDtwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyJiMzNDssCiAgICAmIzM0O3BzZV9jb250cm9sX21hdGNoZXNfcGNkZXYmIzM0OywKICAgICYjMzQ7ZXRobmxfc2V0X3BzZSYjMzQ7LAogICAgJiMzNDtwc2VfcHJlcGFyZV9kYXRhJiMzNDssCiAgICAmIzM0O3BoeV9wc2VfYXR0YWNoX29uZSYjMzQ7LAogICAgJiMzNDtwaHlfcHNlX2RldGFjaF9vbmUmIzM0OywKICAgICYjMzQ7cGh5X3BzZV9ub3RpZmllcl9ldmVudCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIGhvdyB0aGUgUFNFIGNvbnRyb2xsZXIgaXMgYXR0YWNoZWQgdG8gdGhlIFBIWSBkZXZpY2UsIGludHJvZHVjaW5nIGEgbmV3IGxvY2sgKGBwaHlfcHNlX2xvY2tgKSBhbmQgYSBub3RpZmllciAoYHBoeV9wc2Vfbm90aWZpZXJgKSB0byBoYW5kbGUgUFNFIGNvbnRyb2xsZXIgcmVnaXN0cmF0aW9uIGFuZCB1bnJlZ2lzdHJhdGlvbi4gSXQgYWxzbyBtb2RpZmllcyB0aGUgZXRodG9vbCBQU0UgbmV0bGluayBpbnRlcmZhY2UgdG8gdXNlIHRoZSBuZXcgbG9jay4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIGNvcmUgUEhZIGxpYnJhcnkgYW5kIGV0aHRvb2wsIGFuZCBhcmUgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIGFuZCBQSFkgZGV2aWNlIHJlZ2lzdHJhdGlvbiBwYXRocywgd2hpY2ggY2FuIGJlIHRyaWdnZXJlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjEyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6MTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyB0aGUgbGlmZWN5Y2xlIGFuZCBzeW5jaHJvbml6YXRpb24gb2YgUFNFIChQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQpIGNvbnRyb2xsZXJzIGF0dGFjaGVkIHRvIFBIWSBkZXZpY2VzLiBJdCBpbnRyb2R1Y2VzIGEgbm90aWZpZXIgY2hhaW4gKGBwaHlfcHNlX25vdGlmaWVyYCkgYW5kIGEgbXV0ZXggKGBwaHlfcHNlX2xvY2tgKSB0byBzYWZlbHkgYXR0YWNoIGFuZCBkZXRhY2ggYHBoeWRldi1cdTAwM2Vwc2VjYCB3aGVuIFBTRSBjb250cm9sbGVycyBhcmUgcmVnaXN0ZXJlZCBvciB1bnJlZ2lzdGVyZWQsIHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzLiBJdCBhbHNvIHdyYXBzIGV0aHRvb2wgUFNFIG9wZXJhdGlvbnMgd2l0aCB0aGUgbmV3IGxvY2suXG5cblRoZXNlIGNoYW5nZXMgcHJpbWFyaWx5IGFkZHJlc3Mgb2JqZWN0IGxpZmVjeWNsZSBtYW5hZ2VtZW50LCBsb2NraW5nLCBhbmQgc3luY2hyb25pemF0aW9uLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbGlrZWx5IG1hbmlmZXN0IGFzIHVzZS1hZnRlci1mcmVlLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBkZWFkbG9ja3MsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGludm9sdmUgY29tcGxleCBidWZmZXIgYWxsb2NhdGlvbnMgb3IgbW9kaWZpY2F0aW9ucyB0byBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDY2OGQwOTNiMDlmZjBlNDJiYjRhYjM5OWQxNGUyYWEwMDA3YmE1Y2QKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAyNiAyMjoxMDozOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYyBiL2RyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYwppbmRleCBiYTcwOTE1MTgyNjU0Li43YmQ5NzliNTlmNDk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jCkBAIC0xMSwzMyAmIzQzOzExLDExIEBACiAjaW5jbHVkZSAmbHQ7bGludXgvZndub2RlX21kaW8uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9vZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwotI2luY2x1ZGUgJmx0O2xpbnV4L3BzZS1wZC9wc2UuaCZndDsKIAogTU9EVUxFX0FVVEhPUigmIzM0O0NhbHZpbiBKb2huc29uICZsdDtjYWx2aW4uam9obnNvbkBvc3MubnhwLmNvbSZndDsmIzM0Oyk7CiBNT0RVTEVfTElDRU5TRSgmIzM0O0dQTCYjMzQ7KTsKIE1PRFVMRV9ERVNDUklQVElPTigmIzM0O0ZXTk9ERSBNRElPIGJ1cyAoRXRoZXJuZXQgUEhZKSBhY2Nlc3NvcnMmIzM0Oyk7CiAKLXN0YXRpYyBzdHJ1Y3QgcHNlX2NvbnRyb2wgKgotZndub2RlX2ZpbmRfcHNlX2NvbnRyb2woc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSwKLQkJCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCi17Ci0Jc3RydWN0IHBzZV9jb250cm9sICpwc2VjOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7Ci0KLQlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BTRV9DT05UUk9MTEVSKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlucCA9IHRvX29mX25vZGUoZndub2RlKTsKLQlpZiAoIW5wKQotCQlyZXR1cm4gTlVMTDsKLQotCXBzZWMgPSBvZl9wc2VfY29udHJvbF9nZXQobnAsIHBoeWRldik7Ci0JaWYgKFBUUl9FUlIocHNlYykgPT0gLUVOT0VOVCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlyZXR1cm4gcHNlYzsKLX0KLQogc3RhdGljIHN0cnVjdCBtaWlfdGltZXN0YW1wZXIgKgogZndub2RlX2ZpbmRfbWlpX3RpbWVzdGFtcGVyKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpCiB7CkBAIC0xMTgsNyAmIzQzOzk2LDYgQEAgaW50IGZ3bm9kZV9tZGlvYnVzX3JlZ2lzdGVyX3BoeShzdHJ1Y3QgbWlpX2J1cyAqYnVzLAogCQkJCXN0cnVjdCBmd25vZGVfaGFuZGxlICpjaGlsZCwgdTMyIGFkZHIpCiB7CiAJc3RydWN0IG1paV90aW1lc3RhbXBlciAqbWlpX3RzID0gTlVMTDsKLQlzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMgPSBOVUxMOwogCXN0cnVjdCBwaHlfZGV2aWNlICpwaHk7CiAJYm9vbCBpc19jNDU7CiAJdTMyIHBoeV9pZDsKQEAgLTE1OSwxNCAmIzQzOzEzNiw2IEBAIGludCBmd25vZGVfbWRpb2J1c19yZWdpc3Rlcl9waHkoc3RydWN0IG1paV9idXMgKmJ1cywKIAkJCWdvdG8gY2xlYW5fcGh5OwogCX0KIAotCXBzZWMgPSBmd25vZGVfZmluZF9wc2VfY29udHJvbChjaGlsZCwgcGh5KTsKLQlpZiAoSVNfRVJSKHBzZWMpKSB7Ci0JCXJjID0gUFRSX0VSUihwc2VjKTsKLQkJZ290byB1bnJlZ2lzdGVyX3BoeTsKLQl9Ci0KLQlwaHktJmd0O3BzZWMgPSBwc2VjOwotCiAJLyogcGh5LSZndDttaWlfdHMgbWF5IGFscmVhZHkgYmUgZGVmaW5lZCBieSB0aGUgUEhZIGRyaXZlci4gQQogCSAqIG1paV90aW1lc3RhbXBlciBwcm9iZWQgdmlhIHRoZSBkZXZpY2UgdHJlZSB3aWxsIHN0aWxsIGhhdmUKIAkgKiBwcmVjZWRlbmNlLgpAQCAtMTc2LDkgJiM0MzsxNDUsNiBAQCBpbnQgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KHN0cnVjdCBtaWlfYnVzICpidXMsCiAKIAlyZXR1cm4gMDsKIAotdW5yZWdpc3Rlcl9waHk6Ci0JaWYgKGlzX2FjcGlfbm9kZShjaGlsZCkgfHwgaXNfb2Zfbm9kZShjaGlsZCkpCi0JCXBoeV9kZXZpY2VfcmVtb3ZlKHBoeSk7CiBjbGVhbl9waHk6CiAJcGh5X2RldmljZV9mcmVlKHBoeSk7CiBjbGVhbl9taWlfdHM6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYwppbmRleCAwNjE1MjI4NDU5ZWY0Li5kY2ExYjQ1YmJiZDI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMKQEAgLTExMDIsMTEgJiM0MzsxMTAyLDEyOCBAQCBzdHJ1Y3QgcGh5X2RldmljZSAqZ2V0X3BoeV9kZXZpY2Uoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGJvb2wgaXNfYzQ1KQogfQogRVhQT1JUX1NZTUJPTChnZXRfcGh5X2RldmljZSk7CiAKJiM0MzsvKiBTZXJpYWxpc2VzIHBoeWRldi0mZ3Q7cHNlYyBhZ2FpbnN0IHRoZSBQU0Ugbm90aWZpZXIgYW5kIGV0aHRvb2wsIG5vdCBydG5sLiAqLwomIzQzO3N0YXRpYyBERUZJTkVfTVVURVgocGh5X3BzZV9sb2NrKTsKJiM0MzsKJiM0MzsvKiBCZXN0LWVmZm9ydCBhdHRhY2ggb2YgcGh5ZGV2LSZndDtwc2VjIGZyb20gYSBEVCBgcHNlcyA9ICZsdDsmYW1wOy4uLiZndDtgIHBoYW5kbGUuCiYjNDM7ICogQ2FsbGVyIG11c3QgaG9sZCBwaHlfcHNlX2xvY2suIEEgbWlzc2luZyBwaGFuZGxlICgtRU5PRU5UKSBvciBhCiYjNDM7ICogbm90LXlldC1yZWdpc3RlcmVkIGNvbnRyb2xsZXIgKC1FUFJPQkVfREVGRVIpIGlzIHNpbGVudDsgdGhlIG5vdGlmaWVyCiYjNDM7ICogcmV0cmllcyB0aGUgbGF0dGVyIGF0IFBTRV9SRUdJU1RFUkVEIHRpbWUuIEFueSBvdGhlciBlcnJvciBtZWFucyBhIGJyb2tlbgomIzQzOyAqIGJpbmRpbmcgYW5kIGlzIHdhcm5lZCBhYm91dCwgYnV0IGxlZnQgbm9uLWZhdGFsIHNvIHRoZSBwaHkgc3RpbGwgcmVnaXN0ZXJzLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHBoeV90cnlfYXR0YWNoX3BzZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHBzZV9jb250cm9sICpwc2VjOwomIzQzOwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwomIzQzOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7cGh5X3BzZV9sb2NrKTsKJiM0MzsKJiM0MzsJbnAgPSBwaHlkZXYtJmd0O21kaW8uZGV2Lm9mX25vZGU7CiYjNDM7CWlmICghbnApCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmIChwaHlkZXYtJmd0O3BzZWMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXBzZWMgPSBvZl9wc2VfY29udHJvbF9nZXQobnAsIHBoeWRldik7CiYjNDM7CWlmIChJU19FUlIocHNlYykpIHsKJiM0MzsJCWlmIChQVFJfRVJSKHBzZWMpICE9IC1FUFJPQkVfREVGRVIgJmFtcDsmYW1wOyBQVFJfRVJSKHBzZWMpICE9IC1FTk9FTlQpCiYjNDM7CQkJcGh5ZGV2X3dhcm4ocGh5ZGV2LCAmIzM0O2ZhaWxlZCB0byBnZXQgUFNFIGNvbnRyb2w6ICVwZVxuJiMzNDssCiYjNDM7CQkJCSAgICBwc2VjKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlwaHlkZXYtJmd0O3BzZWMgPSBwc2VjOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBoeV9wc2VfYXR0YWNoX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEgX19tYXliZV91bnVzZWQpCiYjNDM7ewomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7cGh5X3BzZV9sb2NrKTsKJiM0MzsKJiM0MzsJaWYgKGRldi0mZ3Q7dHlwZSAhPSAmYW1wO21kaW9fYnVzX3BoeV90eXBlKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXBoeV90cnlfYXR0YWNoX3BzZSh0b19waHlfZGV2aWNlKGRldikpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBwaHlfcHNlX2RldGFjaF9vbmUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYgPSBkYXRhOwomIzQzOwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2OwomIzQzOwlzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWM7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtwaHlfcHNlX2xvY2spOwomIzQzOwomIzQzOwlpZiAoZGV2LSZndDt0eXBlICE9ICZhbXA7bWRpb19idXNfcGh5X3R5cGUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcGh5ZGV2ID0gdG9fcGh5X2RldmljZShkZXYpOwomIzQzOwlwc2VjID0gcGh5ZGV2LSZndDtwc2VjOwomIzQzOwlpZiAoIXBzZWMgfHwgIXBzZV9jb250cm9sX21hdGNoZXNfcGNkZXYocHNlYywgcGNkZXYpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXBoeWRldi0mZ3Q7cHNlYyA9IE5VTEw7CiYjNDM7CXBzZV9jb250cm9sX3B1dChwc2VjKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGh5X3BzZV9ub3RpZmllcl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAomIzQzOwkJCQkgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKGV2ZW50KSB7CiYjNDM7CWNhc2UgUFNFX1JFR0lTVEVSRUQ6CiYjNDM7CQltdXRleF9sb2NrKCZhbXA7cGh5X3BzZV9sb2NrKTsKJiM0MzsJCWJ1c19mb3JfZWFjaF9kZXYoJmFtcDttZGlvX2J1c190eXBlLCBOVUxMLCBOVUxMLAomIzQzOwkJCQkgcGh5X3BzZV9hdHRhY2hfb25lKTsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO3BoeV9wc2VfbG9jayk7CiYjNDM7CQlyZXR1cm4gTk9USUZZX09LOwomIzQzOwljYXNlIFBTRV9VTlJFR0lTVEVSRUQ6CiYjNDM7CQltdXRleF9sb2NrKCZhbXA7cGh5X3BzZV9sb2NrKTsKJiM0MzsJCWJ1c19mb3JfZWFjaF9kZXYoJmFtcDttZGlvX2J1c190eXBlLCBOVUxMLCBkYXRhLAomIzQzOwkJCQkgcGh5X3BzZV9kZXRhY2hfb25lKTsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO3BoeV9wc2VfbG9jayk7CiYjNDM7CQlyZXR1cm4gTk9USUZZX09LOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIE5PVElGWV9ET05FOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcGh5X3BzZV9ub3RpZmllciBfX3JlYWRfbW9zdGx5ID0gewomIzQzOwkubm90aWZpZXJfY2FsbCA9IHBoeV9wc2Vfbm90aWZpZXJfZXZlbnQsCiYjNDM7fTsKJiM0MzsKIC8qKgotICogcGh5X2RldmljZV9yZWdpc3RlciAtIFJlZ2lzdGVyIHRoZSBwaHkgZGV2aWNlIG9uIHRoZSBNRElPIGJ1cwotICogQHBoeWRldjogcGh5X2RldmljZSBzdHJ1Y3R1cmUgdG8gYmUgYWRkZWQgdG8gdGhlIE1ESU8gYnVzCiYjNDM7ICogcGh5X3BzZV9jb250cm9sX2xvY2sgLSBob2xkIHBoeWRldi0mZ3Q7cHNlYyBzdGFibGUgYWdhaW5zdCBQU0UgY29udHJvbGxlciB0ZWFyZG93bgomIzQzOyAqCiYjNDM7ICogVGhlIFBTRV9VTlJFR0lTVEVSRUQgbm90aWZpZXIgZGV0YWNoZXMgcGh5ZGV2LSZndDtwc2VjIGFuZCBkcm9wcyBpdHMgbGFzdAomIzQzOyAqIHJlZmVyZW5jZS4gQ2FsbGVycyB0aGF0IGRlcmVmZXJlbmNlIHBoeWRldi0mZ3Q7cHNlYyAodGhlIGV0aHRvb2wgUFNFIHBhdGhzKSBtdXN0CiYjNDM7ICogaG9sZCB0aGlzIGxvY2sgYWNyb3NzIHRoZSBhY2Nlc3Mgc28gdGhlIGRldGFjaCBjYW5ub3QgcnVuIHVuZGVybmVhdGggdGhlbS4KICAqLwotaW50IHBoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt2b2lkIHBoeV9wc2VfY29udHJvbF9sb2NrKHZvaWQpCiYjNDM7ewomIzQzOwltdXRleF9sb2NrKCZhbXA7cGh5X3BzZV9sb2NrKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocGh5X3BzZV9jb250cm9sX2xvY2spOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHBoeV9wc2VfY29udHJvbF91bmxvY2sgLSByZWxlYXNlIHRoZSBsb2NrIHRha2VuIGJ5IHBoeV9wc2VfY29udHJvbF9sb2NrKCkKJiM0MzsgKi8KJiM0Mzt2b2lkIHBoeV9wc2VfY29udHJvbF91bmxvY2sodm9pZCkKJiM0Mzt7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3BoeV9wc2VfbG9jayk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHBoeV9wc2VfY29udHJvbF91bmxvY2spOwomIzQzOwomIzQzOy8qIENvcmUgcmVnaXN0cmF0aW9uOiBhZGQgdGhlIHBoeSB0byB0aGUgTURJTyBidXMuIERvZXMgbm90IHRvdWNoIHJ0bmwgb3IKJiM0MzsgKiBQU0UuIHBoeWRldi0mZ3Q7cHNlYyBpcyBhdHRhY2hlZCBieSB0aGUgY2FsbGVycyBiZWxvdywgYWZ0ZXIgZGV2aWNlX2FkZCgpCiYjNDM7ICogaGFzIG1hZGUgdGhlIHBoeSB2aXNpYmxlIG9uIG1kaW9fYnVzX3R5cGUsIHNvIHRoYXQgYSBjb25jdXJyZW50IFBTRQomIzQzOyAqIG5vdGlmaWVyIHdhbGsgYW5kIHRoZSBhdHRhY2ggY2FuIG5ldmVyIGxlYXZlIHRoZSBwaHkgdW5hdHRhY2hlZC4gS2VlcGluZwomIzQzOyAqIGRldmljZV9hZGQoKSBvdXQgb2YgcnRubCBhbHNvIGF2b2lkcyBkZWFkbG9ja2luZyB3aGVuIGJpbmRpbmcgYSBwaHkgdGhhdAomIzQzOyAqIGl0c2VsZiBwcm92aWRlcyBhbiBTRlAgY2FnZSAocGh5X3Byb2JlKCkgLSZndDsgcGh5X3NmcF9wcm9iZSgpIC0mZ3Q7CiYjNDM7ICogc2ZwX2J1c19hZGRfdXBzdHJlYW0oKSB0YWtlcyBydG5sKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IF9fcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogewogCWludCBlcnI7CiAKQEAgLTExMzUsMTAgJiM0MzsxMjUyLDU2IEBAIGludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiAgb3V0OgogCS8qIEFzc2VydCB0aGUgcmVzZXQgc2lnbmFsICovCiAJcGh5X2RldmljZV9yZXNldChwaHlkZXYsIDEpOwotCiAJbWRpb2J1c191bnJlZ2lzdGVyX2RldmljZSgmYW1wO3BoeWRldi0mZ3Q7bWRpbyk7CiAJcmV0dXJuIGVycjsKIH0KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZCAtIFJlZ2lzdGVyIHRoZSBwaHkgZGV2aWNlIG9uIHRoZSBNRElPIGJ1cwomIzQzOyAqIEBwaHlkZXY6IHBoeV9kZXZpY2Ugc3RydWN0dXJlIHRvIGJlIGFkZGVkIHRvIHRoZSBNRElPIGJ1cwomIzQzOyAqCiYjNDM7ICogU2FtZSBhcyBwaHlfZGV2aWNlX3JlZ2lzdGVyKCkgYnV0IGNhbGxlciBtdXN0IGFscmVhZHkgaG9sZCBydG5sX2xvY2soKS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCiYjNDM7ICovCiYjNDM7aW50IHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlBU1NFUlRfUlROTCgpOwomIzQzOwomIzQzOwllcnIgPSBfX3BoeV9kZXZpY2VfcmVnaXN0ZXIocGh5ZGV2KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwaHlfcHNlX2xvY2spOwomIzQzOwlwaHlfdHJ5X2F0dGFjaF9wc2UocGh5ZGV2KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cGh5X3BzZV9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wocGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWQpOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHBoeV9kZXZpY2VfcmVnaXN0ZXIgLSBSZWdpc3RlciB0aGUgcGh5IGRldmljZSBvbiB0aGUgTURJTyBidXMKJiM0MzsgKiBAcGh5ZGV2OiBwaHlfZGV2aWNlIHN0cnVjdHVyZSB0byBiZSBhZGRlZCB0byB0aGUgTURJTyBidXMKJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCiYjNDM7ICovCiYjNDM7aW50IHBoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWVyciA9IF9fcGh5X2RldmljZV9yZWdpc3RlcihwaHlkZXYpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3BoeV9wc2VfbG9jayk7CiYjNDM7CXBoeV90cnlfYXR0YWNoX3BzZShwaHlkZXYpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwaHlfcHNlX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiBFWFBPUlRfU1lNQk9MKHBoeV9kZXZpY2VfcmVnaXN0ZXIpOwogCiAvKioKQEAgLTExNTIsNyAmIzQzOzEzMTUsMTUgQEAgRVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX3JlZ2lzdGVyKTsKIHZvaWQgcGh5X2RldmljZV9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIHsKIAl1bnJlZ2lzdGVyX21paV90aW1lc3RhbXBlcihwaHlkZXYtJmd0O21paV90cyk7CiYjNDM7CiYjNDM7CS8qIERldGFjaCBzeW5jaHJvbm91c2x5LCBiZWZvcmUgdGhlIHBoeSBsZWF2ZXMgdGhlIGJ1cywgc28gdGhlIHB1dCBjYW5ub3QKJiM0MzsJICogb3V0bGl2ZSB0aGUgUFNFIGNvbnRyb2xsZXIgKGFuIG9mZi1idXMgYnV0IHN0aWxsLXBpbm5lZCBwaHkgaXMgbWlzc2VkIGJ5CiYjNDM7CSAqIHRoZSBQU0VfVU5SRUdJU1RFUkVEIHdhbGspLiBwaHlfcHNlX2xvY2sgc2VyaWFsaXNlcyBhZ2FpbnN0IHRoYXQgd2Fsay4KJiM0MzsJICovCiYjNDM7CW11dGV4X2xvY2soJmFtcDtwaHlfcHNlX2xvY2spOwogCXBzZV9jb250cm9sX3B1dChwaHlkZXYtJmd0O3BzZWMpOwomIzQzOwlwaHlkZXYtJmd0O3BzZWMgPSBOVUxMOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwaHlfcHNlX2xvY2spOwogCiAJZGV2aWNlX2RlbCgmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXYpOwogCkBAIC0zOTgxLDggJiM0Mzs0MTUyLDE0IEBAIHN0YXRpYyBpbnQgX19pbml0IHBoeV9pbml0KHZvaWQpCiAJaWYgKHJjKQogCQlnb3RvIGVycl9jNDU7CiAKJiM0MzsJcmMgPSBwc2VfcmVnaXN0ZXJfbm90aWZpZXIoJmFtcDtwaHlfcHNlX25vdGlmaWVyKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJZ290byBlcnJfZ2VucGh5OwomIzQzOwogCXJldHVybiAwOwogCiYjNDM7ZXJyX2dlbnBoeToKJiM0MzsJcGh5X2RyaXZlcl91bnJlZ2lzdGVyKCZhbXA7Z2VucGh5X2RyaXZlcik7CiBlcnJfYzQ1OgogCXBoeV9kcml2ZXJfdW5yZWdpc3RlcigmYW1wO2dlbnBoeV9jNDVfZHJpdmVyKTsKIGVycl9ldGh0b29sX3BoeV9vcHM6CkBAIC0zOTk5LDYgJiM0Mzs0MTc2LDcgQEAgc3RhdGljIGludCBfX2luaXQgcGh5X2luaXQodm9pZCkKIAogc3RhdGljIHZvaWQgX19leGl0IHBoeV9leGl0KHZvaWQpCiB7CiYjNDM7CXBzZV91bnJlZ2lzdGVyX25vdGlmaWVyKCZhbXA7cGh5X3BzZV9ub3RpZmllcik7CiAJcGh5X2RyaXZlcl91bnJlZ2lzdGVyKCZhbXA7Z2VucGh5X2M0NV9kcml2ZXIpOwogCXBoeV9kcml2ZXJfdW5yZWdpc3RlcigmYW1wO2dlbnBoeV9kcml2ZXIpOwogCXJ0bmxfbG9jaygpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3NmcC5jIGIvZHJpdmVycy9uZXQvcGh5L3NmcC5jCmluZGV4IDAzYmZkODY0MGRiOTYuLjE4ODY4YmRkNjQ4NTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9zZnAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvc2ZwLmMKQEAgLTIwODMsNyAmIzQzOzIwODMsNyBAQCBzdGF0aWMgaW50IHNmcF9zbV9wcm9iZV9waHkoc3RydWN0IHNmcCAqc2ZwLCBpbnQgYWRkciwgYm9vbCBpc19jNDUpCiAJLyogTWFyayB0aGlzIFBIWSBhcyBiZWluZyBvbiBhIFNGUCBtb2R1bGUgKi8KIAlwaHktJmd0O2lzX29uX3NmcF9tb2R1bGUgPSB0cnVlOwogCi0JZXJyID0gcGh5X2RldmljZV9yZWdpc3RlcihwaHkpOwomIzQzOwllcnIgPSBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZChwaHkpOwogCWlmIChlcnIpIHsKIAkJcGh5X2RldmljZV9mcmVlKHBoeSk7CiAJCWRldl9lcnIoc2ZwLSZndDtkZXYsICYjMzQ7cGh5X2RldmljZV9yZWdpc3RlciBmYWlsZWQ6ICVwZVxuJiMzNDssCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jCmluZGV4IDY5ZGJkYmRlOWQ3MWEuLjYxMTU0MGRmNDNiYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jCkBAIC04LDYgJiM0Mzs4LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9kZXZpY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9ldGh0b29sLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXRodG9vbF9uZXRsaW5rLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L25vdGlmaWVyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9waHkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wc2UtcGQvcHNlLmgmZ3Q7CkBAIC0yMyw2ICYjNDM7MjQsMzkgQEAgc3RhdGljIExJU1RfSEVBRChwc2VfY29udHJvbGxlcl9saXN0KTsKIHN0YXRpYyBERUZJTkVfWEFSUkFZX0FMTE9DKHBzZV9wd19kX21hcCk7CiBzdGF0aWMgREVGSU5FX01VVEVYKHBzZV9wd19kX211dGV4KTsKIAomIzQzO3N0YXRpYyBCTE9DS0lOR19OT1RJRklFUl9IRUFEKHBzZV9jb250cm9sbGVyX25vdGlmaWVyKTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBwc2VfcmVnaXN0ZXJfbm90aWZpZXIgLSByZWdpc3RlciBhIGNhbGxiYWNrIGZvciBQU0UgY29udHJvbGxlciBldmVudHMKJiM0MzsgKiBAbmI6IG5vdGlmaWVyIGJsb2NrIHRvIHJlZ2lzdGVyCiYjNDM7ICoKJiM0MzsgKiBTZWUgZW51bSBwc2VfY29udHJvbGxlcl9ldmVudCBmb3IgZXZlbnRzIGZpcmVkIGFuZCB0aGVpciBzdWJzY3JpYmVyCiYjNDM7ICogY29udHJhY3QuIENhbGxiYWNrcyBydW4gaW4gcHJvY2VzcyBjb250ZXh0OyB0aGV5IG1heSBzbGVlcCwgdGFrZQomIzQzOyAqIHJ0bmwsIGFuZCBjYWxsIG9mX3BzZV9jb250cm9sX2dldCgpLiBUaGUgY2hhaW4gZmlyZXMgc3luY2hyb25vdXNseSwKJiM0MzsgKiBzbyBhIFBTRSBjb250cm9sbGVyIGRyaXZlciYjMzk7cyBwcm9iZS91bmJpbmQgcGF0aCBtdXN0IG5vdCBob2xkIGFueQomIzQzOyAqIHN1Y2ggbG9jayB3aGVuIGNhbGxpbmcgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoKSBvcgomIzQzOyAqIHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXIoKS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS4KJiM0MzsgKi8KJiM0MztpbnQgcHNlX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCiYjNDM7ewomIzQzOwlyZXR1cm4gYmxvY2tpbmdfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJmFtcDtwc2VfY29udHJvbGxlcl9ub3RpZmllciwgbmIpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChwc2VfcmVnaXN0ZXJfbm90aWZpZXIpOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyIC0gdW5yZWdpc3RlciBhIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBjYWxsYmFjawomIzQzOyAqIEBuYjogbm90aWZpZXIgYmxvY2sgcHJldmlvdXNseSBwYXNzZWQgdG8gcHNlX3JlZ2lzdGVyX25vdGlmaWVyKCkKJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS4KJiM0MzsgKi8KJiM0MztpbnQgcHNlX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKJiM0Mzt7CiYjNDM7CXJldHVybiBibG9ja2luZ19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKCZhbXA7cHNlX2NvbnRyb2xsZXJfbm90aWZpZXIsIG5iKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocHNlX3VucmVnaXN0ZXJfbm90aWZpZXIpOwomIzQzOwogLyoqCiAgKiBzdHJ1Y3QgcHNlX2NvbnRyb2wgLSBhIFBTRSBjb250cm9sCiAgKiBAcGNkZXY6IGEgcG9pbnRlciB0byB0aGUgUFNFIGNvbnRyb2xsZXIgZGV2aWNlCkBAIC0xMTA0LDYgJiM0MzsxMTM4LDkgQEAgaW50IHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KQogCWxpc3RfYWRkKCZhbXA7cGNkZXYtJmd0O2xpc3QsICZhbXA7cHNlX2NvbnRyb2xsZXJfbGlzdCk7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7cHNlX2xpc3RfbXV0ZXgpOwogCiYjNDM7CWJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oJmFtcDtwc2VfY29udHJvbGxlcl9ub3RpZmllciwKJiM0MzsJCQkJICAgICBQU0VfUkVHSVNURVJFRCwgcGNkZXYpOwomIzQzOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIpOwpAQCAtMTExNCw2ICYjNDM7MTE1MSw5IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKTsKICAqLwogdm9pZCBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KQogewomIzQzOwlibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZhbXA7cHNlX2NvbnRyb2xsZXJfbm90aWZpZXIsCiYjNDM7CQkJCSAgICAgUFNFX1VOUkVHSVNURVJFRCwgcGNkZXYpOwomIzQzOwogCXBzZV9mbHVzaF9wd19kcyhwY2Rldik7CiAJcHNlX3JlbGVhc2VfcGlzKHBjZGV2KTsKIAlpZiAocGNkZXYtJmd0O2lycSkKQEAgLTE5ODEsMyAmIzQzOzIwMjEsMTcgQEAgYm9vbCBwc2VfaGFzX2MzMyhzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMpCiAJcmV0dXJuIHBzZWMtJmd0O3BjZGV2LSZndDt0eXBlcyAmYW1wOyBFVEhUT09MX1BTRV9DMzM7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChwc2VfaGFzX2MzMyk7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldiAtIFRlc3Qgd2hldGhlciBhIHBzZV9jb250cm9sIHRhcmdldHMgYSBjb250cm9sbGVyCiYjNDM7ICogQHBzZWM6IHBzZV9jb250cm9sIG9idGFpbmVkIGZyb20gb2ZfcHNlX2NvbnRyb2xfZ2V0KCkKJiM0MzsgKiBAcGNkZXY6IFBTRSBjb250cm9sbGVyIHRvIGNvbXBhcmUgYWdhaW5zdAomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAldHJ1ZSBpZiBAcHNlYyB3YXMgb2J0YWluZWQgZnJvbSBAcGNkZXYsICVmYWxzZSBvdGhlcndpc2UuCiYjNDM7ICovCiYjNDM7Ym9vbCBwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2KHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYywKJiM0MzsJCQkgICAgICAgc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gcHNlYy0mZ3Q7cGNkZXYgPT0gcGNkZXY7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHBzZV9jb250cm9sX21hdGNoZXNfcGNkZXYpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmgKaW5kZXggMTk5YTdhYWEzNDFiZi4uNTVhMDA0OWM2YzJiNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BoeS5oCkBAIC0yMTU4LDggJiM0MzsyMTU4LDEyIEBAIHN0cnVjdCBwaHlfZGV2aWNlICpmd25vZGVfcGh5X2ZpbmRfZGV2aWNlKHN0cnVjdCBmd25vZGVfaGFuZGxlICpwaHlfZndub2RlKTsKIHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGVfZ2V0X3BoeV9ub2RlKGNvbnN0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpOwogc3RydWN0IHBoeV9kZXZpY2UgKmdldF9waHlfZGV2aWNlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBib29sIGlzX2M0NSk7CiBpbnQgcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KTsKJiM0MzsvKiBDYWxsZXIgbXVzdCBob2xkIHJ0bmxfbG9jaygpOyBzZWUgcGh5X2RldmljZV9yZWdpc3RlcigpIGZvciB0aGUgcHVibGljIGZvcm0uICovCiYjNDM7aW50IHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpOwogdm9pZCBwaHlfZGV2aWNlX2ZyZWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7CiB2b2lkIHBoeV9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpOwomIzQzO3ZvaWQgcGh5X3BzZV9jb250cm9sX2xvY2sodm9pZCk7CiYjNDM7dm9pZCBwaHlfcHNlX2NvbnRyb2xfdW5sb2NrKHZvaWQpOwogaW50IHBoeV9nZXRfYzQ1X2lkcyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKIGludCBwaHlfaW5pdF9odyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKIGludCBwaHlfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHNlLXBkL3BzZS5oIGIvaW5jbHVkZS9saW51eC9wc2UtcGQvcHNlLmgKaW5kZXggNGU1Njk2Y2ZhZGU3Yy4uZDQzMTBjYTcxYTNlMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wc2UtcGQvcHNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wc2UtcGQvcHNlLmgKQEAgLTIxLDYgJiM0MzsyMSw3IEBAIHN0cnVjdCBuZXRfZGV2aWNlOwogc3RydWN0IHBoeV9kZXZpY2U7CiBzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2Owogc3RydWN0IG5ldGxpbmtfZXh0X2FjazsKJiM0MztzdHJ1Y3Qgbm90aWZpZXJfYmxvY2s7CiAKIC8qIEMzMyBQU0UgZXh0ZW5kZWQgc3RhdGUgYW5kIHN1YnN0YXRlLiAqLwogc3RydWN0IGV0aHRvb2xfYzMzX3BzZV9leHRfc3RhdGVfaW5mbyB7CkBAIC0zMzcsNiAmIzQzOzMzOCwyNCBAQCBlbnVtIHBzZV9idWRnZXRfZXZhbF9zdHJhdGVnaWVzIHsKIAlQU0VfQlVER0VUX0VWQUxfU1RSQVRfRFlOQU1JQwk9IDEgJmx0OyZsdDsgMiwKIH07CiAKJiM0MzsvKioKJiM0MzsgKiBlbnVtIHBzZV9jb250cm9sbGVyX2V2ZW50IC0gUFNFIGNvbnRyb2xsZXIgbGlmZWN5Y2xlIGV2ZW50cwomIzQzOyAqCiYjNDM7ICogRXZlbnQgZGF0YSBpbiBjYWxsYmFja3MgaXMgYWx3YXlzIGEgcG9pbnRlciB0byB0aGUgc3RydWN0CiYjNDM7ICogcHNlX2NvbnRyb2xsZXJfZGV2IGZpcmluZyB0aGUgZXZlbnQuCiYjNDM7ICoKJiM0MzsgKiBAUFNFX1JFR0lTVEVSRUQ6IGNvbnRyb2xsZXIgYWRkZWQgdG8gcHNlX2NvbnRyb2xsZXJfbGlzdCBhbmQKJiM0MzsgKglyZXNvbHZhYmxlIGJ5IG9mX3BzZV9jb250cm9sX2dldCgpLgomIzQzOyAqIEBQU0VfVU5SRUdJU1RFUkVEOiBjb250cm9sbGVyIGFib3V0IHRvIGJlIHJlbW92ZWQgZnJvbQomIzQzOyAqCXBzZV9jb250cm9sbGVyX2xpc3QuIFN1YnNjcmliZXJzIGhvbGRpbmcgcHNlX2NvbnRyb2wgcmVmZXJlbmNlcwomIzQzOyAqCXRhcmdldGluZyBpdCBtdXN0IGRyb3AgdGhlbSBiZWZvcmUgcmV0dXJuaW5nIGFuZCBtdXN0IG5vdAomIzQzOyAqCWFjcXVpcmUgbmV3IHJlZmVyZW5jZXMgZm9yIGl0LgomIzQzOyAqLwomIzQzO2VudW0gcHNlX2NvbnRyb2xsZXJfZXZlbnQgewomIzQzOwlQU0VfUkVHSVNURVJFRCwKJiM0MzsJUFNFX1VOUkVHSVNURVJFRCwKJiM0Mzt9OwomIzQzOwogI2lmIElTX0VOQUJMRUQoQ09ORklHX1BTRV9DT05UUk9MTEVSKQogaW50IHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KTsKIHZvaWQgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcihzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2Rldik7CkBAIC0zNjYsNiAmIzQzOzM4NSwxMiBAQCBpbnQgcHNlX2V0aHRvb2xfc2V0X3ByaW8oc3RydWN0IHBzZV9jb250cm9sICpwc2VjLAogYm9vbCBwc2VfaGFzX3BvZGwoc3RydWN0IHBzZV9jb250cm9sICpwc2VjKTsKIGJvb2wgcHNlX2hhc19jMzMoc3RydWN0IHBzZV9jb250cm9sICpwc2VjKTsKIAomIzQzO2Jvb2wgcHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldihzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMsCiYjNDM7CQkJICAgICAgIHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KTsKJiM0MzsKJiM0MztpbnQgcHNlX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOwomIzQzO2ludCBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKJiM0MzsKICNlbHNlCiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBzZV9jb250cm9sICpvZl9wc2VfY29udHJvbF9nZXQoc3RydWN0IGRldmljZV9ub2RlICpub2RlLApAQCAtNDE2LDYgJiM0Mzs0NDEsMjIgQEAgc3RhdGljIGlubGluZSBib29sIHBzZV9oYXNfYzMzKHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYykKIAlyZXR1cm4gZmFsc2U7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldihzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMsCiYjNDM7CQkJCQkgICAgIHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KQomIzQzO3sKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCBwc2VfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogI2VuZGlmCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvcHNlLXBkLmMgYi9uZXQvZXRodG9vbC9wc2UtcGQuYwppbmRleCA3NTdjOWUwY2M4NTZmLi40ZWRkOWE1MTRkZTE0IDEwMDY0NAotLS0gYS9uZXQvZXRodG9vbC9wc2UtcGQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvZXRodG9vbC9wc2UtcGQuYwpAQCAtNzEsNyAmIzQzOzcxLDkgQEAgc3RhdGljIGludCBwc2VfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsCiAJaWYgKHJldCAmbHQ7IDApCiAJCXJldHVybiByZXQ7CiAKJiM0MzsJcGh5X3BzZV9jb250cm9sX2xvY2soKTsKIAlyZXQgPSBwc2VfZ2V0X3BzZV9hdHRyaWJ1dGVzKHBoeWRldiwgaW5mby0mZ3Q7ZXh0YWNrLCBkYXRhKTsKJiM0MzsJcGh5X3BzZV9jb250cm9sX3VubG9jaygpOwogCiAJZXRobmxfb3BzX2NvbXBsZXRlKGRldik7CiAKQEAgLTI4MSw5ICYjNDM7MjgzLDEyIEBAIGV0aG5sX3NldF9wc2Uoc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbywgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAogCXBoeWRldiA9IGV0aG5sX3JlcV9nZXRfcGh5ZGV2KHJlcV9pbmZvLCB0YiwgRVRIVE9PTF9BX1BTRV9IRUFERVIsCiAJCQkJICAgICAgaW5mby0mZ3Q7ZXh0YWNrKTsKJiM0MzsKJiM0MzsJcGh5X3BzZV9jb250cm9sX2xvY2soKTsKJiM0MzsKIAlyZXQgPSBldGhubF9zZXRfcHNlX3ZhbGlkYXRlKHBoeWRldiwgaW5mbyk7CiAJaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKJiM0MzsJCWdvdG8gb3V0OwogCiAJaWYgKHRiW0VUSFRPT0xfQV9QU0VfUFJJT10pIHsKIAkJdW5zaWduZWQgaW50IHByaW87CkBAIC0yOTEsNyAmIzQzOzI5Niw3IEBAIGV0aG5sX3NldF9wc2Uoc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbywgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJcHJpbyA9IG5sYV9nZXRfdTMyKHRiW0VUSFRPT0xfQV9QU0VfUFJJT10pOwogCQlyZXQgPSBwc2VfZXRodG9vbF9zZXRfcHJpbyhwaHlkZXYtJmd0O3BzZWMsIGluZm8tJmd0O2V4dGFjaywgcHJpbyk7CiAJCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwomIzQzOwkJCWdvdG8gb3V0OwogCX0KIAogCWlmICh0YltFVEhUT09MX0FfQzMzX1BTRV9BVkFJTF9QV19MSU1JVF0pIHsKQEAgLTMwMSw3ICYjNDM7MzA2LDcgQEAgZXRobmxfc2V0X3BzZShzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCQlyZXQgPSBwc2VfZXRodG9vbF9zZXRfcHdfbGltaXQocGh5ZGV2LSZndDtwc2VjLCBpbmZvLSZndDtleHRhY2ssCiAJCQkJCSAgICAgICBwd19saW1pdCk7CiAJCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwomIzQzOwkJCWdvdG8gb3V0OwogCX0KIAogCS8qIFRoZXNlIHZhbHVlcyBhcmUgYWxyZWFkeSB2YWxpZGF0ZWQgYnkgdGhlIGV0aG5sX3BzZV9zZXRfcG9saWN5ICovCkBAIC0zMTksMTEgJiM0MzszMjQsMTEgQEAgZXRobmxfc2V0X3BzZShzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCQkgKi8KIAkJcmV0ID0gcHNlX2V0aHRvb2xfc2V0X2NvbmZpZyhwaHlkZXYtJmd0O3BzZWMsIGluZm8tJmd0O2V4dGFjaywKIAkJCQkJICAgICAmYW1wO2NvbmZpZyk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwogCX0KIAomIzQzO291dDoKIAkvKiBSZXR1cm4gZXJybm8gb3IgemVybyAtIFBTRSBoYXMgbm8gbm90aWZpY2F0aW9uICovCiYjNDM7CXBoeV9wc2VfY29udHJvbF91bmxvY2soKTsKIAlyZXR1cm4gcmV0OwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzcyCgkJCQkJCQlvdXRwdXQ6IDIxMwoJCQkJCQkJdGhvdWdodHM6IDg2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBTRSBDb250cm9sbGVyIEludGVncmF0aW9uIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIHNlcmllcyBpcyBhbGwgYWJvdXQgcmVmaW5pbmcgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gUG93ZXIgU291cmNpbmcgRXF1aXBtZW50IChQU0UpIGNvbnRyb2xsZXJzIGFuZCBQSFkgZGV2aWNlcyB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbC4gSXQmIzM5O3MgZnVuZGFtZW50YWxseSBjaGFuZ2luZyBob3cgYHBoeWRldi0mZ3Q7cHNlY2AgaXMgbWFuYWdlZCwgc2hpZnRpbmcgZnJvbSBkaXJlY3QgYXR0YWNobWVudC9kZXRhY2htZW50IGR1cmluZyBQSFkgcmVnaXN0cmF0aW9uL3VucmVnaXN0cmF0aW9uIHRvIGEgbm90aWZpZXItYmFzZWQgc3lzdGVtLiBUaGlzIHNvdW5kcyBsaWtlIGEgZ29vZCBtb3ZlIGZvciBpbXByb3ZlZCByb2J1c3RuZXNzIGFuZCBmbGV4aWJpbGl0eS4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBjaGVjayBmb3IgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHByb2JsZW1zLiBUaGUgY2hhbmdlcyBpbnZvbHZlIGF0dGFjaGluZy9kZXRhY2hpbmcgdGhlIGBwc2VjYCwgd2hpY2ggaXMgYSBwb2ludGVyLiBJdCBpbnRyb2R1Y2VzIGEgYHBoeV9wc2Vfbm90aWZpZXJgIGZvciBhdHRhY2htZW50L2RldGFjaG1lbnQgYW5kIGFkZHMgYHBoeV9wc2VfbG9ja2AgdG8gc2VyaWFsaXplIGFjY2VzcyB0byBgcGh5ZGV2LSZndDtwc2VjYCwgcHJvdGVjdGluZyBhZ2FpbnN0IHJhY2VzIGJldHdlZW4gdGhlIG5vdGlmaWVyIGFuZCBgZXRodG9vbGAgb3BlcmF0aW9ucy4gQWxzbywgYGV0aG5sX3NldF9wc2VgIGFuZCBgcHNlX3ByZXBhcmVfZGF0YWAgYXJlIG1vZGlmaWVkIHRvIHVzZSBgcGh5X3BzZV9jb250cm9sX2xvY2soKWAgd2hlbiBpbnRlcmFjdGluZyB3aXRoIGBwaHlkZXYtJmd0O3BzZWNgLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlc2UgY2hhbmdlcyBleHBvc2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMuIFRoZSBjaGFuZ2VzIHByaW1hcmlseSByZXZvbHZlIGFyb3VuZCBzeW5jaHJvbml6YXRpb24gYW5kIHRoZSBvYmplY3QgbGlmZWN5Y2xlIG9mIGBwaHlkZXYtJmd0O3BzZWNgLiBUaGV5IGRvbiYjMzk7dCBpbnRyb2R1Y2UgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2Ugb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy4gVGhlIHByaW1hcnkgZ29hbCBpcyB0byBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYnkgZW5zdXJpbmcgcHJvcGVyIGxvY2tpbmcgYW5kIGxpZmVjeWNsZSBtYW5hZ2VtZW50LiBUaGVzZSB0eXBlcyBvZiBpc3N1ZXMgYXJlIHVzdWFsbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBMT0NLREVQLgoKTGV0JiMzOTtzIGRpZyBkZWVwZXIgaW50byBgcHNlX3ByZXBhcmVfZGF0YWAuIEl0IGxvY2tzLCB0aGVuIGNhbGxzIGBwc2VfZ2V0X3BzZV9hdHRyaWJ1dGVzYC4gVGhlIGNyaXRpY2FsIHRoaW5nIGlzIHdoZXRoZXIgdGhlIG5ldyBsb2NrIGFmZmVjdHMgaG93IGBkYXRhYCBpcyBpbml0aWFsaXplZCwgYnV0IG5vLCBpdCBqdXN0IHdyYXBzIGEgbG9jayBhcm91bmQgaXQuIEluIGBldGhubF9zZXRfcHNlYCBpdCYjMzk7cyB0aGUgc2FtZSwgaXQganVzdCBhZGRzIGEgbG9jay4KClNvIHRoZSBwYXRjaCBhZGRzIGBwaHlfcHNlX2NvbnRyb2xfbG9jaygpYCBhbmQgYHBoeV9wc2VfY29udHJvbF91bmxvY2soKWAgd2hpY2ggYXJlIHdyYXBwZXJzIGFyb3VuZCBgbXV0ZXhfbG9jaygmYW1wO3BoeV9wc2VfbG9jaylgIGFuZCBgbXV0ZXhfdW5sb2NrKCZhbXA7cGh5X3BzZV9sb2NrKWAuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBwc2VfcmVnaXN0ZXJfbm90aWZpZXJgIGFuZCBgcHNlX3VucmVnaXN0ZXJfbm90aWZpZXJgLiBObywgdGhpcyBzZWVtcyBwZXJmZWN0bHkgc2FmZS4gVGhpcyBpcyBhbGwgYWJvdXQgb2JqZWN0IGxpZmVjeWNsZSBhbmQgbWFraW5nIHN1cmUgdGhlcmUgYXJlIG5vIHJhY2VzLgoKVWx0aW1hdGVseSwgdGhlc2UgY2hhbmdlcyBhcHBlYXIgdG8gYmUgc3BlY2lmaWNhbGx5IGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb24uIElmIGEgUFNFIGNvbnRyb2xsZXIgdW5yZWdpc3RlcnMgd2hpbGUgYSBQSFkgaXMgc3RpbGwgcmVmZXJlbmNpbmcgaXQuIEtBU0FOIGlzIHRoZSByaWdodCB0b29sIGZvciB0aGVzZSwgbm90IEtNU0FOLgoKSSYjMzk7bGwgZG91YmxlIGNoZWNrIHRoZSBgcGh5X3RyeV9hdHRhY2hfcHNlYCBmdW5jdGlvbiBhcyBhIGZpbmFsIHNhbml0eSBjaGVjaywgYnV0IEkmIzM5O20gbm90IHNlZWluZyBhbnl0aGluZyB0aGF0IHdvdWxkIHJlc3VsdCBpbiBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25kaXRpb24gdGhlcmUuCgpHaXZlbiB0aGUgbmF0dXJlIG9mIHRoZXNlIGNoYW5nZXMsIEkmIzM5O20gY29uZmlkZW50IHRoZXJlIGFyZSBubyBLTVNBTiBjb25jZXJucy4gVGhlIHBhdGNoJiMzOTtzIGZvY3VzIGlzIG9uIGxpZmVjeWNsZSBhbmQgc3luY2hyb25pemF0aW9uLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgTmVlZHNLTVNBTiBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyByZWZhY3RvcnMgdGhlIGxpZmVjeWNsZSBhbmQgc3luY2hyb25pemF0aW9uIG9mIFBTRSAoUG93ZXIgU291cmNpbmcgRXF1aXBtZW50KSBjb250cm9sbGVycyBhdHRhY2hlZCB0byBQSFkgZGV2aWNlcy4gSXQgaW50cm9kdWNlcyBhIG5vdGlmaWVyIGNoYWluIChgcGh5X3BzZV9ub3RpZmllcmApIGFuZCBhIG11dGV4IChgcGh5X3BzZV9sb2NrYCkgdG8gc2FmZWx5IGF0dGFjaCBhbmQgZGV0YWNoIGBwaHlkZXYtXHUwMDNlcHNlY2Agd2hlbiBQU0UgY29udHJvbGxlcnMgYXJlIHJlZ2lzdGVyZWQgb3IgdW5yZWdpc3RlcmVkLCBwcmV2ZW50aW5nIHJhY2UgY29uZGl0aW9ucyBhbmQgdXNlLWFmdGVyLWZyZWUgYnVncy4gSXQgYWxzbyB3cmFwcyBldGh0b29sIFBTRSBvcGVyYXRpb25zIHdpdGggdGhlIG5ldyBsb2NrLlxuXG5UaGVzZSBjaGFuZ2VzIHByaW1hcmlseSBhZGRyZXNzIG9iamVjdCBsaWZlY3ljbGUgbWFuYWdlbWVudCwgbG9ja2luZywgYW5kIHN5bmNocm9uaXphdGlvbi4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGxpa2VseSBtYW5pZmVzdCBhcyB1c2UtYWZ0ZXItZnJlZSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgZGVhZGxvY2tzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvbXBsZXggYnVmZmVyIGFsbG9jYXRpb25zIG9yIG1vZGlmaWNhdGlvbnMgdG8gZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyB0aGUgbGlmZWN5Y2xlIGFuZCBzeW5jaHJvbml6YXRpb24gb2YgUFNFIChQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQpIGNvbnRyb2xsZXJzIGF0dGFjaGVkIHRvIFBIWSBkZXZpY2VzLiBJdCBpbnRyb2R1Y2VzIGEgbm90aWZpZXIgY2hhaW4gKGBwaHlfcHNlX25vdGlmaWVyYCkgYW5kIGEgbXV0ZXggKGBwaHlfcHNlX2xvY2tgKSB0byBzYWZlbHkgYXR0YWNoIGFuZCBkZXRhY2ggYHBoeWRldi1cdTAwM2Vwc2VjYCB3aGVuIFBTRSBjb250cm9sbGVycyBhcmUgcmVnaXN0ZXJlZCBvciB1bnJlZ2lzdGVyZWQsIHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzLiBJdCBhbHNvIHdyYXBzIGV0aHRvb2wgUFNFIG9wZXJhdGlvbnMgd2l0aCB0aGUgbmV3IGxvY2suXG5cblRoZXNlIGNoYW5nZXMgcHJpbWFyaWx5IGFkZHJlc3Mgb2JqZWN0IGxpZmVjeWNsZSBtYW5hZ2VtZW50LCBsb2NraW5nLCBhbmQgc3luY2hyb25pemF0aW9uLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbGlrZWx5IG1hbmlmZXN0IGFzIHVzZS1hZnRlci1mcmVlLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBkZWFkbG9ja3MsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGludm9sdmUgY29tcGxleCBidWZmZXIgYWxsb2NhdGlvbnMgb3IgbW9kaWZpY2F0aW9ucyB0byBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjEwOjQwLjc2OTY3NjIxOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzUzNTIyODUxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQU0VfQ09OVFJPTExFUlwiLFxuICAgIFwiUFNFX1JFR1VMQVRPUlwiLFxuICAgIFwiUkVHVUxBVE9SXCIsXG4gICAgXCJTRlBcIixcbiAgICBcIkZXTk9ERV9NRElPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGh5X3BzZV9jb250cm9sX2xvY2tcIixcbiAgICBcInBoeV9wc2VfY29udHJvbF91bmxvY2tcIixcbiAgICBcInBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkXCIsXG4gICAgXCJwaHlfZGV2aWNlX3JlZ2lzdGVyXCIsXG4gICAgXCJwaHlfZGV2aWNlX3JlbW92ZVwiLFxuICAgIFwicHNlX3JlZ2lzdGVyX25vdGlmaWVyXCIsXG4gICAgXCJwc2VfdW5yZWdpc3Rlcl9ub3RpZmllclwiLFxuICAgIFwicHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXJcIixcbiAgICBcInBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXJcIixcbiAgICBcInBzZV9jb250cm9sX21hdGNoZXNfcGNkZXZcIixcbiAgICBcImV0aG5sX3NldF9wc2VcIixcbiAgICBcInBzZV9wcmVwYXJlX2RhdGFcIixcbiAgICBcInBoeV9wc2VfYXR0YWNoX29uZVwiLFxuICAgIFwicGh5X3BzZV9kZXRhY2hfb25lXCIsXG4gICAgXCJwaHlfcHNlX25vdGlmaWVyX2V2ZW50XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcmVmYWN0b3JzIHRoZSBsaWZlY3ljbGUgYW5kIHN5bmNocm9uaXphdGlvbiBvZiBQU0UgKFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudCkgY29udHJvbGxlcnMgYXR0YWNoZWQgdG8gUEhZIGRldmljZXMuIEl0IGludHJvZHVjZXMgYSBub3RpZmllciBjaGFpbiAoYHBoeV9wc2Vfbm90aWZpZXJgKSBhbmQgYSBtdXRleCAoYHBoeV9wc2VfbG9ja2ApIHRvIHNhZmVseSBhdHRhY2ggYW5kIGRldGFjaCBgcGh5ZGV2LVxcdTAwM2Vwc2VjYCB3aGVuIFBTRSBjb250cm9sbGVycyBhcmUgcmVnaXN0ZXJlZCBvciB1bnJlZ2lzdGVyZWQsIHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzLiBJdCBhbHNvIHdyYXBzIGV0aHRvb2wgUFNFIG9wZXJhdGlvbnMgd2l0aCB0aGUgbmV3IGxvY2suXFxuXFxuVGhlc2UgY2hhbmdlcyBwcmltYXJpbHkgYWRkcmVzcyBvYmplY3QgbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIGxvY2tpbmcsIGFuZCBzeW5jaHJvbml6YXRpb24uIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBsaWtlbHkgbWFuaWZlc3QgYXMgdXNlLWFmdGVyLWZyZWUsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIGRlYWRsb2Nrcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgaW52b2x2ZSBjb21wbGV4IGJ1ZmZlciBhbGxvY2F0aW9ucyBvciBtb2RpZmljYXRpb25zIHRvIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIGhvdyB0aGUgUFNFIGNvbnRyb2xsZXIgaXMgYXR0YWNoZWQgdG8gdGhlIFBIWSBkZXZpY2UsIGludHJvZHVjaW5nIGEgbmV3IGxvY2sgKGBwaHlfcHNlX2xvY2tgKSBhbmQgYSBub3RpZmllciAoYHBoeV9wc2Vfbm90aWZpZXJgKSB0byBoYW5kbGUgUFNFIGNvbnRyb2xsZXIgcmVnaXN0cmF0aW9uIGFuZCB1bnJlZ2lzdHJhdGlvbi4gSXQgYWxzbyBtb2RpZmllcyB0aGUgZXRodG9vbCBQU0UgbmV0bGluayBpbnRlcmZhY2UgdG8gdXNlIHRoZSBuZXcgbG9jay4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIGNvcmUgUEhZIGxpYnJhcnkgYW5kIGV0aHRvb2wsIGFuZCBhcmUgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIGFuZCBQSFkgZGV2aWNlIHJlZ2lzdHJhdGlvbiBwYXRocywgd2hpY2ggY2FuIGJlIHRyaWdnZXJlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjEwOjQwLjc2OTY4MjQ3OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg1Mzg5NDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNjY4ZDA5M2IwOWZmMGU0MmJiNGFiMzk5ZDE0ZTJhYTAwMDdiYTVjZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAyNiAyMjoxMDozOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMgYi9kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmNcXG5pbmRleCBiYTcwOTE1MTgyNjU0Li43YmQ5NzliNTlmNDk2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uY1xcbisrKyBiL2RyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uY1xcbkBAIC0xMSwzMyArMTEsMTEgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Z3bm9kZV9tZGlvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9wc2UtcGQvcHNlLmhcXHUwMDNlXFxuIFxcbiBNT0RVTEVfQVVUSE9SKFxcXCJDYWx2aW4gSm9obnNvbiBcXHUwMDNjY2FsdmluLmpvaG5zb25Ab3NzLm54cC5jb21cXHUwMDNlXFxcIik7XFxuIE1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG4gTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJGV05PREUgTURJTyBidXMgKEV0aGVybmV0IFBIWSkgYWNjZXNzb3JzXFxcIik7XFxuIFxcbi1zdGF0aWMgc3RydWN0IHBzZV9jb250cm9sICpcXG4tZndub2RlX2ZpbmRfcHNlX2NvbnRyb2woc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSxcXG4tXFx0XFx0XFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4te1xcbi1cXHRzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWM7XFxuLVxcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7XFxuLVxcbi1cXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BTRV9DT05UUk9MTEVSKSlcXG4tXFx0XFx0cmV0dXJuIE5VTEw7XFxuLVxcbi1cXHRucCA9IHRvX29mX25vZGUoZndub2RlKTtcXG4tXFx0aWYgKCFucClcXG4tXFx0XFx0cmV0dXJuIE5VTEw7XFxuLVxcbi1cXHRwc2VjID0gb2ZfcHNlX2NvbnRyb2xfZ2V0KG5wLCBwaHlkZXYpO1xcbi1cXHRpZiAoUFRSX0VSUihwc2VjKSA9PSAtRU5PRU5UKVxcbi1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFxuLVxcdHJldHVybiBwc2VjO1xcbi19XFxuLVxcbiBzdGF0aWMgc3RydWN0IG1paV90aW1lc3RhbXBlciAqXFxuIGZ3bm9kZV9maW5kX21paV90aW1lc3RhbXBlcihzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKVxcbiB7XFxuQEAgLTExOCw3ICs5Niw2IEBAIGludCBmd25vZGVfbWRpb2J1c19yZWdpc3Rlcl9waHkoc3RydWN0IG1paV9idXMgKmJ1cyxcXG4gXFx0XFx0XFx0XFx0c3RydWN0IGZ3bm9kZV9oYW5kbGUgKmNoaWxkLCB1MzIgYWRkcilcXG4ge1xcbiBcXHRzdHJ1Y3QgbWlpX3RpbWVzdGFtcGVyICptaWlfdHMgPSBOVUxMO1xcbi1cXHRzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMgPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5O1xcbiBcXHRib29sIGlzX2M0NTtcXG4gXFx0dTMyIHBoeV9pZDtcXG5AQCAtMTU5LDE0ICsxMzYsNiBAQCBpbnQgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KHN0cnVjdCBtaWlfYnVzICpidXMsXFxuIFxcdFxcdFxcdGdvdG8gY2xlYW5fcGh5O1xcbiBcXHR9XFxuIFxcbi1cXHRwc2VjID0gZndub2RlX2ZpbmRfcHNlX2NvbnRyb2woY2hpbGQsIHBoeSk7XFxuLVxcdGlmIChJU19FUlIocHNlYykpIHtcXG4tXFx0XFx0cmMgPSBQVFJfRVJSKHBzZWMpO1xcbi1cXHRcXHRnb3RvIHVucmVnaXN0ZXJfcGh5O1xcbi1cXHR9XFxuLVxcbi1cXHRwaHktXFx1MDAzZXBzZWMgPSBwc2VjO1xcbi1cXG4gXFx0LyogcGh5LVxcdTAwM2VtaWlfdHMgbWF5IGFscmVhZHkgYmUgZGVmaW5lZCBieSB0aGUgUEhZIGRyaXZlci4gQVxcbiBcXHQgKiBtaWlfdGltZXN0YW1wZXIgcHJvYmVkIHZpYSB0aGUgZGV2aWNlIHRyZWUgd2lsbCBzdGlsbCBoYXZlXFxuIFxcdCAqIHByZWNlZGVuY2UuXFxuQEAgLTE3Niw5ICsxNDUsNiBAQCBpbnQgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KHN0cnVjdCBtaWlfYnVzICpidXMsXFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuLXVucmVnaXN0ZXJfcGh5Olxcbi1cXHRpZiAoaXNfYWNwaV9ub2RlKGNoaWxkKSB8fCBpc19vZl9ub2RlKGNoaWxkKSlcXG4tXFx0XFx0cGh5X2RldmljZV9yZW1vdmUocGh5KTtcXG4gY2xlYW5fcGh5OlxcbiBcXHRwaHlfZGV2aWNlX2ZyZWUocGh5KTtcXG4gY2xlYW5fbWlpX3RzOlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xcbmluZGV4IDA2MTUyMjg0NTllZjQuLmRjYTFiNDViYmJkMjYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcXG5AQCAtMTEwMiwxMSArMTEwMiwxMjggQEAgc3RydWN0IHBoeV9kZXZpY2UgKmdldF9waHlfZGV2aWNlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBib29sIGlzX2M0NSlcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKGdldF9waHlfZGV2aWNlKTtcXG4gXFxuKy8qIFNlcmlhbGlzZXMgcGh5ZGV2LVxcdTAwM2Vwc2VjIGFnYWluc3QgdGhlIFBTRSBub3RpZmllciBhbmQgZXRodG9vbCwgbm90IHJ0bmwuICovXFxuK3N0YXRpYyBERUZJTkVfTVVURVgocGh5X3BzZV9sb2NrKTtcXG4rXFxuKy8qIEJlc3QtZWZmb3J0IGF0dGFjaCBvZiBwaHlkZXYtXFx1MDAzZXBzZWMgZnJvbSBhIERUIGBwc2VzID0gXFx1MDAzY1xcdTAwMjYuLi5cXHUwMDNlYCBwaGFuZGxlLlxcbisgKiBDYWxsZXIgbXVzdCBob2xkIHBoeV9wc2VfbG9jay4gQSBtaXNzaW5nIHBoYW5kbGUgKC1FTk9FTlQpIG9yIGFcXG4rICogbm90LXlldC1yZWdpc3RlcmVkIGNvbnRyb2xsZXIgKC1FUFJPQkVfREVGRVIpIGlzIHNpbGVudDsgdGhlIG5vdGlmaWVyXFxuKyAqIHJldHJpZXMgdGhlIGxhdHRlciBhdCBQU0VfUkVHSVNURVJFRCB0aW1lLiBBbnkgb3RoZXIgZXJyb3IgbWVhbnMgYSBicm9rZW5cXG4rICogYmluZGluZyBhbmQgaXMgd2FybmVkIGFib3V0LCBidXQgbGVmdCBub24tZmF0YWwgc28gdGhlIHBoeSBzdGlsbCByZWdpc3RlcnMuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBwaHlfdHJ5X2F0dGFjaF9wc2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWM7XFxuK1xcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZwaHlfcHNlX2xvY2spO1xcbitcXG4rXFx0bnAgPSBwaHlkZXYtXFx1MDAzZW1kaW8uZGV2Lm9mX25vZGU7XFxuK1xcdGlmICghbnApXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZXBzZWMpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHBzZWMgPSBvZl9wc2VfY29udHJvbF9nZXQobnAsIHBoeWRldik7XFxuK1xcdGlmIChJU19FUlIocHNlYykpIHtcXG4rXFx0XFx0aWYgKFBUUl9FUlIocHNlYykgIT0gLUVQUk9CRV9ERUZFUiBcXHUwMDI2XFx1MDAyNiBQVFJfRVJSKHBzZWMpICE9IC1FTk9FTlQpXFxuK1xcdFxcdFxcdHBoeWRldl93YXJuKHBoeWRldiwgXFxcImZhaWxlZCB0byBnZXQgUFNFIGNvbnRyb2w6ICVwZVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgIHBzZWMpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdHBoeWRldi1cXHUwMDNlcHNlYyA9IHBzZWM7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcGh5X3BzZV9hdHRhY2hfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSBfX21heWJlX3VudXNlZClcXG4re1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZwaHlfcHNlX2xvY2spO1xcbitcXG4rXFx0aWYgKGRldi1cXHUwMDNldHlwZSAhPSBcXHUwMDI2bWRpb19idXNfcGh5X3R5cGUpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cGh5X3RyeV9hdHRhY2hfcHNlKHRvX3BoeV9kZXZpY2UoZGV2KSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBoeV9wc2VfZGV0YWNoX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYgPSBkYXRhO1xcbitcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xcbitcXHRzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWM7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZwaHlfcHNlX2xvY2spO1xcbitcXG4rXFx0aWYgKGRldi1cXHUwMDNldHlwZSAhPSBcXHUwMDI2bWRpb19idXNfcGh5X3R5cGUpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cGh5ZGV2ID0gdG9fcGh5X2RldmljZShkZXYpO1xcbitcXHRwc2VjID0gcGh5ZGV2LVxcdTAwM2Vwc2VjO1xcbitcXHRpZiAoIXBzZWMgfHwgIXBzZV9jb250cm9sX21hdGNoZXNfcGNkZXYocHNlYywgcGNkZXYpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHBoeWRldi1cXHUwMDNlcHNlYyA9IE5VTEw7XFxuK1xcdHBzZV9jb250cm9sX3B1dChwc2VjKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcGh5X3BzZV9ub3RpZmllcl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxcbitcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0c3dpdGNoIChldmVudCkge1xcbitcXHRjYXNlIFBTRV9SRUdJU1RFUkVEOlxcbitcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZwaHlfcHNlX2xvY2spO1xcbitcXHRcXHRidXNfZm9yX2VhY2hfZGV2KFxcdTAwMjZtZGlvX2J1c190eXBlLCBOVUxMLCBOVUxMLFxcbitcXHRcXHRcXHRcXHQgcGh5X3BzZV9hdHRhY2hfb25lKTtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwaHlfcHNlX2xvY2spO1xcbitcXHRcXHRyZXR1cm4gTk9USUZZX09LO1xcbitcXHRjYXNlIFBTRV9VTlJFR0lTVEVSRUQ6XFxuK1xcdFxcdG11dGV4X2xvY2soXFx1MDAyNnBoeV9wc2VfbG9jayk7XFxuK1xcdFxcdGJ1c19mb3JfZWFjaF9kZXYoXFx1MDAyNm1kaW9fYnVzX3R5cGUsIE5VTEwsIGRhdGEsXFxuK1xcdFxcdFxcdFxcdCBwaHlfcHNlX2RldGFjaF9vbmUpO1xcbitcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnBoeV9wc2VfbG9jayk7XFxuK1xcdFxcdHJldHVybiBOT1RJRllfT0s7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBOT1RJRllfRE9ORTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBoeV9wc2Vfbm90aWZpZXIgX19yZWFkX21vc3RseSA9IHtcXG4rXFx0Lm5vdGlmaWVyX2NhbGwgPSBwaHlfcHNlX25vdGlmaWVyX2V2ZW50LFxcbit9O1xcbitcXG4gLyoqXFxuLSAqIHBoeV9kZXZpY2VfcmVnaXN0ZXIgLSBSZWdpc3RlciB0aGUgcGh5IGRldmljZSBvbiB0aGUgTURJTyBidXNcXG4tICogQHBoeWRldjogcGh5X2RldmljZSBzdHJ1Y3R1cmUgdG8gYmUgYWRkZWQgdG8gdGhlIE1ESU8gYnVzXFxuKyAqIHBoeV9wc2VfY29udHJvbF9sb2NrIC0gaG9sZCBwaHlkZXYtXFx1MDAzZXBzZWMgc3RhYmxlIGFnYWluc3QgUFNFIGNvbnRyb2xsZXIgdGVhcmRvd25cXG4rICpcXG4rICogVGhlIFBTRV9VTlJFR0lTVEVSRUQgbm90aWZpZXIgZGV0YWNoZXMgcGh5ZGV2LVxcdTAwM2Vwc2VjIGFuZCBkcm9wcyBpdHMgbGFzdFxcbisgKiByZWZlcmVuY2UuIENhbGxlcnMgdGhhdCBkZXJlZmVyZW5jZSBwaHlkZXYtXFx1MDAzZXBzZWMgKHRoZSBldGh0b29sIFBTRSBwYXRocykgbXVzdFxcbisgKiBob2xkIHRoaXMgbG9jayBhY3Jvc3MgdGhlIGFjY2VzcyBzbyB0aGUgZGV0YWNoIGNhbm5vdCBydW4gdW5kZXJuZWF0aCB0aGVtLlxcbiAgKi9cXG4taW50IHBoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4rdm9pZCBwaHlfcHNlX2NvbnRyb2xfbG9jayh2b2lkKVxcbit7XFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnBoeV9wc2VfbG9jayk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwocGh5X3BzZV9jb250cm9sX2xvY2spO1xcbitcXG4rLyoqXFxuKyAqIHBoeV9wc2VfY29udHJvbF91bmxvY2sgLSByZWxlYXNlIHRoZSBsb2NrIHRha2VuIGJ5IHBoeV9wc2VfY29udHJvbF9sb2NrKClcXG4rICovXFxuK3ZvaWQgcGh5X3BzZV9jb250cm9sX3VubG9jayh2b2lkKVxcbit7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cGh5X3BzZV9sb2NrKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChwaHlfcHNlX2NvbnRyb2xfdW5sb2NrKTtcXG4rXFxuKy8qIENvcmUgcmVnaXN0cmF0aW9uOiBhZGQgdGhlIHBoeSB0byB0aGUgTURJTyBidXMuIERvZXMgbm90IHRvdWNoIHJ0bmwgb3JcXG4rICogUFNFLiBwaHlkZXYtXFx1MDAzZXBzZWMgaXMgYXR0YWNoZWQgYnkgdGhlIGNhbGxlcnMgYmVsb3csIGFmdGVyIGRldmljZV9hZGQoKVxcbisgKiBoYXMgbWFkZSB0aGUgcGh5IHZpc2libGUgb24gbWRpb19idXNfdHlwZSwgc28gdGhhdCBhIGNvbmN1cnJlbnQgUFNFXFxuKyAqIG5vdGlmaWVyIHdhbGsgYW5kIHRoZSBhdHRhY2ggY2FuIG5ldmVyIGxlYXZlIHRoZSBwaHkgdW5hdHRhY2hlZC4gS2VlcGluZ1xcbisgKiBkZXZpY2VfYWRkKCkgb3V0IG9mIHJ0bmwgYWxzbyBhdm9pZHMgZGVhZGxvY2tpbmcgd2hlbiBiaW5kaW5nIGEgcGh5IHRoYXRcXG4rICogaXRzZWxmIHByb3ZpZGVzIGFuIFNGUCBjYWdlIChwaHlfcHJvYmUoKSAtXFx1MDAzZSBwaHlfc2ZwX3Byb2JlKCkgLVxcdTAwM2VcXG4rICogc2ZwX2J1c19hZGRfdXBzdHJlYW0oKSB0YWtlcyBydG5sKS5cXG4rICovXFxuK3N0YXRpYyBpbnQgX19waHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIHtcXG4gXFx0aW50IGVycjtcXG4gXFxuQEAgLTExMzUsMTAgKzEyNTIsNTYgQEAgaW50IHBoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4gIG91dDpcXG4gXFx0LyogQXNzZXJ0IHRoZSByZXNldCBzaWduYWwgKi9cXG4gXFx0cGh5X2RldmljZV9yZXNldChwaHlkZXYsIDEpO1xcbi1cXG4gXFx0bWRpb2J1c191bnJlZ2lzdGVyX2RldmljZShcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvKTtcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbitcXG4rLyoqXFxuKyAqIHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkIC0gUmVnaXN0ZXIgdGhlIHBoeSBkZXZpY2Ugb24gdGhlIE1ESU8gYnVzXFxuKyAqIEBwaHlkZXY6IHBoeV9kZXZpY2Ugc3RydWN0dXJlIHRvIGJlIGFkZGVkIHRvIHRoZSBNRElPIGJ1c1xcbisgKlxcbisgKiBTYW1lIGFzIHBoeV9kZXZpY2VfcmVnaXN0ZXIoKSBidXQgY2FsbGVyIG11c3QgYWxyZWFkeSBob2xkIHJ0bmxfbG9jaygpLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxcbisgKi9cXG4raW50IHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdEFTU0VSVF9SVE5MKCk7XFxuK1xcbitcXHRlcnIgPSBfX3BoeV9kZXZpY2VfcmVnaXN0ZXIocGh5ZGV2KTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnBoeV9wc2VfbG9jayk7XFxuK1xcdHBoeV90cnlfYXR0YWNoX3BzZShwaHlkZXYpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnBoeV9wc2VfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkKTtcXG4rXFxuKy8qKlxcbisgKiBwaHlfZGV2aWNlX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgdGhlIHBoeSBkZXZpY2Ugb24gdGhlIE1ESU8gYnVzXFxuKyAqIEBwaHlkZXY6IHBoeV9kZXZpY2Ugc3RydWN0dXJlIHRvIGJlIGFkZGVkIHRvIHRoZSBNRElPIGJ1c1xcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxcbisgKi9cXG4raW50IHBoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0ZXJyID0gX19waHlfZGV2aWNlX3JlZ2lzdGVyKHBoeWRldik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwaHlfcHNlX2xvY2spO1xcbitcXHRwaHlfdHJ5X2F0dGFjaF9wc2UocGh5ZGV2KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwaHlfcHNlX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4gRVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX3JlZ2lzdGVyKTtcXG4gXFxuIC8qKlxcbkBAIC0xMTUyLDcgKzEzMTUsMTUgQEAgRVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX3JlZ2lzdGVyKTtcXG4gdm9pZCBwaHlfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbiB7XFxuIFxcdHVucmVnaXN0ZXJfbWlpX3RpbWVzdGFtcGVyKHBoeWRldi1cXHUwMDNlbWlpX3RzKTtcXG4rXFxuK1xcdC8qIERldGFjaCBzeW5jaHJvbm91c2x5LCBiZWZvcmUgdGhlIHBoeSBsZWF2ZXMgdGhlIGJ1cywgc28gdGhlIHB1dCBjYW5ub3RcXG4rXFx0ICogb3V0bGl2ZSB0aGUgUFNFIGNvbnRyb2xsZXIgKGFuIG9mZi1idXMgYnV0IHN0aWxsLXBpbm5lZCBwaHkgaXMgbWlzc2VkIGJ5XFxuK1xcdCAqIHRoZSBQU0VfVU5SRUdJU1RFUkVEIHdhbGspLiBwaHlfcHNlX2xvY2sgc2VyaWFsaXNlcyBhZ2FpbnN0IHRoYXQgd2Fsay5cXG4rXFx0ICovXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnBoeV9wc2VfbG9jayk7XFxuIFxcdHBzZV9jb250cm9sX3B1dChwaHlkZXYtXFx1MDAzZXBzZWMpO1xcbitcXHRwaHlkZXYtXFx1MDAzZXBzZWMgPSBOVUxMO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnBoeV9wc2VfbG9jayk7XFxuIFxcbiBcXHRkZXZpY2VfZGVsKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2KTtcXG4gXFxuQEAgLTM5ODEsOCArNDE1MiwxNCBAQCBzdGF0aWMgaW50IF9faW5pdCBwaHlfaW5pdCh2b2lkKVxcbiBcXHRpZiAocmMpXFxuIFxcdFxcdGdvdG8gZXJyX2M0NTtcXG4gXFxuK1xcdHJjID0gcHNlX3JlZ2lzdGVyX25vdGlmaWVyKFxcdTAwMjZwaHlfcHNlX25vdGlmaWVyKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRnb3RvIGVycl9nZW5waHk7XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gXFxuK2Vycl9nZW5waHk6XFxuK1xcdHBoeV9kcml2ZXJfdW5yZWdpc3RlcihcXHUwMDI2Z2VucGh5X2RyaXZlcik7XFxuIGVycl9jNDU6XFxuIFxcdHBoeV9kcml2ZXJfdW5yZWdpc3RlcihcXHUwMDI2Z2VucGh5X2M0NV9kcml2ZXIpO1xcbiBlcnJfZXRodG9vbF9waHlfb3BzOlxcbkBAIC0zOTk5LDYgKzQxNzYsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBwaHlfaW5pdCh2b2lkKVxcbiBcXG4gc3RhdGljIHZvaWQgX19leGl0IHBoeV9leGl0KHZvaWQpXFxuIHtcXG4rXFx0cHNlX3VucmVnaXN0ZXJfbm90aWZpZXIoXFx1MDAyNnBoeV9wc2Vfbm90aWZpZXIpO1xcbiBcXHRwaHlfZHJpdmVyX3VucmVnaXN0ZXIoXFx1MDAyNmdlbnBoeV9jNDVfZHJpdmVyKTtcXG4gXFx0cGh5X2RyaXZlcl91bnJlZ2lzdGVyKFxcdTAwMjZnZW5waHlfZHJpdmVyKTtcXG4gXFx0cnRubF9sb2NrKCk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9zZnAuYyBiL2RyaXZlcnMvbmV0L3BoeS9zZnAuY1xcbmluZGV4IDAzYmZkODY0MGRiOTYuLjE4ODY4YmRkNjQ4NTIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3NmcC5jXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L3NmcC5jXFxuQEAgLTIwODMsNyArMjA4Myw3IEBAIHN0YXRpYyBpbnQgc2ZwX3NtX3Byb2JlX3BoeShzdHJ1Y3Qgc2ZwICpzZnAsIGludCBhZGRyLCBib29sIGlzX2M0NSlcXG4gXFx0LyogTWFyayB0aGlzIFBIWSBhcyBiZWluZyBvbiBhIFNGUCBtb2R1bGUgKi9cXG4gXFx0cGh5LVxcdTAwM2Vpc19vbl9zZnBfbW9kdWxlID0gdHJ1ZTtcXG4gXFxuLVxcdGVyciA9IHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5KTtcXG4rXFx0ZXJyID0gcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWQocGh5KTtcXG4gXFx0aWYgKGVycikge1xcbiBcXHRcXHRwaHlfZGV2aWNlX2ZyZWUocGh5KTtcXG4gXFx0XFx0ZGV2X2VycihzZnAtXFx1MDAzZWRldiwgXFxcInBoeV9kZXZpY2VfcmVnaXN0ZXIgZmFpbGVkOiAlcGVcXFxcblxcXCIsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jIGIvZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmNcXG5pbmRleCA2OWRiZGJkZTlkNzFhLi42MTE1NDBkZjQzYmIxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jXFxuKysrIGIvZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmNcXG5AQCAtOCw2ICs4LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RldmljZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXRodG9vbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXRodG9vbF9uZXRsaW5rLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9ub3RpZmllci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvb2YuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcHNlLXBkL3BzZS5oXFx1MDAzZVxcbkBAIC0yMyw2ICsyNCwzOSBAQCBzdGF0aWMgTElTVF9IRUFEKHBzZV9jb250cm9sbGVyX2xpc3QpO1xcbiBzdGF0aWMgREVGSU5FX1hBUlJBWV9BTExPQyhwc2VfcHdfZF9tYXApO1xcbiBzdGF0aWMgREVGSU5FX01VVEVYKHBzZV9wd19kX211dGV4KTtcXG4gXFxuK3N0YXRpYyBCTE9DS0lOR19OT1RJRklFUl9IRUFEKHBzZV9jb250cm9sbGVyX25vdGlmaWVyKTtcXG4rXFxuKy8qKlxcbisgKiBwc2VfcmVnaXN0ZXJfbm90aWZpZXIgLSByZWdpc3RlciBhIGNhbGxiYWNrIGZvciBQU0UgY29udHJvbGxlciBldmVudHNcXG4rICogQG5iOiBub3RpZmllciBibG9jayB0byByZWdpc3RlclxcbisgKlxcbisgKiBTZWUgZW51bSBwc2VfY29udHJvbGxlcl9ldmVudCBmb3IgZXZlbnRzIGZpcmVkIGFuZCB0aGVpciBzdWJzY3JpYmVyXFxuKyAqIGNvbnRyYWN0LiBDYWxsYmFja3MgcnVuIGluIHByb2Nlc3MgY29udGV4dDsgdGhleSBtYXkgc2xlZXAsIHRha2VcXG4rICogcnRubCwgYW5kIGNhbGwgb2ZfcHNlX2NvbnRyb2xfZ2V0KCkuIFRoZSBjaGFpbiBmaXJlcyBzeW5jaHJvbm91c2x5LFxcbisgKiBzbyBhIFBTRSBjb250cm9sbGVyIGRyaXZlcidzIHByb2JlL3VuYmluZCBwYXRoIG11c3Qgbm90IGhvbGQgYW55XFxuKyAqIHN1Y2ggbG9jayB3aGVuIGNhbGxpbmcgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoKSBvclxcbisgKiBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyKCkuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cXG4rICovXFxuK2ludCBwc2VfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYilcXG4re1xcbitcXHRyZXR1cm4gYmxvY2tpbmdfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoXFx1MDAyNnBzZV9jb250cm9sbGVyX25vdGlmaWVyLCBuYik7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwocHNlX3JlZ2lzdGVyX25vdGlmaWVyKTtcXG4rXFxuKy8qKlxcbisgKiBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllciAtIHVucmVnaXN0ZXIgYSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgY2FsbGJhY2tcXG4rICogQG5iOiBub3RpZmllciBibG9jayBwcmV2aW91c2x5IHBhc3NlZCB0byBwc2VfcmVnaXN0ZXJfbm90aWZpZXIoKVxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuXFxuKyAqL1xcbitpbnQgcHNlX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYilcXG4re1xcbitcXHRyZXR1cm4gYmxvY2tpbmdfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcihcXHUwMDI2cHNlX2NvbnRyb2xsZXJfbm90aWZpZXIsIG5iKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcik7XFxuK1xcbiAvKipcXG4gICogc3RydWN0IHBzZV9jb250cm9sIC0gYSBQU0UgY29udHJvbFxcbiAgKiBAcGNkZXY6IGEgcG9pbnRlciB0byB0aGUgUFNFIGNvbnRyb2xsZXIgZGV2aWNlXFxuQEAgLTExMDQsNiArMTEzOCw5IEBAIGludCBwc2VfY29udHJvbGxlcl9yZWdpc3RlcihzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldilcXG4gXFx0bGlzdF9hZGQoXFx1MDAyNnBjZGV2LVxcdTAwM2VsaXN0LCBcXHUwMDI2cHNlX2NvbnRyb2xsZXJfbGlzdCk7XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2cHNlX2xpc3RfbXV0ZXgpO1xcbiBcXG4rXFx0YmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbihcXHUwMDI2cHNlX2NvbnRyb2xsZXJfbm90aWZpZXIsXFxuK1xcdFxcdFxcdFxcdCAgICAgUFNFX1JFR0lTVEVSRUQsIHBjZGV2KTtcXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKTtcXG5AQCAtMTExNCw2ICsxMTUxLDkgQEAgRVhQT1JUX1NZTUJPTF9HUEwocHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIpO1xcbiAgKi9cXG4gdm9pZCBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxcbiB7XFxuK1xcdGJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oXFx1MDAyNnBzZV9jb250cm9sbGVyX25vdGlmaWVyLFxcbitcXHRcXHRcXHRcXHQgICAgIFBTRV9VTlJFR0lTVEVSRUQsIHBjZGV2KTtcXG4rXFxuIFxcdHBzZV9mbHVzaF9wd19kcyhwY2Rldik7XFxuIFxcdHBzZV9yZWxlYXNlX3BpcyhwY2Rldik7XFxuIFxcdGlmIChwY2Rldi1cXHUwMDNlaXJxKVxcbkBAIC0xOTgxLDMgKzIwMjEsMTcgQEAgYm9vbCBwc2VfaGFzX2MzMyhzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMpXFxuIFxcdHJldHVybiBwc2VjLVxcdTAwM2VwY2Rldi1cXHUwMDNldHlwZXMgXFx1MDAyNiBFVEhUT09MX1BTRV9DMzM7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwocHNlX2hhc19jMzMpO1xcbitcXG4rLyoqXFxuKyAqIHBzZV9jb250cm9sX21hdGNoZXNfcGNkZXYgLSBUZXN0IHdoZXRoZXIgYSBwc2VfY29udHJvbCB0YXJnZXRzIGEgY29udHJvbGxlclxcbisgKiBAcHNlYzogcHNlX2NvbnRyb2wgb2J0YWluZWQgZnJvbSBvZl9wc2VfY29udHJvbF9nZXQoKVxcbisgKiBAcGNkZXY6IFBTRSBjb250cm9sbGVyIHRvIGNvbXBhcmUgYWdhaW5zdFxcbisgKlxcbisgKiBSZXR1cm46ICV0cnVlIGlmIEBwc2VjIHdhcyBvYnRhaW5lZCBmcm9tIEBwY2RldiwgJWZhbHNlIG90aGVyd2lzZS5cXG4rICovXFxuK2Jvb2wgcHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldihzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldilcXG4re1xcbitcXHRyZXR1cm4gcHNlYy1cXHUwMDNlcGNkZXYgPT0gcGNkZXY7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwocHNlX2NvbnRyb2xfbWF0Y2hlc19wY2Rldik7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oXFxuaW5kZXggMTk5YTdhYWEzNDFiZi4uNTVhMDA0OWM2YzJiNSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9waHkuaFxcbkBAIC0yMTU4LDggKzIxNTgsMTIgQEAgc3RydWN0IHBoeV9kZXZpY2UgKmZ3bm9kZV9waHlfZmluZF9kZXZpY2Uoc3RydWN0IGZ3bm9kZV9oYW5kbGUgKnBoeV9md25vZGUpO1xcbiBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlX2dldF9waHlfbm9kZShjb25zdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKTtcXG4gc3RydWN0IHBoeV9kZXZpY2UgKmdldF9waHlfZGV2aWNlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBib29sIGlzX2M0NSk7XFxuIGludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpO1xcbisvKiBDYWxsZXIgbXVzdCBob2xkIHJ0bmxfbG9jaygpOyBzZWUgcGh5X2RldmljZV9yZWdpc3RlcigpIGZvciB0aGUgcHVibGljIGZvcm0uICovXFxuK2ludCBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KTtcXG4gdm9pZCBwaHlfZGV2aWNlX2ZyZWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XFxuIHZvaWQgcGh5X2RldmljZV9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XFxuK3ZvaWQgcGh5X3BzZV9jb250cm9sX2xvY2sodm9pZCk7XFxuK3ZvaWQgcGh5X3BzZV9jb250cm9sX3VubG9jayh2b2lkKTtcXG4gaW50IHBoeV9nZXRfYzQ1X2lkcyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcXG4gaW50IHBoeV9pbml0X2h3KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xcbiBpbnQgcGh5X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHNlLXBkL3BzZS5oIGIvaW5jbHVkZS9saW51eC9wc2UtcGQvcHNlLmhcXG5pbmRleCA0ZTU2OTZjZmFkZTdjLi5kNDMxMGNhNzFhM2UwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcHNlLXBkL3BzZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9wc2UtcGQvcHNlLmhcXG5AQCAtMjEsNiArMjEsNyBAQCBzdHJ1Y3QgbmV0X2RldmljZTtcXG4gc3RydWN0IHBoeV9kZXZpY2U7XFxuIHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXY7XFxuIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2s7XFxuK3N0cnVjdCBub3RpZmllcl9ibG9jaztcXG4gXFxuIC8qIEMzMyBQU0UgZXh0ZW5kZWQgc3RhdGUgYW5kIHN1YnN0YXRlLiAqL1xcbiBzdHJ1Y3QgZXRodG9vbF9jMzNfcHNlX2V4dF9zdGF0ZV9pbmZvIHtcXG5AQCAtMzM3LDYgKzMzOCwyNCBAQCBlbnVtIHBzZV9idWRnZXRfZXZhbF9zdHJhdGVnaWVzIHtcXG4gXFx0UFNFX0JVREdFVF9FVkFMX1NUUkFUX0RZTkFNSUNcXHQ9IDEgXFx1MDAzY1xcdTAwM2MgMixcXG4gfTtcXG4gXFxuKy8qKlxcbisgKiBlbnVtIHBzZV9jb250cm9sbGVyX2V2ZW50IC0gUFNFIGNvbnRyb2xsZXIgbGlmZWN5Y2xlIGV2ZW50c1xcbisgKlxcbisgKiBFdmVudCBkYXRhIGluIGNhbGxiYWNrcyBpcyBhbHdheXMgYSBwb2ludGVyIHRvIHRoZSBzdHJ1Y3RcXG4rICogcHNlX2NvbnRyb2xsZXJfZGV2IGZpcmluZyB0aGUgZXZlbnQuXFxuKyAqXFxuKyAqIEBQU0VfUkVHSVNURVJFRDogY29udHJvbGxlciBhZGRlZCB0byBwc2VfY29udHJvbGxlcl9saXN0IGFuZFxcbisgKlxcdHJlc29sdmFibGUgYnkgb2ZfcHNlX2NvbnRyb2xfZ2V0KCkuXFxuKyAqIEBQU0VfVU5SRUdJU1RFUkVEOiBjb250cm9sbGVyIGFib3V0IHRvIGJlIHJlbW92ZWQgZnJvbVxcbisgKlxcdHBzZV9jb250cm9sbGVyX2xpc3QuIFN1YnNjcmliZXJzIGhvbGRpbmcgcHNlX2NvbnRyb2wgcmVmZXJlbmNlc1xcbisgKlxcdHRhcmdldGluZyBpdCBtdXN0IGRyb3AgdGhlbSBiZWZvcmUgcmV0dXJuaW5nIGFuZCBtdXN0IG5vdFxcbisgKlxcdGFjcXVpcmUgbmV3IHJlZmVyZW5jZXMgZm9yIGl0LlxcbisgKi9cXG4rZW51bSBwc2VfY29udHJvbGxlcl9ldmVudCB7XFxuK1xcdFBTRV9SRUdJU1RFUkVELFxcbitcXHRQU0VfVU5SRUdJU1RFUkVELFxcbit9O1xcbitcXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX1BTRV9DT05UUk9MTEVSKVxcbiBpbnQgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpO1xcbiB2b2lkIHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXIoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpO1xcbkBAIC0zNjYsNiArMzg1LDEyIEBAIGludCBwc2VfZXRodG9vbF9zZXRfcHJpbyhzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMsXFxuIGJvb2wgcHNlX2hhc19wb2RsKHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYyk7XFxuIGJvb2wgcHNlX2hhc19jMzMoc3RydWN0IHBzZV9jb250cm9sICpwc2VjKTtcXG4gXFxuK2Jvb2wgcHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldihzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2Rldik7XFxuK1xcbitpbnQgcHNlX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpO1xcbitpbnQgcHNlX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7XFxuK1xcbiAjZWxzZVxcbiBcXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgcHNlX2NvbnRyb2wgKm9mX3BzZV9jb250cm9sX2dldChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsXFxuQEAgLTQxNiw2ICs0NDEsMjIgQEAgc3RhdGljIGlubGluZSBib29sIHBzZV9oYXNfYzMzKHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYylcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGJvb2wgcHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldihzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXFxuK3tcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludCBwc2VfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYilcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnQgcHNlX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYilcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gI2VuZGlmXFxuIFxcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvcHNlLXBkLmMgYi9uZXQvZXRodG9vbC9wc2UtcGQuY1xcbmluZGV4IDc1N2M5ZTBjYzg1NmYuLjRlZGQ5YTUxNGRlMTQgMTAwNjQ0XFxuLS0tIGEvbmV0L2V0aHRvb2wvcHNlLXBkLmNcXG4rKysgYi9uZXQvZXRodG9vbC9wc2UtcGQuY1xcbkBAIC03MSw3ICs3MSw5IEBAIHN0YXRpYyBpbnQgcHNlX3ByZXBhcmVfZGF0YShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLFxcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuK1xcdHBoeV9wc2VfY29udHJvbF9sb2NrKCk7XFxuIFxcdHJldCA9IHBzZV9nZXRfcHNlX2F0dHJpYnV0ZXMocGh5ZGV2LCBpbmZvLVxcdTAwM2VleHRhY2ssIGRhdGEpO1xcbitcXHRwaHlfcHNlX2NvbnRyb2xfdW5sb2NrKCk7XFxuIFxcbiBcXHRldGhubF9vcHNfY29tcGxldGUoZGV2KTtcXG4gXFxuQEAgLTI4MSw5ICsyODMsMTIgQEAgZXRobmxfc2V0X3BzZShzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXG4gXFx0cGh5ZGV2ID0gZXRobmxfcmVxX2dldF9waHlkZXYocmVxX2luZm8sIHRiLCBFVEhUT09MX0FfUFNFX0hFQURFUixcXG4gXFx0XFx0XFx0XFx0ICAgICAgaW5mby1cXHUwMDNlZXh0YWNrKTtcXG4rXFxuK1xcdHBoeV9wc2VfY29udHJvbF9sb2NrKCk7XFxuK1xcbiBcXHRyZXQgPSBldGhubF9zZXRfcHNlX3ZhbGlkYXRlKHBoeWRldiwgaW5mbyk7XFxuIFxcdGlmIChyZXQpXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbiBcXG4gXFx0aWYgKHRiW0VUSFRPT0xfQV9QU0VfUFJJT10pIHtcXG4gXFx0XFx0dW5zaWduZWQgaW50IHByaW87XFxuQEAgLTI5MSw3ICsyOTYsNyBAQCBldGhubF9zZXRfcHNlKHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdFxcdHByaW8gPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUFNFX1BSSU9dKTtcXG4gXFx0XFx0cmV0ID0gcHNlX2V0aHRvb2xfc2V0X3ByaW8ocGh5ZGV2LVxcdTAwM2Vwc2VjLCBpbmZvLVxcdTAwM2VleHRhY2ssIHByaW8pO1xcbiBcXHRcXHRpZiAocmV0KVxcbi1cXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKHRiW0VUSFRPT0xfQV9DMzNfUFNFX0FWQUlMX1BXX0xJTUlUXSkge1xcbkBAIC0zMDEsNyArMzA2LDcgQEAgZXRobmxfc2V0X3BzZShzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRcXHRyZXQgPSBwc2VfZXRodG9vbF9zZXRfcHdfbGltaXQocGh5ZGV2LVxcdTAwM2Vwc2VjLCBpbmZvLVxcdTAwM2VleHRhY2ssXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBwd19saW1pdCk7XFxuIFxcdFxcdGlmIChyZXQpXFxuLVxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcbiBcXHQvKiBUaGVzZSB2YWx1ZXMgYXJlIGFscmVhZHkgdmFsaWRhdGVkIGJ5IHRoZSBldGhubF9wc2Vfc2V0X3BvbGljeSAqL1xcbkBAIC0zMTksMTEgKzMyNCwxMSBAQCBldGhubF9zZXRfcHNlKHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRyZXQgPSBwc2VfZXRodG9vbF9zZXRfY29uZmlnKHBoeWRldi1cXHUwMDNlcHNlYywgaW5mby1cXHUwMDNlZXh0YWNrLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZjb25maWcpO1xcbi1cXHRcXHRpZiAocmV0KVxcbi1cXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHR9XFxuIFxcbitvdXQ6XFxuIFxcdC8qIFJldHVybiBlcnJubyBvciB6ZXJvIC0gUFNFIGhhcyBubyBub3RpZmljYXRpb24gKi9cXG4rXFx0cGh5X3BzZV9jb250cm9sX3VubG9jaygpO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMDo0MS4yNTYxMjMzNTdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTQzNzUwNDY5MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFNFX0NPTlRST0xMRVJcIixcbiAgICBcIlBTRV9SRUdVTEFUT1JcIixcbiAgICBcIlJFR1VMQVRPUlwiLFxuICAgIFwiU0ZQXCIsXG4gICAgXCJGV05PREVfTURJT1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBoeV9wc2VfY29udHJvbF9sb2NrXCIsXG4gICAgXCJwaHlfcHNlX2NvbnRyb2xfdW5sb2NrXCIsXG4gICAgXCJwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZFwiLFxuICAgIFwicGh5X2RldmljZV9yZWdpc3RlclwiLFxuICAgIFwicGh5X2RldmljZV9yZW1vdmVcIixcbiAgICBcInBzZV9yZWdpc3Rlcl9ub3RpZmllclwiLFxuICAgIFwicHNlX3VucmVnaXN0ZXJfbm90aWZpZXJcIixcbiAgICBcInBzZV9jb250cm9sbGVyX3JlZ2lzdGVyXCIsXG4gICAgXCJwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyXCIsXG4gICAgXCJwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2XCIsXG4gICAgXCJldGhubF9zZXRfcHNlXCIsXG4gICAgXCJwc2VfcHJlcGFyZV9kYXRhXCIsXG4gICAgXCJwaHlfcHNlX2F0dGFjaF9vbmVcIixcbiAgICBcInBoeV9wc2VfZGV0YWNoX29uZVwiLFxuICAgIFwicGh5X3BzZV9ub3RpZmllcl9ldmVudFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgaG93IHRoZSBQU0UgY29udHJvbGxlciBpcyBhdHRhY2hlZCB0byB0aGUgUEhZIGRldmljZSwgaW50cm9kdWNpbmcgYSBuZXcgbG9jayAoYHBoeV9wc2VfbG9ja2ApIGFuZCBhIG5vdGlmaWVyIChgcGh5X3BzZV9ub3RpZmllcmApIHRvIGhhbmRsZSBQU0UgY29udHJvbGxlciByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uLiBJdCBhbHNvIG1vZGlmaWVzIHRoZSBldGh0b29sIFBTRSBuZXRsaW5rIGludGVyZmFjZSB0byB1c2UgdGhlIG5ldyBsb2NrLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCB0aGUgY29yZSBQSFkgbGlicmFyeSBhbmQgZXRodG9vbCwgYW5kIGFyZSByZWFjaGFibGUgdmlhIG5ldGxpbmsgYW5kIFBIWSBkZXZpY2UgcmVnaXN0cmF0aW9uIHBhdGhzLCB3aGljaCBjYW4gYmUgdHJpZ2dlcmVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjY4ZDA5M2IwOWZmMGU0MmJiNGFiMzk5ZDE0ZTJhYTAwMDdiYTVjZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDIyOjEwOjM5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jIGIvZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jXG5pbmRleCBiYTcwOTE1MTgyNjU0Li43YmQ5NzliNTlmNDk2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jXG4rKysgYi9kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmNcbkBAIC0xMSwzMyArMTEsMTEgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9md25vZGVfbWRpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvcHNlLXBkL3BzZS5oXHUwMDNlXG4gXG4gTU9EVUxFX0FVVEhPUihcIkNhbHZpbiBKb2huc29uIFx1MDAzY2NhbHZpbi5qb2huc29uQG9zcy5ueHAuY29tXHUwMDNlXCIpO1xuIE1PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuIE1PRFVMRV9ERVNDUklQVElPTihcIkZXTk9ERSBNRElPIGJ1cyAoRXRoZXJuZXQgUEhZKSBhY2Nlc3NvcnNcIik7XG4gXG4tc3RhdGljIHN0cnVjdCBwc2VfY29udHJvbCAqXG4tZndub2RlX2ZpbmRfcHNlX2NvbnRyb2woc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSxcbi1cdFx0XHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLXtcbi1cdHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYztcbi1cdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7XG4tXG4tXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BTRV9DT05UUk9MTEVSKSlcbi1cdFx0cmV0dXJuIE5VTEw7XG4tXG4tXHRucCA9IHRvX29mX25vZGUoZndub2RlKTtcbi1cdGlmICghbnApXG4tXHRcdHJldHVybiBOVUxMO1xuLVxuLVx0cHNlYyA9IG9mX3BzZV9jb250cm9sX2dldChucCwgcGh5ZGV2KTtcbi1cdGlmIChQVFJfRVJSKHBzZWMpID09IC1FTk9FTlQpXG4tXHRcdHJldHVybiBOVUxMO1xuLVxuLVx0cmV0dXJuIHBzZWM7XG4tfVxuLVxuIHN0YXRpYyBzdHJ1Y3QgbWlpX3RpbWVzdGFtcGVyICpcbiBmd25vZGVfZmluZF9taWlfdGltZXN0YW1wZXIoc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSlcbiB7XG5AQCAtMTE4LDcgKzk2LDYgQEAgaW50IGZ3bm9kZV9tZGlvYnVzX3JlZ2lzdGVyX3BoeShzdHJ1Y3QgbWlpX2J1cyAqYnVzLFxuIFx0XHRcdFx0c3RydWN0IGZ3bm9kZV9oYW5kbGUgKmNoaWxkLCB1MzIgYWRkcilcbiB7XG4gXHRzdHJ1Y3QgbWlpX3RpbWVzdGFtcGVyICptaWlfdHMgPSBOVUxMO1xuLVx0c3RydWN0IHBzZV9jb250cm9sICpwc2VjID0gTlVMTDtcbiBcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHk7XG4gXHRib29sIGlzX2M0NTtcbiBcdHUzMiBwaHlfaWQ7XG5AQCAtMTU5LDE0ICsxMzYsNiBAQCBpbnQgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KHN0cnVjdCBtaWlfYnVzICpidXMsXG4gXHRcdFx0Z290byBjbGVhbl9waHk7XG4gXHR9XG4gXG4tXHRwc2VjID0gZndub2RlX2ZpbmRfcHNlX2NvbnRyb2woY2hpbGQsIHBoeSk7XG4tXHRpZiAoSVNfRVJSKHBzZWMpKSB7XG4tXHRcdHJjID0gUFRSX0VSUihwc2VjKTtcbi1cdFx0Z290byB1bnJlZ2lzdGVyX3BoeTtcbi1cdH1cbi1cbi1cdHBoeS1cdTAwM2Vwc2VjID0gcHNlYztcbi1cbiBcdC8qIHBoeS1cdTAwM2VtaWlfdHMgbWF5IGFscmVhZHkgYmUgZGVmaW5lZCBieSB0aGUgUEhZIGRyaXZlci4gQVxuIFx0ICogbWlpX3RpbWVzdGFtcGVyIHByb2JlZCB2aWEgdGhlIGRldmljZSB0cmVlIHdpbGwgc3RpbGwgaGF2ZVxuIFx0ICogcHJlY2VkZW5jZS5cbkBAIC0xNzYsOSArMTQ1LDYgQEAgaW50IGZ3bm9kZV9tZGlvYnVzX3JlZ2lzdGVyX3BoeShzdHJ1Y3QgbWlpX2J1cyAqYnVzLFxuIFxuIFx0cmV0dXJuIDA7XG4gXG4tdW5yZWdpc3Rlcl9waHk6XG4tXHRpZiAoaXNfYWNwaV9ub2RlKGNoaWxkKSB8fCBpc19vZl9ub2RlKGNoaWxkKSlcbi1cdFx0cGh5X2RldmljZV9yZW1vdmUocGh5KTtcbiBjbGVhbl9waHk6XG4gXHRwaHlfZGV2aWNlX2ZyZWUocGh5KTtcbiBjbGVhbl9taWlfdHM6XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcbmluZGV4IDA2MTUyMjg0NTllZjQuLmRjYTFiNDViYmJkMjYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG5AQCAtMTEwMiwxMSArMTEwMiwxMjggQEAgc3RydWN0IHBoeV9kZXZpY2UgKmdldF9waHlfZGV2aWNlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBib29sIGlzX2M0NSlcbiB9XG4gRVhQT1JUX1NZTUJPTChnZXRfcGh5X2RldmljZSk7XG4gXG4rLyogU2VyaWFsaXNlcyBwaHlkZXYtXHUwMDNlcHNlYyBhZ2FpbnN0IHRoZSBQU0Ugbm90aWZpZXIgYW5kIGV0aHRvb2wsIG5vdCBydG5sLiAqL1xuK3N0YXRpYyBERUZJTkVfTVVURVgocGh5X3BzZV9sb2NrKTtcbitcbisvKiBCZXN0LWVmZm9ydCBhdHRhY2ggb2YgcGh5ZGV2LVx1MDAzZXBzZWMgZnJvbSBhIERUIGBwc2VzID0gXHUwMDNjXHUwMDI2Li4uXHUwMDNlYCBwaGFuZGxlLlxuKyAqIENhbGxlciBtdXN0IGhvbGQgcGh5X3BzZV9sb2NrLiBBIG1pc3NpbmcgcGhhbmRsZSAoLUVOT0VOVCkgb3IgYVxuKyAqIG5vdC15ZXQtcmVnaXN0ZXJlZCBjb250cm9sbGVyICgtRVBST0JFX0RFRkVSKSBpcyBzaWxlbnQ7IHRoZSBub3RpZmllclxuKyAqIHJldHJpZXMgdGhlIGxhdHRlciBhdCBQU0VfUkVHSVNURVJFRCB0aW1lLiBBbnkgb3RoZXIgZXJyb3IgbWVhbnMgYSBicm9rZW5cbisgKiBiaW5kaW5nIGFuZCBpcyB3YXJuZWQgYWJvdXQsIGJ1dCBsZWZ0IG5vbi1mYXRhbCBzbyB0aGUgcGh5IHN0aWxsIHJlZ2lzdGVycy5cbisgKi9cbitzdGF0aWMgdm9pZCBwaHlfdHJ5X2F0dGFjaF9wc2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWM7XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wO1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwaHlfcHNlX2xvY2spO1xuK1xuK1x0bnAgPSBwaHlkZXYtXHUwMDNlbWRpby5kZXYub2Zfbm9kZTtcbitcdGlmICghbnApXG4rXHRcdHJldHVybjtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlcHNlYylcbitcdFx0cmV0dXJuO1xuK1xuK1x0cHNlYyA9IG9mX3BzZV9jb250cm9sX2dldChucCwgcGh5ZGV2KTtcbitcdGlmIChJU19FUlIocHNlYykpIHtcbitcdFx0aWYgKFBUUl9FUlIocHNlYykgIT0gLUVQUk9CRV9ERUZFUiBcdTAwMjZcdTAwMjYgUFRSX0VSUihwc2VjKSAhPSAtRU5PRU5UKVxuK1x0XHRcdHBoeWRldl93YXJuKHBoeWRldiwgXCJmYWlsZWQgdG8gZ2V0IFBTRSBjb250cm9sOiAlcGVcXG5cIixcbitcdFx0XHRcdCAgICBwc2VjKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0cGh5ZGV2LVx1MDAzZXBzZWMgPSBwc2VjO1xuK31cbitcbitzdGF0aWMgaW50IHBoeV9wc2VfYXR0YWNoX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEgX19tYXliZV91bnVzZWQpXG4re1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwaHlfcHNlX2xvY2spO1xuK1xuK1x0aWYgKGRldi1cdTAwM2V0eXBlICE9IFx1MDAyNm1kaW9fYnVzX3BoeV90eXBlKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHBoeV90cnlfYXR0YWNoX3BzZSh0b19waHlfZGV2aWNlKGRldikpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGh5X3BzZV9kZXRhY2hfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSlcbit7XG4rXHRzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiA9IGRhdGE7XG4rXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xuK1x0c3RydWN0IHBzZV9jb250cm9sICpwc2VjO1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwaHlfcHNlX2xvY2spO1xuK1xuK1x0aWYgKGRldi1cdTAwM2V0eXBlICE9IFx1MDAyNm1kaW9fYnVzX3BoeV90eXBlKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHBoeWRldiA9IHRvX3BoeV9kZXZpY2UoZGV2KTtcbitcdHBzZWMgPSBwaHlkZXYtXHUwMDNlcHNlYztcbitcdGlmICghcHNlYyB8fCAhcHNlX2NvbnRyb2xfbWF0Y2hlc19wY2Rldihwc2VjLCBwY2RldikpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cGh5ZGV2LVx1MDAzZXBzZWMgPSBOVUxMO1xuK1x0cHNlX2NvbnRyb2xfcHV0KHBzZWMpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGh5X3BzZV9ub3RpZmllcl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuK1x0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpkYXRhKVxuK3tcbitcdHN3aXRjaCAoZXZlbnQpIHtcbitcdGNhc2UgUFNFX1JFR0lTVEVSRUQ6XG4rXHRcdG11dGV4X2xvY2soXHUwMDI2cGh5X3BzZV9sb2NrKTtcbitcdFx0YnVzX2Zvcl9lYWNoX2RldihcdTAwMjZtZGlvX2J1c190eXBlLCBOVUxMLCBOVUxMLFxuK1x0XHRcdFx0IHBoeV9wc2VfYXR0YWNoX29uZSk7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZwaHlfcHNlX2xvY2spO1xuK1x0XHRyZXR1cm4gTk9USUZZX09LO1xuK1x0Y2FzZSBQU0VfVU5SRUdJU1RFUkVEOlxuK1x0XHRtdXRleF9sb2NrKFx1MDAyNnBoeV9wc2VfbG9jayk7XG4rXHRcdGJ1c19mb3JfZWFjaF9kZXYoXHUwMDI2bWRpb19idXNfdHlwZSwgTlVMTCwgZGF0YSxcbitcdFx0XHRcdCBwaHlfcHNlX2RldGFjaF9vbmUpO1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2cGh5X3BzZV9sb2NrKTtcbitcdFx0cmV0dXJuIE5PVElGWV9PSztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiBOT1RJRllfRE9ORTtcbitcdH1cbit9XG4rXG4rc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBwaHlfcHNlX25vdGlmaWVyIF9fcmVhZF9tb3N0bHkgPSB7XG4rXHQubm90aWZpZXJfY2FsbCA9IHBoeV9wc2Vfbm90aWZpZXJfZXZlbnQsXG4rfTtcbitcbiAvKipcbi0gKiBwaHlfZGV2aWNlX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgdGhlIHBoeSBkZXZpY2Ugb24gdGhlIE1ESU8gYnVzXG4tICogQHBoeWRldjogcGh5X2RldmljZSBzdHJ1Y3R1cmUgdG8gYmUgYWRkZWQgdG8gdGhlIE1ESU8gYnVzXG4rICogcGh5X3BzZV9jb250cm9sX2xvY2sgLSBob2xkIHBoeWRldi1cdTAwM2Vwc2VjIHN0YWJsZSBhZ2FpbnN0IFBTRSBjb250cm9sbGVyIHRlYXJkb3duXG4rICpcbisgKiBUaGUgUFNFX1VOUkVHSVNURVJFRCBub3RpZmllciBkZXRhY2hlcyBwaHlkZXYtXHUwMDNlcHNlYyBhbmQgZHJvcHMgaXRzIGxhc3RcbisgKiByZWZlcmVuY2UuIENhbGxlcnMgdGhhdCBkZXJlZmVyZW5jZSBwaHlkZXYtXHUwMDNlcHNlYyAodGhlIGV0aHRvb2wgUFNFIHBhdGhzKSBtdXN0XG4rICogaG9sZCB0aGlzIGxvY2sgYWNyb3NzIHRoZSBhY2Nlc3Mgc28gdGhlIGRldGFjaCBjYW5ub3QgcnVuIHVuZGVybmVhdGggdGhlbS5cbiAgKi9cbi1pbnQgcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3ZvaWQgcGh5X3BzZV9jb250cm9sX2xvY2sodm9pZClcbit7XG4rXHRtdXRleF9sb2NrKFx1MDAyNnBoeV9wc2VfbG9jayk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHBoeV9wc2VfY29udHJvbF9sb2NrKTtcbitcbisvKipcbisgKiBwaHlfcHNlX2NvbnRyb2xfdW5sb2NrIC0gcmVsZWFzZSB0aGUgbG9jayB0YWtlbiBieSBwaHlfcHNlX2NvbnRyb2xfbG9jaygpXG4rICovXG4rdm9pZCBwaHlfcHNlX2NvbnRyb2xfdW5sb2NrKHZvaWQpXG4re1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnBoeV9wc2VfbG9jayk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHBoeV9wc2VfY29udHJvbF91bmxvY2spO1xuK1xuKy8qIENvcmUgcmVnaXN0cmF0aW9uOiBhZGQgdGhlIHBoeSB0byB0aGUgTURJTyBidXMuIERvZXMgbm90IHRvdWNoIHJ0bmwgb3JcbisgKiBQU0UuIHBoeWRldi1cdTAwM2Vwc2VjIGlzIGF0dGFjaGVkIGJ5IHRoZSBjYWxsZXJzIGJlbG93LCBhZnRlciBkZXZpY2VfYWRkKClcbisgKiBoYXMgbWFkZSB0aGUgcGh5IHZpc2libGUgb24gbWRpb19idXNfdHlwZSwgc28gdGhhdCBhIGNvbmN1cnJlbnQgUFNFXG4rICogbm90aWZpZXIgd2FsayBhbmQgdGhlIGF0dGFjaCBjYW4gbmV2ZXIgbGVhdmUgdGhlIHBoeSB1bmF0dGFjaGVkLiBLZWVwaW5nXG4rICogZGV2aWNlX2FkZCgpIG91dCBvZiBydG5sIGFsc28gYXZvaWRzIGRlYWRsb2NraW5nIHdoZW4gYmluZGluZyBhIHBoeSB0aGF0XG4rICogaXRzZWxmIHByb3ZpZGVzIGFuIFNGUCBjYWdlIChwaHlfcHJvYmUoKSAtXHUwMDNlIHBoeV9zZnBfcHJvYmUoKSAtXHUwMDNlXG4rICogc2ZwX2J1c19hZGRfdXBzdHJlYW0oKSB0YWtlcyBydG5sKS5cbisgKi9cbitzdGF0aWMgaW50IF9fcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIHtcbiBcdGludCBlcnI7XG4gXG5AQCAtMTEzNSwxMCArMTI1Miw1NiBAQCBpbnQgcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuICBvdXQ6XG4gXHQvKiBBc3NlcnQgdGhlIHJlc2V0IHNpZ25hbCAqL1xuIFx0cGh5X2RldmljZV9yZXNldChwaHlkZXYsIDEpO1xuLVxuIFx0bWRpb2J1c191bnJlZ2lzdGVyX2RldmljZShcdTAwMjZwaHlkZXYtXHUwMDNlbWRpbyk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbitcbisvKipcbisgKiBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZCAtIFJlZ2lzdGVyIHRoZSBwaHkgZGV2aWNlIG9uIHRoZSBNRElPIGJ1c1xuKyAqIEBwaHlkZXY6IHBoeV9kZXZpY2Ugc3RydWN0dXJlIHRvIGJlIGFkZGVkIHRvIHRoZSBNRElPIGJ1c1xuKyAqXG4rICogU2FtZSBhcyBwaHlfZGV2aWNlX3JlZ2lzdGVyKCkgYnV0IGNhbGxlciBtdXN0IGFscmVhZHkgaG9sZCBydG5sX2xvY2soKS5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4rICovXG4raW50IHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IGVycjtcbitcbitcdEFTU0VSVF9SVE5MKCk7XG4rXG4rXHRlcnIgPSBfX3BoeV9kZXZpY2VfcmVnaXN0ZXIocGh5ZGV2KTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnBoeV9wc2VfbG9jayk7XG4rXHRwaHlfdHJ5X2F0dGFjaF9wc2UocGh5ZGV2KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwaHlfcHNlX2xvY2spO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK0VYUE9SVF9TWU1CT0wocGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWQpO1xuK1xuKy8qKlxuKyAqIHBoeV9kZXZpY2VfcmVnaXN0ZXIgLSBSZWdpc3RlciB0aGUgcGh5IGRldmljZSBvbiB0aGUgTURJTyBidXNcbisgKiBAcGh5ZGV2OiBwaHlfZGV2aWNlIHN0cnVjdHVyZSB0byBiZSBhZGRlZCB0byB0aGUgTURJTyBidXNcbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4rICovXG4raW50IHBoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgZXJyO1xuK1xuK1x0ZXJyID0gX19waHlfZGV2aWNlX3JlZ2lzdGVyKHBoeWRldik7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwaHlfcHNlX2xvY2spO1xuK1x0cGh5X3RyeV9hdHRhY2hfcHNlKHBoeWRldik7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cGh5X3BzZV9sb2NrKTtcbitcbitcdHJldHVybiAwO1xuK31cbiBFWFBPUlRfU1lNQk9MKHBoeV9kZXZpY2VfcmVnaXN0ZXIpO1xuIFxuIC8qKlxuQEAgLTExNTIsNyArMTMxNSwxNSBAQCBFWFBPUlRfU1lNQk9MKHBoeV9kZXZpY2VfcmVnaXN0ZXIpO1xuIHZvaWQgcGh5X2RldmljZV9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiB7XG4gXHR1bnJlZ2lzdGVyX21paV90aW1lc3RhbXBlcihwaHlkZXYtXHUwMDNlbWlpX3RzKTtcbitcbitcdC8qIERldGFjaCBzeW5jaHJvbm91c2x5LCBiZWZvcmUgdGhlIHBoeSBsZWF2ZXMgdGhlIGJ1cywgc28gdGhlIHB1dCBjYW5ub3RcbitcdCAqIG91dGxpdmUgdGhlIFBTRSBjb250cm9sbGVyIChhbiBvZmYtYnVzIGJ1dCBzdGlsbC1waW5uZWQgcGh5IGlzIG1pc3NlZCBieVxuK1x0ICogdGhlIFBTRV9VTlJFR0lTVEVSRUQgd2FsaykuIHBoeV9wc2VfbG9jayBzZXJpYWxpc2VzIGFnYWluc3QgdGhhdCB3YWxrLlxuK1x0ICovXG4rXHRtdXRleF9sb2NrKFx1MDAyNnBoeV9wc2VfbG9jayk7XG4gXHRwc2VfY29udHJvbF9wdXQocGh5ZGV2LVx1MDAzZXBzZWMpO1xuK1x0cGh5ZGV2LVx1MDAzZXBzZWMgPSBOVUxMO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnBoeV9wc2VfbG9jayk7XG4gXG4gXHRkZXZpY2VfZGVsKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldik7XG4gXG5AQCAtMzk4MSw4ICs0MTUyLDE0IEBAIHN0YXRpYyBpbnQgX19pbml0IHBoeV9pbml0KHZvaWQpXG4gXHRpZiAocmMpXG4gXHRcdGdvdG8gZXJyX2M0NTtcbiBcbitcdHJjID0gcHNlX3JlZ2lzdGVyX25vdGlmaWVyKFx1MDAyNnBoeV9wc2Vfbm90aWZpZXIpO1xuK1x0aWYgKHJjKVxuK1x0XHRnb3RvIGVycl9nZW5waHk7XG4rXG4gXHRyZXR1cm4gMDtcbiBcbitlcnJfZ2VucGh5OlxuK1x0cGh5X2RyaXZlcl91bnJlZ2lzdGVyKFx1MDAyNmdlbnBoeV9kcml2ZXIpO1xuIGVycl9jNDU6XG4gXHRwaHlfZHJpdmVyX3VucmVnaXN0ZXIoXHUwMDI2Z2VucGh5X2M0NV9kcml2ZXIpO1xuIGVycl9ldGh0b29sX3BoeV9vcHM6XG5AQCAtMzk5OSw2ICs0MTc2LDcgQEAgc3RhdGljIGludCBfX2luaXQgcGh5X2luaXQodm9pZClcbiBcbiBzdGF0aWMgdm9pZCBfX2V4aXQgcGh5X2V4aXQodm9pZClcbiB7XG4rXHRwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcihcdTAwMjZwaHlfcHNlX25vdGlmaWVyKTtcbiBcdHBoeV9kcml2ZXJfdW5yZWdpc3RlcihcdTAwMjZnZW5waHlfYzQ1X2RyaXZlcik7XG4gXHRwaHlfZHJpdmVyX3VucmVnaXN0ZXIoXHUwMDI2Z2VucGh5X2RyaXZlcik7XG4gXHRydG5sX2xvY2soKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvc2ZwLmMgYi9kcml2ZXJzL25ldC9waHkvc2ZwLmNcbmluZGV4IDAzYmZkODY0MGRiOTYuLjE4ODY4YmRkNjQ4NTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvc2ZwLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9zZnAuY1xuQEAgLTIwODMsNyArMjA4Myw3IEBAIHN0YXRpYyBpbnQgc2ZwX3NtX3Byb2JlX3BoeShzdHJ1Y3Qgc2ZwICpzZnAsIGludCBhZGRyLCBib29sIGlzX2M0NSlcbiBcdC8qIE1hcmsgdGhpcyBQSFkgYXMgYmVpbmcgb24gYSBTRlAgbW9kdWxlICovXG4gXHRwaHktXHUwMDNlaXNfb25fc2ZwX21vZHVsZSA9IHRydWU7XG4gXG4tXHRlcnIgPSBwaHlfZGV2aWNlX3JlZ2lzdGVyKHBoeSk7XG4rXHRlcnIgPSBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZChwaHkpO1xuIFx0aWYgKGVycikge1xuIFx0XHRwaHlfZGV2aWNlX2ZyZWUocGh5KTtcbiBcdFx0ZGV2X2VycihzZnAtXHUwMDNlZGV2LCBcInBoeV9kZXZpY2VfcmVnaXN0ZXIgZmFpbGVkOiAlcGVcXG5cIixcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jXG5pbmRleCA2OWRiZGJkZTlkNzFhLi42MTE1NDBkZjQzYmIxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jXG5AQCAtOCw2ICs4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aHRvb2wuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aHRvb2xfbmV0bGluay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbm90aWZpZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzZS1wZC9wc2UuaFx1MDAzZVxuQEAgLTIzLDYgKzI0LDM5IEBAIHN0YXRpYyBMSVNUX0hFQUQocHNlX2NvbnRyb2xsZXJfbGlzdCk7XG4gc3RhdGljIERFRklORV9YQVJSQVlfQUxMT0MocHNlX3B3X2RfbWFwKTtcbiBzdGF0aWMgREVGSU5FX01VVEVYKHBzZV9wd19kX211dGV4KTtcbiBcbitzdGF0aWMgQkxPQ0tJTkdfTk9USUZJRVJfSEVBRChwc2VfY29udHJvbGxlcl9ub3RpZmllcik7XG4rXG4rLyoqXG4rICogcHNlX3JlZ2lzdGVyX25vdGlmaWVyIC0gcmVnaXN0ZXIgYSBjYWxsYmFjayBmb3IgUFNFIGNvbnRyb2xsZXIgZXZlbnRzXG4rICogQG5iOiBub3RpZmllciBibG9jayB0byByZWdpc3RlclxuKyAqXG4rICogU2VlIGVudW0gcHNlX2NvbnRyb2xsZXJfZXZlbnQgZm9yIGV2ZW50cyBmaXJlZCBhbmQgdGhlaXIgc3Vic2NyaWJlclxuKyAqIGNvbnRyYWN0LiBDYWxsYmFja3MgcnVuIGluIHByb2Nlc3MgY29udGV4dDsgdGhleSBtYXkgc2xlZXAsIHRha2VcbisgKiBydG5sLCBhbmQgY2FsbCBvZl9wc2VfY29udHJvbF9nZXQoKS4gVGhlIGNoYWluIGZpcmVzIHN5bmNocm9ub3VzbHksXG4rICogc28gYSBQU0UgY29udHJvbGxlciBkcml2ZXIncyBwcm9iZS91bmJpbmQgcGF0aCBtdXN0IG5vdCBob2xkIGFueVxuKyAqIHN1Y2ggbG9jayB3aGVuIGNhbGxpbmcgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoKSBvclxuKyAqIHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXIoKS5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cbisgKi9cbitpbnQgcHNlX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpXG4re1xuK1x0cmV0dXJuIGJsb2NraW5nX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKFx1MDAyNnBzZV9jb250cm9sbGVyX25vdGlmaWVyLCBuYik7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHBzZV9yZWdpc3Rlcl9ub3RpZmllcik7XG4rXG4rLyoqXG4rICogcHNlX3VucmVnaXN0ZXJfbm90aWZpZXIgLSB1bnJlZ2lzdGVyIGEgcHJldmlvdXNseSByZWdpc3RlcmVkIGNhbGxiYWNrXG4rICogQG5iOiBub3RpZmllciBibG9jayBwcmV2aW91c2x5IHBhc3NlZCB0byBwc2VfcmVnaXN0ZXJfbm90aWZpZXIoKVxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLlxuKyAqL1xuK2ludCBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKVxuK3tcbitcdHJldHVybiBibG9ja2luZ19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKFx1MDAyNnBzZV9jb250cm9sbGVyX25vdGlmaWVyLCBuYik7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyKTtcbitcbiAvKipcbiAgKiBzdHJ1Y3QgcHNlX2NvbnRyb2wgLSBhIFBTRSBjb250cm9sXG4gICogQHBjZGV2OiBhIHBvaW50ZXIgdG8gdGhlIFBTRSBjb250cm9sbGVyIGRldmljZVxuQEAgLTExMDQsNiArMTEzOCw5IEBAIGludCBwc2VfY29udHJvbGxlcl9yZWdpc3RlcihzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldilcbiBcdGxpc3RfYWRkKFx1MDAyNnBjZGV2LVx1MDAzZWxpc3QsIFx1MDAyNnBzZV9jb250cm9sbGVyX2xpc3QpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBzZV9saXN0X211dGV4KTtcbiBcbitcdGJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oXHUwMDI2cHNlX2NvbnRyb2xsZXJfbm90aWZpZXIsXG4rXHRcdFx0XHQgICAgIFBTRV9SRUdJU1RFUkVELCBwY2Rldik7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwocHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIpO1xuQEAgLTExMTQsNiArMTE1MSw5IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKTtcbiAgKi9cbiB2b2lkIHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXIoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXG4ge1xuK1x0YmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbihcdTAwMjZwc2VfY29udHJvbGxlcl9ub3RpZmllcixcbitcdFx0XHRcdCAgICAgUFNFX1VOUkVHSVNURVJFRCwgcGNkZXYpO1xuK1xuIFx0cHNlX2ZsdXNoX3B3X2RzKHBjZGV2KTtcbiBcdHBzZV9yZWxlYXNlX3BpcyhwY2Rldik7XG4gXHRpZiAocGNkZXYtXHUwMDNlaXJxKVxuQEAgLTE5ODEsMyArMjAyMSwxNyBAQCBib29sIHBzZV9oYXNfYzMzKHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYylcbiBcdHJldHVybiBwc2VjLVx1MDAzZXBjZGV2LVx1MDAzZXR5cGVzIFx1MDAyNiBFVEhUT09MX1BTRV9DMzM7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHBzZV9oYXNfYzMzKTtcbitcbisvKipcbisgKiBwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2IC0gVGVzdCB3aGV0aGVyIGEgcHNlX2NvbnRyb2wgdGFyZ2V0cyBhIGNvbnRyb2xsZXJcbisgKiBAcHNlYzogcHNlX2NvbnRyb2wgb2J0YWluZWQgZnJvbSBvZl9wc2VfY29udHJvbF9nZXQoKVxuKyAqIEBwY2RldjogUFNFIGNvbnRyb2xsZXIgdG8gY29tcGFyZSBhZ2FpbnN0XG4rICpcbisgKiBSZXR1cm46ICV0cnVlIGlmIEBwc2VjIHdhcyBvYnRhaW5lZCBmcm9tIEBwY2RldiwgJWZhbHNlIG90aGVyd2lzZS5cbisgKi9cbitib29sIHBzZV9jb250cm9sX21hdGNoZXNfcGNkZXYoc3RydWN0IHBzZV9jb250cm9sICpwc2VjLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2Rldilcbit7XG4rXHRyZXR1cm4gcHNlYy1cdTAwM2VwY2RldiA9PSBwY2Rldjtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwocHNlX2NvbnRyb2xfbWF0Y2hlc19wY2Rldik7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmhcbmluZGV4IDE5OWE3YWFhMzQxYmYuLjU1YTAwNDljNmMyYjUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5AQCAtMjE1OCw4ICsyMTU4LDEyIEBAIHN0cnVjdCBwaHlfZGV2aWNlICpmd25vZGVfcGh5X2ZpbmRfZGV2aWNlKHN0cnVjdCBmd25vZGVfaGFuZGxlICpwaHlfZndub2RlKTtcbiBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlX2dldF9waHlfbm9kZShjb25zdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKTtcbiBzdHJ1Y3QgcGh5X2RldmljZSAqZ2V0X3BoeV9kZXZpY2Uoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGJvb2wgaXNfYzQ1KTtcbiBpbnQgcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KTtcbisvKiBDYWxsZXIgbXVzdCBob2xkIHJ0bmxfbG9jaygpOyBzZWUgcGh5X2RldmljZV9yZWdpc3RlcigpIGZvciB0aGUgcHVibGljIGZvcm0uICovXG4raW50IHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpO1xuIHZvaWQgcGh5X2RldmljZV9mcmVlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIHZvaWQgcGh5X2RldmljZV9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4rdm9pZCBwaHlfcHNlX2NvbnRyb2xfbG9jayh2b2lkKTtcbit2b2lkIHBoeV9wc2VfY29udHJvbF91bmxvY2sodm9pZCk7XG4gaW50IHBoeV9nZXRfYzQ1X2lkcyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiBpbnQgcGh5X2luaXRfaHcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gaW50IHBoeV9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHNlLXBkL3BzZS5oIGIvaW5jbHVkZS9saW51eC9wc2UtcGQvcHNlLmhcbmluZGV4IDRlNTY5NmNmYWRlN2MuLmQ0MzEwY2E3MWEzZTAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BzZS1wZC9wc2UuaFxuKysrIGIvaW5jbHVkZS9saW51eC9wc2UtcGQvcHNlLmhcbkBAIC0yMSw2ICsyMSw3IEBAIHN0cnVjdCBuZXRfZGV2aWNlO1xuIHN0cnVjdCBwaHlfZGV2aWNlO1xuIHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXY7XG4gc3RydWN0IG5ldGxpbmtfZXh0X2FjaztcbitzdHJ1Y3Qgbm90aWZpZXJfYmxvY2s7XG4gXG4gLyogQzMzIFBTRSBleHRlbmRlZCBzdGF0ZSBhbmQgc3Vic3RhdGUuICovXG4gc3RydWN0IGV0aHRvb2xfYzMzX3BzZV9leHRfc3RhdGVfaW5mbyB7XG5AQCAtMzM3LDYgKzMzOCwyNCBAQCBlbnVtIHBzZV9idWRnZXRfZXZhbF9zdHJhdGVnaWVzIHtcbiBcdFBTRV9CVURHRVRfRVZBTF9TVFJBVF9EWU5BTUlDXHQ9IDEgXHUwMDNjXHUwMDNjIDIsXG4gfTtcbiBcbisvKipcbisgKiBlbnVtIHBzZV9jb250cm9sbGVyX2V2ZW50IC0gUFNFIGNvbnRyb2xsZXIgbGlmZWN5Y2xlIGV2ZW50c1xuKyAqXG4rICogRXZlbnQgZGF0YSBpbiBjYWxsYmFja3MgaXMgYWx3YXlzIGEgcG9pbnRlciB0byB0aGUgc3RydWN0XG4rICogcHNlX2NvbnRyb2xsZXJfZGV2IGZpcmluZyB0aGUgZXZlbnQuXG4rICpcbisgKiBAUFNFX1JFR0lTVEVSRUQ6IGNvbnRyb2xsZXIgYWRkZWQgdG8gcHNlX2NvbnRyb2xsZXJfbGlzdCBhbmRcbisgKlx0cmVzb2x2YWJsZSBieSBvZl9wc2VfY29udHJvbF9nZXQoKS5cbisgKiBAUFNFX1VOUkVHSVNURVJFRDogY29udHJvbGxlciBhYm91dCB0byBiZSByZW1vdmVkIGZyb21cbisgKlx0cHNlX2NvbnRyb2xsZXJfbGlzdC4gU3Vic2NyaWJlcnMgaG9sZGluZyBwc2VfY29udHJvbCByZWZlcmVuY2VzXG4rICpcdHRhcmdldGluZyBpdCBtdXN0IGRyb3AgdGhlbSBiZWZvcmUgcmV0dXJuaW5nIGFuZCBtdXN0IG5vdFxuKyAqXHRhY3F1aXJlIG5ldyByZWZlcmVuY2VzIGZvciBpdC5cbisgKi9cbitlbnVtIHBzZV9jb250cm9sbGVyX2V2ZW50IHtcbitcdFBTRV9SRUdJU1RFUkVELFxuK1x0UFNFX1VOUkVHSVNURVJFRCxcbit9O1xuK1xuICNpZiBJU19FTkFCTEVEKENPTkZJR19QU0VfQ09OVFJPTExFUilcbiBpbnQgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpO1xuIHZvaWQgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcihzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2Rldik7XG5AQCAtMzY2LDYgKzM4NSwxMiBAQCBpbnQgcHNlX2V0aHRvb2xfc2V0X3ByaW8oc3RydWN0IHBzZV9jb250cm9sICpwc2VjLFxuIGJvb2wgcHNlX2hhc19wb2RsKHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYyk7XG4gYm9vbCBwc2VfaGFzX2MzMyhzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMpO1xuIFxuK2Jvb2wgcHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldihzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KTtcbitcbitpbnQgcHNlX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpO1xuK2ludCBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTtcbitcbiAjZWxzZVxuIFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBzZV9jb250cm9sICpvZl9wc2VfY29udHJvbF9nZXQoc3RydWN0IGRldmljZV9ub2RlICpub2RlLFxuQEAgLTQxNiw2ICs0NDEsMjIgQEAgc3RhdGljIGlubGluZSBib29sIHBzZV9oYXNfYzMzKHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYylcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBib29sIHBzZV9jb250cm9sX21hdGNoZXNfcGNkZXYoc3RydWN0IHBzZV9jb250cm9sICpwc2VjLFxuK1x0XHRcdFx0XHQgICAgIHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxuK3tcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnQgcHNlX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuICNlbmRpZlxuIFxuICNlbmRpZlxuZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL3BzZS1wZC5jIGIvbmV0L2V0aHRvb2wvcHNlLXBkLmNcbmluZGV4IDc1N2M5ZTBjYzg1NmYuLjRlZGQ5YTUxNGRlMTQgMTAwNjQ0XG4tLS0gYS9uZXQvZXRodG9vbC9wc2UtcGQuY1xuKysrIGIvbmV0L2V0aHRvb2wvcHNlLXBkLmNcbkBAIC03MSw3ICs3MSw5IEBAIHN0YXRpYyBpbnQgcHNlX3ByZXBhcmVfZGF0YShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLFxuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbitcdHBoeV9wc2VfY29udHJvbF9sb2NrKCk7XG4gXHRyZXQgPSBwc2VfZ2V0X3BzZV9hdHRyaWJ1dGVzKHBoeWRldiwgaW5mby1cdTAwM2VleHRhY2ssIGRhdGEpO1xuK1x0cGh5X3BzZV9jb250cm9sX3VubG9jaygpO1xuIFxuIFx0ZXRobmxfb3BzX2NvbXBsZXRlKGRldik7XG4gXG5AQCAtMjgxLDkgKzI4MywxMiBAQCBldGhubF9zZXRfcHNlKHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXG4gXHRwaHlkZXYgPSBldGhubF9yZXFfZ2V0X3BoeWRldihyZXFfaW5mbywgdGIsIEVUSFRPT0xfQV9QU0VfSEVBREVSLFxuIFx0XHRcdFx0ICAgICAgaW5mby1cdTAwM2VleHRhY2spO1xuK1xuK1x0cGh5X3BzZV9jb250cm9sX2xvY2soKTtcbitcbiBcdHJldCA9IGV0aG5sX3NldF9wc2VfdmFsaWRhdGUocGh5ZGV2LCBpbmZvKTtcbiBcdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4rXHRcdGdvdG8gb3V0O1xuIFxuIFx0aWYgKHRiW0VUSFRPT0xfQV9QU0VfUFJJT10pIHtcbiBcdFx0dW5zaWduZWQgaW50IHByaW87XG5AQCAtMjkxLDcgKzI5Niw3IEBAIGV0aG5sX3NldF9wc2Uoc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbywgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0cHJpbyA9IG5sYV9nZXRfdTMyKHRiW0VUSFRPT0xfQV9QU0VfUFJJT10pO1xuIFx0XHRyZXQgPSBwc2VfZXRodG9vbF9zZXRfcHJpbyhwaHlkZXYtXHUwMDNlcHNlYywgaW5mby1cdTAwM2VleHRhY2ssIHByaW8pO1xuIFx0XHRpZiAocmV0KVxuLVx0XHRcdHJldHVybiByZXQ7XG4rXHRcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4gXHRpZiAodGJbRVRIVE9PTF9BX0MzM19QU0VfQVZBSUxfUFdfTElNSVRdKSB7XG5AQCAtMzAxLDcgKzMwNiw3IEBAIGV0aG5sX3NldF9wc2Uoc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbywgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0cmV0ID0gcHNlX2V0aHRvb2xfc2V0X3B3X2xpbWl0KHBoeWRldi1cdTAwM2Vwc2VjLCBpbmZvLVx1MDAzZWV4dGFjayxcbiBcdFx0XHRcdFx0ICAgICAgIHB3X2xpbWl0KTtcbiBcdFx0aWYgKHJldClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuIFx0LyogVGhlc2UgdmFsdWVzIGFyZSBhbHJlYWR5IHZhbGlkYXRlZCBieSB0aGUgZXRobmxfcHNlX3NldF9wb2xpY3kgKi9cbkBAIC0zMTksMTEgKzMyNCwxMSBAQCBldGhubF9zZXRfcHNlKHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdCAqL1xuIFx0XHRyZXQgPSBwc2VfZXRodG9vbF9zZXRfY29uZmlnKHBoeWRldi1cdTAwM2Vwc2VjLCBpbmZvLVx1MDAzZWV4dGFjayxcbiBcdFx0XHRcdFx0ICAgICBcdTAwMjZjb25maWcpO1xuLVx0XHRpZiAocmV0KVxuLVx0XHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4rb3V0OlxuIFx0LyogUmV0dXJuIGVycm5vIG9yIHplcm8gLSBQU0UgaGFzIG5vIG5vdGlmaWNhdGlvbiAqL1xuK1x0cGh5X3BzZV9jb250cm9sX3VubG9jaygpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMDo0MS4yNTYxMjUwMjdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjAwNTA1ODA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUFNFIENvbnRyb2wgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyByZWZhY3RvcmluZyBob3cgdGhlIGBwc2VfY29udHJvbGAgaXMgaGFuZGxlZCBpbiByZWxhdGlvbiB0byBgcGh5X2RldmljZWAuIFRoZXkncmUgaW50cm9kdWNpbmcgYSBgcGh5X3BzZV9sb2NrYCBtdXRleCBhbmQgYSBub3RpZmllciwgYHBoeV9wc2Vfbm90aWZpZXJgLCBmb3IgYFBTRV9SRUdJU1RFUkVEYCBhbmQgYFBTRV9VTlJFR0lTVEVSRURgIGV2ZW50cy4gU21hcnQgbW92ZTsgdGhhdCBhZGRzIHNvbWUgbXVjaC1uZWVkZWQgdGhyZWFkIHNhZmV0eS4gVGhleSd2ZSBhbHNvIHVwZGF0ZWQgYGV0aHRvb2xgIHRvIHVzZSB0aGUgbG9jay91bmxvY2sgYXJvdW5kIGBwaHlkZXYtXHUwMDNlcHNlY2AgYWNjZXNzZXMuIEkgc2VlIHRoZSBjb2RlIHRvdWNoZXMgYGRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNgLCBgZHJpdmVycy9uZXQvcGh5L3NmcC5jYCwgYGRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jYCwgcGx1cyBzb21lIGhlYWRlcnMuIEdvb2QsIHRoZXkndmUgY292ZXJlZCB0aGUga2V5IGFyZWFzLlxuXG5NeSBtYWluIGNvbmNlcm4gaXMgd2hldGhlciB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgdGVzdGFibGUsIGVzcGVjaWFsbHkgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gTGV0J3Mgc2VlLi4uIGBwaHlfZGV2aWNlLmNgIGlzIHRoZSBjb3JlIFBIWSBsaWJyYXJ5LCBhbmQgYGV0aHRvb2wvcHNlLXBkLmNgIGlzIHRoZSBldGh0b29sIG5ldGxpbmsgaW50ZXJmYWNlIGZvciBQU0UuIEFuZCBgcHNlLWNvcmUuY2AgaXMgdGhlIFBTRSBjb3JlIGl0c2VsZi4gU28sIGNhbiB3ZSBhY3R1YWxseSByZWFjaCB0aGUgUFNFIGNvcmU/XG5cblJpZ2h0LCB0aGUga2V5IGlzIHdoZXRoZXIgd2UgY2FuIGV4ZXJjaXNlIGl0LiBMZXQncyBkaWcgaW50byBgZXRodG9vbC9wc2UtcGQuY2AgYW5kIGBwc2VfY29yZS5jYC4gVGhpcyBpcyBhbGwgcGFydCBvZiB0aGUgUG9FIGxhbmRzY2FwZSwgUG93ZXIgb3ZlciBFdGhlcm5ldC4gQ2FuIHdlIHRyaWdnZXIgaXQgdGhyb3VnaCB0aGUgZXRodG9vbCBuZXRsaW5rIGludGVyZmFjZT8gQWgsIHllcywgYGV0aG5sX3NldF9wc2VgIGlzIGFuIGV0aHRvb2wgbmV0bGluayBjb21tYW5kLiBUaGF0J3MgYSBnb29kIGVudHJ5IHBvaW50LiBOb3csIHRvIHRyaWdnZXIgdGhlIG5vdGlmaWVyLCB3ZSBuZWVkIGEgUFNFIGNvbnRyb2xsZXIgdG8gcmVnaXN0ZXIgb3IgdW5yZWdpc3Rlci4gVGhhdCdzIHRoZSBjcnV4IG9mIGl0LlxuXG5TbywgdGhlIHF1ZXN0aW9uIG5vdyBpcywgYXJlIHRoZXJlIGFueSBzb2Z0d2FyZSBlbXVsYXRlZCBQU0UgY29udHJvbGxlcnM/IE9yIGNhbiB3ZSBzb21laG93IHRyaWdnZXIgYSByZWdpc3RyYXRpb24vdW5yZWdpc3RyYXRpb24gdXNpbmcgc29tZSBraW5kIG9mIGR1bW15IGRyaXZlcj8gVGltZSB0byBleHBsb3JlIHRoZSBgZHJpdmVycy9uZXQvcHNlLXBkL2AgZGlyZWN0b3J5IGFuZCBzZWUgaWYgYW55dGhpbmcganVtcHMgb3V0LiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gc2ltdWxhdGUgdGhvc2UgcmVnaXN0cmF0aW9uIGFuZCB1bnJlZ2lzdHJhdGlvbiBldmVudHMgZm9yIHByb3BlciB0ZXN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Mzc1LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTA6NDkuNDU2NjM0MDY1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkRpclwiOiBcImRyaXZlcnMvbmV0L3BzZS1wZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRmlsZXNcIjogW1xuICAgIFwicGQ2OTJ4MC5jXCIsXG4gICAgXCJwc2VfY29yZS5jXCIsXG4gICAgXCJwc2VfcmVndWxhdG9yLmNcIixcbiAgICBcInNpMzQ3NC5jXCIsXG4gICAgXCJ0cHMyMzg4MS5jXCJcbiAgXSxcbiAgXCJTdWJkaXJzXCI6IG51bGxcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjEwOjQ5LjQ1NjY5OTkzNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NjY4MjE3MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIFBvd2VyIERyaXZlcnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBwb3dlciBkcml2ZXIgZmlsZXM6IGBwZDY5MngwLmNgLCBgcHNlX3JlZ3VsYXRvci5jYCwgYHNpMzQ3NC5jYCwgYW5kIGB0cHMyMzg4MS5jYC4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBxdWlja2x5IHNlZSB3aGljaCBvbmVzIGFyZSB3b3J0aCBmdXJ0aGVyIGludmVzdGlnYXRpb24gYW5kIGhvdyB0aGV5IG1pZ2h0IGZpdCBpbnRvIHRoZSBzeXN0ZW0gYXJjaGl0ZWN0dXJlLiBgcHNlX3JlZ3VsYXRvci5jYCBoYXMgYSBkaXN0aW5jdCBwb3NzaWJpbGl0eSBvZiBiZWluZyBoYW5kbGVkIHRocm91Z2ggZWl0aGVyIHRoZSBkZXZpY2UgdHJlZSBvciBkaXJlY3Qgc29mdHdhcmUgaW5zdGFudGlhdGlvbi4gVGhpcyBtZXJpdHMgaW1tZWRpYXRlIGF0dGVudGlvbi4gTGV0J3MgZGl2ZSBpbnRvIGBwc2VfcmVndWxhdG9yLmNgIGZpcnN0IHRvIHNlZSB3aGF0IHRoZSBvcHRpb25zIGFyZSB0aGVyZS4gSSdtIGhvcGluZyBpdCdzIHdlbGwtc3RydWN0dXJlZCBhbmQgZm9sbG93cyBhIG1vZGVybiBhcHByb2FjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTMyNywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc4LCJUb29sQ2FsbHMiOlsiY29kZXNlYXJjaC1kaXItaW5kZXgiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMDo1My4yMjM1MjQyOTNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg0MDYyODgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBzZV9yZWd1bGF0b3JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9yZWd1bGF0b3IuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTA6NTMuMjcxOTM4NDYxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc4Njc5MDE1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBhcyB5b3VyIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipGb2N1czogU3RyYXRlZ2ljIFNpbXBsaWZpY2F0aW9uKipcblxuUmlnaHQsIGluc3RlYWQgb2Ygb3ZlcmNvbXBsaWNhdGluZyB0aGlzIG9yIGdvaW5nIGRvd24gc29tZSByYWJiaXQgaG9sZSBvZiBpbml0aWFsIGFuYWx5c2lzLCBJIHNob3VsZCBqdXN0Li4uICpyZWFkIHRoZSBmaWxlKi4gVGhhdOKAmXMgdGhlIG1vc3QgZGlyZWN0IHJvdXRlLiBJdCdzIHRvbyBlYXN5IHRvIGdldCBjYXVnaHQgdXAgaW4gcHJlbWF0dXJlIG9wdGltaXphdGlvbiBvciB0cnlpbmcgdG8gYW50aWNpcGF0ZSBldmVyeSBwb3NzaWJsZSBvdXRjb21lLiBKdXN0IGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UuIEdldCBhIGJhc2VsaW5lIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRhdGEgb3IgdGhlIGNvZGUgb3Igd2hhdGV2ZXIncyBpbiB0aGF0IGZpbGUuIFRoYXQgc2ltcGxlIGFjdCBpcyB0aGUgcmlnaHQgZmlyc3Qgc3RlcC4gRG9uJ3Qgb3ZlcnRoaW5rIGl0LCBsZXQgdGhlIGZpbGUgcmV2ZWFsIHdoYXQncyBpbXBvcnRhbnQsIHRoZW4gSSBjYW4gYWRqdXN0IGFjY29yZGluZ2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjA5LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMDo1Ny4wNTg3MzEwNzhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9wc2UtcGQvcHNlX3JlZ3VsYXRvci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdC8vXFxuICAgMzpcXHQvLyBEcml2ZXIgZm9yIHRoZSByZWd1bGF0b3IgYmFzZWQgRXRoZXJuZXQgUG93ZXIgU291cmNpbmcgRXF1aXBtZW50LCB3aXRob3V0XFxuICAgNDpcXHQvLyBhdXRvIGNsYXNzaWZpY2F0aW9uIHN1cHBvcnQuXFxuICAgNTpcXHQvL1xcbiAgIDY6XFx0Ly8gQ29weXJpZ2h0IChjKSAyMDIyIFBlbmd1dHJvbml4LCBPbGVrc2lqIFJlbXBlbCBcXHUwMDNja2VybmVsQHBlbmd1dHJvbml4LmRlXFx1MDAzZVxcbiAgIDc6XFx0Ly9cXG4gICA4OlxcdFxcbiAgIDk6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAgMTA6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mLmhcXHUwMDNlXFxuICAxMTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcXHUwMDNlXFxuICAxMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcHNlLXBkL3BzZS5oXFx1MDAzZVxcbiAgMTM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oXFx1MDAzZVxcbiAgMTQ6XFx0XFxuICAxNTpcXHRzdHJ1Y3QgcHNlX3JlZ19wcml2IHtcXG4gIDE2OlxcdFxcdHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgcGNkZXY7XFxuICAxNzpcXHRcXHRzdHJ1Y3QgcmVndWxhdG9yICpwczsgLypwb3dlciBzb3VyY2UgKi9cXG4gIDE4OlxcdFxcdGVudW0gZXRodG9vbF9wb2RsX3BzZV9hZG1pbl9zdGF0ZSBhZG1pbl9zdGF0ZTtcXG4gIDE5OlxcdH07XFxuICAyMDpcXHRcXG4gIDIxOlxcdHN0YXRpYyBzdHJ1Y3QgcHNlX3JlZ19wcml2ICp0b19wc2VfcmVnKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxcbiAgMjI6XFx0e1xcbiAgMjM6XFx0XFx0cmV0dXJuIGNvbnRhaW5lcl9vZihwY2Rldiwgc3RydWN0IHBzZV9yZWdfcHJpdiwgcGNkZXYpO1xcbiAgMjQ6XFx0fVxcbiAgMjU6XFx0XFxuICAyNjpcXHRzdGF0aWMgaW50XFxuICAyNzpcXHRwc2VfcmVnX3BpX2VuYWJsZShzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkKVxcbiAgMjg6XFx0e1xcbiAgMjk6XFx0XFx0c3RydWN0IHBzZV9yZWdfcHJpdiAqcHJpdiA9IHRvX3BzZV9yZWcocGNkZXYpO1xcbiAgMzA6XFx0XFx0aW50IHJldDtcXG4gIDMxOlxcdFxcbiAgMzI6XFx0XFx0cmV0ID0gcmVndWxhdG9yX2VuYWJsZShwcml2LVxcdTAwM2Vwcyk7XFxuICAzMzpcXHRcXHRpZiAocmV0KVxcbiAgMzQ6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gIDM1OlxcdFxcbiAgMzY6XFx0XFx0cHJpdi1cXHUwMDNlYWRtaW5fc3RhdGUgPSBFVEhUT09MX1BPRExfUFNFX0FETUlOX1NUQVRFX0VOQUJMRUQ7XFxuICAzNzpcXHRcXHRyZXR1cm4gMDtcXG4gIDM4OlxcdH1cXG4gIDM5OlxcdFxcbiAgNDA6XFx0c3RhdGljIGludFxcbiAgNDE6XFx0cHNlX3JlZ19waV9kaXNhYmxlKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXFxuICA0MjpcXHR7XFxuICA0MzpcXHRcXHRzdHJ1Y3QgcHNlX3JlZ19wcml2ICpwcml2ID0gdG9fcHNlX3JlZyhwY2Rldik7XFxuICA0NDpcXHRcXHRpbnQgcmV0O1xcbiAgNDU6XFx0XFxuICA0NjpcXHRcXHRyZXQgPSByZWd1bGF0b3JfZGlzYWJsZShwcml2LVxcdTAwM2Vwcyk7XFxuICA0NzpcXHRcXHRpZiAocmV0KVxcbiAgNDg6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gIDQ5OlxcdFxcbiAgNTA6XFx0XFx0cHJpdi1cXHUwMDNlYWRtaW5fc3RhdGUgPSBFVEhUT09MX1BPRExfUFNFX0FETUlOX1NUQVRFX0RJU0FCTEVEO1xcbiAgNTE6XFx0XFx0cmV0dXJuIDA7XFxuICA1MjpcXHR9XFxuICA1MzpcXHRcXG4gIDU0OlxcdHN0YXRpYyBpbnRcXG4gIDU1OlxcdHBzZV9yZWdfcGlfZ2V0X2FkbWluX3N0YXRlKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsXFxuICA1NjpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgcHNlX2FkbWluX3N0YXRlICphZG1pbl9zdGF0ZSlcXG4gIDU3OlxcdHtcXG4gIDU4OlxcdFxcdHN0cnVjdCBwc2VfcmVnX3ByaXYgKnByaXYgPSB0b19wc2VfcmVnKHBjZGV2KTtcXG4gIDU5OlxcdFxcbiAgNjA6XFx0XFx0YWRtaW5fc3RhdGUtXFx1MDAzZXBvZGxfYWRtaW5fc3RhdGUgPSBwcml2LVxcdTAwM2VhZG1pbl9zdGF0ZTtcXG4gIDYxOlxcdFxcbiAgNjI6XFx0XFx0cmV0dXJuIDA7XFxuICA2MzpcXHR9XFxuICA2NDpcXHRcXG4gIDY1OlxcdHN0YXRpYyBpbnRcXG4gIDY2OlxcdHBzZV9yZWdfcGlfZ2V0X3B3X3N0YXR1cyhzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkLFxcbiAgNjc6XFx0XFx0XFx0XFx0IHN0cnVjdCBwc2VfcHdfc3RhdHVzICpwd19zdGF0dXMpXFxuICA2ODpcXHR7XFxuICA2OTpcXHRcXHRzdHJ1Y3QgcHNlX3JlZ19wcml2ICpwcml2ID0gdG9fcHNlX3JlZyhwY2Rldik7XFxuICA3MDpcXHRcXHRpbnQgcmV0O1xcbiAgNzE6XFx0XFxuICA3MjpcXHRcXHRyZXQgPSByZWd1bGF0b3JfaXNfZW5hYmxlZChwcml2LVxcdTAwM2Vwcyk7XFxuICA3MzpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gIDc0OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuICA3NTpcXHRcXG4gIDc2OlxcdFxcdGlmICghcmV0KVxcbiAgNzc6XFx0XFx0XFx0cHdfc3RhdHVzLVxcdTAwM2Vwb2RsX3B3X3N0YXR1cyA9XFxuICA3ODpcXHRcXHRcXHRcXHRFVEhUT09MX1BPRExfUFNFX1BXX0RfU1RBVFVTX0RJU0FCTEVEO1xcbiAgNzk6XFx0XFx0ZWxzZVxcbiAgODA6XFx0XFx0XFx0cHdfc3RhdHVzLVxcdTAwM2Vwb2RsX3B3X3N0YXR1cyA9XFxuICA4MTpcXHRcXHRcXHRcXHRFVEhUT09MX1BPRExfUFNFX1BXX0RfU1RBVFVTX0RFTElWRVJJTkc7XFxuICA4MjpcXHRcXG4gIDgzOlxcdFxcdHJldHVybiAwO1xcbiAgODQ6XFx0fVxcbiAgODU6XFx0XFxuICA4NjpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHBzZV9jb250cm9sbGVyX29wcyBwc2VfcmVnX29wcyA9IHtcXG4gIDg3OlxcdFxcdC5waV9nZXRfYWRtaW5fc3RhdGUgPSBwc2VfcmVnX3BpX2dldF9hZG1pbl9zdGF0ZSxcXG4gIDg4OlxcdFxcdC5waV9nZXRfcHdfc3RhdHVzID0gcHNlX3JlZ19waV9nZXRfcHdfc3RhdHVzLFxcbiAgODk6XFx0XFx0LnBpX2VuYWJsZSA9IHBzZV9yZWdfcGlfZW5hYmxlLFxcbiAgOTA6XFx0XFx0LnBpX2Rpc2FibGUgPSBwc2VfcmVnX3BpX2Rpc2FibGUsXFxuICA5MTpcXHR9O1xcbiAgOTI6XFx0XFxuICA5MzpcXHRzdGF0aWMgaW50XFxuICA5NDpcXHRwc2VfcmVnX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuICA5NTpcXHR7XFxuICA5NjpcXHRcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGRldi1cXHUwMDNlZGV2O1xcbiAgOTc6XFx0XFx0c3RydWN0IHBzZV9yZWdfcHJpdiAqcHJpdjtcXG4gIDk4OlxcdFxcdGludCByZXQ7XFxuICA5OTpcXHRcXG4gMTAwOlxcdFxcdHByaXYgPSBkZXZtX2t6YWxsb2MoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjEwOjU3LjA1ODgyNjgyOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NDQ1NzcyMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGxhdGZvcm0gRGV2aWNlIERyaXZlciBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzOyBpdCBzZWVtcyB0byBiZSBhIHBsYXRmb3JtIGRldmljZSBkcml2ZXIuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkNhbiB3ZSB1dGlsaXplIGBldGh0b29sYCBjb21tYW5kcyBvbiBhIFBIWSBkZXZpY2UgZGlyZWN0bHk/XCIgTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0LCB5ZXMsIHdlICpjb3VsZCogYWNoaWV2ZSB0aGlzIGJ5IGVtcGxveWluZyBhIGR1bW15IG5ldHdvcmsgZGV2aWNlIHRoYXQncyBhc3NvY2lhdGVkIHdpdGggdGhlIFBIWS4gVGhhdCdzIGEgZ29vZCBhcHByb2FjaCB0byB0YWtlLiBCdXQgdGhlbiwgYSByZWQgZmxhZyDigJMgYW5kIGl0J3MgYW4gaW1wb3J0YW50IG9uZSDigJMgcG9wcyB1cDogYGV0aG5sX3NldF9wc2VgLiBXYWl0IGEgc2Vjb25k4oCmIHRoYXQncyBhbiBldGh0b29sIG5ldGxpbmsgY29tbWFuZC4gTm93LCBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrLiBMZXQncyBzZWUuLi4gdGhlIG1vc3QgbGlrZWx5IHNvdXJjZSB3b3VsZCBiZSBgbmV0L2V0aHRvb2wvcHNlLXBkLmNgLiBUaW1lIHRvIGRpZyBpbnRvIHRoYXQgYW5kIHNlZSBob3cgdGhleSBhcmUgcmVsYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExNTcsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjExOjAxLjUwMzQwNjMwN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvZXRodG9vbC9wc2UtcGQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNzUsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjc1OlxcdH1cXG4gMjc2OlxcdFxcbiAyNzc6XFx0c3RhdGljIGludFxcbiAyNzg6XFx0ZXRobmxfc2V0X3BzZShzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiAyNzk6XFx0e1xcbiAyODA6XFx0XFx0c3RydWN0IG5sYXR0ciAqKnRiID0gaW5mby1cXHUwMDNlYXR0cnM7XFxuIDI4MTpcXHRcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xcbiAyODI6XFx0XFx0aW50IHJldDtcXG4gMjgzOlxcdFxcbiAyODQ6XFx0XFx0cGh5ZGV2ID0gZXRobmxfcmVxX2dldF9waHlkZXYocmVxX2luZm8sIHRiLCBFVEhUT09MX0FfUFNFX0hFQURFUixcXG4gMjg1OlxcdFxcdFxcdFxcdFxcdCAgICAgIGluZm8tXFx1MDAzZWV4dGFjayk7XFxuIDI4NjpcXHRcXG4gMjg3OlxcdFxcdHBoeV9wc2VfY29udHJvbF9sb2NrKCk7XFxuIDI4ODpcXHRcXG4gMjg5OlxcdFxcdHJldCA9IGV0aG5sX3NldF9wc2VfdmFsaWRhdGUocGh5ZGV2LCBpbmZvKTtcXG4gMjkwOlxcdFxcdGlmIChyZXQpXFxuIDI5MTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMjkyOlxcdFxcbiAyOTM6XFx0XFx0aWYgKHRiW0VUSFRPT0xfQV9QU0VfUFJJT10pIHtcXG4gMjk0OlxcdFxcdFxcdHVuc2lnbmVkIGludCBwcmlvO1xcbiAyOTU6XFx0XFxuIDI5NjpcXHRcXHRcXHRwcmlvID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BTRV9QUklPXSk7XFxuIDI5NzpcXHRcXHRcXHRyZXQgPSBwc2VfZXRodG9vbF9zZXRfcHJpbyhwaHlkZXYtXFx1MDAzZXBzZWMsIGluZm8tXFx1MDAzZWV4dGFjaywgcHJpbyk7XFxuIDI5ODpcXHRcXHRcXHRpZiAocmV0KVxcbiAyOTk6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDMwMDpcXHRcXHR9XFxuIDMwMTpcXHRcXG4gMzAyOlxcdFxcdGlmICh0YltFVEhUT09MX0FfQzMzX1BTRV9BVkFJTF9QV19MSU1JVF0pIHtcXG4gMzAzOlxcdFxcdFxcdHVuc2lnbmVkIGludCBwd19saW1pdDtcXG4gMzA0OlxcdFxcbiAzMDU6XFx0XFx0XFx0cHdfbGltaXQgPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfQzMzX1BTRV9BVkFJTF9QV19MSU1JVF0pO1xcbiAzMDY6XFx0XFx0XFx0cmV0ID0gcHNlX2V0aHRvb2xfc2V0X3B3X2xpbWl0KHBoeWRldi1cXHUwMDNlcHNlYywgaW5mby1cXHUwMDNlZXh0YWNrLFxcbiAzMDc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHB3X2xpbWl0KTtcXG4gMzA4OlxcdFxcdFxcdGlmIChyZXQpXFxuIDMwOTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gMzEwOlxcdFxcdH1cXG4gMzExOlxcdFxcbiAzMTI6XFx0XFx0LyogVGhlc2UgdmFsdWVzIGFyZSBhbHJlYWR5IHZhbGlkYXRlZCBieSB0aGUgZXRobmxfcHNlX3NldF9wb2xpY3kgKi9cXG4gMzEzOlxcdFxcdGlmICh0YltFVEhUT09MX0FfUE9ETF9QU0VfQURNSU5fQ09OVFJPTF0gfHxcXG4gMzE0OlxcdFxcdCAgICB0YltFVEhUT09MX0FfQzMzX1BTRV9BRE1JTl9DT05UUk9MXSkge1xcbiAzMTU6XFx0XFx0XFx0c3RydWN0IHBzZV9jb250cm9sX2NvbmZpZyBjb25maWcgPSB7fTtcXG4gMzE2OlxcdFxcbiAzMTc6XFx0XFx0XFx0aWYgKHRiW0VUSFRPT0xfQV9QT0RMX1BTRV9BRE1JTl9DT05UUk9MXSlcXG4gMzE4OlxcdFxcdFxcdFxcdGNvbmZpZy5wb2RsX2FkbWluX2NvbnRyb2wgPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUE9ETF9QU0VfQURNSU5fQ09OVFJPTF0pO1xcbiAzMTk6XFx0XFx0XFx0aWYgKHRiW0VUSFRPT0xfQV9DMzNfUFNFX0FETUlOX0NPTlRST0xdKVxcbiAzMjA6XFx0XFx0XFx0XFx0Y29uZmlnLmMzM19hZG1pbl9jb250cm9sID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX0MzM19QU0VfQURNSU5fQ09OVFJPTF0pO1xcbiAzMjE6XFx0XFxuIDMyMjpcXHRcXHRcXHQvKiBwc2VfZXRodG9vbF9zZXRfY29uZmlnKCkgd2lsbCBkbyBub3RoaW5nIGlmIHRoZSBjb25maWdcXG4gMzIzOlxcdFxcdFxcdCAqIGlzIHplcm9cXG4gMzI0OlxcdFxcdFxcdCAqL1xcbiAzMjU6XFx0XFx0XFx0cmV0ID0gcHNlX2V0aHRvb2xfc2V0X2NvbmZpZyhwaHlkZXYtXFx1MDAzZXBzZWMsIGluZm8tXFx1MDAzZWV4dGFjayxcXG4gMzI2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmNvbmZpZyk7XFxuIDMyNzpcXHRcXHR9XFxuIDMyODpcXHRcXG4gMzI5OlxcdG91dDpcXG4gMzMwOlxcdFxcdC8qIFJldHVybiBlcnJubyBvciB6ZXJvIC0gUFNFIGhhcyBubyBub3RpZmljYXRpb24gKi9cXG4gMzMxOlxcdFxcdHBoeV9wc2VfY29udHJvbF91bmxvY2soKTtcXG4gMzMyOlxcdFxcdHJldHVybiByZXQ7XFxuIDMzMzpcXHR9XFxuIDMzNDpcXHRcXG4gMzM1OlxcdGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9wc2VfcmVxdWVzdF9vcHMgPSB7XFxuIDMzNjpcXHRcXHQucmVxdWVzdF9jbWRcXHRcXHQ9IEVUSFRPT0xfTVNHX1BTRV9HRVQsXFxuIDMzNzpcXHRcXHQucmVwbHlfY21kXFx0XFx0PSBFVEhUT09MX01TR19QU0VfR0VUX1JFUExZLFxcbiAzMzg6XFx0XFx0Lmhkcl9hdHRyXFx0XFx0PSBFVEhUT09MX0FfUFNFX0hFQURFUixcXG4gMzM5OlxcdFxcdC5yZXFfaW5mb19zaXplXFx0XFx0PSBzaXplb2Yoc3RydWN0IHBzZV9yZXFfaW5mbyksXFxuIDM0MDpcXHRcXHQucmVwbHlfZGF0YV9zaXplXFx0PSBzaXplb2Yoc3RydWN0IHBzZV9yZXBseV9kYXRhKSxcXG4gMzQxOlxcdFxcbiAzNDI6XFx0XFx0LnByZXBhcmVfZGF0YVxcdFxcdD0gcHNlX3ByZXBhcmVfZGF0YSxcXG4gMzQzOlxcdFxcdC5yZXBseV9zaXplXFx0XFx0PSBwc2VfcmVwbHlfc2l6ZSxcXG4gMzQ0OlxcdFxcdC5maWxsX3JlcGx5XFx0XFx0PSBwc2VfZmlsbF9yZXBseSxcXG4gMzQ1OlxcdFxcdC5jbGVhbnVwX2RhdGFcXHRcXHQ9IHBzZV9jbGVhbnVwX2RhdGEsXFxuIDM0NjpcXHRcXG4gMzQ3OlxcdFxcdC5zZXRcXHRcXHRcXHQ9IGV0aG5sX3NldF9wc2UsXFxuIDM0ODpcXHRcXHQvKiBQU0UgaGFzIG5vIG5vdGlmaWNhdGlvbiAqL1xcbiAzNDk6XFx0fTtcXG4gMzUwOlxcdFxcbiAzNTE6XFx0dm9pZCBldGhubF9wc2Vfc2VuZF9udGYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgbG9uZyBub3RpZnMpXFxuIDM1MjpcXHR7XFxuIDM1MzpcXHRcXHR2b2lkICpyZXBseV9wYXlsb2FkO1xcbiAzNTQ6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gMzU1OlxcdFxcdGludCByZXBseV9sZW47XFxuIDM1NjpcXHRcXHRpbnQgcmV0O1xcbiAzNTc6XFx0XFxuIDM1ODpcXHRcXHRBU1NFUlRfUlROTCgpO1xcbiAzNTk6XFx0XFxuIDM2MDpcXHRcXHRpZiAoIW5ldGRldiB8fCAhbm90aWZzKVxcbiAzNjE6XFx0XFx0XFx0cmV0dXJuO1xcbiAzNjI6XFx0XFxuIDM2MzpcXHRcXHRyZXBseV9sZW4gPSBldGhubF9yZXBseV9oZWFkZXJfc2l6ZSgpICtcXG4gMzY0OlxcdFxcdFxcdCAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7IC8qIF9QU0VfTlRGX0VWRU5UUyAqL1xcbiAzNjU6XFx0XFxuIDM2NjpcXHRcXHRza2IgPSBnZW5sbXNnX25ldyhyZXBseV9sZW4sIEdGUF9LRVJORUwpO1xcbiAzNjc6XFx0XFx0aWYgKCFza2IpXFxuIDM2ODpcXHRcXHRcXHRyZXR1cm47XFxuIDM2OTpcXHRcXG4gMzcwOlxcdFxcdHJlcGx5X3BheWxvYWQgPSBldGhubF9iY2FzdG1zZ19wdXQoc2tiLCBFVEhUT09MX01TR19QU0VfTlRGKTtcXG4gMzcxOlxcdFxcdGlmICghcmVwbHlfcGF5bG9hZClcXG4gMzcyOlxcdFxcdFxcdGdvdG8gZXJyX3NrYjtcXG4gMzczOlxcdFxcbiAzNzQ6XFx0XFx0cmV0ID0gZXRobmxfZmlsbF9yZXBseV9oZWFkZXIoc2tiLCBuZXRkZXYsIEVUSFRPT0xfQV9QU0VfTlRGX0hFQURFUik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjExOjAxLjUwMzQ5OTQ0N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTY2MzQ5NzQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIENvZGUgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gYGV0aG5sX3NldF9wc2VgIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIOKAkyB0aGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBUaGUgcGF0Y2ggdG91Y2hlcyBgcGh5X2RldmljZV9yZWdpc3RlcmAsIGBwaHlfZGV2aWNlX3JlbW92ZWAsIGFuZCBgcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWRgLCBhbGwgY29yZSBmdW5jdGlvbnMgZm9yIFBIWSBkZXZpY2UgcmVnaXN0cmF0aW9uLiBUaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgUEhZIHJlZ2lzdHJhdGlvbiBpcyBmdW5kYW1lbnRhbC4gV2UgY2FuIGRlZmluaXRlbHkgY3JlYXRlIGFuIGVudmlyb25tZW50IHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLCBldmVuIGluIFFFTVUsIHRocm91Z2ggYG1hY2JgLCBgZTEwMDBgLCBvciBvdGhlciBlbXVsYXRlZCBOSUNzLCBhbmQgcG9zc2libHkgdGhyb3VnaCBkdW1teSBQSFlzLCBhcyBhIHN0YXJ0aW5nIHBvaW50LlxuXG5UaGUgYHBoeV9wc2Vfbm90aWZpZXJgIGlzIGludHJvZHVjZWQgYW5kIHJlZ2lzdGVyZWQgaW4gYHBoeV9pbml0YC4gVGhlIG5vdGlmaWVyIGl0c2VsZiBpcyB0cmlnZ2VyZWQgYnkgYHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyYCBhbmQgYHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXJgLiBUaGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgd2UgY2FuIHRyaWdnZXIgYHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyYCBhdCBhbGwuIExvYWRpbmcgYSBQU0UgZHJpdmVyIGlzIHRoZSBvYnZpb3VzIHJvdXRlLCBidXQgdGhvc2UgYXJlIHR5cGljYWxseSBwbGF0Zm9ybSBkcml2ZXJzLiBDb3VsZCB0aGVyZSBiZSBhIHdheSB0byBmb3JjZSBhIHJlZ2lzdHJhdGlvbiBmcm9tIHVzZXJzcGFjZSwgcGVyaGFwcyB2aWEgZGV2aWNlIHRyZWUgb3ZlcmxheXM/IE1heWJlIGEgZHVtbXkgUFNFIGRyaXZlciBpcyB0aGUgYW5zd2VyLlxuXG5CdXQgaG9sZCBvbiwgdGhlIG5vdGlmaWVyIGdldHMgdHJpZ2dlcmVkIG9uICpyZWdpc3RyYXRpb24qIG9mIGEgUFNFIGNvbnRyb2xsZXIuIFRoZSBpbXBvcnRhbnQgdGhpbmcgaXMgdGhhdCwgZXZlbiBpZiBnZXR0aW5nIGEgUFNFIGNvbnRyb2xsZXIgcmVnaXN0ZXJlZCBpcyBkaWZmaWN1bHQsIHRoZSBgRVRIVE9PTF9NU0dfUFNFX0dFVGAgYW5kIGBFVEhUT09MX01TR19QU0VfU0VUYCBuZXRsaW5rIGNvbW1hbmRzLCB3aGljaCB1dGlsaXplIGBldGhubF9zZXRfcHNlYCwgYXJlIHJlYWNoYWJsZSBhbmQgbm93IHVzZSBgcGh5X3BzZV9jb250cm9sX2xvY2soKWAuIEFsc28sIHdlIGhhdmUgdGhlIG9yaWdpbmFsIGBwaHlfZGV2aWNlX3JlZ2lzdGVyYCBhbmQgYHBoeV9kZXZpY2VfcmVtb3ZlYCB3aGljaCBhbHNvIHVzZSBgcGh5X3BzZV9sb2NrYC4gU28sIHRoaXMgaXMgYSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBQSFkgbGlicmFyeSBhbmQgZXRodG9vbC4gSXQncyBkZWZpbml0ZWx5IHJpcGUgZm9yIGZ1enppbmcuXG5cbioqVGFyZ2V0IEZ1bmN0aW9ucyoqXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdG8gdGFyZ2V0OlxuXG4qICAgYHBoeV90cnlfYXR0YWNoX3BzZWBcbiogICBgcGh5X3BzZV9hdHRhY2hfb25lYFxuKiAgIGBwaHlfcHNlX2RldGFjaF9vbmVgXG4qICAgYHBoeV9wc2Vfbm90aWZpZXJfZXZlbnRgXG4qICAgYHBoeV9wc2VfY29udHJvbF9sb2NrYFxuKiAgIGBwaHlfcHNlX2NvbnRyb2xfdW5sb2NrYFxuKiAgIGBfX3BoeV9kZXZpY2VfcmVnaXN0ZXJgXG4qICAgYHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkYFxuKiAgIGBwaHlfZGV2aWNlX3JlZ2lzdGVyYFxuKiAgIGBwaHlfZGV2aWNlX3JlbW92ZWBcbiogICBgcHNlX3JlZ2lzdGVyX25vdGlmaWVyYFxuKiAgIGBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcmBcbiogICBgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXJgXG4qICAgYHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXJgXG4qICAgYHBzZV9jb250cm9sX21hdGNoZXNfcGNkZXZgXG4qICAgYGV0aG5sX3NldF9wc2VgXG4qICAgYHBzZV9wcmVwYXJlX2RhdGFgXG5cbioqQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5IENoZWNrKipcblxuV2UgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGltcGxpY2F0aW9ucy4gVGhlIGBpbmNsdWRlL2xpbnV4L3BzZS1wZC9wc2UuaGAgZmlsZSByZXZlYWxzIHRoYXQgYHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyYCwgYHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXJgLCBgcHNlX3JlZ2lzdGVyX25vdGlmaWVyYCBhbmQgYHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyYCBhcmUgb25seSBkZWZpbmVkIGlmIGBDT05GSUdfUFNFX0NPTlRST0xMRVJgIGlzIGVuYWJsZWQuIElmIG5vdCBlbmFibGVkLCB0aGVzZSBmdW5jdGlvbnMgcHJvYmFibHkgcmVzb2x2ZSB0byBlbXB0eSAoaW5saW5lKSBmdW5jdGlvbnMgb3IgcmV0dXJuIGVhcmx5LlxuXG5Ib3dldmVyLCBiZWNhdXNlIGBwaHlfaW5pdGAgY2FsbHMgYHBzZV9yZWdpc3Rlcl9ub3RpZmllcmAgd2l0aG91dCBjaGVja2luZyBmb3IgdGhlIGNvbmZpZyBvcHRpb24sIGV2ZW4gaWYgYENPTkZJR19QU0VfQ09OVFJPTExFUmAgaXNuJ3Qgc2V0LCBgcGh5X2luaXRgIHdpbGwgc3RpbGwgYmUgY2FsbGVkLiBJdCB3aWxsIGNhbGwgdGhlIGVtcHR5L2lubGluZSBgcHNlX3JlZ2lzdGVyX25vdGlmaWVyYCwgd2hpY2ggd2lsbCByZXR1cm4gMCBhbmQgY29udGludWUuXG5cblNvLCB0byB0ZXN0IHRoZSBhY3R1YWwgbm90aWZpZXIgcmVnaXN0cmF0aW9uIGFuZCBjaGFpbiwgd2UgKm5lZWQqIHRvIGVuYWJsZSBgQ09ORklHX1BTRV9DT05UUk9MTEVSYC4gV2Ugc2hvdWxkIGNoZWNrIHRoZSBLY29uZmlnIGluIGBkcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZ2AgZm9yIHJlbGF0ZWQgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwNzksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMToxMy4xNjY5OTk4NDZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODcwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIEV0aGVybmV0IFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudCBkcml2ZXJzXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnVjb25maWcgUFNFX0NPTlRST0xMRVJcXG4gICA3OlxcdFxcdGJvb2wgXFxcIkV0aGVybmV0IFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudCBTdXBwb3J0XFxcIlxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiBSRUdVTEFUT1JcXG4gICA5OlxcdFxcdGhlbHBcXG4gIDEwOlxcdFxcdCAgR2VuZXJpYyBQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQgQ29udHJvbGxlciBzdXBwb3J0LlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IG5vLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRpZiBQU0VfQ09OVFJPTExFUlxcbiAgMTU6XFx0XFxuICAxNjpcXHRjb25maWcgUFNFX1JFR1VMQVRPUlxcbiAgMTc6XFx0XFx0dHJpc3RhdGUgXFxcIlJlZ3VsYXRvciBiYXNlZCBQU0UgY29udHJvbGxlclxcXCJcXG4gIDE4OlxcdFxcdGhlbHBcXG4gIDE5OlxcdFxcdCAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgc3VwcG9ydCBmb3Igc2ltcGxlIHJlZ3VsYXRvciBiYXNlZCBFdGhlcm5ldCBQb3dlclxcbiAgMjA6XFx0XFx0ICBTb3VyY2luZyBFcXVpcG1lbnQgd2l0aG91dCBhdXRvbWF0aWMgY2xhc3NpZmljYXRpb24gc3VwcG9ydC4gRm9yXFxuICAyMTpcXHRcXHQgIGV4YW1wbGUgZm9yIGJhc2ljIGltcGxlbWVudGF0aW9uIG9mIFBvREwgKDgwMi4zYnUpIHNwZWNpZmljYXRpb24uXFxuICAyMjpcXHRcXG4gIDIzOlxcdGNvbmZpZyBQU0VfUEQ2OTJYMFxcbiAgMjQ6XFx0XFx0dHJpc3RhdGUgXFxcIlBENjkyWDAgUFNFIGNvbnRyb2xsZXJcXFwiXFxuICAyNTpcXHRcXHRkZXBlbmRzIG9uIEkyQ1xcbiAgMjY6XFx0XFx0c2VsZWN0IEZXX0xPQURFUlxcbiAgMjc6XFx0XFx0c2VsZWN0IEZXX1VQTE9BRFxcbiAgMjg6XFx0XFx0aGVscFxcbiAgMjk6XFx0XFx0ICBUaGlzIG1vZHVsZSBwcm92aWRlcyBzdXBwb3J0IGZvciBQRDY5MngwIHJlZ3VsYXRvciBiYXNlZCBFdGhlcm5ldFxcbiAgMzA6XFx0XFx0ICBQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQuXFxuICAzMTpcXHRcXG4gIDMyOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuICAzMzpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwZDY5MngwLlxcbiAgMzQ6XFx0XFxuICAzNTpcXHRjb25maWcgUFNFX1NJMzQ3NFxcbiAgMzY6XFx0XFx0dHJpc3RhdGUgXFxcIlNpMzQ3NCBQU0UgY29udHJvbGxlclxcXCJcXG4gIDM3OlxcdFxcdGRlcGVuZHMgb24gSTJDXFxuICAzODpcXHRcXHRoZWxwXFxuICAzOTpcXHRcXHQgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHN1cHBvcnQgZm9yIFNpMzQ3NCByZWd1bGF0b3IgYmFzZWQgRXRoZXJuZXRcXG4gIDQwOlxcdFxcdCAgUG93ZXIgU291cmNpbmcgRXF1aXBtZW50LlxcbiAgNDE6XFx0XFx0ICBPbmx5IDQtcGFpciBQU0UgY29uZmlndXJhdGlvbnMgYXJlIHN1cHBvcnRlZC5cXG4gIDQyOlxcdFxcbiAgNDM6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gIDQ0OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNpMzQ3NC5cXG4gIDQ1OlxcdFxcbiAgNDY6XFx0Y29uZmlnIFBTRV9UUFMyMzg4MVxcbiAgNDc6XFx0XFx0dHJpc3RhdGUgXFxcIlRQUzIzODgxIFBTRSBjb250cm9sbGVyXFxcIlxcbiAgNDg6XFx0XFx0ZGVwZW5kcyBvbiBJMkNcXG4gIDQ5OlxcdFxcdGhlbHBcXG4gIDUwOlxcdFxcdCAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgc3VwcG9ydCBmb3IgVFBTMjM4ODEgcmVndWxhdG9yIGJhc2VkIEV0aGVybmV0XFxuICA1MTpcXHRcXHQgIFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudC5cXG4gIDUyOlxcdFxcbiAgNTM6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gIDU0OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHRwczIzODgxLlxcbiAgNTU6XFx0ZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTE6MTMuMTY3MDg4Njg2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwMTEwMjQxMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29uZmlndXJhdGlvbiwgYW5kIGl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gYFBTRV9DT05UUk9MTEVSYCBkZXBlbmRzIG9uIGBSRUdVTEFUT1JgLCBzbyBuYXR1cmFsbHksIEkgbmVlZCB0byBlbmFibGUgYm90aC4gQnV0IHRoZW4gSSByZW1lbWJlciBgUFNFX0NPTlRST0xMRVJgIGlzIGp1c3QgYSBib29sZWFuOyBpdCdzIG9uIG9yIG9mZi4gVGhhdCBtYWtlcyB0aGluZ3MgYSBiaXQgc2ltcGxlci5cblxuSSBuZWVkIHRvIHNlZSBpZiB3ZSBoYXZlIGEgZHVtbXkgUFNFIGRyaXZlciBvciBpZiBlbmFibGluZyBgUFNFX1JFR1VMQVRPUmAgd2lsbCBnaXZlIHVzIG9uZS4gQWgsIGdvb2QsIGBQU0VfUkVHVUxBVE9SYCBpcyBgdHJpc3RhdGVgLiBTbywgSSAqY2FuKiBlbmFibGUgaXQuIFRoYXQgc2V0dGxlcyBpdDogbXkgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgbmVlZHMgdG8gaW5jbHVkZSBgUFNFX0NPTlRST0xMRVJgIGFuZCBgUkVHVUxBVE9SYC4gRWFzeSBwZWFzeS5cblxuTm93LCBqdXN0IHRvIGJlIHRob3JvdWdoLCBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgbmV0L2V0aHRvb2wvcHNlLXBkLmNgLiBJJ20gZ3Vlc3NpbmcgdGhhdCBjb2RlIGhhcyBzb21lIGRlcGVuZGVuY3kgb24gYFBTRV9DT05UUk9MTEVSYCwgb3IgYXQgdGhlIHZlcnkgbGVhc3QsIHRob3NlIGV0aHRvb2wgUFNFIGNvbW1hbmRzIGFyZSBhbHdheXMgY29tcGlsZWQgaWYgYEVUSFRPT0xfTkVUTElOS2AgaXMgZW5hYmxlZCwgZXZlbiBpZiB0aGV5IHJldHVybiBhbiBlcnJvciBpZiBgUFNFX0NPTlRST0xMRVJgIGlzIG5vdC4gSnVzdCB0byBjb25maXJtIG15IGFzc3VtcHRpb25zLCBJJ2xsIHRha2UgYSBxdWljayBsb29rIGF0IGBuZXQvZXRodG9vbC9NYWtlZmlsZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MzQ2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTE6MjAuMTc4MTE1MjY0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzMwMDkxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHNlLXBkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9ldGh0b29sL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvZXRodG9vbC9NYWtlZmlsZT03PWV0aHRvb2xfbmwteVxcdDo9IG5ldGxpbmsubyBiaXRzZXQubyBzdHJzZXQubyBsaW5raW5mby5vIGxpbmttb2Rlcy5vIHJzcy5vIFxcXFxcXG4tLVxcbm5ldC9ldGh0b29sL01ha2VmaWxlLTEwLVxcdFxcdCAgIHR1bm5lbHMubyBmZWMubyBlZXByb20ubyBzdGF0cy5vIHBoY192Y2xvY2tzLm8gbW0ubyBcXFxcXFxubmV0L2V0aHRvb2wvTWFrZWZpbGU6MTE6XFx0XFx0ICAgbW9kdWxlLm8gY21pc19md191cGRhdGUubyBjbWlzX2NkYi5vIHBzZS1wZC5vIHBsY2EubyBcXFxcXFxubmV0L2V0aHRvb2wvTWFrZWZpbGUtMTItXFx0XFx0ICAgcGh5Lm8gdHNjb25maWcubyBtc2Uub1xcbi0tXFxubmV0L2V0aHRvb2wvcHNlLXBkLmMtMTQtI2luY2x1ZGUgXFxcImNvbW1vbi5oXFxcIlxcbm5ldC9ldGh0b29sL3BzZS1wZC5jOjE1OiNpbmNsdWRlIFxcXCJsaW51eC9wc2UtcGQvcHNlLmhcXFwiXFxubmV0L2V0aHRvb2wvcHNlLXBkLmMtMTYtI2luY2x1ZGUgXFxcIm5ldGxpbmsuaFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTE6MjAuNDExMTI5MDc0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5NTY0NzI1NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgUFNFIENvbXBpbGF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBjb25maXJtaW5nIHRoYXQgYHBzZS1wZC5vYCBpcyBpbmRlZWQgYWx3YXlzIGNvbXBpbGVkIHdoZW4gYGV0aHRvb2xfbmwteWAgaXMgaW5jbHVkZWQsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGViYXNlLiBOb3csIEkgbmVlZCB0byBwaW5wb2ludCB0aGUga2V5IHN5bWJvbHMgaW52b2x2ZWQgaW4gdGhpcyBgcHNlYCBmdW5jdGlvbmFsaXR5LiBMZXQncyBzZWUuLi5cblxuSSdtIG1ha2luZyBhIG1lbnRhbCBsaXN0IG9mIHRoZSBjb3JlIHN5bWJvbHMuIEknbSBnb2luZyB0byB0cmFjayBgcGh5X3RyeV9hdHRhY2hfcHNlYCwgYnV0IGl0J3MgKnN0YXRpYyogd2hpY2ggbWVhbnMgaXQgbWlnaHQgZ2V0IGlubGluZWQsIHNvIEknbGwgYmUgc3VyZSB0byBhbHNvIG1ha2UgYSBub3RlIG9mIHRoZSBmdW5jdGlvbnMgdGhhdCBjYWxsIGl0OiBgcGh5X3BzZV9hdHRhY2hfb25lYCwgYHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkYCwgYW5kIGBwaHlfZGV2aWNlX3JlZ2lzdGVyYC4gSSdsbCBwcm9iYWJseSBmb2N1cyBvbiB0aGUgbm9uLXN0YXRpYyBvbmVzIHNpbmNlIHRoZSBpbmxpbmluZyB3aWxsIG1lYW4gdGhlIGFjdHVhbCBzeW1ib2wgbWlnaHQgbm90IGJlIGF2YWlsYWJsZSBhdCBydW50aW1lLiBUaGUgb3RoZXJzIG9uIG15IGxpc3QgYXJlOiBgcGh5X3BzZV9jb250cm9sX2xvY2tgLCBgcGh5X3BzZV9jb250cm9sX3VubG9ja2AsIGBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZGAsIGBwaHlfZGV2aWNlX3JlZ2lzdGVyYCwgYHBoeV9kZXZpY2VfcmVtb3ZlYCwgYHBzZV9yZWdpc3Rlcl9ub3RpZmllcmAsIGBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcmAsIGBwc2VfY29udHJvbGxlcl9yZWdpc3RlcmAsIGBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyYCwgYHBzZV9jb250cm9sX21hdGNoZXNfcGNkZXZgLCBgZXRobmxfc2V0X3BzZWAsIGFuZCBgcHNlX3ByZXBhcmVfZGF0YWAuXG5cbkknbGwgc3RhcnQgYnkgdGFraW5nIGEgY2xvc2VyIGxvb2sgYXQgYHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkYCBhbmQgYHBoeV9kZXZpY2VfcmVnaXN0ZXJgIHRvIHNlZSBob3cgdGhvc2UgaW50ZWdyYXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjA4MywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMToyNy4zNjc2MDUwOTVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MzkxNjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMjI2PXN0YXRpYyBpbnQgX19waHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEyNTktLyoqXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMjYwOiAqIHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkIC0gUmVnaXN0ZXIgdGhlIHBoeSBkZXZpY2Ugb24gdGhlIE1ESU8gYnVzXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMjYxLSAqIEBwaHlkZXY6IHBoeV9kZXZpY2Ugc3RydWN0dXJlIHRvIGJlIGFkZGVkIHRvIHRoZSBNRElPIGJ1c1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMjY2LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTI2NzppbnQgcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEyNjgte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMjgyLX1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEyODM6RVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZCk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMjg0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMToyNy40MTQ5OTk4NTNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk4NDU1NjgwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIFBIWSBhbmQgUFNFIEV4cG9ydHMqKlxuXG5Pa2F5LCBzbyBJJ20gZG91YmxlLWNoZWNraW5nIHRoZSBzeW1ib2wgZXhwb3J0cyBoZXJlLCBhbmQgeWVzLCBpdCBzZWVtcyBgcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWRgIGlzIGluZGVlZCBleHBvcnRlZCwgd2hpY2ggaXMgZ29vZC4gVGhhdCdzIGEgZnVuZGFtZW50YWwgUEhZIGZ1bmN0aW9uLiBBbmQganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGBwaHlfZGV2aWNlX3JlZ2lzdGVyYCBpcyBhbHNvIGV4cG9ydGVkLCBhcyBJIHdvdWxkIGV4cGVjdC4gVGhlIHJlbW92YWwgZnVuY3Rpb24sIGBwaHlfZGV2aWNlX3JlbW92ZWAsIGlzIGFsc28gYWNjb3VudGVkIGZvciwgc28gdGhlIGNvcmUgUEhZIHJlZ2lzdHJhdGlvbiBhbmQgZGVyZWdpc3RyYXRpb24gYXBwZWFyIHRvIGJlIHdlbGwtZGVmaW5lZC5cblxuTW92aW5nIG9uIHRvIHRoZSBQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQsIHRoZSBQU0Ugc2lkZTogSSBzZWUgYHBzZV9yZWdpc3Rlcl9ub3RpZmllcmAgYW5kIGBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcmAgZXhwb3J0ZWQsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciBoYW5kbGluZyBub3RpZmljYXRpb25zLiBBbmQgdGhlIGNvbnRyb2xsZXIgcmVnaXN0cmF0aW9uIGFuZCB1bnJlZ2lzdHJhdGlvbiBmdW5jdGlvbnMsIGBwc2VfY29udHJvbGxlcl9yZWdpc3RlcmAgYW5kIGBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyYCwgYXJlIGFsc28gYXZhaWxhYmxlLiBGaW5hbGx5LCBpdCBhcHBlYXJzIGBwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2YCBpcyBhcyB3ZWxsLiBUaGF04oCZcyBwcm9iYWJseSBpbXBvcnRhbnQgZm9yIG1hdGNoaW5nIFBTRSBjb250cm9sIHdpdGggdGhlIHBsYXRmb3JtIGRldmljZS5cblxuTm93LCBhIGJyaWVmIHBhdXNlLiBJIHNlZSB0aGF0IGBldGhubF9zZXRfcHNlYCBpcyBzdGF0aWMuLi4gaG1tLiBMZXQgbWUgcXVpY2tseSBjaGVjayB3aGVyZSB0aGF0IGlzIGRlZmluZWQuLi4gQWgsIHJpZ2h0LCB0aGF0J3MgaW4gYG5ldC9ldGh0b29sL3BzZS1wZC5jYC4gT2theSwgdGhhdCBtYWtlcyBtb3JlIHNlbnNlIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5NjAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTE6MzMuMzk5NTU5MjI2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjkwNTczOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJldGhubF9zZXRfcHNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9ldGh0b29sL3BzZS1wZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9ldGh0b29sL3BzZS1wZC5jPTI0ND1zdGF0aWMgaW50XFxubmV0L2V0aHRvb2wvcHNlLXBkLmM6MjQ1OmV0aG5sX3NldF9wc2VfdmFsaWRhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5uZXQvZXRodG9vbC9wc2UtcGQuYy0yNDYte1xcbi0tXFxubmV0L2V0aHRvb2wvcHNlLXBkLmM9Mjc3PXN0YXRpYyBpbnRcXG5uZXQvZXRodG9vbC9wc2UtcGQuYzoyNzg6ZXRobmxfc2V0X3BzZShzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbm5ldC9ldGh0b29sL3BzZS1wZC5jLTI3OS17XFxuLS1cXG5uZXQvZXRodG9vbC9wc2UtcGQuYy0yODgtXFxubmV0L2V0aHRvb2wvcHNlLXBkLmM6Mjg5OlxcdHJldCA9IGV0aG5sX3NldF9wc2VfdmFsaWRhdGUocGh5ZGV2LCBpbmZvKTtcXG5uZXQvZXRodG9vbC9wc2UtcGQuYy0yOTAtXFx0aWYgKHJldClcXG4tLVxcbm5ldC9ldGh0b29sL3BzZS1wZC5jPTMzNT1jb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfcHNlX3JlcXVlc3Rfb3BzID0ge1xcbi0tXFxubmV0L2V0aHRvb2wvcHNlLXBkLmMtMzQ2LVxcbm5ldC9ldGh0b29sL3BzZS1wZC5jOjM0NzpcXHQuc2V0XFx0XFx0XFx0PSBldGhubF9zZXRfcHNlLFxcbm5ldC9ldGh0b29sL3BzZS1wZC5jLTM0OC1cXHQvKiBQU0UgaGFzIG5vIG5vdGlmaWNhdGlvbiAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMTozMy40NDY0NzA4ODRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI3Mzg4OTQzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0d29yayBMaW5rIENvbmZpZ3VyYXRpb24gYW5kIFBvdGVudGlhbCBTeW1ib2wgVmlzaWJpbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBldGhubF9zZXRfcHNlYC4gSXQncyBkZWZpbmVkIGFzIGBzdGF0aWNgLCB3aGljaCB1c3VhbGx5IG1lYW5zIGl0J3Mgbm90IG1lYW50IHRvIGJlIGFjY2Vzc2VkIGZyb20gb3V0c2lkZSB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0LiBIb3dldmVyLCBJIHNlZSBpdCdzIGFzc2lnbmVkIHRvIHRoZSBgLnNldGAgbWVtYmVyIG9mIGBldGhubF9wc2VfcmVxdWVzdF9vcHNgLiBUaGF0J3MgYSBuZXRsaW5rIGZ1bmN0aW9uIHBvaW50ZXIuIFRoZXJlZm9yZSwgZXZlbiB0aG91Z2ggaXQncyBzdGF0aWMsIGl0J3MgYWN0dWFsbHkgcmVhY2hhYmxlIHRocm91Z2ggbmV0bGluayBjb21tdW5pY2F0aW9uLiBJbnRlcmVzdGluZy5cblxuVGhpcyBtZWFucyBJIG5lZWQgdG8gY29uc2lkZXIgYGV0aG5sX3NldF9wc2VgIGZvciBpbmNsdXNpb24gaW4gYEZvY3VzU3ltYm9sc2AsIGFzc3VtaW5nIGl0J3Mgbm90IGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLiBHaXZlbiB0aGF0IGl0J3MgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyLCBJJ20gcHJldHR5IGNvbmZpZGVudCBpdCAqd29uJ3QqIGJlIGlubGluZWQuIEZ1bmN0aW9uIHBvaW50ZXJzIHVzdWFsbHkgcHJldmVudCB0aGF0IGtpbmQgb2Ygb3B0aW1pemF0aW9uLlxuXG5XYWl0IGEgbWludXRlLCBgcHNlX3ByZXBhcmVfZGF0YWAgaXMgKmFsc28qIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlci4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGFzIHdlbGwuIEl0IGNvdWxkIGJlIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBzYW1lIG1lY2hhbmlzbS4gTmVlZCB0byBhbmFseXplIGl0cyB1c2FnZSBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzc0OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMTozOC43MjAzNjI5ODlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMTMyMDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBzZV9wcmVwYXJlX2RhdGFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2V0aHRvb2wvcHNlLXBkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2V0aHRvb2wvcHNlLXBkLmM9MzY9c3RhdGljIGludCBwc2VfZ2V0X3BzZV9hdHRyaWJ1dGVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuLS1cXG5uZXQvZXRodG9vbC9wc2UtcGQuYy01NC1cXG5uZXQvZXRodG9vbC9wc2UtcGQuYzo1NTpzdGF0aWMgaW50IHBzZV9wcmVwYXJlX2RhdGEoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfYmFzZSxcXG5uZXQvZXRodG9vbC9wc2UtcGQuYy01Ni1cXHRcXHRcXHQgICAgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2Jhc2UsXFxuLS1cXG5uZXQvZXRodG9vbC9wc2UtcGQuYz0zMzU9Y29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX3BzZV9yZXF1ZXN0X29wcyA9IHtcXG4tLVxcbm5ldC9ldGh0b29sL3BzZS1wZC5jLTM0MS1cXG5uZXQvZXRodG9vbC9wc2UtcGQuYzozNDI6XFx0LnByZXBhcmVfZGF0YVxcdFxcdD0gcHNlX3ByZXBhcmVfZGF0YSxcXG5uZXQvZXRodG9vbC9wc2UtcGQuYy0zNDMtXFx0LnJlcGx5X3NpemVcXHRcXHQ9IHBzZV9yZXBseV9zaXplLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMTozOC43NzE1MDEzMzdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDExNTM1MTI4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkNoZWNraW5nIFJlYWNoYWJpbGl0eSBhbmQgRXZlbnQgTm90aWZpY2F0aW9uKipcblxuT2theSwgaXQgc2VlbXMgbGlrZSBgcHNlX3ByZXBhcmVfZGF0YWAgaXMgaW5kZWVkIGFjY2Vzc2libGUg4oCTIHRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgSSBuZWVkIHRvIHNoaWZ0IG15IGZvY3VzIHRvIHRoZSBldmVudCBub3RpZmljYXRpb24gbWVjaGFuaXNtLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aXRoIGBwaHlfcHNlX25vdGlmaWVyX2V2ZW50YC4gVW5kZXJzdGFuZGluZyBob3cgYW5kIHdoZW4gdGhpcyBpcyB0cmlnZ2VyZWQsIGFuZCB3aGF0IGluZm9ybWF0aW9uIGl0IHJlbGF5cywgaXMgY3J1Y2lhbCBmb3IgWyoqaW5zZXJ0IHlvdXIgZmllbGQvZXhwZXJ0aXNlIGhlcmUsIGUuZy4sIGRlYnVnZ2luZyBuZXR3b3JrIHN0YWNrIGludGVyYWN0aW9ucywgdmFsaWRhdGluZyBkYXRhIHBpcGVsaW5lIGludGVncml0eSwgYW5hbHl6aW5nIHNlbnNvciBmdXNpb24gYXJjaGl0ZWN0dXJlKipdLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGl0J3Mgb3BlcmF0aW5nIGFzIGV4cGVjdGVkIGFuZCBhY2N1cmF0ZWx5IHJlZmxlY3RpbmcgdGhlIHN0YXRlIG9mIFsqKmluc2VydCByZWxldmFudCBzeXN0ZW0vY29tcG9uZW50IGhlcmUsIGUuZy4sIHRoZSBwaHlzaWNhbCBsYXllciBkYXRhIHN0cmVhbSwgdGhlIFBTRSBtb2R1bGUsIHRoZSBzZW5zb3IgaW50ZXJmYWNlKipdLiBUaGlzIGNoZWNrIGlzIGNyaXRpY2FsIGZvciBbKipleHBsYWluIHdoeSB0aGlzIGlzIGltcG9ydGFudCBmb3IgeW91ciBmaWVsZCwgZS5nLiwgZW5zdXJpbmcgZGF0YSBpbnRlZ3JpdHkgYWNyb3NzIHRoZSBuZXR3b3JrLCB2ZXJpZnlpbmcgdGhlIHRpbWluZyBvZiBkYXRhIHByb2Nlc3NpbmcsIHZhbGlkYXRpbmcgdGhlIHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIG1vZHVsZXMqKl0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MzYwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTE6NDIuODg2ODU1MzY5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzc4MjMwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwaHlfcHNlX25vdGlmaWVyX2V2ZW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMTUwPXN0YXRpYyBpbnQgcGh5X3BzZV9kZXRhY2hfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTE3MC1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExNzE6c3RhdGljIGludCBwaHlfcHNlX25vdGlmaWVyX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTcyLVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTE5Mj1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBoeV9wc2Vfbm90aWZpZXIgX19yZWFkX21vc3RseSA9IHtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExOTM6XFx0Lm5vdGlmaWVyX2NhbGwgPSBwaHlfcHNlX25vdGlmaWVyX2V2ZW50LFxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTE5NC19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMTo0Mi45MzQ2NDI5NThaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQxNjI0MTQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIHlvdXIgc3VtbWFyeTpcblxuKipGdW5jdGlvbiBQb2ludGVyIEFuYWx5c2lzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgdGhpcyBvcGVyYXRpb24gaXMgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0J3MgKm5vdCogaW5saW5lZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IGZvciBwZXJmb3JtYW5jZSBhbmQgY29udHJvbCBmbG93LiBLbm93aW5nIGl0J3MgYSBwb2ludGVyIG1lYW5zIHRoZXJlJ3MgYW4gaW5kaXJlY3Rpb24sIHdoaWNoIGNhbiBiZSBzbG93ZXIgdGhhbiBhIGRpcmVjdCBjYWxsLCBhbmQgaXQgYWxzbyBtZWFucyB0aGUgY29tcGlsZXIgbWlnaHQgbm90IGJlIGFibGUgdG8gb3B0aW1pemUgaXQgYXMgYWdncmVzc2l2ZWx5LlxuXG5UbyBnZXQgYSBoYW5kbGUgb24gdGhlIHNpdHVhdGlvbiwgSSBuZWVkIHRvIHNlZSB3aGF0J3MgYWN0dWFsbHkgYmVpbmcgKnBvaW50ZWQqIHRvLiBJJ2xsIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIHRoYXQgZnVuY3Rpb24gcG9pbnRlci4gVGhhdCBtZWFucyBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGZ1bmN0aW9ucyB3aGVyZSB0aGlzIHRoaW5nIGlzIHVzZWQuIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYHBoeV9wc2VfYXR0YWNoX29uZWAgYW5kIGBwaHlfcHNlX2RldGFjaF9vbmVgLiBFeGFtaW5pbmcgdGhlc2UgZnVuY3Rpb25zIHNob3VsZCByZXZlYWwgdGhlIGNvbmNyZXRlIGZ1bmN0aW9ucyB0aGF0IHRoaXMgZnVuY3Rpb24gcG9pbnRlciBpcyBhY3R1YWxseSBzZXQgdG8uIFRoaXMgd2lsbCBoZWxwIGNsYXJpZnkgdGhlIG92ZXJhbGwgZGVzaWduIGFuZCBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODg0OCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjExOjQ3LjM1MDg4Njc5OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYyMzM1NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X3BzZV9hdHRhY2hfb25lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMTE0PXN0YXRpYyB2b2lkIHBoeV90cnlfYXR0YWNoX3BzZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTM4LVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTEzOTpzdGF0aWMgaW50IHBoeV9wc2VfYXR0YWNoX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEgX19tYXliZV91bnVzZWQpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTQwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTE3MT1zdGF0aWMgaW50IHBoeV9wc2Vfbm90aWZpZXJfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTE3Ny1cXHRcXHRidXNfZm9yX2VhY2hfZGV2KFxcdTAwMjZtZGlvX2J1c190eXBlLCBOVUxMLCBOVUxMLFxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTE3ODpcXHRcXHRcXHRcXHQgcGh5X3BzZV9hdHRhY2hfb25lKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExNzktXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwaHlfcHNlX2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMTo0Ny4zOTcxMjQ2MzZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkzNTM0NDI2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6XG5cbioqQW5hbHl6aW5nIERldmljZSBBdHRhY2htZW50IGluIGEgUEhZIENvbnRleHQqKlxuXG5SaWdodCwgc28gdGhlc2UgZGV2aWNlIGF0dGFjaG1lbnQgb3BlcmF0aW9ucyBhcmVuJ3QgaW5saW5lZCwgdGhleSBhcmUgYmVpbmcgcGFzc2VkIHRvIGBidXNfZm9yX2VhY2hfZGV2YC4gVGhhdCB0ZWxscyBtZSB3ZSdyZSBsaWtlbHkgZGVhbGluZyB3aXRoIGEgYnVzLWJhc2VkIGVudW1lcmF0aW9uIGFuZCBub3Qgc29tZXRoaW5nIGhhcHBlbmluZyB3aXRoaW4gdGhlIGNvbmZpbmVzIG9mIGEgc2luZ2xlIGZ1bmN0aW9uIGNhbGwuIFRoaXMgaXMgaW1wb3J0YW50IGNvbnRleHQsIHBhcnRpY3VsYXJseSB3aGVuIHRyeWluZyB0byBncmFzcCB0aGUgc2NvcGUgb2YgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBhbmQgaW50ZXJhY3Rpb25zLiBTaW5jZSBpdCdzIGl0ZXJhdGluZywgdGhpcyBwcm9iYWJseSBtZWFucyB0aGVyZSBhcmUgbXVsdGlwbGUgZGV2aWNlcyBvciBzdWItZGV2aWNlcyBiZWluZyBoYW5kbGVkIGR1cmluZyBhdHRhY2htZW50LlxuXG5HaXZlbiB0aGUgY29udGV4dCwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGluIHVuZGVyc3RhbmRpbmcgdGhlIGRldmljZSBhdHRhY2htZW50IHByb2Nlc3MgaXMgdG8gZXhhbWluZSBgcGh5X3RyeV9hdHRhY2hfcHNlYC4gSSBzaG91bGQgZGl2ZSBpbnRvIHRoYXQgZnVuY3Rpb24gbm93IHRvIHNlZSBob3cgdGhlIFBoeXNpY2FsIExheWVyIGRldmljZSAoUEhZKSBhdHRlbXB0cyB0byBjb25uZWN0IHRvIG9yIGludGVyYWN0IHdpdGggc29tZXRoaW5nIGl0IGNhbGxzIFwiUFNFLFwiIGxpa2VseSBQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQsIHBhcnRpY3VsYXJseSBzaW5jZSB3ZSdyZSBub3QgZGVhbGluZyB3aXRoIGlubGluZSBjb2RlLiBVbmRlcnN0YW5kaW5nIHRoZSByb2xlIG9mIHRoZSBQU0UgZHVyaW5nIGRldmljZSBhdHRhY2htZW50IHdpbGwgcHJvdmlkZSBjcml0aWNhbCBpbnNpZ2h0cyBpbnRvIHRoZSBwb3dlciBtYW5hZ2VtZW50IGFzcGVjdCBhbmQgaG93IHRoZXNlIGRldmljZXMgYXJlIGludGVncmF0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NDA0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTE6NTEuMzMyNDcyNTE3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTIzNDYxMDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X3RyeV9hdHRhY2hfcHNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMTA2PXN0YXRpYyBERUZJTkVfTVVURVgocGh5X3BzZV9sb2NrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTExMy0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExMTQ6c3RhdGljIHZvaWQgcGh5X3RyeV9hdHRhY2hfcHNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTE1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTEzOT1zdGF0aWMgaW50IHBoeV9wc2VfYXR0YWNoX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEgX19tYXliZV91bnVzZWQpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExNDUtXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMTQ2OlxcdHBoeV90cnlfYXR0YWNoX3BzZSh0b19waHlfZGV2aWNlKGRldikpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTE0Ny1cXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTI2Nz1pbnQgcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTI3Ny1cXHRtdXRleF9sb2NrKFxcdTAwMjZwaHlfcHNlX2xvY2spO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTI3ODpcXHRwaHlfdHJ5X2F0dGFjaF9wc2UocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEyNzktXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwaHlfcHNlX2xvY2spO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMjkxPWludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEyOTktXFx0bXV0ZXhfbG9jayhcXHUwMDI2cGh5X3BzZV9sb2NrKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEzMDA6XFx0cGh5X3RyeV9hdHRhY2hfcHNlKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMzAxLVxcdG11dGV4X3VubG9jayhcXHUwMDI2cGh5X3BzZV9sb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTE6NTEuNTI0ODIzNDY5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MTkwMzg1ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgQ29kZSBGbG93OiBTa2lwcGluZyB0aGUgSW5saW5lZCoqXG5cblJpZ2h0LCB0aGlzIGxvb2tzIGxpa2UgYSBzdHJhaWdodGZvcndhcmQsIHN0YXRpY2FsbHkgZGVmaW5lZCBjYWxsLiBJdCdzIGxpa2VseSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBmb3IgZWZmaWNpZW5jeS4gTm8gbmVlZCB0byBkaWcgaW50byBpdCBoZXJlOyB0aGUgY29tcGlsZXIncyBwcm9iYWJseSB0YWtlbiBjYXJlIG9mIGl0LiBMZXQncyBtb3ZlIG9uIGFuZCBnZXQgdG8gdGhlIGltcG9ydGFudCBwYXJ0LiBNeSBuZXh0IGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHRoZSBgX19waHlfZGV2aWNlX3JlZ2lzdGVyYCBmdW5jdGlvbiBhbmQgaG93IGl0IHdvcmtzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDE5MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjExOjU3LjI0Mzg2NTgyM1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI2NTM0NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19waHlfZGV2aWNlX3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMjE2PUVYUE9SVF9TWU1CT0xfR1BMKHBoeV9wc2VfY29udHJvbF91bmxvY2spO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMjI1LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTIyNjpzdGF0aWMgaW50IF9fcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTIyNy17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTEyNjc9aW50IHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEyNzItXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMjczOlxcdGVyciA9IF9fcGh5X2RldmljZV9yZWdpc3RlcihwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTI3NC1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMjkxPWludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEyOTQtXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMjk1OlxcdGVyciA9IF9fcGh5X2RldmljZV9yZWdpc3RlcihwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTI5Ni1cXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMTo1Ny4yOTY1MjM3NTFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODE3NTUwODI5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBTRSBEcml2ZXIgYW5kIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhpcyBQU0UgZHJpdmVyLiBUaGUgaW5pdGlhbCBjbHVlIGlzIHRoYXQgdGhpcyBjb2RlIGlzIGxpa2VseSBkaXJlY3RseSBjYWxsZWQsIGFuZCBwb3NzaWJseSBpbmxpbmVkLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gc3BlY2lmaWMgc3ltYm9scyB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBhbmQgcmVsYXRpb25zaGlwcy4gSSBuZWVkIHRvIGtlZXAgYW4gZXllIG91dCBmb3IgdGhlc2U6IGBwaHlfcHNlX2NvbnRyb2xfbG9ja2AsIGBwaHlfcHNlX2NvbnRyb2xfdW5sb2NrYCwgYHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkYCwgYHBoeV9kZXZpY2VfcmVnaXN0ZXJgLCBgcGh5X2RldmljZV9yZW1vdmVgLCBgcHNlX3JlZ2lzdGVyX25vdGlmaWVyYCwgYHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyYCwgYHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyYCwgYHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXJgLCBgcHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldmAsIGBldGhubF9zZXRfcHNlYCwgYHBzZV9wcmVwYXJlX2RhdGFgLCBgcGh5X3BzZV9hdHRhY2hfb25lYCwgYW5kIGBwaHlfcHNlX2RldGFjaF9vbmVgLCBgcGh5X3BzZV9ub3RpZmllcl9ldmVudGAuIFRoZXNlIGZ1bmN0aW9ucyB3aWxsIHBhaW50IHRoZSBwaWN0dXJlIG9mIGhvdyBpdCBhbGwgd29ya3MuXG5cbk5vdywgSSBuZWVkIHRvIHZlcmlmeSB3aGljaCBjb25maWd1cmF0aW9ucyBhcmUgcmVxdWlyZWQgZm9yIHRoaXMgZHJpdmVyIHRvIGZ1bmN0aW9uLiBMZXQgbWUgc2VlLi4uIEkndmUgZ290IGBDT05GSUdfUFNFX0NPTlRST0xMRVJgIGFuZCBgQ09ORklHX1JFR1VMQVRPUmAgdGhhdCBhcmUgb2J2aW91c2x5IG5lZWRlZC4gV2FpdCwgaXQgc2VlbXMgbGlrZSB0aGUgYFBTRV9SRUdVTEFUT1JgIGlzIGFjdHVhbGx5IHRoZSBkcml2ZXIuIFNvIEknbGwgbmVlZCBgQ09ORklHX1BTRV9SRUdVTEFUT1JgLi4uIEFoIHllcywgdGhhdCdzIGl0LiBJdCdzIGxpc3RlZCBpbiBgZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWdgLiBJIHNlZSBgY29uZmlnIFBTRV9SRUdVTEFUT1JgIGluIHRoZXJlLiBPaywgc28gYFBTRV9SRUdVTEFUT1JgIGlzIHRoZSBjb25maWcgbmFtZSBmb3IgdGhlIGRyaXZlci4gV2FpdCwgYFBTRV9DT05UUk9MTEVSYCBpcyBhIGJvb2xlYW4sIHdoaWxlIGBQU0VfUkVHVUxBVE9SYCBpcyBhIHRyaXN0YXRlLiBUaGVyZWZvcmUsIGJvdGggYFBTRV9DT05UUk9MTEVSYCwgYFBTRV9SRUdVTEFUT1JgLCBhbmQgYFJFR1VMQVRPUmAgY29uZmlncyBzaG91bGQgZGVmaW5pdGVseSBnbyBpbnRvIGBFbmFibGVDb25maWdzYC5cblxuTmV4dCwgSSdsbCBuZWVkIHRvIHNlZSBpZiBpdCdzIGNvbXBpbGVkLiBJJ2xsIGNoZWNrIGBuZXQvZXRodG9vbC9wc2UtcGQuY2AuIFRoZSBkcml2ZXIgaXMgY29tcGlsZWQgaWYgYENPTkZJR19FVEhUT09MX05FVExJTktgIGlzIGVuYWJsZWQuIFRoYXQgc2hvdWxkIGJlIGVuYWJsZWQgYnkgZGVmYXVsdCwgc28gSSdtIGxpa2VseSBnb29kIHRoZXJlLlxuXG5JJ2xsIGFsc28gaGF2ZSB0byBtYWtlIHN1cmUgdGhlIGNvcmUgUEhZIGxpYnJhcnkgaXMgYXZhaWxhYmxlLiBMb29raW5nIGF0IGBkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jYCwgaXQncyBjb21waWxlZCBpZiBgQ09ORklHX1BIWUxJQmAgaXMgZW5hYmxlZC4gVGhhdCdzIHVzdWFsbHkgZW5hYmxlZCwgc28gSSdtIHByb2JhYmx5IGZpbmUuXG5cbkZpbmFsbHksIHRoZSBwYXRjaCBtZW50aW9ucyBjaGFuZ2VzIHRvIGBzZnBfc21fcHJvYmVfcGh5YCBpbiBgc2ZwLmNgLiBMZXQgbWUganVzdCBkb3VibGUgY2hlY2sgaWYgYHNmcC5jYCBpcyBjb21waWxlZC4gT2ssIGp1c3QgbWFraW5nIHN1cmUgZXZlcnl0aGluZyBpcyByZWFkeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA3MDksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTI6MDUuNDcyMDM0MloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ1ODM2NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2ZwLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT0yND1vYmotJChDT05GSUdfTkVUV09SS19QSFlfVElNRVNUQU1QSU5HKSArPSBtaWlfdGltZXN0YW1wZXIub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0yNS1cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6MjY6b2JqLSQoQ09ORklHX1NGUClcXHRcXHQrPSBzZnAub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToyNzpzZnAtb2JqLSQoQ09ORklHX1NGUClcXHRcXHQrPSBzZnAtYnVzLm9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6Mjg6b2JqLXlcXHRcXHRcXHRcXHQrPSAkKHNmcC1vYmoteSkgJChzZnAtb2JqLW0pXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTI5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMjowNS41MjY2MjI1MThaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA4NDY1NTE0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2Ugc3RlcHM6XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIHRyYWNraW5nIGEgZGVwZW5kZW5jeSBoZXJlLiBJIHNlZSB0aGF0IHRoZSBgc2ZwLmNgIG1vZHVsZSBhYnNvbHV0ZWx5IG5lZWRzIGBDT05GSUdfU0ZQYCB0byBjb21waWxlLiBNYWtlcyBwZXJmZWN0IHNlbnNlLiBSaWdodCwgbGV0J3MgZ2V0IHRoYXQgc3F1YXJlZCBhd2F5LiBJJ2xsIGFkZCBgU0ZQYCB0byB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QuIE5vIHJlYXNvbiB0byBsZWF2ZSB0aGF0IGhhbmdpbmcuXG5cbldoaWxlIEknbSBhdCBpdCwgSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGlzIGBkcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmNgIGZpbGUuIEFoLCB5ZXMsIGl0IGRlcGVuZHMgb24gYENPTkZJR19GV05PREVfTURJT2AsIGFzIGV4cGVjdGVkLiBHb29kLiBJdCdzIGFsd2F5cyBhIGdvb2QgaWRlYSB0byBjb25maXJtIHRob3NlIGRlcGVuZGVuY2llcyBhbmQgZW5zdXJlIEkndmUgZ290IGV2ZXJ5dGhpbmcgbGluZWQgdXAgaW4gbXkgaGVhZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE5NzYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMjoxMS42MTEyODAyNjZaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5Njg1MTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZ3bm9kZV9tZGlvLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlPTQ9b2JqLSQoQ09ORklHX0FDUElfTURJTylcXHRcXHQrPSBhY3BpX21kaW8ub1xcbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6NTpvYmotJChDT05GSUdfRldOT0RFX01ESU8pXFx0Kz0gZndub2RlX21kaW8ub1xcbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGUtNi1vYmotJChDT05GSUdfT0ZfTURJTylcXHRcXHQrPSBvZl9tZGlvLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTI6MTEuNjYwOTY5Njc0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg2MjM4ODAzNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQSFkgYW5kIFBTRSBDb250cm9sbGVyIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGlua2luZyB3ZSBuZWVkIHRvIGFkZCBgRldOT0RFX01ESU9gIHRvIGBFbmFibGVDb25maWdzYC4gTGV0J3MgcmV2aWV3IHRoZSBpbXBsaWNhdGlvbnMgaGVyZTsgdGhpcyBpcyBhIHByZXR0eSBzdWJzdGFudGlhbCBjaGFuZ2UgaW4gaG93IHRoZSBQSFkgbGlicmFyeSBhbmQgZXRodG9vbCBoYW5kbGUgUFNFIGNvbnRyb2xsZXJzLlxuXG5UaGUgcGF0Y2ggaXMgc2hpZnRpbmcgdGhlIFBTRSBjb250cm9sIGF0dGFjaG1lbnQuIEluc3RlYWQgb2YgYXR0YWNoaW5nIGl0IHRocm91Z2ggYGZ3bm9kZV9tZGlvYnVzX3JlZ2lzdGVyX3BoeWAsIGl0J3Mgbm93IGJlaW5nIGhhbmRsZWQgaW4gYHBoeV9kZXZpY2VfcmVnaXN0ZXJgIGFuZCwgY3J1Y2lhbGx5LCBgcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWRgLiBUaGF0J3MgYSBrZXkgbW92ZS4gVG8gc2VyaWFsaXplIGFjY2VzcyB0byBgcGh5ZGV2LVx1MDAzZXBzZWNgIGFnYWluc3QgdGhlIFBTRSBub3RpZmllciBhbmQgZXRodG9vbCwgd2UncmUgaW50cm9kdWNpbmcgYSBgcGh5X3BzZV9sb2NrYCBtdXRleC4gVGhpcyBpcyBhIHZlcnkgZ29vZCBpZGVhIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zLiBXZSdyZSBhbHNvIGludHJvZHVjaW5nIGEgYHBoeV9wc2Vfbm90aWZpZXJgIG5vdGlmaWVyIHdoaWNoIHdpbGwgYXR0YWNoIGFuZCBkZXRhY2ggdGhlIFBTRSBjb250cm9sIGFzIHRoZSBQU0UgY29udHJvbGxlciByZWdpc3RlcnMgYW5kIHVucmVnaXN0ZXJzLlxuXG5UaGUgY2hhbmdlcyB0byBgZXRobmxfc2V0X3BzZWAgYW5kIGBwc2VfcHJlcGFyZV9kYXRhYCB0byB1c2UgYHBoeV9wc2VfY29udHJvbF9sb2NrKClgIGFuZCBgcGh5X3BzZV9jb250cm9sX3VubG9jaygpYCBhcmUgYWxzbyBzbWFydC4gSXQncyBzb2xpZGlmeWluZyB0aGUgbG9ja2luZyB0byBlbnN1cmUgZGF0YSBjb25zaXN0ZW5jeS4gQW5kIGZpbmFsbHksIHRoZSBtb2RpZmljYXRpb24gdG8gYHNmcF9zbV9wcm9iZV9waHlgIHRvIHVzZSBgcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWRgIGluc3RlYWQgb2YgYHBoeV9kZXZpY2VfcmVnaXN0ZXJgIGZvbGxvd3MgdGhpcyBjaGFuZ2UgYW5kIHVzZXMgcHJvcGVyIGxvY2tpbmcgaW4gdGhhdCBmdW5jdGlvbiBhcyB3ZWxsLlxuXG5UaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBzaGlmdC4gVGhpcyBpcyBsaWtlbHkgZml4aW5nIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIGxpZmVjeWNsZSBpc3N1ZSB3aXRoIFBTRSBjb250cm9sbGVycyB0aGF0IHdlIHByb2JhYmx5IHNhdyBkdXJpbmcgdGVzdGluZy4gSXQgZGVmaW5pdGVseSB3YXJyYW50cyBhIGZ1bGwgZnV6emluZyBwYXNzLlxuXG5Ob3csIEkgd2FudCB0byBtYWtlIHN1cmUgSSdtIGZ1bGx5IHVwIHRvIHNwZWVkIG9uIGFsbCB0aGUgc3ltYm9scyBhZmZlY3RlZC4gTGV0IG1lIGZvY3VzIG9uOiBgcGh5X3BzZV9jb250cm9sX2xvY2tgLCBgcGh5X3BzZV9jb250cm9sX3VubG9ja2AsIGBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZGAsIGBwaHlfZGV2aWNlX3JlZ2lzdGVyYCwgYHBoeV9kZXZpY2VfcmVtb3ZlYCwgYHBzZV9yZWdpc3Rlcl9ub3RpZmllcmAsIGBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcmAsIGBwc2VfY29udHJvbGxlcl9yZWdpc3RlcmAsIGBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyYCwgYHBzZV9jb250cm9sX21hdGNoZXNfcGNkZXZgLCBgZXRobmxfc2V0X3BzZWAsIGBwc2VfcHJlcGFyZV9kYXRhYCwgYHBoeV9wc2VfYXR0YWNoX29uZWAsIGBwaHlfcHNlX2RldGFjaF9vbmVgLCBhbmQgYHBoeV9wc2Vfbm90aWZpZXJfZXZlbnRgLiBUaGVzZSBhcmUgYWxsIGNlbnRyYWwgdG8gdGhlIGxvZ2ljIGhlcmUuXG5cbldlIG5lZWQgdG8gY29uZmlybSB0aGUgY29ycmVjdCBlbmFibGVtZW50IGNvbmZpZ3MuIFdlIG5lZWQgYFBTRV9DT05UUk9MTEVSYCwgYFBTRV9SRUdVTEFUT1JgLCBgUkVHVUxBVE9SYCwgYFNGUGAsIGFuZCBgRldOT0RFX01ESU9gLlxuXG5MZXQncyBkb3VibGUtY2hlY2sgdGhlIGBQU0VfUkVHVUxBVE9SYCBjb25maWcuIExvb2tpbmcgYXQgYGRyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnYDpcbmBgYFxuY29uZmlnIFBTRV9SRUdVTEFUT1Jcblx0dHJpc3RhdGUgXCJSZWd1bGF0b3IgYmFzZWQgUFNFIGNvbnRyb2xsZXJcIlxuYGBgXG5ZZXMsIGBQU0VfUkVHVUxBVE9SYCBpcyB0aGUgcmlnaHQgb25lLCB0aGF0J3MgY29ycmVjdC5cblxuTGV0J3MgYWxzbyBtYWtlIHN1cmUgYFNGUGAgaXMgZW5hYmxlZCBjb3JyZWN0bHkuIENoZWNraW5nIGBkcml2ZXJzL25ldC9waHkvS2NvbmZpZ2A6IC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjM2MCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMjoyMC4yODQ4NTM1NDRaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MjA2MDI4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU0ZQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9LY29uZmlnPTY1PWNvbmZpZyBSVVNUX1BIWUxJQl9BQlNUUkFDVElPTlNcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTcyLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjczOmNvbmZpZyBTRlBcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy03NC1cXHR0cmlzdGF0ZSBcXFwiU0ZQIGNhZ2Ugc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTI6MjAuNTQ2OTI2NTUyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MDUwMDcxNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uZmlybWluZyB0aGUgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHllcywgSSBhZ3JlZSwgYFNGUGAgaXMgZGVmaW5pdGVseSB0aGUgY29ycmVjdCBvcHRpb24gaGVyZS4gTm93LCBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgYWJvdXQgYEZXTk9ERV9NRElPYC4gTGV0J3MganVzdCBkb3VibGUtY2hlY2sgdGhhdCBjb25maWd1cmF0aW9uLCBzaGFsbCB3ZT8gSSdsbCBwb3Agb3ZlciB0byBgZHJpdmVycy9uZXQvbWRpby9LY29uZmlnYCB0byB2ZXJpZnkuIEkgbmVlZCB0byBiZSBjZXJ0YWluIGJlZm9yZSBJIG1vdmUgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNjM4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTI6MjQuMzUxOTM2Nzc5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njc3MDU3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRldOT0RFX01ESU9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbWRpby9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZz02PWlmIFBIWUxJQlxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy03LVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzo4OmNvbmZpZyBGV05PREVfTURJT1xcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy05LVxcdGRlZl90cmlzdGF0ZSAoQUNQSSB8fCBPRikgfHwgQ09NUElMRV9URVNUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjEyOjI0LjM5ODcxMjczN1oiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzY3ODU0NjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNvbmZpcm1pbmcgdGhlIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCB5ZXMsIGBGV05PREVfTURJT2AgZmVlbHMgcmlnaHQsIHRoYXQgcmluZ3MgdHJ1ZS4gTm93LCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgYmVmb3JlIEkgcHJvY2VlZCB3aXRoIGFueSBjaGFuZ2VzLCBsZXQncyBxdWlja2x5IHZlcmlmeSB0aGF0IGBSRUdVTEFUT1JgIGlzIHRoZSBhcHByb3ByaWF0ZSBjb25maWd1cmF0aW9uIG9wdGlvbiB3ZSdyZSBsb29raW5nIGF0LiBCZXN0IHByYWN0aWNlLCBhbHdheXMuIEEgcXVpY2sgbG9vayB3aXRoaW4gYGRyaXZlcnMvcmVndWxhdG9yL0tjb25maWdgIHNob3VsZCBwcm92aWRlIHRoZSBhbnN3ZXIuIEkgbmVlZCB0aGF0IGFic29sdXRlIGNsYXJpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzODg5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTI6MjcuNzY2NTY5NTIyWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTc0MDgxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUkVHVUxBVE9SXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvcmVndWxhdG9yL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA4MzMgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjI6bWVudWNvbmZpZyBSRUdVTEFUT1JcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTMtXFx0Ym9vbCBcXFwiVm9sdGFnZSBhbmQgQ3VycmVudCBSZWd1bGF0b3IgU3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc9MjY9aWYgUkVHVUxBVE9SXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0yNy1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjI4OmNvbmZpZyBSRUdVTEFUT1JfREVCVUdcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTI5LVxcdGJvb2wgXFxcIlJlZ3VsYXRvciBkZWJ1ZyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0zMi1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjMzOmNvbmZpZyBSRUdVTEFUT1JfRklYRURfVk9MVEFHRVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMzQtXFx0dHJpc3RhdGUgXFxcIkZpeGVkIHZvbHRhZ2UgcmVndWxhdG9yIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTM5LVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NDA6Y29uZmlnIFJFR1VMQVRPUl9WSVJUVUFMX0NPTlNVTUVSXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy00MS1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCByZWd1bGF0b3IgY29uc3VtZXIgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNDktXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo1MDpjb25maWcgUkVHVUxBVE9SX1VTRVJTUEFDRV9DT05TVU1FUlxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNTEtXFx0dHJpc3RhdGUgXFxcIlVzZXJzcGFjZSByZWd1bGF0b3IgY29uc3VtZXIgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNTgtXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo1OTpjb25maWcgUkVHVUxBVE9SX05FVExJTktfRVZFTlRTXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy02MC1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgcmVjZWl2aW5nIHJlZ3VsYXRvciBldmVudHMgdmlhIG5ldGxpbmtcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTY4LVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6Njk6Y29uZmlnIFJFR1VMQVRPUl84OFBHODZYXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy03MC1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCA4OFBHODZYIHZvbHRhZ2UgcmVndWxhdG9yc1xcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNzctXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo3ODpjb25maWcgUkVHVUxBVE9SXzg4UE04MDBcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTc5LVxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIDg4UE04MDAgUG93ZXIgcmVndWxhdG9yc1xcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctODctXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo4ODpjb25maWcgUkVHVUxBVE9SXzg4UE04NjA3XFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy04OS1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCA4OFBNODYwNyBQb3dlciByZWd1bGF0b3JzXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy05My1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjk0OmNvbmZpZyBSRUdVTEFUT1JfODhQTTg4NlxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctOTUtXFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgODhQTTg4NiB2b2x0YWdlIHJlZ3VsYXRvcnNcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTk5LVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MTAwOmNvbmZpZyBSRUdVTEFUT1JfQUNUODg2NVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTAxLVxcdHRyaXN0YXRlIFxcXCJBY3RpdmUtc2VtaSBhY3Q4ODY1IHZvbHRhZ2UgcmVndWxhdG9yXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xMDgtXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzoxMDk6Y29uZmlnIFJFR1VMQVRPUl9BQ1Q4OTQ1QVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTEwLVxcdHRyaXN0YXRlIFxcXCJBY3RpdmUtc2VtaSBBQ1Q4OTQ1QSB2b2x0YWdlIHJlZ3VsYXRvclxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTE3LVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MTE4OmNvbmZpZyBSRUdVTEFUT1JfQUQ1Mzk4XFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xMTktXFx0dHJpc3RhdGUgXFxcIkFuYWxvZyBEZXZpY2VzIEFENTM5OC9BRDU4MjEgcmVndWxhdG9yc1xcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTI0LVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MTI1OmNvbmZpZyBSRUdVTEFUT1JfQURQNTA1NVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTI2LVxcdHRyaXN0YXRlIFxcXCJBbmFsb2cgRGV2aWNlcyBBRFA1MDU1IFRyaXBsZSBCdWNrIFJlZ3VsYXRvclxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTM1LVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MTM2OmNvbmZpZyBSRUdVTEFUT1JfQU5BVE9QXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xMzctXFx0dHJpc3RhdGUgXFxcIkZyZWVzY2FsZSBpLk1YIG9uLWNoaXAgQU5BVE9QIExETyByZWd1bGF0b3JzXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xNDQtXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzoxNDU6Y29uZmlnIFJFR1VMQVRPUl9BQVQyODcwXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xNDYtXFx0dHJpc3RhdGUgXFxcIkFuYWxvZ2ljVGVjaCBBQVQyODcwIFJlZ3VsYXRvcnNcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTE1MS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjE1Mjpjb25maWcgUkVHVUxBVE9SX0FCODUwMFxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTUzLVxcdGJvb2wgXFxcIlNULUVyaWNzc29uIEFCODUwMCBQb3dlciBSZWd1bGF0b3JzXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xNTgtXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzoxNTk6Y29uZmlnIFJFR1VMQVRPUl9BUklaT05BX0xETzFcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTE2MC1cXHR0cmlzdGF0ZSBcXFwiQ2lycnVzIE1hZGVyYSBhbmQgV29sZnNvbiBBcml6b25hIGNsYXNzIGRldmljZXMgTERPMVxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTY2LVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MTY3OmNvbmZpZyBSRUdVTEFUT1JfQVJJWk9OQV9NSUNTVVBQXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xNjgtXFx0dHJpc3RhdGUgXFxcIkNpcnJ1cyBNYWRlcmEgYW5kIFdvbGZzb24gQXJpem9uYSBjbGFzcyBkZXZpY2VzIE1JQ1NVUFBcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTE3NS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjE3Njpjb25maWcgUkVHVUxBVE9SX0FSTV9TQ01JXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xNzctXFx0dHJpc3RhdGUgXFxcIlNDTUkgYmFzZWQgcmVndWxhdG9yIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTg0LVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MTg1OmNvbmZpZyBSRUdVTEFUT1JfQVMzNzExXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xODYtXFx0dHJpc3RhdGUgXFxcIkFTMzcxMSBQTUlDXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xOTEtXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzoxOTI6Y29uZmlnIFJFR1VMQVRPUl9BUzM3MjJcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTE5My1cXHR0cmlzdGF0ZSBcXFwiQU1TIEFTMzcyMiBQTUlDIFJlZ3VsYXRvcnNcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTE5OS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjIwMDpjb25maWcgUkVHVUxBVE9SX0FUQzI2MFhcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTIwMS1cXHR0cmlzdGF0ZSBcXFwiQWN0aW9ucyBTZW1pIEFUQzI2MHggUE1JQyBSZWd1bGF0b3JzXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0yMDctXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzoyMDg6Y29uZmlnIFJFR1VMQVRPUl9BVzM3NTAzXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0yMDktXFx0dHJpc3RhdGUgXFxcIkF3aW5pYyBBVzM3NTAzIER1YWwgT3V0cHV0IFBvd2VyIHJlZ3VsYXRvcnNcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTIxNS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjIxNjpjb25maWcgUkVHVUxBVE9SX0FYUDIwWFxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMjE3LVxcdHRyaXN0YXRlIFxcXCJYLVBPV0VSUyBBWFAyMFggUE1JQyBSZWd1bGF0b3JzXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0yMjItXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzoyMjM6Y29uZmlnIFJFR1VMQVRPUl9CQ001OTBYWFxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMjI0LVxcdHRyaXN0YXRlIFxcXCJCcm9hZGNvbSBCQ001OTB4eCBQTVUgUmVndWxhdG9yc1xcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMjMwLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MjMxOmNvbmZpZyBSRUdVTEFUT1JfQkQ3MTgxNVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMjMyLVxcdHRyaXN0YXRlIFxcXCJST0hNIEJENzE4MTUgUG93ZXIgUmVndWxhdG9yXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0yNDItXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzoyNDM6Y29uZmlnIFJFR1VMQVRPUl9CRDcxODI4XFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0yNDQtXFx0dHJpc3RhdGUgXFxcIlJPSE0gQkQ3MTgyOCwgQkQ3MjcyMCBhbmQgQkQ3MzkwMCBQb3dlciBSZWd1bGF0b3JzXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0yNTQtXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzoyNTU6Y29uZmlnIFJFR1VMQVRPUl9CRDcxOFhYXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0yNTYtXFx0dHJpc3RhdGUgXFxcIlJPSE0gQkQ3MTgzNyBQb3dlciBSZWd1bGF0b3JcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTI2Ni1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjI2Nzpjb25maWcgUkVHVUxBVE9SX0JEOTU3MU1XVlxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMjY4LVxcdHRyaXN0YXRlIFxcXCJST0hNIEJEOTU3MU1XViBSZWd1bGF0b3JzXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0yNzctXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzoyNzg6Y29uZmlnIFJFR1VMQVRPUl9CRDk1N1hNVUZcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTI3OS1cXHR0cmlzdGF0ZSBcXFwiUk9ITSBCRDk1NzZNVUYgYW5kIEJEOTU3M01VRiBSZWd1bGF0b3JzXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0yODctXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzoyODg6Y29uZmlnIFJFR1VMQVRPUl9CRDk2ODAxXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0yODktXFx0dHJpc3RhdGUgXFxcIlJPSE0gQkQ5NjgwMSBQb3dlciBSZWd1bGF0b3JcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTI5OS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjMwMDpjb25maWcgUkVHVUxBVE9SX0JRMjU3WFhcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTMwMS1cXHR0cmlzdGF0ZSBcXFwiVEkgQlEyNTdYWCByZWd1bGF0b3IgZmFtaWx5XFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0zMDctXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzozMDg6Y29uZmlnIFJFR1VMQVRPUl9DUENBUFxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMzA5LVxcdHRyaXN0YXRlIFxcXCJNb3Rvcm9sYSBDUENBUCByZWd1bGF0b3JcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTMxNC1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjMxNTpjb25maWcgUkVHVUxBVE9SX0NST1NfRUNcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTMxNi1cXHR0cmlzdGF0ZSBcXFwiQ2hyb21lT1MgRUMgcmVndWxhdG9yc1xcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMzI0LVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MzI1OmNvbmZpZyBSRUdVTEFUT1JfREE5MDNYXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0zMjYtXFx0dHJpc3RhdGUgXFxcIkRpYWxvZyBTZW1pY29uZHVjdG9yIERBOTAzMC9EQTkwMzQgcmVndWxhdG9yc1xcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMzMyLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MzMzOmNvbmZpZyBSRUdVTEFUT1JfREE5MDUyXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0zMzQtXFx0dHJpc3RhdGUgXFxcIkRpYWxvZyBTZW1pY29uZHVjdG9yIERBOTA1Mi9EQTkwNTMgcmVndWxhdG9yc1xcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMzM5LVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MzQwOmNvbmZpZyBSRUdVTEFUT1JfREE5MDU1XFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0zNDEtXFx0dHJpc3RhdGUgXFxcIkRpYWxvZyBTZW1pY29uZHVjdG9yIERBOTA1NSByZWd1bGF0b3JzXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0zNDktXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzozNTA6Y29uZmlnIFJFR1VMQVRPUl9EQTkwNjJcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTM1MS1cXHR0cmlzdGF0ZSBcXFwiRGlhbG9nIFNlbWljb25kdWN0b3IgREE5MDYxLzYyIHJlZ3VsYXRvcnNcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTM1OS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjM2MDpjb25maWcgUkVHVUxBVE9SX0RBOTA2M1xcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMzYxLVxcdHRyaXN0YXRlIFxcXCJEaWFsb2cgU2VtaWNvbmR1Y3RvciBEQTkwNjMgcmVndWxhdG9yc1xcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMzY5LVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MzcwOmNvbmZpZyBSRUdVTEFUT1JfREE5MTIxXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0zNzEtXFx0dHJpc3RhdGUgXFxcIkRpYWxvZyBTZW1pY29uZHVjdG9yIERBOTEyMS9EQTkxMjIvREE5MjIwL0RBOTIxNy9EQTkxMzAvREE5MTMxL0RBOTEzMiByZWd1bGF0b3JcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTM4OS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjM5MDpjb25maWcgUkVHVUxBVE9SX0RBOTIxMFxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMzkxLVxcdHRyaXN0YXRlIFxcXCJEaWFsb2cgU2VtaWNvbmR1Y3RvciBEQTkyMTAgcmVndWxhdG9yXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0zOTktXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo0MDA6Y29uZmlnIFJFR1VMQVRPUl9EQTkyMTFcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTQwMS1cXHR0cmlzdGF0ZSBcXFwiRGlhbG9nIFNlbWljb25kdWN0b3IgREE5MjExL0RBOTIxMi9EQTkyMTMvREE5MjIzL0RBOTIxNC9EQTkyMjQvREE5MjE1L0RBOTIyNSByZWd1bGF0b3JcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTQxMC1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjQxMTpjb25maWcgUkVHVUxBVE9SX0RCWDUwMF9QUkNNVVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNDEyLVxcdGJvb2xcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTQxMy1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjQxNDpjb25maWcgUkVHVUxBVE9SX0RCODUwMF9QUkNNVVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNDE1LVxcdGJvb2wgXFxcIlNULUVyaWNzc29uIERCODUwMCBWb2x0YWdlIERvbWFpbiBSZWd1bGF0b3JzXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy00MjEtXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo0MjI6Y29uZmlnIFJFR1VMQVRPUl9GQU41MzU1NVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNDIzLVxcdHRyaXN0YXRlIFxcXCJGYWlyY2hpbGQgRkFONTM1NTUgUmVndWxhdG9yXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy00MzItXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo0MzM6Y29uZmlnIFJFR1VMQVRPUl9GQU41Mzg4MFxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNDM0LVxcdHRyaXN0YXRlIFxcXCJGYWlyY2hpbGQgRkFONTM4ODAgUmVndWxhdG9yXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy00NDItXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo0NDM6Y29uZmlnIFJFR1VMQVRPUl9HUElPXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy00NDQtXFx0dHJpc3RhdGUgXFxcIkdQSU8gcmVndWxhdG9yIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTQ1Mi1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjQ1Mzpjb25maWcgUkVHVUxBVE9SX0hJNjQyMVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNDU0LVxcdHRyaXN0YXRlIFxcXCJIaVNpbGljb24gSGk2NDIxIFBNSUMgdm9sdGFnZSByZWd1bGF0b3Igc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNDYyLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NDYzOmNvbmZpZyBSRUdVTEFUT1JfSEk2NDIxVjUzMFxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNDY0LVxcdHRyaXN0YXRlIFxcXCJIaVNpbGljb24gSGk2NDIxdjUzMCBQTUlDIHZvbHRhZ2UgcmVndWxhdG9yIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTQ3Mi1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjQ3Mzpjb25maWcgUkVHVUxBVE9SX0hJNjU1WFxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNDc0LVxcdHRyaXN0YXRlIFxcXCJIaXNpbGljb24gSEk2NTVYIFBNSUMgcmVndWxhdG9ycyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy00ODAtXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo0ODE6Y29uZmlnIFJFR1VMQVRPUl9ISTY0MjFWNjAwXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy00ODItXFx0dHJpc3RhdGUgXFxcIkhpU2lsaWNvbiBIaTY0MjF2NjAwIFBNSUMgdm9sdGFnZSByZWd1bGF0b3Igc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNDg5LVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NDkwOmNvbmZpZyBSRUdVTEFUT1JfSVNMOTMwNVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNDkxLVxcdHRyaXN0YXRlIFxcXCJJbnRlcnNpbCBJU0w5MzA1IHJlZ3VsYXRvclxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNDk2LVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NDk3OmNvbmZpZyBSRUdVTEFUT1JfSVNMNjI3MUFcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTQ5OC1cXHR0cmlzdGF0ZSBcXFwiSW50ZXJzaWwgSVNMNjI3MUEgUG93ZXIgcmVndWxhdG9yXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy01MDItXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo1MDM6Y29uZmlnIFJFR1VMQVRPUl9GUDk5MzFcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTUwNC1cXHR0cmlzdGF0ZSBcXFwiRml0aVBvd2VyIEZQOTkzMS9KRDk5MzAgRVBEIHJlZ3VsYXRvclxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNTEyLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NTEzOmNvbmZpZyBSRUdVTEFUT1JfTE0zNjNYXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy01MTQtXFx0dHJpc3RhdGUgXFxcIlRJIExNMzYzWCB2b2x0YWdlIHJlZ3VsYXRvcnNcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTUyMS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjUyMjpjb25maWcgUkVHVUxBVE9SX0xPQ0hOQUdBUlxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNTIzLVxcdHRyaXN0YXRlIFxcXCJDaXJydXMgTG9naWMgTG9jaG5hZ2FyIHJlZ3VsYXRvciBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTUyOC1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjUyOTpjb25maWcgUkVHVUxBVE9SX0xQMzk3MVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNTMwLVxcdHRyaXN0YXRlIFxcXCJOYXRpb25hbCBTZW1pY29uZHVjdG9ycyBMUDM5NzEgUE1JQyByZWd1bGF0b3IgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy01MzUtXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo1MzY6Y29uZmlnIFJFR1VMQVRPUl9MUDM5NzJcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTUzNy1cXHR0cmlzdGF0ZSBcXFwiTmF0aW9uYWwgU2VtaWNvbmR1Y3RvcnMgTFAzOTcyIFBNSUMgcmVndWxhdG9yIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNTQyLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NTQzOmNvbmZpZyBSRUdVTEFUT1JfTFA4NzJYXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy01NDQtXFx0dHJpc3RhdGUgXFxcIlRJL05hdGlvbmFsIFNlbWljb25kdWN0b3IgTFA4NzIwL0xQODcyNSB2b2x0YWdlIHJlZ3VsYXRvcnNcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTU0OS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjU1MDpjb25maWcgUkVHVUxBVE9SX0xQODczWFxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNTUxLVxcdHRyaXN0YXRlIFxcXCJUSSBMUDg3M1ggUG93ZXIgcmVndWxhdG9yc1xcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNTU4LVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NTU5OmNvbmZpZyBSRUdVTEFUT1JfTFA4NzU1XFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy01NjAtXFx0dHJpc3RhdGUgXFxcIlRJIExQODc1NSBIaWdoIFBlcmZvcm1hbmNlIFBNVSBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTU2Ny1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjU2ODpjb25maWcgUkVHVUxBVE9SX0xQODc1NjVcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTU2OS1cXHR0cmlzdGF0ZSBcXFwiVEkgTFA4NzU2NSBQb3dlciByZWd1bGF0b3JzXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy01NzUtXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo1NzY6Y29uZmlnIFJFR1VMQVRPUl9MUDg3ODhcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTU3Ny1cXHR0cmlzdGF0ZSBcXFwiVEkgTFA4Nzg4IFBvd2VyIFJlZ3VsYXRvcnNcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTU4MS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjU4Mjpjb25maWcgUkVHVUxBVE9SX0xUQzM1ODlcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTU4My1cXHR0cmlzdGF0ZSBcXFwiTFRDMzU4OSA4LW91dHB1dCB2b2x0YWdlIHJlZ3VsYXRvclxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNTg5LVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NTkwOmNvbmZpZyBSRUdVTEFUT1JfTFRDMzY3NlxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNTkxLVxcdHRyaXN0YXRlIFxcXCJMVEMzNjc2IDgtb3V0cHV0IHZvbHRhZ2UgcmVndWxhdG9yXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy01OTctXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo1OTg6Y29uZmlnIFJFR1VMQVRPUl9NQVgxNDU3N1xcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNTk5LVxcdHRyaXN0YXRlIFxcXCJNYXhpbSAxNDU3Ny83NzgzNiByZWd1bGF0b3JcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTYwNS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjYwNjpjb25maWcgUkVHVUxBVE9SX01BWDE1ODZcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTYwNy1cXHR0cmlzdGF0ZSBcXFwiTWF4aW0gMTU4Ni8xNTg3IHZvbHRhZ2UgcmVndWxhdG9yXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy02MTMtXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo2MTQ6Y29uZmlnIFJFR1VMQVRPUl9NQVg1OTcwXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy02MTUtXFx0dHJpc3RhdGUgXFxcIk1heGltIDU5NzAvNTk3OCBwb3dlciBzd2l0Y2ggYW5kIG1vbml0b3JcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTYyMy1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjYyNDpjb25maWcgUkVHVUxBVE9SX01BWDc3NTAzXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy02MjUtXFx0dHJpc3RhdGUgXFxcIkFuYWxvZyBEZXZpY2VzIE1BWDc3NTAzIFJlZ3VsYXRvclxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNjMzLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NjM0OmNvbmZpZyBSRUdVTEFUT1JfTUFYNzc1NDFcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTYzNS1cXHR0cmlzdGF0ZSBcXFwiQW5hbG9nIERldmljZXMgTUFYNzc1NDEvNzc1NDAgUmVndWxhdG9yXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy02NDQtXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo2NDU6Y29uZmlnIFJFR1VMQVRPUl9NQVg3NzYyMFxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNjQ2LVxcdHRyaXN0YXRlIFxcXCJNYXhpbSA3NzYyMC9NQVgyMDAyNCB2b2x0YWdlIHJlZ3VsYXRvclxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNjUzLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NjU0OmNvbmZpZyBSRUdVTEFUT1JfTUFYNzc2NTBcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTY1NS1cXHR0cmlzdGF0ZSBcXFwiTWF4aW0gTUFYNzc2NTAvNzc2NTEgcmVndWxhdG9yIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTY2MS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjY2Mjpjb25maWcgUkVHVUxBVE9SX01BWDc3Njc1XFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy02NjMtXFx0dHJpc3RhdGUgXFxcIk1heGltIE1BWDc3Njc1IHJlZ3VsYXRvciBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTY3MC1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjY3MTpjb25maWcgUkVHVUxBVE9SX01BWDc3ODU3XFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy02NzItXFx0dHJpc3RhdGUgXFxcIkFESSBNQVg3Nzg1Ny9NQVg3NzgzMSByZWd1bGF0b3Igc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNjgwLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NjgxOmNvbmZpZyBSRUdVTEFUT1JfTUFYODY0OVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNjgyLVxcdHRyaXN0YXRlIFxcXCJNYXhpbSA4NjQ5IHZvbHRhZ2UgcmVndWxhdG9yXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy02ODgtXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo2ODk6Y29uZmlnIFJFR1VMQVRPUl9NQVg4NjYwXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy02OTAtXFx0dHJpc3RhdGUgXFxcIk1heGltIDg2NjAvODY2MSB2b2x0YWdlIHJlZ3VsYXRvclxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNjk1LVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6Njk2OmNvbmZpZyBSRUdVTEFUT1JfTUFYODg5M1xcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNjk3LVxcdHRyaXN0YXRlIFxcXCJNYXhpbSA4ODkzIHZvbHRhZ2UgcmVndWxhdG9yXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy03MDMtXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo3MDQ6Y29uZmlnIFJFR1VMQVRPUl9NQVg4OTA3XFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy03MDUtXFx0dHJpc3RhdGUgXFxcIk1heGltIDg5MDcgdm9sdGFnZSByZWd1bGF0b3JcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTcxMS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjcxMjpjb25maWcgUkVHVUxBVE9SX01BWDg5MjVcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTcxMy1cXHR0cmlzdGF0ZSBcXFwiTWF4aW0gTUFYODkyNSBQb3dlciBNYW5hZ2VtZW50IElDXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy03MTctXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo3MTg6Y29uZmlnIFJFR1VMQVRPUl9NQVg4OTUyXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy03MTktXFx0dHJpc3RhdGUgXFxcIk1heGltIE1BWDg5NTIgUG93ZXIgTWFuYWdlbWVudCBJQ1xcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNzI1LVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NzI2OmNvbmZpZyBSRUdVTEFUT1JfTUFYODk3M1xcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNzI3LVxcdHRyaXN0YXRlIFxcXCJNYXhpbSBNQVg4OTczQSB2b2x0YWdlIHJlZ3VsYXRvclxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNzM2LVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6NzM3OmNvbmZpZyBSRUdVTEFUT1JfTUFYODk5N1xcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNzM4LVxcdHRyaXN0YXRlIFxcXCJNYXhpbSA4OTk3Lzg5NjYgcmVndWxhdG9yXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy03NDUtXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo3NDY6Y29uZmlnIFJFR1VMQVRPUl9NQVg4OTk4XFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy03NDctXFx0dHJpc3RhdGUgXFxcIk1heGltIDg5OTggdm9sdGFnZSByZWd1bGF0b3JcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTc1My1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjc1NDpjb25maWcgUkVHVUxBVE9SX01BWDIwMDg2XFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy03NTUtXFx0dHJpc3RhdGUgXFxcIk1heGltIE1BWDIwMDg2LU1BWDIwMDg5IENhbWVyYSBQb3dlciBQcm90ZWN0b3JzXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy03NjItXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo3NjM6Y29uZmlnIFJFR1VMQVRPUl9NQVgyMDQxMVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNzY0LVxcdHRyaXN0YXRlIFxcXCJNYXhpbSBNQVgyMDQxMSBIaWdoLUVmZmljaWVuY3kgU2luZ2xlIFN0ZXAtRG93biBDb252ZXJ0ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTc3MC1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjc3MTpjb25maWcgUkVHVUxBVE9SX01BWDc3Njg2XFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy03NzItXFx0dHJpc3RhdGUgXFxcIk1heGltIDc3Njg2IHJlZ3VsYXRvclxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNzc4LVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6Nzc5OmNvbmZpZyBSRUdVTEFUT1JfTUFYNzc2OTNcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTc4MC1cXHR0cmlzdGF0ZSBcXFwiTWF4aW0gNzc2OTMvNzc4NDMgcmVndWxhdG9yXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy03ODctXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo3ODg6Y29uZmlnIFJFR1VMQVRPUl9NQVg3NzgwMlxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctNzg5LVxcdHRyaXN0YXRlIFxcXCJNYXhpbSA3NzgwMiByZWd1bGF0b3JcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTc5Ni1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjc5Nzpjb25maWcgUkVHVUxBVE9SX01BWDc3ODI2XFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy03OTgtXFx0dHJpc3RhdGUgXFxcIk1heGltIDc3ODI2IHJlZ3VsYXRvclxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctODA2LVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6ODA3OmNvbmZpZyBSRUdVTEFUT1JfTUFYNzc4MzhcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTgwOC1cXHR0cmlzdGF0ZSBcXFwiTWF4aW0gNzc4MzggcmVndWxhdG9yXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy04MTUtXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo4MTY6Y29uZmlnIFJFR1VMQVRPUl9NQzEzWFhYX0NPUkVcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTgxNy1cXHR0cmlzdGF0ZVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctODE4LVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6ODE5OmNvbmZpZyBSRUdVTEFUT1JfTUMxMzc4M1xcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctODIwLVxcdHRyaXN0YXRlIFxcXCJGcmVlc2NhbGUgTUMxMzc4MyByZWd1bGF0b3IgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy04MjYtXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo4Mjc6Y29uZmlnIFJFR1VMQVRPUl9NQzEzODkyXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy04MjgtXFx0dHJpc3RhdGUgXFxcIkZyZWVzY2FsZSBNQzEzODkyIHJlZ3VsYXRvciBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTgzNC1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjgzNTpjb25maWcgUkVHVUxBVE9SX01DUDE2NTAyXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy04MzYtXFx0dHJpc3RhdGUgXFxcIk1pY3JvY2hpcCBNQ1AxNjUwMiBQTUlDXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy04NDQtXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo4NDU6Y29uZmlnIFJFR1VMQVRPUl9NUDU0MTZcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTg0Ni1cXHR0cmlzdGF0ZSBcXFwiTW9ub2xpdGhpYyBNUDU0MTYgUE1JQ1xcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctODU0LVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6ODU1OmNvbmZpZyBSRUdVTEFUT1JfTVA4ODU5XFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy04NTYtXFx0dHJpc3RhdGUgXFxcIk1QUyBNUDg4NTkgcmVndWxhdG9yIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctODY1LVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6ODY2OmNvbmZpZyBSRUdVTEFUT1JfTVA4ODZYXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy04NjctXFx0dHJpc3RhdGUgXFxcIk1QUyBNUDg4NjkgcmVndWxhdG9yIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctODcyLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6ODczOmNvbmZpZyBSRUdVTEFUT1JfTVBRNzkyMFxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctODc0LVxcdHRyaXN0YXRlIFxcXCJNb25vbGl0aGljIE1QUTc5MjAgUE1JQ1xcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctODgyLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6ODgzOmNvbmZpZyBSRUdVTEFUT1JfTVQ2MzExXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy04ODQtXFx0dHJpc3RhdGUgXFxcIk1lZGlhVGVrIE1UNjMxMSBQTUlDXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy04OTItXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo4OTM6Y29uZmlnIFJFR1VMQVRPUl9NVDYzMTVcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTg5NC1cXHR0cmlzdGF0ZSBcXFwiTWVkaWFUZWsgTVQ2MzE1IFBNSUNcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTkwMi1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjkwMzpjb25maWcgUkVHVUxBVE9SX01UNjMxNlxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctOTA0LVxcdHRyaXN0YXRlIFxcXCJNVDYzMTYgU1BNSSBQTUlDIHJlZ3VsYXRvciBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTkxMi1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjkxMzpjb25maWcgUkVHVUxBVE9SX01UNjMyM1xcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctOTE0LVxcdHRyaXN0YXRlIFxcXCJNZWRpYVRlayBNVDYzMjMgUE1JQ1xcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctOTIxLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6OTIyOmNvbmZpZyBSRUdVTEFUT1JfTVQ2MzMxXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy05MjMtXFx0dHJpc3RhdGUgXFxcIk1lZGlhVGVrIE1UNjMzMSBQTUlDXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy05MzAtXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo5MzE6Y29uZmlnIFJFR1VMQVRPUl9NVDYzMzJcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTkzMi1cXHR0cmlzdGF0ZSBcXFwiTWVkaWFUZWsgTVQ2MzMyIFBNSUNcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTkzOS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjk0MDpjb25maWcgUkVHVUxBVE9SX01UNjM1N1xcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctOTQxLVxcdHRyaXN0YXRlIFxcXCJNZWRpYVRlayBNVDYzNTcgUE1JQ1xcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctOTQ4LVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6OTQ5OmNvbmZpZyBSRUdVTEFUT1JfTVQ2MzU4XFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy05NTAtXFx0dHJpc3RhdGUgXFxcIk1lZGlhVGVrIE1UNjM1OCBQTUlDXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy05NTctXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzo5NTg6Y29uZmlnIFJFR1VMQVRPUl9NVDYzNTlcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTk1OS1cXHR0cmlzdGF0ZSBcXFwiTWVkaWFUZWsgTVQ2MzU5IFBNSUNcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTk2Ni1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjk2Nzpjb25maWcgUkVHVUxBVE9SX01UNjM2MFxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctOTY4LVxcdHRyaXN0YXRlIFxcXCJNVDYzNjAgU3ViUE1JQyBSZWd1bGF0b3JcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTk3NS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjk3Njpjb25maWcgUkVHVUxBVE9SX01UNjM2M1xcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctOTc3LVxcdHRyaXN0YXRlIFxcXCJNVDYzNjMgU1BNSSBQTUlDIHJlZ3VsYXRvciBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTk4Ni1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjk4Nzpjb25maWcgUkVHVUxBVE9SX01UNjM3MFxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctOTg4LVxcdHRyaXN0YXRlIFxcXCJNVDYzNzAgU3ViUE1JQyBSZWd1bGF0b3JcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTk5NC1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjk5NTpjb25maWcgUkVHVUxBVE9SX01UNjM4MFxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctOTk2LVxcdHRyaXN0YXRlIFxcXCJNZWRpYVRlayBNVDYzODAgUE1JQ1xcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTAwMy1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjEwMDQ6Y29uZmlnIFJFR1VMQVRPUl9NVDYzOTdcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTEwMDUtXFx0dHJpc3RhdGUgXFxcIk1lZGlhVGVrIE1UNjM5NyBQTUlDXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xMDEyLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MTAxMzpjb25maWcgUkVHVUxBVE9SX01US19EVkZTUkNcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTEwMTQtXFx0dHJpc3RhdGUgXFxcIk1lZGlhVGVrIERWRlNSQyByZWd1bGF0b3IgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xMDIyLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MTAyMzpjb25maWcgUkVHVUxBVE9SX1BBTE1BU1xcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTAyNC1cXHR0cmlzdGF0ZSBcXFwiVEkgUGFsbWFzIFBNSUMgUmVndWxhdG9yc1xcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTAzNC1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjEwMzU6Y29uZmlnIFJFR1VMQVRPUl9QQklBU1xcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTAzNi1cXHR0cmlzdGF0ZSBcXFwiUEJJQVMgT01BUCByZWd1bGF0b3IgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xMDQzLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MTA0NDpjb25maWcgUkVHVUxBVE9SX1BDQTk0NTBcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTEwNDUtXFx0dHJpc3RhdGUgXFxcIk5YUCBQQ0E5NDUwQS9QQ0E5NDUwQi9QQ0E5NDUwQyByZWd1bGF0b3IgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xMDUxLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MTA1Mjpjb25maWcgUkVHVUxBVE9SX1BGOTQ1M1xcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTA1My1cXHR0cmlzdGF0ZSBcXFwiTlhQIFBGOTQ1MyByZWd1bGF0b3IgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xMDU4LVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWc6MTA1OTpjb25maWcgUkVHVUxBVE9SX1BGMDkwMFxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTA2MC1cXHR0cmlzdGF0ZSBcXFwiTlhQIFBGMDkwMC9QRjA5MDEvUEYwOVhYIHJlZ3VsYXRvciBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTEwNjYtXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZzoxMDY3OmNvbmZpZyBSRUdVTEFUT1JfUEY1MzBYXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xMDY4LVxcdHRyaXN0YXRlIFxcXCJOWFAgUEY1MzAwL1BGNTMwMS9QRjUzMDIgcmVndWxhdG9yIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTA3OC1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjEwNzk6Y29uZmlnIFJFR1VMQVRPUl9QRjhYMDBcXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnLTEwODAtXFx0dHJpc3RhdGUgXFxcIk5YUCBQRjgxMDAvUEY4MTIxQS9QRjgyMDAgcmVndWxhdG9yIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTA5MC1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjEwOTE6Y29uZmlnIFJFR1VMQVRPUl9QRlVaRTEwMFxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTA5Mi1cXHR0cmlzdGF0ZSBcXFwiRnJlZXNjYWxlIFBGVVpFMTAwLzIwMC8zMDAwLzMwMDEgcmVndWxhdG9yIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTA5OC1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjEwOTk6Y29uZmlnIFJFR1VMQVRPUl9QVjg4MDYwXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xMTAwLVxcdHRyaXN0YXRlIFxcXCJQb3dlcnZlbnR1cmUgU2VtaWNvbmR1Y3RvciBQVjg4MDYwIHJlZ3VsYXRvclxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTEwNi1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjExMDc6Y29uZmlnIFJFR1VMQVRPUl9QVjg4MDgwXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xMTA4LVxcdHRyaXN0YXRlIFxcXCJQb3dlcnZlbnR1cmUgU2VtaWNvbmR1Y3RvciBQVjg4MDgwIHJlZ3VsYXRvclxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTExMy1cXG5kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnOjExMTQ6Y29uZmlnIFJFR1VMQVRPUl9QVjg4MDkwXFxuZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZy0xMTE1LVxcdHRyaXN0YXRlIFxcXCJQb3dlcnZlbnR1cmUgU2VtaWNvbmR1Y3RvciBQVjg4MDkwIHJlZ3VsYXRvclxcXCJcXG4tLVxcbmRyaXZlcnMvcmVndWxhdG9yL0tjb25maWctMTEyMS1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTI6MjcuODE2MzE1MTNaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzczMDkxMzYxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlIENoYW5nZXMqKlxuXG5Pa2F5LCBhZnRlciByZXZpZXdpbmcgdGhpcywgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGNvbmZpcm1lZDogYFJFR1VMQVRPUmAgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IGNvbXBvbmVudCB0byBmb2N1cyBvbiBoZXJlLiBUaGUgY2hhbmdlcyBhcmUgY2VudGVyZWQgYXJvdW5kIHRoZSBQU0UgY29udHJvbGxlcidzIGludGVyYWN0aW9uIHdpdGggdGhlIFBIWSBkZXZpY2UsIGludHJvZHVjaW5nIGEgbmV3IGxvY2tpbmcgbWVjaGFuaXNtIChgcGh5X3BzZV9sb2NrYCkgYW5kIGEgbm90aWZpZXIgKGBwaHlfcHNlX25vdGlmaWVyYCkgdG8gbWFuYWdlIFBTRSBjb250cm9sbGVyIHJlZ2lzdHJhdGlvbiBhbmQgdW5yZWdpc3RyYXRpb24uIFRoaXMgaW1wYWN0cyBib3RoIHRoZSBjb3JlIFBIWSBsaWJyYXJ5IGFuZCBldGh0b29sLCBhbmQgc2luY2UgbmV0bGluayBhbmQgUEhZIGRldmljZSByZWdpc3RyYXRpb24gcGF0aHMgYXJlIGludm9sdmVkLCB0aGUgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlIGlzIGRlZmluaXRlbHkgcHJlc2VudCBpbiB2aXJ0dWFsaXplZCBzZXR1cHMuXG5cblRoZSBrZXkgY29uZmlndXJhdGlvbnMgdG8gY29uc2lkZXIgaGVyZSBhcmU6IGBQU0VfQ09OVFJPTExFUmAsIGBQU0VfUkVHVUxBVE9SYCwgYFJFR1VMQVRPUmAsIGBTRlBgLCBhbmQgYEZXTk9ERV9NRElPYC4gVGhlc2UgYWxsIHNlZW0gdG8gYmUgcmVsZXZhbnQgdG8gdGhlIGNoYW5nZXMgYmVpbmcgaW50cm9kdWNlZC5cblxuSSB3ZW50IHRocm91Z2ggdGhlIGBGb2N1c1N5bWJvbHNgIHRvIGRvdWJsZS1jaGVjayBteSB1bmRlcnN0YW5kaW5nIGFuZCBhbGwgb2YgdGhlbSAtIGBwaHlfcHNlX2NvbnRyb2xfbG9ja2AsIGBwaHlfcHNlX2NvbnRyb2xfdW5sb2NrYCwgYHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkYCwgYHBoeV9kZXZpY2VfcmVnaXN0ZXJgLCBgcGh5X2RldmljZV9yZW1vdmVgLCBgcHNlX3JlZ2lzdGVyX25vdGlmaWVyYCwgYHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyYCwgYHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyYCwgYHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXJgLCBgcHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldmAsIGBldGhubF9zZXRfcHNlYCwgYHBzZV9wcmVwYXJlX2RhdGFgLCBgcGh5X3BzZV9hdHRhY2hfb25lYCwgYHBoeV9wc2VfZGV0YWNoX29uZWAsIGFuZCBgcGh5X3BzZV9ub3RpZmllcl9ldmVudGAgLSBhbGwgc2VlbSB2YWxpZCBhbmQgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgbmV3IGxvY2tpbmcgYW5kIG5vdGlmaWNhdGlvbiBtZWNoYW5pc21zLlxuXG5BbHJpZ2h0LCBJJ20gY29uZmlkZW50IGluIHRoaXMgYW5hbHlzaXMuIFRpbWUgdG8gZmluYWxpemUgdGhlIHJlc3VsdHMgYW5kIG1vdmUgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNzA1LCJPdXRwdXRUb2tlbnMiOjI5MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMjozNS41NDcyMzE1NThaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzkzNTA4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFNFX0NPTlRST0xMRVJcIixcbiAgICBcIlBTRV9SRUdVTEFUT1JcIixcbiAgICBcIlJFR1VMQVRPUlwiLFxuICAgIFwiU0ZQXCIsXG4gICAgXCJGV05PREVfTURJT1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBoeV9wc2VfY29udHJvbF9sb2NrXCIsXG4gICAgXCJwaHlfcHNlX2NvbnRyb2xfdW5sb2NrXCIsXG4gICAgXCJwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZFwiLFxuICAgIFwicGh5X2RldmljZV9yZWdpc3RlclwiLFxuICAgIFwicGh5X2RldmljZV9yZW1vdmVcIixcbiAgICBcInBzZV9yZWdpc3Rlcl9ub3RpZmllclwiLFxuICAgIFwicHNlX3VucmVnaXN0ZXJfbm90aWZpZXJcIixcbiAgICBcInBzZV9jb250cm9sbGVyX3JlZ2lzdGVyXCIsXG4gICAgXCJwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyXCIsXG4gICAgXCJwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2XCIsXG4gICAgXCJldGhubF9zZXRfcHNlXCIsXG4gICAgXCJwc2VfcHJlcGFyZV9kYXRhXCIsXG4gICAgXCJwaHlfcHNlX2F0dGFjaF9vbmVcIixcbiAgICBcInBoeV9wc2VfZGV0YWNoX29uZVwiLFxuICAgIFwicGh5X3BzZV9ub3RpZmllcl9ldmVudFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgaG93IHRoZSBQU0UgY29udHJvbGxlciBpcyBhdHRhY2hlZCB0byB0aGUgUEhZIGRldmljZSwgaW50cm9kdWNpbmcgYSBuZXcgbG9jayAoYHBoeV9wc2VfbG9ja2ApIGFuZCBhIG5vdGlmaWVyIChgcGh5X3BzZV9ub3RpZmllcmApIHRvIGhhbmRsZSBQU0UgY29udHJvbGxlciByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uLiBJdCBhbHNvIG1vZGlmaWVzIHRoZSBldGh0b29sIFBTRSBuZXRsaW5rIGludGVyZmFjZSB0byB1c2UgdGhlIG5ldyBsb2NrLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCB0aGUgY29yZSBQSFkgbGlicmFyeSBhbmQgZXRodG9vbCwgYW5kIGFyZSByZWFjaGFibGUgdmlhIG5ldGxpbmsgYW5kIFBIWSBkZXZpY2UgcmVnaXN0cmF0aW9uIHBhdGhzLCB3aGljaCBjYW4gYmUgdHJpZ2dlcmVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQU0VfQ09OVFJPTExFUlwiLFxuICAgIFwiUFNFX1JFR1VMQVRPUlwiLFxuICAgIFwiUkVHVUxBVE9SXCIsXG4gICAgXCJTRlBcIixcbiAgICBcIkZXTk9ERV9NRElPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGh5X3BzZV9jb250cm9sX2xvY2tcIixcbiAgICBcInBoeV9wc2VfY29udHJvbF91bmxvY2tcIixcbiAgICBcInBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkXCIsXG4gICAgXCJwaHlfZGV2aWNlX3JlZ2lzdGVyXCIsXG4gICAgXCJwaHlfZGV2aWNlX3JlbW92ZVwiLFxuICAgIFwicHNlX3JlZ2lzdGVyX25vdGlmaWVyXCIsXG4gICAgXCJwc2VfdW5yZWdpc3Rlcl9ub3RpZmllclwiLFxuICAgIFwicHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXJcIixcbiAgICBcInBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXJcIixcbiAgICBcInBzZV9jb250cm9sX21hdGNoZXNfcGNkZXZcIixcbiAgICBcImV0aG5sX3NldF9wc2VcIixcbiAgICBcInBzZV9wcmVwYXJlX2RhdGFcIixcbiAgICBcInBoeV9wc2VfYXR0YWNoX29uZVwiLFxuICAgIFwicGh5X3BzZV9kZXRhY2hfb25lXCIsXG4gICAgXCJwaHlfcHNlX25vdGlmaWVyX2V2ZW50XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyBob3cgdGhlIFBTRSBjb250cm9sbGVyIGlzIGF0dGFjaGVkIHRvIHRoZSBQSFkgZGV2aWNlLCBpbnRyb2R1Y2luZyBhIG5ldyBsb2NrIChgcGh5X3BzZV9sb2NrYCkgYW5kIGEgbm90aWZpZXIgKGBwaHlfcHNlX25vdGlmaWVyYCkgdG8gaGFuZGxlIFBTRSBjb250cm9sbGVyIHJlZ2lzdHJhdGlvbiBhbmQgdW5yZWdpc3RyYXRpb24uIEl0IGFsc28gbW9kaWZpZXMgdGhlIGV0aHRvb2wgUFNFIG5ldGxpbmsgaW50ZXJmYWNlIHRvIHVzZSB0aGUgbmV3IGxvY2suIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHRoZSBjb3JlIFBIWSBsaWJyYXJ5IGFuZCBldGh0b29sLCBhbmQgYXJlIHJlYWNoYWJsZSB2aWEgbmV0bGluayBhbmQgUEhZIGRldmljZSByZWdpc3RyYXRpb24gcGF0aHMsIHdoaWNoIGNhbiBiZSB0cmlnZ2VyZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjoxMjozNS42MzExNzM0NjRaIiwiU2VxIjo0MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjczNzE3OTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTI6MzUuNjMxNjc5MDQ0WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEyNjczMjA2NjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcmVmYWN0b3JzIHRoZSBsaWZlY3ljbGUgYW5kIHN5bmNocm9uaXphdGlvbiBvZiBQU0UgKFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudCkgY29udHJvbGxlcnMgYXR0YWNoZWQgdG8gUEhZIGRldmljZXMuIEl0IGludHJvZHVjZXMgYSBub3RpZmllciBjaGFpbiAoYHBoeV9wc2Vfbm90aWZpZXJgKSBhbmQgYSBtdXRleCAoYHBoeV9wc2VfbG9ja2ApIHRvIHNhZmVseSBhdHRhY2ggYW5kIGRldGFjaCBgcGh5ZGV2LVxcdTAwM2Vwc2VjYCB3aGVuIFBTRSBjb250cm9sbGVycyBhcmUgcmVnaXN0ZXJlZCBvciB1bnJlZ2lzdGVyZWQsIHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzLiBJdCBhbHNvIHdyYXBzIGV0aHRvb2wgUFNFIG9wZXJhdGlvbnMgd2l0aCB0aGUgbmV3IGxvY2suXFxuXFxuVGhlc2UgY2hhbmdlcyBwcmltYXJpbHkgYWRkcmVzcyBvYmplY3QgbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIGxvY2tpbmcsIGFuZCBzeW5jaHJvbml6YXRpb24uIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBsaWtlbHkgbWFuaWZlc3QgYXMgdXNlLWFmdGVyLWZyZWUsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIGRlYWRsb2Nrcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgaW52b2x2ZSBjb21wbGV4IGJ1ZmZlciBhbGxvY2F0aW9ucyBvciBtb2RpZmljYXRpb25zIHRvIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2NjhkMDkzYjA5ZmYwZTQyYmI0YWIzOTlkMTRlMmFhMDAwN2JhNWNkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMjI6MTA6MzkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMgYi9kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmNcbmluZGV4IGJhNzA5MTUxODI2NTQuLjdiZDk3OWI1OWY0OTYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmNcbisrKyBiL2RyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uY1xuQEAgLTExLDMzICsxMSwxMSBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Z3bm9kZV9tZGlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9wc2UtcGQvcHNlLmhcdTAwM2VcbiBcbiBNT0RVTEVfQVVUSE9SKFwiQ2FsdmluIEpvaG5zb24gXHUwMDNjY2FsdmluLmpvaG5zb25Ab3NzLm54cC5jb21cdTAwM2VcIik7XG4gTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG4gTU9EVUxFX0RFU0NSSVBUSU9OKFwiRldOT0RFIE1ESU8gYnVzIChFdGhlcm5ldCBQSFkpIGFjY2Vzc29yc1wiKTtcbiBcbi1zdGF0aWMgc3RydWN0IHBzZV9jb250cm9sICpcbi1md25vZGVfZmluZF9wc2VfY29udHJvbChzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlLFxuLVx0XHRcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4te1xuLVx0c3RydWN0IHBzZV9jb250cm9sICpwc2VjO1xuLVx0c3RydWN0IGRldmljZV9ub2RlICpucDtcbi1cbi1cdGlmICghSVNfRU5BQkxFRChDT05GSUdfUFNFX0NPTlRST0xMRVIpKVxuLVx0XHRyZXR1cm4gTlVMTDtcbi1cbi1cdG5wID0gdG9fb2Zfbm9kZShmd25vZGUpO1xuLVx0aWYgKCFucClcbi1cdFx0cmV0dXJuIE5VTEw7XG4tXG4tXHRwc2VjID0gb2ZfcHNlX2NvbnRyb2xfZ2V0KG5wLCBwaHlkZXYpO1xuLVx0aWYgKFBUUl9FUlIocHNlYykgPT0gLUVOT0VOVClcbi1cdFx0cmV0dXJuIE5VTEw7XG4tXG4tXHRyZXR1cm4gcHNlYztcbi19XG4tXG4gc3RhdGljIHN0cnVjdCBtaWlfdGltZXN0YW1wZXIgKlxuIGZ3bm9kZV9maW5kX21paV90aW1lc3RhbXBlcihzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKVxuIHtcbkBAIC0xMTgsNyArOTYsNiBAQCBpbnQgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KHN0cnVjdCBtaWlfYnVzICpidXMsXG4gXHRcdFx0XHRzdHJ1Y3QgZndub2RlX2hhbmRsZSAqY2hpbGQsIHUzMiBhZGRyKVxuIHtcbiBcdHN0cnVjdCBtaWlfdGltZXN0YW1wZXIgKm1paV90cyA9IE5VTEw7XG4tXHRzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMgPSBOVUxMO1xuIFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeTtcbiBcdGJvb2wgaXNfYzQ1O1xuIFx0dTMyIHBoeV9pZDtcbkBAIC0xNTksMTQgKzEzNiw2IEBAIGludCBmd25vZGVfbWRpb2J1c19yZWdpc3Rlcl9waHkoc3RydWN0IG1paV9idXMgKmJ1cyxcbiBcdFx0XHRnb3RvIGNsZWFuX3BoeTtcbiBcdH1cbiBcbi1cdHBzZWMgPSBmd25vZGVfZmluZF9wc2VfY29udHJvbChjaGlsZCwgcGh5KTtcbi1cdGlmIChJU19FUlIocHNlYykpIHtcbi1cdFx0cmMgPSBQVFJfRVJSKHBzZWMpO1xuLVx0XHRnb3RvIHVucmVnaXN0ZXJfcGh5O1xuLVx0fVxuLVxuLVx0cGh5LVx1MDAzZXBzZWMgPSBwc2VjO1xuLVxuIFx0LyogcGh5LVx1MDAzZW1paV90cyBtYXkgYWxyZWFkeSBiZSBkZWZpbmVkIGJ5IHRoZSBQSFkgZHJpdmVyLiBBXG4gXHQgKiBtaWlfdGltZXN0YW1wZXIgcHJvYmVkIHZpYSB0aGUgZGV2aWNlIHRyZWUgd2lsbCBzdGlsbCBoYXZlXG4gXHQgKiBwcmVjZWRlbmNlLlxuQEAgLTE3Niw5ICsxNDUsNiBAQCBpbnQgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KHN0cnVjdCBtaWlfYnVzICpidXMsXG4gXG4gXHRyZXR1cm4gMDtcbiBcbi11bnJlZ2lzdGVyX3BoeTpcbi1cdGlmIChpc19hY3BpX25vZGUoY2hpbGQpIHx8IGlzX29mX25vZGUoY2hpbGQpKVxuLVx0XHRwaHlfZGV2aWNlX3JlbW92ZShwaHkpO1xuIGNsZWFuX3BoeTpcbiBcdHBoeV9kZXZpY2VfZnJlZShwaHkpO1xuIGNsZWFuX21paV90czpcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuaW5kZXggMDYxNTIyODQ1OWVmNC4uZGNhMWI0NWJiYmQyNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcbkBAIC0xMTAyLDExICsxMTAyLDEyOCBAQCBzdHJ1Y3QgcGh5X2RldmljZSAqZ2V0X3BoeV9kZXZpY2Uoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGJvb2wgaXNfYzQ1KVxuIH1cbiBFWFBPUlRfU1lNQk9MKGdldF9waHlfZGV2aWNlKTtcbiBcbisvKiBTZXJpYWxpc2VzIHBoeWRldi1cdTAwM2Vwc2VjIGFnYWluc3QgdGhlIFBTRSBub3RpZmllciBhbmQgZXRodG9vbCwgbm90IHJ0bmwuICovXG4rc3RhdGljIERFRklORV9NVVRFWChwaHlfcHNlX2xvY2spO1xuK1xuKy8qIEJlc3QtZWZmb3J0IGF0dGFjaCBvZiBwaHlkZXYtXHUwMDNlcHNlYyBmcm9tIGEgRFQgYHBzZXMgPSBcdTAwM2NcdTAwMjYuLi5cdTAwM2VgIHBoYW5kbGUuXG4rICogQ2FsbGVyIG11c3QgaG9sZCBwaHlfcHNlX2xvY2suIEEgbWlzc2luZyBwaGFuZGxlICgtRU5PRU5UKSBvciBhXG4rICogbm90LXlldC1yZWdpc3RlcmVkIGNvbnRyb2xsZXIgKC1FUFJPQkVfREVGRVIpIGlzIHNpbGVudDsgdGhlIG5vdGlmaWVyXG4rICogcmV0cmllcyB0aGUgbGF0dGVyIGF0IFBTRV9SRUdJU1RFUkVEIHRpbWUuIEFueSBvdGhlciBlcnJvciBtZWFucyBhIGJyb2tlblxuKyAqIGJpbmRpbmcgYW5kIGlzIHdhcm5lZCBhYm91dCwgYnV0IGxlZnQgbm9uLWZhdGFsIHNvIHRoZSBwaHkgc3RpbGwgcmVnaXN0ZXJzLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHBoeV90cnlfYXR0YWNoX3BzZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYztcbitcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnBoeV9wc2VfbG9jayk7XG4rXG4rXHRucCA9IHBoeWRldi1cdTAwM2VtZGlvLmRldi5vZl9ub2RlO1xuK1x0aWYgKCFucClcbitcdFx0cmV0dXJuO1xuK1xuK1x0aWYgKHBoeWRldi1cdTAwM2Vwc2VjKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRwc2VjID0gb2ZfcHNlX2NvbnRyb2xfZ2V0KG5wLCBwaHlkZXYpO1xuK1x0aWYgKElTX0VSUihwc2VjKSkge1xuK1x0XHRpZiAoUFRSX0VSUihwc2VjKSAhPSAtRVBST0JFX0RFRkVSIFx1MDAyNlx1MDAyNiBQVFJfRVJSKHBzZWMpICE9IC1FTk9FTlQpXG4rXHRcdFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LCBcImZhaWxlZCB0byBnZXQgUFNFIGNvbnRyb2w6ICVwZVxcblwiLFxuK1x0XHRcdFx0ICAgIHBzZWMpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRwaHlkZXYtXHUwMDNlcHNlYyA9IHBzZWM7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGh5X3BzZV9hdHRhY2hfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSBfX21heWJlX3VudXNlZClcbit7XG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnBoeV9wc2VfbG9jayk7XG4rXG4rXHRpZiAoZGV2LVx1MDAzZXR5cGUgIT0gXHUwMDI2bWRpb19idXNfcGh5X3R5cGUpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cGh5X3RyeV9hdHRhY2hfcHNlKHRvX3BoeV9kZXZpY2UoZGV2KSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBwaHlfcHNlX2RldGFjaF9vbmUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKVxuK3tcbitcdHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2ID0gZGF0YTtcbitcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XG4rXHRzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWM7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnBoeV9wc2VfbG9jayk7XG4rXG4rXHRpZiAoZGV2LVx1MDAzZXR5cGUgIT0gXHUwMDI2bWRpb19idXNfcGh5X3R5cGUpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cGh5ZGV2ID0gdG9fcGh5X2RldmljZShkZXYpO1xuK1x0cHNlYyA9IHBoeWRldi1cdTAwM2Vwc2VjO1xuK1x0aWYgKCFwc2VjIHx8ICFwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2KHBzZWMsIHBjZGV2KSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRwaHlkZXYtXHUwMDNlcHNlYyA9IE5VTEw7XG4rXHRwc2VfY29udHJvbF9wdXQocHNlYyk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBwaHlfcHNlX25vdGlmaWVyX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4rXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKmRhdGEpXG4re1xuK1x0c3dpdGNoIChldmVudCkge1xuK1x0Y2FzZSBQU0VfUkVHSVNURVJFRDpcbitcdFx0bXV0ZXhfbG9jayhcdTAwMjZwaHlfcHNlX2xvY2spO1xuK1x0XHRidXNfZm9yX2VhY2hfZGV2KFx1MDAyNm1kaW9fYnVzX3R5cGUsIE5VTEwsIE5VTEwsXG4rXHRcdFx0XHQgcGh5X3BzZV9hdHRhY2hfb25lKTtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBoeV9wc2VfbG9jayk7XG4rXHRcdHJldHVybiBOT1RJRllfT0s7XG4rXHRjYXNlIFBTRV9VTlJFR0lTVEVSRUQ6XG4rXHRcdG11dGV4X2xvY2soXHUwMDI2cGh5X3BzZV9sb2NrKTtcbitcdFx0YnVzX2Zvcl9lYWNoX2RldihcdTAwMjZtZGlvX2J1c190eXBlLCBOVUxMLCBkYXRhLFxuK1x0XHRcdFx0IHBoeV9wc2VfZGV0YWNoX29uZSk7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZwaHlfcHNlX2xvY2spO1xuK1x0XHRyZXR1cm4gTk9USUZZX09LO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIE5PVElGWV9ET05FO1xuK1x0fVxuK31cbitcbitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBoeV9wc2Vfbm90aWZpZXIgX19yZWFkX21vc3RseSA9IHtcbitcdC5ub3RpZmllcl9jYWxsID0gcGh5X3BzZV9ub3RpZmllcl9ldmVudCxcbit9O1xuK1xuIC8qKlxuLSAqIHBoeV9kZXZpY2VfcmVnaXN0ZXIgLSBSZWdpc3RlciB0aGUgcGh5IGRldmljZSBvbiB0aGUgTURJTyBidXNcbi0gKiBAcGh5ZGV2OiBwaHlfZGV2aWNlIHN0cnVjdHVyZSB0byBiZSBhZGRlZCB0byB0aGUgTURJTyBidXNcbisgKiBwaHlfcHNlX2NvbnRyb2xfbG9jayAtIGhvbGQgcGh5ZGV2LVx1MDAzZXBzZWMgc3RhYmxlIGFnYWluc3QgUFNFIGNvbnRyb2xsZXIgdGVhcmRvd25cbisgKlxuKyAqIFRoZSBQU0VfVU5SRUdJU1RFUkVEIG5vdGlmaWVyIGRldGFjaGVzIHBoeWRldi1cdTAwM2Vwc2VjIGFuZCBkcm9wcyBpdHMgbGFzdFxuKyAqIHJlZmVyZW5jZS4gQ2FsbGVycyB0aGF0IGRlcmVmZXJlbmNlIHBoeWRldi1cdTAwM2Vwc2VjICh0aGUgZXRodG9vbCBQU0UgcGF0aHMpIG11c3RcbisgKiBob2xkIHRoaXMgbG9jayBhY3Jvc3MgdGhlIGFjY2VzcyBzbyB0aGUgZGV0YWNoIGNhbm5vdCBydW4gdW5kZXJuZWF0aCB0aGVtLlxuICAqL1xuLWludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4rdm9pZCBwaHlfcHNlX2NvbnRyb2xfbG9jayh2b2lkKVxuK3tcbitcdG11dGV4X2xvY2soXHUwMDI2cGh5X3BzZV9sb2NrKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwocGh5X3BzZV9jb250cm9sX2xvY2spO1xuK1xuKy8qKlxuKyAqIHBoeV9wc2VfY29udHJvbF91bmxvY2sgLSByZWxlYXNlIHRoZSBsb2NrIHRha2VuIGJ5IHBoeV9wc2VfY29udHJvbF9sb2NrKClcbisgKi9cbit2b2lkIHBoeV9wc2VfY29udHJvbF91bmxvY2sodm9pZClcbit7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cGh5X3BzZV9sb2NrKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwocGh5X3BzZV9jb250cm9sX3VubG9jayk7XG4rXG4rLyogQ29yZSByZWdpc3RyYXRpb246IGFkZCB0aGUgcGh5IHRvIHRoZSBNRElPIGJ1cy4gRG9lcyBub3QgdG91Y2ggcnRubCBvclxuKyAqIFBTRS4gcGh5ZGV2LVx1MDAzZXBzZWMgaXMgYXR0YWNoZWQgYnkgdGhlIGNhbGxlcnMgYmVsb3csIGFmdGVyIGRldmljZV9hZGQoKVxuKyAqIGhhcyBtYWRlIHRoZSBwaHkgdmlzaWJsZSBvbiBtZGlvX2J1c190eXBlLCBzbyB0aGF0IGEgY29uY3VycmVudCBQU0VcbisgKiBub3RpZmllciB3YWxrIGFuZCB0aGUgYXR0YWNoIGNhbiBuZXZlciBsZWF2ZSB0aGUgcGh5IHVuYXR0YWNoZWQuIEtlZXBpbmdcbisgKiBkZXZpY2VfYWRkKCkgb3V0IG9mIHJ0bmwgYWxzbyBhdm9pZHMgZGVhZGxvY2tpbmcgd2hlbiBiaW5kaW5nIGEgcGh5IHRoYXRcbisgKiBpdHNlbGYgcHJvdmlkZXMgYW4gU0ZQIGNhZ2UgKHBoeV9wcm9iZSgpIC1cdTAwM2UgcGh5X3NmcF9wcm9iZSgpIC1cdTAwM2VcbisgKiBzZnBfYnVzX2FkZF91cHN0cmVhbSgpIHRha2VzIHJ0bmwpLlxuKyAqL1xuK3N0YXRpYyBpbnQgX19waHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4ge1xuIFx0aW50IGVycjtcbiBcbkBAIC0xMTM1LDEwICsxMjUyLDU2IEBAIGludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gIG91dDpcbiBcdC8qIEFzc2VydCB0aGUgcmVzZXQgc2lnbmFsICovXG4gXHRwaHlfZGV2aWNlX3Jlc2V0KHBoeWRldiwgMSk7XG4tXG4gXHRtZGlvYnVzX3VucmVnaXN0ZXJfZGV2aWNlKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuK1xuKy8qKlxuKyAqIHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkIC0gUmVnaXN0ZXIgdGhlIHBoeSBkZXZpY2Ugb24gdGhlIE1ESU8gYnVzXG4rICogQHBoeWRldjogcGh5X2RldmljZSBzdHJ1Y3R1cmUgdG8gYmUgYWRkZWQgdG8gdGhlIE1ESU8gYnVzXG4rICpcbisgKiBTYW1lIGFzIHBoeV9kZXZpY2VfcmVnaXN0ZXIoKSBidXQgY2FsbGVyIG11c3QgYWxyZWFkeSBob2xkIHJ0bmxfbG9jaygpLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbisgKi9cbitpbnQgcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgZXJyO1xuK1xuK1x0QVNTRVJUX1JUTkwoKTtcbitcbitcdGVyciA9IF9fcGh5X2RldmljZV9yZWdpc3RlcihwaHlkZXYpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cGh5X3BzZV9sb2NrKTtcbitcdHBoeV90cnlfYXR0YWNoX3BzZShwaHlkZXYpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnBoeV9wc2VfbG9jayk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rRVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZCk7XG4rXG4rLyoqXG4rICogcGh5X2RldmljZV9yZWdpc3RlciAtIFJlZ2lzdGVyIHRoZSBwaHkgZGV2aWNlIG9uIHRoZSBNRElPIGJ1c1xuKyAqIEBwaHlkZXY6IHBoeV9kZXZpY2Ugc3RydWN0dXJlIHRvIGJlIGFkZGVkIHRvIHRoZSBNRElPIGJ1c1xuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbisgKi9cbitpbnQgcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCBlcnI7XG4rXG4rXHRlcnIgPSBfX3BoeV9kZXZpY2VfcmVnaXN0ZXIocGh5ZGV2KTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnBoeV9wc2VfbG9jayk7XG4rXHRwaHlfdHJ5X2F0dGFjaF9wc2UocGh5ZGV2KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwaHlfcHNlX2xvY2spO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuIEVYUE9SVF9TWU1CT0wocGh5X2RldmljZV9yZWdpc3Rlcik7XG4gXG4gLyoqXG5AQCAtMTE1Miw3ICsxMzE1LDE1IEBAIEVYUE9SVF9TWU1CT0wocGh5X2RldmljZV9yZWdpc3Rlcik7XG4gdm9pZCBwaHlfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIHtcbiBcdHVucmVnaXN0ZXJfbWlpX3RpbWVzdGFtcGVyKHBoeWRldi1cdTAwM2VtaWlfdHMpO1xuK1xuK1x0LyogRGV0YWNoIHN5bmNocm9ub3VzbHksIGJlZm9yZSB0aGUgcGh5IGxlYXZlcyB0aGUgYnVzLCBzbyB0aGUgcHV0IGNhbm5vdFxuK1x0ICogb3V0bGl2ZSB0aGUgUFNFIGNvbnRyb2xsZXIgKGFuIG9mZi1idXMgYnV0IHN0aWxsLXBpbm5lZCBwaHkgaXMgbWlzc2VkIGJ5XG4rXHQgKiB0aGUgUFNFX1VOUkVHSVNURVJFRCB3YWxrKS4gcGh5X3BzZV9sb2NrIHNlcmlhbGlzZXMgYWdhaW5zdCB0aGF0IHdhbGsuXG4rXHQgKi9cbitcdG11dGV4X2xvY2soXHUwMDI2cGh5X3BzZV9sb2NrKTtcbiBcdHBzZV9jb250cm9sX3B1dChwaHlkZXYtXHUwMDNlcHNlYyk7XG4rXHRwaHlkZXYtXHUwMDNlcHNlYyA9IE5VTEw7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cGh5X3BzZV9sb2NrKTtcbiBcbiBcdGRldmljZV9kZWwoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2KTtcbiBcbkBAIC0zOTgxLDggKzQxNTIsMTQgQEAgc3RhdGljIGludCBfX2luaXQgcGh5X2luaXQodm9pZClcbiBcdGlmIChyYylcbiBcdFx0Z290byBlcnJfYzQ1O1xuIFxuK1x0cmMgPSBwc2VfcmVnaXN0ZXJfbm90aWZpZXIoXHUwMDI2cGh5X3BzZV9ub3RpZmllcik7XG4rXHRpZiAocmMpXG4rXHRcdGdvdG8gZXJyX2dlbnBoeTtcbitcbiBcdHJldHVybiAwO1xuIFxuK2Vycl9nZW5waHk6XG4rXHRwaHlfZHJpdmVyX3VucmVnaXN0ZXIoXHUwMDI2Z2VucGh5X2RyaXZlcik7XG4gZXJyX2M0NTpcbiBcdHBoeV9kcml2ZXJfdW5yZWdpc3RlcihcdTAwMjZnZW5waHlfYzQ1X2RyaXZlcik7XG4gZXJyX2V0aHRvb2xfcGh5X29wczpcbkBAIC0zOTk5LDYgKzQxNzYsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBwaHlfaW5pdCh2b2lkKVxuIFxuIHN0YXRpYyB2b2lkIF9fZXhpdCBwaHlfZXhpdCh2b2lkKVxuIHtcbitcdHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyKFx1MDAyNnBoeV9wc2Vfbm90aWZpZXIpO1xuIFx0cGh5X2RyaXZlcl91bnJlZ2lzdGVyKFx1MDAyNmdlbnBoeV9jNDVfZHJpdmVyKTtcbiBcdHBoeV9kcml2ZXJfdW5yZWdpc3RlcihcdTAwMjZnZW5waHlfZHJpdmVyKTtcbiBcdHJ0bmxfbG9jaygpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9zZnAuYyBiL2RyaXZlcnMvbmV0L3BoeS9zZnAuY1xuaW5kZXggMDNiZmQ4NjQwZGI5Ni4uMTg4NjhiZGQ2NDg1MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9zZnAuY1xuKysrIGIvZHJpdmVycy9uZXQvcGh5L3NmcC5jXG5AQCAtMjA4Myw3ICsyMDgzLDcgQEAgc3RhdGljIGludCBzZnBfc21fcHJvYmVfcGh5KHN0cnVjdCBzZnAgKnNmcCwgaW50IGFkZHIsIGJvb2wgaXNfYzQ1KVxuIFx0LyogTWFyayB0aGlzIFBIWSBhcyBiZWluZyBvbiBhIFNGUCBtb2R1bGUgKi9cbiBcdHBoeS1cdTAwM2Vpc19vbl9zZnBfbW9kdWxlID0gdHJ1ZTtcbiBcbi1cdGVyciA9IHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5KTtcbitcdGVyciA9IHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkKHBoeSk7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdHBoeV9kZXZpY2VfZnJlZShwaHkpO1xuIFx0XHRkZXZfZXJyKHNmcC1cdTAwM2VkZXYsIFwicGh5X2RldmljZV9yZWdpc3RlciBmYWlsZWQ6ICVwZVxcblwiLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jIGIvZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmNcbmluZGV4IDY5ZGJkYmRlOWQ3MWEuLjYxMTU0MGRmNDNiYjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuY1xuKysrIGIvZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmNcbkBAIC04LDYgKzgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXRodG9vbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXRodG9vbF9uZXRsaW5rLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9ub3RpZmllci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHNlLXBkL3BzZS5oXHUwMDNlXG5AQCAtMjMsNiArMjQsMzkgQEAgc3RhdGljIExJU1RfSEVBRChwc2VfY29udHJvbGxlcl9saXN0KTtcbiBzdGF0aWMgREVGSU5FX1hBUlJBWV9BTExPQyhwc2VfcHdfZF9tYXApO1xuIHN0YXRpYyBERUZJTkVfTVVURVgocHNlX3B3X2RfbXV0ZXgpO1xuIFxuK3N0YXRpYyBCTE9DS0lOR19OT1RJRklFUl9IRUFEKHBzZV9jb250cm9sbGVyX25vdGlmaWVyKTtcbitcbisvKipcbisgKiBwc2VfcmVnaXN0ZXJfbm90aWZpZXIgLSByZWdpc3RlciBhIGNhbGxiYWNrIGZvciBQU0UgY29udHJvbGxlciBldmVudHNcbisgKiBAbmI6IG5vdGlmaWVyIGJsb2NrIHRvIHJlZ2lzdGVyXG4rICpcbisgKiBTZWUgZW51bSBwc2VfY29udHJvbGxlcl9ldmVudCBmb3IgZXZlbnRzIGZpcmVkIGFuZCB0aGVpciBzdWJzY3JpYmVyXG4rICogY29udHJhY3QuIENhbGxiYWNrcyBydW4gaW4gcHJvY2VzcyBjb250ZXh0OyB0aGV5IG1heSBzbGVlcCwgdGFrZVxuKyAqIHJ0bmwsIGFuZCBjYWxsIG9mX3BzZV9jb250cm9sX2dldCgpLiBUaGUgY2hhaW4gZmlyZXMgc3luY2hyb25vdXNseSxcbisgKiBzbyBhIFBTRSBjb250cm9sbGVyIGRyaXZlcidzIHByb2JlL3VuYmluZCBwYXRoIG11c3Qgbm90IGhvbGQgYW55XG4rICogc3VjaCBsb2NrIHdoZW4gY2FsbGluZyBwc2VfY29udHJvbGxlcl9yZWdpc3RlcigpIG9yXG4rICogcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcigpLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLlxuKyAqL1xuK2ludCBwc2VfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYilcbit7XG4rXHRyZXR1cm4gYmxvY2tpbmdfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoXHUwMDI2cHNlX2NvbnRyb2xsZXJfbm90aWZpZXIsIG5iKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwocHNlX3JlZ2lzdGVyX25vdGlmaWVyKTtcbitcbisvKipcbisgKiBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllciAtIHVucmVnaXN0ZXIgYSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgY2FsbGJhY2tcbisgKiBAbmI6IG5vdGlmaWVyIGJsb2NrIHByZXZpb3VzbHkgcGFzc2VkIHRvIHBzZV9yZWdpc3Rlcl9ub3RpZmllcigpXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuXG4rICovXG4raW50IHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpXG4re1xuK1x0cmV0dXJuIGJsb2NraW5nX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoXHUwMDI2cHNlX2NvbnRyb2xsZXJfbm90aWZpZXIsIG5iKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwocHNlX3VucmVnaXN0ZXJfbm90aWZpZXIpO1xuK1xuIC8qKlxuICAqIHN0cnVjdCBwc2VfY29udHJvbCAtIGEgUFNFIGNvbnRyb2xcbiAgKiBAcGNkZXY6IGEgcG9pbnRlciB0byB0aGUgUFNFIGNvbnRyb2xsZXIgZGV2aWNlXG5AQCAtMTEwNCw2ICsxMTM4LDkgQEAgaW50IHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxuIFx0bGlzdF9hZGQoXHUwMDI2cGNkZXYtXHUwMDNlbGlzdCwgXHUwMDI2cHNlX2NvbnRyb2xsZXJfbGlzdCk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2cHNlX2xpc3RfbXV0ZXgpO1xuIFxuK1x0YmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbihcdTAwMjZwc2VfY29udHJvbGxlcl9ub3RpZmllcixcbitcdFx0XHRcdCAgICAgUFNFX1JFR0lTVEVSRUQsIHBjZGV2KTtcbitcbiBcdHJldHVybiAwO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChwc2VfY29udHJvbGxlcl9yZWdpc3Rlcik7XG5AQCAtMTExNCw2ICsxMTUxLDkgQEAgRVhQT1JUX1NZTUJPTF9HUEwocHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIpO1xuICAqL1xuIHZvaWQgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcihzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldilcbiB7XG4rXHRibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKFx1MDAyNnBzZV9jb250cm9sbGVyX25vdGlmaWVyLFxuK1x0XHRcdFx0ICAgICBQU0VfVU5SRUdJU1RFUkVELCBwY2Rldik7XG4rXG4gXHRwc2VfZmx1c2hfcHdfZHMocGNkZXYpO1xuIFx0cHNlX3JlbGVhc2VfcGlzKHBjZGV2KTtcbiBcdGlmIChwY2Rldi1cdTAwM2VpcnEpXG5AQCAtMTk4MSwzICsyMDIxLDE3IEBAIGJvb2wgcHNlX2hhc19jMzMoc3RydWN0IHBzZV9jb250cm9sICpwc2VjKVxuIFx0cmV0dXJuIHBzZWMtXHUwMDNlcGNkZXYtXHUwMDNldHlwZXMgXHUwMDI2IEVUSFRPT0xfUFNFX0MzMztcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwocHNlX2hhc19jMzMpO1xuK1xuKy8qKlxuKyAqIHBzZV9jb250cm9sX21hdGNoZXNfcGNkZXYgLSBUZXN0IHdoZXRoZXIgYSBwc2VfY29udHJvbCB0YXJnZXRzIGEgY29udHJvbGxlclxuKyAqIEBwc2VjOiBwc2VfY29udHJvbCBvYnRhaW5lZCBmcm9tIG9mX3BzZV9jb250cm9sX2dldCgpXG4rICogQHBjZGV2OiBQU0UgY29udHJvbGxlciB0byBjb21wYXJlIGFnYWluc3RcbisgKlxuKyAqIFJldHVybjogJXRydWUgaWYgQHBzZWMgd2FzIG9idGFpbmVkIGZyb20gQHBjZGV2LCAlZmFsc2Ugb3RoZXJ3aXNlLlxuKyAqL1xuK2Jvb2wgcHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldihzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxuK3tcbitcdHJldHVybiBwc2VjLVx1MDAzZXBjZGV2ID09IHBjZGV2O1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2KTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaFxuaW5kZXggMTk5YTdhYWEzNDFiZi4uNTVhMDA0OWM2YzJiNSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5LmhcbkBAIC0yMTU4LDggKzIxNTgsMTIgQEAgc3RydWN0IHBoeV9kZXZpY2UgKmZ3bm9kZV9waHlfZmluZF9kZXZpY2Uoc3RydWN0IGZ3bm9kZV9oYW5kbGUgKnBoeV9md25vZGUpO1xuIHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGVfZ2V0X3BoeV9ub2RlKGNvbnN0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpO1xuIHN0cnVjdCBwaHlfZGV2aWNlICpnZXRfcGh5X2RldmljZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgYm9vbCBpc19jNDUpO1xuIGludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpO1xuKy8qIENhbGxlciBtdXN0IGhvbGQgcnRubF9sb2NrKCk7IHNlZSBwaHlfZGV2aWNlX3JlZ2lzdGVyKCkgZm9yIHRoZSBwdWJsaWMgZm9ybS4gKi9cbitpbnQgcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeSk7XG4gdm9pZCBwaHlfZGV2aWNlX2ZyZWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gdm9pZCBwaHlfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbit2b2lkIHBoeV9wc2VfY29udHJvbF9sb2NrKHZvaWQpO1xuK3ZvaWQgcGh5X3BzZV9jb250cm9sX3VubG9jayh2b2lkKTtcbiBpbnQgcGh5X2dldF9jNDVfaWRzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIGludCBwaHlfaW5pdF9odyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiBpbnQgcGh5X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wc2UtcGQvcHNlLmggYi9pbmNsdWRlL2xpbnV4L3BzZS1wZC9wc2UuaFxuaW5kZXggNGU1Njk2Y2ZhZGU3Yy4uZDQzMTBjYTcxYTNlMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcHNlLXBkL3BzZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BzZS1wZC9wc2UuaFxuQEAgLTIxLDYgKzIxLDcgQEAgc3RydWN0IG5ldF9kZXZpY2U7XG4gc3RydWN0IHBoeV9kZXZpY2U7XG4gc3RydWN0IHBzZV9jb250cm9sbGVyX2RldjtcbiBzdHJ1Y3QgbmV0bGlua19leHRfYWNrO1xuK3N0cnVjdCBub3RpZmllcl9ibG9jaztcbiBcbiAvKiBDMzMgUFNFIGV4dGVuZGVkIHN0YXRlIGFuZCBzdWJzdGF0ZS4gKi9cbiBzdHJ1Y3QgZXRodG9vbF9jMzNfcHNlX2V4dF9zdGF0ZV9pbmZvIHtcbkBAIC0zMzcsNiArMzM4LDI0IEBAIGVudW0gcHNlX2J1ZGdldF9ldmFsX3N0cmF0ZWdpZXMge1xuIFx0UFNFX0JVREdFVF9FVkFMX1NUUkFUX0RZTkFNSUNcdD0gMSBcdTAwM2NcdTAwM2MgMixcbiB9O1xuIFxuKy8qKlxuKyAqIGVudW0gcHNlX2NvbnRyb2xsZXJfZXZlbnQgLSBQU0UgY29udHJvbGxlciBsaWZlY3ljbGUgZXZlbnRzXG4rICpcbisgKiBFdmVudCBkYXRhIGluIGNhbGxiYWNrcyBpcyBhbHdheXMgYSBwb2ludGVyIHRvIHRoZSBzdHJ1Y3RcbisgKiBwc2VfY29udHJvbGxlcl9kZXYgZmlyaW5nIHRoZSBldmVudC5cbisgKlxuKyAqIEBQU0VfUkVHSVNURVJFRDogY29udHJvbGxlciBhZGRlZCB0byBwc2VfY29udHJvbGxlcl9saXN0IGFuZFxuKyAqXHRyZXNvbHZhYmxlIGJ5IG9mX3BzZV9jb250cm9sX2dldCgpLlxuKyAqIEBQU0VfVU5SRUdJU1RFUkVEOiBjb250cm9sbGVyIGFib3V0IHRvIGJlIHJlbW92ZWQgZnJvbVxuKyAqXHRwc2VfY29udHJvbGxlcl9saXN0LiBTdWJzY3JpYmVycyBob2xkaW5nIHBzZV9jb250cm9sIHJlZmVyZW5jZXNcbisgKlx0dGFyZ2V0aW5nIGl0IG11c3QgZHJvcCB0aGVtIGJlZm9yZSByZXR1cm5pbmcgYW5kIG11c3Qgbm90XG4rICpcdGFjcXVpcmUgbmV3IHJlZmVyZW5jZXMgZm9yIGl0LlxuKyAqL1xuK2VudW0gcHNlX2NvbnRyb2xsZXJfZXZlbnQge1xuK1x0UFNFX1JFR0lTVEVSRUQsXG4rXHRQU0VfVU5SRUdJU1RFUkVELFxuK307XG4rXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX1BTRV9DT05UUk9MTEVSKVxuIGludCBwc2VfY29udHJvbGxlcl9yZWdpc3RlcihzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2Rldik7XG4gdm9pZCBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KTtcbkBAIC0zNjYsNiArMzg1LDEyIEBAIGludCBwc2VfZXRodG9vbF9zZXRfcHJpbyhzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMsXG4gYm9vbCBwc2VfaGFzX3BvZGwoc3RydWN0IHBzZV9jb250cm9sICpwc2VjKTtcbiBib29sIHBzZV9oYXNfYzMzKHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYyk7XG4gXG4rYm9vbCBwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2KHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYyxcbitcdFx0XHQgICAgICAgc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpO1xuK1xuK2ludCBwc2VfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7XG4raW50IHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpO1xuK1xuICNlbHNlXG4gXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgcHNlX2NvbnRyb2wgKm9mX3BzZV9jb250cm9sX2dldChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsXG5AQCAtNDE2LDYgKzQ0MSwyMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcHNlX2hhc19jMzMoc3RydWN0IHBzZV9jb250cm9sICpwc2VjKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGJvb2wgcHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldihzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMsXG4rXHRcdFx0XHRcdCAgICAgc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXG4re1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludCBwc2VfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYilcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnQgcHNlX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYilcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gI2VuZGlmXG4gXG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvcHNlLXBkLmMgYi9uZXQvZXRodG9vbC9wc2UtcGQuY1xuaW5kZXggNzU3YzllMGNjODU2Zi4uNGVkZDlhNTE0ZGUxNCAxMDA2NDRcbi0tLSBhL25ldC9ldGh0b29sL3BzZS1wZC5jXG4rKysgYi9uZXQvZXRodG9vbC9wc2UtcGQuY1xuQEAgLTcxLDcgKzcxLDkgQEAgc3RhdGljIGludCBwc2VfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsXG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuK1x0cGh5X3BzZV9jb250cm9sX2xvY2soKTtcbiBcdHJldCA9IHBzZV9nZXRfcHNlX2F0dHJpYnV0ZXMocGh5ZGV2LCBpbmZvLVx1MDAzZWV4dGFjaywgZGF0YSk7XG4rXHRwaHlfcHNlX2NvbnRyb2xfdW5sb2NrKCk7XG4gXG4gXHRldGhubF9vcHNfY29tcGxldGUoZGV2KTtcbiBcbkBAIC0yODEsOSArMjgzLDEyIEBAIGV0aG5sX3NldF9wc2Uoc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbywgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcbiBcdHBoeWRldiA9IGV0aG5sX3JlcV9nZXRfcGh5ZGV2KHJlcV9pbmZvLCB0YiwgRVRIVE9PTF9BX1BTRV9IRUFERVIsXG4gXHRcdFx0XHQgICAgICBpbmZvLVx1MDAzZWV4dGFjayk7XG4rXG4rXHRwaHlfcHNlX2NvbnRyb2xfbG9jaygpO1xuK1xuIFx0cmV0ID0gZXRobmxfc2V0X3BzZV92YWxpZGF0ZShwaHlkZXYsIGluZm8pO1xuIFx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbitcdFx0Z290byBvdXQ7XG4gXG4gXHRpZiAodGJbRVRIVE9PTF9BX1BTRV9QUklPXSkge1xuIFx0XHR1bnNpZ25lZCBpbnQgcHJpbztcbkBAIC0yOTEsNyArMjk2LDcgQEAgZXRobmxfc2V0X3BzZShzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRwcmlvID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BTRV9QUklPXSk7XG4gXHRcdHJldCA9IHBzZV9ldGh0b29sX3NldF9wcmlvKHBoeWRldi1cdTAwM2Vwc2VjLCBpbmZvLVx1MDAzZWV4dGFjaywgcHJpbyk7XG4gXHRcdGlmIChyZXQpXG4tXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbiBcdGlmICh0YltFVEhUT09MX0FfQzMzX1BTRV9BVkFJTF9QV19MSU1JVF0pIHtcbkBAIC0zMDEsNyArMzA2LDcgQEAgZXRobmxfc2V0X3BzZShzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRyZXQgPSBwc2VfZXRodG9vbF9zZXRfcHdfbGltaXQocGh5ZGV2LVx1MDAzZXBzZWMsIGluZm8tXHUwMDNlZXh0YWNrLFxuIFx0XHRcdFx0XHQgICAgICAgcHdfbGltaXQpO1xuIFx0XHRpZiAocmV0KVxuLVx0XHRcdHJldHVybiByZXQ7XG4rXHRcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4gXHQvKiBUaGVzZSB2YWx1ZXMgYXJlIGFscmVhZHkgdmFsaWRhdGVkIGJ5IHRoZSBldGhubF9wc2Vfc2V0X3BvbGljeSAqL1xuQEAgLTMxOSwxMSArMzI0LDExIEBAIGV0aG5sX3NldF9wc2Uoc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbywgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0ICovXG4gXHRcdHJldCA9IHBzZV9ldGh0b29sX3NldF9jb25maWcocGh5ZGV2LVx1MDAzZXBzZWMsIGluZm8tXHUwMDNlZXh0YWNrLFxuIFx0XHRcdFx0XHQgICAgIFx1MDAyNmNvbmZpZyk7XG4tXHRcdGlmIChyZXQpXG4tXHRcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbitvdXQ6XG4gXHQvKiBSZXR1cm4gZXJybm8gb3IgemVybyAtIFBTRSBoYXMgbm8gbm90aWZpY2F0aW9uICovXG4rXHRwaHlfcHNlX2NvbnRyb2xfdW5sb2NrKCk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjEyOjM1LjYzMTY4MDE5NFoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjY3MzE3ODcxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBTRSBDb250cm9sbGVyIEludGVncmF0aW9uIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggc2VyaWVzIGlzIGFsbCBhYm91dCByZWZpbmluZyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQgKFBTRSkgY29udHJvbGxlcnMgYW5kIFBIWSBkZXZpY2VzIHdpdGhpbiB0aGUgTGludXgga2VybmVsLiBJdCdzIGZ1bmRhbWVudGFsbHkgY2hhbmdpbmcgaG93IGBwaHlkZXYtXHUwMDNlcHNlY2AgaXMgbWFuYWdlZCwgc2hpZnRpbmcgZnJvbSBkaXJlY3QgYXR0YWNobWVudC9kZXRhY2htZW50IGR1cmluZyBQSFkgcmVnaXN0cmF0aW9uL3VucmVnaXN0cmF0aW9uIHRvIGEgbm90aWZpZXItYmFzZWQgc3lzdGVtLiBUaGlzIHNvdW5kcyBsaWtlIGEgZ29vZCBtb3ZlIGZvciBpbXByb3ZlZCByb2J1c3RuZXNzIGFuZCBmbGV4aWJpbGl0eS5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IGNoZWNrIGZvciBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcHJvYmxlbXMuIFRoZSBjaGFuZ2VzIGludm9sdmUgYXR0YWNoaW5nL2RldGFjaGluZyB0aGUgYHBzZWNgLCB3aGljaCBpcyBhIHBvaW50ZXIuIEl0IGludHJvZHVjZXMgYSBgcGh5X3BzZV9ub3RpZmllcmAgZm9yIGF0dGFjaG1lbnQvZGV0YWNobWVudCBhbmQgYWRkcyBgcGh5X3BzZV9sb2NrYCB0byBzZXJpYWxpemUgYWNjZXNzIHRvIGBwaHlkZXYtXHUwMDNlcHNlY2AsIHByb3RlY3RpbmcgYWdhaW5zdCByYWNlcyBiZXR3ZWVuIHRoZSBub3RpZmllciBhbmQgYGV0aHRvb2xgIG9wZXJhdGlvbnMuIEFsc28sIGBldGhubF9zZXRfcHNlYCBhbmQgYHBzZV9wcmVwYXJlX2RhdGFgIGFyZSBtb2RpZmllZCB0byB1c2UgYHBoeV9wc2VfY29udHJvbF9sb2NrKClgIHdoZW4gaW50ZXJhY3Rpbmcgd2l0aCBgcGh5ZGV2LVx1MDAzZXBzZWNgLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiB0aGVzZSBjaGFuZ2VzIGV4cG9zZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcy4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IHJldm9sdmUgYXJvdW5kIHN5bmNocm9uaXphdGlvbiBhbmQgdGhlIG9iamVjdCBsaWZlY3ljbGUgb2YgYHBoeWRldi1cdTAwM2Vwc2VjYC4gVGhleSBkb24ndCBpbnRyb2R1Y2UgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2Ugb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy4gVGhlIHByaW1hcnkgZ29hbCBpcyB0byBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYnkgZW5zdXJpbmcgcHJvcGVyIGxvY2tpbmcgYW5kIGxpZmVjeWNsZSBtYW5hZ2VtZW50LiBUaGVzZSB0eXBlcyBvZiBpc3N1ZXMgYXJlIHVzdWFsbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBMT0NLREVQLlxuXG5MZXQncyBkaWcgZGVlcGVyIGludG8gYHBzZV9wcmVwYXJlX2RhdGFgLiBJdCBsb2NrcywgdGhlbiBjYWxscyBgcHNlX2dldF9wc2VfYXR0cmlidXRlc2AuIFRoZSBjcml0aWNhbCB0aGluZyBpcyB3aGV0aGVyIHRoZSBuZXcgbG9jayBhZmZlY3RzIGhvdyBgZGF0YWAgaXMgaW5pdGlhbGl6ZWQsIGJ1dCBubywgaXQganVzdCB3cmFwcyBhIGxvY2sgYXJvdW5kIGl0LiBJbiBgZXRobmxfc2V0X3BzZWAgaXQncyB0aGUgc2FtZSwgaXQganVzdCBhZGRzIGEgbG9jay5cblxuU28gdGhlIHBhdGNoIGFkZHMgYHBoeV9wc2VfY29udHJvbF9sb2NrKClgIGFuZCBgcGh5X3BzZV9jb250cm9sX3VubG9jaygpYCB3aGljaCBhcmUgd3JhcHBlcnMgYXJvdW5kIGBtdXRleF9sb2NrKFx1MDAyNnBoeV9wc2VfbG9jaylgIGFuZCBgbXV0ZXhfdW5sb2NrKFx1MDAyNnBoeV9wc2VfbG9jaylgLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgcHNlX3JlZ2lzdGVyX25vdGlmaWVyYCBhbmQgYHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyYC4gTm8sIHRoaXMgc2VlbXMgcGVyZmVjdGx5IHNhZmUuIFRoaXMgaXMgYWxsIGFib3V0IG9iamVjdCBsaWZlY3ljbGUgYW5kIG1ha2luZyBzdXJlIHRoZXJlIGFyZSBubyByYWNlcy5cblxuVWx0aW1hdGVseSwgdGhlc2UgY2hhbmdlcyBhcHBlYXIgdG8gYmUgc3BlY2lmaWNhbGx5IGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb24uIElmIGEgUFNFIGNvbnRyb2xsZXIgdW5yZWdpc3RlcnMgd2hpbGUgYSBQSFkgaXMgc3RpbGwgcmVmZXJlbmNpbmcgaXQuIEtBU0FOIGlzIHRoZSByaWdodCB0b29sIGZvciB0aGVzZSwgbm90IEtNU0FOLlxuXG5JJ2xsIGRvdWJsZSBjaGVjayB0aGUgYHBoeV90cnlfYXR0YWNoX3BzZWAgZnVuY3Rpb24gYXMgYSBmaW5hbCBzYW5pdHkgY2hlY2ssIGJ1dCBJJ20gbm90IHNlZWluZyBhbnl0aGluZyB0aGF0IHdvdWxkIHJlc3VsdCBpbiBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25kaXRpb24gdGhlcmUuXG5cbkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlc2UgY2hhbmdlcywgSSdtIGNvbmZpZGVudCB0aGVyZSBhcmUgbm8gS01TQU4gY29uY2VybnMuIFRoZSBwYXRjaCdzIGZvY3VzIGlzIG9uIGxpZmVjeWNsZSBhbmQgc3luY2hyb25pemF0aW9uLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgTmVlZHNLTVNBTiBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzNzIsIk91dHB1dFRva2VucyI6MjEzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODY5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6MTI6NDguMzA0ODYzNDhaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyByZWZhY3RvcnMgdGhlIGxpZmVjeWNsZSBhbmQgc3luY2hyb25pemF0aW9uIG9mIFBTRSAoUG93ZXIgU291cmNpbmcgRXF1aXBtZW50KSBjb250cm9sbGVycyBhdHRhY2hlZCB0byBQSFkgZGV2aWNlcy4gSXQgaW50cm9kdWNlcyBhIG5vdGlmaWVyIGNoYWluIChgcGh5X3BzZV9ub3RpZmllcmApIGFuZCBhIG11dGV4IChgcGh5X3BzZV9sb2NrYCkgdG8gc2FmZWx5IGF0dGFjaCBhbmQgZGV0YWNoIGBwaHlkZXYtXFx1MDAzZXBzZWNgIHdoZW4gUFNFIGNvbnRyb2xsZXJzIGFyZSByZWdpc3RlcmVkIG9yIHVucmVnaXN0ZXJlZCwgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIEl0IGFsc28gd3JhcHMgZXRodG9vbCBQU0Ugb3BlcmF0aW9ucyB3aXRoIHRoZSBuZXcgbG9jay5cXG5cXG5UaGVzZSBjaGFuZ2VzIHByaW1hcmlseSBhZGRyZXNzIG9iamVjdCBsaWZlY3ljbGUgbWFuYWdlbWVudCwgbG9ja2luZywgYW5kIHN5bmNocm9uaXphdGlvbi4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGxpa2VseSBtYW5pZmVzdCBhcyB1c2UtYWZ0ZXItZnJlZSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgZGVhZGxvY2tzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvbXBsZXggYnVmZmVyIGFsbG9jYXRpb25zIG9yIG1vZGlmaWNhdGlvbnMgdG8gZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyByZWZhY3RvcnMgdGhlIGxpZmVjeWNsZSBhbmQgc3luY2hyb25pemF0aW9uIG9mIFBTRSAoUG93ZXIgU291cmNpbmcgRXF1aXBtZW50KSBjb250cm9sbGVycyBhdHRhY2hlZCB0byBQSFkgZGV2aWNlcy4gSXQgaW50cm9kdWNlcyBhIG5vdGlmaWVyIGNoYWluIChgcGh5X3BzZV9ub3RpZmllcmApIGFuZCBhIG11dGV4IChgcGh5X3BzZV9sb2NrYCkgdG8gc2FmZWx5IGF0dGFjaCBhbmQgZGV0YWNoIGBwaHlkZXYtXFx1MDAzZXBzZWNgIHdoZW4gUFNFIGNvbnRyb2xsZXJzIGFyZSByZWdpc3RlcmVkIG9yIHVucmVnaXN0ZXJlZCwgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIEl0IGFsc28gd3JhcHMgZXRodG9vbCBQU0Ugb3BlcmF0aW9ucyB3aXRoIHRoZSBuZXcgbG9jay5cXG5cXG5UaGVzZSBjaGFuZ2VzIHByaW1hcmlseSBhZGRyZXNzIG9iamVjdCBsaWZlY3ljbGUgbWFuYWdlbWVudCwgbG9ja2luZywgYW5kIHN5bmNocm9uaXphdGlvbi4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGxpa2VseSBtYW5pZmVzdCBhcyB1c2UtYWZ0ZXItZnJlZSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgZGVhZGxvY2tzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvbXBsZXggYnVmZmVyIGFsbG9jYXRpb25zIG9yIG1vZGlmaWNhdGlvbnMgdG8gZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwdljw[1] Phase: Succeeded StartedAt: 2026-08-26 22:13:00 +0000 UTC FinishedAt: 2026-08-26 22:13:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdljw[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-26 22:13:00 +0000 UTC FinishedAt: 2026-08-26 22:13:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdljw[2] Phase: Succeeded StartedAt: 2026-08-26 22:13:00 +0000 UTC FinishedAt: 2026-08-27 01:54:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdljw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_pse_control_lock","phy_pse_control_unlock","phy_device_register_locked","phy_device_register","phy_device_remove","pse_register_notifier","pse_unregister_notifier","pse_controller_register","pse_controller_unregister","pse_control_matches_pcdev","ethnl_set_pse","pse_prepare_data","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"series_id":"7caaeb04-ab90-43fe-8f30-4fb82429bee1","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-26 22:13:00 +0000 UTC FinishedAt: 2026-08-27 01:54:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_pse_control_lock","phy_pse_control_unlock","phy_device_register_locked","phy_device_register","phy_device_remove","pse_register_notifier","pse_unregister_notifier","pse_controller_register","pse_controller_unregister","pse_control_matches_pcdev","ethnl_set_pse","pse_prepare_data","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"series_id":"7caaeb04-ab90-43fe-8f30-4fb82429bee1","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-workflowwdljw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_pse_control_lock","phy_pse_control_unlock","phy_device_register_locked","phy_device_register","phy_device_remove","pse_register_notifier","pse_unregister_notifier","pse_controller_register","pse_controller_unregister","pse_control_matches_pcdev","ethnl_set_pse","pse_prepare_data","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"series_id":"7caaeb04-ab90-43fe-8f30-4fb82429bee1","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-26 22:13:00 +0000 UTC FinishedAt: 2026-08-26 22:13:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdljw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_pse_control_lock","phy_pse_control_unlock","phy_device_register_locked","phy_device_register","phy_device_remove","pse_register_notifier","pse_unregister_notifier","pse_controller_register","pse_controller_unregister","pse_control_matches_pcdev","ethnl_set_pse","pse_prepare_data","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"series_id":"7caaeb04-ab90-43fe-8f30-4fb82429bee1","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-26 22:13:00 +0000 UTC FinishedAt: 2026-08-26 22:13:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"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-workflowwdljw/series-workflowwdljw-convert-artifact-2689858227/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwdljw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_pse_control_lock","phy_pse_control_unlock","phy_device_register_locked","phy_device_register","phy_device_remove","pse_register_notifier","pse_unregister_notifier","pse_controller_register","pse_controller_unregister","pse_control_matches_pcdev","ethnl_set_pse","pse_prepare_data","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"series_id":"7caaeb04-ab90-43fe-8f30-4fb82429bee1","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-26 22:13:10 +0000 UTC FinishedAt: 2026-08-26 22:29:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdljw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_pse_control_lock","phy_pse_control_unlock","phy_device_register_locked","phy_device_register","phy_device_remove","pse_register_notifier","pse_unregister_notifier","pse_controller_register","pse_controller_unregister","pse_control_matches_pcdev","ethnl_set_pse","pse_prepare_data","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"series_id":"7caaeb04-ab90-43fe-8f30-4fb82429bee1","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-26 22:13:10 +0000 UTC FinishedAt: 2026-08-26 22:29:08 +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:*12dd0f4d-136e-4f7d-9228-4bc77cbc58ee,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-workflowwdljw/series-workflowwdljw-convert-artifact-2689858227/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": "d65f6998-8d2d-4e84-94ab-ad1e2dd3e892", "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-workflowwdljw/series-workflowwdljw-build-action-1538925921/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwdljw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_pse_control_lock","phy_pse_control_unlock","phy_device_register_locked","phy_device_register","phy_device_remove","pse_register_notifier","pse_unregister_notifier","pse_controller_register","pse_controller_unregister","pse_control_matches_pcdev","ethnl_set_pse","pse_prepare_data","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"series_id":"7caaeb04-ab90-43fe-8f30-4fb82429bee1","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-26 22:13:10 +0000 UTC FinishedAt: 2026-08-26 22:28:58 +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:*12dd0f4d-136e-4f7d-9228-4bc77cbc58ee,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-workflowwdljw/series-workflowwdljw-convert-artifact-2689858227/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": "d65f6998-8d2d-4e84-94ab-ad1e2dd3e892", "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-workflowwdljw/series-workflowwdljw-build-action-1538925921/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwdljw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_pse_control_lock","phy_pse_control_unlock","phy_device_register_locked","phy_device_register","phy_device_remove","pse_register_notifier","pse_unregister_notifier","pse_controller_register","pse_controller_unregister","pse_control_matches_pcdev","ethnl_set_pse","pse_prepare_data","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"series_id":"7caaeb04-ab90-43fe-8f30-4fb82429bee1","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-26 22:29:08 +0000 UTC FinishedAt: 2026-08-26 22:29:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdljw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_pse_control_lock","phy_pse_control_unlock","phy_device_register_locked","phy_device_register","phy_device_remove","pse_register_notifier","pse_unregister_notifier","pse_controller_register","pse_controller_unregister","pse_control_matches_pcdev","ethnl_set_pse","pse_prepare_data","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"series_id":"7caaeb04-ab90-43fe-8f30-4fb82429bee1","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-26 22:29:08 +0000 UTC FinishedAt: 2026-08-26 22:29:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdljw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_pse_control_lock","phy_pse_control_unlock","phy_device_register_locked","phy_device_register","phy_device_remove","pse_register_notifier","pse_unregister_notifier","pse_controller_register","pse_controller_unregister","pse_control_matches_pcdev","ethnl_set_pse","pse_prepare_data","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"series_id":"7caaeb04-ab90-43fe-8f30-4fb82429bee1","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-26 22:29:08 +0000 UTC FinishedAt: 2026-08-26 22:29:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdljw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_pse_control_lock","phy_pse_control_unlock","phy_device_register_locked","phy_device_register","phy_device_remove","pse_register_notifier","pse_unregister_notifier","pse_controller_register","pse_controller_unregister","pse_control_matches_pcdev","ethnl_set_pse","pse_prepare_data","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"series_id":"7caaeb04-ab90-43fe-8f30-4fb82429bee1","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-26 22:29:08 +0000 UTC FinishedAt: 2026-08-26 22:29:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"series_id":"7caaeb04-ab90-43fe-8f30-4fb82429bee1","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-workflowwdljw/series-workflowwdljw-convert-artifact-1924527274/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwdljw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_pse_control_lock","phy_pse_control_unlock","phy_device_register_locked","phy_device_register","phy_device_remove","pse_register_notifier","pse_unregister_notifier","pse_controller_register","pse_controller_unregister","pse_control_matches_pcdev","ethnl_set_pse","pse_prepare_data","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"series_id":"7caaeb04-ab90-43fe-8f30-4fb82429bee1","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-26 22:29:19 +0000 UTC FinishedAt: 2026-08-26 22:31:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdljw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_pse_control_lock","phy_pse_control_unlock","phy_device_register_locked","phy_device_register","phy_device_remove","pse_register_notifier","pse_unregister_notifier","pse_controller_register","pse_controller_unregister","pse_control_matches_pcdev","ethnl_set_pse","pse_prepare_data","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"series_id":"7caaeb04-ab90-43fe-8f30-4fb82429bee1","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-26 22:29:19 +0000 UTC FinishedAt: 2026-08-26 22:31:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d65f6998-8d2d-4e84-94ab-ad1e2dd3e892,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-workflowwdljw/series-workflowwdljw-build-action-1538925921/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-workflowwdljw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_pse_control_lock","phy_pse_control_unlock","phy_device_register_locked","phy_device_register","phy_device_remove","pse_register_notifier","pse_unregister_notifier","pse_controller_register","pse_controller_unregister","pse_control_matches_pcdev","ethnl_set_pse","pse_prepare_data","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"series_id":"7caaeb04-ab90-43fe-8f30-4fb82429bee1","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-26 22:31:17 +0000 UTC FinishedAt: 2026-08-26 22:31:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdljw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_pse_control_lock","phy_pse_control_unlock","phy_device_register_locked","phy_device_register","phy_device_remove","pse_register_notifier","pse_unregister_notifier","pse_controller_register","pse_controller_unregister","pse_control_matches_pcdev","ethnl_set_pse","pse_prepare_data","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"series_id":"7caaeb04-ab90-43fe-8f30-4fb82429bee1","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-26 22:31:17 +0000 UTC FinishedAt: 2026-08-26 22:31:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdljw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_pse_control_lock","phy_pse_control_unlock","phy_device_register_locked","phy_device_register","phy_device_remove","pse_register_notifier","pse_unregister_notifier","pse_controller_register","pse_controller_unregister","pse_control_matches_pcdev","ethnl_set_pse","pse_prepare_data","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"series_id":"7caaeb04-ab90-43fe-8f30-4fb82429bee1","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-26 22:31:17 +0000 UTC FinishedAt: 2026-08-26 22:47:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdljw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_pse_control_lock","phy_pse_control_unlock","phy_device_register_locked","phy_device_register","phy_device_remove","pse_register_notifier","pse_unregister_notifier","pse_controller_register","pse_controller_unregister","pse_control_matches_pcdev","ethnl_set_pse","pse_prepare_data","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"series_id":"7caaeb04-ab90-43fe-8f30-4fb82429bee1","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-26 22:31:17 +0000 UTC FinishedAt: 2026-08-26 22:47:33 +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:*12dd0f4d-136e-4f7d-9228-4bc77cbc58ee,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-workflowwdljw/series-workflowwdljw-convert-artifact-1924527274/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": "cd60312a-3d28-43df-ac26-630e73f748af", "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-workflowwdljw/series-workflowwdljw-build-action-4240116686/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwdljw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_pse_control_lock","phy_pse_control_unlock","phy_device_register_locked","phy_device_register","phy_device_remove","pse_register_notifier","pse_unregister_notifier","pse_controller_register","pse_controller_unregister","pse_control_matches_pcdev","ethnl_set_pse","pse_prepare_data","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"series_id":"7caaeb04-ab90-43fe-8f30-4fb82429bee1","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-26 22:31:17 +0000 UTC FinishedAt: 2026-08-26 22:47:25 +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:*12dd0f4d-136e-4f7d-9228-4bc77cbc58ee,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-workflowwdljw/series-workflowwdljw-convert-artifact-1924527274/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": "cd60312a-3d28-43df-ac26-630e73f748af", "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-workflowwdljw/series-workflowwdljw-build-action-4240116686/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwdljw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_pse_control_lock","phy_pse_control_unlock","phy_device_register_locked","phy_device_register","phy_device_remove","pse_register_notifier","pse_unregister_notifier","pse_controller_register","pse_controller_unregister","pse_control_matches_pcdev","ethnl_set_pse","pse_prepare_data","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"series_id":"7caaeb04-ab90-43fe-8f30-4fb82429bee1","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-26 22:47:33 +0000 UTC FinishedAt: 2026-08-26 22:47:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdljw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_pse_control_lock","phy_pse_control_unlock","phy_device_register_locked","phy_device_register","phy_device_remove","pse_register_notifier","pse_unregister_notifier","pse_controller_register","pse_controller_unregister","pse_control_matches_pcdev","ethnl_set_pse","pse_prepare_data","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"series_id":"7caaeb04-ab90-43fe-8f30-4fb82429bee1","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-26 22:47:33 +0000 UTC FinishedAt: 2026-08-26 22:47:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdljw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_pse_control_lock","phy_pse_control_unlock","phy_device_register_locked","phy_device_register","phy_device_remove","pse_register_notifier","pse_unregister_notifier","pse_controller_register","pse_controller_unregister","pse_control_matches_pcdev","ethnl_set_pse","pse_prepare_data","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"series_id":"7caaeb04-ab90-43fe-8f30-4fb82429bee1","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-26 22:47:33 +0000 UTC FinishedAt: 2026-08-26 22:49:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdljw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_pse_control_lock","phy_pse_control_unlock","phy_device_register_locked","phy_device_register","phy_device_remove","pse_register_notifier","pse_unregister_notifier","pse_controller_register","pse_controller_unregister","pse_control_matches_pcdev","ethnl_set_pse","pse_prepare_data","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"series_id":"7caaeb04-ab90-43fe-8f30-4fb82429bee1","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-26 22:47:33 +0000 UTC FinishedAt: 2026-08-26 22:49:26 +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:*cd60312a-3d28-43df-ac26-630e73f748af,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-workflowwdljw/series-workflowwdljw-build-action-4240116686/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-workflowwdljw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_pse_control_lock","phy_pse_control_unlock","phy_device_register_locked","phy_device_register","phy_device_remove","pse_register_notifier","pse_unregister_notifier","pse_controller_register","pse_controller_unregister","pse_control_matches_pcdev","ethnl_set_pse","pse_prepare_data","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"series_id":"7caaeb04-ab90-43fe-8f30-4fb82429bee1","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-26 22:49:36 +0000 UTC FinishedAt: 2026-08-27 01:54:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdljw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_pse_control_lock","phy_pse_control_unlock","phy_device_register_locked","phy_device_register","phy_device_remove","pse_register_notifier","pse_unregister_notifier","pse_controller_register","pse_controller_unregister","pse_control_matches_pcdev","ethnl_set_pse","pse_prepare_data","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"series_id":"7caaeb04-ab90-43fe-8f30-4fb82429bee1","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-26 22:49:36 +0000 UTC FinishedAt: 2026-08-27 01:54:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_pse_control_lock","phy_pse_control_unlock","phy_device_register_locked","phy_device_register","phy_device_remove","pse_register_notifier","pse_unregister_notifier","pse_controller_register","pse_controller_unregister","pse_control_matches_pcdev","ethnl_set_pse","pse_prepare_data","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event"],"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:*d65f6998-8d2d-4e84-94ab-ad1e2dd3e892,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cd60312a-3d28-43df-ac26-630e73f748af,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-workflowwdljw/series-workflowwdljw-build-action-1538925921/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-workflowwdljw/series-workflowwdljw-build-action-4240116686/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowwdljw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_pse_control_lock","phy_pse_control_unlock","phy_device_register_locked","phy_device_register","phy_device_remove","pse_register_notifier","pse_unregister_notifier","pse_controller_register","pse_controller_unregister","pse_control_matches_pcdev","ethnl_set_pse","pse_prepare_data","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"series_id":"7caaeb04-ab90-43fe-8f30-4fb82429bee1","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-26 22:49:36 +0000 UTC FinishedAt: 2026-08-26 22:49:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdljw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_pse_control_lock","phy_pse_control_unlock","phy_device_register_locked","phy_device_register","phy_device_remove","pse_register_notifier","pse_unregister_notifier","pse_controller_register","pse_controller_unregister","pse_control_matches_pcdev","ethnl_set_pse","pse_prepare_data","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"series_id":"7caaeb04-ab90-43fe-8f30-4fb82429bee1","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-26 22:49:36 +0000 UTC FinishedAt: 2026-08-26 22:49:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_pse_control_lock","phy_pse_control_unlock","phy_device_register_locked","phy_device_register","phy_device_remove","pse_register_notifier","pse_unregister_notifier","pse_controller_register","pse_controller_unregister","pse_control_matches_pcdev","ethnl_set_pse","pse_prepare_data","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event"],"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-workflowwdljw/series-workflowwdljw-convert-artifact-73050175/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwdljw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_pse_control_lock","phy_pse_control_unlock","phy_device_register_locked","phy_device_register","phy_device_remove","pse_register_notifier","pse_unregister_notifier","pse_controller_register","pse_controller_unregister","pse_control_matches_pcdev","ethnl_set_pse","pse_prepare_data","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"series_id":"7caaeb04-ab90-43fe-8f30-4fb82429bee1","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-26 22:49:36 +0000 UTC FinishedAt: 2026-08-26 22:49:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdljw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_pse_control_lock","phy_pse_control_unlock","phy_device_register_locked","phy_device_register","phy_device_remove","pse_register_notifier","pse_unregister_notifier","pse_controller_register","pse_controller_unregister","pse_control_matches_pcdev","ethnl_set_pse","pse_prepare_data","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"series_id":"7caaeb04-ab90-43fe-8f30-4fb82429bee1","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-26 22:49:36 +0000 UTC FinishedAt: 2026-08-26 22:49:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdljw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_pse_control_lock","phy_pse_control_unlock","phy_device_register_locked","phy_device_register","phy_device_remove","pse_register_notifier","pse_unregister_notifier","pse_controller_register","pse_controller_unregister","pse_control_matches_pcdev","ethnl_set_pse","pse_prepare_data","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"series_id":"7caaeb04-ab90-43fe-8f30-4fb82429bee1","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-26 22:49:36 +0000 UTC FinishedAt: 2026-08-26 22:49:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdljw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_pse_control_lock","phy_pse_control_unlock","phy_device_register_locked","phy_device_register","phy_device_remove","pse_register_notifier","pse_unregister_notifier","pse_controller_register","pse_controller_unregister","pse_control_matches_pcdev","ethnl_set_pse","pse_prepare_data","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"series_id":"7caaeb04-ab90-43fe-8f30-4fb82429bee1","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-26 22:49:46 +0000 UTC FinishedAt: 2026-08-27 01:54:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdljw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_pse_control_lock","phy_pse_control_unlock","phy_device_register_locked","phy_device_register","phy_device_remove","pse_register_notifier","pse_unregister_notifier","pse_controller_register","pse_controller_unregister","pse_control_matches_pcdev","ethnl_set_pse","pse_prepare_data","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cef9d6804030793cf8b8796fd6936197d065dd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","REGULATOR","SFP","FWNODE_MDIO"],"series_id":"7caaeb04-ab90-43fe-8f30-4fb82429bee1","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-26 22:49:46 +0000 UTC FinishedAt: 2026-08-27 01:54:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d65f6998-8d2d-4e84-94ab-ad1e2dd3e892,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cd60312a-3d28-43df-ac26-630e73f748af,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-workflowwdljw/series-workflowwdljw-build-action-1538925921/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-workflowwdljw/series-workflowwdljw-build-action-4240116686/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-workflowwdljw/series-workflowwdljw-convert-artifact-73050175/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,}