Name: series-workflownllmn Phase: Succeeded StartedAt: 2026-08-08 21:42:16 +0000 UTC FinishedAt: 2026-08-09 01:25:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflownllmn[0] Phase: Succeeded StartedAt: 2026-08-08 21:42:16 +0000 UTC FinishedAt: 2026-08-08 21:45:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflownllmn[0].run-triage Phase: Succeeded StartedAt: 2026-08-08 21:42:16 +0000 UTC FinishedAt: 2026-08-08 21:45:02 +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": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BT", "BT_HCIVHCI", "BT_BREDR", "BT_LE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BT", "BT_HCIVHCI", "BT_BREDR", "BT_LE" ], "series_id": "09d5ca51-a09e-4e69-b1b3-6e379b5928fa" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "hci_send_acl", "hci_send_sco", "hci_send_iso" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjQ0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JUJiMzNDssCiAgICAmIzM0O0JUX0hDSVZIQ0kmIzM0OywKICAgICYjMzQ7QlRfQlJFRFImIzM0OywKICAgICYjMzQ7QlRfTEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoY2lfc2VuZF9hY2wmIzM0OywKICAgICYjMzQ7aGNpX3NlbmRfc2NvJiMzNDssCiAgICAmIzM0O2hjaV9zZW5kX2lzbyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBzdGF0ZSBjaGVjayAoYHRlc3RfYml0KEhDSV9VUCwgXHUwMDI2aGRldi1cdTAwM2VmbGFncylgKSBiZWZvcmUgcXVldWluZyBUWCB3b3JrIChgcXVldWVfd29ya2ApIGZvciBBQ0wsIFNDTywgYW5kIElTTyBkYXRhIGluIHRoZSBCbHVldG9vdGggSENJIGNvcmUuIFRoaXMgcHJldmVudHMgcXVldWluZyB3b3JrIHdoZW4gdGhlIEhDSSBkZXZpY2UgaXMgbm90IGluIHRoZSBVUCBzdGF0ZSwgd2hpY2ggbGlrZWx5IGFkZHJlc3NlcyBhIHVzZS1hZnRlci1mcmVlLCByYWNlIGNvbmRpdGlvbiwgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGJ1ZyAoZS5nLiwgaWYgdGhlIHdvcmtxdWV1ZSBpcyBkZXN0cm95ZWQgb3IgdGhlIGRldmljZSBpcyBiZWluZyB0b3JuIGRvd24pLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSByZWxhdGVkIHRvIG9iamVjdCBsaWZldGltZXMgYW5kIGNvbmN1cnJlbmN5LCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gKGZvciB1c2UtYWZ0ZXItZnJlZSkgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBtb2RpZmljYXRpb25zIHRvIGRhdGEgc2VudCB0byB1c2VyIHNwYWNlLiBJdCBkb2VzIG5vdCBpbnZvbHZlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEJsdWV0b290aCBkYXRhIHRyYW5zbWlzc2lvbiBmdW5jdGlvbnMgKGhjaV9zZW5kX2FjbCwgaGNpX3NlbmRfc2NvLCBoY2lfc2VuZF9pc28pIHRvIGNoZWNrIGlmIHRoZSBkZXZpY2UgaXMgdXAgYmVmb3JlIHF1ZXVpbmcgdGhlIHRyYW5zbWlzc2lvbiB3b3JrLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBpc3N1ZXMgZHVyaW5nIGRldmljZSB0ZWFyZG93biBhbmQgaXMgcmVhY2hhYmxlIHZpYSB2aXJ0dWFsIEhDSSBkZXZpY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjQ0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZDQ3ZDMwY2Q4Y2VlMTUwNThlZjhiYTRlN2FkZDE3MjQ0ODYyNmFlMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDggMjE6NDQ6MDkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jIGIvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jXG5pbmRleCA1YmE5ZmU4MjYxZWM4Li5kOWYwOTFhZjM2MTgzIDEwMDY0NFxuLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmNcbkBAIC0zMjQyLDcgJiM0MzszMjQyLDggQEAgdm9pZCBoY2lfc2VuZF9hY2woc3RydWN0IGhjaV9jaGFuICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX3UxNiBmbGFncylcbiBcbiBcdGhjaV9xdWV1ZV9hY2woY2hhbiwgXHUwMDI2Y2hhbi1cdTAwM2VkYXRhX3EsIHNrYiwgZmxhZ3MpO1xuIFxuLVx0cXVldWVfd29yayhoZGV2LVx1MDAzZXdvcmtxdWV1ZSwgXHUwMDI2aGRldi1cdTAwM2V0eF93b3JrKTtcbiYjNDM7XHRpZiAodGVzdF9iaXQoSENJX1VQLCBcdTAwMjZoZGV2LVx1MDAzZWZsYWdzKSlcbiYjNDM7XHRcdHF1ZXVlX3dvcmsoaGRldi1cdTAwM2V3b3JrcXVldWUsIFx1MDAyNmhkZXYtXHUwMDNldHhfd29yayk7XG4gfVxuIFxuIC8qIFNlbmQgU0NPIGRhdGEgKi9cbkBAIC0zMjY3LDcgJiM0MzszMjY4LDggQEAgdm9pZCBoY2lfc2VuZF9zY28oc3RydWN0IGhjaV9jb25uICpjb25uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0YnRfZGV2X2RiZyhoZGV2LCBcJiMzNDtoY29uICVwIHF1ZXVlZCAlZFwmIzM0OywgY29ubixcbiBcdFx0ICAgc2tiX3F1ZXVlX2xlbihcdTAwMjZjb25uLVx1MDAzZWRhdGFfcSkpO1xuIFxuLVx0cXVldWVfd29yayhoZGV2LVx1MDAzZXdvcmtxdWV1ZSwgXHUwMDI2aGRldi1cdTAwM2V0eF93b3JrKTtcbiYjNDM7XHRpZiAodGVzdF9iaXQoSENJX1VQLCBcdTAwMjZoZGV2LVx1MDAzZWZsYWdzKSlcbiYjNDM7XHRcdHF1ZXVlX3dvcmsoaGRldi1cdTAwM2V3b3JrcXVldWUsIFx1MDAyNmhkZXYtXHUwMDNldHhfd29yayk7XG4gfVxuIFxuIC8qIFNlbmQgSVNPIGRhdGEgKi9cbkBAIC0zMzM4LDcgJiM0MzszMzQwLDggQEAgdm9pZCBoY2lfc2VuZF9pc28oc3RydWN0IGhjaV9jb25uICpjb25uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIFx0aGNpX3F1ZXVlX2lzbyhjb25uLCBcdTAwMjZjb25uLVx1MDAzZWRhdGFfcSwgc2tiKTtcbiBcbi1cdHF1ZXVlX3dvcmsoaGRldi1cdTAwM2V3b3JrcXVldWUsIFx1MDAyNmhkZXYtXHUwMDNldHhfd29yayk7XG4mIzQzO1x0aWYgKHRlc3RfYml0KEhDSV9VUCwgXHUwMDI2aGRldi1cdTAwM2VmbGFncykpXG4mIzQzO1x0XHRxdWV1ZV93b3JrKGhkZXYtXHUwMDNld29ya3F1ZXVlLCBcdTAwMjZoZGV2LVx1MDAzZXR4X3dvcmspO1xuIH1cbiBcbiAvKiAtLS0tIEhDSSBUWCB0YXNrIChvdXRnb2luZyBkYXRhKSAtLS0tICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMjE6NDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JUJiMzNDssCiAgICAmIzM0O0JUX0hDSVZIQ0kmIzM0OywKICAgICYjMzQ7QlRfQlJFRFImIzM0OywKICAgICYjMzQ7QlRfTEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoY2lfc2VuZF9hY2wmIzM0OywKICAgICYjMzQ7aGNpX3NlbmRfc2NvJiMzNDssCiAgICAmIzM0O2hjaV9zZW5kX2lzbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEJsdWV0b290aCBkYXRhIHRyYW5zbWlzc2lvbiBmdW5jdGlvbnMgKGhjaV9zZW5kX2FjbCwgaGNpX3NlbmRfc2NvLCBoY2lfc2VuZF9pc28pIHRvIGNoZWNrIGlmIHRoZSBkZXZpY2UgaXMgdXAgYmVmb3JlIHF1ZXVpbmcgdGhlIHRyYW5zbWlzc2lvbiB3b3JrLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBpc3N1ZXMgZHVyaW5nIGRldmljZSB0ZWFyZG93biBhbmQgaXMgcmVhY2hhYmxlIHZpYSB2aXJ0dWFsIEhDSSBkZXZpY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDQ3ZDMwY2Q4Y2VlMTUwNThlZjhiYTRlN2FkZDE3MjQ0ODYyNmFlMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDggMjE6NDQ6MDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMKaW5kZXggNWJhOWZlODI2MWVjOC4uZDlmMDkxYWYzNjE4MyAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYwpAQCAtMzI0Miw3ICYjNDM7MzI0Miw4IEBAIHZvaWQgaGNpX3NlbmRfYWNsKHN0cnVjdCBoY2lfY2hhbiAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgX191MTYgZmxhZ3MpCiAKIAloY2lfcXVldWVfYWNsKGNoYW4sICZhbXA7Y2hhbi0mZ3Q7ZGF0YV9xLCBza2IsIGZsYWdzKTsKIAotCXF1ZXVlX3dvcmsoaGRldi0mZ3Q7d29ya3F1ZXVlLCAmYW1wO2hkZXYtJmd0O3R4X3dvcmspOwomIzQzOwlpZiAodGVzdF9iaXQoSENJX1VQLCAmYW1wO2hkZXYtJmd0O2ZsYWdzKSkKJiM0MzsJCXF1ZXVlX3dvcmsoaGRldi0mZ3Q7d29ya3F1ZXVlLCAmYW1wO2hkZXYtJmd0O3R4X3dvcmspOwogfQogCiAvKiBTZW5kIFNDTyBkYXRhICovCkBAIC0zMjY3LDcgJiM0MzszMjY4LDggQEAgdm9pZCBoY2lfc2VuZF9zY28oc3RydWN0IGhjaV9jb25uICpjb25uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCWJ0X2Rldl9kYmcoaGRldiwgJiMzNDtoY29uICVwIHF1ZXVlZCAlZCYjMzQ7LCBjb25uLAogCQkgICBza2JfcXVldWVfbGVuKCZhbXA7Y29ubi0mZ3Q7ZGF0YV9xKSk7CiAKLQlxdWV1ZV93b3JrKGhkZXYtJmd0O3dvcmtxdWV1ZSwgJmFtcDtoZGV2LSZndDt0eF93b3JrKTsKJiM0MzsJaWYgKHRlc3RfYml0KEhDSV9VUCwgJmFtcDtoZGV2LSZndDtmbGFncykpCiYjNDM7CQlxdWV1ZV93b3JrKGhkZXYtJmd0O3dvcmtxdWV1ZSwgJmFtcDtoZGV2LSZndDt0eF93b3JrKTsKIH0KIAogLyogU2VuZCBJU08gZGF0YSAqLwpAQCAtMzMzOCw3ICYjNDM7MzM0MCw4IEBAIHZvaWQgaGNpX3NlbmRfaXNvKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAogCWhjaV9xdWV1ZV9pc28oY29ubiwgJmFtcDtjb25uLSZndDtkYXRhX3EsIHNrYik7CiAKLQlxdWV1ZV93b3JrKGhkZXYtJmd0O3dvcmtxdWV1ZSwgJmFtcDtoZGV2LSZndDt0eF93b3JrKTsKJiM0MzsJaWYgKHRlc3RfYml0KEhDSV9VUCwgJmFtcDtoZGV2LSZndDtmbGFncykpCiYjNDM7CQlxdWV1ZV93b3JrKGhkZXYtJmd0O3dvcmtxdWV1ZSwgJmFtcDtoZGV2LSZndDt0eF93b3JrKTsKIH0KIAogLyogLS0tLSBIQ0kgVFggdGFzayAob3V0Z29pbmcgZGF0YSkgLS0tLSAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjk4CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgYSBCbHVldG9vdGggSENJIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW4gYG5ldC9ibHVldG9vdGgvaGNpX2NvcmUuY2AgaXMgbWFraW5nIGEgY3JpdGljYWwgY2hlY2suIEl0JiMzOTtzIGxvb2tpbmcgdG8gc2VlIGlmIGBIQ0lfVVBgIGlzIHNldCBpbiBgaGRldi0mZ3Q7ZmxhZ3NgIGJlZm9yZSBzY2hlZHVsaW5nIGBoZGV2LSZndDt0eF93b3JrYCB3aXRoaW4gYGhjaV9zZW5kX2FjbGAsIGBoY2lfc2VuZF9zY29gLCBhbmQgYGhjaV9zZW5kX2lzb2AuIEVzc2VudGlhbGx5LCBpdCYjMzk7cyBwcmV2ZW50aW5nIHRoZSBxdWV1aW5nIG9mIHRyYW5zbWl0IHdvcmsgd2hlbiB0aGUgQmx1ZXRvb3RoIGRldmljZSBpc24mIzM5O3QgZnVsbHkgaW5pdGlhbGl6ZWQgYW5kIGFjdGl2ZS4gVGhpcyBtYWtlcyBzZW5zZTsgc2tpcHBpbmcgdGhpcyBjaGVjayBjYW4gbGVhZCB0byBiYWQgdGhpbmdzIGhhcHBlbmluZywgbGlrZSB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIG9yIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMgaWYgdGhlIGRldmljZSBpcyBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBzaHV0IGRvd24uIFRoYXQmIzM5O3MgYSBjbGFzc2ljIHJhY2UgY29uZGl0aW9uIHNjZW5hcmlvLgoKTm93LCBsZXQmIzM5O3MgdGhpbmsgYWJvdXQgdGhpcyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gV2UmIzM5O3ZlIGdvdCB0byBkZXRlcm1pbmUgdGhlIHJlYWNoYWJpbGl0eSBhbmQgdnVsbmVyYWJpbGl0eSBzdXJmYWNlIG9mIHRob3NlIGZ1bmN0aW9ucy4gYGhjaV9zZW5kX2FjbGAsIGBoY2lfc2VuZF9zY29gLCBhbmQgYGhjaV9zZW5kX2lzb2AgYXJlIGZ1bmRhbWVudGFsIEJsdWV0b290aCBmdW5jdGlvbnMgZm9yIHRyYW5zbWl0dGluZyBBQ0wsIFNDTywgYW5kIElTTyBkYXRhLiBUaGVzZSBhcmUgY29yZSBjb21wb25lbnRzLCBzbyB0aGV5JiMzOTtyZSBhYnNvbHV0ZWx5IHJlYWNoYWJsZSBhbmQgcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZy4gVGhleSBoYW5kbGUgdGhlIGVzc2VudGlhbCBkYXRhIHRyYW5zZmVyIG9wZXJhdGlvbnMsIHNvIGlmIHRoZXJlJiMzOTtzIGEgcHJvYmxlbSB0aGVyZSwgaXQmIzM5O3MgZ29pbmcgdG8gYmUgYSBiaWcgb25lLgoKTmV4dCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIHRvIGVuYWJsZSB0aGlzIGNvZGUuIEl0IGxvb2tzIGxpa2UgYENPTkZJR19CVGAgaXMgdGhlIHByaW1hcnkgb25lLCBuYXR1cmFsbHkuIEJ1dCwgZ2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgZGlmZmVyZW50IEhDSSBpbXBsZW1lbnRhdGlvbnMsIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGBDT05GSUdfQlRfSENJVUFSVGAgb3IgYENPTkZJR19CVF9IQ0lWSENJYCBhcyB3ZWxsLiBWaXJ0dWFsIEhDSSBkZXZpY2VzIGFyZSBvZnRlbiBzb3VyY2VzIG9mIHN1YnRsZSBidWdzLiBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCBgbmV0L2JsdWV0b290aC9LY29uZmlnYCB0byBjb25maXJtIHRoZSBleGFjdCBkZXBlbmRlbmNpZXMgYW5kIGFueSByZWxldmFudCBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGltcGFjdCB0aGUgcmVhY2hhYmlsaXR5IG9mIHRoZXNlIGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYmx1ZXRvb3RoL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JsdWV0b290aC9LY29uZmlnLTUtXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6NjptZW51Y29uZmlnIEJUXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O0JsdWV0b290aCBzdWJzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9ibHVldG9vdGgvS2NvbmZpZy00MS1cbm5ldC9ibHVldG9vdGgvS2NvbmZpZzo0Mjpjb25maWcgQlRfQlJFRFJcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy00My1cdGJvb2wgXCYjMzQ7Qmx1ZXRvb3RoIENsYXNzaWMgKEJSL0VEUikgZmVhdHVyZXNcJiMzNDtcbi0tXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc9NTY9c291cmNlIFwmIzM0O25ldC9ibHVldG9vdGgvaGlkcC9LY29uZmlnXCYjMzQ7XG5uZXQvYmx1ZXRvb3RoL0tjb25maWctNTctXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6NTg6Y29uZmlnIEJUX0xFXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctNTktXHRib29sIFwmIzM0O0JsdWV0b290aCBMb3cgRW5lcmd5IChMRSkgZmVhdHVyZXNcJiMzNDtcbi0tXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctNjUtXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6NjY6Y29uZmlnIEJUX0xFX0wyQ0FQX0VDUkVEXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctNjctXHRib29sIFwmIzM0O0JsdWV0b290aCBMMkNBUCBFbmhhbmNlZCBDcmVkaXQgRmxvdyBDb250cm9sXCYjMzQ7XG4tLVxubmV0L2JsdWV0b290aC9LY29uZmlnLTc2LVxubmV0L2JsdWV0b290aC9LY29uZmlnOjc3OmNvbmZpZyBCVF82TE9XUEFOXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctNzgtXHR0cmlzdGF0ZSBcJiMzNDtCbHVldG9vdGggNkxvV1BBTiBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2JsdWV0b290aC9LY29uZmlnLTgyLVxubmV0L2JsdWV0b290aC9LY29uZmlnOjgzOmNvbmZpZyBCVF9MRURTXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctODQtXHRib29sIFwmIzM0O0VuYWJsZSBMRUQgdHJpZ2dlcnNcJiMzNDtcbi0tXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctOTEtXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6OTI6Y29uZmlnIEJUX01TRlRFWFRcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy05My1cdGJvb2wgXCYjMzQ7RW5hYmxlIE1pY3Jvc29mdCBleHRlbnNpb25zXCYjMzQ7XG4tLVxubmV0L2JsdWV0b290aC9LY29uZmlnLTk4LVxubmV0L2JsdWV0b290aC9LY29uZmlnOjk5OmNvbmZpZyBCVF9BT1NQRVhUXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctMTAwLVx0Ym9vbCBcJiMzNDtFbmFibGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0IGV4dGVuc2lvbnNcJiMzNDtcbi0tXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctMTA1LVxubmV0L2JsdWV0b290aC9LY29uZmlnOjEwNjpjb25maWcgQlRfREVCVUdGU1xubmV0L2JsdWV0b290aC9LY29uZmlnLTEwNy1cdGJvb2wgXCYjMzQ7RXhwb3J0IEJsdWV0b290aCBpbnRlcm5hbHMgaW4gZGVidWdmc1wmIzM0O1xuLS1cbm5ldC9ibHVldG9vdGgvS2NvbmZpZy0xMTMtXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6MTE0OmNvbmZpZyBCVF9TRUxGVEVTVFxubmV0L2JsdWV0b290aC9LY29uZmlnLTExNS1cdGJvb2wgXCYjMzQ7Qmx1ZXRvb3RoIHNlbGYgdGVzdGluZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2JsdWV0b290aC9LY29uZmlnLTEyNi1cbm5ldC9ibHVldG9vdGgvS2NvbmZpZzoxMjc6Y29uZmlnIEJUX1NFTEZURVNUX0VDREhcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy0xMjgtXHRib29sIFwmIzM0O0VDREggdGVzdCBjYXNlc1wmIzM0O1xuLS1cbm5ldC9ibHVldG9vdGgvS2NvbmZpZy0xMzMtXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6MTM0OmNvbmZpZyBCVF9TRUxGVEVTVF9TTVBcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O1NNUCB0ZXN0IGNhc2VzXCYjMzQ7XG4tLVxubmV0L2JsdWV0b290aC9LY29uZmlnLTE0MC1cbm5ldC9ibHVldG9vdGgvS2NvbmZpZzoxNDE6Y29uZmlnIEJUX0ZFQVRVUkVfREVCVUdcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy0xNDItXHRib29sIFwmIzM0O0VuYWJsZSBydW50aW1lIG9wdGlvbiBmb3IgZGVidWdnaW5nIHN0YXRlbWVudHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjU5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkJsdWV0b290aCBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpBbHJpZ2h0LCB0aGUgY29yZSByZXF1aXJlbWVudCBoZXJlIGJvaWxzIGRvd24gdG8gYEJUYC4gVGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIFRpbWUgdG8gZHJpbGwgZG93biBhbmQgc2VlIGhvdyB3ZSYjMzk7cmUgaGFuZGxpbmcgdGhlIHZpcnR1YWwgSENJIGRyaXZlci4gTXkgaW5zdGluY3QgaXMgdG8gaGVhZCBzdHJhaWdodCB0byBgZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZ2AuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYW5kIGFueSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byB0aGlzIHZpcnR1YWwgaW50ZXJmYWNlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgb3B0aW9ucyBhcmUgZXhwb3NlZCB0aGVyZSwgYW5kIHdoYXQgb3RoZXIgc2V0dGluZ3MgbWlnaHQgaW5mbHVlbmNlIHRoaXMgcGFydGljdWxhciBzdWJzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGxhbmRzY2FwZSBvZiBjaG9pY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCVF9IQ0lWSENJJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2JsdWV0b290aC9LY29uZmlnPTMyNz1jb25maWcgQlRfSENJQkZVU0Jcbi0tXG5kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnLTMzOS1cbmRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWc6MzQwOmNvbmZpZyBCVF9IQ0lWSENJXG5kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnLTM0MS1cdHRyaXN0YXRlIFwmIzM0O0hDSSBWSENJIChWaXJ0dWFsIEhDSSBkZXZpY2UpIGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MzcKCQkJCQkJCW91dHB1dDogMTA1CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBCbHVldG9vdGggQ29uZmlndXJhdGlvbiBPcHRpb25zIGFuZCBUcmFuc21pc3Npb24gRnVuY3Rpb25zKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCBCbHVldG9vdGggY29uZmlndXJhdGlvbnMsIGFuZCBpdCBzZWVtcyBsaWtlIGVuYWJsaW5nIGBCVGAgYW5kIGBCVF9IQ0lWSENJYCBpcyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LiBJJiMzOTttIGFzc3VtaW5nIHRoZXNlIGFyZSBmdW5kYW1lbnRhbCBjb25maWd1cmF0aW9ucyBsaWtlbHkgcmVsYXRlZCB0byBiYXNpYyBCbHVldG9vdGggZnVuY3Rpb25hbGl0eSBhbmQgcG9zc2libHkgc29tZSBraW5kIG9mIEhDSS1vdmVyLUhDSSBzZXR1cCwgcGVyaGFwcyBmb3IgdGVzdGluZyBvciBzcGVjaWZpYyBoYXJkd2FyZSBpbnRlZ3JhdGlvbnMuCgpOb3csIEkgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhlIGxvdy1sZXZlbCB0cmFuc21pc3Npb24gZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgaG93IGRhdGEgaXMgYWN0dWFsbHkgbW92aW5nLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGBoY2lfc2VuZF9hY2xgLCBgaGNpX3NlbmRfc2NvYCwgYW5kIGBoY2lfc2VuZF9pc29gIGZ1bmN0aW9ucy4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgYXJlIGltcGxlbWVudGVkIHdpdGhpbiB0aGUgc2VsZWN0ZWQgY29uZmlndXJhdGlvbi4gVGhlc2UgYXJlIHRoZSBjb3JlIHByaW1pdGl2ZXMgZm9yIHNlbmRpbmcgYXN5bmNocm9ub3VzIGNvbm5lY3Rpb25sZXNzIChBQ0wpLCBzeW5jaHJvbm91cyBjb25uZWN0aW9uLW9yaWVudGVkIChTQ08pLCBhbmQgaXNvY2hyb25vdXMgKElTTykgZGF0YSByZXNwZWN0aXZlbHkuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGhvdyB0aGUgYnVmZmVycyBhcmUgaGFuZGxlZCwgYW55IHF1ZXVlaW5nIHN0cmF0ZWdpZXMsIGludGVycnVwdCBtZWNoYW5pc21zLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgZGlmZmVyZW5jZXMgYWNyb3NzIHRoZSBpbXBsZW1lbnRhdGlvbnMgdGhhdCBjb3VsZCBpbXBhY3QgcGVyZm9ybWFuY2Ugb3IgbGF0ZW5jeSBpbiBkaWZmZXJlbnQgc2NlbmFyaW9zLiBJJiMzOTtsbCBiZSBwYXlpbmcgYXR0ZW50aW9uIHRvIGFueSBzcGVjaWZpYyBoYXJkd2FyZSBkZXBlbmRlbmNpZXMgb3Igb3B0aW1pemF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIGhjaV9zZW5kX2FjbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmM9MzE4Mz1zdGF0aWMgdm9pZCBoY2lfcXVldWVfYWNsKHN0cnVjdCBoY2lfY2hhbiAqY2hhbiwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqcXVldWUsXG4tLVxubmV0L2JsdWV0b290aC9oY2lfY29yZS5jLTMyMzYtXG5uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmM6MzIzNzp2b2lkIGhjaV9zZW5kX2FjbChzdHJ1Y3QgaGNpX2NoYW4gKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IsIF9fdTE2IGZsYWdzKVxubmV0L2JsdWV0b290aC9oY2lfY29yZS5jLTMyMzgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgaGNpX3NlbmRfc2NvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JsdWV0b290aC9oY2lfY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYz0zMjM3PXZvaWQgaGNpX3NlbmRfYWNsKHN0cnVjdCBoY2lfY2hhbiAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgX191MTYgZmxhZ3MpXG4tLVxubmV0L2JsdWV0b290aC9oY2lfY29yZS5jLTMyNDktLyogU2VuZCBTQ08gZGF0YSAqL1xubmV0L2JsdWV0b290aC9oY2lfY29yZS5jOjMyNTA6dm9pZCBoY2lfc2VuZF9zY28oc3RydWN0IGhjaV9jb25uICpjb25uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2JsdWV0b290aC9oY2lfY29yZS5jLTMyNTEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIGhjaV9zZW5kX2lzbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmM9MzI4OD1zdGF0aWMgdm9pZCBoY2lfcXVldWVfaXNvKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqcXVldWUsXG4tLVxubmV0L2JsdWV0b290aC9oY2lfY29yZS5jLTMzMzQtXG5uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmM6MzMzNTp2b2lkIGhjaV9zZW5kX2lzbyhzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMtMzMzNi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3MjMKCQkJCQkJCW91dHB1dDogOTkKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIGBuZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmNgIEV4cG9ydHMqKgoKQWxyaWdodCwgbG9va2luZyBhdCBgbmV0L2JsdWV0b290aC9oY2lfY29yZS5jYCwgSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHRoZSBzY29wZSBvZiB3aGF0IEkmIzM5O20gZGVhbGluZyB3aXRoLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IGFyZSB0aGVzZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlLCBzcGVjaWZpY2FsbHksICpleHBvcnRlZCo/IE9yLCBwdXQgYW5vdGhlciB3YXksIGFyZSB0aGV5IGludGVuZGVkIHRvIGJlIHB1YmxpYywgb3Igbm9uLXN0YXRpYz8gSSBuZWVkIHRvIHZlcmlmeSB3aGV0aGVyIHRoZXkmIzM5O3JlIGFjY2Vzc2libGUgb3V0c2lkZSBvZiB0aGlzIHNwZWNpZmljIGNvbXBpbGF0aW9uIHVuaXQuIEtub3dpbmcgdGhpcyB3aWxsIGltbWVkaWF0ZWx5IGhlbHAgbWUgdW5kZXJzdGFuZCB0aGVpciBpbnRlbmRlZCB1c2UgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIGJyb2FkZXIgQmx1ZXRvb3RoIHN0YWNrLiBUaGlzIGlzIGEgc3RhbmRhcmQgaW5pdGlhbCBkaWFnbm9zdGljIHN0ZXAgd2hlbiBwb2tpbmcgYXJvdW5kIGluIGtlcm5lbCBjb2RlIGxpa2UgdGhpcy4gSSBjYW4mIzM5O3QgcHJvY2VlZCBlZmZpY2llbnRseSB3aXRob3V0IGtub3dpbmcgaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBtZWFudCB0byBiZSB1c2VkIGludGVybmFsbHkgb3IgaWYgdGhleSBhcmUgaW50ZXJmYWNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMjE6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipoY2lfc2VuZF9hY2wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYmx1ZXRvb3RoLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qaGNpX3NlbmRfc2NvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JsdWV0b290aC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmhjaV9zZW5kX2lzbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9ibHVldG9vdGgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMjE6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTA2OAoJCQkJCQkJb3V0cHV0OiA4NwoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIENhbGwgU2l0ZXMgb2YgSW50ZXJuYWwgQmx1ZXRvb3RoIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyB0aGVzZSBmdW5jdGlvbnMgYXJlbiYjMzk7dCBleHBsaWNpdGx5ICpleHBvcnRlZCogZnJvbSB0aGUgYG5ldC9ibHVldG9vdGgvYCBkaXJlY3RvcnksIHdoaWNoIGlzIGludGVyZXN0aW5nLiBUaGF0IG1lYW5zIHRoZXkmIzM5O3JlIGxpa2VseSBpbnRlbmRlZCBmb3IgaW50ZXJuYWwgdXNlIHdpdGhpbiB0aGF0IHN1YnN5c3RlbS4gQnV0IHRoZXkmIzM5O3JlIGRlZmluaXRlbHkgYmVpbmcgKmNhbGxlZCogZnJvbSBvdGhlciBmaWxlcyB3aXRoaW4gdGhpcyBzYW1lIGRpcmVjdG9yeSwgc3VjaCBhcyBgbDJjYXBfY29yZS5jYCwgYHNjby5jYCwgYW5kIGBpc28uY2AuIEdpdmVuIHRoYXQgSSYjMzk7bSB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBwaW5wb2ludCAqZXhhY3RseSogd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBiZWluZyBpbnZva2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb250cm9sIGZsb3cgd2l0aGluIHRoaXMgQmx1ZXRvb3RoIGltcGxlbWVudGF0aW9uLiBTbywgSSBuZWVkIHRvIGdvIHRocm91Z2ggdGhlIGNvZGUgYW5kIGlkZW50aWZ5IGFsbCBvZiB0aGVpciBjYWxsIHNpdGVzIHdpdGhpbiB0aG9zZSBmaWxlcywgYW5kIGxpa2VseSBvdGhlcnMgaW4gdGhhdCBkaXJlY3RvcnksIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoZXkgZml0IGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLiBUaGlzIHdpbGwgaGVscCBtZSBzaWduaWZpY2FudGx5IGluIGRldGVybWluaW5nIHRoZWlyIHB1cnBvc2UgYW5kIGhvdyB0aGUgQmx1ZXRvb3RoIHN0YWNrIG9wZXJhdGVzIGludGVybmFsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hjaV9zZW5kX2FjbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9ibHVldG9vdGgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYz0zMTgzPXN0YXRpYyB2b2lkIGhjaV9xdWV1ZV9hY2woc3RydWN0IGhjaV9jaGFuICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpxdWV1ZSxcbi0tXG5uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMtMzIzNi1cbm5ldC9ibHVldG9vdGgvaGNpX2NvcmUuYzozMjM3OnZvaWQgaGNpX3NlbmRfYWNsKHN0cnVjdCBoY2lfY2hhbiAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgX191MTYgZmxhZ3MpXG5uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMtMzIzOC17XG4tLVxubmV0L2JsdWV0b290aC9sMmNhcF9jb3JlLmM9OTkzPXN0YXRpYyB2b2lkIGwyY2FwX3NlbmRfYWNsKHN0cnVjdCBsMmNhcF9jb25uICpjb25uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9ibHVldG9vdGgvbDJjYXBfY29yZS5jLTk5Ny1cdGlmIChoY2lfY29ubl92YWxpZChjb25uLVx1MDAzZWhjb24tXHUwMDNlaGRldiwgY29ubi1cdTAwM2VoY29uKSlcbm5ldC9ibHVldG9vdGgvbDJjYXBfY29yZS5jOjk5ODpcdFx0aGNpX3NlbmRfYWNsKGNvbm4tXHUwMDNlaGNoYW4sIHNrYiwgZmxhZ3MpO1xubmV0L2JsdWV0b290aC9sMmNhcF9jb3JlLmMtOTk5LVx0ZWxzZVxuLS1cbm5ldC9ibHVldG9vdGgvbDJjYXBfY29yZS5jPTEwMjg9c3RhdGljIHZvaWQgbDJjYXBfZG9fc2VuZChzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvYmx1ZXRvb3RoL2wyY2FwX2NvcmUuYy0xMDQ3LVx0YnRfY2Ioc2tiKS1cdTAwM2Vmb3JjZV9hY3RpdmUgPSB0ZXN0X2JpdChGTEFHX0ZPUkNFX0FDVElWRSwgXHUwMDI2Y2hhbi1cdTAwM2VmbGFncyk7XG5uZXQvYmx1ZXRvb3RoL2wyY2FwX2NvcmUuYzoxMDQ4Olx0aGNpX3NlbmRfYWNsKGNoYW4tXHUwMDNlY29ubi1cdTAwM2VoY2hhbiwgc2tiLCBmbGFncyk7XG5uZXQvYmx1ZXRvb3RoL2wyY2FwX2NvcmUuYy0xMDQ5LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMjE6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGNpX3NlbmRfc2NvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JsdWV0b290aC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JsdWV0b290aC9oY2lfY29yZS5jPTMyMzc9dm9pZCBoY2lfc2VuZF9hY2woc3RydWN0IGhjaV9jaGFuICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX3UxNiBmbGFncylcbi0tXG5uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMtMzI0OS0vKiBTZW5kIFNDTyBkYXRhICovXG5uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmM6MzI1MDp2b2lkIGhjaV9zZW5kX3NjbyhzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMtMzI1MS17XG4tLVxubmV0L2JsdWV0b290aC9zY28uYz00MDQ9c3RhdGljIGludCBzY29fc2VuZF9mcmFtZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2JsdWV0b290aC9zY28uYy00MTYtXHRoY2lfc2V0dXBfdHhfdGltZXN0YW1wKHNrYiwgMSwgc29ja2MpO1xubmV0L2JsdWV0b290aC9zY28uYzo0MTc6XHRoY2lfc2VuZF9zY28oY29ubi1cdTAwM2VoY29uLCBza2IpO1xubmV0L2JsdWV0b290aC9zY28uYy00MTgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hjaV9zZW5kX2lzbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9ibHVldG9vdGgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYz0zMjg4PXN0YXRpYyB2b2lkIGhjaV9xdWV1ZV9pc28oc3RydWN0IGhjaV9jb25uICpjb25uLCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpxdWV1ZSxcbi0tXG5uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMtMzMzNC1cbm5ldC9ibHVldG9vdGgvaGNpX2NvcmUuYzozMzM1OnZvaWQgaGNpX3NlbmRfaXNvKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9ibHVldG9vdGgvaGNpX2NvcmUuYy0zMzM2LXtcbi0tXG5uZXQvYmx1ZXRvb3RoL2lzby5jPTYwNT1zdGF0aWMgaW50IGlzb19zZW5kX2ZyYW1lKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvYmx1ZXRvb3RoL2lzby5jLTYyNy1cdFx0aGNpX3NldHVwX3R4X3RpbWVzdGFtcChza2IsIDEsIHNvY2tjKTtcbm5ldC9ibHVldG9vdGgvaXNvLmM6NjI4Olx0XHRoY2lfc2VuZF9pc28oY29ubi1cdTAwM2VoY29uLCBza2IpO1xubmV0L2JsdWV0b290aC9pc28uYy02MjktXHR9IGVsc2Uge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Mjk4CgkJCQkJCQlvdXRwdXQ6IDEzNQoJCQkJCQkJdGhvdWdodHM6IDI3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQmx1ZXRvb3RoIEZ1enppbmcgVGFyZ2V0KioKCkFscmlnaHQsIHRoaXMgbG9va3MgcHJvbWlzaW5nLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGRlZmluaXRlbHkgcmVhY2hhYmxlIGFuZCByZXByZXNlbnQgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYGhjaV9zZW5kX2FjbGAsIGBoY2lfc2VuZF9zY29gLCBhbmQgYGhjaV9zZW5kX2lzb2AsIHdoaWNoIGhhbmRsZSBCbHVldG9vdGggZGF0YSB0cmFuc21pc3Npb24uIFRoZSBwYXRjaCB0b3VjaGVzIHRoZXNlIGNvcmUgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB2aXJ0dWFsIEhDSSBkZXZpY2VzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbWFrZSBzdXJlIHdlIGhhdmUgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBpbiBwbGFjZS4KCkkgbmVlZCB0byBlbmFibGUgYEJUYCBhbmQgYEJUX0hDSVZIQ0lgLCBvYnZpb3VzbHkuIExldCYjMzk7cyBtYWtlIHN1cmUgd2UmIzM5O3JlIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJIHRoaW5rIGBCVF9CUkVEUmAgYW5kIGBCVF9MRWAgd2lsbCBiZSBuZWNlc3NhcnkgYXMgd2VsbCwgY29uc2lkZXJpbmcgdGhleSBhcmUgbGlrZWx5IHVzZWQgYnkgQUNMIGFuZCBJU08uIEkmIzM5O2xsIHRha2UgYW5vdGhlciBsb29rIGF0IGBuZXQvYmx1ZXRvb3RoL0tjb25maWdgIHRvIGJlIHN1cmUuIFllcCwgYEJUX0JSRURSYCBlbmFibGVzICYjMzQ7Qmx1ZXRvb3RoIENsYXNzaWMgKEJSL0VEUikgZmVhdHVyZXMsJiMzNDsgYW5kIGBCVF9MRWAgZW5hYmxlcyAmIzM0O0JsdWV0b290aCBMb3cgRW5lcmd5IChMRSkgZmVhdHVyZXMuJiMzNDsgV2Ugc2hvdWxkIGRlZmluaXRlbHkgaW5jbHVkZSB0aGVtLgoKTm93LCBsZXQmIzM5O3MgYXNzZW1ibGUgdGhlIHJlc3BvbnNlLgoKYGBgCldvcnRoRnV6emluZzogdHJ1ZQpSZWFzb25pbmc6IFRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEJsdWV0b290aCBkYXRhIHRyYW5zbWlzc2lvbiBmdW5jdGlvbnMgKGhjaV9zZW5kX2FjbCwgaGNpX3NlbmRfc2NvLCBoY2lfc2VuZF9pc28pIHRvIGNoZWNrIGlmIHRoZSBkZXZpY2UgaXMgdXAgYmVmb3JlIHF1ZXVpbmcgdGhlIHRyYW5zbWlzc2lvbiB3b3JrLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBpc3N1ZXMgZHVyaW5nIGRldmljZSB0ZWFyZG93biBhbmQgaXMgcmVhY2hhYmxlIHZpYSB2aXJ0dWFsIEhDSSBkZXZpY2VzLgpGb2N1c1N5bWJvbHM6IFsmIzM0O2hjaV9zZW5kX2FjbCYjMzQ7LCAmIzM0O2hjaV9zZW5kX3NjbyYjMzQ7LCAmIzM0O2hjaV9zZW5kX2lzbyYjMzQ7XQpFbmFibGVDb25maWdzOiBbJiMzNDtCVCYjMzQ7LCAmIzM0O0JUX0hDSVZIQ0kmIzM0OywgJiMzNDtCVF9CUkVEUiYjMzQ7LCAmIzM0O0JUX0xFJiMzNDtdCmBgYAoKVGhhdCBzaG91bGQgYmUgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3Igb3VyIGZ1enppbmcgY2FtcGFpZ24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCVCYjMzQ7LAogICAgJiMzNDtCVF9IQ0lWSENJJiMzNDssCiAgICAmIzM0O0JUX0JSRURSJiMzNDssCiAgICAmIzM0O0JUX0xFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aGNpX3NlbmRfYWNsJiMzNDssCiAgICAmIzM0O2hjaV9zZW5kX3NjbyYjMzQ7LAogICAgJiMzNDtoY2lfc2VuZF9pc28mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBCbHVldG9vdGggZGF0YSB0cmFuc21pc3Npb24gZnVuY3Rpb25zIChoY2lfc2VuZF9hY2wsIGhjaV9zZW5kX3NjbywgaGNpX3NlbmRfaXNvKSB0byBjaGVjayBpZiB0aGUgZGV2aWNlIGlzIHVwIGJlZm9yZSBxdWV1aW5nIHRoZSB0cmFuc21pc3Npb24gd29yay4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgaXNzdWVzIGR1cmluZyBkZXZpY2UgdGVhcmRvd24gYW5kIGlzIHJlYWNoYWJsZSB2aWEgdmlydHVhbCBIQ0kgZGV2aWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlQmIzM0OywKICAgICYjMzQ7QlRfSENJVkhDSSYjMzQ7LAogICAgJiMzNDtCVF9CUkVEUiYjMzQ7LAogICAgJiMzNDtCVF9MRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hjaV9zZW5kX2FjbCYjMzQ7LAogICAgJiMzNDtoY2lfc2VuZF9zY28mIzM0OywKICAgICYjMzQ7aGNpX3NlbmRfaXNvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgQmx1ZXRvb3RoIGRhdGEgdHJhbnNtaXNzaW9uIGZ1bmN0aW9ucyAoaGNpX3NlbmRfYWNsLCBoY2lfc2VuZF9zY28sIGhjaV9zZW5kX2lzbykgdG8gY2hlY2sgaWYgdGhlIGRldmljZSBpcyB1cCBiZWZvcmUgcXVldWluZyB0aGUgdHJhbnNtaXNzaW9uIHdvcmsuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIGlzc3VlcyBkdXJpbmcgZGV2aWNlIHRlYXJkb3duIGFuZCBpcyByZWFjaGFibGUgdmlhIHZpcnR1YWwgSENJIGRldmljZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjQ0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMjE6NDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHN0YXRlIGNoZWNrIChgdGVzdF9iaXQoSENJX1VQLCBcdTAwMjZoZGV2LVx1MDAzZWZsYWdzKWApIGJlZm9yZSBxdWV1aW5nIFRYIHdvcmsgKGBxdWV1ZV93b3JrYCkgZm9yIEFDTCwgU0NPLCBhbmQgSVNPIGRhdGEgaW4gdGhlIEJsdWV0b290aCBIQ0kgY29yZS4gVGhpcyBwcmV2ZW50cyBxdWV1aW5nIHdvcmsgd2hlbiB0aGUgSENJIGRldmljZSBpcyBub3QgaW4gdGhlIFVQIHN0YXRlLCB3aGljaCBsaWtlbHkgYWRkcmVzc2VzIGEgdXNlLWFmdGVyLWZyZWUsIHJhY2UgY29uZGl0aW9uLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYnVnIChlLmcuLCBpZiB0aGUgd29ya3F1ZXVlIGlzIGRlc3Ryb3llZCBvciB0aGUgZGV2aWNlIGlzIGJlaW5nIHRvcm4gZG93bikuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIHJlbGF0ZWQgdG8gb2JqZWN0IGxpZmV0aW1lcyBhbmQgY29uY3VycmVuY3ksIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiAoZm9yIHVzZS1hZnRlci1mcmVlKSBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIG1vZGlmaWNhdGlvbnMgdG8gZGF0YSBzZW50IHRvIHVzZXIgc3BhY2UuIEl0IGRvZXMgbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQ0N2QzMGNkOGNlZTE1MDU4ZWY4YmE0ZTdhZGQxNzI0NDg2MjZhZTEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyA4IDIxOjQ0OjA5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jIGIvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jCmluZGV4IDViYTlmZTgyNjFlYzguLmQ5ZjA5MWFmMzYxODMgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMKQEAgLTMyNDIsNyAmIzQzOzMyNDIsOCBAQCB2b2lkIGhjaV9zZW5kX2FjbChzdHJ1Y3QgaGNpX2NoYW4gKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IsIF9fdTE2IGZsYWdzKQogCiAJaGNpX3F1ZXVlX2FjbChjaGFuLCAmYW1wO2NoYW4tJmd0O2RhdGFfcSwgc2tiLCBmbGFncyk7CiAKLQlxdWV1ZV93b3JrKGhkZXYtJmd0O3dvcmtxdWV1ZSwgJmFtcDtoZGV2LSZndDt0eF93b3JrKTsKJiM0MzsJaWYgKHRlc3RfYml0KEhDSV9VUCwgJmFtcDtoZGV2LSZndDtmbGFncykpCiYjNDM7CQlxdWV1ZV93b3JrKGhkZXYtJmd0O3dvcmtxdWV1ZSwgJmFtcDtoZGV2LSZndDt0eF93b3JrKTsKIH0KIAogLyogU2VuZCBTQ08gZGF0YSAqLwpAQCAtMzI2Nyw3ICYjNDM7MzI2OCw4IEBAIHZvaWQgaGNpX3NlbmRfc2NvKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlidF9kZXZfZGJnKGhkZXYsICYjMzQ7aGNvbiAlcCBxdWV1ZWQgJWQmIzM0OywgY29ubiwKIAkJICAgc2tiX3F1ZXVlX2xlbigmYW1wO2Nvbm4tJmd0O2RhdGFfcSkpOwogCi0JcXVldWVfd29yayhoZGV2LSZndDt3b3JrcXVldWUsICZhbXA7aGRldi0mZ3Q7dHhfd29yayk7CiYjNDM7CWlmICh0ZXN0X2JpdChIQ0lfVVAsICZhbXA7aGRldi0mZ3Q7ZmxhZ3MpKQomIzQzOwkJcXVldWVfd29yayhoZGV2LSZndDt3b3JrcXVldWUsICZhbXA7aGRldi0mZ3Q7dHhfd29yayk7CiB9CiAKIC8qIFNlbmQgSVNPIGRhdGEgKi8KQEAgLTMzMzgsNyAmIzQzOzMzNDAsOCBAQCB2b2lkIGhjaV9zZW5kX2lzbyhzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIHN0cnVjdCBza19idWZmICpza2IpCiAKIAloY2lfcXVldWVfaXNvKGNvbm4sICZhbXA7Y29ubi0mZ3Q7ZGF0YV9xLCBza2IpOwogCi0JcXVldWVfd29yayhoZGV2LSZndDt3b3JrcXVldWUsICZhbXA7aGRldi0mZ3Q7dHhfd29yayk7CiYjNDM7CWlmICh0ZXN0X2JpdChIQ0lfVVAsICZhbXA7aGRldi0mZ3Q7ZmxhZ3MpKQomIzQzOwkJcXVldWVfd29yayhoZGV2LSZndDt3b3JrcXVldWUsICZhbXA7aGRldi0mZ3Q7dHhfd29yayk7CiB9CiAKIC8qIC0tLS0gSENJIFRYIHRhc2sgKG91dGdvaW5nIGRhdGEpIC0tLS0gKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyOTUKCQkJCQkJCW91dHB1dDogMjA2CgkJCQkJCQl0aG91Z2h0czogNTA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzOiBCbHVldG9vdGggSENJIFRYIFdvcmtxdWV1ZSBTYWZlZ3VhcmQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBmaXguJiMzNDsgSXQgc2VlbXMgdG8gYmUgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZSB3aXRoaW4gdGhlIEJsdWV0b290aCBIQ0kgY29yZSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIHRyYW5zbWlzc2lvbiBvZiBBQ0wsIFNDTywgYW5kIElTTyBkYXRhLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNoZWNrOiBgaWYgKHRlc3RfYml0KEhDSV9VUCwgJmFtcDtoZGV2LSZndDtmbGFncykpYCBiZWZvcmUgdGhlIGBxdWV1ZV93b3JrYCBjYWxscyBpbiBgaGNpX3NlbmRfYWNsYCwgYGhjaV9zZW5kX3Njb2AsIGFuZCBgaGNpX3NlbmRfaXNvYC4gQmFzaWNhbGx5LCBpdCYjMzk7cyBlbnN1cmluZyB0aGF0IHRoZSBkZXZpY2UgaXMgYWN0dWFsbHkgJiMzNDt1cCYjMzQ7IGFuZCBydW5uaW5nIGJlZm9yZSBzdWJtaXR0aW5nIHdvcmsgdG8gdGhlIHdvcmtxdWV1ZS4gVGhpcyBpcyBhIHNtYXJ0IG1vdmUsIGJlY2F1c2UgaXQgcHJldmVudHMgcXVldWluZyB3b3JrIG9uIGEgd29ya3F1ZXVlIGZvciBhIGRldmljZSB0aGF0IG1pZ2h0IGJlIGluIHRoZSBwcm9jZXNzIG9mIHNodXR0aW5nIGRvd24uCgpNeSBpbW1lZGlhdGUgYXNzdW1wdGlvbiBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgdGFyZ2V0aW5nIGEgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZSAoVUFGKSBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugc2l0dWF0aW9uLiBJZiB0aGUgZGV2aWNlIGlzbiYjMzk7dCB1cCwgdGhlIHdvcmtxdWV1ZSBtaWdodCBiZSBnZXR0aW5nIGRlc3Ryb3llZCBvciBpc24mIzM5O3QgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIFRyeWluZyB0byBxdWV1ZSB3b3JrIGluIHRoYXQgc2NlbmFyaW8gaXMgYSByZWNpcGUgZm9yIGEgY3Jhc2gsIG9yIHdvcnNlLCBhIFVBRiBzZWN1cml0eSB2dWxuZXJhYmlsaXR5LiBUaGlzIGZlZWxzIHZlcnkgbXVjaCBsaWtlIGEgcmFjZSBjb25kaXRpb24gb3Igc3RhdGUgbWFjaGluZSBpc3N1ZS4gS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIGRlYnVnZ2VycyBzaG91bGQgZmxhZyB0aGlzIHR5cGUgb2YgdnVsbmVyYWJpbGl0eSBwcmV0dHkgcXVpY2tseS4KCk15IG5leHQgdGhvdWdodCBpcywgZG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBhbnkgbmV3IHJpc2tzLCBzcGVjaWZpY2FsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzPyBJIG5lZWQgdG8gYmUgZGlsaWdlbnQgaGVyZS4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgcGF0Y2ggaXMganVzdCBhZGRpbmcgYSBzdGF0ZSBjaGVjayBiZWZvcmUgYW4gZXhpc3RpbmcgYHF1ZXVlX3dvcmtgIGNhbGwuIEl0JiMzOTtzIG5vdCBpbnRyb2R1Y2luZyBhbnkgbmV3IHZhcmlhYmxlcywgYWxsb2NhdGlvbnMsIG9yIG1vZGlmaWNhdGlvbnMgdG8gZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIHNlbnQgdG8gdXNlciBzcGFjZS4gSXQmIzM5O3MgcHVyZWx5IGFib3V0IGNvbnRyb2xsaW5nIHRoZSAqdGltaW5nKiBvZiB0aGUgZXhpc3Rpbmcgd29yayBxdWV1ZSBvcGVyYXRpb24uIFNvLCBubywgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBsb29rIGxpa2UgaXQmIzM5O3MgZ29pbmcgdG8gdHJpZ2dlciBhbnkgS01TQU4gaXNzdWVzLiBJdCYjMzk7cyBtb3JlIGFib3V0IHByb3RlY3RpbmcgdGhlIGV4aXN0aW5nIGNvZGUsIHJhdGhlciB0aGFuIGV4cG9zaW5nIGl0IHRvIG5ldyB2dWxuZXJhYmlsaXRpZXMuCgpTbywgbGV0IG1lIHN1bW1hcml6ZSBteSByZWFzb25pbmcgZm9yIGNsYXJpdHk6IFRoaXMgcGF0Y2ggcHJvdGVjdHMgYWdhaW5zdCBhIGNvbmN1cnJlbmN5IGJ1Zy4gSXQgZG9lcyB0aGlzIGJ5IGNoZWNraW5nIGlmIHRoZSBIQ0kgZGV2aWNlIGlzIGluIHRoZSAmIzM0O1VQJiMzNDsgc3RhdGUgYmVmb3JlIHN1Ym1pdHRpbmcgd29yayB0byB0aGUgd29ya3F1ZXVlLiBUaGlzIGxpa2VseSByZXNvbHZlcyBhIFVBRiwgcmFjZSBjb25kaXRpb24sIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4gVGhlIGZpeCBpdHNlbGYgaW52b2x2ZXMgb25seSBhIGNvbmRpdGlvbmFsLCBzbyBpdCBkb2VzbiYjMzk7dCBwcmVzZW50IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvcm1hdGlvbiBsZWFrIHJpc2tzLCBzbyBLTVNBTiBpc24mIzM5O3QgcmVsZXZhbnQgaGVyZS4gS0FTQU4gb3Igb3RoZXIgc3RhbmRhcmQgdG9vbHMgYXJlIG1vcmUgYXBwcm9wcmlhdGUgdG8gY2hlY2sgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMjE6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHN0YXRlIGNoZWNrIChgdGVzdF9iaXQoSENJX1VQLCBcdTAwMjZoZGV2LVx1MDAzZWZsYWdzKWApIGJlZm9yZSBxdWV1aW5nIFRYIHdvcmsgKGBxdWV1ZV93b3JrYCkgZm9yIEFDTCwgU0NPLCBhbmQgSVNPIGRhdGEgaW4gdGhlIEJsdWV0b290aCBIQ0kgY29yZS4gVGhpcyBwcmV2ZW50cyBxdWV1aW5nIHdvcmsgd2hlbiB0aGUgSENJIGRldmljZSBpcyBub3QgaW4gdGhlIFVQIHN0YXRlLCB3aGljaCBsaWtlbHkgYWRkcmVzc2VzIGEgdXNlLWFmdGVyLWZyZWUsIHJhY2UgY29uZGl0aW9uLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYnVnIChlLmcuLCBpZiB0aGUgd29ya3F1ZXVlIGlzIGRlc3Ryb3llZCBvciB0aGUgZGV2aWNlIGlzIGJlaW5nIHRvcm4gZG93bikuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIHJlbGF0ZWQgdG8gb2JqZWN0IGxpZmV0aW1lcyBhbmQgY29uY3VycmVuY3ksIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiAoZm9yIHVzZS1hZnRlci1mcmVlKSBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIG1vZGlmaWNhdGlvbnMgdG8gZGF0YSBzZW50IHRvIHVzZXIgc3BhY2UuIEl0IGRvZXMgbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgc3RhdGUgY2hlY2sgKGB0ZXN0X2JpdChIQ0lfVVAsIFx1MDAyNmhkZXYtXHUwMDNlZmxhZ3MpYCkgYmVmb3JlIHF1ZXVpbmcgVFggd29yayAoYHF1ZXVlX3dvcmtgKSBmb3IgQUNMLCBTQ08sIGFuZCBJU08gZGF0YSBpbiB0aGUgQmx1ZXRvb3RoIEhDSSBjb3JlLiBUaGlzIHByZXZlbnRzIHF1ZXVpbmcgd29yayB3aGVuIHRoZSBIQ0kgZGV2aWNlIGlzIG5vdCBpbiB0aGUgVVAgc3RhdGUsIHdoaWNoIGxpa2VseSBhZGRyZXNzZXMgYSB1c2UtYWZ0ZXItZnJlZSwgcmFjZSBjb25kaXRpb24sIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBidWcgKGUuZy4sIGlmIHRoZSB3b3JrcXVldWUgaXMgZGVzdHJveWVkIG9yIHRoZSBkZXZpY2UgaXMgYmVpbmcgdG9ybiBkb3duKS4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgcmVsYXRlZCB0byBvYmplY3QgbGlmZXRpbWVzIGFuZCBjb25jdXJyZW5jeSwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIChmb3IgdXNlLWFmdGVyLWZyZWUpIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgbW9kaWZpY2F0aW9ucyB0byBkYXRhIHNlbnQgdG8gdXNlciBzcGFjZS4gSXQgZG9lcyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjE6NDQ6MTAuNTI1ODk5OTE4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA3ODQ1MTIwMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlRcIixcbiAgICBcIkJUX0hDSVZIQ0lcIixcbiAgICBcIkJUX0JSRURSXCIsXG4gICAgXCJCVF9MRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhjaV9zZW5kX2FjbFwiLFxuICAgIFwiaGNpX3NlbmRfc2NvXCIsXG4gICAgXCJoY2lfc2VuZF9pc29cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBzdGF0ZSBjaGVjayAoYHRlc3RfYml0KEhDSV9VUCwgXFx1MDAyNmhkZXYtXFx1MDAzZWZsYWdzKWApIGJlZm9yZSBxdWV1aW5nIFRYIHdvcmsgKGBxdWV1ZV93b3JrYCkgZm9yIEFDTCwgU0NPLCBhbmQgSVNPIGRhdGEgaW4gdGhlIEJsdWV0b290aCBIQ0kgY29yZS4gVGhpcyBwcmV2ZW50cyBxdWV1aW5nIHdvcmsgd2hlbiB0aGUgSENJIGRldmljZSBpcyBub3QgaW4gdGhlIFVQIHN0YXRlLCB3aGljaCBsaWtlbHkgYWRkcmVzc2VzIGEgdXNlLWFmdGVyLWZyZWUsIHJhY2UgY29uZGl0aW9uLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYnVnIChlLmcuLCBpZiB0aGUgd29ya3F1ZXVlIGlzIGRlc3Ryb3llZCBvciB0aGUgZGV2aWNlIGlzIGJlaW5nIHRvcm4gZG93bikuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIHJlbGF0ZWQgdG8gb2JqZWN0IGxpZmV0aW1lcyBhbmQgY29uY3VycmVuY3ksIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiAoZm9yIHVzZS1hZnRlci1mcmVlKSBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIG1vZGlmaWNhdGlvbnMgdG8gZGF0YSBzZW50IHRvIHVzZXIgc3BhY2UuIEl0IGRvZXMgbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBCbHVldG9vdGggZGF0YSB0cmFuc21pc3Npb24gZnVuY3Rpb25zIChoY2lfc2VuZF9hY2wsIGhjaV9zZW5kX3NjbywgaGNpX3NlbmRfaXNvKSB0byBjaGVjayBpZiB0aGUgZGV2aWNlIGlzIHVwIGJlZm9yZSBxdWV1aW5nIHRoZSB0cmFuc21pc3Npb24gd29yay4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgaXNzdWVzIGR1cmluZyBkZXZpY2UgdGVhcmRvd24gYW5kIGlzIHJlYWNoYWJsZSB2aWEgdmlydHVhbCBIQ0kgZGV2aWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjE6NDQ6MTAuNTI1OTA2MzI4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzQ4OTQzMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkNDdkMzBjZDhjZWUxNTA1OGVmOGJhNGU3YWRkMTcyNDQ4NjI2YWUxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDggMjE6NDQ6MDkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jIGIvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jXFxuaW5kZXggNWJhOWZlODI2MWVjOC4uZDlmMDkxYWYzNjE4MyAxMDA2NDRcXG4tLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmNcXG4rKysgYi9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmNcXG5AQCAtMzI0Miw3ICszMjQyLDggQEAgdm9pZCBoY2lfc2VuZF9hY2woc3RydWN0IGhjaV9jaGFuICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX3UxNiBmbGFncylcXG4gXFxuIFxcdGhjaV9xdWV1ZV9hY2woY2hhbiwgXFx1MDAyNmNoYW4tXFx1MDAzZWRhdGFfcSwgc2tiLCBmbGFncyk7XFxuIFxcbi1cXHRxdWV1ZV93b3JrKGhkZXYtXFx1MDAzZXdvcmtxdWV1ZSwgXFx1MDAyNmhkZXYtXFx1MDAzZXR4X3dvcmspO1xcbitcXHRpZiAodGVzdF9iaXQoSENJX1VQLCBcXHUwMDI2aGRldi1cXHUwMDNlZmxhZ3MpKVxcbitcXHRcXHRxdWV1ZV93b3JrKGhkZXYtXFx1MDAzZXdvcmtxdWV1ZSwgXFx1MDAyNmhkZXYtXFx1MDAzZXR4X3dvcmspO1xcbiB9XFxuIFxcbiAvKiBTZW5kIFNDTyBkYXRhICovXFxuQEAgLTMyNjcsNyArMzI2OCw4IEBAIHZvaWQgaGNpX3NlbmRfc2NvKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0YnRfZGV2X2RiZyhoZGV2LCBcXFwiaGNvbiAlcCBxdWV1ZWQgJWRcXFwiLCBjb25uLFxcbiBcXHRcXHQgICBza2JfcXVldWVfbGVuKFxcdTAwMjZjb25uLVxcdTAwM2VkYXRhX3EpKTtcXG4gXFxuLVxcdHF1ZXVlX3dvcmsoaGRldi1cXHUwMDNld29ya3F1ZXVlLCBcXHUwMDI2aGRldi1cXHUwMDNldHhfd29yayk7XFxuK1xcdGlmICh0ZXN0X2JpdChIQ0lfVVAsIFxcdTAwMjZoZGV2LVxcdTAwM2VmbGFncykpXFxuK1xcdFxcdHF1ZXVlX3dvcmsoaGRldi1cXHUwMDNld29ya3F1ZXVlLCBcXHUwMDI2aGRldi1cXHUwMDNldHhfd29yayk7XFxuIH1cXG4gXFxuIC8qIFNlbmQgSVNPIGRhdGEgKi9cXG5AQCAtMzMzOCw3ICszMzQwLDggQEAgdm9pZCBoY2lfc2VuZF9pc28oc3RydWN0IGhjaV9jb25uICpjb25uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXG4gXFx0aGNpX3F1ZXVlX2lzbyhjb25uLCBcXHUwMDI2Y29ubi1cXHUwMDNlZGF0YV9xLCBza2IpO1xcbiBcXG4tXFx0cXVldWVfd29yayhoZGV2LVxcdTAwM2V3b3JrcXVldWUsIFxcdTAwMjZoZGV2LVxcdTAwM2V0eF93b3JrKTtcXG4rXFx0aWYgKHRlc3RfYml0KEhDSV9VUCwgXFx1MDAyNmhkZXYtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0cXVldWVfd29yayhoZGV2LVxcdTAwM2V3b3JrcXVldWUsIFxcdTAwMjZoZGV2LVxcdTAwM2V0eF93b3JrKTtcXG4gfVxcbiBcXG4gLyogLS0tLSBIQ0kgVFggdGFzayAob3V0Z29pbmcgZGF0YSkgLS0tLSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMTo0NDoxMC45NjE1MTMzMTRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozMDcyMTg4Nzk4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCVFwiLFxuICAgIFwiQlRfSENJVkhDSVwiLFxuICAgIFwiQlRfQlJFRFJcIixcbiAgICBcIkJUX0xFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaGNpX3NlbmRfYWNsXCIsXG4gICAgXCJoY2lfc2VuZF9zY29cIixcbiAgICBcImhjaV9zZW5kX2lzb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgQmx1ZXRvb3RoIGRhdGEgdHJhbnNtaXNzaW9uIGZ1bmN0aW9ucyAoaGNpX3NlbmRfYWNsLCBoY2lfc2VuZF9zY28sIGhjaV9zZW5kX2lzbykgdG8gY2hlY2sgaWYgdGhlIGRldmljZSBpcyB1cCBiZWZvcmUgcXVldWluZyB0aGUgdHJhbnNtaXNzaW9uIHdvcmsuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIGlzc3VlcyBkdXJpbmcgZGV2aWNlIHRlYXJkb3duIGFuZCBpcyByZWFjaGFibGUgdmlhIHZpcnR1YWwgSENJIGRldmljZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQ0N2QzMGNkOGNlZTE1MDU4ZWY4YmE0ZTdhZGQxNzI0NDg2MjZhZTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyA4IDIxOjQ0OjA5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jIGIvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jXG5pbmRleCA1YmE5ZmU4MjYxZWM4Li5kOWYwOTFhZjM2MTgzIDEwMDY0NFxuLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jXG4rKysgYi9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmNcbkBAIC0zMjQyLDcgKzMyNDIsOCBAQCB2b2lkIGhjaV9zZW5kX2FjbChzdHJ1Y3QgaGNpX2NoYW4gKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IsIF9fdTE2IGZsYWdzKVxuIFxuIFx0aGNpX3F1ZXVlX2FjbChjaGFuLCBcdTAwMjZjaGFuLVx1MDAzZWRhdGFfcSwgc2tiLCBmbGFncyk7XG4gXG4tXHRxdWV1ZV93b3JrKGhkZXYtXHUwMDNld29ya3F1ZXVlLCBcdTAwMjZoZGV2LVx1MDAzZXR4X3dvcmspO1xuK1x0aWYgKHRlc3RfYml0KEhDSV9VUCwgXHUwMDI2aGRldi1cdTAwM2VmbGFncykpXG4rXHRcdHF1ZXVlX3dvcmsoaGRldi1cdTAwM2V3b3JrcXVldWUsIFx1MDAyNmhkZXYtXHUwMDNldHhfd29yayk7XG4gfVxuIFxuIC8qIFNlbmQgU0NPIGRhdGEgKi9cbkBAIC0zMjY3LDcgKzMyNjgsOCBAQCB2b2lkIGhjaV9zZW5kX3NjbyhzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRidF9kZXZfZGJnKGhkZXYsIFwiaGNvbiAlcCBxdWV1ZWQgJWRcIiwgY29ubixcbiBcdFx0ICAgc2tiX3F1ZXVlX2xlbihcdTAwMjZjb25uLVx1MDAzZWRhdGFfcSkpO1xuIFxuLVx0cXVldWVfd29yayhoZGV2LVx1MDAzZXdvcmtxdWV1ZSwgXHUwMDI2aGRldi1cdTAwM2V0eF93b3JrKTtcbitcdGlmICh0ZXN0X2JpdChIQ0lfVVAsIFx1MDAyNmhkZXYtXHUwMDNlZmxhZ3MpKVxuK1x0XHRxdWV1ZV93b3JrKGhkZXYtXHUwMDNld29ya3F1ZXVlLCBcdTAwMjZoZGV2LVx1MDAzZXR4X3dvcmspO1xuIH1cbiBcbiAvKiBTZW5kIElTTyBkYXRhICovXG5AQCAtMzMzOCw3ICszMzQwLDggQEAgdm9pZCBoY2lfc2VuZF9pc28oc3RydWN0IGhjaV9jb25uICpjb25uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIFx0aGNpX3F1ZXVlX2lzbyhjb25uLCBcdTAwMjZjb25uLVx1MDAzZWRhdGFfcSwgc2tiKTtcbiBcbi1cdHF1ZXVlX3dvcmsoaGRldi1cdTAwM2V3b3JrcXVldWUsIFx1MDAyNmhkZXYtXHUwMDNldHhfd29yayk7XG4rXHRpZiAodGVzdF9iaXQoSENJX1VQLCBcdTAwMjZoZGV2LVx1MDAzZWZsYWdzKSlcbitcdFx0cXVldWVfd29yayhoZGV2LVx1MDAzZXdvcmtxdWV1ZSwgXHUwMDI2aGRldi1cdTAwM2V0eF93b3JrKTtcbiB9XG4gXG4gLyogLS0tLSBIQ0kgVFggdGFzayAob3V0Z29pbmcgZGF0YSkgLS0tLSAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjE6NDQ6MTAuOTYxNTE0ODM0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjEyNTc2ODk3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIGEgQmx1ZXRvb3RoIEhDSSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW4gYG5ldC9ibHVldG9vdGgvaGNpX2NvcmUuY2AgaXMgbWFraW5nIGEgY3JpdGljYWwgY2hlY2suIEl0J3MgbG9va2luZyB0byBzZWUgaWYgYEhDSV9VUGAgaXMgc2V0IGluIGBoZGV2LVx1MDAzZWZsYWdzYCBiZWZvcmUgc2NoZWR1bGluZyBgaGRldi1cdTAwM2V0eF93b3JrYCB3aXRoaW4gYGhjaV9zZW5kX2FjbGAsIGBoY2lfc2VuZF9zY29gLCBhbmQgYGhjaV9zZW5kX2lzb2AuIEVzc2VudGlhbGx5LCBpdCdzIHByZXZlbnRpbmcgdGhlIHF1ZXVpbmcgb2YgdHJhbnNtaXQgd29yayB3aGVuIHRoZSBCbHVldG9vdGggZGV2aWNlIGlzbid0IGZ1bGx5IGluaXRpYWxpemVkIGFuZCBhY3RpdmUuIFRoaXMgbWFrZXMgc2Vuc2U7IHNraXBwaW5nIHRoaXMgY2hlY2sgY2FuIGxlYWQgdG8gYmFkIHRoaW5ncyBoYXBwZW5pbmcsIGxpa2UgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyBvciBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGlmIHRoZSBkZXZpY2UgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgc2h1dCBkb3duLiBUaGF0J3MgYSBjbGFzc2ljIHJhY2UgY29uZGl0aW9uIHNjZW5hcmlvLlxuXG5Ob3csIGxldCdzIHRoaW5rIGFib3V0IHRoaXMgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuIFdlJ3ZlIGdvdCB0byBkZXRlcm1pbmUgdGhlIHJlYWNoYWJpbGl0eSBhbmQgdnVsbmVyYWJpbGl0eSBzdXJmYWNlIG9mIHRob3NlIGZ1bmN0aW9ucy4gYGhjaV9zZW5kX2FjbGAsIGBoY2lfc2VuZF9zY29gLCBhbmQgYGhjaV9zZW5kX2lzb2AgYXJlIGZ1bmRhbWVudGFsIEJsdWV0b290aCBmdW5jdGlvbnMgZm9yIHRyYW5zbWl0dGluZyBBQ0wsIFNDTywgYW5kIElTTyBkYXRhLiBUaGVzZSBhcmUgY29yZSBjb21wb25lbnRzLCBzbyB0aGV5J3JlIGFic29sdXRlbHkgcmVhY2hhYmxlIGFuZCBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nLiBUaGV5IGhhbmRsZSB0aGUgZXNzZW50aWFsIGRhdGEgdHJhbnNmZXIgb3BlcmF0aW9ucywgc28gaWYgdGhlcmUncyBhIHByb2JsZW0gdGhlcmUsIGl0J3MgZ29pbmcgdG8gYmUgYSBiaWcgb25lLlxuXG5OZXh0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgdG8gZW5hYmxlIHRoaXMgY29kZS4gSXQgbG9va3MgbGlrZSBgQ09ORklHX0JUYCBpcyB0aGUgcHJpbWFyeSBvbmUsIG5hdHVyYWxseS4gQnV0LCBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciBkaWZmZXJlbnQgSENJIGltcGxlbWVudGF0aW9ucywgSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBgQ09ORklHX0JUX0hDSVVBUlRgIG9yIGBDT05GSUdfQlRfSENJVkhDSWAgYXMgd2VsbC4gVmlydHVhbCBIQ0kgZGV2aWNlcyBhcmUgb2Z0ZW4gc291cmNlcyBvZiBzdWJ0bGUgYnVncy4gSSdsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCBgbmV0L2JsdWV0b290aC9LY29uZmlnYCB0byBjb25maXJtIHRoZSBleGFjdCBkZXBlbmRlbmNpZXMgYW5kIGFueSByZWxldmFudCBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGltcGFjdCB0aGUgcmVhY2hhYmlsaXR5IG9mIHRoZXNlIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI5OCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIxOjQ0OjE3LjA4NzI4NTUwNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjY5MDIyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JsdWV0b290aC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9ibHVldG9vdGgvS2NvbmZpZy01LVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZzo2Om1lbnVjb25maWcgQlRcXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiQmx1ZXRvb3RoIHN1YnN5c3RlbSBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTQxLVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZzo0Mjpjb25maWcgQlRfQlJFRFJcXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctNDMtXFx0Ym9vbCBcXFwiQmx1ZXRvb3RoIENsYXNzaWMgKEJSL0VEUikgZmVhdHVyZXNcXFwiXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc9NTY9c291cmNlIFxcXCJuZXQvYmx1ZXRvb3RoL2hpZHAvS2NvbmZpZ1xcXCJcXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctNTctXFxubmV0L2JsdWV0b290aC9LY29uZmlnOjU4OmNvbmZpZyBCVF9MRVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy01OS1cXHRib29sIFxcXCJCbHVldG9vdGggTG93IEVuZXJneSAoTEUpIGZlYXR1cmVzXFxcIlxcbi0tXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTY1LVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZzo2Njpjb25maWcgQlRfTEVfTDJDQVBfRUNSRURcXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctNjctXFx0Ym9vbCBcXFwiQmx1ZXRvb3RoIEwyQ0FQIEVuaGFuY2VkIENyZWRpdCBGbG93IENvbnRyb2xcXFwiXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctNzYtXFxubmV0L2JsdWV0b290aC9LY29uZmlnOjc3OmNvbmZpZyBCVF82TE9XUEFOXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTc4LVxcdHRyaXN0YXRlIFxcXCJCbHVldG9vdGggNkxvV1BBTiBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTgyLVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZzo4Mzpjb25maWcgQlRfTEVEU1xcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy04NC1cXHRib29sIFxcXCJFbmFibGUgTEVEIHRyaWdnZXJzXFxcIlxcbi0tXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTkxLVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZzo5Mjpjb25maWcgQlRfTVNGVEVYVFxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy05My1cXHRib29sIFxcXCJFbmFibGUgTWljcm9zb2Z0IGV4dGVuc2lvbnNcXFwiXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctOTgtXFxubmV0L2JsdWV0b290aC9LY29uZmlnOjk5OmNvbmZpZyBCVF9BT1NQRVhUXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTEwMC1cXHRib29sIFxcXCJFbmFibGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0IGV4dGVuc2lvbnNcXFwiXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctMTA1LVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZzoxMDY6Y29uZmlnIEJUX0RFQlVHRlNcXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctMTA3LVxcdGJvb2wgXFxcIkV4cG9ydCBCbHVldG9vdGggaW50ZXJuYWxzIGluIGRlYnVnZnNcXFwiXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctMTEzLVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZzoxMTQ6Y29uZmlnIEJUX1NFTEZURVNUXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTExNS1cXHRib29sIFxcXCJCbHVldG9vdGggc2VsZiB0ZXN0aW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctMTI2LVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZzoxMjc6Y29uZmlnIEJUX1NFTEZURVNUX0VDREhcXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctMTI4LVxcdGJvb2wgXFxcIkVDREggdGVzdCBjYXNlc1xcXCJcXG4tLVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy0xMzMtXFxubmV0L2JsdWV0b290aC9LY29uZmlnOjEzNDpjb25maWcgQlRfU0VMRlRFU1RfU01QXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJTTVAgdGVzdCBjYXNlc1xcXCJcXG4tLVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy0xNDAtXFxubmV0L2JsdWV0b290aC9LY29uZmlnOjE0MTpjb25maWcgQlRfRkVBVFVSRV9ERUJVR1xcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy0xNDItXFx0Ym9vbCBcXFwiRW5hYmxlIHJ1bnRpbWUgb3B0aW9uIGZvciBkZWJ1Z2dpbmcgc3RhdGVtZW50c1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjE6NDQ6MTcuMTM5OTg1NjI5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQxNjEwMDYxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQmx1ZXRvb3RoIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuQWxyaWdodCwgdGhlIGNvcmUgcmVxdWlyZW1lbnQgaGVyZSBib2lscyBkb3duIHRvIGBCVGAuIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIFRpbWUgdG8gZHJpbGwgZG93biBhbmQgc2VlIGhvdyB3ZSdyZSBoYW5kbGluZyB0aGUgdmlydHVhbCBIQ0kgZHJpdmVyLiBNeSBpbnN0aW5jdCBpcyB0byBoZWFkIHN0cmFpZ2h0IHRvIGBkcml2ZXJzL2JsdWV0b290aC9LY29uZmlnYC4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFuZCBhbnkgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gdGhpcyB2aXJ0dWFsIGludGVyZmFjZS4gTGV0J3Mgc2VlIHdoYXQgb3B0aW9ucyBhcmUgZXhwb3NlZCB0aGVyZSwgYW5kIHdoYXQgb3RoZXIgc2V0dGluZ3MgbWlnaHQgaW5mbHVlbmNlIHRoaXMgcGFydGljdWxhciBzdWJzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGxhbmRzY2FwZSBvZiBjaG9pY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjU5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjE6NDQ6MjEuNTU2MDg4MTEyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3OTI2MDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCVF9IQ0lWSENJXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZz0zMjc9Y29uZmlnIEJUX0hDSUJGVVNCXFxuLS1cXG5kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnLTMzOS1cXG5kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnOjM0MDpjb25maWcgQlRfSENJVkhDSVxcbmRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWctMzQxLVxcdHRyaXN0YXRlIFxcXCJIQ0kgVkhDSSAoVmlydHVhbCBIQ0kgZGV2aWNlKSBkcml2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIxOjQ0OjIxLjYwNDAxOTU2OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNDg1OTI4OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgQmx1ZXRvb3RoIENvbmZpZ3VyYXRpb24gT3B0aW9ucyBhbmQgVHJhbnNtaXNzaW9uIEZ1bmN0aW9ucyoqXG5cbkFscmlnaHQsIHNvIEknbSB0YWtpbmcgYSBsb29rIGF0IEJsdWV0b290aCBjb25maWd1cmF0aW9ucywgYW5kIGl0IHNlZW1zIGxpa2UgZW5hYmxpbmcgYEJUYCBhbmQgYEJUX0hDSVZIQ0lgIGlzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQuIEknbSBhc3N1bWluZyB0aGVzZSBhcmUgZnVuZGFtZW50YWwgY29uZmlndXJhdGlvbnMgbGlrZWx5IHJlbGF0ZWQgdG8gYmFzaWMgQmx1ZXRvb3RoIGZ1bmN0aW9uYWxpdHkgYW5kIHBvc3NpYmx5IHNvbWUga2luZCBvZiBIQ0ktb3Zlci1IQ0kgc2V0dXAsIHBlcmhhcHMgZm9yIHRlc3Rpbmcgb3Igc3BlY2lmaWMgaGFyZHdhcmUgaW50ZWdyYXRpb25zLlxuXG5Ob3csIEkgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhlIGxvdy1sZXZlbCB0cmFuc21pc3Npb24gZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgaG93IGRhdGEgaXMgYWN0dWFsbHkgbW92aW5nLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGBoY2lfc2VuZF9hY2xgLCBgaGNpX3NlbmRfc2NvYCwgYW5kIGBoY2lfc2VuZF9pc29gIGZ1bmN0aW9ucy4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgYXJlIGltcGxlbWVudGVkIHdpdGhpbiB0aGUgc2VsZWN0ZWQgY29uZmlndXJhdGlvbi4gVGhlc2UgYXJlIHRoZSBjb3JlIHByaW1pdGl2ZXMgZm9yIHNlbmRpbmcgYXN5bmNocm9ub3VzIGNvbm5lY3Rpb25sZXNzIChBQ0wpLCBzeW5jaHJvbm91cyBjb25uZWN0aW9uLW9yaWVudGVkIChTQ08pLCBhbmQgaXNvY2hyb25vdXMgKElTTykgZGF0YSByZXNwZWN0aXZlbHkuIEknbGwgYmUgbG9va2luZyBmb3IgaG93IHRoZSBidWZmZXJzIGFyZSBoYW5kbGVkLCBhbnkgcXVldWVpbmcgc3RyYXRlZ2llcywgaW50ZXJydXB0IG1lY2hhbmlzbXMsIGFuZCBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBkaWZmZXJlbmNlcyBhY3Jvc3MgdGhlIGltcGxlbWVudGF0aW9ucyB0aGF0IGNvdWxkIGltcGFjdCBwZXJmb3JtYW5jZSBvciBsYXRlbmN5IGluIGRpZmZlcmVudCBzY2VuYXJpb3MuIEknbGwgYmUgcGF5aW5nIGF0dGVudGlvbiB0byBhbnkgc3BlY2lmaWMgaGFyZHdhcmUgZGVwZW5kZW5jaWVzIG9yIG9wdGltaXphdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MzcsIk91dHB1dFRva2VucyI6MTA1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjE6NDQ6MjUuOTUyNjE1MTM2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4OTMzOTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgaGNpX3NlbmRfYWNsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9ibHVldG9vdGgvaGNpX2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmM9MzE4Mz1zdGF0aWMgdm9pZCBoY2lfcXVldWVfYWNsKHN0cnVjdCBoY2lfY2hhbiAqY2hhbiwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqcXVldWUsXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMtMzIzNi1cXG5uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmM6MzIzNzp2b2lkIGhjaV9zZW5kX2FjbChzdHJ1Y3QgaGNpX2NoYW4gKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IsIF9fdTE2IGZsYWdzKVxcbm5ldC9ibHVldG9vdGgvaGNpX2NvcmUuYy0zMjM4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjE6NDQ6MjYuMDAxNTUxOTMxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDUyNDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgaGNpX3NlbmRfc2NvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9ibHVldG9vdGgvaGNpX2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmM9MzIzNz12b2lkIGhjaV9zZW5kX2FjbChzdHJ1Y3QgaGNpX2NoYW4gKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IsIF9fdTE2IGZsYWdzKVxcbi0tXFxubmV0L2JsdWV0b290aC9oY2lfY29yZS5jLTMyNDktLyogU2VuZCBTQ08gZGF0YSAqL1xcbm5ldC9ibHVldG9vdGgvaGNpX2NvcmUuYzozMjUwOnZvaWQgaGNpX3NlbmRfc2NvKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMtMzI1MS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIxOjQ0OjI2LjA0NTYxMDkyNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIwOTgxOTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBoY2lfc2VuZF9pc29cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JsdWV0b290aC9oY2lfY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9ibHVldG9vdGgvaGNpX2NvcmUuYz0zMjg4PXN0YXRpYyB2b2lkIGhjaV9xdWV1ZV9pc28oc3RydWN0IGhjaV9jb25uICpjb25uLCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpxdWV1ZSxcXG4tLVxcbm5ldC9ibHVldG9vdGgvaGNpX2NvcmUuYy0zMzM0LVxcbm5ldC9ibHVldG9vdGgvaGNpX2NvcmUuYzozMzM1OnZvaWQgaGNpX3NlbmRfaXNvKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMtMzMzNi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIxOjQ0OjI2LjA4NzcxNjQwMloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTg1NzM3NTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIGBuZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmNgIEV4cG9ydHMqKlxuXG5BbHJpZ2h0LCBsb29raW5nIGF0IGBuZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmNgLCBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggdGhlIHNjb3BlIG9mIHdoYXQgSSdtIGRlYWxpbmcgd2l0aC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiBhcmUgdGhlc2UgZnVuY3Rpb25zIGluIHRoaXMgZmlsZSwgc3BlY2lmaWNhbGx5LCAqZXhwb3J0ZWQqPyBPciwgcHV0IGFub3RoZXIgd2F5LCBhcmUgdGhleSBpbnRlbmRlZCB0byBiZSBwdWJsaWMsIG9yIG5vbi1zdGF0aWM/IEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciB0aGV5J3JlIGFjY2Vzc2libGUgb3V0c2lkZSBvZiB0aGlzIHNwZWNpZmljIGNvbXBpbGF0aW9uIHVuaXQuIEtub3dpbmcgdGhpcyB3aWxsIGltbWVkaWF0ZWx5IGhlbHAgbWUgdW5kZXJzdGFuZCB0aGVpciBpbnRlbmRlZCB1c2UgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIGJyb2FkZXIgQmx1ZXRvb3RoIHN0YWNrLiBUaGlzIGlzIGEgc3RhbmRhcmQgaW5pdGlhbCBkaWFnbm9zdGljIHN0ZXAgd2hlbiBwb2tpbmcgYXJvdW5kIGluIGtlcm5lbCBjb2RlIGxpa2UgdGhpcy4gSSBjYW4ndCBwcm9jZWVkIGVmZmljaWVudGx5IHdpdGhvdXQga25vd2luZyBpZiB0aGVzZSBmdW5jdGlvbnMgYXJlIG1lYW50IHRvIGJlIHVzZWQgaW50ZXJuYWxseSBvciBpZiB0aGV5IGFyZSBpbnRlcmZhY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzIzLCJPdXRwdXRUb2tlbnMiOjk5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIiwiZ3JlcHBlciIsImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMTo0NDozMC4yNzM0NTYyMTZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MzcyNjA1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipoY2lfc2VuZF9hY2xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JsdWV0b290aC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIxOjQ0OjMwLjMyMTgzMjkyMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxNTIyMjUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKmhjaV9zZW5kX3Njb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYmx1ZXRvb3RoL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjE6NDQ6MzAuMzY2OTg5OTM3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDQ3MjQ3NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qaGNpX3NlbmRfaXNvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9ibHVldG9vdGgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMTo0NDozMC40MTE0NjY1MTNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMyNjYxMjkyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBDYWxsIFNpdGVzIG9mIEludGVybmFsIEJsdWV0b290aCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyB0aGVzZSBmdW5jdGlvbnMgYXJlbid0IGV4cGxpY2l0bHkgKmV4cG9ydGVkKiBmcm9tIHRoZSBgbmV0L2JsdWV0b290aC9gIGRpcmVjdG9yeSwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFRoYXQgbWVhbnMgdGhleSdyZSBsaWtlbHkgaW50ZW5kZWQgZm9yIGludGVybmFsIHVzZSB3aXRoaW4gdGhhdCBzdWJzeXN0ZW0uIEJ1dCB0aGV5J3JlIGRlZmluaXRlbHkgYmVpbmcgKmNhbGxlZCogZnJvbSBvdGhlciBmaWxlcyB3aXRoaW4gdGhpcyBzYW1lIGRpcmVjdG9yeSwgc3VjaCBhcyBgbDJjYXBfY29yZS5jYCwgYHNjby5jYCwgYW5kIGBpc28uY2AuIEdpdmVuIHRoYXQgSSdtIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHBpbnBvaW50ICpleGFjdGx5KiB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIGludm9rZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbnRyb2wgZmxvdyB3aXRoaW4gdGhpcyBCbHVldG9vdGggaW1wbGVtZW50YXRpb24uIFNvLCBJIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgY29kZSBhbmQgaWRlbnRpZnkgYWxsIG9mIHRoZWlyIGNhbGwgc2l0ZXMgd2l0aGluIHRob3NlIGZpbGVzLCBhbmQgbGlrZWx5IG90aGVycyBpbiB0aGF0IGRpcmVjdG9yeSwgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhleSBmaXQgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuIFRoaXMgd2lsbCBoZWxwIG1lIHNpZ25pZmljYW50bHkgaW4gZGV0ZXJtaW5pbmcgdGhlaXIgcHVycG9zZSBhbmQgaG93IHRoZSBCbHVldG9vdGggc3RhY2sgb3BlcmF0ZXMgaW50ZXJuYWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA2OCwiT3V0cHV0VG9rZW5zIjo4NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciIsImdyZXBwZXIiLCJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjE6NDQ6MzQuNzM4MDgxOTM1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjQ0OTU3MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGNpX3NlbmRfYWNsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9ibHVldG9vdGgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9ibHVldG9vdGgvaGNpX2NvcmUuYz0zMTgzPXN0YXRpYyB2b2lkIGhjaV9xdWV1ZV9hY2woc3RydWN0IGhjaV9jaGFuICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpxdWV1ZSxcXG4tLVxcbm5ldC9ibHVldG9vdGgvaGNpX2NvcmUuYy0zMjM2LVxcbm5ldC9ibHVldG9vdGgvaGNpX2NvcmUuYzozMjM3OnZvaWQgaGNpX3NlbmRfYWNsKHN0cnVjdCBoY2lfY2hhbiAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgX191MTYgZmxhZ3MpXFxubmV0L2JsdWV0b290aC9oY2lfY29yZS5jLTMyMzgte1xcbi0tXFxubmV0L2JsdWV0b290aC9sMmNhcF9jb3JlLmM9OTkzPXN0YXRpYyB2b2lkIGwyY2FwX3NlbmRfYWNsKHN0cnVjdCBsMmNhcF9jb25uICpjb25uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2JsdWV0b290aC9sMmNhcF9jb3JlLmMtOTk3LVxcdGlmIChoY2lfY29ubl92YWxpZChjb25uLVxcdTAwM2VoY29uLVxcdTAwM2VoZGV2LCBjb25uLVxcdTAwM2VoY29uKSlcXG5uZXQvYmx1ZXRvb3RoL2wyY2FwX2NvcmUuYzo5OTg6XFx0XFx0aGNpX3NlbmRfYWNsKGNvbm4tXFx1MDAzZWhjaGFuLCBza2IsIGZsYWdzKTtcXG5uZXQvYmx1ZXRvb3RoL2wyY2FwX2NvcmUuYy05OTktXFx0ZWxzZVxcbi0tXFxubmV0L2JsdWV0b290aC9sMmNhcF9jb3JlLmM9MTAyOD1zdGF0aWMgdm9pZCBsMmNhcF9kb19zZW5kKHN0cnVjdCBsMmNhcF9jaGFuICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2JsdWV0b290aC9sMmNhcF9jb3JlLmMtMTA0Ny1cXHRidF9jYihza2IpLVxcdTAwM2Vmb3JjZV9hY3RpdmUgPSB0ZXN0X2JpdChGTEFHX0ZPUkNFX0FDVElWRSwgXFx1MDAyNmNoYW4tXFx1MDAzZWZsYWdzKTtcXG5uZXQvYmx1ZXRvb3RoL2wyY2FwX2NvcmUuYzoxMDQ4OlxcdGhjaV9zZW5kX2FjbChjaGFuLVxcdTAwM2Vjb25uLVxcdTAwM2VoY2hhbiwgc2tiLCBmbGFncyk7XFxubmV0L2JsdWV0b290aC9sMmNhcF9jb3JlLmMtMTA0OS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIxOjQ0OjM1LjAwMjU4MTM0OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkzNjUzMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGNpX3NlbmRfc2NvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9ibHVldG9vdGgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9ibHVldG9vdGgvaGNpX2NvcmUuYz0zMjM3PXZvaWQgaGNpX3NlbmRfYWNsKHN0cnVjdCBoY2lfY2hhbiAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgX191MTYgZmxhZ3MpXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMtMzI0OS0vKiBTZW5kIFNDTyBkYXRhICovXFxubmV0L2JsdWV0b290aC9oY2lfY29yZS5jOjMyNTA6dm9pZCBoY2lfc2VuZF9zY28oc3RydWN0IGhjaV9jb25uICpjb25uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9ibHVldG9vdGgvaGNpX2NvcmUuYy0zMjUxLXtcXG4tLVxcbm5ldC9ibHVldG9vdGgvc2NvLmM9NDA0PXN0YXRpYyBpbnQgc2NvX3NlbmRfZnJhbWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2JsdWV0b290aC9zY28uYy00MTYtXFx0aGNpX3NldHVwX3R4X3RpbWVzdGFtcChza2IsIDEsIHNvY2tjKTtcXG5uZXQvYmx1ZXRvb3RoL3Njby5jOjQxNzpcXHRoY2lfc2VuZF9zY28oY29ubi1cXHUwMDNlaGNvbiwgc2tiKTtcXG5uZXQvYmx1ZXRvb3RoL3Njby5jLTQxOC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjE6NDQ6MzUuMDUxOTUwNDIzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzY4OTg1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoY2lfc2VuZF9pc29cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JsdWV0b290aC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JsdWV0b290aC9oY2lfY29yZS5jPTMyODg9c3RhdGljIHZvaWQgaGNpX3F1ZXVlX2lzbyhzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIHN0cnVjdCBza19idWZmX2hlYWQgKnF1ZXVlLFxcbi0tXFxubmV0L2JsdWV0b290aC9oY2lfY29yZS5jLTMzMzQtXFxubmV0L2JsdWV0b290aC9oY2lfY29yZS5jOjMzMzU6dm9pZCBoY2lfc2VuZF9pc28oc3RydWN0IGhjaV9jb25uICpjb25uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9ibHVldG9vdGgvaGNpX2NvcmUuYy0zMzM2LXtcXG4tLVxcbm5ldC9ibHVldG9vdGgvaXNvLmM9NjA1PXN0YXRpYyBpbnQgaXNvX3NlbmRfZnJhbWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2JsdWV0b290aC9pc28uYy02MjctXFx0XFx0aGNpX3NldHVwX3R4X3RpbWVzdGFtcChza2IsIDEsIHNvY2tjKTtcXG5uZXQvYmx1ZXRvb3RoL2lzby5jOjYyODpcXHRcXHRoY2lfc2VuZF9pc28oY29ubi1cXHUwMDNlaGNvbiwgc2tiKTtcXG5uZXQvYmx1ZXRvb3RoL2lzby5jLTYyOS1cXHR9IGVsc2Uge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMTo0NDozNS4wOTU2NDQ1MThaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjUwMDQ5ODE3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQmx1ZXRvb3RoIEZ1enppbmcgVGFyZ2V0KipcblxuQWxyaWdodCwgdGhpcyBsb29rcyBwcm9taXNpbmcuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIHJlcHJlc2VudCBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLiBXZSdyZSBsb29raW5nIGF0IGBoY2lfc2VuZF9hY2xgLCBgaGNpX3NlbmRfc2NvYCwgYW5kIGBoY2lfc2VuZF9pc29gLCB3aGljaCBoYW5kbGUgQmx1ZXRvb3RoIGRhdGEgdHJhbnNtaXNzaW9uLiBUaGUgcGF0Y2ggdG91Y2hlcyB0aGVzZSBjb3JlIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdmlydHVhbCBIQ0kgZGV2aWNlcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgaW4gcGxhY2UuXG5cbkkgbmVlZCB0byBlbmFibGUgYEJUYCBhbmQgYEJUX0hDSVZIQ0lgLCBvYnZpb3VzbHkuIExldCdzIG1ha2Ugc3VyZSB3ZSdyZSBub3QgbWlzc2luZyBhbnl0aGluZy4gSSB0aGluayBgQlRfQlJFRFJgIGFuZCBgQlRfTEVgIHdpbGwgYmUgbmVjZXNzYXJ5IGFzIHdlbGwsIGNvbnNpZGVyaW5nIHRoZXkgYXJlIGxpa2VseSB1c2VkIGJ5IEFDTCBhbmQgSVNPLiBJJ2xsIHRha2UgYW5vdGhlciBsb29rIGF0IGBuZXQvYmx1ZXRvb3RoL0tjb25maWdgIHRvIGJlIHN1cmUuIFllcCwgYEJUX0JSRURSYCBlbmFibGVzIFwiQmx1ZXRvb3RoIENsYXNzaWMgKEJSL0VEUikgZmVhdHVyZXMsXCIgYW5kIGBCVF9MRWAgZW5hYmxlcyBcIkJsdWV0b290aCBMb3cgRW5lcmd5IChMRSkgZmVhdHVyZXMuXCIgV2Ugc2hvdWxkIGRlZmluaXRlbHkgaW5jbHVkZSB0aGVtLlxuXG5Ob3csIGxldCdzIGFzc2VtYmxlIHRoZSByZXNwb25zZS5cblxuYGBgXG5Xb3J0aEZ1enppbmc6IHRydWVcblJlYXNvbmluZzogVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgQmx1ZXRvb3RoIGRhdGEgdHJhbnNtaXNzaW9uIGZ1bmN0aW9ucyAoaGNpX3NlbmRfYWNsLCBoY2lfc2VuZF9zY28sIGhjaV9zZW5kX2lzbykgdG8gY2hlY2sgaWYgdGhlIGRldmljZSBpcyB1cCBiZWZvcmUgcXVldWluZyB0aGUgdHJhbnNtaXNzaW9uIHdvcmsuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIGlzc3VlcyBkdXJpbmcgZGV2aWNlIHRlYXJkb3duIGFuZCBpcyByZWFjaGFibGUgdmlhIHZpcnR1YWwgSENJIGRldmljZXMuXG5Gb2N1c1N5bWJvbHM6IFtcImhjaV9zZW5kX2FjbFwiLCBcImhjaV9zZW5kX3Njb1wiLCBcImhjaV9zZW5kX2lzb1wiXVxuRW5hYmxlQ29uZmlnczogW1wiQlRcIiwgXCJCVF9IQ0lWSENJXCIsIFwiQlRfQlJFRFJcIiwgXCJCVF9MRVwiXVxuYGBgXG5cblRoYXQgc2hvdWxkIGJlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIG91ciBmdXp6aW5nIGNhbXBhaWduLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Mjk4LCJPdXRwdXRUb2tlbnMiOjEzNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiLCJncmVwcGVyIiwiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIxOjQ0OjQxLjU5NjE0NTU5OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3MjUzMTExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCVFwiLFxuICAgIFwiQlRfSENJVkhDSVwiLFxuICAgIFwiQlRfQlJFRFJcIixcbiAgICBcIkJUX0xFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaGNpX3NlbmRfYWNsXCIsXG4gICAgXCJoY2lfc2VuZF9zY29cIixcbiAgICBcImhjaV9zZW5kX2lzb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgQmx1ZXRvb3RoIGRhdGEgdHJhbnNtaXNzaW9uIGZ1bmN0aW9ucyAoaGNpX3NlbmRfYWNsLCBoY2lfc2VuZF9zY28sIGhjaV9zZW5kX2lzbykgdG8gY2hlY2sgaWYgdGhlIGRldmljZSBpcyB1cCBiZWZvcmUgcXVldWluZyB0aGUgdHJhbnNtaXNzaW9uIHdvcmsuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIGlzc3VlcyBkdXJpbmcgZGV2aWNlIHRlYXJkb3duIGFuZCBpcyByZWFjaGFibGUgdmlhIHZpcnR1YWwgSENJIGRldmljZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlRcIixcbiAgICBcIkJUX0hDSVZIQ0lcIixcbiAgICBcIkJUX0JSRURSXCIsXG4gICAgXCJCVF9MRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhjaV9zZW5kX2FjbFwiLFxuICAgIFwiaGNpX3NlbmRfc2NvXCIsXG4gICAgXCJoY2lfc2VuZF9pc29cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEJsdWV0b290aCBkYXRhIHRyYW5zbWlzc2lvbiBmdW5jdGlvbnMgKGhjaV9zZW5kX2FjbCwgaGNpX3NlbmRfc2NvLCBoY2lfc2VuZF9pc28pIHRvIGNoZWNrIGlmIHRoZSBkZXZpY2UgaXMgdXAgYmVmb3JlIHF1ZXVpbmcgdGhlIHRyYW5zbWlzc2lvbiB3b3JrLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBpc3N1ZXMgZHVyaW5nIGRldmljZSB0ZWFyZG93biBhbmQgaXMgcmVhY2hhYmxlIHZpYSB2aXJ0dWFsIEhDSSBkZXZpY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMTo0NDo0MS42ODM0MDQ1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjI2OTk4Nzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjE6NDQ6NDEuNjgzOTE2NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5NjI2NDgyNzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgc3RhdGUgY2hlY2sgKGB0ZXN0X2JpdChIQ0lfVVAsIFxcdTAwMjZoZGV2LVxcdTAwM2VmbGFncylgKSBiZWZvcmUgcXVldWluZyBUWCB3b3JrIChgcXVldWVfd29ya2ApIGZvciBBQ0wsIFNDTywgYW5kIElTTyBkYXRhIGluIHRoZSBCbHVldG9vdGggSENJIGNvcmUuIFRoaXMgcHJldmVudHMgcXVldWluZyB3b3JrIHdoZW4gdGhlIEhDSSBkZXZpY2UgaXMgbm90IGluIHRoZSBVUCBzdGF0ZSwgd2hpY2ggbGlrZWx5IGFkZHJlc3NlcyBhIHVzZS1hZnRlci1mcmVlLCByYWNlIGNvbmRpdGlvbiwgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGJ1ZyAoZS5nLiwgaWYgdGhlIHdvcmtxdWV1ZSBpcyBkZXN0cm95ZWQgb3IgdGhlIGRldmljZSBpcyBiZWluZyB0b3JuIGRvd24pLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSByZWxhdGVkIHRvIG9iamVjdCBsaWZldGltZXMgYW5kIGNvbmN1cnJlbmN5LCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gKGZvciB1c2UtYWZ0ZXItZnJlZSkgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBtb2RpZmljYXRpb25zIHRvIGRhdGEgc2VudCB0byB1c2VyIHNwYWNlLiBJdCBkb2VzIG5vdCBpbnZvbHZlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQ0N2QzMGNkOGNlZTE1MDU4ZWY4YmE0ZTdhZGQxNzI0NDg2MjZhZTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyA4IDIxOjQ0OjA5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jIGIvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jXG5pbmRleCA1YmE5ZmU4MjYxZWM4Li5kOWYwOTFhZjM2MTgzIDEwMDY0NFxuLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jXG4rKysgYi9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmNcbkBAIC0zMjQyLDcgKzMyNDIsOCBAQCB2b2lkIGhjaV9zZW5kX2FjbChzdHJ1Y3QgaGNpX2NoYW4gKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IsIF9fdTE2IGZsYWdzKVxuIFxuIFx0aGNpX3F1ZXVlX2FjbChjaGFuLCBcdTAwMjZjaGFuLVx1MDAzZWRhdGFfcSwgc2tiLCBmbGFncyk7XG4gXG4tXHRxdWV1ZV93b3JrKGhkZXYtXHUwMDNld29ya3F1ZXVlLCBcdTAwMjZoZGV2LVx1MDAzZXR4X3dvcmspO1xuK1x0aWYgKHRlc3RfYml0KEhDSV9VUCwgXHUwMDI2aGRldi1cdTAwM2VmbGFncykpXG4rXHRcdHF1ZXVlX3dvcmsoaGRldi1cdTAwM2V3b3JrcXVldWUsIFx1MDAyNmhkZXYtXHUwMDNldHhfd29yayk7XG4gfVxuIFxuIC8qIFNlbmQgU0NPIGRhdGEgKi9cbkBAIC0zMjY3LDcgKzMyNjgsOCBAQCB2b2lkIGhjaV9zZW5kX3NjbyhzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRidF9kZXZfZGJnKGhkZXYsIFwiaGNvbiAlcCBxdWV1ZWQgJWRcIiwgY29ubixcbiBcdFx0ICAgc2tiX3F1ZXVlX2xlbihcdTAwMjZjb25uLVx1MDAzZWRhdGFfcSkpO1xuIFxuLVx0cXVldWVfd29yayhoZGV2LVx1MDAzZXdvcmtxdWV1ZSwgXHUwMDI2aGRldi1cdTAwM2V0eF93b3JrKTtcbitcdGlmICh0ZXN0X2JpdChIQ0lfVVAsIFx1MDAyNmhkZXYtXHUwMDNlZmxhZ3MpKVxuK1x0XHRxdWV1ZV93b3JrKGhkZXYtXHUwMDNld29ya3F1ZXVlLCBcdTAwMjZoZGV2LVx1MDAzZXR4X3dvcmspO1xuIH1cbiBcbiAvKiBTZW5kIElTTyBkYXRhICovXG5AQCAtMzMzOCw3ICszMzQwLDggQEAgdm9pZCBoY2lfc2VuZF9pc28oc3RydWN0IGhjaV9jb25uICpjb25uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIFx0aGNpX3F1ZXVlX2lzbyhjb25uLCBcdTAwMjZjb25uLVx1MDAzZWRhdGFfcSwgc2tiKTtcbiBcbi1cdHF1ZXVlX3dvcmsoaGRldi1cdTAwM2V3b3JrcXVldWUsIFx1MDAyNmhkZXYtXHUwMDNldHhfd29yayk7XG4rXHRpZiAodGVzdF9iaXQoSENJX1VQLCBcdTAwMjZoZGV2LVx1MDAzZWZsYWdzKSlcbitcdFx0cXVldWVfd29yayhoZGV2LVx1MDAzZXdvcmtxdWV1ZSwgXHUwMDI2aGRldi1cdTAwM2V0eF93b3JrKTtcbiB9XG4gXG4gLyogLS0tLSBIQ0kgVFggdGFzayAob3V0Z29pbmcgZGF0YSkgLS0tLSAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjE6NDQ6NDEuNjgzOTE3NDZaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTYyNjQ2MTUwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogQmx1ZXRvb3RoIEhDSSBUWCBXb3JrcXVldWUgU2FmZWd1YXJkKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIlRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIGZpeC5cIiBJdCBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlIHdpdGhpbiB0aGUgQmx1ZXRvb3RoIEhDSSBjb3JlLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgdHJhbnNtaXNzaW9uIG9mIEFDTCwgU0NPLCBhbmQgSVNPIGRhdGEuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY2hlY2s6IGBpZiAodGVzdF9iaXQoSENJX1VQLCBcdTAwMjZoZGV2LVx1MDAzZWZsYWdzKSlgIGJlZm9yZSB0aGUgYHF1ZXVlX3dvcmtgIGNhbGxzIGluIGBoY2lfc2VuZF9hY2xgLCBgaGNpX3NlbmRfc2NvYCwgYW5kIGBoY2lfc2VuZF9pc29gLiBCYXNpY2FsbHksIGl0J3MgZW5zdXJpbmcgdGhhdCB0aGUgZGV2aWNlIGlzIGFjdHVhbGx5IFwidXBcIiBhbmQgcnVubmluZyBiZWZvcmUgc3VibWl0dGluZyB3b3JrIHRvIHRoZSB3b3JrcXVldWUuIFRoaXMgaXMgYSBzbWFydCBtb3ZlLCBiZWNhdXNlIGl0IHByZXZlbnRzIHF1ZXVpbmcgd29yayBvbiBhIHdvcmtxdWV1ZSBmb3IgYSBkZXZpY2UgdGhhdCBtaWdodCBiZSBpbiB0aGUgcHJvY2VzcyBvZiBzaHV0dGluZyBkb3duLlxuXG5NeSBpbW1lZGlhdGUgYXNzdW1wdGlvbiBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgdGFyZ2V0aW5nIGEgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZSAoVUFGKSBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugc2l0dWF0aW9uLiBJZiB0aGUgZGV2aWNlIGlzbid0IHVwLCB0aGUgd29ya3F1ZXVlIG1pZ2h0IGJlIGdldHRpbmcgZGVzdHJveWVkIG9yIGlzbid0IHByb3Blcmx5IGluaXRpYWxpemVkLiBUcnlpbmcgdG8gcXVldWUgd29yayBpbiB0aGF0IHNjZW5hcmlvIGlzIGEgcmVjaXBlIGZvciBhIGNyYXNoLCBvciB3b3JzZSwgYSBVQUYgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eS4gVGhpcyBmZWVscyB2ZXJ5IG11Y2ggbGlrZSBhIHJhY2UgY29uZGl0aW9uIG9yIHN0YXRlIG1hY2hpbmUgaXNzdWUuIEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMgc2hvdWxkIGZsYWcgdGhpcyB0eXBlIG9mIHZ1bG5lcmFiaWxpdHkgcHJldHR5IHF1aWNrbHkuXG5cbk15IG5leHQgdGhvdWdodCBpcywgZG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBhbnkgbmV3IHJpc2tzLCBzcGVjaWZpY2FsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzPyBJIG5lZWQgdG8gYmUgZGlsaWdlbnQgaGVyZS4gTGV0J3Mgc2VlLi4uIHRoZSBwYXRjaCBpcyBqdXN0IGFkZGluZyBhIHN0YXRlIGNoZWNrIGJlZm9yZSBhbiBleGlzdGluZyBgcXVldWVfd29ya2AgY2FsbC4gSXQncyBub3QgaW50cm9kdWNpbmcgYW55IG5ldyB2YXJpYWJsZXMsIGFsbG9jYXRpb25zLCBvciBtb2RpZmljYXRpb25zIHRvIGRhdGEgc3RydWN0dXJlcyB0aGF0IGFyZSBzZW50IHRvIHVzZXIgc3BhY2UuIEl0J3MgcHVyZWx5IGFib3V0IGNvbnRyb2xsaW5nIHRoZSAqdGltaW5nKiBvZiB0aGUgZXhpc3Rpbmcgd29yayBxdWV1ZSBvcGVyYXRpb24uIFNvLCBubywgdGhpcyBwYXRjaCBkb2Vzbid0IGxvb2sgbGlrZSBpdCdzIGdvaW5nIHRvIHRyaWdnZXIgYW55IEtNU0FOIGlzc3Vlcy4gSXQncyBtb3JlIGFib3V0IHByb3RlY3RpbmcgdGhlIGV4aXN0aW5nIGNvZGUsIHJhdGhlciB0aGFuIGV4cG9zaW5nIGl0IHRvIG5ldyB2dWxuZXJhYmlsaXRpZXMuXG5cblNvLCBsZXQgbWUgc3VtbWFyaXplIG15IHJlYXNvbmluZyBmb3IgY2xhcml0eTogVGhpcyBwYXRjaCBwcm90ZWN0cyBhZ2FpbnN0IGEgY29uY3VycmVuY3kgYnVnLiBJdCBkb2VzIHRoaXMgYnkgY2hlY2tpbmcgaWYgdGhlIEhDSSBkZXZpY2UgaXMgaW4gdGhlIFwiVVBcIiBzdGF0ZSBiZWZvcmUgc3VibWl0dGluZyB3b3JrIHRvIHRoZSB3b3JrcXVldWUuIFRoaXMgbGlrZWx5IHJlc29sdmVzIGEgVUFGLCByYWNlIGNvbmRpdGlvbiwgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBUaGUgZml4IGl0c2VsZiBpbnZvbHZlcyBvbmx5IGEgY29uZGl0aW9uYWwsIHNvIGl0IGRvZXNuJ3QgcHJlc2VudCBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb3JtYXRpb24gbGVhayByaXNrcywgc28gS01TQU4gaXNuJ3QgcmVsZXZhbnQgaGVyZS4gS0FTQU4gb3Igb3RoZXIgc3RhbmRhcmQgdG9vbHMgYXJlIG1vcmUgYXBwcm9wcmlhdGUgdG8gY2hlY2sgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI5NSwiT3V0cHV0VG9rZW5zIjoyMDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MDYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMTo0NDo1MS4zMTAzODIzNDRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBzdGF0ZSBjaGVjayAoYHRlc3RfYml0KEhDSV9VUCwgXFx1MDAyNmhkZXYtXFx1MDAzZWZsYWdzKWApIGJlZm9yZSBxdWV1aW5nIFRYIHdvcmsgKGBxdWV1ZV93b3JrYCkgZm9yIEFDTCwgU0NPLCBhbmQgSVNPIGRhdGEgaW4gdGhlIEJsdWV0b290aCBIQ0kgY29yZS4gVGhpcyBwcmV2ZW50cyBxdWV1aW5nIHdvcmsgd2hlbiB0aGUgSENJIGRldmljZSBpcyBub3QgaW4gdGhlIFVQIHN0YXRlLCB3aGljaCBsaWtlbHkgYWRkcmVzc2VzIGEgdXNlLWFmdGVyLWZyZWUsIHJhY2UgY29uZGl0aW9uLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYnVnIChlLmcuLCBpZiB0aGUgd29ya3F1ZXVlIGlzIGRlc3Ryb3llZCBvciB0aGUgZGV2aWNlIGlzIGJlaW5nIHRvcm4gZG93bikuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIHJlbGF0ZWQgdG8gb2JqZWN0IGxpZmV0aW1lcyBhbmQgY29uY3VycmVuY3ksIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiAoZm9yIHVzZS1hZnRlci1mcmVlKSBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIG1vZGlmaWNhdGlvbnMgdG8gZGF0YSBzZW50IHRvIHVzZXIgc3BhY2UuIEl0IGRvZXMgbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHN0YXRlIGNoZWNrIChgdGVzdF9iaXQoSENJX1VQLCBcXHUwMDI2aGRldi1cXHUwMDNlZmxhZ3MpYCkgYmVmb3JlIHF1ZXVpbmcgVFggd29yayAoYHF1ZXVlX3dvcmtgKSBmb3IgQUNMLCBTQ08sIGFuZCBJU08gZGF0YSBpbiB0aGUgQmx1ZXRvb3RoIEhDSSBjb3JlLiBUaGlzIHByZXZlbnRzIHF1ZXVpbmcgd29yayB3aGVuIHRoZSBIQ0kgZGV2aWNlIGlzIG5vdCBpbiB0aGUgVVAgc3RhdGUsIHdoaWNoIGxpa2VseSBhZGRyZXNzZXMgYSB1c2UtYWZ0ZXItZnJlZSwgcmFjZSBjb25kaXRpb24sIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBidWcgKGUuZy4sIGlmIHRoZSB3b3JrcXVldWUgaXMgZGVzdHJveWVkIG9yIHRoZSBkZXZpY2UgaXMgYmVpbmcgdG9ybiBkb3duKS4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgcmVsYXRlZCB0byBvYmplY3QgbGlmZXRpbWVzIGFuZCBjb25jdXJyZW5jeSwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIChmb3IgdXNlLWFmdGVyLWZyZWUpIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgbW9kaWZpY2F0aW9ucyB0byBkYXRhIHNlbnQgdG8gdXNlciBzcGFjZS4gSXQgZG9lcyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflownllmn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-08 21:42:16 +0000 UTC FinishedAt: 2026-08-08 21:44:52 +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": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BT", "BT_HCIVHCI", "BT_BREDR", "BT_LE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BT", "BT_HCIVHCI", "BT_BREDR", "BT_LE" ], "series_id": "09d5ca51-a09e-4e69-b1b3-6e379b5928fa" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "hci_send_acl", "hci_send_sco", "hci_send_iso" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjQ0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JUJiMzNDssCiAgICAmIzM0O0JUX0hDSVZIQ0kmIzM0OywKICAgICYjMzQ7QlRfQlJFRFImIzM0OywKICAgICYjMzQ7QlRfTEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoY2lfc2VuZF9hY2wmIzM0OywKICAgICYjMzQ7aGNpX3NlbmRfc2NvJiMzNDssCiAgICAmIzM0O2hjaV9zZW5kX2lzbyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBzdGF0ZSBjaGVjayAoYHRlc3RfYml0KEhDSV9VUCwgXHUwMDI2aGRldi1cdTAwM2VmbGFncylgKSBiZWZvcmUgcXVldWluZyBUWCB3b3JrIChgcXVldWVfd29ya2ApIGZvciBBQ0wsIFNDTywgYW5kIElTTyBkYXRhIGluIHRoZSBCbHVldG9vdGggSENJIGNvcmUuIFRoaXMgcHJldmVudHMgcXVldWluZyB3b3JrIHdoZW4gdGhlIEhDSSBkZXZpY2UgaXMgbm90IGluIHRoZSBVUCBzdGF0ZSwgd2hpY2ggbGlrZWx5IGFkZHJlc3NlcyBhIHVzZS1hZnRlci1mcmVlLCByYWNlIGNvbmRpdGlvbiwgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGJ1ZyAoZS5nLiwgaWYgdGhlIHdvcmtxdWV1ZSBpcyBkZXN0cm95ZWQgb3IgdGhlIGRldmljZSBpcyBiZWluZyB0b3JuIGRvd24pLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSByZWxhdGVkIHRvIG9iamVjdCBsaWZldGltZXMgYW5kIGNvbmN1cnJlbmN5LCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gKGZvciB1c2UtYWZ0ZXItZnJlZSkgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBtb2RpZmljYXRpb25zIHRvIGRhdGEgc2VudCB0byB1c2VyIHNwYWNlLiBJdCBkb2VzIG5vdCBpbnZvbHZlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEJsdWV0b290aCBkYXRhIHRyYW5zbWlzc2lvbiBmdW5jdGlvbnMgKGhjaV9zZW5kX2FjbCwgaGNpX3NlbmRfc2NvLCBoY2lfc2VuZF9pc28pIHRvIGNoZWNrIGlmIHRoZSBkZXZpY2UgaXMgdXAgYmVmb3JlIHF1ZXVpbmcgdGhlIHRyYW5zbWlzc2lvbiB3b3JrLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBpc3N1ZXMgZHVyaW5nIGRldmljZSB0ZWFyZG93biBhbmQgaXMgcmVhY2hhYmxlIHZpYSB2aXJ0dWFsIEhDSSBkZXZpY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjQ0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZDQ3ZDMwY2Q4Y2VlMTUwNThlZjhiYTRlN2FkZDE3MjQ0ODYyNmFlMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDggMjE6NDQ6MDkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jIGIvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jXG5pbmRleCA1YmE5ZmU4MjYxZWM4Li5kOWYwOTFhZjM2MTgzIDEwMDY0NFxuLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmNcbkBAIC0zMjQyLDcgJiM0MzszMjQyLDggQEAgdm9pZCBoY2lfc2VuZF9hY2woc3RydWN0IGhjaV9jaGFuICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX3UxNiBmbGFncylcbiBcbiBcdGhjaV9xdWV1ZV9hY2woY2hhbiwgXHUwMDI2Y2hhbi1cdTAwM2VkYXRhX3EsIHNrYiwgZmxhZ3MpO1xuIFxuLVx0cXVldWVfd29yayhoZGV2LVx1MDAzZXdvcmtxdWV1ZSwgXHUwMDI2aGRldi1cdTAwM2V0eF93b3JrKTtcbiYjNDM7XHRpZiAodGVzdF9iaXQoSENJX1VQLCBcdTAwMjZoZGV2LVx1MDAzZWZsYWdzKSlcbiYjNDM7XHRcdHF1ZXVlX3dvcmsoaGRldi1cdTAwM2V3b3JrcXVldWUsIFx1MDAyNmhkZXYtXHUwMDNldHhfd29yayk7XG4gfVxuIFxuIC8qIFNlbmQgU0NPIGRhdGEgKi9cbkBAIC0zMjY3LDcgJiM0MzszMjY4LDggQEAgdm9pZCBoY2lfc2VuZF9zY28oc3RydWN0IGhjaV9jb25uICpjb25uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0YnRfZGV2X2RiZyhoZGV2LCBcJiMzNDtoY29uICVwIHF1ZXVlZCAlZFwmIzM0OywgY29ubixcbiBcdFx0ICAgc2tiX3F1ZXVlX2xlbihcdTAwMjZjb25uLVx1MDAzZWRhdGFfcSkpO1xuIFxuLVx0cXVldWVfd29yayhoZGV2LVx1MDAzZXdvcmtxdWV1ZSwgXHUwMDI2aGRldi1cdTAwM2V0eF93b3JrKTtcbiYjNDM7XHRpZiAodGVzdF9iaXQoSENJX1VQLCBcdTAwMjZoZGV2LVx1MDAzZWZsYWdzKSlcbiYjNDM7XHRcdHF1ZXVlX3dvcmsoaGRldi1cdTAwM2V3b3JrcXVldWUsIFx1MDAyNmhkZXYtXHUwMDNldHhfd29yayk7XG4gfVxuIFxuIC8qIFNlbmQgSVNPIGRhdGEgKi9cbkBAIC0zMzM4LDcgJiM0MzszMzQwLDggQEAgdm9pZCBoY2lfc2VuZF9pc28oc3RydWN0IGhjaV9jb25uICpjb25uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIFx0aGNpX3F1ZXVlX2lzbyhjb25uLCBcdTAwMjZjb25uLVx1MDAzZWRhdGFfcSwgc2tiKTtcbiBcbi1cdHF1ZXVlX3dvcmsoaGRldi1cdTAwM2V3b3JrcXVldWUsIFx1MDAyNmhkZXYtXHUwMDNldHhfd29yayk7XG4mIzQzO1x0aWYgKHRlc3RfYml0KEhDSV9VUCwgXHUwMDI2aGRldi1cdTAwM2VmbGFncykpXG4mIzQzO1x0XHRxdWV1ZV93b3JrKGhkZXYtXHUwMDNld29ya3F1ZXVlLCBcdTAwMjZoZGV2LVx1MDAzZXR4X3dvcmspO1xuIH1cbiBcbiAvKiAtLS0tIEhDSSBUWCB0YXNrIChvdXRnb2luZyBkYXRhKSAtLS0tICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMjE6NDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JUJiMzNDssCiAgICAmIzM0O0JUX0hDSVZIQ0kmIzM0OywKICAgICYjMzQ7QlRfQlJFRFImIzM0OywKICAgICYjMzQ7QlRfTEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoY2lfc2VuZF9hY2wmIzM0OywKICAgICYjMzQ7aGNpX3NlbmRfc2NvJiMzNDssCiAgICAmIzM0O2hjaV9zZW5kX2lzbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEJsdWV0b290aCBkYXRhIHRyYW5zbWlzc2lvbiBmdW5jdGlvbnMgKGhjaV9zZW5kX2FjbCwgaGNpX3NlbmRfc2NvLCBoY2lfc2VuZF9pc28pIHRvIGNoZWNrIGlmIHRoZSBkZXZpY2UgaXMgdXAgYmVmb3JlIHF1ZXVpbmcgdGhlIHRyYW5zbWlzc2lvbiB3b3JrLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBpc3N1ZXMgZHVyaW5nIGRldmljZSB0ZWFyZG93biBhbmQgaXMgcmVhY2hhYmxlIHZpYSB2aXJ0dWFsIEhDSSBkZXZpY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDQ3ZDMwY2Q4Y2VlMTUwNThlZjhiYTRlN2FkZDE3MjQ0ODYyNmFlMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDggMjE6NDQ6MDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMKaW5kZXggNWJhOWZlODI2MWVjOC4uZDlmMDkxYWYzNjE4MyAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYwpAQCAtMzI0Miw3ICYjNDM7MzI0Miw4IEBAIHZvaWQgaGNpX3NlbmRfYWNsKHN0cnVjdCBoY2lfY2hhbiAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgX191MTYgZmxhZ3MpCiAKIAloY2lfcXVldWVfYWNsKGNoYW4sICZhbXA7Y2hhbi0mZ3Q7ZGF0YV9xLCBza2IsIGZsYWdzKTsKIAotCXF1ZXVlX3dvcmsoaGRldi0mZ3Q7d29ya3F1ZXVlLCAmYW1wO2hkZXYtJmd0O3R4X3dvcmspOwomIzQzOwlpZiAodGVzdF9iaXQoSENJX1VQLCAmYW1wO2hkZXYtJmd0O2ZsYWdzKSkKJiM0MzsJCXF1ZXVlX3dvcmsoaGRldi0mZ3Q7d29ya3F1ZXVlLCAmYW1wO2hkZXYtJmd0O3R4X3dvcmspOwogfQogCiAvKiBTZW5kIFNDTyBkYXRhICovCkBAIC0zMjY3LDcgJiM0MzszMjY4LDggQEAgdm9pZCBoY2lfc2VuZF9zY28oc3RydWN0IGhjaV9jb25uICpjb25uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCWJ0X2Rldl9kYmcoaGRldiwgJiMzNDtoY29uICVwIHF1ZXVlZCAlZCYjMzQ7LCBjb25uLAogCQkgICBza2JfcXVldWVfbGVuKCZhbXA7Y29ubi0mZ3Q7ZGF0YV9xKSk7CiAKLQlxdWV1ZV93b3JrKGhkZXYtJmd0O3dvcmtxdWV1ZSwgJmFtcDtoZGV2LSZndDt0eF93b3JrKTsKJiM0MzsJaWYgKHRlc3RfYml0KEhDSV9VUCwgJmFtcDtoZGV2LSZndDtmbGFncykpCiYjNDM7CQlxdWV1ZV93b3JrKGhkZXYtJmd0O3dvcmtxdWV1ZSwgJmFtcDtoZGV2LSZndDt0eF93b3JrKTsKIH0KIAogLyogU2VuZCBJU08gZGF0YSAqLwpAQCAtMzMzOCw3ICYjNDM7MzM0MCw4IEBAIHZvaWQgaGNpX3NlbmRfaXNvKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAogCWhjaV9xdWV1ZV9pc28oY29ubiwgJmFtcDtjb25uLSZndDtkYXRhX3EsIHNrYik7CiAKLQlxdWV1ZV93b3JrKGhkZXYtJmd0O3dvcmtxdWV1ZSwgJmFtcDtoZGV2LSZndDt0eF93b3JrKTsKJiM0MzsJaWYgKHRlc3RfYml0KEhDSV9VUCwgJmFtcDtoZGV2LSZndDtmbGFncykpCiYjNDM7CQlxdWV1ZV93b3JrKGhkZXYtJmd0O3dvcmtxdWV1ZSwgJmFtcDtoZGV2LSZndDt0eF93b3JrKTsKIH0KIAogLyogLS0tLSBIQ0kgVFggdGFzayAob3V0Z29pbmcgZGF0YSkgLS0tLSAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjk4CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgYSBCbHVldG9vdGggSENJIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW4gYG5ldC9ibHVldG9vdGgvaGNpX2NvcmUuY2AgaXMgbWFraW5nIGEgY3JpdGljYWwgY2hlY2suIEl0JiMzOTtzIGxvb2tpbmcgdG8gc2VlIGlmIGBIQ0lfVVBgIGlzIHNldCBpbiBgaGRldi0mZ3Q7ZmxhZ3NgIGJlZm9yZSBzY2hlZHVsaW5nIGBoZGV2LSZndDt0eF93b3JrYCB3aXRoaW4gYGhjaV9zZW5kX2FjbGAsIGBoY2lfc2VuZF9zY29gLCBhbmQgYGhjaV9zZW5kX2lzb2AuIEVzc2VudGlhbGx5LCBpdCYjMzk7cyBwcmV2ZW50aW5nIHRoZSBxdWV1aW5nIG9mIHRyYW5zbWl0IHdvcmsgd2hlbiB0aGUgQmx1ZXRvb3RoIGRldmljZSBpc24mIzM5O3QgZnVsbHkgaW5pdGlhbGl6ZWQgYW5kIGFjdGl2ZS4gVGhpcyBtYWtlcyBzZW5zZTsgc2tpcHBpbmcgdGhpcyBjaGVjayBjYW4gbGVhZCB0byBiYWQgdGhpbmdzIGhhcHBlbmluZywgbGlrZSB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIG9yIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMgaWYgdGhlIGRldmljZSBpcyBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBzaHV0IGRvd24uIFRoYXQmIzM5O3MgYSBjbGFzc2ljIHJhY2UgY29uZGl0aW9uIHNjZW5hcmlvLgoKTm93LCBsZXQmIzM5O3MgdGhpbmsgYWJvdXQgdGhpcyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gV2UmIzM5O3ZlIGdvdCB0byBkZXRlcm1pbmUgdGhlIHJlYWNoYWJpbGl0eSBhbmQgdnVsbmVyYWJpbGl0eSBzdXJmYWNlIG9mIHRob3NlIGZ1bmN0aW9ucy4gYGhjaV9zZW5kX2FjbGAsIGBoY2lfc2VuZF9zY29gLCBhbmQgYGhjaV9zZW5kX2lzb2AgYXJlIGZ1bmRhbWVudGFsIEJsdWV0b290aCBmdW5jdGlvbnMgZm9yIHRyYW5zbWl0dGluZyBBQ0wsIFNDTywgYW5kIElTTyBkYXRhLiBUaGVzZSBhcmUgY29yZSBjb21wb25lbnRzLCBzbyB0aGV5JiMzOTtyZSBhYnNvbHV0ZWx5IHJlYWNoYWJsZSBhbmQgcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZy4gVGhleSBoYW5kbGUgdGhlIGVzc2VudGlhbCBkYXRhIHRyYW5zZmVyIG9wZXJhdGlvbnMsIHNvIGlmIHRoZXJlJiMzOTtzIGEgcHJvYmxlbSB0aGVyZSwgaXQmIzM5O3MgZ29pbmcgdG8gYmUgYSBiaWcgb25lLgoKTmV4dCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIHRvIGVuYWJsZSB0aGlzIGNvZGUuIEl0IGxvb2tzIGxpa2UgYENPTkZJR19CVGAgaXMgdGhlIHByaW1hcnkgb25lLCBuYXR1cmFsbHkuIEJ1dCwgZ2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgZGlmZmVyZW50IEhDSSBpbXBsZW1lbnRhdGlvbnMsIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGBDT05GSUdfQlRfSENJVUFSVGAgb3IgYENPTkZJR19CVF9IQ0lWSENJYCBhcyB3ZWxsLiBWaXJ0dWFsIEhDSSBkZXZpY2VzIGFyZSBvZnRlbiBzb3VyY2VzIG9mIHN1YnRsZSBidWdzLiBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCBgbmV0L2JsdWV0b290aC9LY29uZmlnYCB0byBjb25maXJtIHRoZSBleGFjdCBkZXBlbmRlbmNpZXMgYW5kIGFueSByZWxldmFudCBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGltcGFjdCB0aGUgcmVhY2hhYmlsaXR5IG9mIHRoZXNlIGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYmx1ZXRvb3RoL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JsdWV0b290aC9LY29uZmlnLTUtXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6NjptZW51Y29uZmlnIEJUXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O0JsdWV0b290aCBzdWJzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9ibHVldG9vdGgvS2NvbmZpZy00MS1cbm5ldC9ibHVldG9vdGgvS2NvbmZpZzo0Mjpjb25maWcgQlRfQlJFRFJcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy00My1cdGJvb2wgXCYjMzQ7Qmx1ZXRvb3RoIENsYXNzaWMgKEJSL0VEUikgZmVhdHVyZXNcJiMzNDtcbi0tXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc9NTY9c291cmNlIFwmIzM0O25ldC9ibHVldG9vdGgvaGlkcC9LY29uZmlnXCYjMzQ7XG5uZXQvYmx1ZXRvb3RoL0tjb25maWctNTctXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6NTg6Y29uZmlnIEJUX0xFXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctNTktXHRib29sIFwmIzM0O0JsdWV0b290aCBMb3cgRW5lcmd5IChMRSkgZmVhdHVyZXNcJiMzNDtcbi0tXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctNjUtXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6NjY6Y29uZmlnIEJUX0xFX0wyQ0FQX0VDUkVEXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctNjctXHRib29sIFwmIzM0O0JsdWV0b290aCBMMkNBUCBFbmhhbmNlZCBDcmVkaXQgRmxvdyBDb250cm9sXCYjMzQ7XG4tLVxubmV0L2JsdWV0b290aC9LY29uZmlnLTc2LVxubmV0L2JsdWV0b290aC9LY29uZmlnOjc3OmNvbmZpZyBCVF82TE9XUEFOXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctNzgtXHR0cmlzdGF0ZSBcJiMzNDtCbHVldG9vdGggNkxvV1BBTiBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2JsdWV0b290aC9LY29uZmlnLTgyLVxubmV0L2JsdWV0b290aC9LY29uZmlnOjgzOmNvbmZpZyBCVF9MRURTXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctODQtXHRib29sIFwmIzM0O0VuYWJsZSBMRUQgdHJpZ2dlcnNcJiMzNDtcbi0tXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctOTEtXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6OTI6Y29uZmlnIEJUX01TRlRFWFRcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy05My1cdGJvb2wgXCYjMzQ7RW5hYmxlIE1pY3Jvc29mdCBleHRlbnNpb25zXCYjMzQ7XG4tLVxubmV0L2JsdWV0b290aC9LY29uZmlnLTk4LVxubmV0L2JsdWV0b290aC9LY29uZmlnOjk5OmNvbmZpZyBCVF9BT1NQRVhUXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctMTAwLVx0Ym9vbCBcJiMzNDtFbmFibGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0IGV4dGVuc2lvbnNcJiMzNDtcbi0tXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctMTA1LVxubmV0L2JsdWV0b290aC9LY29uZmlnOjEwNjpjb25maWcgQlRfREVCVUdGU1xubmV0L2JsdWV0b290aC9LY29uZmlnLTEwNy1cdGJvb2wgXCYjMzQ7RXhwb3J0IEJsdWV0b290aCBpbnRlcm5hbHMgaW4gZGVidWdmc1wmIzM0O1xuLS1cbm5ldC9ibHVldG9vdGgvS2NvbmZpZy0xMTMtXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6MTE0OmNvbmZpZyBCVF9TRUxGVEVTVFxubmV0L2JsdWV0b290aC9LY29uZmlnLTExNS1cdGJvb2wgXCYjMzQ7Qmx1ZXRvb3RoIHNlbGYgdGVzdGluZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2JsdWV0b290aC9LY29uZmlnLTEyNi1cbm5ldC9ibHVldG9vdGgvS2NvbmZpZzoxMjc6Y29uZmlnIEJUX1NFTEZURVNUX0VDREhcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy0xMjgtXHRib29sIFwmIzM0O0VDREggdGVzdCBjYXNlc1wmIzM0O1xuLS1cbm5ldC9ibHVldG9vdGgvS2NvbmZpZy0xMzMtXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6MTM0OmNvbmZpZyBCVF9TRUxGVEVTVF9TTVBcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O1NNUCB0ZXN0IGNhc2VzXCYjMzQ7XG4tLVxubmV0L2JsdWV0b290aC9LY29uZmlnLTE0MC1cbm5ldC9ibHVldG9vdGgvS2NvbmZpZzoxNDE6Y29uZmlnIEJUX0ZFQVRVUkVfREVCVUdcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy0xNDItXHRib29sIFwmIzM0O0VuYWJsZSBydW50aW1lIG9wdGlvbiBmb3IgZGVidWdnaW5nIHN0YXRlbWVudHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjU5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkJsdWV0b290aCBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpBbHJpZ2h0LCB0aGUgY29yZSByZXF1aXJlbWVudCBoZXJlIGJvaWxzIGRvd24gdG8gYEJUYC4gVGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIFRpbWUgdG8gZHJpbGwgZG93biBhbmQgc2VlIGhvdyB3ZSYjMzk7cmUgaGFuZGxpbmcgdGhlIHZpcnR1YWwgSENJIGRyaXZlci4gTXkgaW5zdGluY3QgaXMgdG8gaGVhZCBzdHJhaWdodCB0byBgZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZ2AuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYW5kIGFueSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byB0aGlzIHZpcnR1YWwgaW50ZXJmYWNlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgb3B0aW9ucyBhcmUgZXhwb3NlZCB0aGVyZSwgYW5kIHdoYXQgb3RoZXIgc2V0dGluZ3MgbWlnaHQgaW5mbHVlbmNlIHRoaXMgcGFydGljdWxhciBzdWJzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGxhbmRzY2FwZSBvZiBjaG9pY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCVF9IQ0lWSENJJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2JsdWV0b290aC9LY29uZmlnPTMyNz1jb25maWcgQlRfSENJQkZVU0Jcbi0tXG5kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnLTMzOS1cbmRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWc6MzQwOmNvbmZpZyBCVF9IQ0lWSENJXG5kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnLTM0MS1cdHRyaXN0YXRlIFwmIzM0O0hDSSBWSENJIChWaXJ0dWFsIEhDSSBkZXZpY2UpIGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MzcKCQkJCQkJCW91dHB1dDogMTA1CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBCbHVldG9vdGggQ29uZmlndXJhdGlvbiBPcHRpb25zIGFuZCBUcmFuc21pc3Npb24gRnVuY3Rpb25zKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCBCbHVldG9vdGggY29uZmlndXJhdGlvbnMsIGFuZCBpdCBzZWVtcyBsaWtlIGVuYWJsaW5nIGBCVGAgYW5kIGBCVF9IQ0lWSENJYCBpcyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LiBJJiMzOTttIGFzc3VtaW5nIHRoZXNlIGFyZSBmdW5kYW1lbnRhbCBjb25maWd1cmF0aW9ucyBsaWtlbHkgcmVsYXRlZCB0byBiYXNpYyBCbHVldG9vdGggZnVuY3Rpb25hbGl0eSBhbmQgcG9zc2libHkgc29tZSBraW5kIG9mIEhDSS1vdmVyLUhDSSBzZXR1cCwgcGVyaGFwcyBmb3IgdGVzdGluZyBvciBzcGVjaWZpYyBoYXJkd2FyZSBpbnRlZ3JhdGlvbnMuCgpOb3csIEkgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhlIGxvdy1sZXZlbCB0cmFuc21pc3Npb24gZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgaG93IGRhdGEgaXMgYWN0dWFsbHkgbW92aW5nLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGBoY2lfc2VuZF9hY2xgLCBgaGNpX3NlbmRfc2NvYCwgYW5kIGBoY2lfc2VuZF9pc29gIGZ1bmN0aW9ucy4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgYXJlIGltcGxlbWVudGVkIHdpdGhpbiB0aGUgc2VsZWN0ZWQgY29uZmlndXJhdGlvbi4gVGhlc2UgYXJlIHRoZSBjb3JlIHByaW1pdGl2ZXMgZm9yIHNlbmRpbmcgYXN5bmNocm9ub3VzIGNvbm5lY3Rpb25sZXNzIChBQ0wpLCBzeW5jaHJvbm91cyBjb25uZWN0aW9uLW9yaWVudGVkIChTQ08pLCBhbmQgaXNvY2hyb25vdXMgKElTTykgZGF0YSByZXNwZWN0aXZlbHkuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGhvdyB0aGUgYnVmZmVycyBhcmUgaGFuZGxlZCwgYW55IHF1ZXVlaW5nIHN0cmF0ZWdpZXMsIGludGVycnVwdCBtZWNoYW5pc21zLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgZGlmZmVyZW5jZXMgYWNyb3NzIHRoZSBpbXBsZW1lbnRhdGlvbnMgdGhhdCBjb3VsZCBpbXBhY3QgcGVyZm9ybWFuY2Ugb3IgbGF0ZW5jeSBpbiBkaWZmZXJlbnQgc2NlbmFyaW9zLiBJJiMzOTtsbCBiZSBwYXlpbmcgYXR0ZW50aW9uIHRvIGFueSBzcGVjaWZpYyBoYXJkd2FyZSBkZXBlbmRlbmNpZXMgb3Igb3B0aW1pemF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIGhjaV9zZW5kX2FjbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmM9MzE4Mz1zdGF0aWMgdm9pZCBoY2lfcXVldWVfYWNsKHN0cnVjdCBoY2lfY2hhbiAqY2hhbiwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqcXVldWUsXG4tLVxubmV0L2JsdWV0b290aC9oY2lfY29yZS5jLTMyMzYtXG5uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmM6MzIzNzp2b2lkIGhjaV9zZW5kX2FjbChzdHJ1Y3QgaGNpX2NoYW4gKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IsIF9fdTE2IGZsYWdzKVxubmV0L2JsdWV0b290aC9oY2lfY29yZS5jLTMyMzgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgaGNpX3NlbmRfc2NvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JsdWV0b290aC9oY2lfY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYz0zMjM3PXZvaWQgaGNpX3NlbmRfYWNsKHN0cnVjdCBoY2lfY2hhbiAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgX191MTYgZmxhZ3MpXG4tLVxubmV0L2JsdWV0b290aC9oY2lfY29yZS5jLTMyNDktLyogU2VuZCBTQ08gZGF0YSAqL1xubmV0L2JsdWV0b290aC9oY2lfY29yZS5jOjMyNTA6dm9pZCBoY2lfc2VuZF9zY28oc3RydWN0IGhjaV9jb25uICpjb25uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2JsdWV0b290aC9oY2lfY29yZS5jLTMyNTEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIGhjaV9zZW5kX2lzbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmM9MzI4OD1zdGF0aWMgdm9pZCBoY2lfcXVldWVfaXNvKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqcXVldWUsXG4tLVxubmV0L2JsdWV0b290aC9oY2lfY29yZS5jLTMzMzQtXG5uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmM6MzMzNTp2b2lkIGhjaV9zZW5kX2lzbyhzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMtMzMzNi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3MjMKCQkJCQkJCW91dHB1dDogOTkKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIGBuZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmNgIEV4cG9ydHMqKgoKQWxyaWdodCwgbG9va2luZyBhdCBgbmV0L2JsdWV0b290aC9oY2lfY29yZS5jYCwgSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHRoZSBzY29wZSBvZiB3aGF0IEkmIzM5O20gZGVhbGluZyB3aXRoLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IGFyZSB0aGVzZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlLCBzcGVjaWZpY2FsbHksICpleHBvcnRlZCo/IE9yLCBwdXQgYW5vdGhlciB3YXksIGFyZSB0aGV5IGludGVuZGVkIHRvIGJlIHB1YmxpYywgb3Igbm9uLXN0YXRpYz8gSSBuZWVkIHRvIHZlcmlmeSB3aGV0aGVyIHRoZXkmIzM5O3JlIGFjY2Vzc2libGUgb3V0c2lkZSBvZiB0aGlzIHNwZWNpZmljIGNvbXBpbGF0aW9uIHVuaXQuIEtub3dpbmcgdGhpcyB3aWxsIGltbWVkaWF0ZWx5IGhlbHAgbWUgdW5kZXJzdGFuZCB0aGVpciBpbnRlbmRlZCB1c2UgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIGJyb2FkZXIgQmx1ZXRvb3RoIHN0YWNrLiBUaGlzIGlzIGEgc3RhbmRhcmQgaW5pdGlhbCBkaWFnbm9zdGljIHN0ZXAgd2hlbiBwb2tpbmcgYXJvdW5kIGluIGtlcm5lbCBjb2RlIGxpa2UgdGhpcy4gSSBjYW4mIzM5O3QgcHJvY2VlZCBlZmZpY2llbnRseSB3aXRob3V0IGtub3dpbmcgaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBtZWFudCB0byBiZSB1c2VkIGludGVybmFsbHkgb3IgaWYgdGhleSBhcmUgaW50ZXJmYWNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMjE6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipoY2lfc2VuZF9hY2wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYmx1ZXRvb3RoLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qaGNpX3NlbmRfc2NvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JsdWV0b290aC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmhjaV9zZW5kX2lzbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9ibHVldG9vdGgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMjE6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTA2OAoJCQkJCQkJb3V0cHV0OiA4NwoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIENhbGwgU2l0ZXMgb2YgSW50ZXJuYWwgQmx1ZXRvb3RoIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyB0aGVzZSBmdW5jdGlvbnMgYXJlbiYjMzk7dCBleHBsaWNpdGx5ICpleHBvcnRlZCogZnJvbSB0aGUgYG5ldC9ibHVldG9vdGgvYCBkaXJlY3RvcnksIHdoaWNoIGlzIGludGVyZXN0aW5nLiBUaGF0IG1lYW5zIHRoZXkmIzM5O3JlIGxpa2VseSBpbnRlbmRlZCBmb3IgaW50ZXJuYWwgdXNlIHdpdGhpbiB0aGF0IHN1YnN5c3RlbS4gQnV0IHRoZXkmIzM5O3JlIGRlZmluaXRlbHkgYmVpbmcgKmNhbGxlZCogZnJvbSBvdGhlciBmaWxlcyB3aXRoaW4gdGhpcyBzYW1lIGRpcmVjdG9yeSwgc3VjaCBhcyBgbDJjYXBfY29yZS5jYCwgYHNjby5jYCwgYW5kIGBpc28uY2AuIEdpdmVuIHRoYXQgSSYjMzk7bSB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBwaW5wb2ludCAqZXhhY3RseSogd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBiZWluZyBpbnZva2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb250cm9sIGZsb3cgd2l0aGluIHRoaXMgQmx1ZXRvb3RoIGltcGxlbWVudGF0aW9uLiBTbywgSSBuZWVkIHRvIGdvIHRocm91Z2ggdGhlIGNvZGUgYW5kIGlkZW50aWZ5IGFsbCBvZiB0aGVpciBjYWxsIHNpdGVzIHdpdGhpbiB0aG9zZSBmaWxlcywgYW5kIGxpa2VseSBvdGhlcnMgaW4gdGhhdCBkaXJlY3RvcnksIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoZXkgZml0IGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLiBUaGlzIHdpbGwgaGVscCBtZSBzaWduaWZpY2FudGx5IGluIGRldGVybWluaW5nIHRoZWlyIHB1cnBvc2UgYW5kIGhvdyB0aGUgQmx1ZXRvb3RoIHN0YWNrIG9wZXJhdGVzIGludGVybmFsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hjaV9zZW5kX2FjbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9ibHVldG9vdGgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYz0zMTgzPXN0YXRpYyB2b2lkIGhjaV9xdWV1ZV9hY2woc3RydWN0IGhjaV9jaGFuICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpxdWV1ZSxcbi0tXG5uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMtMzIzNi1cbm5ldC9ibHVldG9vdGgvaGNpX2NvcmUuYzozMjM3OnZvaWQgaGNpX3NlbmRfYWNsKHN0cnVjdCBoY2lfY2hhbiAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgX191MTYgZmxhZ3MpXG5uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMtMzIzOC17XG4tLVxubmV0L2JsdWV0b290aC9sMmNhcF9jb3JlLmM9OTkzPXN0YXRpYyB2b2lkIGwyY2FwX3NlbmRfYWNsKHN0cnVjdCBsMmNhcF9jb25uICpjb25uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9ibHVldG9vdGgvbDJjYXBfY29yZS5jLTk5Ny1cdGlmIChoY2lfY29ubl92YWxpZChjb25uLVx1MDAzZWhjb24tXHUwMDNlaGRldiwgY29ubi1cdTAwM2VoY29uKSlcbm5ldC9ibHVldG9vdGgvbDJjYXBfY29yZS5jOjk5ODpcdFx0aGNpX3NlbmRfYWNsKGNvbm4tXHUwMDNlaGNoYW4sIHNrYiwgZmxhZ3MpO1xubmV0L2JsdWV0b290aC9sMmNhcF9jb3JlLmMtOTk5LVx0ZWxzZVxuLS1cbm5ldC9ibHVldG9vdGgvbDJjYXBfY29yZS5jPTEwMjg9c3RhdGljIHZvaWQgbDJjYXBfZG9fc2VuZChzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvYmx1ZXRvb3RoL2wyY2FwX2NvcmUuYy0xMDQ3LVx0YnRfY2Ioc2tiKS1cdTAwM2Vmb3JjZV9hY3RpdmUgPSB0ZXN0X2JpdChGTEFHX0ZPUkNFX0FDVElWRSwgXHUwMDI2Y2hhbi1cdTAwM2VmbGFncyk7XG5uZXQvYmx1ZXRvb3RoL2wyY2FwX2NvcmUuYzoxMDQ4Olx0aGNpX3NlbmRfYWNsKGNoYW4tXHUwMDNlY29ubi1cdTAwM2VoY2hhbiwgc2tiLCBmbGFncyk7XG5uZXQvYmx1ZXRvb3RoL2wyY2FwX2NvcmUuYy0xMDQ5LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMjE6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGNpX3NlbmRfc2NvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JsdWV0b290aC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JsdWV0b290aC9oY2lfY29yZS5jPTMyMzc9dm9pZCBoY2lfc2VuZF9hY2woc3RydWN0IGhjaV9jaGFuICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX3UxNiBmbGFncylcbi0tXG5uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMtMzI0OS0vKiBTZW5kIFNDTyBkYXRhICovXG5uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmM6MzI1MDp2b2lkIGhjaV9zZW5kX3NjbyhzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMtMzI1MS17XG4tLVxubmV0L2JsdWV0b290aC9zY28uYz00MDQ9c3RhdGljIGludCBzY29fc2VuZF9mcmFtZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2JsdWV0b290aC9zY28uYy00MTYtXHRoY2lfc2V0dXBfdHhfdGltZXN0YW1wKHNrYiwgMSwgc29ja2MpO1xubmV0L2JsdWV0b290aC9zY28uYzo0MTc6XHRoY2lfc2VuZF9zY28oY29ubi1cdTAwM2VoY29uLCBza2IpO1xubmV0L2JsdWV0b290aC9zY28uYy00MTgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hjaV9zZW5kX2lzbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9ibHVldG9vdGgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYz0zMjg4PXN0YXRpYyB2b2lkIGhjaV9xdWV1ZV9pc28oc3RydWN0IGhjaV9jb25uICpjb25uLCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpxdWV1ZSxcbi0tXG5uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMtMzMzNC1cbm5ldC9ibHVldG9vdGgvaGNpX2NvcmUuYzozMzM1OnZvaWQgaGNpX3NlbmRfaXNvKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9ibHVldG9vdGgvaGNpX2NvcmUuYy0zMzM2LXtcbi0tXG5uZXQvYmx1ZXRvb3RoL2lzby5jPTYwNT1zdGF0aWMgaW50IGlzb19zZW5kX2ZyYW1lKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvYmx1ZXRvb3RoL2lzby5jLTYyNy1cdFx0aGNpX3NldHVwX3R4X3RpbWVzdGFtcChza2IsIDEsIHNvY2tjKTtcbm5ldC9ibHVldG9vdGgvaXNvLmM6NjI4Olx0XHRoY2lfc2VuZF9pc28oY29ubi1cdTAwM2VoY29uLCBza2IpO1xubmV0L2JsdWV0b290aC9pc28uYy02MjktXHR9IGVsc2Uge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Mjk4CgkJCQkJCQlvdXRwdXQ6IDEzNQoJCQkJCQkJdGhvdWdodHM6IDI3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQmx1ZXRvb3RoIEZ1enppbmcgVGFyZ2V0KioKCkFscmlnaHQsIHRoaXMgbG9va3MgcHJvbWlzaW5nLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGRlZmluaXRlbHkgcmVhY2hhYmxlIGFuZCByZXByZXNlbnQgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYGhjaV9zZW5kX2FjbGAsIGBoY2lfc2VuZF9zY29gLCBhbmQgYGhjaV9zZW5kX2lzb2AsIHdoaWNoIGhhbmRsZSBCbHVldG9vdGggZGF0YSB0cmFuc21pc3Npb24uIFRoZSBwYXRjaCB0b3VjaGVzIHRoZXNlIGNvcmUgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB2aXJ0dWFsIEhDSSBkZXZpY2VzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbWFrZSBzdXJlIHdlIGhhdmUgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBpbiBwbGFjZS4KCkkgbmVlZCB0byBlbmFibGUgYEJUYCBhbmQgYEJUX0hDSVZIQ0lgLCBvYnZpb3VzbHkuIExldCYjMzk7cyBtYWtlIHN1cmUgd2UmIzM5O3JlIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJIHRoaW5rIGBCVF9CUkVEUmAgYW5kIGBCVF9MRWAgd2lsbCBiZSBuZWNlc3NhcnkgYXMgd2VsbCwgY29uc2lkZXJpbmcgdGhleSBhcmUgbGlrZWx5IHVzZWQgYnkgQUNMIGFuZCBJU08uIEkmIzM5O2xsIHRha2UgYW5vdGhlciBsb29rIGF0IGBuZXQvYmx1ZXRvb3RoL0tjb25maWdgIHRvIGJlIHN1cmUuIFllcCwgYEJUX0JSRURSYCBlbmFibGVzICYjMzQ7Qmx1ZXRvb3RoIENsYXNzaWMgKEJSL0VEUikgZmVhdHVyZXMsJiMzNDsgYW5kIGBCVF9MRWAgZW5hYmxlcyAmIzM0O0JsdWV0b290aCBMb3cgRW5lcmd5IChMRSkgZmVhdHVyZXMuJiMzNDsgV2Ugc2hvdWxkIGRlZmluaXRlbHkgaW5jbHVkZSB0aGVtLgoKTm93LCBsZXQmIzM5O3MgYXNzZW1ibGUgdGhlIHJlc3BvbnNlLgoKYGBgCldvcnRoRnV6emluZzogdHJ1ZQpSZWFzb25pbmc6IFRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEJsdWV0b290aCBkYXRhIHRyYW5zbWlzc2lvbiBmdW5jdGlvbnMgKGhjaV9zZW5kX2FjbCwgaGNpX3NlbmRfc2NvLCBoY2lfc2VuZF9pc28pIHRvIGNoZWNrIGlmIHRoZSBkZXZpY2UgaXMgdXAgYmVmb3JlIHF1ZXVpbmcgdGhlIHRyYW5zbWlzc2lvbiB3b3JrLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBpc3N1ZXMgZHVyaW5nIGRldmljZSB0ZWFyZG93biBhbmQgaXMgcmVhY2hhYmxlIHZpYSB2aXJ0dWFsIEhDSSBkZXZpY2VzLgpGb2N1c1N5bWJvbHM6IFsmIzM0O2hjaV9zZW5kX2FjbCYjMzQ7LCAmIzM0O2hjaV9zZW5kX3NjbyYjMzQ7LCAmIzM0O2hjaV9zZW5kX2lzbyYjMzQ7XQpFbmFibGVDb25maWdzOiBbJiMzNDtCVCYjMzQ7LCAmIzM0O0JUX0hDSVZIQ0kmIzM0OywgJiMzNDtCVF9CUkVEUiYjMzQ7LCAmIzM0O0JUX0xFJiMzNDtdCmBgYAoKVGhhdCBzaG91bGQgYmUgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3Igb3VyIGZ1enppbmcgY2FtcGFpZ24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCVCYjMzQ7LAogICAgJiMzNDtCVF9IQ0lWSENJJiMzNDssCiAgICAmIzM0O0JUX0JSRURSJiMzNDssCiAgICAmIzM0O0JUX0xFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aGNpX3NlbmRfYWNsJiMzNDssCiAgICAmIzM0O2hjaV9zZW5kX3NjbyYjMzQ7LAogICAgJiMzNDtoY2lfc2VuZF9pc28mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBCbHVldG9vdGggZGF0YSB0cmFuc21pc3Npb24gZnVuY3Rpb25zIChoY2lfc2VuZF9hY2wsIGhjaV9zZW5kX3NjbywgaGNpX3NlbmRfaXNvKSB0byBjaGVjayBpZiB0aGUgZGV2aWNlIGlzIHVwIGJlZm9yZSBxdWV1aW5nIHRoZSB0cmFuc21pc3Npb24gd29yay4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgaXNzdWVzIGR1cmluZyBkZXZpY2UgdGVhcmRvd24gYW5kIGlzIHJlYWNoYWJsZSB2aWEgdmlydHVhbCBIQ0kgZGV2aWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlQmIzM0OywKICAgICYjMzQ7QlRfSENJVkhDSSYjMzQ7LAogICAgJiMzNDtCVF9CUkVEUiYjMzQ7LAogICAgJiMzNDtCVF9MRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hjaV9zZW5kX2FjbCYjMzQ7LAogICAgJiMzNDtoY2lfc2VuZF9zY28mIzM0OywKICAgICYjMzQ7aGNpX3NlbmRfaXNvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgQmx1ZXRvb3RoIGRhdGEgdHJhbnNtaXNzaW9uIGZ1bmN0aW9ucyAoaGNpX3NlbmRfYWNsLCBoY2lfc2VuZF9zY28sIGhjaV9zZW5kX2lzbykgdG8gY2hlY2sgaWYgdGhlIGRldmljZSBpcyB1cCBiZWZvcmUgcXVldWluZyB0aGUgdHJhbnNtaXNzaW9uIHdvcmsuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIGlzc3VlcyBkdXJpbmcgZGV2aWNlIHRlYXJkb3duIGFuZCBpcyByZWFjaGFibGUgdmlhIHZpcnR1YWwgSENJIGRldmljZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjQ0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMjE6NDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHN0YXRlIGNoZWNrIChgdGVzdF9iaXQoSENJX1VQLCBcdTAwMjZoZGV2LVx1MDAzZWZsYWdzKWApIGJlZm9yZSBxdWV1aW5nIFRYIHdvcmsgKGBxdWV1ZV93b3JrYCkgZm9yIEFDTCwgU0NPLCBhbmQgSVNPIGRhdGEgaW4gdGhlIEJsdWV0b290aCBIQ0kgY29yZS4gVGhpcyBwcmV2ZW50cyBxdWV1aW5nIHdvcmsgd2hlbiB0aGUgSENJIGRldmljZSBpcyBub3QgaW4gdGhlIFVQIHN0YXRlLCB3aGljaCBsaWtlbHkgYWRkcmVzc2VzIGEgdXNlLWFmdGVyLWZyZWUsIHJhY2UgY29uZGl0aW9uLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYnVnIChlLmcuLCBpZiB0aGUgd29ya3F1ZXVlIGlzIGRlc3Ryb3llZCBvciB0aGUgZGV2aWNlIGlzIGJlaW5nIHRvcm4gZG93bikuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIHJlbGF0ZWQgdG8gb2JqZWN0IGxpZmV0aW1lcyBhbmQgY29uY3VycmVuY3ksIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiAoZm9yIHVzZS1hZnRlci1mcmVlKSBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIG1vZGlmaWNhdGlvbnMgdG8gZGF0YSBzZW50IHRvIHVzZXIgc3BhY2UuIEl0IGRvZXMgbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQ0N2QzMGNkOGNlZTE1MDU4ZWY4YmE0ZTdhZGQxNzI0NDg2MjZhZTEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyA4IDIxOjQ0OjA5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jIGIvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jCmluZGV4IDViYTlmZTgyNjFlYzguLmQ5ZjA5MWFmMzYxODMgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMKQEAgLTMyNDIsNyAmIzQzOzMyNDIsOCBAQCB2b2lkIGhjaV9zZW5kX2FjbChzdHJ1Y3QgaGNpX2NoYW4gKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IsIF9fdTE2IGZsYWdzKQogCiAJaGNpX3F1ZXVlX2FjbChjaGFuLCAmYW1wO2NoYW4tJmd0O2RhdGFfcSwgc2tiLCBmbGFncyk7CiAKLQlxdWV1ZV93b3JrKGhkZXYtJmd0O3dvcmtxdWV1ZSwgJmFtcDtoZGV2LSZndDt0eF93b3JrKTsKJiM0MzsJaWYgKHRlc3RfYml0KEhDSV9VUCwgJmFtcDtoZGV2LSZndDtmbGFncykpCiYjNDM7CQlxdWV1ZV93b3JrKGhkZXYtJmd0O3dvcmtxdWV1ZSwgJmFtcDtoZGV2LSZndDt0eF93b3JrKTsKIH0KIAogLyogU2VuZCBTQ08gZGF0YSAqLwpAQCAtMzI2Nyw3ICYjNDM7MzI2OCw4IEBAIHZvaWQgaGNpX3NlbmRfc2NvKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlidF9kZXZfZGJnKGhkZXYsICYjMzQ7aGNvbiAlcCBxdWV1ZWQgJWQmIzM0OywgY29ubiwKIAkJICAgc2tiX3F1ZXVlX2xlbigmYW1wO2Nvbm4tJmd0O2RhdGFfcSkpOwogCi0JcXVldWVfd29yayhoZGV2LSZndDt3b3JrcXVldWUsICZhbXA7aGRldi0mZ3Q7dHhfd29yayk7CiYjNDM7CWlmICh0ZXN0X2JpdChIQ0lfVVAsICZhbXA7aGRldi0mZ3Q7ZmxhZ3MpKQomIzQzOwkJcXVldWVfd29yayhoZGV2LSZndDt3b3JrcXVldWUsICZhbXA7aGRldi0mZ3Q7dHhfd29yayk7CiB9CiAKIC8qIFNlbmQgSVNPIGRhdGEgKi8KQEAgLTMzMzgsNyAmIzQzOzMzNDAsOCBAQCB2b2lkIGhjaV9zZW5kX2lzbyhzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIHN0cnVjdCBza19idWZmICpza2IpCiAKIAloY2lfcXVldWVfaXNvKGNvbm4sICZhbXA7Y29ubi0mZ3Q7ZGF0YV9xLCBza2IpOwogCi0JcXVldWVfd29yayhoZGV2LSZndDt3b3JrcXVldWUsICZhbXA7aGRldi0mZ3Q7dHhfd29yayk7CiYjNDM7CWlmICh0ZXN0X2JpdChIQ0lfVVAsICZhbXA7aGRldi0mZ3Q7ZmxhZ3MpKQomIzQzOwkJcXVldWVfd29yayhoZGV2LSZndDt3b3JrcXVldWUsICZhbXA7aGRldi0mZ3Q7dHhfd29yayk7CiB9CiAKIC8qIC0tLS0gSENJIFRYIHRhc2sgKG91dGdvaW5nIGRhdGEpIC0tLS0gKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyOTUKCQkJCQkJCW91dHB1dDogMjA2CgkJCQkJCQl0aG91Z2h0czogNTA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzOiBCbHVldG9vdGggSENJIFRYIFdvcmtxdWV1ZSBTYWZlZ3VhcmQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBmaXguJiMzNDsgSXQgc2VlbXMgdG8gYmUgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZSB3aXRoaW4gdGhlIEJsdWV0b290aCBIQ0kgY29yZSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIHRyYW5zbWlzc2lvbiBvZiBBQ0wsIFNDTywgYW5kIElTTyBkYXRhLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNoZWNrOiBgaWYgKHRlc3RfYml0KEhDSV9VUCwgJmFtcDtoZGV2LSZndDtmbGFncykpYCBiZWZvcmUgdGhlIGBxdWV1ZV93b3JrYCBjYWxscyBpbiBgaGNpX3NlbmRfYWNsYCwgYGhjaV9zZW5kX3Njb2AsIGFuZCBgaGNpX3NlbmRfaXNvYC4gQmFzaWNhbGx5LCBpdCYjMzk7cyBlbnN1cmluZyB0aGF0IHRoZSBkZXZpY2UgaXMgYWN0dWFsbHkgJiMzNDt1cCYjMzQ7IGFuZCBydW5uaW5nIGJlZm9yZSBzdWJtaXR0aW5nIHdvcmsgdG8gdGhlIHdvcmtxdWV1ZS4gVGhpcyBpcyBhIHNtYXJ0IG1vdmUsIGJlY2F1c2UgaXQgcHJldmVudHMgcXVldWluZyB3b3JrIG9uIGEgd29ya3F1ZXVlIGZvciBhIGRldmljZSB0aGF0IG1pZ2h0IGJlIGluIHRoZSBwcm9jZXNzIG9mIHNodXR0aW5nIGRvd24uCgpNeSBpbW1lZGlhdGUgYXNzdW1wdGlvbiBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgdGFyZ2V0aW5nIGEgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZSAoVUFGKSBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugc2l0dWF0aW9uLiBJZiB0aGUgZGV2aWNlIGlzbiYjMzk7dCB1cCwgdGhlIHdvcmtxdWV1ZSBtaWdodCBiZSBnZXR0aW5nIGRlc3Ryb3llZCBvciBpc24mIzM5O3QgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIFRyeWluZyB0byBxdWV1ZSB3b3JrIGluIHRoYXQgc2NlbmFyaW8gaXMgYSByZWNpcGUgZm9yIGEgY3Jhc2gsIG9yIHdvcnNlLCBhIFVBRiBzZWN1cml0eSB2dWxuZXJhYmlsaXR5LiBUaGlzIGZlZWxzIHZlcnkgbXVjaCBsaWtlIGEgcmFjZSBjb25kaXRpb24gb3Igc3RhdGUgbWFjaGluZSBpc3N1ZS4gS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIGRlYnVnZ2VycyBzaG91bGQgZmxhZyB0aGlzIHR5cGUgb2YgdnVsbmVyYWJpbGl0eSBwcmV0dHkgcXVpY2tseS4KCk15IG5leHQgdGhvdWdodCBpcywgZG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBhbnkgbmV3IHJpc2tzLCBzcGVjaWZpY2FsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzPyBJIG5lZWQgdG8gYmUgZGlsaWdlbnQgaGVyZS4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgcGF0Y2ggaXMganVzdCBhZGRpbmcgYSBzdGF0ZSBjaGVjayBiZWZvcmUgYW4gZXhpc3RpbmcgYHF1ZXVlX3dvcmtgIGNhbGwuIEl0JiMzOTtzIG5vdCBpbnRyb2R1Y2luZyBhbnkgbmV3IHZhcmlhYmxlcywgYWxsb2NhdGlvbnMsIG9yIG1vZGlmaWNhdGlvbnMgdG8gZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIHNlbnQgdG8gdXNlciBzcGFjZS4gSXQmIzM5O3MgcHVyZWx5IGFib3V0IGNvbnRyb2xsaW5nIHRoZSAqdGltaW5nKiBvZiB0aGUgZXhpc3Rpbmcgd29yayBxdWV1ZSBvcGVyYXRpb24uIFNvLCBubywgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBsb29rIGxpa2UgaXQmIzM5O3MgZ29pbmcgdG8gdHJpZ2dlciBhbnkgS01TQU4gaXNzdWVzLiBJdCYjMzk7cyBtb3JlIGFib3V0IHByb3RlY3RpbmcgdGhlIGV4aXN0aW5nIGNvZGUsIHJhdGhlciB0aGFuIGV4cG9zaW5nIGl0IHRvIG5ldyB2dWxuZXJhYmlsaXRpZXMuCgpTbywgbGV0IG1lIHN1bW1hcml6ZSBteSByZWFzb25pbmcgZm9yIGNsYXJpdHk6IFRoaXMgcGF0Y2ggcHJvdGVjdHMgYWdhaW5zdCBhIGNvbmN1cnJlbmN5IGJ1Zy4gSXQgZG9lcyB0aGlzIGJ5IGNoZWNraW5nIGlmIHRoZSBIQ0kgZGV2aWNlIGlzIGluIHRoZSAmIzM0O1VQJiMzNDsgc3RhdGUgYmVmb3JlIHN1Ym1pdHRpbmcgd29yayB0byB0aGUgd29ya3F1ZXVlLiBUaGlzIGxpa2VseSByZXNvbHZlcyBhIFVBRiwgcmFjZSBjb25kaXRpb24sIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4gVGhlIGZpeCBpdHNlbGYgaW52b2x2ZXMgb25seSBhIGNvbmRpdGlvbmFsLCBzbyBpdCBkb2VzbiYjMzk7dCBwcmVzZW50IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvcm1hdGlvbiBsZWFrIHJpc2tzLCBzbyBLTVNBTiBpc24mIzM5O3QgcmVsZXZhbnQgaGVyZS4gS0FTQU4gb3Igb3RoZXIgc3RhbmRhcmQgdG9vbHMgYXJlIG1vcmUgYXBwcm9wcmlhdGUgdG8gY2hlY2sgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMjE6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHN0YXRlIGNoZWNrIChgdGVzdF9iaXQoSENJX1VQLCBcdTAwMjZoZGV2LVx1MDAzZWZsYWdzKWApIGJlZm9yZSBxdWV1aW5nIFRYIHdvcmsgKGBxdWV1ZV93b3JrYCkgZm9yIEFDTCwgU0NPLCBhbmQgSVNPIGRhdGEgaW4gdGhlIEJsdWV0b290aCBIQ0kgY29yZS4gVGhpcyBwcmV2ZW50cyBxdWV1aW5nIHdvcmsgd2hlbiB0aGUgSENJIGRldmljZSBpcyBub3QgaW4gdGhlIFVQIHN0YXRlLCB3aGljaCBsaWtlbHkgYWRkcmVzc2VzIGEgdXNlLWFmdGVyLWZyZWUsIHJhY2UgY29uZGl0aW9uLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYnVnIChlLmcuLCBpZiB0aGUgd29ya3F1ZXVlIGlzIGRlc3Ryb3llZCBvciB0aGUgZGV2aWNlIGlzIGJlaW5nIHRvcm4gZG93bikuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIHJlbGF0ZWQgdG8gb2JqZWN0IGxpZmV0aW1lcyBhbmQgY29uY3VycmVuY3ksIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiAoZm9yIHVzZS1hZnRlci1mcmVlKSBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIG1vZGlmaWNhdGlvbnMgdG8gZGF0YSBzZW50IHRvIHVzZXIgc3BhY2UuIEl0IGRvZXMgbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgc3RhdGUgY2hlY2sgKGB0ZXN0X2JpdChIQ0lfVVAsIFx1MDAyNmhkZXYtXHUwMDNlZmxhZ3MpYCkgYmVmb3JlIHF1ZXVpbmcgVFggd29yayAoYHF1ZXVlX3dvcmtgKSBmb3IgQUNMLCBTQ08sIGFuZCBJU08gZGF0YSBpbiB0aGUgQmx1ZXRvb3RoIEhDSSBjb3JlLiBUaGlzIHByZXZlbnRzIHF1ZXVpbmcgd29yayB3aGVuIHRoZSBIQ0kgZGV2aWNlIGlzIG5vdCBpbiB0aGUgVVAgc3RhdGUsIHdoaWNoIGxpa2VseSBhZGRyZXNzZXMgYSB1c2UtYWZ0ZXItZnJlZSwgcmFjZSBjb25kaXRpb24sIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBidWcgKGUuZy4sIGlmIHRoZSB3b3JrcXVldWUgaXMgZGVzdHJveWVkIG9yIHRoZSBkZXZpY2UgaXMgYmVpbmcgdG9ybiBkb3duKS4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgcmVsYXRlZCB0byBvYmplY3QgbGlmZXRpbWVzIGFuZCBjb25jdXJyZW5jeSwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIChmb3IgdXNlLWFmdGVyLWZyZWUpIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgbW9kaWZpY2F0aW9ucyB0byBkYXRhIHNlbnQgdG8gdXNlciBzcGFjZS4gSXQgZG9lcyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjE6NDQ6MTAuNTI1ODk5OTE4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA3ODQ1MTIwMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlRcIixcbiAgICBcIkJUX0hDSVZIQ0lcIixcbiAgICBcIkJUX0JSRURSXCIsXG4gICAgXCJCVF9MRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhjaV9zZW5kX2FjbFwiLFxuICAgIFwiaGNpX3NlbmRfc2NvXCIsXG4gICAgXCJoY2lfc2VuZF9pc29cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBzdGF0ZSBjaGVjayAoYHRlc3RfYml0KEhDSV9VUCwgXFx1MDAyNmhkZXYtXFx1MDAzZWZsYWdzKWApIGJlZm9yZSBxdWV1aW5nIFRYIHdvcmsgKGBxdWV1ZV93b3JrYCkgZm9yIEFDTCwgU0NPLCBhbmQgSVNPIGRhdGEgaW4gdGhlIEJsdWV0b290aCBIQ0kgY29yZS4gVGhpcyBwcmV2ZW50cyBxdWV1aW5nIHdvcmsgd2hlbiB0aGUgSENJIGRldmljZSBpcyBub3QgaW4gdGhlIFVQIHN0YXRlLCB3aGljaCBsaWtlbHkgYWRkcmVzc2VzIGEgdXNlLWFmdGVyLWZyZWUsIHJhY2UgY29uZGl0aW9uLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYnVnIChlLmcuLCBpZiB0aGUgd29ya3F1ZXVlIGlzIGRlc3Ryb3llZCBvciB0aGUgZGV2aWNlIGlzIGJlaW5nIHRvcm4gZG93bikuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIHJlbGF0ZWQgdG8gb2JqZWN0IGxpZmV0aW1lcyBhbmQgY29uY3VycmVuY3ksIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiAoZm9yIHVzZS1hZnRlci1mcmVlKSBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIG1vZGlmaWNhdGlvbnMgdG8gZGF0YSBzZW50IHRvIHVzZXIgc3BhY2UuIEl0IGRvZXMgbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBCbHVldG9vdGggZGF0YSB0cmFuc21pc3Npb24gZnVuY3Rpb25zIChoY2lfc2VuZF9hY2wsIGhjaV9zZW5kX3NjbywgaGNpX3NlbmRfaXNvKSB0byBjaGVjayBpZiB0aGUgZGV2aWNlIGlzIHVwIGJlZm9yZSBxdWV1aW5nIHRoZSB0cmFuc21pc3Npb24gd29yay4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgaXNzdWVzIGR1cmluZyBkZXZpY2UgdGVhcmRvd24gYW5kIGlzIHJlYWNoYWJsZSB2aWEgdmlydHVhbCBIQ0kgZGV2aWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjE6NDQ6MTAuNTI1OTA2MzI4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzQ4OTQzMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkNDdkMzBjZDhjZWUxNTA1OGVmOGJhNGU3YWRkMTcyNDQ4NjI2YWUxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDggMjE6NDQ6MDkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jIGIvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jXFxuaW5kZXggNWJhOWZlODI2MWVjOC4uZDlmMDkxYWYzNjE4MyAxMDA2NDRcXG4tLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmNcXG4rKysgYi9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmNcXG5AQCAtMzI0Miw3ICszMjQyLDggQEAgdm9pZCBoY2lfc2VuZF9hY2woc3RydWN0IGhjaV9jaGFuICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX3UxNiBmbGFncylcXG4gXFxuIFxcdGhjaV9xdWV1ZV9hY2woY2hhbiwgXFx1MDAyNmNoYW4tXFx1MDAzZWRhdGFfcSwgc2tiLCBmbGFncyk7XFxuIFxcbi1cXHRxdWV1ZV93b3JrKGhkZXYtXFx1MDAzZXdvcmtxdWV1ZSwgXFx1MDAyNmhkZXYtXFx1MDAzZXR4X3dvcmspO1xcbitcXHRpZiAodGVzdF9iaXQoSENJX1VQLCBcXHUwMDI2aGRldi1cXHUwMDNlZmxhZ3MpKVxcbitcXHRcXHRxdWV1ZV93b3JrKGhkZXYtXFx1MDAzZXdvcmtxdWV1ZSwgXFx1MDAyNmhkZXYtXFx1MDAzZXR4X3dvcmspO1xcbiB9XFxuIFxcbiAvKiBTZW5kIFNDTyBkYXRhICovXFxuQEAgLTMyNjcsNyArMzI2OCw4IEBAIHZvaWQgaGNpX3NlbmRfc2NvKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0YnRfZGV2X2RiZyhoZGV2LCBcXFwiaGNvbiAlcCBxdWV1ZWQgJWRcXFwiLCBjb25uLFxcbiBcXHRcXHQgICBza2JfcXVldWVfbGVuKFxcdTAwMjZjb25uLVxcdTAwM2VkYXRhX3EpKTtcXG4gXFxuLVxcdHF1ZXVlX3dvcmsoaGRldi1cXHUwMDNld29ya3F1ZXVlLCBcXHUwMDI2aGRldi1cXHUwMDNldHhfd29yayk7XFxuK1xcdGlmICh0ZXN0X2JpdChIQ0lfVVAsIFxcdTAwMjZoZGV2LVxcdTAwM2VmbGFncykpXFxuK1xcdFxcdHF1ZXVlX3dvcmsoaGRldi1cXHUwMDNld29ya3F1ZXVlLCBcXHUwMDI2aGRldi1cXHUwMDNldHhfd29yayk7XFxuIH1cXG4gXFxuIC8qIFNlbmQgSVNPIGRhdGEgKi9cXG5AQCAtMzMzOCw3ICszMzQwLDggQEAgdm9pZCBoY2lfc2VuZF9pc28oc3RydWN0IGhjaV9jb25uICpjb25uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXG4gXFx0aGNpX3F1ZXVlX2lzbyhjb25uLCBcXHUwMDI2Y29ubi1cXHUwMDNlZGF0YV9xLCBza2IpO1xcbiBcXG4tXFx0cXVldWVfd29yayhoZGV2LVxcdTAwM2V3b3JrcXVldWUsIFxcdTAwMjZoZGV2LVxcdTAwM2V0eF93b3JrKTtcXG4rXFx0aWYgKHRlc3RfYml0KEhDSV9VUCwgXFx1MDAyNmhkZXYtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0cXVldWVfd29yayhoZGV2LVxcdTAwM2V3b3JrcXVldWUsIFxcdTAwMjZoZGV2LVxcdTAwM2V0eF93b3JrKTtcXG4gfVxcbiBcXG4gLyogLS0tLSBIQ0kgVFggdGFzayAob3V0Z29pbmcgZGF0YSkgLS0tLSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMTo0NDoxMC45NjE1MTMzMTRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozMDcyMTg4Nzk4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCVFwiLFxuICAgIFwiQlRfSENJVkhDSVwiLFxuICAgIFwiQlRfQlJFRFJcIixcbiAgICBcIkJUX0xFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaGNpX3NlbmRfYWNsXCIsXG4gICAgXCJoY2lfc2VuZF9zY29cIixcbiAgICBcImhjaV9zZW5kX2lzb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgQmx1ZXRvb3RoIGRhdGEgdHJhbnNtaXNzaW9uIGZ1bmN0aW9ucyAoaGNpX3NlbmRfYWNsLCBoY2lfc2VuZF9zY28sIGhjaV9zZW5kX2lzbykgdG8gY2hlY2sgaWYgdGhlIGRldmljZSBpcyB1cCBiZWZvcmUgcXVldWluZyB0aGUgdHJhbnNtaXNzaW9uIHdvcmsuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIGlzc3VlcyBkdXJpbmcgZGV2aWNlIHRlYXJkb3duIGFuZCBpcyByZWFjaGFibGUgdmlhIHZpcnR1YWwgSENJIGRldmljZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQ0N2QzMGNkOGNlZTE1MDU4ZWY4YmE0ZTdhZGQxNzI0NDg2MjZhZTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyA4IDIxOjQ0OjA5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jIGIvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jXG5pbmRleCA1YmE5ZmU4MjYxZWM4Li5kOWYwOTFhZjM2MTgzIDEwMDY0NFxuLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jXG4rKysgYi9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmNcbkBAIC0zMjQyLDcgKzMyNDIsOCBAQCB2b2lkIGhjaV9zZW5kX2FjbChzdHJ1Y3QgaGNpX2NoYW4gKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IsIF9fdTE2IGZsYWdzKVxuIFxuIFx0aGNpX3F1ZXVlX2FjbChjaGFuLCBcdTAwMjZjaGFuLVx1MDAzZWRhdGFfcSwgc2tiLCBmbGFncyk7XG4gXG4tXHRxdWV1ZV93b3JrKGhkZXYtXHUwMDNld29ya3F1ZXVlLCBcdTAwMjZoZGV2LVx1MDAzZXR4X3dvcmspO1xuK1x0aWYgKHRlc3RfYml0KEhDSV9VUCwgXHUwMDI2aGRldi1cdTAwM2VmbGFncykpXG4rXHRcdHF1ZXVlX3dvcmsoaGRldi1cdTAwM2V3b3JrcXVldWUsIFx1MDAyNmhkZXYtXHUwMDNldHhfd29yayk7XG4gfVxuIFxuIC8qIFNlbmQgU0NPIGRhdGEgKi9cbkBAIC0zMjY3LDcgKzMyNjgsOCBAQCB2b2lkIGhjaV9zZW5kX3NjbyhzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRidF9kZXZfZGJnKGhkZXYsIFwiaGNvbiAlcCBxdWV1ZWQgJWRcIiwgY29ubixcbiBcdFx0ICAgc2tiX3F1ZXVlX2xlbihcdTAwMjZjb25uLVx1MDAzZWRhdGFfcSkpO1xuIFxuLVx0cXVldWVfd29yayhoZGV2LVx1MDAzZXdvcmtxdWV1ZSwgXHUwMDI2aGRldi1cdTAwM2V0eF93b3JrKTtcbitcdGlmICh0ZXN0X2JpdChIQ0lfVVAsIFx1MDAyNmhkZXYtXHUwMDNlZmxhZ3MpKVxuK1x0XHRxdWV1ZV93b3JrKGhkZXYtXHUwMDNld29ya3F1ZXVlLCBcdTAwMjZoZGV2LVx1MDAzZXR4X3dvcmspO1xuIH1cbiBcbiAvKiBTZW5kIElTTyBkYXRhICovXG5AQCAtMzMzOCw3ICszMzQwLDggQEAgdm9pZCBoY2lfc2VuZF9pc28oc3RydWN0IGhjaV9jb25uICpjb25uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIFx0aGNpX3F1ZXVlX2lzbyhjb25uLCBcdTAwMjZjb25uLVx1MDAzZWRhdGFfcSwgc2tiKTtcbiBcbi1cdHF1ZXVlX3dvcmsoaGRldi1cdTAwM2V3b3JrcXVldWUsIFx1MDAyNmhkZXYtXHUwMDNldHhfd29yayk7XG4rXHRpZiAodGVzdF9iaXQoSENJX1VQLCBcdTAwMjZoZGV2LVx1MDAzZWZsYWdzKSlcbitcdFx0cXVldWVfd29yayhoZGV2LVx1MDAzZXdvcmtxdWV1ZSwgXHUwMDI2aGRldi1cdTAwM2V0eF93b3JrKTtcbiB9XG4gXG4gLyogLS0tLSBIQ0kgVFggdGFzayAob3V0Z29pbmcgZGF0YSkgLS0tLSAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjE6NDQ6MTAuOTYxNTE0ODM0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjEyNTc2ODk3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIGEgQmx1ZXRvb3RoIEhDSSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW4gYG5ldC9ibHVldG9vdGgvaGNpX2NvcmUuY2AgaXMgbWFraW5nIGEgY3JpdGljYWwgY2hlY2suIEl0J3MgbG9va2luZyB0byBzZWUgaWYgYEhDSV9VUGAgaXMgc2V0IGluIGBoZGV2LVx1MDAzZWZsYWdzYCBiZWZvcmUgc2NoZWR1bGluZyBgaGRldi1cdTAwM2V0eF93b3JrYCB3aXRoaW4gYGhjaV9zZW5kX2FjbGAsIGBoY2lfc2VuZF9zY29gLCBhbmQgYGhjaV9zZW5kX2lzb2AuIEVzc2VudGlhbGx5LCBpdCdzIHByZXZlbnRpbmcgdGhlIHF1ZXVpbmcgb2YgdHJhbnNtaXQgd29yayB3aGVuIHRoZSBCbHVldG9vdGggZGV2aWNlIGlzbid0IGZ1bGx5IGluaXRpYWxpemVkIGFuZCBhY3RpdmUuIFRoaXMgbWFrZXMgc2Vuc2U7IHNraXBwaW5nIHRoaXMgY2hlY2sgY2FuIGxlYWQgdG8gYmFkIHRoaW5ncyBoYXBwZW5pbmcsIGxpa2UgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyBvciBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGlmIHRoZSBkZXZpY2UgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgc2h1dCBkb3duLiBUaGF0J3MgYSBjbGFzc2ljIHJhY2UgY29uZGl0aW9uIHNjZW5hcmlvLlxuXG5Ob3csIGxldCdzIHRoaW5rIGFib3V0IHRoaXMgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuIFdlJ3ZlIGdvdCB0byBkZXRlcm1pbmUgdGhlIHJlYWNoYWJpbGl0eSBhbmQgdnVsbmVyYWJpbGl0eSBzdXJmYWNlIG9mIHRob3NlIGZ1bmN0aW9ucy4gYGhjaV9zZW5kX2FjbGAsIGBoY2lfc2VuZF9zY29gLCBhbmQgYGhjaV9zZW5kX2lzb2AgYXJlIGZ1bmRhbWVudGFsIEJsdWV0b290aCBmdW5jdGlvbnMgZm9yIHRyYW5zbWl0dGluZyBBQ0wsIFNDTywgYW5kIElTTyBkYXRhLiBUaGVzZSBhcmUgY29yZSBjb21wb25lbnRzLCBzbyB0aGV5J3JlIGFic29sdXRlbHkgcmVhY2hhYmxlIGFuZCBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nLiBUaGV5IGhhbmRsZSB0aGUgZXNzZW50aWFsIGRhdGEgdHJhbnNmZXIgb3BlcmF0aW9ucywgc28gaWYgdGhlcmUncyBhIHByb2JsZW0gdGhlcmUsIGl0J3MgZ29pbmcgdG8gYmUgYSBiaWcgb25lLlxuXG5OZXh0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgdG8gZW5hYmxlIHRoaXMgY29kZS4gSXQgbG9va3MgbGlrZSBgQ09ORklHX0JUYCBpcyB0aGUgcHJpbWFyeSBvbmUsIG5hdHVyYWxseS4gQnV0LCBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciBkaWZmZXJlbnQgSENJIGltcGxlbWVudGF0aW9ucywgSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBgQ09ORklHX0JUX0hDSVVBUlRgIG9yIGBDT05GSUdfQlRfSENJVkhDSWAgYXMgd2VsbC4gVmlydHVhbCBIQ0kgZGV2aWNlcyBhcmUgb2Z0ZW4gc291cmNlcyBvZiBzdWJ0bGUgYnVncy4gSSdsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCBgbmV0L2JsdWV0b290aC9LY29uZmlnYCB0byBjb25maXJtIHRoZSBleGFjdCBkZXBlbmRlbmNpZXMgYW5kIGFueSByZWxldmFudCBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGltcGFjdCB0aGUgcmVhY2hhYmlsaXR5IG9mIHRoZXNlIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI5OCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIxOjQ0OjE3LjA4NzI4NTUwNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjY5MDIyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JsdWV0b290aC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9ibHVldG9vdGgvS2NvbmZpZy01LVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZzo2Om1lbnVjb25maWcgQlRcXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiQmx1ZXRvb3RoIHN1YnN5c3RlbSBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTQxLVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZzo0Mjpjb25maWcgQlRfQlJFRFJcXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctNDMtXFx0Ym9vbCBcXFwiQmx1ZXRvb3RoIENsYXNzaWMgKEJSL0VEUikgZmVhdHVyZXNcXFwiXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc9NTY9c291cmNlIFxcXCJuZXQvYmx1ZXRvb3RoL2hpZHAvS2NvbmZpZ1xcXCJcXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctNTctXFxubmV0L2JsdWV0b290aC9LY29uZmlnOjU4OmNvbmZpZyBCVF9MRVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy01OS1cXHRib29sIFxcXCJCbHVldG9vdGggTG93IEVuZXJneSAoTEUpIGZlYXR1cmVzXFxcIlxcbi0tXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTY1LVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZzo2Njpjb25maWcgQlRfTEVfTDJDQVBfRUNSRURcXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctNjctXFx0Ym9vbCBcXFwiQmx1ZXRvb3RoIEwyQ0FQIEVuaGFuY2VkIENyZWRpdCBGbG93IENvbnRyb2xcXFwiXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctNzYtXFxubmV0L2JsdWV0b290aC9LY29uZmlnOjc3OmNvbmZpZyBCVF82TE9XUEFOXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTc4LVxcdHRyaXN0YXRlIFxcXCJCbHVldG9vdGggNkxvV1BBTiBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTgyLVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZzo4Mzpjb25maWcgQlRfTEVEU1xcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy04NC1cXHRib29sIFxcXCJFbmFibGUgTEVEIHRyaWdnZXJzXFxcIlxcbi0tXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTkxLVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZzo5Mjpjb25maWcgQlRfTVNGVEVYVFxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy05My1cXHRib29sIFxcXCJFbmFibGUgTWljcm9zb2Z0IGV4dGVuc2lvbnNcXFwiXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctOTgtXFxubmV0L2JsdWV0b290aC9LY29uZmlnOjk5OmNvbmZpZyBCVF9BT1NQRVhUXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTEwMC1cXHRib29sIFxcXCJFbmFibGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0IGV4dGVuc2lvbnNcXFwiXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctMTA1LVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZzoxMDY6Y29uZmlnIEJUX0RFQlVHRlNcXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctMTA3LVxcdGJvb2wgXFxcIkV4cG9ydCBCbHVldG9vdGggaW50ZXJuYWxzIGluIGRlYnVnZnNcXFwiXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctMTEzLVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZzoxMTQ6Y29uZmlnIEJUX1NFTEZURVNUXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTExNS1cXHRib29sIFxcXCJCbHVldG9vdGggc2VsZiB0ZXN0aW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctMTI2LVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZzoxMjc6Y29uZmlnIEJUX1NFTEZURVNUX0VDREhcXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctMTI4LVxcdGJvb2wgXFxcIkVDREggdGVzdCBjYXNlc1xcXCJcXG4tLVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy0xMzMtXFxubmV0L2JsdWV0b290aC9LY29uZmlnOjEzNDpjb25maWcgQlRfU0VMRlRFU1RfU01QXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJTTVAgdGVzdCBjYXNlc1xcXCJcXG4tLVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy0xNDAtXFxubmV0L2JsdWV0b290aC9LY29uZmlnOjE0MTpjb25maWcgQlRfRkVBVFVSRV9ERUJVR1xcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy0xNDItXFx0Ym9vbCBcXFwiRW5hYmxlIHJ1bnRpbWUgb3B0aW9uIGZvciBkZWJ1Z2dpbmcgc3RhdGVtZW50c1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjE6NDQ6MTcuMTM5OTg1NjI5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQxNjEwMDYxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQmx1ZXRvb3RoIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuQWxyaWdodCwgdGhlIGNvcmUgcmVxdWlyZW1lbnQgaGVyZSBib2lscyBkb3duIHRvIGBCVGAuIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIFRpbWUgdG8gZHJpbGwgZG93biBhbmQgc2VlIGhvdyB3ZSdyZSBoYW5kbGluZyB0aGUgdmlydHVhbCBIQ0kgZHJpdmVyLiBNeSBpbnN0aW5jdCBpcyB0byBoZWFkIHN0cmFpZ2h0IHRvIGBkcml2ZXJzL2JsdWV0b290aC9LY29uZmlnYC4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFuZCBhbnkgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gdGhpcyB2aXJ0dWFsIGludGVyZmFjZS4gTGV0J3Mgc2VlIHdoYXQgb3B0aW9ucyBhcmUgZXhwb3NlZCB0aGVyZSwgYW5kIHdoYXQgb3RoZXIgc2V0dGluZ3MgbWlnaHQgaW5mbHVlbmNlIHRoaXMgcGFydGljdWxhciBzdWJzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGxhbmRzY2FwZSBvZiBjaG9pY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjU5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjE6NDQ6MjEuNTU2MDg4MTEyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3OTI2MDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCVF9IQ0lWSENJXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZz0zMjc9Y29uZmlnIEJUX0hDSUJGVVNCXFxuLS1cXG5kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnLTMzOS1cXG5kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnOjM0MDpjb25maWcgQlRfSENJVkhDSVxcbmRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWctMzQxLVxcdHRyaXN0YXRlIFxcXCJIQ0kgVkhDSSAoVmlydHVhbCBIQ0kgZGV2aWNlKSBkcml2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIxOjQ0OjIxLjYwNDAxOTU2OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNDg1OTI4OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgQmx1ZXRvb3RoIENvbmZpZ3VyYXRpb24gT3B0aW9ucyBhbmQgVHJhbnNtaXNzaW9uIEZ1bmN0aW9ucyoqXG5cbkFscmlnaHQsIHNvIEknbSB0YWtpbmcgYSBsb29rIGF0IEJsdWV0b290aCBjb25maWd1cmF0aW9ucywgYW5kIGl0IHNlZW1zIGxpa2UgZW5hYmxpbmcgYEJUYCBhbmQgYEJUX0hDSVZIQ0lgIGlzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQuIEknbSBhc3N1bWluZyB0aGVzZSBhcmUgZnVuZGFtZW50YWwgY29uZmlndXJhdGlvbnMgbGlrZWx5IHJlbGF0ZWQgdG8gYmFzaWMgQmx1ZXRvb3RoIGZ1bmN0aW9uYWxpdHkgYW5kIHBvc3NpYmx5IHNvbWUga2luZCBvZiBIQ0ktb3Zlci1IQ0kgc2V0dXAsIHBlcmhhcHMgZm9yIHRlc3Rpbmcgb3Igc3BlY2lmaWMgaGFyZHdhcmUgaW50ZWdyYXRpb25zLlxuXG5Ob3csIEkgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhlIGxvdy1sZXZlbCB0cmFuc21pc3Npb24gZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgaG93IGRhdGEgaXMgYWN0dWFsbHkgbW92aW5nLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGBoY2lfc2VuZF9hY2xgLCBgaGNpX3NlbmRfc2NvYCwgYW5kIGBoY2lfc2VuZF9pc29gIGZ1bmN0aW9ucy4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgYXJlIGltcGxlbWVudGVkIHdpdGhpbiB0aGUgc2VsZWN0ZWQgY29uZmlndXJhdGlvbi4gVGhlc2UgYXJlIHRoZSBjb3JlIHByaW1pdGl2ZXMgZm9yIHNlbmRpbmcgYXN5bmNocm9ub3VzIGNvbm5lY3Rpb25sZXNzIChBQ0wpLCBzeW5jaHJvbm91cyBjb25uZWN0aW9uLW9yaWVudGVkIChTQ08pLCBhbmQgaXNvY2hyb25vdXMgKElTTykgZGF0YSByZXNwZWN0aXZlbHkuIEknbGwgYmUgbG9va2luZyBmb3IgaG93IHRoZSBidWZmZXJzIGFyZSBoYW5kbGVkLCBhbnkgcXVldWVpbmcgc3RyYXRlZ2llcywgaW50ZXJydXB0IG1lY2hhbmlzbXMsIGFuZCBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBkaWZmZXJlbmNlcyBhY3Jvc3MgdGhlIGltcGxlbWVudGF0aW9ucyB0aGF0IGNvdWxkIGltcGFjdCBwZXJmb3JtYW5jZSBvciBsYXRlbmN5IGluIGRpZmZlcmVudCBzY2VuYXJpb3MuIEknbGwgYmUgcGF5aW5nIGF0dGVudGlvbiB0byBhbnkgc3BlY2lmaWMgaGFyZHdhcmUgZGVwZW5kZW5jaWVzIG9yIG9wdGltaXphdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MzcsIk91dHB1dFRva2VucyI6MTA1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjE6NDQ6MjUuOTUyNjE1MTM2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4OTMzOTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgaGNpX3NlbmRfYWNsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9ibHVldG9vdGgvaGNpX2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmM9MzE4Mz1zdGF0aWMgdm9pZCBoY2lfcXVldWVfYWNsKHN0cnVjdCBoY2lfY2hhbiAqY2hhbiwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqcXVldWUsXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMtMzIzNi1cXG5uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmM6MzIzNzp2b2lkIGhjaV9zZW5kX2FjbChzdHJ1Y3QgaGNpX2NoYW4gKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IsIF9fdTE2IGZsYWdzKVxcbm5ldC9ibHVldG9vdGgvaGNpX2NvcmUuYy0zMjM4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjE6NDQ6MjYuMDAxNTUxOTMxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDUyNDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgaGNpX3NlbmRfc2NvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9ibHVldG9vdGgvaGNpX2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmM9MzIzNz12b2lkIGhjaV9zZW5kX2FjbChzdHJ1Y3QgaGNpX2NoYW4gKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IsIF9fdTE2IGZsYWdzKVxcbi0tXFxubmV0L2JsdWV0b290aC9oY2lfY29yZS5jLTMyNDktLyogU2VuZCBTQ08gZGF0YSAqL1xcbm5ldC9ibHVldG9vdGgvaGNpX2NvcmUuYzozMjUwOnZvaWQgaGNpX3NlbmRfc2NvKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMtMzI1MS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIxOjQ0OjI2LjA0NTYxMDkyNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIwOTgxOTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBoY2lfc2VuZF9pc29cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JsdWV0b290aC9oY2lfY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9ibHVldG9vdGgvaGNpX2NvcmUuYz0zMjg4PXN0YXRpYyB2b2lkIGhjaV9xdWV1ZV9pc28oc3RydWN0IGhjaV9jb25uICpjb25uLCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpxdWV1ZSxcXG4tLVxcbm5ldC9ibHVldG9vdGgvaGNpX2NvcmUuYy0zMzM0LVxcbm5ldC9ibHVldG9vdGgvaGNpX2NvcmUuYzozMzM1OnZvaWQgaGNpX3NlbmRfaXNvKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMtMzMzNi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIxOjQ0OjI2LjA4NzcxNjQwMloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTg1NzM3NTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIGBuZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmNgIEV4cG9ydHMqKlxuXG5BbHJpZ2h0LCBsb29raW5nIGF0IGBuZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmNgLCBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggdGhlIHNjb3BlIG9mIHdoYXQgSSdtIGRlYWxpbmcgd2l0aC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiBhcmUgdGhlc2UgZnVuY3Rpb25zIGluIHRoaXMgZmlsZSwgc3BlY2lmaWNhbGx5LCAqZXhwb3J0ZWQqPyBPciwgcHV0IGFub3RoZXIgd2F5LCBhcmUgdGhleSBpbnRlbmRlZCB0byBiZSBwdWJsaWMsIG9yIG5vbi1zdGF0aWM/IEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciB0aGV5J3JlIGFjY2Vzc2libGUgb3V0c2lkZSBvZiB0aGlzIHNwZWNpZmljIGNvbXBpbGF0aW9uIHVuaXQuIEtub3dpbmcgdGhpcyB3aWxsIGltbWVkaWF0ZWx5IGhlbHAgbWUgdW5kZXJzdGFuZCB0aGVpciBpbnRlbmRlZCB1c2UgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIGJyb2FkZXIgQmx1ZXRvb3RoIHN0YWNrLiBUaGlzIGlzIGEgc3RhbmRhcmQgaW5pdGlhbCBkaWFnbm9zdGljIHN0ZXAgd2hlbiBwb2tpbmcgYXJvdW5kIGluIGtlcm5lbCBjb2RlIGxpa2UgdGhpcy4gSSBjYW4ndCBwcm9jZWVkIGVmZmljaWVudGx5IHdpdGhvdXQga25vd2luZyBpZiB0aGVzZSBmdW5jdGlvbnMgYXJlIG1lYW50IHRvIGJlIHVzZWQgaW50ZXJuYWxseSBvciBpZiB0aGV5IGFyZSBpbnRlcmZhY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzIzLCJPdXRwdXRUb2tlbnMiOjk5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIiwiZ3JlcHBlciIsImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMTo0NDozMC4yNzM0NTYyMTZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MzcyNjA1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipoY2lfc2VuZF9hY2xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JsdWV0b290aC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIxOjQ0OjMwLjMyMTgzMjkyMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxNTIyMjUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKmhjaV9zZW5kX3Njb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYmx1ZXRvb3RoL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjE6NDQ6MzAuMzY2OTg5OTM3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDQ3MjQ3NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qaGNpX3NlbmRfaXNvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9ibHVldG9vdGgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMTo0NDozMC40MTE0NjY1MTNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMyNjYxMjkyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBDYWxsIFNpdGVzIG9mIEludGVybmFsIEJsdWV0b290aCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyB0aGVzZSBmdW5jdGlvbnMgYXJlbid0IGV4cGxpY2l0bHkgKmV4cG9ydGVkKiBmcm9tIHRoZSBgbmV0L2JsdWV0b290aC9gIGRpcmVjdG9yeSwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFRoYXQgbWVhbnMgdGhleSdyZSBsaWtlbHkgaW50ZW5kZWQgZm9yIGludGVybmFsIHVzZSB3aXRoaW4gdGhhdCBzdWJzeXN0ZW0uIEJ1dCB0aGV5J3JlIGRlZmluaXRlbHkgYmVpbmcgKmNhbGxlZCogZnJvbSBvdGhlciBmaWxlcyB3aXRoaW4gdGhpcyBzYW1lIGRpcmVjdG9yeSwgc3VjaCBhcyBgbDJjYXBfY29yZS5jYCwgYHNjby5jYCwgYW5kIGBpc28uY2AuIEdpdmVuIHRoYXQgSSdtIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHBpbnBvaW50ICpleGFjdGx5KiB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIGludm9rZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbnRyb2wgZmxvdyB3aXRoaW4gdGhpcyBCbHVldG9vdGggaW1wbGVtZW50YXRpb24uIFNvLCBJIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgY29kZSBhbmQgaWRlbnRpZnkgYWxsIG9mIHRoZWlyIGNhbGwgc2l0ZXMgd2l0aGluIHRob3NlIGZpbGVzLCBhbmQgbGlrZWx5IG90aGVycyBpbiB0aGF0IGRpcmVjdG9yeSwgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhleSBmaXQgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuIFRoaXMgd2lsbCBoZWxwIG1lIHNpZ25pZmljYW50bHkgaW4gZGV0ZXJtaW5pbmcgdGhlaXIgcHVycG9zZSBhbmQgaG93IHRoZSBCbHVldG9vdGggc3RhY2sgb3BlcmF0ZXMgaW50ZXJuYWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA2OCwiT3V0cHV0VG9rZW5zIjo4NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciIsImdyZXBwZXIiLCJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjE6NDQ6MzQuNzM4MDgxOTM1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjQ0OTU3MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGNpX3NlbmRfYWNsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9ibHVldG9vdGgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9ibHVldG9vdGgvaGNpX2NvcmUuYz0zMTgzPXN0YXRpYyB2b2lkIGhjaV9xdWV1ZV9hY2woc3RydWN0IGhjaV9jaGFuICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpxdWV1ZSxcXG4tLVxcbm5ldC9ibHVldG9vdGgvaGNpX2NvcmUuYy0zMjM2LVxcbm5ldC9ibHVldG9vdGgvaGNpX2NvcmUuYzozMjM3OnZvaWQgaGNpX3NlbmRfYWNsKHN0cnVjdCBoY2lfY2hhbiAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgX191MTYgZmxhZ3MpXFxubmV0L2JsdWV0b290aC9oY2lfY29yZS5jLTMyMzgte1xcbi0tXFxubmV0L2JsdWV0b290aC9sMmNhcF9jb3JlLmM9OTkzPXN0YXRpYyB2b2lkIGwyY2FwX3NlbmRfYWNsKHN0cnVjdCBsMmNhcF9jb25uICpjb25uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2JsdWV0b290aC9sMmNhcF9jb3JlLmMtOTk3LVxcdGlmIChoY2lfY29ubl92YWxpZChjb25uLVxcdTAwM2VoY29uLVxcdTAwM2VoZGV2LCBjb25uLVxcdTAwM2VoY29uKSlcXG5uZXQvYmx1ZXRvb3RoL2wyY2FwX2NvcmUuYzo5OTg6XFx0XFx0aGNpX3NlbmRfYWNsKGNvbm4tXFx1MDAzZWhjaGFuLCBza2IsIGZsYWdzKTtcXG5uZXQvYmx1ZXRvb3RoL2wyY2FwX2NvcmUuYy05OTktXFx0ZWxzZVxcbi0tXFxubmV0L2JsdWV0b290aC9sMmNhcF9jb3JlLmM9MTAyOD1zdGF0aWMgdm9pZCBsMmNhcF9kb19zZW5kKHN0cnVjdCBsMmNhcF9jaGFuICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2JsdWV0b290aC9sMmNhcF9jb3JlLmMtMTA0Ny1cXHRidF9jYihza2IpLVxcdTAwM2Vmb3JjZV9hY3RpdmUgPSB0ZXN0X2JpdChGTEFHX0ZPUkNFX0FDVElWRSwgXFx1MDAyNmNoYW4tXFx1MDAzZWZsYWdzKTtcXG5uZXQvYmx1ZXRvb3RoL2wyY2FwX2NvcmUuYzoxMDQ4OlxcdGhjaV9zZW5kX2FjbChjaGFuLVxcdTAwM2Vjb25uLVxcdTAwM2VoY2hhbiwgc2tiLCBmbGFncyk7XFxubmV0L2JsdWV0b290aC9sMmNhcF9jb3JlLmMtMTA0OS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIxOjQ0OjM1LjAwMjU4MTM0OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkzNjUzMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGNpX3NlbmRfc2NvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9ibHVldG9vdGgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9ibHVldG9vdGgvaGNpX2NvcmUuYz0zMjM3PXZvaWQgaGNpX3NlbmRfYWNsKHN0cnVjdCBoY2lfY2hhbiAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgX191MTYgZmxhZ3MpXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMtMzI0OS0vKiBTZW5kIFNDTyBkYXRhICovXFxubmV0L2JsdWV0b290aC9oY2lfY29yZS5jOjMyNTA6dm9pZCBoY2lfc2VuZF9zY28oc3RydWN0IGhjaV9jb25uICpjb25uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9ibHVldG9vdGgvaGNpX2NvcmUuYy0zMjUxLXtcXG4tLVxcbm5ldC9ibHVldG9vdGgvc2NvLmM9NDA0PXN0YXRpYyBpbnQgc2NvX3NlbmRfZnJhbWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2JsdWV0b290aC9zY28uYy00MTYtXFx0aGNpX3NldHVwX3R4X3RpbWVzdGFtcChza2IsIDEsIHNvY2tjKTtcXG5uZXQvYmx1ZXRvb3RoL3Njby5jOjQxNzpcXHRoY2lfc2VuZF9zY28oY29ubi1cXHUwMDNlaGNvbiwgc2tiKTtcXG5uZXQvYmx1ZXRvb3RoL3Njby5jLTQxOC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjE6NDQ6MzUuMDUxOTUwNDIzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzY4OTg1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoY2lfc2VuZF9pc29cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JsdWV0b290aC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JsdWV0b290aC9oY2lfY29yZS5jPTMyODg9c3RhdGljIHZvaWQgaGNpX3F1ZXVlX2lzbyhzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIHN0cnVjdCBza19idWZmX2hlYWQgKnF1ZXVlLFxcbi0tXFxubmV0L2JsdWV0b290aC9oY2lfY29yZS5jLTMzMzQtXFxubmV0L2JsdWV0b290aC9oY2lfY29yZS5jOjMzMzU6dm9pZCBoY2lfc2VuZF9pc28oc3RydWN0IGhjaV9jb25uICpjb25uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9ibHVldG9vdGgvaGNpX2NvcmUuYy0zMzM2LXtcXG4tLVxcbm5ldC9ibHVldG9vdGgvaXNvLmM9NjA1PXN0YXRpYyBpbnQgaXNvX3NlbmRfZnJhbWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2JsdWV0b290aC9pc28uYy02MjctXFx0XFx0aGNpX3NldHVwX3R4X3RpbWVzdGFtcChza2IsIDEsIHNvY2tjKTtcXG5uZXQvYmx1ZXRvb3RoL2lzby5jOjYyODpcXHRcXHRoY2lfc2VuZF9pc28oY29ubi1cXHUwMDNlaGNvbiwgc2tiKTtcXG5uZXQvYmx1ZXRvb3RoL2lzby5jLTYyOS1cXHR9IGVsc2Uge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMTo0NDozNS4wOTU2NDQ1MThaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjUwMDQ5ODE3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQmx1ZXRvb3RoIEZ1enppbmcgVGFyZ2V0KipcblxuQWxyaWdodCwgdGhpcyBsb29rcyBwcm9taXNpbmcuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIHJlcHJlc2VudCBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLiBXZSdyZSBsb29raW5nIGF0IGBoY2lfc2VuZF9hY2xgLCBgaGNpX3NlbmRfc2NvYCwgYW5kIGBoY2lfc2VuZF9pc29gLCB3aGljaCBoYW5kbGUgQmx1ZXRvb3RoIGRhdGEgdHJhbnNtaXNzaW9uLiBUaGUgcGF0Y2ggdG91Y2hlcyB0aGVzZSBjb3JlIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdmlydHVhbCBIQ0kgZGV2aWNlcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgaW4gcGxhY2UuXG5cbkkgbmVlZCB0byBlbmFibGUgYEJUYCBhbmQgYEJUX0hDSVZIQ0lgLCBvYnZpb3VzbHkuIExldCdzIG1ha2Ugc3VyZSB3ZSdyZSBub3QgbWlzc2luZyBhbnl0aGluZy4gSSB0aGluayBgQlRfQlJFRFJgIGFuZCBgQlRfTEVgIHdpbGwgYmUgbmVjZXNzYXJ5IGFzIHdlbGwsIGNvbnNpZGVyaW5nIHRoZXkgYXJlIGxpa2VseSB1c2VkIGJ5IEFDTCBhbmQgSVNPLiBJJ2xsIHRha2UgYW5vdGhlciBsb29rIGF0IGBuZXQvYmx1ZXRvb3RoL0tjb25maWdgIHRvIGJlIHN1cmUuIFllcCwgYEJUX0JSRURSYCBlbmFibGVzIFwiQmx1ZXRvb3RoIENsYXNzaWMgKEJSL0VEUikgZmVhdHVyZXMsXCIgYW5kIGBCVF9MRWAgZW5hYmxlcyBcIkJsdWV0b290aCBMb3cgRW5lcmd5IChMRSkgZmVhdHVyZXMuXCIgV2Ugc2hvdWxkIGRlZmluaXRlbHkgaW5jbHVkZSB0aGVtLlxuXG5Ob3csIGxldCdzIGFzc2VtYmxlIHRoZSByZXNwb25zZS5cblxuYGBgXG5Xb3J0aEZ1enppbmc6IHRydWVcblJlYXNvbmluZzogVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgQmx1ZXRvb3RoIGRhdGEgdHJhbnNtaXNzaW9uIGZ1bmN0aW9ucyAoaGNpX3NlbmRfYWNsLCBoY2lfc2VuZF9zY28sIGhjaV9zZW5kX2lzbykgdG8gY2hlY2sgaWYgdGhlIGRldmljZSBpcyB1cCBiZWZvcmUgcXVldWluZyB0aGUgdHJhbnNtaXNzaW9uIHdvcmsuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIGlzc3VlcyBkdXJpbmcgZGV2aWNlIHRlYXJkb3duIGFuZCBpcyByZWFjaGFibGUgdmlhIHZpcnR1YWwgSENJIGRldmljZXMuXG5Gb2N1c1N5bWJvbHM6IFtcImhjaV9zZW5kX2FjbFwiLCBcImhjaV9zZW5kX3Njb1wiLCBcImhjaV9zZW5kX2lzb1wiXVxuRW5hYmxlQ29uZmlnczogW1wiQlRcIiwgXCJCVF9IQ0lWSENJXCIsIFwiQlRfQlJFRFJcIiwgXCJCVF9MRVwiXVxuYGBgXG5cblRoYXQgc2hvdWxkIGJlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIG91ciBmdXp6aW5nIGNhbXBhaWduLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Mjk4LCJPdXRwdXRUb2tlbnMiOjEzNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiLCJncmVwcGVyIiwiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIxOjQ0OjQxLjU5NjE0NTU5OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3MjUzMTExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCVFwiLFxuICAgIFwiQlRfSENJVkhDSVwiLFxuICAgIFwiQlRfQlJFRFJcIixcbiAgICBcIkJUX0xFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaGNpX3NlbmRfYWNsXCIsXG4gICAgXCJoY2lfc2VuZF9zY29cIixcbiAgICBcImhjaV9zZW5kX2lzb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgQmx1ZXRvb3RoIGRhdGEgdHJhbnNtaXNzaW9uIGZ1bmN0aW9ucyAoaGNpX3NlbmRfYWNsLCBoY2lfc2VuZF9zY28sIGhjaV9zZW5kX2lzbykgdG8gY2hlY2sgaWYgdGhlIGRldmljZSBpcyB1cCBiZWZvcmUgcXVldWluZyB0aGUgdHJhbnNtaXNzaW9uIHdvcmsuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIGlzc3VlcyBkdXJpbmcgZGV2aWNlIHRlYXJkb3duIGFuZCBpcyByZWFjaGFibGUgdmlhIHZpcnR1YWwgSENJIGRldmljZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlRcIixcbiAgICBcIkJUX0hDSVZIQ0lcIixcbiAgICBcIkJUX0JSRURSXCIsXG4gICAgXCJCVF9MRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhjaV9zZW5kX2FjbFwiLFxuICAgIFwiaGNpX3NlbmRfc2NvXCIsXG4gICAgXCJoY2lfc2VuZF9pc29cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEJsdWV0b290aCBkYXRhIHRyYW5zbWlzc2lvbiBmdW5jdGlvbnMgKGhjaV9zZW5kX2FjbCwgaGNpX3NlbmRfc2NvLCBoY2lfc2VuZF9pc28pIHRvIGNoZWNrIGlmIHRoZSBkZXZpY2UgaXMgdXAgYmVmb3JlIHF1ZXVpbmcgdGhlIHRyYW5zbWlzc2lvbiB3b3JrLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBpc3N1ZXMgZHVyaW5nIGRldmljZSB0ZWFyZG93biBhbmQgaXMgcmVhY2hhYmxlIHZpYSB2aXJ0dWFsIEhDSSBkZXZpY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMTo0NDo0MS42ODM0MDQ1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjI2OTk4Nzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjE6NDQ6NDEuNjgzOTE2NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5NjI2NDgyNzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgc3RhdGUgY2hlY2sgKGB0ZXN0X2JpdChIQ0lfVVAsIFxcdTAwMjZoZGV2LVxcdTAwM2VmbGFncylgKSBiZWZvcmUgcXVldWluZyBUWCB3b3JrIChgcXVldWVfd29ya2ApIGZvciBBQ0wsIFNDTywgYW5kIElTTyBkYXRhIGluIHRoZSBCbHVldG9vdGggSENJIGNvcmUuIFRoaXMgcHJldmVudHMgcXVldWluZyB3b3JrIHdoZW4gdGhlIEhDSSBkZXZpY2UgaXMgbm90IGluIHRoZSBVUCBzdGF0ZSwgd2hpY2ggbGlrZWx5IGFkZHJlc3NlcyBhIHVzZS1hZnRlci1mcmVlLCByYWNlIGNvbmRpdGlvbiwgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGJ1ZyAoZS5nLiwgaWYgdGhlIHdvcmtxdWV1ZSBpcyBkZXN0cm95ZWQgb3IgdGhlIGRldmljZSBpcyBiZWluZyB0b3JuIGRvd24pLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSByZWxhdGVkIHRvIG9iamVjdCBsaWZldGltZXMgYW5kIGNvbmN1cnJlbmN5LCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gKGZvciB1c2UtYWZ0ZXItZnJlZSkgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBtb2RpZmljYXRpb25zIHRvIGRhdGEgc2VudCB0byB1c2VyIHNwYWNlLiBJdCBkb2VzIG5vdCBpbnZvbHZlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQ0N2QzMGNkOGNlZTE1MDU4ZWY4YmE0ZTdhZGQxNzI0NDg2MjZhZTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyA4IDIxOjQ0OjA5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jIGIvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jXG5pbmRleCA1YmE5ZmU4MjYxZWM4Li5kOWYwOTFhZjM2MTgzIDEwMDY0NFxuLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jXG4rKysgYi9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmNcbkBAIC0zMjQyLDcgKzMyNDIsOCBAQCB2b2lkIGhjaV9zZW5kX2FjbChzdHJ1Y3QgaGNpX2NoYW4gKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IsIF9fdTE2IGZsYWdzKVxuIFxuIFx0aGNpX3F1ZXVlX2FjbChjaGFuLCBcdTAwMjZjaGFuLVx1MDAzZWRhdGFfcSwgc2tiLCBmbGFncyk7XG4gXG4tXHRxdWV1ZV93b3JrKGhkZXYtXHUwMDNld29ya3F1ZXVlLCBcdTAwMjZoZGV2LVx1MDAzZXR4X3dvcmspO1xuK1x0aWYgKHRlc3RfYml0KEhDSV9VUCwgXHUwMDI2aGRldi1cdTAwM2VmbGFncykpXG4rXHRcdHF1ZXVlX3dvcmsoaGRldi1cdTAwM2V3b3JrcXVldWUsIFx1MDAyNmhkZXYtXHUwMDNldHhfd29yayk7XG4gfVxuIFxuIC8qIFNlbmQgU0NPIGRhdGEgKi9cbkBAIC0zMjY3LDcgKzMyNjgsOCBAQCB2b2lkIGhjaV9zZW5kX3NjbyhzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRidF9kZXZfZGJnKGhkZXYsIFwiaGNvbiAlcCBxdWV1ZWQgJWRcIiwgY29ubixcbiBcdFx0ICAgc2tiX3F1ZXVlX2xlbihcdTAwMjZjb25uLVx1MDAzZWRhdGFfcSkpO1xuIFxuLVx0cXVldWVfd29yayhoZGV2LVx1MDAzZXdvcmtxdWV1ZSwgXHUwMDI2aGRldi1cdTAwM2V0eF93b3JrKTtcbitcdGlmICh0ZXN0X2JpdChIQ0lfVVAsIFx1MDAyNmhkZXYtXHUwMDNlZmxhZ3MpKVxuK1x0XHRxdWV1ZV93b3JrKGhkZXYtXHUwMDNld29ya3F1ZXVlLCBcdTAwMjZoZGV2LVx1MDAzZXR4X3dvcmspO1xuIH1cbiBcbiAvKiBTZW5kIElTTyBkYXRhICovXG5AQCAtMzMzOCw3ICszMzQwLDggQEAgdm9pZCBoY2lfc2VuZF9pc28oc3RydWN0IGhjaV9jb25uICpjb25uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIFx0aGNpX3F1ZXVlX2lzbyhjb25uLCBcdTAwMjZjb25uLVx1MDAzZWRhdGFfcSwgc2tiKTtcbiBcbi1cdHF1ZXVlX3dvcmsoaGRldi1cdTAwM2V3b3JrcXVldWUsIFx1MDAyNmhkZXYtXHUwMDNldHhfd29yayk7XG4rXHRpZiAodGVzdF9iaXQoSENJX1VQLCBcdTAwMjZoZGV2LVx1MDAzZWZsYWdzKSlcbitcdFx0cXVldWVfd29yayhoZGV2LVx1MDAzZXdvcmtxdWV1ZSwgXHUwMDI2aGRldi1cdTAwM2V0eF93b3JrKTtcbiB9XG4gXG4gLyogLS0tLSBIQ0kgVFggdGFzayAob3V0Z29pbmcgZGF0YSkgLS0tLSAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjE6NDQ6NDEuNjgzOTE3NDZaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTYyNjQ2MTUwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogQmx1ZXRvb3RoIEhDSSBUWCBXb3JrcXVldWUgU2FmZWd1YXJkKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIlRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIGZpeC5cIiBJdCBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlIHdpdGhpbiB0aGUgQmx1ZXRvb3RoIEhDSSBjb3JlLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgdHJhbnNtaXNzaW9uIG9mIEFDTCwgU0NPLCBhbmQgSVNPIGRhdGEuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY2hlY2s6IGBpZiAodGVzdF9iaXQoSENJX1VQLCBcdTAwMjZoZGV2LVx1MDAzZWZsYWdzKSlgIGJlZm9yZSB0aGUgYHF1ZXVlX3dvcmtgIGNhbGxzIGluIGBoY2lfc2VuZF9hY2xgLCBgaGNpX3NlbmRfc2NvYCwgYW5kIGBoY2lfc2VuZF9pc29gLiBCYXNpY2FsbHksIGl0J3MgZW5zdXJpbmcgdGhhdCB0aGUgZGV2aWNlIGlzIGFjdHVhbGx5IFwidXBcIiBhbmQgcnVubmluZyBiZWZvcmUgc3VibWl0dGluZyB3b3JrIHRvIHRoZSB3b3JrcXVldWUuIFRoaXMgaXMgYSBzbWFydCBtb3ZlLCBiZWNhdXNlIGl0IHByZXZlbnRzIHF1ZXVpbmcgd29yayBvbiBhIHdvcmtxdWV1ZSBmb3IgYSBkZXZpY2UgdGhhdCBtaWdodCBiZSBpbiB0aGUgcHJvY2VzcyBvZiBzaHV0dGluZyBkb3duLlxuXG5NeSBpbW1lZGlhdGUgYXNzdW1wdGlvbiBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgdGFyZ2V0aW5nIGEgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZSAoVUFGKSBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugc2l0dWF0aW9uLiBJZiB0aGUgZGV2aWNlIGlzbid0IHVwLCB0aGUgd29ya3F1ZXVlIG1pZ2h0IGJlIGdldHRpbmcgZGVzdHJveWVkIG9yIGlzbid0IHByb3Blcmx5IGluaXRpYWxpemVkLiBUcnlpbmcgdG8gcXVldWUgd29yayBpbiB0aGF0IHNjZW5hcmlvIGlzIGEgcmVjaXBlIGZvciBhIGNyYXNoLCBvciB3b3JzZSwgYSBVQUYgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eS4gVGhpcyBmZWVscyB2ZXJ5IG11Y2ggbGlrZSBhIHJhY2UgY29uZGl0aW9uIG9yIHN0YXRlIG1hY2hpbmUgaXNzdWUuIEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMgc2hvdWxkIGZsYWcgdGhpcyB0eXBlIG9mIHZ1bG5lcmFiaWxpdHkgcHJldHR5IHF1aWNrbHkuXG5cbk15IG5leHQgdGhvdWdodCBpcywgZG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBhbnkgbmV3IHJpc2tzLCBzcGVjaWZpY2FsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzPyBJIG5lZWQgdG8gYmUgZGlsaWdlbnQgaGVyZS4gTGV0J3Mgc2VlLi4uIHRoZSBwYXRjaCBpcyBqdXN0IGFkZGluZyBhIHN0YXRlIGNoZWNrIGJlZm9yZSBhbiBleGlzdGluZyBgcXVldWVfd29ya2AgY2FsbC4gSXQncyBub3QgaW50cm9kdWNpbmcgYW55IG5ldyB2YXJpYWJsZXMsIGFsbG9jYXRpb25zLCBvciBtb2RpZmljYXRpb25zIHRvIGRhdGEgc3RydWN0dXJlcyB0aGF0IGFyZSBzZW50IHRvIHVzZXIgc3BhY2UuIEl0J3MgcHVyZWx5IGFib3V0IGNvbnRyb2xsaW5nIHRoZSAqdGltaW5nKiBvZiB0aGUgZXhpc3Rpbmcgd29yayBxdWV1ZSBvcGVyYXRpb24uIFNvLCBubywgdGhpcyBwYXRjaCBkb2Vzbid0IGxvb2sgbGlrZSBpdCdzIGdvaW5nIHRvIHRyaWdnZXIgYW55IEtNU0FOIGlzc3Vlcy4gSXQncyBtb3JlIGFib3V0IHByb3RlY3RpbmcgdGhlIGV4aXN0aW5nIGNvZGUsIHJhdGhlciB0aGFuIGV4cG9zaW5nIGl0IHRvIG5ldyB2dWxuZXJhYmlsaXRpZXMuXG5cblNvLCBsZXQgbWUgc3VtbWFyaXplIG15IHJlYXNvbmluZyBmb3IgY2xhcml0eTogVGhpcyBwYXRjaCBwcm90ZWN0cyBhZ2FpbnN0IGEgY29uY3VycmVuY3kgYnVnLiBJdCBkb2VzIHRoaXMgYnkgY2hlY2tpbmcgaWYgdGhlIEhDSSBkZXZpY2UgaXMgaW4gdGhlIFwiVVBcIiBzdGF0ZSBiZWZvcmUgc3VibWl0dGluZyB3b3JrIHRvIHRoZSB3b3JrcXVldWUuIFRoaXMgbGlrZWx5IHJlc29sdmVzIGEgVUFGLCByYWNlIGNvbmRpdGlvbiwgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBUaGUgZml4IGl0c2VsZiBpbnZvbHZlcyBvbmx5IGEgY29uZGl0aW9uYWwsIHNvIGl0IGRvZXNuJ3QgcHJlc2VudCBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb3JtYXRpb24gbGVhayByaXNrcywgc28gS01TQU4gaXNuJ3QgcmVsZXZhbnQgaGVyZS4gS0FTQU4gb3Igb3RoZXIgc3RhbmRhcmQgdG9vbHMgYXJlIG1vcmUgYXBwcm9wcmlhdGUgdG8gY2hlY2sgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI5NSwiT3V0cHV0VG9rZW5zIjoyMDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MDYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMTo0NDo1MS4zMTAzODIzNDRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBzdGF0ZSBjaGVjayAoYHRlc3RfYml0KEhDSV9VUCwgXFx1MDAyNmhkZXYtXFx1MDAzZWZsYWdzKWApIGJlZm9yZSBxdWV1aW5nIFRYIHdvcmsgKGBxdWV1ZV93b3JrYCkgZm9yIEFDTCwgU0NPLCBhbmQgSVNPIGRhdGEgaW4gdGhlIEJsdWV0b290aCBIQ0kgY29yZS4gVGhpcyBwcmV2ZW50cyBxdWV1aW5nIHdvcmsgd2hlbiB0aGUgSENJIGRldmljZSBpcyBub3QgaW4gdGhlIFVQIHN0YXRlLCB3aGljaCBsaWtlbHkgYWRkcmVzc2VzIGEgdXNlLWFmdGVyLWZyZWUsIHJhY2UgY29uZGl0aW9uLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYnVnIChlLmcuLCBpZiB0aGUgd29ya3F1ZXVlIGlzIGRlc3Ryb3llZCBvciB0aGUgZGV2aWNlIGlzIGJlaW5nIHRvcm4gZG93bikuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIHJlbGF0ZWQgdG8gb2JqZWN0IGxpZmV0aW1lcyBhbmQgY29uY3VycmVuY3ksIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiAoZm9yIHVzZS1hZnRlci1mcmVlKSBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIG1vZGlmaWNhdGlvbnMgdG8gZGF0YSBzZW50IHRvIHVzZXIgc3BhY2UuIEl0IGRvZXMgbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHN0YXRlIGNoZWNrIChgdGVzdF9iaXQoSENJX1VQLCBcXHUwMDI2aGRldi1cXHUwMDNlZmxhZ3MpYCkgYmVmb3JlIHF1ZXVpbmcgVFggd29yayAoYHF1ZXVlX3dvcmtgKSBmb3IgQUNMLCBTQ08sIGFuZCBJU08gZGF0YSBpbiB0aGUgQmx1ZXRvb3RoIEhDSSBjb3JlLiBUaGlzIHByZXZlbnRzIHF1ZXVpbmcgd29yayB3aGVuIHRoZSBIQ0kgZGV2aWNlIGlzIG5vdCBpbiB0aGUgVVAgc3RhdGUsIHdoaWNoIGxpa2VseSBhZGRyZXNzZXMgYSB1c2UtYWZ0ZXItZnJlZSwgcmFjZSBjb25kaXRpb24sIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBidWcgKGUuZy4sIGlmIHRoZSB3b3JrcXVldWUgaXMgZGVzdHJveWVkIG9yIHRoZSBkZXZpY2UgaXMgYmVpbmcgdG9ybiBkb3duKS4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgcmVsYXRlZCB0byBvYmplY3QgbGlmZXRpbWVzIGFuZCBjb25jdXJyZW5jeSwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIChmb3IgdXNlLWFmdGVyLWZyZWUpIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgbW9kaWZpY2F0aW9ucyB0byBkYXRhIHNlbnQgdG8gdXNlciBzcGFjZS4gSXQgZG9lcyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflownllmn[1] Phase: Succeeded StartedAt: 2026-08-08 21:45:02 +0000 UTC FinishedAt: 2026-08-08 21:45:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflownllmn[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-08 21:45:02 +0000 UTC FinishedAt: 2026-08-08 21:45:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflownllmn[2] Phase: Succeeded StartedAt: 2026-08-08 21:45:02 +0000 UTC FinishedAt: 2026-08-09 01:25:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflownllmn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hci_send_acl","hci_send_sco","hci_send_iso"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"series_id":"09d5ca51-a09e-4e69-b1b3-6e379b5928fa","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-08 21:45:02 +0000 UTC FinishedAt: 2026-08-09 01:25:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hci_send_acl","hci_send_sco","hci_send_iso"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"series_id":"09d5ca51-a09e-4e69-b1b3-6e379b5928fa","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-workflownllmn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hci_send_acl","hci_send_sco","hci_send_iso"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"series_id":"09d5ca51-a09e-4e69-b1b3-6e379b5928fa","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-08 21:45:02 +0000 UTC FinishedAt: 2026-08-08 21:45:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflownllmn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hci_send_acl","hci_send_sco","hci_send_iso"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"series_id":"09d5ca51-a09e-4e69-b1b3-6e379b5928fa","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-08 21:45:02 +0000 UTC FinishedAt: 2026-08-08 21:45:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"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-workflownllmn/series-workflownllmn-convert-artifact-1282738965/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownllmn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hci_send_acl","hci_send_sco","hci_send_iso"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"series_id":"09d5ca51-a09e-4e69-b1b3-6e379b5928fa","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-08 21:45:12 +0000 UTC FinishedAt: 2026-08-08 22:01:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflownllmn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hci_send_acl","hci_send_sco","hci_send_iso"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"series_id":"09d5ca51-a09e-4e69-b1b3-6e379b5928fa","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-08 21:45:12 +0000 UTC FinishedAt: 2026-08-08 22:01:33 +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:*2f3d008d-77c0-4c8d-9750-1f2395b5aabb,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-workflownllmn/series-workflownllmn-convert-artifact-1282738965/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": "942a93f3-2637-4e0b-b14e-707ea72bffa2", "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-workflownllmn/series-workflownllmn-build-action-2234868603/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownllmn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hci_send_acl","hci_send_sco","hci_send_iso"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"series_id":"09d5ca51-a09e-4e69-b1b3-6e379b5928fa","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-08 21:45:12 +0000 UTC FinishedAt: 2026-08-08 22:01:23 +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:*2f3d008d-77c0-4c8d-9750-1f2395b5aabb,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-workflownllmn/series-workflownllmn-convert-artifact-1282738965/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": "942a93f3-2637-4e0b-b14e-707ea72bffa2", "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-workflownllmn/series-workflownllmn-build-action-2234868603/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownllmn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hci_send_acl","hci_send_sco","hci_send_iso"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"series_id":"09d5ca51-a09e-4e69-b1b3-6e379b5928fa","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-08 22:01:33 +0000 UTC FinishedAt: 2026-08-08 22:01:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflownllmn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hci_send_acl","hci_send_sco","hci_send_iso"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"series_id":"09d5ca51-a09e-4e69-b1b3-6e379b5928fa","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-08 22:01:33 +0000 UTC FinishedAt: 2026-08-08 22:01:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflownllmn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hci_send_acl","hci_send_sco","hci_send_iso"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"series_id":"09d5ca51-a09e-4e69-b1b3-6e379b5928fa","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-08 22:01:33 +0000 UTC FinishedAt: 2026-08-08 22:01:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflownllmn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hci_send_acl","hci_send_sco","hci_send_iso"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"series_id":"09d5ca51-a09e-4e69-b1b3-6e379b5928fa","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-08 22:01:33 +0000 UTC FinishedAt: 2026-08-08 22:01:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"series_id":"09d5ca51-a09e-4e69-b1b3-6e379b5928fa","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-workflownllmn/series-workflownllmn-convert-artifact-1670154736/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownllmn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hci_send_acl","hci_send_sco","hci_send_iso"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"series_id":"09d5ca51-a09e-4e69-b1b3-6e379b5928fa","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-08 22:01:43 +0000 UTC FinishedAt: 2026-08-08 22:03:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflownllmn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hci_send_acl","hci_send_sco","hci_send_iso"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"series_id":"09d5ca51-a09e-4e69-b1b3-6e379b5928fa","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-08 22:01:43 +0000 UTC FinishedAt: 2026-08-08 22:03:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*942a93f3-2637-4e0b-b14e-707ea72bffa2,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-workflownllmn/series-workflownllmn-build-action-2234868603/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-workflownllmn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hci_send_acl","hci_send_sco","hci_send_iso"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"series_id":"09d5ca51-a09e-4e69-b1b3-6e379b5928fa","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-08 22:03:32 +0000 UTC FinishedAt: 2026-08-08 22:03:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflownllmn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hci_send_acl","hci_send_sco","hci_send_iso"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"series_id":"09d5ca51-a09e-4e69-b1b3-6e379b5928fa","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-08 22:03:32 +0000 UTC FinishedAt: 2026-08-08 22:03:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflownllmn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hci_send_acl","hci_send_sco","hci_send_iso"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"series_id":"09d5ca51-a09e-4e69-b1b3-6e379b5928fa","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-08 22:03:32 +0000 UTC FinishedAt: 2026-08-08 22:21:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflownllmn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hci_send_acl","hci_send_sco","hci_send_iso"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"series_id":"09d5ca51-a09e-4e69-b1b3-6e379b5928fa","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-08 22:03:32 +0000 UTC FinishedAt: 2026-08-08 22:21:36 +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:*2f3d008d-77c0-4c8d-9750-1f2395b5aabb,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-workflownllmn/series-workflownllmn-convert-artifact-1670154736/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": "f8e8f450-d0f3-4c05-8354-3a42d52e259e", "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-workflownllmn/series-workflownllmn-build-action-4095142636/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownllmn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hci_send_acl","hci_send_sco","hci_send_iso"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"series_id":"09d5ca51-a09e-4e69-b1b3-6e379b5928fa","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-08 22:03:32 +0000 UTC FinishedAt: 2026-08-08 22:21:26 +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:*2f3d008d-77c0-4c8d-9750-1f2395b5aabb,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-workflownllmn/series-workflownllmn-convert-artifact-1670154736/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": "f8e8f450-d0f3-4c05-8354-3a42d52e259e", "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-workflownllmn/series-workflownllmn-build-action-4095142636/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownllmn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hci_send_acl","hci_send_sco","hci_send_iso"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"series_id":"09d5ca51-a09e-4e69-b1b3-6e379b5928fa","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-08 22:21:36 +0000 UTC FinishedAt: 2026-08-08 22:21:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflownllmn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hci_send_acl","hci_send_sco","hci_send_iso"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"series_id":"09d5ca51-a09e-4e69-b1b3-6e379b5928fa","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-08 22:21:36 +0000 UTC FinishedAt: 2026-08-08 22:21:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflownllmn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hci_send_acl","hci_send_sco","hci_send_iso"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"series_id":"09d5ca51-a09e-4e69-b1b3-6e379b5928fa","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-08 22:21:36 +0000 UTC FinishedAt: 2026-08-08 22:23:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflownllmn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hci_send_acl","hci_send_sco","hci_send_iso"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"series_id":"09d5ca51-a09e-4e69-b1b3-6e379b5928fa","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-08 22:21:36 +0000 UTC FinishedAt: 2026-08-08 22:23:17 +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:*f8e8f450-d0f3-4c05-8354-3a42d52e259e,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-workflownllmn/series-workflownllmn-build-action-4095142636/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-workflownllmn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hci_send_acl","hci_send_sco","hci_send_iso"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"series_id":"09d5ca51-a09e-4e69-b1b3-6e379b5928fa","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-08 22:23:27 +0000 UTC FinishedAt: 2026-08-09 01:25:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflownllmn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hci_send_acl","hci_send_sco","hci_send_iso"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"series_id":"09d5ca51-a09e-4e69-b1b3-6e379b5928fa","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-08 22:23:27 +0000 UTC FinishedAt: 2026-08-09 01:25:58 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hci_send_acl","hci_send_sco","hci_send_iso"],"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:*942a93f3-2637-4e0b-b14e-707ea72bffa2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f8e8f450-d0f3-4c05-8354-3a42d52e259e,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-workflownllmn/series-workflownllmn-build-action-2234868603/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-workflownllmn/series-workflownllmn-build-action-4095142636/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflownllmn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hci_send_acl","hci_send_sco","hci_send_iso"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"series_id":"09d5ca51-a09e-4e69-b1b3-6e379b5928fa","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-08 22:23:27 +0000 UTC FinishedAt: 2026-08-08 22:23:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflownllmn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hci_send_acl","hci_send_sco","hci_send_iso"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"series_id":"09d5ca51-a09e-4e69-b1b3-6e379b5928fa","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-08 22:23:27 +0000 UTC FinishedAt: 2026-08-08 22:23:31 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hci_send_acl","hci_send_sco","hci_send_iso"],"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-workflownllmn/series-workflownllmn-convert-artifact-3901978729/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownllmn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hci_send_acl","hci_send_sco","hci_send_iso"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"series_id":"09d5ca51-a09e-4e69-b1b3-6e379b5928fa","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-08 22:23:27 +0000 UTC FinishedAt: 2026-08-08 22:23:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflownllmn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hci_send_acl","hci_send_sco","hci_send_iso"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"series_id":"09d5ca51-a09e-4e69-b1b3-6e379b5928fa","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-08 22:23:27 +0000 UTC FinishedAt: 2026-08-08 22:23:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflownllmn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hci_send_acl","hci_send_sco","hci_send_iso"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"series_id":"09d5ca51-a09e-4e69-b1b3-6e379b5928fa","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-08 22:23:27 +0000 UTC FinishedAt: 2026-08-08 22:23:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflownllmn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hci_send_acl","hci_send_sco","hci_send_iso"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"series_id":"09d5ca51-a09e-4e69-b1b3-6e379b5928fa","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-08 22:23:37 +0000 UTC FinishedAt: 2026-08-09 01:25:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflownllmn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hci_send_acl","hci_send_sco","hci_send_iso"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_HCIVHCI","BT_BREDR","BT_LE"],"series_id":"09d5ca51-a09e-4e69-b1b3-6e379b5928fa","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-08 22:23:37 +0000 UTC FinishedAt: 2026-08-09 01:25:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*942a93f3-2637-4e0b-b14e-707ea72bffa2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f8e8f450-d0f3-4c05-8354-3a42d52e259e,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-workflownllmn/series-workflownllmn-build-action-2234868603/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-workflownllmn/series-workflownllmn-build-action-4095142636/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-workflownllmn/series-workflownllmn-convert-artifact-3901978729/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,}