Name: series-workflow7kjh7 Phase: Succeeded StartedAt: 2026-08-07 16:09:21 +0000 UTC FinishedAt: 2026-08-07 20:02:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kjh7[0] Phase: Succeeded StartedAt: 2026-08-07 16:09:21 +0000 UTC FinishedAt: 2026-08-07 16:14:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kjh7[0].run-triage Phase: Succeeded StartedAt: 2026-08-07 16:09:21 +0000 UTC FinishedAt: 2026-08-07 16:14:14 +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": "502d801f0ab03e4f32f9a33d203154ce84887921", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "QRTR", "QRTR_TUN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "502d801f0ab03e4f32f9a33d203154ce84887921", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "QRTR", "QRTR_TUN" ], "series_id": "4500b2e5-3e00-436b-a7ca-b8df1d7e3a55" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "qrtr_endpoint_register", "qrtr_sendmsg", "qrtr_tun_write_iter", "qrtr_endpoint_post", "qrtr_ns_worker", "qrtr_hello_work" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1FSVFImIzM0OywKICAgICYjMzQ7UVJUUl9UVU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtxcnRyX2VuZHBvaW50X3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O3FydHJfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDtxcnRyX3R1bl93cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O3FydHJfZW5kcG9pbnRfcG9zdCYjMzQ7LAogICAgJiMzNDtxcnRyX25zX3dvcmtlciYjMzQ7LAogICAgJiMzNDtxcnRyX2hlbGxvX3dvcmsmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgUVJUUiBzdWJzeXN0ZW0gdG8gaW5pdGlhdGUgdGhlIEhFTExPIGhhbmRzaGFrZSBmcm9tIHRoZSBjb3JlIGxheWVyIGluc3RlYWQgb2YgdGhlIG5hbWVzZXJ2aWNlLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IHdvcmsgaXRlbSBgcXJ0cl9oZWxsb193b3JrYCB3aGljaCBhbGxvY2F0ZXMgYSBjb250cm9sIHBhY2tldCBhbmQgZW5xdWV1ZXMgaXQuIFRoZSBjb250cm9sIHBhY2tldCBpcyBhbGxvY2F0ZWQgdXNpbmcgYHFydHJfYWxsb2NfY3RybF9wYWNrZXRgLCB3aGljaCB1c2VzIGBza2JfcHV0X3plcm9gIHRvIGZ1bGx5IHplcm8taW5pdGlhbGl6ZSB0aGUgcGFja2V0IHBheWxvYWQuIFRoZSBzdGFjay1hbGxvY2F0ZWQgYHN0cnVjdCBzb2NrYWRkcl9xcnRyYCB2YXJpYWJsZXMgKGBmcm9tYCBhbmQgYHRvYCkgYXJlIHVzZWQgdG8gcGFzcyBhZGRyZXNzZXMgdG8gYHFydHJfbm9kZV9lbnF1ZXVlYCwgd2hpY2ggb25seSByZWFkcyB0aGVpciBgc3Ffbm9kZWAgYW5kIGBzcV9wb3J0YCBmaWVsZHMgdG8gcG9wdWxhdGUgdGhlIHBhY2tldCBoZWFkZXIuIFRoZSBgc3RydWN0IHNvY2thZGRyX3FydHJgIGl0c2VsZiBpcyBub3QgY29waWVkIHRvIHRoZSBwYWNrZXQgb3IgdG8gdXNlcnNwYWNlLCBzbyBhbnkgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBwYWRkaW5nIGJ5dGVzIG9uIHRoZSBzdGFjayBhcmUgbmV2ZXIgcmVhZCBvciBsZWFrZWQuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLCBub3IgZG9lcyBpdCBtb2RpZnkgYm91bmRzIGNoZWNrcyBvciBsZW5ndGhzIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIG9yIGxvY2tpbmcgaXNzdWVzKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIG9yIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFF1YWxjb21tIElQQyBSb3V0ZXIgKFFSVFIpIGNvcmUgbG9naWMgdG8gaW5pdGlhdGUgYSBIRUxMTyBoYW5kc2hha2UgdXBvbiBlbmRwb2ludCByZWdpc3RyYXRpb24gYW5kIGRyb3AgcGFja2V0cyBpZiB0aGUgaGFuZHNoYWtlIGhhc24mIzM5O3QgY29tcGxldGVkLiBUaGlzIGZ1bmN0aW9uYWxpdHkgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSB1c2luZyB0aGUgYC9kZXYvcXJ0ci10dW5gIGRldmljZSwgd2hpY2ggYWxsb3dzIHVzZXJzcGFjZSB0byByZWdpc3RlciBlbmRwb2ludHMgYW5kIGluamVjdCBwYWNrZXRzLiBUaGUgY2hhbmdlcyBhZmZlY3QgY29yZSBwYWNrZXQgZW5xdWV1ZWluZyBhbmQgZW5kcG9pbnQgcmVnaXN0cmF0aW9uIHBhdGhzLCB3aGljaCBhcmUgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDI1YzU3YmI1ODdjMmZjYjg1ZDgxM2YzYjM0MmZiMjIzOGZhMmUyNjJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDE2OjEwOjU3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9xcnRyL2FmX3FydHIuYyBiL25ldC9xcnRyL2FmX3FydHIuY1xuaW5kZXggZDAyZWY5YTc0YzNjYS4uN2FkYzBhMDUzMTI1NCAxMDA2NDRcbi0tLSBhL25ldC9xcnRyL2FmX3FydHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3FydHIvYWZfcXJ0ci5jXG5AQCAtOSw2ICYjNDM7OSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGVybWlvcy5oXHUwMDNlXHQvKiBGb3IgVElPQ0lOUS9PVVRRICovXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3BpbmxvY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3dhaXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY25ldC9zb2NrLmhcdTAwM2VcbiBcbkBAIC0xMjAsOCAmIzQzOzEyMSwxMCBAQCBzdGF0aWMgREVGSU5FX1hBUlJBWV9BTExPQyhxcnRyX3BvcnRzKTtcbiAgKiBAbmlkOiBub2RlIGlkXG4gICogQHFydHJfdHhfZmxvdzogeGFycmF5IG9mIHFydHJfdHhfZmxvdywga2V5ZWQgYnkgbm9kZSBcdTAwM2NcdTAwM2MgMzIgfCBwb3J0XG4gICogQHFydHJfdHhfbG9jazogbG9jayBmb3IgcXJ0cl90eF9mbG93IGluc2VydHNcbiYjNDM7ICogQGhlbGxvX3NlbnQ6IGhlbGxvIHBhY2tldCBzZW5kIHN1Y2Nlc3NmdWxcbiAgKiBAcnhfcXVldWU6IHJlY2VpdmUgcXVldWVcbiAgKiBAaXRlbTogbGlzdCBpdGVtIGZvciBicm9hZGNhc3QgbGlzdFxuJiM0MzsgKiBAc2F5X2hlbGxvOiBzY2hlZHVsZWQgd29yayBmb3Igc2VuZGluZyBoZWxsbyBwYWNrZXRcbiAgKi9cbiBzdHJ1Y3QgcXJ0cl9ub2RlIHtcbiBcdHN0cnVjdCBtdXRleCBlcF9sb2NrO1xuQEAgLTEzMiw4ICYjNDM7MTM1LDExIEBAIHN0cnVjdCBxcnRyX25vZGUge1xuIFx0c3RydWN0IHhhcnJheSBxcnRyX3R4X2Zsb3c7XG4gXHRzdHJ1Y3QgbXV0ZXggcXJ0cl90eF9sb2NrOyAvKiBmb3IgcXJ0cl90eF9mbG93ICovXG4gXG4mIzQzO1x0Ym9vbCBoZWxsb19zZW50O1xuJiM0MztcbiBcdHN0cnVjdCBza19idWZmX2hlYWQgcnhfcXVldWU7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGl0ZW07XG4mIzQzO1x0c3RydWN0IHdvcmtfc3RydWN0IHNheV9oZWxsbztcbiB9O1xuIFxuIC8qKlxuQEAgLTE4Nyw2ICYjNDM7MTkzLDggQEAgc3RhdGljIHZvaWQgX19xcnRyX25vZGVfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZilcbiBcdGxpc3RfZGVsKFx1MDAyNm5vZGUtXHUwMDNlaXRlbSk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2cXJ0cl9ub2RlX2xvY2spO1xuIFxuJiM0MztcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2bm9kZS1cdTAwM2VzYXlfaGVsbG8pO1xuJiM0MztcbiBcdHNrYl9xdWV1ZV9wdXJnZShcdTAwMjZub2RlLVx1MDAzZXJ4X3F1ZXVlKTtcbiBcbiBcdC8qIEZyZWUgdHggZmxvdyBjb3VudGVycyAqL1xuQEAgLTM0MSw2ICYjNDM7MzQ5LDE0IEBAIHN0YXRpYyBpbnQgcXJ0cl9ub2RlX2VucXVldWUoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHNpemVfdCBsZW4gPSBza2ItXHUwMDNlbGVuO1xuIFx0aW50IHJjLCBjb25maXJtX3J4O1xuIFxuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2bm9kZS1cdTAwM2VlcF9sb2NrKTtcbiYjNDM7XHRpZiAoIW5vZGUtXHUwMDNlaGVsbG9fc2VudCBcdTAwMjZcdTAwMjYgdHlwZSAhPSBRUlRSX1RZUEVfSEVMTE8pIHtcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZub2RlLVx1MDAzZWVwX2xvY2spO1xuJiM0MztcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm5vZGUtXHUwMDNlZXBfbG9jayk7XG4mIzQzO1xuIFx0Y29uZmlybV9yeCA9IHFydHJfdHhfd2FpdChub2RlLCB0by1cdTAwM2VzcV9ub2RlLCB0by1cdTAwM2VzcV9wb3J0LCB0eXBlKTtcbiBcdGlmIChjb25maXJtX3J4IFx1MDAzYyAwKSB7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuQEAgLTM3Miw2ICYjNDM7Mzg4LDggQEAgc3RhdGljIGludCBxcnRyX25vZGVfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdHJjID0gbm9kZS1cdTAwM2VlcC1cdTAwM2V4bWl0KG5vZGUtXHUwMDNlZXAsIHNrYik7XG4gXHRcdGVsc2VcbiBcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRcdGlmICghcmMgXHUwMDI2XHUwMDI2IHR5cGUgPT0gUVJUUl9UWVBFX0hFTExPKVxuJiM0MztcdFx0XHRub2RlLVx1MDAzZWhlbGxvX3NlbnQgPSB0cnVlO1xuIFx0XHRtdXRleF91bmxvY2soXHUwMDI2bm9kZS1cdTAwM2VlcF9sb2NrKTtcbiBcdH1cbiBcdC8qIE5lZWQgdG8gZW5zdXJlIHRoYXQgYSBzdWJzZXF1ZW50IG1lc3NhZ2UgY2FycmllcyB0aGUgb3RoZXJ3aXNlIGxvc3RcbkBAIC0zNzksNiAmIzQzOzM5Nyw5IEBAIHN0YXRpYyBpbnQgcXJ0cl9ub2RlX2VucXVldWUoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChyYyBcdTAwMjZcdTAwMjYgY29uZmlybV9yeClcbiBcdFx0cXJ0cl90eF9mbG93X2ZhaWxlZChub2RlLCB0by1cdTAwM2VzcV9ub2RlLCB0by1cdTAwM2VzcV9wb3J0KTtcbiBcbiYjNDM7XHRpZiAocmMgXHUwMDI2XHUwMDI2IHR5cGUgPT0gUVJUUl9UWVBFX0hFTExPKVxuJiM0MztcdFx0c2NoZWR1bGVfd29yayhcdTAwMjZub2RlLVx1MDAzZXNheV9oZWxsbyk7XG4mIzQzO1xuIFx0cmV0dXJuIHJjO1xuIH1cbiBcbkBAIC01NzAsNiAmIzQzOzU5MSwzNSBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnFydHJfYWxsb2NfY3RybF9wYWNrZXQoc3RydWN0IHFydHJfY3RybF9wa3QgKipwa3QsXG4gXHRyZXR1cm4gc2tiO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgcXJ0cl9oZWxsb193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzb2NrYWRkcl9xcnRyIGZyb20gPSB7QUZfUUlQQ1JUUiwgMCwgUVJUUl9QT1JUX0NUUkx9O1xuJiM0MztcdHN0cnVjdCBzb2NrYWRkcl9xcnRyIHRvID0ge0FGX1FJUENSVFIsIDAsIFFSVFJfUE9SVF9DVFJMfTtcbiYjNDM7XHRzdHJ1Y3QgcXJ0cl9jdHJsX3BrdCAqcGt0O1xuJiM0MztcdHN0cnVjdCBxcnRyX25vZGUgKm5vZGU7XG4mIzQzO1x0c3RydWN0IHFydHJfc29jayAqY3RybDtcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuJiM0MztcbiYjNDM7XHRub2RlID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBxcnRyX25vZGUsIHNheV9oZWxsbyk7XG4mIzQzO1xuJiM0MztcdC8qIE5TIG11c3QgYmUgYm91bmQgYmVmb3JlIHdlIGNhbiBzZW5kICovXG4mIzQzO1x0Y3RybCA9IHFydHJfcG9ydF9sb29rdXAoUVJUUl9QT1JUX0NUUkwpO1xuJiM0MztcdGlmICghY3RybClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0c2tiID0gcXJ0cl9hbGxvY19jdHJsX3BhY2tldChcdTAwMjZwa3QsIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghc2tiKSB7XG4mIzQzO1x0XHRxcnRyX3BvcnRfcHV0KGN0cmwpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cGt0LVx1MDAzZWNtZCA9IGNwdV90b19sZTMyKFFSVFJfVFlQRV9IRUxMTyk7XG4mIzQzO1x0ZnJvbS5zcV9ub2RlID0gcXJ0cl9sb2NhbF9uaWQ7XG4mIzQzO1x0dG8uc3Ffbm9kZSA9IG5vZGUtXHUwMDNlbmlkO1xuJiM0MztcdHFydHJfbm9kZV9lbnF1ZXVlKG5vZGUsIHNrYiwgUVJUUl9UWVBFX0hFTExPLCBcdTAwMjZmcm9tLCBcdTAwMjZ0byk7XG4mIzQzO1x0cXJ0cl9wb3J0X3B1dChjdHJsKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyKCkgLSByZWdpc3RlciBhIG5ldyBlbmRwb2ludFxuICAqIEBlcDogZW5kcG9pbnQgdG8gcmVnaXN0ZXJcbkBAIC01OTUsNiAmIzQzOzY0NSw5IEBAIGludCBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyKHN0cnVjdCBxcnRyX2VuZHBvaW50ICplcCwgdW5zaWduZWQgaW50IG5pZClcbiBcdG5vZGUtXHUwMDNlbmlkID0gUVJUUl9FUF9OSURfQVVUTztcbiBcdG5vZGUtXHUwMDNlZXAgPSBlcDtcbiBcbiYjNDM7XHRub2RlLVx1MDAzZWhlbGxvX3NlbnQgPSBmYWxzZTtcbiYjNDM7XHRJTklUX1dPUksoXHUwMDI2bm9kZS1cdTAwM2VzYXlfaGVsbG8sIHFydHJfaGVsbG9fd29yayk7XG4mIzQzO1xuIFx0eGFfaW5pdChcdTAwMjZub2RlLVx1MDAzZXFydHJfdHhfZmxvdyk7XG4gXHRtdXRleF9pbml0KFx1MDAyNm5vZGUtXHUwMDNlcXJ0cl90eF9sb2NrKTtcbiBcbkBAIC02MDUsNiAmIzQzOzY1OCw5IEBAIGludCBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyKHN0cnVjdCBxcnRyX2VuZHBvaW50ICplcCwgdW5zaWduZWQgaW50IG5pZClcbiBcdG11dGV4X3VubG9jayhcdTAwMjZxcnRyX25vZGVfbG9jayk7XG4gXHRlcC1cdTAwM2Vub2RlID0gbm9kZTtcbiBcbiYjNDM7XHQvKiBJbml0aWF0ZSBIRUxMTyBoYW5kc2hha2UgZnJvbSB0aGUgY29yZSBsYXllciAqL1xuJiM0MztcdHNjaGVkdWxlX3dvcmsoXHUwMDI2bm9kZS1cdTAwM2VzYXlfaGVsbG8pO1xuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChxcnRyX2VuZHBvaW50X3JlZ2lzdGVyKTtcbkBAIC04NzksNiAmIzQzOzkzNSwxMSBAQCBzdGF0aWMgaW50IHFydHJfYmNhc3RfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZxcnRyX25vZGVfbG9jayk7XG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsIFx1MDAyNnFydHJfYWxsX25vZGVzLCBpdGVtKSB7XG4mIzQzO1x0XHQvKiBTa2lwIG5vZGVzIHdob3NlIG5vZGUgSUQgaXMgbm90IHlldCBrbm93bjsgdGhleSBjYW5ub3RcbiYjNDM7XHRcdCAqIHJlY2VpdmUgYnJvYWRjYXN0IHBhY2tldHMgYmVmb3JlIHRoZSBIRUxMTyBoYW5kc2hha2UuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChub2RlLVx1MDAzZW5pZCA9PSBRUlRSX0VQX05JRF9BVVRPKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiBcdFx0c2tibiA9IHBza2JfY29weShza2IsIEdGUF9LRVJORUwpO1xuIFx0XHRpZiAoIXNrYm4pXG4gXHRcdFx0YnJlYWs7XG5kaWZmIC0tZ2l0IGEvbmV0L3FydHIvbnMuYyBiL25ldC9xcnRyL25zLmNcbmluZGV4IGIzZjliYmNmOWFiOWIuLjE0MjYyNjIzZDJkZDUgMTAwNjQ0XG4tLS0gYS9uZXQvcXJ0ci9ucy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcXJ0ci9ucy5jXG5AQCAtMjEyLDYgJiM0MzsyMTIsNyBAQCBzdGF0aWMgdm9pZCBsb29rdXBfbm90aWZ5KHN0cnVjdCBzb2NrYWRkcl9xcnRyICp0bywgc3RydWN0IHFydHJfc2VydmVyICpzcnYsXG4gXHRcdHByX2VycihcJiMzNDtmYWlsZWQgdG8gc2VuZCBsb29rdXAgbm90aWZpY2F0aW9uXFxuXCYjMzQ7KTtcbiB9XG4gXG4mIzQzOy8qIEFubm91bmNlIHRoZSBsaXN0IG9mIHNlcnZlcnMgcmVnaXN0ZXJlZCBvbiB0aGUgbG9jYWwgbm9kZSAqL1xuIHN0YXRpYyBpbnQgYW5ub3VuY2Vfc2VydmVycyhzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqc3EpXG4ge1xuIFx0c3RydWN0IHFydHJfc2VydmVyICpzcnY7XG5AQCAtMzQ5LDE1ICYjNDM7MzUwLDggQEAgc3RhdGljIGludCBzYXlfaGVsbG8oc3RydWN0IHNvY2thZGRyX3FydHIgKmRlc3QpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi0vKiBBbm5vdW5jZSB0aGUgbGlzdCBvZiBzZXJ2ZXJzIHJlZ2lzdGVyZWQgb24gdGhlIGxvY2FsIG5vZGUgKi9cbiBzdGF0aWMgaW50IGN0cmxfY21kX2hlbGxvKHN0cnVjdCBzb2NrYWRkcl9xcnRyICpzcSlcbiB7XG4tXHRpbnQgcmV0O1xuLVxuLVx0cmV0ID0gc2F5X2hlbGxvKHNxKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdHJldHVybiByZXQ7XG4tXG4gXHRyZXR1cm4gYW5ub3VuY2Vfc2VydmVycyhzcSk7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjEwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtRUlRSJiMzNDssCiAgICAmIzM0O1FSVFJfVFVOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cXJ0cl9lbmRwb2ludF9yZWdpc3RlciYjMzQ7LAogICAgJiMzNDtxcnRyX3NlbmRtc2cmIzM0OywKICAgICYjMzQ7cXJ0cl90dW5fd3JpdGVfaXRlciYjMzQ7LAogICAgJiMzNDtxcnRyX2VuZHBvaW50X3Bvc3QmIzM0OywKICAgICYjMzQ7cXJ0cl9uc193b3JrZXImIzM0OywKICAgICYjMzQ7cXJ0cl9oZWxsb193b3JrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBRdWFsY29tbSBJUEMgUm91dGVyIChRUlRSKSBjb3JlIGxvZ2ljIHRvIGluaXRpYXRlIGEgSEVMTE8gaGFuZHNoYWtlIHVwb24gZW5kcG9pbnQgcmVnaXN0cmF0aW9uIGFuZCBkcm9wIHBhY2tldHMgaWYgdGhlIGhhbmRzaGFrZSBoYXNuJiMzOTt0IGNvbXBsZXRlZC4gVGhpcyBmdW5jdGlvbmFsaXR5IGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYnkgdXNpbmcgdGhlIGAvZGV2L3FydHItdHVuYCBkZXZpY2UsIHdoaWNoIGFsbG93cyB1c2Vyc3BhY2UgdG8gcmVnaXN0ZXIgZW5kcG9pbnRzIGFuZCBpbmplY3QgcGFja2V0cy4gVGhlIGNoYW5nZXMgYWZmZWN0IGNvcmUgcGFja2V0IGVucXVldWVpbmcgYW5kIGVuZHBvaW50IHJlZ2lzdHJhdGlvbiBwYXRocywgd2hpY2ggYXJlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyNWM1N2JiNTg3YzJmY2I4NWQ4MTNmM2IzNDJmYjIyMzhmYTJlMjYyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgNyAxNjoxMDo1NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9xcnRyL2FmX3FydHIuYyBiL25ldC9xcnRyL2FmX3FydHIuYwppbmRleCBkMDJlZjlhNzRjM2NhLi43YWRjMGEwNTMxMjU0IDEwMDY0NAotLS0gYS9uZXQvcXJ0ci9hZl9xcnRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3FydHIvYWZfcXJ0ci5jCkBAIC05LDYgJiM0Mzs5LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC90ZXJtaW9zLmgmZ3Q7CS8qIEZvciBUSU9DSU5RL09VVFEgKi8KICNpbmNsdWRlICZsdDtsaW51eC9zcGlubG9jay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3dhaXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvd29ya3F1ZXVlLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDtuZXQvc29jay5oJmd0OwogCkBAIC0xMjAsOCAmIzQzOzEyMSwxMCBAQCBzdGF0aWMgREVGSU5FX1hBUlJBWV9BTExPQyhxcnRyX3BvcnRzKTsKICAqIEBuaWQ6IG5vZGUgaWQKICAqIEBxcnRyX3R4X2Zsb3c6IHhhcnJheSBvZiBxcnRyX3R4X2Zsb3csIGtleWVkIGJ5IG5vZGUgJmx0OyZsdDsgMzIgfCBwb3J0CiAgKiBAcXJ0cl90eF9sb2NrOiBsb2NrIGZvciBxcnRyX3R4X2Zsb3cgaW5zZXJ0cwomIzQzOyAqIEBoZWxsb19zZW50OiBoZWxsbyBwYWNrZXQgc2VuZCBzdWNjZXNzZnVsCiAgKiBAcnhfcXVldWU6IHJlY2VpdmUgcXVldWUKICAqIEBpdGVtOiBsaXN0IGl0ZW0gZm9yIGJyb2FkY2FzdCBsaXN0CiYjNDM7ICogQHNheV9oZWxsbzogc2NoZWR1bGVkIHdvcmsgZm9yIHNlbmRpbmcgaGVsbG8gcGFja2V0CiAgKi8KIHN0cnVjdCBxcnRyX25vZGUgewogCXN0cnVjdCBtdXRleCBlcF9sb2NrOwpAQCAtMTMyLDggJiM0MzsxMzUsMTEgQEAgc3RydWN0IHFydHJfbm9kZSB7CiAJc3RydWN0IHhhcnJheSBxcnRyX3R4X2Zsb3c7CiAJc3RydWN0IG11dGV4IHFydHJfdHhfbG9jazsgLyogZm9yIHFydHJfdHhfZmxvdyAqLwogCiYjNDM7CWJvb2wgaGVsbG9fc2VudDsKJiM0MzsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHJ4X3F1ZXVlOwogCXN0cnVjdCBsaXN0X2hlYWQgaXRlbTsKJiM0MzsJc3RydWN0IHdvcmtfc3RydWN0IHNheV9oZWxsbzsKIH07CiAKIC8qKgpAQCAtMTg3LDYgJiM0MzsxOTMsOCBAQCBzdGF0aWMgdm9pZCBfX3FydHJfbm9kZV9yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKQogCWxpc3RfZGVsKCZhbXA7bm9kZS0mZ3Q7aXRlbSk7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7cXJ0cl9ub2RlX2xvY2spOwogCiYjNDM7CWNhbmNlbF93b3JrX3N5bmMoJmFtcDtub2RlLSZndDtzYXlfaGVsbG8pOwomIzQzOwogCXNrYl9xdWV1ZV9wdXJnZSgmYW1wO25vZGUtJmd0O3J4X3F1ZXVlKTsKIAogCS8qIEZyZWUgdHggZmxvdyBjb3VudGVycyAqLwpAQCAtMzQxLDYgJiM0MzszNDksMTQgQEAgc3RhdGljIGludCBxcnRyX25vZGVfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXNpemVfdCBsZW4gPSBza2ItJmd0O2xlbjsKIAlpbnQgcmMsIGNvbmZpcm1fcng7CiAKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO25vZGUtJmd0O2VwX2xvY2spOwomIzQzOwlpZiAoIW5vZGUtJmd0O2hlbGxvX3NlbnQgJmFtcDsmYW1wOyB0eXBlICE9IFFSVFJfVFlQRV9IRUxMTykgewomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7bm9kZS0mZ3Q7ZXBfbG9jayk7CiYjNDM7CQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO25vZGUtJmd0O2VwX2xvY2spOwomIzQzOwogCWNvbmZpcm1fcnggPSBxcnRyX3R4X3dhaXQobm9kZSwgdG8tJmd0O3NxX25vZGUsIHRvLSZndDtzcV9wb3J0LCB0eXBlKTsKIAlpZiAoY29uZmlybV9yeCAmbHQ7IDApIHsKIAkJa2ZyZWVfc2tiKHNrYik7CkBAIC0zNzIsNiAmIzQzOzM4OCw4IEBAIHN0YXRpYyBpbnQgcXJ0cl9ub2RlX2VucXVldWUoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCXJjID0gbm9kZS0mZ3Q7ZXAtJmd0O3htaXQobm9kZS0mZ3Q7ZXAsIHNrYik7CiAJCWVsc2UKIAkJCWtmcmVlX3NrYihza2IpOwomIzQzOwkJaWYgKCFyYyAmYW1wOyZhbXA7IHR5cGUgPT0gUVJUUl9UWVBFX0hFTExPKQomIzQzOwkJCW5vZGUtJmd0O2hlbGxvX3NlbnQgPSB0cnVlOwogCQltdXRleF91bmxvY2soJmFtcDtub2RlLSZndDtlcF9sb2NrKTsKIAl9CiAJLyogTmVlZCB0byBlbnN1cmUgdGhhdCBhIHN1YnNlcXVlbnQgbWVzc2FnZSBjYXJyaWVzIHRoZSBvdGhlcndpc2UgbG9zdApAQCAtMzc5LDYgJiM0MzszOTcsOSBAQCBzdGF0aWMgaW50IHFydHJfbm9kZV9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsCiAJaWYgKHJjICZhbXA7JmFtcDsgY29uZmlybV9yeCkKIAkJcXJ0cl90eF9mbG93X2ZhaWxlZChub2RlLCB0by0mZ3Q7c3Ffbm9kZSwgdG8tJmd0O3NxX3BvcnQpOwogCiYjNDM7CWlmIChyYyAmYW1wOyZhbXA7IHR5cGUgPT0gUVJUUl9UWVBFX0hFTExPKQomIzQzOwkJc2NoZWR1bGVfd29yaygmYW1wO25vZGUtJmd0O3NheV9oZWxsbyk7CiYjNDM7CiAJcmV0dXJuIHJjOwogfQogCkBAIC01NzAsNiAmIzQzOzU5MSwzNSBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnFydHJfYWxsb2NfY3RybF9wYWNrZXQoc3RydWN0IHFydHJfY3RybF9wa3QgKipwa3QsCiAJcmV0dXJuIHNrYjsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHFydHJfaGVsbG9fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciBmcm9tID0ge0FGX1FJUENSVFIsIDAsIFFSVFJfUE9SVF9DVFJMfTsKJiM0MzsJc3RydWN0IHNvY2thZGRyX3FydHIgdG8gPSB7QUZfUUlQQ1JUUiwgMCwgUVJUUl9QT1JUX0NUUkx9OwomIzQzOwlzdHJ1Y3QgcXJ0cl9jdHJsX3BrdCAqcGt0OwomIzQzOwlzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlOwomIzQzOwlzdHJ1Y3QgcXJ0cl9zb2NrICpjdHJsOwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwomIzQzOwomIzQzOwlub2RlID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBxcnRyX25vZGUsIHNheV9oZWxsbyk7CiYjNDM7CiYjNDM7CS8qIE5TIG11c3QgYmUgYm91bmQgYmVmb3JlIHdlIGNhbiBzZW5kICovCiYjNDM7CWN0cmwgPSBxcnRyX3BvcnRfbG9va3VwKFFSVFJfUE9SVF9DVFJMKTsKJiM0MzsJaWYgKCFjdHJsKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlza2IgPSBxcnRyX2FsbG9jX2N0cmxfcGFja2V0KCZhbXA7cGt0LCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFza2IpIHsKJiM0MzsJCXFydHJfcG9ydF9wdXQoY3RybCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJcGt0LSZndDtjbWQgPSBjcHVfdG9fbGUzMihRUlRSX1RZUEVfSEVMTE8pOwomIzQzOwlmcm9tLnNxX25vZGUgPSBxcnRyX2xvY2FsX25pZDsKJiM0MzsJdG8uc3Ffbm9kZSA9IG5vZGUtJmd0O25pZDsKJiM0MzsJcXJ0cl9ub2RlX2VucXVldWUobm9kZSwgc2tiLCBRUlRSX1RZUEVfSEVMTE8sICZhbXA7ZnJvbSwgJmFtcDt0byk7CiYjNDM7CXFydHJfcG9ydF9wdXQoY3RybCk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyKCkgLSByZWdpc3RlciBhIG5ldyBlbmRwb2ludAogICogQGVwOiBlbmRwb2ludCB0byByZWdpc3RlcgpAQCAtNTk1LDYgJiM0Mzs2NDUsOSBAQCBpbnQgcXJ0cl9lbmRwb2ludF9yZWdpc3RlcihzdHJ1Y3QgcXJ0cl9lbmRwb2ludCAqZXAsIHVuc2lnbmVkIGludCBuaWQpCiAJbm9kZS0mZ3Q7bmlkID0gUVJUUl9FUF9OSURfQVVUTzsKIAlub2RlLSZndDtlcCA9IGVwOwogCiYjNDM7CW5vZGUtJmd0O2hlbGxvX3NlbnQgPSBmYWxzZTsKJiM0MzsJSU5JVF9XT1JLKCZhbXA7bm9kZS0mZ3Q7c2F5X2hlbGxvLCBxcnRyX2hlbGxvX3dvcmspOwomIzQzOwogCXhhX2luaXQoJmFtcDtub2RlLSZndDtxcnRyX3R4X2Zsb3cpOwogCW11dGV4X2luaXQoJmFtcDtub2RlLSZndDtxcnRyX3R4X2xvY2spOwogCkBAIC02MDUsNiAmIzQzOzY1OCw5IEBAIGludCBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyKHN0cnVjdCBxcnRyX2VuZHBvaW50ICplcCwgdW5zaWduZWQgaW50IG5pZCkKIAltdXRleF91bmxvY2soJmFtcDtxcnRyX25vZGVfbG9jayk7CiAJZXAtJmd0O25vZGUgPSBub2RlOwogCiYjNDM7CS8qIEluaXRpYXRlIEhFTExPIGhhbmRzaGFrZSBmcm9tIHRoZSBjb3JlIGxheWVyICovCiYjNDM7CXNjaGVkdWxlX3dvcmsoJmFtcDtub2RlLSZndDtzYXlfaGVsbG8pOwomIzQzOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocXJ0cl9lbmRwb2ludF9yZWdpc3Rlcik7CkBAIC04NzksNiAmIzQzOzkzNSwxMSBAQCBzdGF0aWMgaW50IHFydHJfYmNhc3RfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCiAJbXV0ZXhfbG9jaygmYW1wO3FydHJfbm9kZV9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsICZhbXA7cXJ0cl9hbGxfbm9kZXMsIGl0ZW0pIHsKJiM0MzsJCS8qIFNraXAgbm9kZXMgd2hvc2Ugbm9kZSBJRCBpcyBub3QgeWV0IGtub3duOyB0aGV5IGNhbm5vdAomIzQzOwkJICogcmVjZWl2ZSBicm9hZGNhc3QgcGFja2V0cyBiZWZvcmUgdGhlIEhFTExPIGhhbmRzaGFrZS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKG5vZGUtJmd0O25pZCA9PSBRUlRSX0VQX05JRF9BVVRPKQomIzQzOwkJCWNvbnRpbnVlOwogCQlza2JuID0gcHNrYl9jb3B5KHNrYiwgR0ZQX0tFUk5FTCk7CiAJCWlmICghc2tibikKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvbmV0L3FydHIvbnMuYyBiL25ldC9xcnRyL25zLmMKaW5kZXggYjNmOWJiY2Y5YWI5Yi4uMTQyNjI2MjNkMmRkNSAxMDA2NDQKLS0tIGEvbmV0L3FydHIvbnMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcXJ0ci9ucy5jCkBAIC0yMTIsNiAmIzQzOzIxMiw3IEBAIHN0YXRpYyB2b2lkIGxvb2t1cF9ub3RpZnkoc3RydWN0IHNvY2thZGRyX3FydHIgKnRvLCBzdHJ1Y3QgcXJ0cl9zZXJ2ZXIgKnNydiwKIAkJcHJfZXJyKCYjMzQ7ZmFpbGVkIHRvIHNlbmQgbG9va3VwIG5vdGlmaWNhdGlvblxuJiMzNDspOwogfQogCiYjNDM7LyogQW5ub3VuY2UgdGhlIGxpc3Qgb2Ygc2VydmVycyByZWdpc3RlcmVkIG9uIHRoZSBsb2NhbCBub2RlICovCiBzdGF0aWMgaW50IGFubm91bmNlX3NlcnZlcnMoc3RydWN0IHNvY2thZGRyX3FydHIgKnNxKQogewogCXN0cnVjdCBxcnRyX3NlcnZlciAqc3J2OwpAQCAtMzQ5LDE1ICYjNDM7MzUwLDggQEAgc3RhdGljIGludCBzYXlfaGVsbG8oc3RydWN0IHNvY2thZGRyX3FydHIgKmRlc3QpCiAJcmV0dXJuIHJldDsKIH0KIAotLyogQW5ub3VuY2UgdGhlIGxpc3Qgb2Ygc2VydmVycyByZWdpc3RlcmVkIG9uIHRoZSBsb2NhbCBub2RlICovCiBzdGF0aWMgaW50IGN0cmxfY21kX2hlbGxvKHN0cnVjdCBzb2NrYWRkcl9xcnRyICpzcSkKIHsKLQlpbnQgcmV0OwotCi0JcmV0ID0gc2F5X2hlbGxvKHNxKTsKLQlpZiAocmV0ICZsdDsgMCkKLQkJcmV0dXJuIHJldDsKLQogCXJldHVybiBhbm5vdW5jZV9zZXJ2ZXJzKHNxKTsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTEwCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFFSVFIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIG1ha2luZyBzb21lIHByZXR0eSBzcGVjaWZpYyBjaGFuZ2VzIHRvIHRoZSBRUlRSIGNvZGUuIFNlZW1zIGxpa2UgdGhleSYjMzk7cmUgYWRkaW5nIGEgYGhlbGxvX3NlbnRgIGZsYWcgYW5kIGEgYHNheV9oZWxsb2Agd29yayBzdHJ1Y3QgdG8gdGhlIGBxcnRyX25vZGVgIHN0cnVjdHVyZSBpbiBgYWZfcXJ0ci5jYC4gSW50ZXJlc3RpbmcuIFRoZSBjb3JlIGxvZ2ljIG9mIGBxcnRyX25vZGVfZW5xdWV1ZWAgaXMgYWxzbyBiZWluZyB0d2Vha2VkLiBJdCYjMzk7cyBub3cgZ29pbmcgdG8gZHJvcCBwYWNrZXRzIGlmIGBoZWxsb19zZW50YCBpcyBmYWxzZSwgKnVubGVzcyogaXQmIzM5O3MgYSBIRUxMTyBwYWNrZXQuIEFuZCwgY3J1Y2lhbGx5LCB0aGV5JiMzOTtyZSBzY2hlZHVsaW5nIGEgSEVMTE8gaGFuZHNoYWtlIGZyb20gdGhlIGNvcmUgbGF5ZXIgbm93IHdoZW4gYW4gZW5kcG9pbnQgcmVnaXN0ZXJzIHVzaW5nIGBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyYC4gVGhhdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHNoaWZ0IGluIHRoZSBoYW5kc2hha2UgcHJvY2Vzcy4KCk5vdywgb3ZlciBpbiBgbnMuY2AsIHRoZXkmIzM5O3ZlIHJlbW92ZWQgdGhlIGBzYXlfaGVsbG9gIGNhbGwgZnJvbSBgY3RybF9jbWRfaGVsbG9gLiBNYWtlcyBzZW5zZSwgdGhlIGNvcmUgaXMgaGFuZGxpbmcgdGhlIGluaXRpYXRpb24gbm93LiBJIHNlZSB3aGF0IHRoZXkmIzM5O3JlIGRvaW5nIHRoZXJlLCBjb25zb2xpZGF0aW5nIHRoZSBIRUxMTyBoYW5kbGluZy4KClRoZSBuZXh0IHF1ZXN0aW9uIGluIG15IG1pbmQsIG5hdHVyYWxseSwgaXMsIGNhbiBJIHJlYWNoIHRoaXMgaW4gbXkgdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudD8gUVJUUiBpcyBRdWFsY29tbSYjMzk7cyBJUEMgUm91dGVyIHByb3RvY29sLCByaWdodD8gU28sIGNhbiBJIGZ1enogdGhpcyBpbiBRRU1VPyBJJiMzOTttIHdvbmRlcmluZyBpZiBJIGNhbiBnZXQgQUZfUUlQQ1JUUiBzb2NrZXRzIGNyZWF0ZWQsIHJlZ2lzdGVyIGVuZHBvaW50cywgbWF5YmUgdmlhIHR1bi90YXAgb3Igc29tZSBvdGhlciBtZWNoYW5pc20uIEhvdyAqYXJlKiBRUlRSIGVuZHBvaW50cyByZWdpc3RlcmVkLCBhY3R1YWxseT8gSSBuZWVkIHRvIGNoZWNrIGhvdyBJIHdvdWxkIGdldCB0aGUgY29kZSBwYXRoIHRvIHdvcmsuIEkgc2hvdWxkIHByb2JhYmx5IGp1c3Qgc2VhcmNoIGZvciBgcXJ0cl9lbmRwb2ludF9yZWdpc3RlcmAgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cXJ0cl9lbmRwb2ludF9yZWdpc3RlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcXJ0ci9hZl9xcnRyLmM9NTk0PXN0YXRpYyB2b2lkIHFydHJfaGVsbG9fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L3FydHIvYWZfcXJ0ci5jLTYyMy0vKipcbm5ldC9xcnRyL2FmX3FydHIuYzo2MjQ6ICogcXJ0cl9lbmRwb2ludF9yZWdpc3RlcigpIC0gcmVnaXN0ZXIgYSBuZXcgZW5kcG9pbnRcbm5ldC9xcnRyL2FmX3FydHIuYy02MjUtICogQGVwOiBlbmRwb2ludCB0byByZWdpc3RlclxuLS1cbm5ldC9xcnRyL2FmX3FydHIuYy02MzAtICovXG5uZXQvcXJ0ci9hZl9xcnRyLmM6NjMxOmludCBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyKHN0cnVjdCBxcnRyX2VuZHBvaW50ICplcCwgdW5zaWduZWQgaW50IG5pZClcbm5ldC9xcnRyL2FmX3FydHIuYy02MzIte1xuLS1cbm5ldC9xcnRyL2FmX3FydHIuYy02NjUtfVxubmV0L3FydHIvYWZfcXJ0ci5jOjY2NjpFWFBPUlRfU1lNQk9MX0dQTChxcnRyX2VuZHBvaW50X3JlZ2lzdGVyKTtcbm5ldC9xcnRyL2FmX3FydHIuYy02NjctXG4tLVxubmV0L3FydHIvbWhpLmM9MTEwPXN0YXRpYyBpbnQgcWNvbV9taGlfcXJ0cl9wcm9iZShzdHJ1Y3QgbWhpX2RldmljZSAqbWhpX2Rldixcbi0tXG5uZXQvcXJ0ci9taGkuYy0xMzAtXG5uZXQvcXJ0ci9taGkuYzoxMzE6XHRyYyA9IHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIoXHUwMDI2cWRldi1cdTAwM2VlcCwgUVJUUl9FUF9OSURfQVVUTyk7XG5uZXQvcXJ0ci9taGkuYy0xMzItXHRpZiAocmMpXG4tLVxubmV0L3FydHIvcXJ0ci5oPTIwPXN0cnVjdCBxcnRyX2VuZHBvaW50IHtcbi0tXG5uZXQvcXJ0ci9xcnRyLmgtMjUtXG5uZXQvcXJ0ci9xcnRyLmg6MjY6aW50IHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIoc3RydWN0IHFydHJfZW5kcG9pbnQgKmVwLCB1bnNpZ25lZCBpbnQgbmlkKTtcbm5ldC9xcnRyL3FydHIuaC0yNy1cbi0tXG5uZXQvcXJ0ci9zbWQuYz01OT1zdGF0aWMgaW50IHFjb21fc21kX3FydHJfcHJvYmUoc3RydWN0IHJwbXNnX2RldmljZSAqcnBkZXYpXG4tLVxubmV0L3FydHIvc21kLmMtNzEtXG5uZXQvcXJ0ci9zbWQuYzo3MjpcdHJjID0gcXJ0cl9lbmRwb2ludF9yZWdpc3RlcihcdTAwMjZxZGV2LVx1MDAzZWVwLCBRUlRSX0VQX05JRF9BVVRPKTtcbm5ldC9xcnRyL3NtZC5jLTczLVx0aWYgKHJjKVxuLS1cbm5ldC9xcnRyL3R1bi5jPTMxPXN0YXRpYyBpbnQgcXJ0cl90dW5fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscClcbi0tXG5uZXQvcXJ0ci90dW4uYy00Ni1cbm5ldC9xcnRyL3R1bi5jOjQ3Olx0cmV0ID0gcXJ0cl9lbmRwb2ludF9yZWdpc3RlcihcdTAwMjZ0dW4tXHUwMDNlZXAsIFFSVFJfRVBfTklEX0FVVE8pO1xubmV0L3FydHIvdHVuLmMtNDgtXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxOTMKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBRUlRSIFR1bm5lbGluZyBDYXBhYmlsaXRpZXMqKgoKUmlnaHQsIHNvIGBuZXQvcXJ0ci90dW4uY2AuLi4gdGhhdCYjMzk7cyB0aGUgZmlsZSBJIHdhcyBob3BpbmcgdG8gZmluZCEgQSB0dW4gZGV2aWNlLCBzcGVjaWZpY2FsbHksIGlzIGhvdyBRUlRSIGVuZHBvaW50cyBhcmUgcmVnaXN0ZXJlZC4gVGhhdCYjMzk7cyBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlLiBOb3cgSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdGhlIHN5c3RlbSBvcGVyYXRlcywgc28gbXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBUaW1lIHRvIGRpZyBpbnRvIGBuZXQvcXJ0ci90dW4uY2AgYW5kIHNlZSBleGFjdGx5IGhvdyB0aGV5JiMzOTt2ZSBpbXBsZW1lbnRlZCB0aGlzIHR1bm5lbGluZyBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBvZiB0aGlzIGFwcHJvYWNoIHRvIHNlZSBpZiBpdCBmaXRzIHRoZSBpbnRlbmRlZCB1c2UgY2FzZSwgYW5kIHRvIHByZXBhcmUgZm9yIGFueSBwb3RlbnRpYWwgcHJvYmxlbXMgSSBjYW4gZm9yZXNlZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtxcnRyX3R1biYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcXJ0ci90dW4uYy0xMS1cbm5ldC9xcnRyL3R1bi5jOjEyOnN0cnVjdCBxcnRyX3R1biB7XG5uZXQvcXJ0ci90dW4uYy0xMy1cdHN0cnVjdCBxcnRyX2VuZHBvaW50IGVwO1xuLS1cbm5ldC9xcnRyL3R1bi5jLTE4LVxubmV0L3FydHIvdHVuLmM6MTk6c3RhdGljIGludCBxcnRyX3R1bl9zZW5kKHN0cnVjdCBxcnRyX2VuZHBvaW50ICplcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9xcnRyL3R1bi5jLTIwLXtcbm5ldC9xcnRyL3R1bi5jOjIxOlx0c3RydWN0IHFydHJfdHVuICp0dW4gPSBjb250YWluZXJfb2YoZXAsIHN0cnVjdCBxcnRyX3R1biwgZXApO1xubmV0L3FydHIvdHVuLmMtMjItXG4tLVxubmV0L3FydHIvdHVuLmMtMzAtXG5uZXQvcXJ0ci90dW4uYzozMTpzdGF0aWMgaW50IHFydHJfdHVuX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXG5uZXQvcXJ0ci90dW4uYy0zMi17XG5uZXQvcXJ0ci90dW4uYzozMzpcdHN0cnVjdCBxcnRyX3R1biAqdHVuO1xubmV0L3FydHIvdHVuLmMtMzQtXHRpbnQgcmV0O1xuLS1cbm5ldC9xcnRyL3R1bi5jLTQyLVxubmV0L3FydHIvdHVuLmM6NDM6XHR0dW4tXHUwMDNlZXAueG1pdCA9IHFydHJfdHVuX3NlbmQ7XG5uZXQvcXJ0ci90dW4uYy00NC1cbi0tXG5uZXQvcXJ0ci90dW4uYy01OC1cbm5ldC9xcnRyL3R1bi5jOjU5OnN0YXRpYyBzc2l6ZV90IHFydHJfdHVuX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXG5uZXQvcXJ0ci90dW4uYy02MC17XG5uZXQvcXJ0ci90dW4uYy02MS1cdHN0cnVjdCBmaWxlICpmaWxwID0gaW9jYi1cdTAwM2VraV9maWxwO1xubmV0L3FydHIvdHVuLmM6NjI6XHRzdHJ1Y3QgcXJ0cl90dW4gKnR1biA9IGZpbHAtXHUwMDNlcHJpdmF0ZV9kYXRhO1xubmV0L3FydHIvdHVuLmMtNjMtXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuLS1cbm5ldC9xcnRyL3R1bi5jLTg0LVxubmV0L3FydHIvdHVuLmM6ODU6c3RhdGljIHNzaXplX3QgcXJ0cl90dW5fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbm5ldC9xcnRyL3R1bi5jLTg2LXtcbm5ldC9xcnRyL3R1bi5jLTg3LVx0c3RydWN0IGZpbGUgKmZpbHAgPSBpb2NiLVx1MDAzZWtpX2ZpbHA7XG5uZXQvcXJ0ci90dW4uYzo4ODpcdHN0cnVjdCBxcnRyX3R1biAqdHVuID0gZmlscC1cdTAwM2Vwcml2YXRlX2RhdGE7XG5uZXQvcXJ0ci90dW4uYy04OS1cdHNpemVfdCBsZW4gPSBpb3ZfaXRlcl9jb3VudChmcm9tKTtcbi0tXG5uZXQvcXJ0ci90dW4uYy0xMTMtXG5uZXQvcXJ0ci90dW4uYzoxMTQ6c3RhdGljIF9fcG9sbF90IHFydHJfdHVuX3BvbGwoc3RydWN0IGZpbGUgKmZpbHAsIHBvbGxfdGFibGUgKndhaXQpXG5uZXQvcXJ0ci90dW4uYy0xMTUte1xubmV0L3FydHIvdHVuLmM6MTE2Olx0c3RydWN0IHFydHJfdHVuICp0dW4gPSBmaWxwLVx1MDAzZXByaXZhdGVfZGF0YTtcbm5ldC9xcnRyL3R1bi5jLTExNy1cdF9fcG9sbF90IG1hc2sgPSAwO1xuLS1cbm5ldC9xcnRyL3R1bi5jLTEyNi1cbm5ldC9xcnRyL3R1bi5jOjEyNzpzdGF0aWMgaW50IHFydHJfdHVuX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXG5uZXQvcXJ0ci90dW4uYy0xMjgte1xubmV0L3FydHIvdHVuLmM6MTI5Olx0c3RydWN0IHFydHJfdHVuICp0dW4gPSBmaWxwLVx1MDAzZXByaXZhdGVfZGF0YTtcbm5ldC9xcnRyL3R1bi5jLTEzMC1cbi0tXG5uZXQvcXJ0ci90dW4uYy0xNDAtXG5uZXQvcXJ0ci90dW4uYzoxNDE6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcXJ0cl90dW5fb3BzID0ge1xubmV0L3FydHIvdHVuLmMtMTQyLVx0Lm93bmVyID0gVEhJU19NT0RVTEUsXG5uZXQvcXJ0ci90dW4uYzoxNDM6XHQub3BlbiA9IHFydHJfdHVuX29wZW4sXG5uZXQvcXJ0ci90dW4uYzoxNDQ6XHQucG9sbCA9IHFydHJfdHVuX3BvbGwsXG5uZXQvcXJ0ci90dW4uYzoxNDU6XHQucmVhZF9pdGVyID0gcXJ0cl90dW5fcmVhZF9pdGVyLFxubmV0L3FydHIvdHVuLmM6MTQ2Olx0LndyaXRlX2l0ZXIgPSBxcnRyX3R1bl93cml0ZV9pdGVyLFxubmV0L3FydHIvdHVuLmM6MTQ3Olx0LnJlbGVhc2UgPSBxcnRyX3R1bl9yZWxlYXNlLFxubmV0L3FydHIvdHVuLmMtMTQ4LX07XG5uZXQvcXJ0ci90dW4uYy0xNDktXG5uZXQvcXJ0ci90dW4uYzoxNTA6c3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIHFydHJfdHVuX21pc2NkZXYgPSB7XG5uZXQvcXJ0ci90dW4uYy0xNTEtXHRNSVNDX0RZTkFNSUNfTUlOT1IsXG5uZXQvcXJ0ci90dW4uYy0xNTItXHRcJiMzNDtxcnRyLXR1blwmIzM0Oyxcbm5ldC9xcnRyL3R1bi5jOjE1MzpcdFx1MDAyNnFydHJfdHVuX29wcyxcbm5ldC9xcnRyL3R1bi5jLTE1NC19O1xubmV0L3FydHIvdHVuLmMtMTU1LVxubmV0L3FydHIvdHVuLmM6MTU2OnN0YXRpYyBpbnQgX19pbml0IHFydHJfdHVuX2luaXQodm9pZClcbm5ldC9xcnRyL3R1bi5jLTE1Ny17XG4tLVxubmV0L3FydHIvdHVuLmMtMTU5LVxubmV0L3FydHIvdHVuLmM6MTYwOlx0cmV0ID0gbWlzY19yZWdpc3RlcihcdTAwMjZxcnRyX3R1bl9taXNjZGV2KTtcbm5ldC9xcnRyL3R1bi5jLTE2MS1cdGlmIChyZXQpXG4tLVxubmV0L3FydHIvdHVuLmMtMTY2LVxubmV0L3FydHIvdHVuLmM6MTY3OnN0YXRpYyB2b2lkIF9fZXhpdCBxcnRyX3R1bl9leGl0KHZvaWQpXG5uZXQvcXJ0ci90dW4uYy0xNjgte1xubmV0L3FydHIvdHVuLmM6MTY5Olx0bWlzY19kZXJlZ2lzdGVyKFx1MDAyNnFydHJfdHVuX21pc2NkZXYpO1xubmV0L3FydHIvdHVuLmMtMTcwLX1cbm5ldC9xcnRyL3R1bi5jLTE3MS1cbm5ldC9xcnRyL3R1bi5jOjE3Mjptb2R1bGVfaW5pdChxcnRyX3R1bl9pbml0KTtcbm5ldC9xcnRyL3R1bi5jOjE3Mzptb2R1bGVfZXhpdChxcnRyX3R1bl9leGl0KTtcbm5ldC9xcnRyL3R1bi5jLTE3NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTEzCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMTYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgUVJUUiBmb3IgVnVsbmVyYWJpbGl0aWVzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIGAvZGV2L3FydHItdHVuYCBkZXZpY2UsIHdoaWNoIGlzIGludHJpZ3VpbmcuIEkgY2FuIG9wZW4gaXQsIHdyaXRlIHRvIGl0LCBhbmQgdGhhdCBhcHBhcmVudGx5IGxldHMgbWUgcmVnaXN0ZXIgYSBRUlRSIGVuZHBvaW50IGFuZCBpbmplY3QgcGFja2V0cy4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGNvZGUgaXMgbGl2ZSwgcmVhY2hhYmxlLCBhbmQgKmZ1enphYmxlKi4gTXkgbWluZCBpcyBhbHJlYWR5IHJhY2luZyB3aXRoIHBvdGVudGlhbCBhdHRhY2sgdmVjdG9ycy4KClRoZSBwYXRjaCBJJiMzOTttIGxvb2tpbmcgYXQgbW9kaWZpZXMgYHFydHJfbm9kZV9lbnF1ZXVlYCwgYHFydHJfZW5kcG9pbnRfcmVnaXN0ZXJgLCBhbmQgYHFydHJfYmNhc3RfZW5xdWV1ZWAg4oCTIGludGVyZXN0aW5nIGNob2ljZXMuIFRob3NlIGZ1bmN0aW9ucyBhcmUgZ29pbmcgdG8gYmUga2V5LCBhbmQgSeKAmW0gbWFraW5nIGEgbWVudGFsIG5vdGUgdG8gc3BlbmQgYSBzaWduaWZpY2FudCBhbW91bnQgb2YgdGltZSBmdXp6aW5nIHRoZW0uIEkmIzM5O2xsIG5lZWQgdG8gc2NydXRpbml6ZSB0aG9zZSwgYnV0IGl0IG1ha2VzIHNlbnNlIHRvIGluY2x1ZGUgYSBmZXcgb3RoZXJzOiBgcXJ0cl9oZWxsb193b3JrYCBmZWVscyByZWxldmFudCwgc2luY2UgaXQmIzM5O3MgaW52b2x2ZWQgaW4gdGhlIHNldHVwL3JlZ2lzdHJhdGlvbiBwcm9jZXNzLCBhbmQsIGNydWNpYWxseSwgYHFydHJfdHVuX3dyaXRlX2l0ZXJgLCBzaW5jZSB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O20gaW5qZWN0aW5nIHRoZSBwYWNrZXRzLgoKRmlyc3QgSSYjMzk7bGwgZ28gY2hlY2sgdGhlIEtjb25maWcgc2V0dGluZ3MgZm9yIFFSVFIgYW5kIFFSVFJfVFVOLiBHb3R0YSBtYWtlIHN1cmUgdGhvc2Ugc2V0dGluZ3MgYXJlIHdoYXQgSSBleHBlY3QgdGhlbSB0byBiZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUVJUUiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcXJ0ci9LY29uZmlnLTQtXG5uZXQvcXJ0ci9LY29uZmlnOjU6Y29uZmlnIFFSVFJcbm5ldC9xcnRyL0tjb25maWctNi1cdHRyaXN0YXRlIFwmIzM0O1F1YWxjb21tIElQQyBSb3V0ZXIgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9xcnRyL0tjb25maWc9MTU9aWYgUVJUUlxubmV0L3FydHIvS2NvbmZpZy0xNi1cbm5ldC9xcnRyL0tjb25maWc6MTc6Y29uZmlnIFFSVFJfU01EXG5uZXQvcXJ0ci9LY29uZmlnLTE4LVx0dHJpc3RhdGUgXCYjMzQ7U01EIElQQyBSb3V0ZXIgY2hhbm5lbHNcJiMzNDtcbi0tXG5uZXQvcXJ0ci9LY29uZmlnLTIzLVxubmV0L3FydHIvS2NvbmZpZzoyNDpjb25maWcgUVJUUl9UVU5cbm5ldC9xcnRyL0tjb25maWctMjUtXHR0cmlzdGF0ZSBcJiMzNDtUVU4gZGV2aWNlIGZvciBRdWFsY29tbSBJUEMgUm91dGVyXCYjMzQ7XG4tLVxubmV0L3FydHIvS2NvbmZpZy0zMC1cbm5ldC9xcnRyL0tjb25maWc6MzE6Y29uZmlnIFFSVFJfTUhJXG5uZXQvcXJ0ci9LY29uZmlnLTMyLVx0dHJpc3RhdGUgXCYjMzQ7TUhJIElQQyBSb3V0ZXIgY2hhbm5lbHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTgwCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBpbml0aWFsIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbml0aWFsIFFSVFIgQ29uZmlndXJhdGlvbiBhbmQgUGFja2V0IEhhbmRsaW5nIFJldmlldyoqCgpBbHJpZ2h0LCByaWdodCBvZmYgdGhlIGJhdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgUVJUUmAgYW5kIGBRUlRSX1RVTmAgYXJlIGVuYWJsZWQuIFRoYXQmIzM5O3MgZnVuZGFtZW50YWwsIHRoZSBmb3VuZGF0aW9uIHVwb24gd2hpY2ggZXZlcnl0aGluZyBlbHNlIHNpdHMuIFdpdGhvdXQgdGhvc2UsIHdlJiMzOTtyZSBkZWFkIGluIHRoZSB3YXRlciwgc28gaXQmIzM5O3MgdGhlIGZpcnN0IHRoaW5nIEkmIzM5O2QgY2hlY2sgaWYgc29tZXRoaW5nJiMzOTtzIG5vdCB3b3JraW5nIGFzIGV4cGVjdGVkLgoKTm93LCB3aGVyZSBkb2VzIHRoZSByZWFsIHdvcmsgaGFwcGVuLCB0aGUgbWVhdCBhbmQgcG90YXRvZXMgb2YgdGhlIHBhY2tldCBmbG93PyBUaGUgbmV4dCBzdGVwIGlzIGFsd2F5cyB0byBkcmlsbCBpbnRvIHRoZSBjb3JlIGZ1bmN0aW9ucyByZXNwb25zaWJsZSBmb3IgcXVldWluZyBwYWNrZXRzLiBTbywgbXkgbWluZCBpbW1lZGlhdGVseSBnb2VzIHRvIGBxcnRyX25vZGVfZW5xdWV1ZWAgYW5kIGBxcnRyX2JjYXN0X2VucXVldWVgLiBUaG9zZSBhcmUgdGhlIHByaW1lIHN1c3BlY3RzLCByaWdodD8gVGhvc2UgYXJlIHRoZSBmdW5jdGlvbnMgSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIGRlZXBseSBhbmFseXplLCBzcGVjaWZpY2FsbHkgaW4gYG5ldC9xcnRyL2FmX3FydHIuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHBhY2tldHMgYXJlIGJlaW5nIGFkZGVkIHRvIHRoZSBxdWV1ZXMsIGhvdyB0aGV5JiMzOTtyZSBiZWluZyBoYW5kbGVkIGZvciBib3RoIHVuaWNhc3QgYW5kIGJyb2FkY2FzdCBzY2VuYXJpb3MuIEFueSBzdWJ0bGUgZGV0YWlsIHRoZXJlIGNvdWxkIGV4cG9zZSBhIGNyaXRpY2FsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2sgb3IgZXZlbiBhIHN1YnRsZSBidWcuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3FydHJfbm9kZV9lbnF1ZXVlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9xcnRyL2FmX3FydHIuYz0zMjk9c3RhdGljIHZvaWQgcXJ0cl90eF9mbG93X2ZhaWxlZChzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBpbnQgZGVzdF9ub2RlLFxuLS1cbm5ldC9xcnRyL2FmX3FydHIuYy0zNDMtLyogUGFzcyBhbiBvdXRnb2luZyBwYWNrZXQgc29ja2V0IGJ1ZmZlciB0byB0aGUgZW5kcG9pbnQgZHJpdmVyLiAqL1xubmV0L3FydHIvYWZfcXJ0ci5jOjM0NDpzdGF0aWMgaW50IHFydHJfbm9kZV9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvcXJ0ci9hZl9xcnRyLmMtMzQ1LVx0XHRcdCAgICAgaW50IHR5cGUsIHN0cnVjdCBzb2NrYWRkcl9xcnRyICpmcm9tLFxuLS1cbm5ldC9xcnRyL2FmX3FydHIuYz01OTQ9c3RhdGljIHZvaWQgcXJ0cl9oZWxsb193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjE4LVx0dG8uc3Ffbm9kZSA9IG5vZGUtXHUwMDNlbmlkO1xubmV0L3FydHIvYWZfcXJ0ci5jOjYxOTpcdHFydHJfbm9kZV9lbnF1ZXVlKG5vZGUsIHNrYiwgUVJUUl9UWVBFX0hFTExPLCBcdTAwMjZmcm9tLCBcdTAwMjZ0byk7XG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjIwLVx0cXJ0cl9wb3J0X3B1dChjdHJsKTtcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmM9OTMwPXN0YXRpYyBpbnQgcXJ0cl9iY2FzdF9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3FydHIvYWZfcXJ0ci5jLTk0Ni1cdFx0c2tiX3NldF9vd25lcl93KHNrYm4sIHNrYi1cdTAwM2Vzayk7XG5uZXQvcXJ0ci9hZl9xcnRyLmM6OTQ3Olx0XHRxcnRyX25vZGVfZW5xdWV1ZShub2RlLCBza2JuLCB0eXBlLCBmcm9tLCB0byk7XG5uZXQvcXJ0ci9hZl9xcnRyLmMtOTQ4LVx0fVxuLS1cbm5ldC9xcnRyL2FmX3FydHIuYz05NTY9c3RhdGljIGludCBxcnRyX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxuLS1cbm5ldC9xcnRyL2FmX3FydHIuYy0xMDE2LVx0XHR9XG5uZXQvcXJ0ci9hZl9xcnRyLmM6MTAxNzpcdFx0ZW5xdWV1ZV9mbiA9IHFydHJfbm9kZV9lbnF1ZXVlO1xubmV0L3FydHIvYWZfcXJ0ci5jLTEwMTgtXHR9XG4tLVxubmV0L3FydHIvYWZfcXJ0ci5jPTEwNTk9c3RhdGljIGludCBxcnRyX3NlbmRfcmVzdW1lX3R4KHN0cnVjdCBxcnRyX2NiICpjYilcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmMtMTA4MS1cbm5ldC9xcnRyL2FmX3FydHIuYzoxMDgyOlx0cmV0ID0gcXJ0cl9ub2RlX2VucXVldWUobm9kZSwgc2tiLCBRUlRSX1RZUEVfUkVTVU1FX1RYLCBcdTAwMjZsb2NhbCwgXHUwMDI2cmVtb3RlKTtcbm5ldC9xcnRyL2FmX3FydHIuYy0xMDgzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTc5CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBRUlRSIEFQSSBGdW5jdGlvbiBBdHRyaWJ1dGVzKioKCk9rYXksIHNvIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCB0aGlzIFFSVFIgY29kZSBhbmQgdGhlIHByb21wdCBzcGVjaWZpY2FsbHkgd2FudHMgbWUgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBJIHNlZSBgcXJ0cl9ub2RlX2VucXVldWVgIGFuZCBgcXJ0cl9iY2FzdF9lbnF1ZXVlYCBhcmUgbWFya2VkIGFzIHN0YXRpYywgd2hpbGUgYHFydHJfZW5kcG9pbnRfcmVnaXN0ZXJgIGlzIGV4cG9ydGVkLiBgcXJ0cl9oZWxsb193b3JrYCBpcyBhbHNvIHN0YXRpYy4KCkJhc2VkIG9uIHRoZSBwcm9tcHQsIEkgbmVlZCB0byBmb2N1cyBvbiB0aGUgc3RhdGljIG9uZXMuIE5vdywgYHFydHJfbm9kZV9lbnF1ZXVlYCBsb29rcyBwcmV0dHkgc2l6YWJsZSwgc28gaXQmIzM5O3MgKmxpa2VseSogbm90IGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLCBidXQgaXQmIzM5O3MgYWx3YXlzIGJlc3QgdG8gYmUgc3VyZS4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCwgYnV0IEkmIzM5O2xsIGFkZCBgcXJ0cl9lbmRwb2ludF9yZWdpc3RlcmAsIGBxcnRyX3R1bl93cml0ZV9pdGVyYCBhbmQgYHFydHJfc2VuZG1zZ2AgdG8gbXkgbGlzdCBvZiBmdW5jdGlvbnMgdG8gY2hlY2suIEkgc2hvdWxkIHZlcmlmeSB0aGF0LiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBpZiB0aG9zZSBvdGhlciBsaXN0ZWQgZnVuY3Rpb25zIGFyZSBzdGF0aWMsIGJ1dCBhbHNvIGNvbmZpcm0gdGhlIGlubGluaW5nIHN0YXR1cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cXJ0cl9zZW5kbXNnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9xcnRyL2FmX3FydHIuYz05MzA9c3RhdGljIGludCBxcnRyX2JjYXN0X2VucXVldWUoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmMtOTU1LVxubmV0L3FydHIvYWZfcXJ0ci5jOjk1NjpzdGF0aWMgaW50IHFydHJfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG5uZXQvcXJ0ci9hZl9xcnRyLmMtOTU3LXtcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmM9MTI5Mz1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBxcnRyX3Byb3RvX29wcyA9IHtcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmMtMTMwMC1cdC5saXN0ZW5cdFx0PSBzb2NrX25vX2xpc3Rlbixcbm5ldC9xcnRyL2FmX3FydHIuYzoxMzAxOlx0LnNlbmRtc2dcdD0gcXJ0cl9zZW5kbXNnLFxubmV0L3FydHIvYWZfcXJ0ci5jLTEzMDItXHQucmVjdm1zZ1x0PSBxcnRyX3JlY3Ztc2csXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyNjAKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgYXZhaWxhYmxlIGVudHJ5IHBvaW50cy4KCioqRW50cnkgUG9pbnQgQXNzZXNzbWVudCBmb3IgUVJUUiBFeHBsb3JhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRvIGludGVyYWN0IHdpdGggdGhlIFFSVFIgc3Vic3lzdGVtLCBhbmQgZnJvbSB3aGF0IEkmIzM5O3ZlIHNlZW4sIGBxcnRyX3NlbmRtc2dgIHNlZW1zIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3Igc2VuZGluZyBtZXNzYWdlcy4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBmdW5jdGlvbiwgYW5kIEkmIzM5O2QgZXhwZWN0IGl0IHRvIGhhbmRsZSB0aGUgY29yZSBtZXNzYWdpbmcgZmxvdy4KCmBxcnRyX3R1bl93cml0ZV9pdGVyYCBpcyBhbm90aGVyIGludHJpZ3Vpbmcgb3B0aW9uLiBHaXZlbiBpdHMgbmFtZSwgSSYjMzk7bSBndWVzc2luZyB0aGlzIHJlbGF0ZXMgdG8gdGhlIFRVTiBpbnRlcmZhY2UsIHNvIGxpa2VseSwgaXQmIzM5O3MgdXNlZCB3aGVuIGRhdGEgaXMgYmVpbmcgd3JpdHRlbiB0byBvciBmcm9tIHRoZSBRUlRSICYjMzQ7dHVubmVsJiMzNDsuIFRoaXMgY291bGQgYmUgaGVscGZ1bCBpbiB1bmRlcnN0YW5kaW5nIGhvdyByYXcgZGF0YSBpcyBoYW5kbGVkLgoKRmluYWxseSwgYHFydHJfZW5kcG9pbnRfcmVnaXN0ZXJgIGFsc28gY2F1Z2h0IG15IGV5ZS4gVGhhdCBzZWVtcyBrZXkgZm9yIGVzdGFibGlzaGluZyBhbmQgbWFuYWdpbmcgZW5kcG9pbnRzIHdpdGhpbiB0aGUgUVJUUiBzeXN0ZW0sIHdoaWNoIGlzIGVzc2VudGlhbCB0byBhbnkgc29ydCBvZiBjb21tdW5pY2F0aW9uLgoKVG8gc3RhcnQsIEkmIzM5O2xsIGZvY3VzIG9uIGBxcnRyX3R1bl93cml0ZV9pdGVyYCwgc2luY2UgSSYjMzk7bSBpbnRlcmVzdGVkIGluIGhvdyBRUlRSIGRhdGEgaW50ZWdyYXRlcyBpbnRvIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBJJiMzOTtsbCBoZWFkIG92ZXIgdG8gYG5ldC9xcnRyL3R1bi5jYCBhbmQgZGlnIGludG8gdGhhdC4gSG9wZWZ1bGx5LCB0aGF0IHdpbGwgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGhvdyB0aGUgdHVubmVsIGludGVyZmFjZSB3b3Jrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cXJ0cl90dW5fd3JpdGVfaXRlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcXJ0ci90dW4uYz01OT1zdGF0aWMgc3NpemVfdCBxcnRyX3R1bl9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxuLS1cbm5ldC9xcnRyL3R1bi5jLTg0LVxubmV0L3FydHIvdHVuLmM6ODU6c3RhdGljIHNzaXplX3QgcXJ0cl90dW5fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbm5ldC9xcnRyL3R1bi5jLTg2LXtcbi0tXG5uZXQvcXJ0ci90dW4uYz0xNDE9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcXJ0cl90dW5fb3BzID0ge1xuLS1cbm5ldC9xcnRyL3R1bi5jLTE0NS1cdC5yZWFkX2l0ZXIgPSBxcnRyX3R1bl9yZWFkX2l0ZXIsXG5uZXQvcXJ0ci90dW4uYzoxNDY6XHQud3JpdGVfaXRlciA9IHFydHJfdHVuX3dyaXRlX2l0ZXIsXG5uZXQvcXJ0ci90dW4uYy0xNDctXHQucmVsZWFzZSA9IHFydHJfdHVuX3JlbGVhc2UsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4NTQKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqRGl2aW5nIGludG8gdGhlIFFSVFIgRW5kcG9pbnQgUG9zdCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIGRlZXAgZGl2ZSBpbnRvIGBxcnRyX2VuZHBvaW50X3Bvc3RgIHdpdGhpbiBgbmV0L3FydHIvYWZfcXJ0ci5jYC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgdGhlIGNydXggb2YgaG93IGRhdGEgZ2V0cyBwdXNoZWQgb250byBhIFFSVFIgZW5kcG9pbnQsIHdoaWNoIGlzIGEga2V5IHBhcnQgb2YgaG93IHRoaXMgd2hvbGUgc3lzdGVtIGZ1bmN0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGlzIGlzIGdvaW5nIHRvIGJlIGNlbnRyYWwgdG8gZmlndXJpbmcgb3V0IHdoYXRldmVyIGlzc3VlIEkmIzM5O20gbG9va2luZyBhdC4gSSYjMzk7bGwgYmUgbG9va2luZyBhdCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IG1hbmlwdWxhdGVzLCBhbnkgbG9ja2luZyBpdCB1c2VzLCBob3cgaXQgaGFuZGxlcyBlcnJvcnMsIGFuZCB0aGUgZGlmZmVyZW50IHBhdGhzIHRoZSBjb2RlIGNhbiB0YWtlIGJhc2VkIG9uIHZhcmlvdXMgY29uZGl0aW9ucy4gSSB3YW50IHRvIHNlZSBob3cgdGhlIG1lc3NhZ2VzIGFyZSBxdWV1ZWQgb3IgdHJhbnNtaXR0ZWQgYW5kIHdoZXJlIHRoZSBhY3R1YWwgZGF0YSB0cmFuc2ZlciB0byB0aGUgZGVzdGluYXRpb24gaGFwcGVucy4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBpcyB3aGVyZSBhbnkgc3VidGxlIHBlcmZvcm1hbmNlIGlzc3VlcyBvciBwb3RlbnRpYWwgZGVhZGxvY2sgc2NlbmFyaW9zIG1pZ2h0IHJldmVhbCB0aGVtc2VsdmVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cXJ0cl9lbmRwb2ludF9wb3N0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9xcnRyL2FmX3FydHIuYz00MzA9c3RhdGljIHZvaWQgcXJ0cl9ub2RlX2Fzc2lnbihzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCB1bnNpZ25lZCBpbnQgbmlkKVxuLS1cbm5ldC9xcnRyL2FmX3FydHIuYy00NDQtLyoqXG5uZXQvcXJ0ci9hZl9xcnRyLmM6NDQ1OiAqIHFydHJfZW5kcG9pbnRfcG9zdCgpIC0gcG9zdCBpbmNvbWluZyBkYXRhXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNDQ2LSAqIEBlcDogZW5kcG9pbnQgaGFuZGxlXG4tLVxubmV0L3FydHIvYWZfcXJ0ci5jLTQ1MS0gKi9cbm5ldC9xcnRyL2FmX3FydHIuYzo0NTI6aW50IHFydHJfZW5kcG9pbnRfcG9zdChzdHJ1Y3QgcXJ0cl9lbmRwb2ludCAqZXAsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNDUzLXtcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNTY1LX1cbm5ldC9xcnRyL2FmX3FydHIuYzo1NjY6RVhQT1JUX1NZTUJPTF9HUEwocXJ0cl9lbmRwb2ludF9wb3N0KTtcbm5ldC9xcnRyL2FmX3FydHIuYy01NjctXG4tLVxubmV0L3FydHIvbWhpLmM9MjE9c3RhdGljIHZvaWQgcWNvbV9taGlfcXJ0cl9kbF9jYWxsYmFjayhzdHJ1Y3QgbWhpX2RldmljZSAqbWhpX2Rldixcbi0tXG5uZXQvcXJ0ci9taGkuYy0zNS1cbm5ldC9xcnRyL21oaS5jOjM2Olx0cmMgPSBxcnRyX2VuZHBvaW50X3Bvc3QoXHUwMDI2cWRldi1cdTAwM2VlcCwgbWhpX3Jlcy1cdTAwM2VidWZfYWRkcixcbm5ldC9xcnRyL21oaS5jLTM3LVx0XHRcdFx0bWhpX3Jlcy1cdTAwM2VieXRlc194ZmVyZCk7XG4tLVxubmV0L3FydHIvcXJ0ci5oPTI4PXZvaWQgcXJ0cl9lbmRwb2ludF91bnJlZ2lzdGVyKHN0cnVjdCBxcnRyX2VuZHBvaW50ICplcCk7XG5uZXQvcXJ0ci9xcnRyLmgtMjktXG5uZXQvcXJ0ci9xcnRyLmg6MzA6aW50IHFydHJfZW5kcG9pbnRfcG9zdChzdHJ1Y3QgcXJ0cl9lbmRwb2ludCAqZXAsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pO1xubmV0L3FydHIvcXJ0ci5oLTMxLVxuLS1cbm5ldC9xcnRyL3NtZC5jPTIwPXN0YXRpYyBpbnQgcWNvbV9zbWRfcXJ0cl9jYWxsYmFjayhzdHJ1Y3QgcnBtc2dfZGV2aWNlICpycGRldixcbi0tXG5uZXQvcXJ0ci9zbWQuYy0yOC1cbm5ldC9xcnRyL3NtZC5jOjI5Olx0cmMgPSBxcnRyX2VuZHBvaW50X3Bvc3QoXHUwMDI2cWRldi1cdTAwM2VlcCwgZGF0YSwgbGVuKTtcbm5ldC9xcnRyL3NtZC5jLTMwLVx0aWYgKHJjID09IC1FSU5WQUwpIHtcbi0tXG5uZXQvcXJ0ci90dW4uYz04NT1zdGF0aWMgc3NpemVfdCBxcnRyX3R1bl93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuLS1cbm5ldC9xcnRyL3R1bi5jLTEwNy1cbm5ldC9xcnRyL3R1bi5jOjEwODpcdHJldCA9IHFydHJfZW5kcG9pbnRfcG9zdChcdTAwMjZ0dW4tXHUwMDNlZXAsIGtidWYsIGxlbik7XG5uZXQvcXJ0ci90dW4uYy0xMDktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODE1CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUVJUUiBTZWN1cml0eSBQYXRjaCoqCgpPa2F5LCBzbyBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGFsbCBhYm91dCBzdHJlbmd0aGVuaW5nIHRoZSBRUlRSIG1lc3NhZ2luZyBwcm90b2NvbCYjMzk7cyBzZWN1cml0eSwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgSEVMTE8gaGFuZHNoYWtlIGFuZCBwYWNrZXQgaGFuZGxpbmcuIEkgc2VlIHRoYXQgYHFydHJfZW5kcG9pbnRfcG9zdGAgaXMgdGhlIGtleSBmdW5jdGlvbiBmb3IgaGFuZGxpbmcgaW5jb21pbmcgcGFja2V0cywgd2hpbGUgYHFydHJfbm9kZV9lbnF1ZXVlYCBpcyBjcnVjaWFsIGZvciBzZW5kaW5nIHBhY2tldHMsIHdoZXRoZXIgbG9jYWwgb3IgYnJvYWRjYXN0LiBUaGUgcGF0Y2ggY2hhbmdlcyBob3cgYHFydHJfbm9kZV9lbnF1ZXVlYCB3b3JrcywgZWZmZWN0aXZlbHkgZmlsdGVyaW5nIG91dCBwYWNrZXRzIHRoYXQgYXJyaXZlICpiZWZvcmUqIHRoZSBIRUxMTyBoYW5kc2hha2UgaXMgZXN0YWJsaXNoZWQuIFRoaXMgaXMgYSBzbWFydCBtb3ZlIOKAkyBpdCBwcmV2ZW50cyBhIHBvdGVudGlhbCBkZW5pYWwtb2Ytc2VydmljZSBvciBldmVuIHNvbWV0aGluZyBtb3JlIG1hbGljaW91cyBpZiBhdHRhY2tlcnMgd2VyZSBhYmxlIHRvIGluamVjdCBwYWNrZXRzIGJlZm9yZSB0aGUgbGluayBpcyBzZWN1cmVseSBpbml0aWFsaXplZC4gSXQmIzM5O3MgZXNzZW50aWFsbHkgaW1wbGVtZW50aW5nIGFuIGltcGxpY2l0IHRydXN0IHBvbGljeSBiZWZvcmUgdmVyaWZ5aW5nIHNlbmRlciBpZGVudGl0eS4KClRoZSBmYWN0IHRoYXQgdGhlIHBhdGNoIGFsc28gaW50cm9kdWNlcyBzY2hlZHVsaW5nIGEgSEVMTE8gaGFuZHNoYWtlIGZyb20gdGhlIGNvcmUgbGF5ZXIgdXBvbiBlbmRwb2ludCByZWdpc3RyYXRpb24gKGBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyYCkgaXMgYW4gaW1wb3J0YW50IGFyY2hpdGVjdHVyYWwgY2hhbmdlLiBJdCBjZW50cmFsaXplcyBjb250cm9sIG92ZXIgdGhlIGhhbmRzaGFrZSBwcm9jZXNzLCB3aGljaCBtYWtlcyB0aGUgaW1wbGVtZW50YXRpb24gY2xlYW5lciBhbmQgcG90ZW50aWFsbHkgbW9yZSByb2J1c3QuIFJlbW92aW5nIHRoZSBgc2F5X2hlbGxvYCBjYWxsIGZyb20gYGN0cmxfY21kX2hlbGxvYCBpbiBgbmV0L3FydHIvbnMuY2AgcmVpbmZvcmNlcyB0aGlzIHNoaWZ0IHRvd2FyZHMgdGhlIGNvcmUgbGF5ZXIgdGFraW5nIHJlc3BvbnNpYmlsaXR5IGZvciB0aGUgaW5pdGlhbCBoYW5kc2hha2UuCgpHaXZlbiB0aGVzZSBjaGFuZ2VzLCB0aGUgbW9zdCBpbnRlcmVzdGluZyBhcmVhcyBmb3IgZnV6emluZyBhbmQgc2VjdXJpdHkgYW5hbHlzaXMgYXJlIGNsZWFyOiBgcXJ0cl9lbmRwb2ludF9yZWdpc3RlcmAgKGNyaXRpY2FsIGZvciBoYW5kc2hha2UgaW5pdGlhdGlvbiksIGBxcnRyX3NlbmRtc2dgICh0aGUgZW50cnkgcG9pbnQgZm9yIG91dGdvaW5nIHBhY2tldHMpLCBhbmQgYHFydHJfdHVuX3dyaXRlX2l0ZXJgIChoYW5kbGVzIGludGVyYWN0aW9uIHdpdGggdGhlIHR1bm5lbCkuIEFuZCBkb24mIzM5O3QgZm9yZ2V0IGBxcnRyX2VuZHBvaW50X3Bvc3RgLCB3aGljaCBkZWFscyB3aXRoIHRoZSAqaW5jb21pbmcqIHBhY2tldHMsIGEgY2xhc3NpYyBhdHRhY2sgdmVjdG9yLgoKV2FpdCBhIHNlY29uZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGFjY291bnRpbmcgZm9yIGV2ZXJ5dGhpbmcuIEkgbmVlZCB0byBub3RlIHRoYXQgYHFydHJfbm9kZV9lbnF1ZXVlYCBpcyBjYWxsZWQgZnJvbSBib3RoIGBxcnRyX3NlbmRtc2dgIGFuZCBgcXJ0cl9iY2FzdF9lbnF1ZXVlYC4gU28gYHFydHJfYmNhc3RfZW5xdWV1ZWAgaXMgYWxzbyBjYWxsZWQgYnkgYHFydHJfc2VuZG1zZ2AsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgdGhlIGNvdmVyYWdlLiBBbmQgdGhlbiwgSSBzaG91bGQga2VlcCBhbiBleWUgb24gYHFydHJfaGVsbG9fd29ya2AsIGJlY2F1c2UgdGhhdCYjMzk7cyBzY2hlZHVsZWQgYnkgYm90aCBgcXJ0cl9lbmRwb2ludF9yZWdpc3RlcmAgYW5kIGBxcnRyX25vZGVfZW5xdWV1ZWAgd2hpY2ggaXMgY2FsbGVkIGJ5IGJvdGggYHFydHJfc2VuZG1zZ2AgYW5kIGBxcnRyX2JjYXN0X2VucXVldWVgLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlc2UgY2hhbmdlcyBpbiBgbmV0L3FydHIvbnMuY2AgYXMgd2VsbCwgc28gSSYjMzk7bGwgY2hlY2sgYGN0cmxfY21kX2hlbGxvYCBhZ2Fpbi4gSSBuZWVkIHRvIHNlZSB3aGF0IGtpbmQgb2YgcmVmYWN0b3Jpbmcgd2FzIGRvbmUgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2N0cmxfY21kX2hlbGxvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9xcnRyL25zLmM9MzMwPXN0YXRpYyBpbnQgc2F5X2hlbGxvKHN0cnVjdCBzb2NrYWRkcl9xcnRyICpkZXN0KVxuLS1cbm5ldC9xcnRyL25zLmMtMzUyLVxubmV0L3FydHIvbnMuYzozNTM6c3RhdGljIGludCBjdHJsX2NtZF9oZWxsbyhzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqc3EpXG5uZXQvcXJ0ci9ucy5jLTM1NC17XG4tLVxubmV0L3FydHIvbnMuYz02MzE9c3RhdGljIHZvaWQgcXJ0cl9uc193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9xcnRyL25zLmMtNjc0LVx0XHRjYXNlIFFSVFJfVFlQRV9IRUxMTzpcbm5ldC9xcnRyL25zLmM6Njc1Olx0XHRcdHJldCA9IGN0cmxfY21kX2hlbGxvKFx1MDAyNnNxKTtcbm5ldC9xcnRyL25zLmMtNjc2LVx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTkwMAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDEyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqTXkgVGhpbmtpbmcgb24gUVJUUiBhbmQgTmV0d29yayBSb3V0aW5nKioKCkFscmlnaHQsIHNvIGBjdHJsX2NtZF9oZWxsb2AgaXMgYmVpbmcgY2FsbGVkIGJ5IGBxcnRyX25zX3dvcmtlcmAuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgYHFydHJfbnNfd29ya2VyYCBpcyB0aGUgY3JpdGljYWwgcGllY2Ugb2YgdGhpcyBwdXp6bGUsIHNpbmNlIGl0JiMzOTtzIHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIGRpcmVjdGx5IGhhbmRsaW5nIHRoYXQgY29tbWFuZC4gQW5kIHNpbmNlIGBxcnRyX25zX3dvcmtlcmAgaXMgYSB3b3JrcXVldWUgZnVuY3Rpb24sIEkmIzM5O20gZGVhbGluZyB3aXRoIGFuIGFzeW5jaHJvbm91cyBleGVjdXRpb24gY29udGV4dCBoZXJlLiBUaGF0IGNoYW5nZXMgaG93IEkmIzM5O2QgYXBwcm9hY2ggZGVidWdnaW5nIG9yIGFuYWx5emluZyB0aGlzIGZsb3cuIEkgbmVlZCB0byBiZSBhd2FyZSBvZiBjb25jdXJyZW5jeSBpc3N1ZXMuCgpTbywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBrZXkgcGxheWVycyBoZXJlOiBgcXJ0cl9lbmRwb2ludF9yZWdpc3RlcmAsIGBxcnRyX3NlbmRtc2dgLCBgcXJ0cl90dW5fd3JpdGVfaXRlcmAsIGBxcnRyX2VuZHBvaW50X3Bvc3RgLCBhbmQgb2YgY291cnNlLCB0aGUgZXZlci1wcmVzZW50IGBxcnRyX25zX3dvcmtlcmAuIEkga25vdyB0aG9zZSBmdW5jdGlvbnMgaGFuZGxlIHZhcmlvdXMgYXNwZWN0cyBvZiBRUlRSLCB3aXRoIGBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyYCBiZWluZyBlc3NlbnRpYWwgZm9yIHNldCB1cCwgYHFydHJfc2VuZG1zZ2AgYW5kIGBxcnRyX3R1bl93cml0ZV9pdGVyYCBtYW5hZ2luZyBkYXRhIHRyYW5zZmVyLCBgcXJ0cl9lbmRwb2ludF9wb3N0YCBkZWFsaW5nIHdpdGggbWVzc2FnZSBoYW5kbGluZywgYW5kIGBxcnRyX25zX3dvcmtlcmAgb3JjaGVzdHJhdGluZyB0aGUgd2hvbGUgcHJvY2Vzcy4KCk5vdywgYXMgZmFyIGFzIGNvbmZpZyBnb2VzLCBJJiMzOTttIGV4cGVjdGluZyBgUVJUUmAgdG8gYmUgdGhlIGNvcmUgZW5hYmxlLiBTaW5jZSBJIHNlZSBgUVJUUl9UVU5gIG1lbnRpb25lZCwgSSBrbm93IHRoYXQmIzM5O3MgcmVsYXRlZCB0byB0aGUgVFVOIGRldmljZSBzdXBwb3J0LiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBRUlRSX1RVTmAgaXMgZW5hYmxlZCB0byBoYXZlIHRoaXMgd2hvbGUgZmxvdyB3b3JraW5nIGFuZCBpZiB0aGVyZSBhcmUgYW55IGRlcGVuZGVuY2llcyBJIHNob3VsZCBhbHNvIGJlIG1pbmRmdWwgb2YuCgpJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGVuYWJsZWQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBRUlRSX1RVTiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcXJ0ci9LY29uZmlnPTE3PWNvbmZpZyBRUlRSX1NNRFxuLS1cbm5ldC9xcnRyL0tjb25maWctMjMtXG5uZXQvcXJ0ci9LY29uZmlnOjI0OmNvbmZpZyBRUlRSX1RVTlxubmV0L3FydHIvS2NvbmZpZy0yNS1cdHRyaXN0YXRlIFwmIzM0O1RVTiBkZXZpY2UgZm9yIFF1YWxjb21tIElQQyBSb3V0ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0ODUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6CgoqKk5hdmlnYXRpbmcgdGhlIFFSVFIgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHNvbWV0aGluZyBhbmQgSSBzZWUgYFFSVFJfVFVOYCBuZXN0ZWQgd2l0aGluIGBpZiBRUlRSYC4gVGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbi4gSXQgdGVsbHMgbWUgdGhhdCB0aGUgb3B0aW9uIHRvIGVuYWJsZSB0aGUgVFVOIGludGVyZmFjZSBzdXBwb3J0IHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIFFSVFIgc3Vic3lzdGVtIGlzIGRlcGVuZGVudCBvbiBRUlRSIGl0c2VsZiBiZWluZyBlbmFibGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IHJlbGF0aW9uc2hpcCBwcmVjaXNlbHkuCgpTbywgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIGdvIHN0cmFpZ2h0IHRvIGBuZXQvcXJ0ci9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIFFSVFIgbW9kdWxlIGFyZSBkZWZpbmVkLiBUaGUgS2NvbmZpZyBmaWxlIHdpbGwgcmV2ZWFsIHRoZSBleGFjdCBkZXBlbmRlbmNpZXMsIGRlZmF1bHRzLCBhbmQgaGVscCB0ZXh0IGFzc29jaWF0ZWQgd2l0aCBgUVJUUl9UVU5gIGFuZCwgY3JpdGljYWxseSwgaG93IGBRUlRSYCBpcyBkZWZpbmVkIGluIHJlbGF0aW9uIHRvIGl0LiBJIGV4cGVjdCB0byBmaW5kIG1vcmUgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGFueSBkZXBlbmRlbmNpZXMsIHN1Y2ggYXMgd2hldGhlciBpdCBuZWVkcyBhIHNwZWNpZmljIHZlcnNpb24gb2YgdGhlIGtlcm5lbC4gSSB3aWxsIHBheSBhdHRlbnRpb24gdG8gdGhlIGV4YWN0IGxhbmd1YWdlIHRoZXJlIHRvIGJlIHN1cmUgSSBhbSBpbnRlcnByZXRpbmcgdGhlIGluZm9ybWF0aW9uIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvcXJ0ci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0IyBRdWFsY29tbSBJUEMgUm91dGVyIGNvbmZpZ3VyYXRpb25cbiAgIDM6XHQjXG4gICA0Olx0XG4gICA1Olx0Y29uZmlnIFFSVFJcbiAgIDY6XHRcdHRyaXN0YXRlIFwmIzM0O1F1YWxjb21tIElQQyBSb3V0ZXIgc3VwcG9ydFwmIzM0O1xuICAgNzpcdFx0aGVscFxuICAgODpcdFx0ICBTYXkgWSBpZiB5b3UgaW50ZW5kIHRvIHVzZSBRdWFsY29tbSBJUEMgcm91dGVyIHByb3RvY29sLiAgVGhlXG4gICA5Olx0XHQgIHByb3RvY29sIGlzIHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCBzZXJ2aWNlcyBwcm92aWRlZCBieSBvdGhlclxuICAxMDpcdFx0ICBoYXJkd2FyZSBibG9ja3MgaW4gdGhlIHN5c3RlbS5cbiAgMTE6XHRcbiAgMTI6XHRcdCAgSW4gb3JkZXIgdG8gZG8gc2VydmljZSBsb29rdXBzLCBhIHVzZXJzcGFjZSBkYWVtb24gaXMgcmVxdWlyZWQgdG9cbiAgMTM6XHRcdCAgbWFpbnRhaW4gYSBzZXJ2aWNlIGxpc3RpbmcuXG4gIDE0Olx0XG4gIDE1Olx0aWYgUVJUUlxuICAxNjpcdFxuICAxNzpcdGNvbmZpZyBRUlRSX1NNRFxuICAxODpcdFx0dHJpc3RhdGUgXCYjMzQ7U01EIElQQyBSb3V0ZXIgY2hhbm5lbHNcJiMzNDtcbiAgMTk6XHRcdGRlcGVuZHMgb24gUlBNU0cgfHwgKENPTVBJTEVfVEVTVCBcdTAwMjZcdTAwMjYgUlBNU0c9bilcbiAgMjA6XHRcdGhlbHBcbiAgMjE6XHRcdCAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IFNNRCBiYXNlZCBpcGNyb3V0ZXIgY2hhbm5lbHMuICBTTUQgaXMgdGhlXG4gIDIyOlx0XHQgIG1vc3QgY29tbW9uIHRyYW5zcG9ydCBmb3IgSVBDIFJvdXRlci5cbiAgMjM6XHRcbiAgMjQ6XHRjb25maWcgUVJUUl9UVU5cbiAgMjU6XHRcdHRyaXN0YXRlIFwmIzM0O1RVTiBkZXZpY2UgZm9yIFF1YWxjb21tIElQQyBSb3V0ZXJcJiMzNDtcbiAgMjY6XHRcdGhlbHBcbiAgMjc6XHRcdCAgU2F5IFkgaGVyZSB0byBleHBvc2UgYSBjaGFyYWN0ZXIgZGV2aWNlIHRoYXQgYWxsb3dzIHVzZXIgc3BhY2UgdG9cbiAgMjg6XHRcdCAgaW1wbGVtZW50IGVuZHBvaW50cyBvZiBRUlRSLCBmb3IgcHVycG9zZSBvZiB0dW5uZWxpbmcgZGF0YSB0byBvdGhlclxuICAyOTpcdFx0ICBob3N0cyBvciB0ZXN0aW5nIHB1cnBvc2VzLlxuICAzMDpcdFxuICAzMTpcdGNvbmZpZyBRUlRSX01ISVxuICAzMjpcdFx0dHJpc3RhdGUgXCYjMzQ7TUhJIElQQyBSb3V0ZXIgY2hhbm5lbHNcJiMzNDtcbiAgMzM6XHRcdGRlcGVuZHMgb24gTUhJX0JVU1xuICAzNDpcdFx0aGVscFxuICAzNTpcdFx0ICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgTUhJIGJhc2VkIGlwY3JvdXRlciBjaGFubmVscy4gTUhJIGlzIHRoZVxuICAzNjpcdFx0ICB0cmFuc3BvcnQgdXNlZCBmb3IgY29tbXVuaWNhdGluZyB0byBleHRlcm5hbCBtb2RlbXMuXG4gIDM3Olx0XG4gIDM4Olx0ZW5kaWYgIyBRUlRSXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjQ0CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IEFzc2Vzc21lbnQ6IFFSVFIgQ29yZSBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBRUlRSIHBhdGNoLCBhbmQgdGhlIGtleSBjb25maWd1cmF0aW9ucyBhcmUgYFFSVFJgIGFuZCBgUVJUUl9UVU5gLiBJIG5lZWQgdG8gc29saWRpZnkgdGhlIGNoYW5nZXMsIHN0YXJ0aW5nIHdpdGggdGhlIGFkZGl0aW9uIG9mIGEgYGhlbGxvX3NlbnRgIGZsYWcgd2l0aGluIHRoZSBgcXJ0cl9ub2RlYCBzdHJ1Y3R1cmUuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgbGllcyBpbiBob3cgYHFydHJfbm9kZV9lbnF1ZXVlYCBub3cgYmVoYXZlczogaXQmIzM5O3MgbW9kaWZpZWQgdG8gZHJvcCBwYWNrZXRzIGlmIGBoZWxsb19zZW50YCBpcyBmYWxzZSwgdW5sZXNzIGl0JiMzOTtzIGEgSEVMTE8gcGFja2V0LiBDcnVjaWFsbHksIGEgSEVMTE8gaGFuZHNoYWtlIGlzIHNjaGVkdWxlZCBmcm9tIHRoZSBjb3JlIGR1cmluZyBlbmRwb2ludCByZWdpc3RyYXRpb24gdmlhIGBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyYC4gQWxzbywgdGhlIGBjdHJsX2NtZF9oZWxsb2AgbG9naWMgaW4gYG5ldC9xcnRyL25zLmNgIGlzIHVwZGF0ZWQgdG8gcmVtb3ZlIHRoZSBgc2F5X2hlbGxvYCBjYWxsLCBhIG5vdGFibGUgc2hpZnQuCgpGdW5jdGlvbmFsbHksIHRoaXMgaW1wYWN0cyB0aGUgUVJUUiBjb3JlIGxvZ2ljIGRpcmVjdGx5LiBUaGUgcmVsZXZhbnQgcGF0aHMgZm9yIHRoaXMgYXJlIGBxcnRyX3R1bl93cml0ZV9pdGVyYCB3aGljaCBjYWxscyBgcXJ0cl9lbmRwb2ludF9wb3N0YCBhbmQgYWxzbyBgcXJ0cl9zZW5kbXNnYCB3aGljaCBjYWxscyBgcXJ0cl9ub2RlX2VucXVldWVgLiBUaGUgZW5kcG9pbnQgcmVnaXN0cmF0aW9uIGBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyYCAod2hpY2ggaXMgaXRzZWxmIHRyaWdnZXJlZCB3aGVuIGAvZGV2L3FydHItdHVuYCBpcyBvcGVuZWQpIGlzIGFsc28ga2V5LgoKQmFzZWQgb24gYWxsIHRoaXMsIFdvcnRoRnV6emluZz10cnVlLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgc3Ryb25nIHN5bWJvbHMgZm9yIGZ1enppbmcuIEZyb20gdGhlIHBhdGNoIGFuZCBwcmV2aW91cyB1bmRlcnN0YW5kaW5nLCB0aGUgZm9sbG93aW5nIHNlZW0gbGlrZSBzb2xpZCB0YXJnZXRzOiBgcXJ0cl9lbmRwb2ludF9yZWdpc3RlcmAsIGBxcnRyX3NlbmRtc2dgLCBgcXJ0cl90dW5fd3JpdGVfaXRlcmAsIGBxcnRyX2VuZHBvaW50X3Bvc3RgLCBhbmQgYHFydHJfbnNfd29ya2VyYC4KClJpZ2h0LCBsZXQmIzM5O3MgY2hlY2sgc29tZSBwcm9wZXJ0aWVzIG9mIHRoZSBhYm92ZSBzeW1ib2xzLiBJIHNlZSB0aGF0IGBxcnRyX25zX3dvcmtlcmAgaXMgc3RhdGljIGJ1dCBhIHdvcmtxdWV1ZSBmdW5jdGlvbiwgc28gaXQmIzM5O3MgYSBwcm9taXNpbmcgZW50cnkgcG9pbnQuIGBxcnRyX3R1bl93cml0ZV9pdGVyYCBpcyBhbHNvIHN0YXRpYywgYnV0IGlzIGEgZmlsZSBvcGVyYXRpb24sIG1ha2luZyBpdCBhIGdvb2QgZW50cnkgcG9pbnQuIGBxcnRyX3NlbmRtc2dgIGlzIHN0YXRpYyBhcyB3ZWxsLCBidXQgaXQmIzM5O3MgYSBwcm90b19vcHMgZnVuY3Rpb24sIGFuZCB0aG9zZSBhcmUgb2Z0ZW4gYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBgcXJ0cl9lbmRwb2ludF9wb3N0YCBpcyBleHBvcnRlZCwgZ29vZC4gQW5kIHRoZSBzYW1lIGZvciBgcXJ0cl9lbmRwb2ludF9yZWdpc3RlcmAuIFdhaXQsIGBxcnRyX25zX3dvcmtlcmAgaXMgaW4gYG5ldC9xcnRyL25zLmNgLCB3aGljaCBtYWtlcyBtZSB0aGluayB0aGF0IEkgc2hvdWxkIHJldmlldyBgcXJ0cl9uc193b3JrZXJgIHN5bWJvbCB0byBjb25zaWRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cXJ0cl9uc193b3JrZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3FydHIvbnMuYz02MDc9c3RhdGljIHZvaWQgY3RybF9jbWRfZGVsX2xvb2t1cChzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqZnJvbSxcbi0tXG5uZXQvcXJ0ci9ucy5jLTYzMC1cbm5ldC9xcnRyL25zLmM6NjMxOnN0YXRpYyB2b2lkIHFydHJfbnNfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbm5ldC9xcnRyL25zLmMtNjMyLXtcbi0tXG5uZXQvcXJ0ci9ucy5jPTczMD1pbnQgcXJ0cl9uc19pbml0KHZvaWQpXG4tLVxubmV0L3FydHIvbnMuYy03MzUtXHRJTklUX0xJU1RfSEVBRChcdTAwMjZxcnRyX25zLmxvb2t1cHMpO1xubmV0L3FydHIvbnMuYzo3MzY6XHRJTklUX1dPUksoXHUwMDI2cXJ0cl9ucy53b3JrLCBxcnRyX25zX3dvcmtlcik7XG5uZXQvcXJ0ci9ucy5jLTczNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ0NjMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIFdvcmtxdWV1ZSBDb250ZXh0KioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIHdvcmtxdWV1ZSBmdW5jdGlvbiBoZXJlLiBUaGUgaW5pdGlhbCBpbXByZXNzaW9uIGlzIGNvbmZpcm1lZDsgaXQmIzM5O3MgZGVmaW5pdGVseSBvcGVyYXRpbmcgd2l0aGluIHRoYXQgZnJhbWV3b3JrLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGdldCBhIGJyb2FkZXIgdmlldy4gQXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGlzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBzY29wZSBvZiBpdHMgaW50ZXJhY3Rpb24uIExldCBtZSBxdWlja2x5IGV4YW1pbmUgdGhlIGNvZGUgYmFzZS4uLiBBaCwgeWVzLiBgcXJ0cl9oZWxsb193b3JrYCDigJMgdGhhdCYjMzk7cyB0aGUgb25lLiBBbmQgaXQgc2VlbXMgdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uIHdhcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIE9rYXksIGdvb2QgdG8ga25vdy4gTm93IEkgaGF2ZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGl0cyBwcm92ZW5hbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtxcnRyX2hlbGxvX3dvcmsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3FydHIvYWZfcXJ0ci5jPTU3OD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnFydHJfYWxsb2NfY3RybF9wYWNrZXQoc3RydWN0IHFydHJfY3RybF9wa3QgKipwa3QsXG4tLVxubmV0L3FydHIvYWZfcXJ0ci5jLTU5My1cbm5ldC9xcnRyL2FmX3FydHIuYzo1OTQ6c3RhdGljIHZvaWQgcXJ0cl9oZWxsb193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbm5ldC9xcnRyL2FmX3FydHIuYy01OTUte1xuLS1cbm5ldC9xcnRyL2FmX3FydHIuYz02MzE9aW50IHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIoc3RydWN0IHFydHJfZW5kcG9pbnQgKmVwLCB1bnNpZ25lZCBpbnQgbmlkKVxuLS1cbm5ldC9xcnRyL2FmX3FydHIuYy02NDgtXHRub2RlLVx1MDAzZWhlbGxvX3NlbnQgPSBmYWxzZTtcbm5ldC9xcnRyL2FmX3FydHIuYzo2NDk6XHRJTklUX1dPUksoXHUwMDI2bm9kZS1cdTAwM2VzYXlfaGVsbG8sIHFydHJfaGVsbG9fd29yayk7XG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjUwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDkwOAoJCQkJCQkJb3V0cHV0OiAxNzkKCQkJCQkJCXRob3VnaHRzOiAyMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBicmVha2Rvd24gb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipSZWZpbmluZyB0aGUgRnV6emluZyBTdHJhdGVneSBmb3IgUVJUUioqCgpPa2F5LCBgcXJ0cl9oZWxsb193b3JrYCBmZWVscyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGZ1enppbmcuIE5vdywgbGV0JiMzOTtzIG5haWwgZG93biBhIGZldyBtb3JlIHByZWNpc2UgZnVuY3Rpb24gdGFyZ2V0cy4gSSYjMzk7bSB0aGlua2luZyB3ZSBzaG91bGQgZm9jdXMgb3VyIGZ1enppbmcgZWZmb3J0cyBvbjoKCiogICBgcXJ0cl9lbmRwb2ludF9yZWdpc3RlcmA6IFRoaXMgaXMgdGhlIGVudHJ5IHBvaW50IGZvciBlbmRwb2ludCByZWdpc3RyYXRpb24sIGEgY3JpdGljYWwgZnVuY3Rpb24uCiogICBgcXJ0cl9zZW5kbXNnYDogS2V5IGZvciB0aGUgbWVzc2FnZSBzZW5kaW5nIHBhdGguCiogICBgcXJ0cl90dW5fd3JpdGVfaXRlcmA6IFRoZSB0dW5uZWwgd3JpdGUgaXRlcmF0aW9uIGZ1bmN0aW9uLCBpbXBvcnRhbnQgZm9yIHRoZSBgUVJUUl9UVU5gIGRldmljZS4KKiAgIGBxcnRyX2VuZHBvaW50X3Bvc3RgOiBFbmRwb2ludCBwb3N0IGZ1bmN0aW9uLCBhbm90aGVyIGNvcmUgcGFydCBvZiB0aGUgY29kZS4KKiAgIGBxcnRyX25zX3dvcmtlcmA6IFRoZSBuYW1lc3BhY2Ugd29ya2VyLCBhbiBhcmVhIEkgd2FudCB0byBleHBsb3JlLgoqICAgYHFydHJfaGVsbG9fd29ya2A6IEJ1aWxkaW5nIG9uIG15IGluaXRpYWwgaW5zdGluY3QsIHRoaXMgZnVuY3Rpb24gaXMgY2VudHJhbCB0byB0aGUgaGFuZHNoYWtlLgoKRXNzZW50aWFsbHksIGJ5IHRhcmdldGluZyB0aGVzZSwgd2Ugc2hvdWxkIGJlIGFibGUgdG8gdHJpZ2dlciB2YXJpb3VzIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW52b2x2ZWQgaW4gdGhlIG5ldyBIRUxMTyBoYW5kc2hha2UgbG9naWMgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLgoKVG8gYmUgc3VyZSB0aGF0IGV2ZXJ5dGhpbmcgaXMgY292ZXJlZCBhbmQgZW5hYmxlZCBmb3IgZnV6emluZyBJIG5lZWQgdG8gY29uZmlndXJlIHRoZSBmdXp6aW5nIGVudmlyb25tZW50OgoKKiAgIGBRUlRSYDogVGhpcyBuZWVkcyB0byBiZSBhY3RpdmUuCiogICBgUVJUUl9UVU5gOiBBbmQgdGhlIFRVTiBkZXZpY2UsIHRvIHRlc3QgdGhlIHZpcnR1YWxpemVkIHBhdGguCgpVbHRpbWF0ZWx5LCB0aGlzIHBhdGNoIGFsdGVycyBjb3JlIFFSVFIgYmVoYXZpb3IgdG8gcGVyZm9ybSBhIEhFTExPIGhhbmRzaGFrZSBkdXJpbmcgZW5kcG9pbnQgcmVnaXN0cmF0aW9uLCBkcm9wcGluZyBwYWNrZXRzIGlmIHRoaXMgaGFuZHNoYWtlIGlzIGluY29tcGxldGUuIFRoYXQgaGFuZHNoYWtlLCBjb21iaW5lZCB3aXRoIGEgYC9kZXYvcXJ0ci10dW5gIGRldmljZSwgbWFrZXMgaXQgYWNoaWV2YWJsZSB0byBjb250cm9sIHRoZSBjb3JlIGFuZCB0cmlnZ2VyIHZhcmlvdXMgZnVuY3Rpb25zLgoKSSB0aGluayB0aGUgYW5hbHlzaXMgaXMgZG9uZSwgc28gSSB3aWxsIG5vdyBzZXQgdGhlIGZ1enppbmcgcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1FSVFImIzM0OywKICAgICYjMzQ7UVJUUl9UVU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtxcnRyX2VuZHBvaW50X3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O3FydHJfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDtxcnRyX3R1bl93cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O3FydHJfZW5kcG9pbnRfcG9zdCYjMzQ7LAogICAgJiMzNDtxcnRyX25zX3dvcmtlciYjMzQ7LAogICAgJiMzNDtxcnRyX2hlbGxvX3dvcmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFF1YWxjb21tIElQQyBSb3V0ZXIgKFFSVFIpIGNvcmUgbG9naWMgdG8gaW5pdGlhdGUgYSBIRUxMTyBoYW5kc2hha2UgdXBvbiBlbmRwb2ludCByZWdpc3RyYXRpb24gYW5kIGRyb3AgcGFja2V0cyBpZiB0aGUgaGFuZHNoYWtlIGhhc24mIzM5O3QgY29tcGxldGVkLiBUaGlzIGZ1bmN0aW9uYWxpdHkgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSB1c2luZyB0aGUgYC9kZXYvcXJ0ci10dW5gIGRldmljZSwgd2hpY2ggYWxsb3dzIHVzZXJzcGFjZSB0byByZWdpc3RlciBlbmRwb2ludHMgYW5kIGluamVjdCBwYWNrZXRzLiBUaGUgY2hhbmdlcyBhZmZlY3QgY29yZSBwYWNrZXQgZW5xdWV1ZWluZyBhbmQgZW5kcG9pbnQgcmVnaXN0cmF0aW9uIHBhdGhzLCB3aGljaCBhcmUgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UVJUUiYjMzQ7LAogICAgJiMzNDtRUlRSX1RVTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3FydHJfZW5kcG9pbnRfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7cXJ0cl9zZW5kbXNnJiMzNDssCiAgICAmIzM0O3FydHJfdHVuX3dyaXRlX2l0ZXImIzM0OywKICAgICYjMzQ7cXJ0cl9lbmRwb2ludF9wb3N0JiMzNDssCiAgICAmIzM0O3FydHJfbnNfd29ya2VyJiMzNDssCiAgICAmIzM0O3FydHJfaGVsbG9fd29yayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgUXVhbGNvbW0gSVBDIFJvdXRlciAoUVJUUikgY29yZSBsb2dpYyB0byBpbml0aWF0ZSBhIEhFTExPIGhhbmRzaGFrZSB1cG9uIGVuZHBvaW50IHJlZ2lzdHJhdGlvbiBhbmQgZHJvcCBwYWNrZXRzIGlmIHRoZSBoYW5kc2hha2UgaGFzbiYjMzk7dCBjb21wbGV0ZWQuIFRoaXMgZnVuY3Rpb25hbGl0eSBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IHVzaW5nIHRoZSBgL2Rldi9xcnRyLXR1bmAgZGV2aWNlLCB3aGljaCBhbGxvd3MgdXNlcnNwYWNlIHRvIHJlZ2lzdGVyIGVuZHBvaW50cyBhbmQgaW5qZWN0IHBhY2tldHMuIFRoZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIHBhY2tldCBlbnF1ZXVlaW5nIGFuZCBlbmRwb2ludCByZWdpc3RyYXRpb24gcGF0aHMsIHdoaWNoIGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjEyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBRUlRSIHN1YnN5c3RlbSB0byBpbml0aWF0ZSB0aGUgSEVMTE8gaGFuZHNoYWtlIGZyb20gdGhlIGNvcmUgbGF5ZXIgaW5zdGVhZCBvZiB0aGUgbmFtZXNlcnZpY2UuIEl0IGludHJvZHVjZXMgYSBuZXcgd29yayBpdGVtIGBxcnRyX2hlbGxvX3dvcmtgIHdoaWNoIGFsbG9jYXRlcyBhIGNvbnRyb2wgcGFja2V0IGFuZCBlbnF1ZXVlcyBpdC4gVGhlIGNvbnRyb2wgcGFja2V0IGlzIGFsbG9jYXRlZCB1c2luZyBgcXJ0cl9hbGxvY19jdHJsX3BhY2tldGAsIHdoaWNoIHVzZXMgYHNrYl9wdXRfemVyb2AgdG8gZnVsbHkgemVyby1pbml0aWFsaXplIHRoZSBwYWNrZXQgcGF5bG9hZC4gVGhlIHN0YWNrLWFsbG9jYXRlZCBgc3RydWN0IHNvY2thZGRyX3FydHJgIHZhcmlhYmxlcyAoYGZyb21gIGFuZCBgdG9gKSBhcmUgdXNlZCB0byBwYXNzIGFkZHJlc3NlcyB0byBgcXJ0cl9ub2RlX2VucXVldWVgLCB3aGljaCBvbmx5IHJlYWRzIHRoZWlyIGBzcV9ub2RlYCBhbmQgYHNxX3BvcnRgIGZpZWxkcyB0byBwb3B1bGF0ZSB0aGUgcGFja2V0IGhlYWRlci4gVGhlIGBzdHJ1Y3Qgc29ja2FkZHJfcXJ0cmAgaXRzZWxmIGlzIG5vdCBjb3BpZWQgdG8gdGhlIHBhY2tldCBvciB0byB1c2Vyc3BhY2UsIHNvIGFueSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHBhZGRpbmcgYnl0ZXMgb24gdGhlIHN0YWNrIGFyZSBuZXZlciByZWFkIG9yIGxlYWtlZC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIG5vciBkb2VzIGl0IG1vZGlmeSBib3VuZHMgY2hlY2tzIG9yIGxlbmd0aHMgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIHVzZS1hZnRlci1mcmVlLCBvdXQtb2YtYm91bmRzIGFjY2Vzcywgb3IgbG9ja2luZyBpc3N1ZXMpIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgb3Igb3RoZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyNWM1N2JiNTg3YzJmY2I4NWQ4MTNmM2IzNDJmYjIyMzhmYTJlMjYyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgNyAxNjoxMDo1NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9xcnRyL2FmX3FydHIuYyBiL25ldC9xcnRyL2FmX3FydHIuYwppbmRleCBkMDJlZjlhNzRjM2NhLi43YWRjMGEwNTMxMjU0IDEwMDY0NAotLS0gYS9uZXQvcXJ0ci9hZl9xcnRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3FydHIvYWZfcXJ0ci5jCkBAIC05LDYgJiM0Mzs5LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC90ZXJtaW9zLmgmZ3Q7CS8qIEZvciBUSU9DSU5RL09VVFEgKi8KICNpbmNsdWRlICZsdDtsaW51eC9zcGlubG9jay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3dhaXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvd29ya3F1ZXVlLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDtuZXQvc29jay5oJmd0OwogCkBAIC0xMjAsOCAmIzQzOzEyMSwxMCBAQCBzdGF0aWMgREVGSU5FX1hBUlJBWV9BTExPQyhxcnRyX3BvcnRzKTsKICAqIEBuaWQ6IG5vZGUgaWQKICAqIEBxcnRyX3R4X2Zsb3c6IHhhcnJheSBvZiBxcnRyX3R4X2Zsb3csIGtleWVkIGJ5IG5vZGUgJmx0OyZsdDsgMzIgfCBwb3J0CiAgKiBAcXJ0cl90eF9sb2NrOiBsb2NrIGZvciBxcnRyX3R4X2Zsb3cgaW5zZXJ0cwomIzQzOyAqIEBoZWxsb19zZW50OiBoZWxsbyBwYWNrZXQgc2VuZCBzdWNjZXNzZnVsCiAgKiBAcnhfcXVldWU6IHJlY2VpdmUgcXVldWUKICAqIEBpdGVtOiBsaXN0IGl0ZW0gZm9yIGJyb2FkY2FzdCBsaXN0CiYjNDM7ICogQHNheV9oZWxsbzogc2NoZWR1bGVkIHdvcmsgZm9yIHNlbmRpbmcgaGVsbG8gcGFja2V0CiAgKi8KIHN0cnVjdCBxcnRyX25vZGUgewogCXN0cnVjdCBtdXRleCBlcF9sb2NrOwpAQCAtMTMyLDggJiM0MzsxMzUsMTEgQEAgc3RydWN0IHFydHJfbm9kZSB7CiAJc3RydWN0IHhhcnJheSBxcnRyX3R4X2Zsb3c7CiAJc3RydWN0IG11dGV4IHFydHJfdHhfbG9jazsgLyogZm9yIHFydHJfdHhfZmxvdyAqLwogCiYjNDM7CWJvb2wgaGVsbG9fc2VudDsKJiM0MzsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHJ4X3F1ZXVlOwogCXN0cnVjdCBsaXN0X2hlYWQgaXRlbTsKJiM0MzsJc3RydWN0IHdvcmtfc3RydWN0IHNheV9oZWxsbzsKIH07CiAKIC8qKgpAQCAtMTg3LDYgJiM0MzsxOTMsOCBAQCBzdGF0aWMgdm9pZCBfX3FydHJfbm9kZV9yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKQogCWxpc3RfZGVsKCZhbXA7bm9kZS0mZ3Q7aXRlbSk7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7cXJ0cl9ub2RlX2xvY2spOwogCiYjNDM7CWNhbmNlbF93b3JrX3N5bmMoJmFtcDtub2RlLSZndDtzYXlfaGVsbG8pOwomIzQzOwogCXNrYl9xdWV1ZV9wdXJnZSgmYW1wO25vZGUtJmd0O3J4X3F1ZXVlKTsKIAogCS8qIEZyZWUgdHggZmxvdyBjb3VudGVycyAqLwpAQCAtMzQxLDYgJiM0MzszNDksMTQgQEAgc3RhdGljIGludCBxcnRyX25vZGVfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXNpemVfdCBsZW4gPSBza2ItJmd0O2xlbjsKIAlpbnQgcmMsIGNvbmZpcm1fcng7CiAKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO25vZGUtJmd0O2VwX2xvY2spOwomIzQzOwlpZiAoIW5vZGUtJmd0O2hlbGxvX3NlbnQgJmFtcDsmYW1wOyB0eXBlICE9IFFSVFJfVFlQRV9IRUxMTykgewomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7bm9kZS0mZ3Q7ZXBfbG9jayk7CiYjNDM7CQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO25vZGUtJmd0O2VwX2xvY2spOwomIzQzOwogCWNvbmZpcm1fcnggPSBxcnRyX3R4X3dhaXQobm9kZSwgdG8tJmd0O3NxX25vZGUsIHRvLSZndDtzcV9wb3J0LCB0eXBlKTsKIAlpZiAoY29uZmlybV9yeCAmbHQ7IDApIHsKIAkJa2ZyZWVfc2tiKHNrYik7CkBAIC0zNzIsNiAmIzQzOzM4OCw4IEBAIHN0YXRpYyBpbnQgcXJ0cl9ub2RlX2VucXVldWUoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCXJjID0gbm9kZS0mZ3Q7ZXAtJmd0O3htaXQobm9kZS0mZ3Q7ZXAsIHNrYik7CiAJCWVsc2UKIAkJCWtmcmVlX3NrYihza2IpOwomIzQzOwkJaWYgKCFyYyAmYW1wOyZhbXA7IHR5cGUgPT0gUVJUUl9UWVBFX0hFTExPKQomIzQzOwkJCW5vZGUtJmd0O2hlbGxvX3NlbnQgPSB0cnVlOwogCQltdXRleF91bmxvY2soJmFtcDtub2RlLSZndDtlcF9sb2NrKTsKIAl9CiAJLyogTmVlZCB0byBlbnN1cmUgdGhhdCBhIHN1YnNlcXVlbnQgbWVzc2FnZSBjYXJyaWVzIHRoZSBvdGhlcndpc2UgbG9zdApAQCAtMzc5LDYgJiM0MzszOTcsOSBAQCBzdGF0aWMgaW50IHFydHJfbm9kZV9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsCiAJaWYgKHJjICZhbXA7JmFtcDsgY29uZmlybV9yeCkKIAkJcXJ0cl90eF9mbG93X2ZhaWxlZChub2RlLCB0by0mZ3Q7c3Ffbm9kZSwgdG8tJmd0O3NxX3BvcnQpOwogCiYjNDM7CWlmIChyYyAmYW1wOyZhbXA7IHR5cGUgPT0gUVJUUl9UWVBFX0hFTExPKQomIzQzOwkJc2NoZWR1bGVfd29yaygmYW1wO25vZGUtJmd0O3NheV9oZWxsbyk7CiYjNDM7CiAJcmV0dXJuIHJjOwogfQogCkBAIC01NzAsNiAmIzQzOzU5MSwzNSBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnFydHJfYWxsb2NfY3RybF9wYWNrZXQoc3RydWN0IHFydHJfY3RybF9wa3QgKipwa3QsCiAJcmV0dXJuIHNrYjsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHFydHJfaGVsbG9fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciBmcm9tID0ge0FGX1FJUENSVFIsIDAsIFFSVFJfUE9SVF9DVFJMfTsKJiM0MzsJc3RydWN0IHNvY2thZGRyX3FydHIgdG8gPSB7QUZfUUlQQ1JUUiwgMCwgUVJUUl9QT1JUX0NUUkx9OwomIzQzOwlzdHJ1Y3QgcXJ0cl9jdHJsX3BrdCAqcGt0OwomIzQzOwlzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlOwomIzQzOwlzdHJ1Y3QgcXJ0cl9zb2NrICpjdHJsOwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwomIzQzOwomIzQzOwlub2RlID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBxcnRyX25vZGUsIHNheV9oZWxsbyk7CiYjNDM7CiYjNDM7CS8qIE5TIG11c3QgYmUgYm91bmQgYmVmb3JlIHdlIGNhbiBzZW5kICovCiYjNDM7CWN0cmwgPSBxcnRyX3BvcnRfbG9va3VwKFFSVFJfUE9SVF9DVFJMKTsKJiM0MzsJaWYgKCFjdHJsKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlza2IgPSBxcnRyX2FsbG9jX2N0cmxfcGFja2V0KCZhbXA7cGt0LCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFza2IpIHsKJiM0MzsJCXFydHJfcG9ydF9wdXQoY3RybCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJcGt0LSZndDtjbWQgPSBjcHVfdG9fbGUzMihRUlRSX1RZUEVfSEVMTE8pOwomIzQzOwlmcm9tLnNxX25vZGUgPSBxcnRyX2xvY2FsX25pZDsKJiM0MzsJdG8uc3Ffbm9kZSA9IG5vZGUtJmd0O25pZDsKJiM0MzsJcXJ0cl9ub2RlX2VucXVldWUobm9kZSwgc2tiLCBRUlRSX1RZUEVfSEVMTE8sICZhbXA7ZnJvbSwgJmFtcDt0byk7CiYjNDM7CXFydHJfcG9ydF9wdXQoY3RybCk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyKCkgLSByZWdpc3RlciBhIG5ldyBlbmRwb2ludAogICogQGVwOiBlbmRwb2ludCB0byByZWdpc3RlcgpAQCAtNTk1LDYgJiM0Mzs2NDUsOSBAQCBpbnQgcXJ0cl9lbmRwb2ludF9yZWdpc3RlcihzdHJ1Y3QgcXJ0cl9lbmRwb2ludCAqZXAsIHVuc2lnbmVkIGludCBuaWQpCiAJbm9kZS0mZ3Q7bmlkID0gUVJUUl9FUF9OSURfQVVUTzsKIAlub2RlLSZndDtlcCA9IGVwOwogCiYjNDM7CW5vZGUtJmd0O2hlbGxvX3NlbnQgPSBmYWxzZTsKJiM0MzsJSU5JVF9XT1JLKCZhbXA7bm9kZS0mZ3Q7c2F5X2hlbGxvLCBxcnRyX2hlbGxvX3dvcmspOwomIzQzOwogCXhhX2luaXQoJmFtcDtub2RlLSZndDtxcnRyX3R4X2Zsb3cpOwogCW11dGV4X2luaXQoJmFtcDtub2RlLSZndDtxcnRyX3R4X2xvY2spOwogCkBAIC02MDUsNiAmIzQzOzY1OCw5IEBAIGludCBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyKHN0cnVjdCBxcnRyX2VuZHBvaW50ICplcCwgdW5zaWduZWQgaW50IG5pZCkKIAltdXRleF91bmxvY2soJmFtcDtxcnRyX25vZGVfbG9jayk7CiAJZXAtJmd0O25vZGUgPSBub2RlOwogCiYjNDM7CS8qIEluaXRpYXRlIEhFTExPIGhhbmRzaGFrZSBmcm9tIHRoZSBjb3JlIGxheWVyICovCiYjNDM7CXNjaGVkdWxlX3dvcmsoJmFtcDtub2RlLSZndDtzYXlfaGVsbG8pOwomIzQzOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocXJ0cl9lbmRwb2ludF9yZWdpc3Rlcik7CkBAIC04NzksNiAmIzQzOzkzNSwxMSBAQCBzdGF0aWMgaW50IHFydHJfYmNhc3RfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCiAJbXV0ZXhfbG9jaygmYW1wO3FydHJfbm9kZV9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsICZhbXA7cXJ0cl9hbGxfbm9kZXMsIGl0ZW0pIHsKJiM0MzsJCS8qIFNraXAgbm9kZXMgd2hvc2Ugbm9kZSBJRCBpcyBub3QgeWV0IGtub3duOyB0aGV5IGNhbm5vdAomIzQzOwkJICogcmVjZWl2ZSBicm9hZGNhc3QgcGFja2V0cyBiZWZvcmUgdGhlIEhFTExPIGhhbmRzaGFrZS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKG5vZGUtJmd0O25pZCA9PSBRUlRSX0VQX05JRF9BVVRPKQomIzQzOwkJCWNvbnRpbnVlOwogCQlza2JuID0gcHNrYl9jb3B5KHNrYiwgR0ZQX0tFUk5FTCk7CiAJCWlmICghc2tibikKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvbmV0L3FydHIvbnMuYyBiL25ldC9xcnRyL25zLmMKaW5kZXggYjNmOWJiY2Y5YWI5Yi4uMTQyNjI2MjNkMmRkNSAxMDA2NDQKLS0tIGEvbmV0L3FydHIvbnMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcXJ0ci9ucy5jCkBAIC0yMTIsNiAmIzQzOzIxMiw3IEBAIHN0YXRpYyB2b2lkIGxvb2t1cF9ub3RpZnkoc3RydWN0IHNvY2thZGRyX3FydHIgKnRvLCBzdHJ1Y3QgcXJ0cl9zZXJ2ZXIgKnNydiwKIAkJcHJfZXJyKCYjMzQ7ZmFpbGVkIHRvIHNlbmQgbG9va3VwIG5vdGlmaWNhdGlvblxuJiMzNDspOwogfQogCiYjNDM7LyogQW5ub3VuY2UgdGhlIGxpc3Qgb2Ygc2VydmVycyByZWdpc3RlcmVkIG9uIHRoZSBsb2NhbCBub2RlICovCiBzdGF0aWMgaW50IGFubm91bmNlX3NlcnZlcnMoc3RydWN0IHNvY2thZGRyX3FydHIgKnNxKQogewogCXN0cnVjdCBxcnRyX3NlcnZlciAqc3J2OwpAQCAtMzQ5LDE1ICYjNDM7MzUwLDggQEAgc3RhdGljIGludCBzYXlfaGVsbG8oc3RydWN0IHNvY2thZGRyX3FydHIgKmRlc3QpCiAJcmV0dXJuIHJldDsKIH0KIAotLyogQW5ub3VuY2UgdGhlIGxpc3Qgb2Ygc2VydmVycyByZWdpc3RlcmVkIG9uIHRoZSBsb2NhbCBub2RlICovCiBzdGF0aWMgaW50IGN0cmxfY21kX2hlbGxvKHN0cnVjdCBzb2NrYWRkcl9xcnRyICpzcSkKIHsKLQlpbnQgcmV0OwotCi0JcmV0ID0gc2F5X2hlbGxvKHNxKTsKLQlpZiAocmV0ICZsdDsgMCkKLQkJcmV0dXJuIHJldDsKLQogCXJldHVybiBhbm5vdW5jZV9zZXJ2ZXJzKHNxKTsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkwNwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDQ4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFFSVFIgSEVMTE8gSGFuZHNoYWtlIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgUXVhbGNvbW0gSVBDIFJvdXRlciAoUVJUUikgc3Vic3lzdGVtLiBNeSBpbml0aWFsIHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBpdCYjMzk7cyBpbnRyb2R1Y2luZyBhIGBoZWxsb19zZW50YCBmbGFnIGFuZCBhIGBzYXlfaGVsbG9gIHdvcmsgc3RydWN0IHdpdGhpbiB0aGUgYHFydHJfbm9kZWAgc3RydWN0dXJlLiBUaGUgY29yZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgbW92aW5nIHRoZSBIRUxMTyBoYW5kc2hha2UgaW5pdGlhdGlvbiBmcm9tIHRoZSBuYW1lc2VydmljZSAoYG5ldC9xcnRyL25zLmNgKSBpbnRvIHRoZSBjb3JlIGxheWVyIChgbmV0L3FydHIvYWZfcXJ0ci5jYCkuIFRoaXMgbWFrZXMgc2Vuc2UgY29uY2VwdHVhbGx5OyBjZW50cmFsaXppbmcgY29yZSBmdW5jdGlvbmFsaXRpZXMgb2Z0ZW4gbGVhZHMgdG8gYmV0dGVyIG1hbmFnZW1lbnQuCgpOb3csIGl0IGNyZWF0ZXMgYSB3b3JrIGl0ZW0sIGBxcnRyX2hlbGxvX3dvcmtgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGlzIHdvcmsgaXRlbSBmdW5jdGlvbnMuIExldCYjMzk7cyBzZWUuLi4gaXQgYXBwZWFycyB0aGUgd29yayBpdGVtIGdldHMgdHJpZ2dlcmVkIHdoZW4gYSBuZXcgbm9kZSBjb21lcyBvbmxpbmUsIEkgcHJlc3VtZS4gSW5zaWRlIGBxcnRyX2hlbGxvX3dvcmtgLCBpdCBzZXRzIHVwIGEgY29udHJvbCBwYWNrZXQgdG8gc2VuZCBhIGBRUlRSX1RZUEVfSEVMTE9gIG1lc3NhZ2UuIEkgc2VlIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyBhcmUgYmVpbmcgaW5pdGlhbGl6ZWQgdXNpbmcgYHN0cnVjdCBzb2NrYWRkcl9xcnRyYC4gVGhlIGRlc3RpbmF0aW9uIG5vZGUgSUQgaXMgdGFrZW4gZnJvbSB0aGUgbm9kZSBvYmplY3QgaXRzZWxmLiBBIGxvb2t1cCBpcyBkb25lIGZvciBgUVJUUl9QT1JUX0NUUkxgLCB3aGljaCBzZWVtcyB0byBiZSB0aGUgY29udHJvbCBwb3J0IGZvciB0aGUgUVJUUiBzeXN0ZW0uIFRoZSBwYWNrZXQgaXMgdGhlbiBhbGxvY2F0ZWQsIHBvcHVsYXRlZCB3aXRoIHRoZSBgUVJUUl9UWVBFX0hFTExPYCBjb21tYW5kLCBhbmQgZW5xdWV1ZWQuCgpJJiMzOTttIG5vdGluZyB0aGF0IGBxcnRyX2FsbG9jX2N0cmxfcGFja2V0YCBpcyB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcgdGhlIGBza2JgIGFuZCBzZXR0aW5nIHRoZSBgcGt0YCBwb2ludGVyLiBJdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gd29ya3MsIGVzcGVjaWFsbHkgaXRzIG1lbW9yeSBhbGxvY2F0aW9uIHN0cmF0ZWd5IGFuZCBhbnkgcG90ZW50aWFsIHJlc291cmNlIGNvbnN0cmFpbnRzIGl0IG1pZ2h0IGludHJvZHVjZSwgb3IgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBsb3dlciBuZXR3b3JraW5nIGxheWVycy4gVGhlIGBxcnRyX25vZGVfZW5xdWV1ZWAgZnVuY3Rpb24gd2FycmFudHMgY2xvc2Ugc2NydXRpbnkgdG9vLiBJdCBzdWdnZXN0cyBhc3luY2hyb25vdXMgY29tbXVuaWNhdGlvbiBpcyBiZWluZyB1c2VkLCBzbyBJIG5lZWQgdG8gY2hlY2sgaG93IGl0IGhhbmRsZXMgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGVycm9yIGNvbmRpdGlvbnMsIGFuZCB0aGUgZmxvdyBvZiB0aGUgY29udHJvbCBwYWNrZXRzIHdpdGhpbiB0aGUgUVJUUiBzdWJzeXN0ZW0uIFRoaXMgZGVzaWduIGlzIGludGVyZXN0aW5nLiBUaGlzIG1vdmUgY291bGQgcG90ZW50aWFsbHkgc3RyZWFtbGluZSBob3cgSEVMTE8gbWVzc2FnZXMgYXJlIGhhbmRsZWQsIGJ1dCBJIG5lZWQgdG8gZGl2ZSBkZWVwZXIgaW50byB0aGUgbG93LWxldmVsIGRldGFpbHMgb2YgdGhvc2UgY2FsbHMgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cXJ0cl9hbGxvY19jdHJsX3BhY2tldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9xcnRyL2FmX3FydHIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcXJ0ci9hZl9xcnRyLmM9NTY2PUVYUE9SVF9TWU1CT0xfR1BMKHFydHJfZW5kcG9pbnRfcG9zdCk7XG4tLVxubmV0L3FydHIvYWZfcXJ0ci5jLTU2OC0vKipcbm5ldC9xcnRyL2FmX3FydHIuYzo1Njk6ICogcXJ0cl9hbGxvY19jdHJsX3BhY2tldCgpIC0gYWxsb2NhdGUgY29udHJvbCBwYWNrZXQgc2tiXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNTcwLSAqIEBwa3Q6IHJlZmVyZW5jZSB0byBxcnRyX2N0cmxfcGt0IHBvaW50ZXJcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNTc3LSAqL1xubmV0L3FydHIvYWZfcXJ0ci5jOjU3ODpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnFydHJfYWxsb2NfY3RybF9wYWNrZXQoc3RydWN0IHFydHJfY3RybF9wa3QgKipwa3QsXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNTc5LVx0XHRcdFx0XHQgICAgICBnZnBfdCBmbGFncylcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmM9NTk0PXN0YXRpYyB2b2lkIHFydHJfaGVsbG9fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L3FydHIvYWZfcXJ0ci5jLTYwOS1cbm5ldC9xcnRyL2FmX3FydHIuYzo2MTA6XHRza2IgPSBxcnRyX2FsbG9jX2N0cmxfcGFja2V0KFx1MDAyNnBrdCwgR0ZQX0tFUk5FTCk7XG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjExLVx0aWYgKCFza2IpIHtcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmM9NjcyPXZvaWQgcXJ0cl9lbmRwb2ludF91bnJlZ2lzdGVyKHN0cnVjdCBxcnRyX2VuZHBvaW50ICplcClcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjk0LVx0XHRzcmMuc3Ffbm9kZSA9IGl0ZXIuaW5kZXg7XG5uZXQvcXJ0ci9hZl9xcnRyLmM6Njk1Olx0XHRza2IgPSBxcnRyX2FsbG9jX2N0cmxfcGFja2V0KFx1MDAyNnBrdCwgR0ZQX0FUT01JQyk7XG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjk2LVx0XHRpZiAoc2tiKSB7XG4tLVxubmV0L3FydHIvYWZfcXJ0ci5jPTc0MT1zdGF0aWMgdm9pZCBxcnRyX3BvcnRfcmVtb3ZlKHN0cnVjdCBxcnRyX3NvY2sgKmlwYylcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNzUxLVxubmV0L3FydHIvYWZfcXJ0ci5jOjc1MjpcdHNrYiA9IHFydHJfYWxsb2NfY3RybF9wYWNrZXQoXHUwMDI2cGt0LCBHRlBfS0VSTkVMKTtcbm5ldC9xcnRyL2FmX3FydHIuYy03NTMtXHRpZiAoc2tiKSB7XG4tLVxubmV0L3FydHIvYWZfcXJ0ci5jPTEwNTk9c3RhdGljIGludCBxcnRyX3NlbmRfcmVzdW1lX3R4KHN0cnVjdCBxcnRyX2NiICpjYilcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmMtMTA3MS1cbm5ldC9xcnRyL2FmX3FydHIuYzoxMDcyOlx0c2tiID0gcXJ0cl9hbGxvY19jdHJsX3BhY2tldChcdTAwMjZwa3QsIEdGUF9LRVJORUwpO1xubmV0L3FydHIvYWZfcXJ0ci5jLTEwNzMtXHRpZiAoIXNrYikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTU5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgcXJ0cl9hbGxvY19jdHJsX3BhY2tldGAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb3JlIHB1cnBvc2UgYW5kIGhvdyBpdCBmaXRzIHdpdGhpbiB0aGUgbGFyZ2VyIFFSVFIgZnJhbWV3b3JrLiBGcm9tIG15IGV4cGVyaWVuY2Ugd2l0aCBtZXNzYWdlIHBhc3Npbmcgc3lzdGVtcywgdGhpcyBsaWtlbHkgaGFuZGxlcyBhbGxvY2F0aW9uIG9mIGNvbnRyb2wgcGFja2V0cywgd2hpY2ggYXJlIHByb2JhYmx5IHVzZWQgZm9yIHNwZWNpZmljIG1hbmFnZW1lbnQgb3Igc2V0dXAgdGFza3Mgd2l0aGluIHRoZSBRUlRSIHByb3RvY29sLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGlzIGEgY3JpdGljYWwgZnVuY3Rpb247IGl0JiMzOTtzIHRoZSBnYXRld2F5IGZvciBzZW5kaW5nIGFuZCByZWNlaXZpbmcgY29udHJvbCBtZXNzYWdlcywgYW5kIGluZWZmaWNpZW50IGFsbG9jYXRpb24gY291bGQgZWFzaWx5IGJlY29tZSBhIGJvdHRsZW5lY2suIEkmIzM5O20gYWxzbyBpbnRlcmVzdGVkIGluIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBtZW1vcnkgbWFuYWdlbWVudCDigJMgYXJlIHdlIHRhbGtpbmcgYWJvdXQgc2xhYiBhbGxvY2F0aW9uLCBhIGN1c3RvbSBwb29sLCBvciBqdXN0IHBsYWluIGBrbWFsbG9jYD8gRG9lcyBpdCBoYW5kbGUgcG90ZW50aWFsIGZhaWx1cmUgZ3JhY2VmdWxseSwgYW5kIGlmIHNvLCBob3c/IEkmIzM5O20gYW50aWNpcGF0aW5nIHRoYXQgd2UmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzIG9yIHJhY2UgY29uZGl0aW9ucywgdGhpcyBpcyBjcml0aWNhbCBmcm9tIGEgc2VjdXJpdHkgYXNwZWN0LiBLbm93aW5nIHRoZSBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZXMgYW5kIHRoZSBzaXplIG9mIHRoZXNlIGNvbnRyb2wgcGFja2V0cyBpcyBhbHNvIGtleSDigJMgYXJlIHRoZXkgZml4ZWQtc2l6ZSwgb3IgZG9lcyB0aGlzIGZ1bmN0aW9uIGFsc28gaGFuZGxlIHZhcmlhYmxlLWxlbmd0aCBtZXNzYWdlcz8gQXJlIHRoZXJlIGFueSBhc3NvY2lhdGVkIGxvY2tzIG9yIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLCBhbmQgaWYgc28gd2hhdCBpcyB0aGVpciBwdXJwb3NlPyBMZXQgbWUgc3RhcnQgYnkgbG9va2luZyBmb3IgYW55IGNvbW1lbnRzIHdpdGhpbiB0aGUgY29kZSwgYW5kIGlmIHRoZXJlIGFyZSBub25lLCBJIGFtIGdvaW5nIHRvIGhhdmUgdG8gbWFrZSBpbmZlcmVuY2VzIGJhc2VkIG9uIHRoZSBzb3VyY2UgY29kZSwgYW5kIGl0cyByZWxhdGVkIHVzYWdlLiBJJiMzOTttIHJlYWR5IHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZCB0aGlzIGluIGRldGFpbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvcXJ0ci9hZl9xcnRyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NzgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU3ODpcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcXJ0cl9hbGxvY19jdHJsX3BhY2tldChzdHJ1Y3QgcXJ0cl9jdHJsX3BrdCAqKnBrdCxcbiA1Nzk6XHRcdFx0XHRcdFx0ICAgICAgZ2ZwX3QgZmxhZ3MpXG4gNTgwOlx0e1xuIDU4MTpcdFx0Y29uc3QgaW50IHBrdF9sZW4gPSBzaXplb2Yoc3RydWN0IHFydHJfY3RybF9wa3QpO1xuIDU4MjpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiA1ODM6XHRcbiA1ODQ6XHRcdHNrYiA9IGFsbG9jX3NrYihRUlRSX0hEUl9NQVhfU0laRSAmIzQzOyBwa3RfbGVuLCBmbGFncyk7XG4gNTg1Olx0XHRpZiAoIXNrYilcbiA1ODY6XHRcdFx0cmV0dXJuIE5VTEw7XG4gNTg3Olx0XG4gNTg4Olx0XHRza2JfcmVzZXJ2ZShza2IsIFFSVFJfSERSX01BWF9TSVpFKTtcbiA1ODk6XHRcdCpwa3QgPSBza2JfcHV0X3plcm8oc2tiLCBwa3RfbGVuKTtcbiA1OTA6XHRcbiA1OTE6XHRcdHJldHVybiBza2I7XG4gNTkyOlx0fVxuIDU5MzpcdFxuIDU5NDpcdHN0YXRpYyB2b2lkIHFydHJfaGVsbG9fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gNTk1Olx0e1xuIDU5NjpcdFx0c3RydWN0IHNvY2thZGRyX3FydHIgZnJvbSA9IHtBRl9RSVBDUlRSLCAwLCBRUlRSX1BPUlRfQ1RSTH07XG4gNTk3Olx0XHRzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciB0byA9IHtBRl9RSVBDUlRSLCAwLCBRUlRSX1BPUlRfQ1RSTH07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyNDEKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBRUlRSIENvbnRyb2wgUGFja2V0IEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhpcyBgcXJ0cl9hbGxvY19jdHJsX3BhY2tldGAgZnVuY3Rpb24gd29ya3MuIEl0JiMzOTtzIHVzaW5nIGBza2JfcHV0X3plcm9gLCB3aGljaCBpcyBhIHByZXR0eSBzdGFuZGFyZCBtZXRob2QuIFRoaXMgbWVhbnMgdGhlIGBzdHJ1Y3QgcXJ0cl9jdHJsX3BrdGAgSSYjMzk7bSBhbGxvY2F0aW5nIGlzIGNvbXBsZXRlbHkgemVyb2VkIG91dCBpbml0aWFsbHkg4oCTIGdvb2QsIHByZXZlbnRzIHBvdGVudGlhbCBnYXJiYWdlIGRhdGEgaXNzdWVzLiBJIHNlZSBgcXJ0cl9oZWxsb193b3JrYCB0aGVuIHNldHMgYHBrdC0mZ3Q7Y21kID0gY3B1X3RvX2xlMzIoUVJUUl9UWVBFX0hFTExPKTtgLiBNYWtlcyBzZW5zZSwgdGhlIGNvbW1hbmQgdHlwZSBuZWVkcyB0byBiZSBzZXQuIEFuZCB0aGUgcmVzdCBvZiB0aGUgcGFja2V0IHJlbWFpbnMgemVyb2VkLgoKTm93LCBJJiMzOTttIG5vdGluZyB0aGUgYGZyb21gIGFuZCBgdG9gIGFyZSBpbml0aWFsaXplZCB3aXRoIGB7QUZfUUlQQ1JUUiwgMCwgUVJUUl9QT1JUX0NUUkx9YC4gVGhpcyBsb29rcyBsaWtlIHRoZSBzdGFuZGFyZCBhZGRyZXNzIHN0cnVjdHVyZSBmb3IgUVJUUi4gQnV0IHdhaXQsIGBzdHJ1Y3Qgc29ja2FkZHJfcXJ0cmAuLi4gbGV0IG1lIHJlY2FsbCwgdGhhdCBoYXMgZmllbGRzIGZvciBgc3FfZmFtaWx5YCwgYHNxX25vZGVgLCBhbmQgYHNxX3BvcnRgLgoKVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGhlcmUgaXM6IGFyZSB0aGVyZSBhbnkgcGFkZGluZyBieXRlcyBpbiBgc3RydWN0IHNvY2thZGRyX3FydHJgPyBUaGlzIGlzIHRoZSBraW5kIG9mIGRldGFpbCB0aGF0IGNhbiBiaXRlIHlvdSBsYXRlci4gSWYgdGhlcmUmIzM5O3MgcGFkZGluZywgYW5kIHRoZSBjb2RlIG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IGNvbnRpZ3VvdXMgbWVtb3J5LCB0aGluZ3MgY291bGQgZ28gc2lkZXdheXMuIE5lZWQgdG8gYmUgc3VyZSBhYm91dCB0aGUgc3RydWN0dXJlJiMzOTtzIGV4YWN0IGxheW91dC4gUmlnaHQsIHRpbWUgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBzb2NrYWRkcl9xcnRyYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IHNvY2thZGRyX3FydHIgXFx7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS91YXBpL2xpbnV4L3FydHIuaC0xMC1cbmluY2x1ZGUvdWFwaS9saW51eC9xcnRyLmg6MTE6c3RydWN0IHNvY2thZGRyX3FydHIge1xuaW5jbHVkZS91YXBpL2xpbnV4L3FydHIuaC0xMi1cdF9fa2VybmVsX3NhX2ZhbWlseV90IHNxX2ZhbWlseTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjgyMgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBpbml0aWFsIHRob3VnaHRzOgoKKipQZWVyaW5nIGludG8gdGhlIENvcmUgb2YgUVJUUioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgZGVsdmUgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIHRoZSBRUlRSIGtlcm5lbCBpbnRlcmZhY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHRoaW5nIG9wZXJhdGVzIGF0IGEgZnVuZGFtZW50YWwgbGV2ZWwsIHNvIHRoZSBmaXJzdCBzdGVwIGlzIGFsd2F5cyB0byBleGFtaW5lIHRoZSBoZWFkZXIgZmlsZS4gSSBrbm93IHRoYXQgYGluY2x1ZGUvdWFwaS9saW51eC9xcnRyLmhgIGhvbGRzIHRoZSBrZXkgZGVmaW5pdGlvbnMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGRhdGEgc3RydWN0dXJlcywgY29uc3RhbnRzLCBhbmQgZnVuY3Rpb24gcHJvdG90eXBlcyB0aGF0IGZvcm0gdGhlIGZvdW5kYXRpb24gb2YgdGhlIFVzZXItc3BhY2UtdG8tS2VybmVsLXNwYWNlIGFuZCBLZXJuZWwtc3BhY2UtdG8tS2VybmVsLXNwYWNlIGNvbW11bmljYXRpb24gcHJvdG9jb2wuIEkgd2FudCB0byBzZWUgaG93IG1lc3NhZ2VzIGFyZSBzdHJ1Y3R1cmVkLCBob3cgZW5kcG9pbnRzIGFyZSBkZWZpbmVkLCBhbmQgd2hhdCB0eXBlcyBvZiBvcGVyYXRpb25zIGFyZSBzdXBwb3J0ZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBtZW50YWwgbW9kZWwgb2YgdGhlIEFQSSYjMzk7cyBhcmNoaXRlY3R1cmUgYW5kIHRoZSB1bmRlcmx5aW5nIHByaW5jaXBsZXMgdGhhdCBkcml2ZSBpdHMgb3BlcmF0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgc2VjcmV0cyB0aGlzIGhlYWRlciBmaWxlIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS91YXBpL2xpbnV4L3FydHIuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMTE6XHRzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciB7XG4gIDEyOlx0XHRfX2tlcm5lbF9zYV9mYW1pbHlfdCBzcV9mYW1pbHk7XG4gIDEzOlx0XHRfX3UzMiBzcV9ub2RlO1xuICAxNDpcdFx0X191MzIgc3FfcG9ydDtcbiAgMTU6XHR9O1xuICAxNjpcdFxuICAxNzpcdGVudW0gcXJ0cl9wa3RfdHlwZSB7XG4gIDE4Olx0XHRRUlRSX1RZUEVfREFUQVx0XHQ9IDEsXG4gIDE5Olx0XHRRUlRSX1RZUEVfSEVMTE9cdFx0PSAyLFxuICAyMDpcdFx0UVJUUl9UWVBFX0JZRVx0XHQ9IDMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyMjgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBQYWRkaW5nIElzc3VlcyBpbiBRUlRSIFNvY2tldCBTdHJ1Y3R1cmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYF9fa2VybmVsX3NhX2ZhbWlseV90YCB0eXBlLCBhbmQgaXQmIzM5O3MgYWxtb3N0IGFsd2F5cyBhIDItYnl0ZSBgdW5zaWduZWQgc2hvcnRgLiBUaGVuIHRoZXJlJiMzOTtzIHRoZSBgc3Ffbm9kZWAgZmllbGQsIHdoaWNoIGlzIGEgNC1ieXRlIGBfX3UzMmAuIEhtbSwgdGhhdCBtZWFucyB0aGVyZSYjMzk7cyBwcm9iYWJseSAyIGJ5dGVzIG9mIHBhZGRpbmcgYmV0d2VlbiBgc3FfZmFtaWx5YCBhbmQgYHNxX25vZGVgIGluIHRoZSBgc29ja2FkZHJgIHN0cnVjdHVyZS4gSSBuZWVkIHRvIGJlIHN1cmUuCgpXYWl0LCBub3cgSSBzZWUgdGhlIGBzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciBmcm9tID0ge0FGX1FJUENSVFIsIDAsIFFSVFJfUE9SVF9DVFJMfTtgIGRlY2xhcmF0aW9uLiBUaGlzIGlzIGEgbG9jYWwgdmFyaWFibGUgb24gdGhlIHN0YWNrLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgc3RydWN0dXJlLCB0aGlzIGBzb2NrYWRkcl9xcnRyYCwgaXMgY29waWVkIHRvIHVzZXJzcGFjZSBvciBpZiBpdCYjMzk7cyBzZW50IG92ZXIgdGhlIG5ldHdvcmsuIElmIHNvLCBwYWRkaW5nIGNvdWxkIGNhdXNlIHByb2JsZW1zLCBhbmQgSSBuZWVkIHRvIGNvbnNpZGVyIHBvdGVudGlhbCBlbmRpYW5uZXNzIGlzc3Vlcywgb2YgY291cnNlLiBMZXQmIzM5O3MgZGlnIGRlZXBlciB0byBzZWUgZXhhY3RseSB3aGVyZSBhbmQgaG93IHRoaXMgYHNvY2thZGRyX3FydHJgIHN0cnVjdHVyZSBpcyBoYW5kbGVkLiBTcGVjaWZpY2FsbHksIGxldCYjMzk7cyB0cmFjZSB0aGlzIHRvIHRoZSBgcXJ0cl9ub2RlX2VucXVldWVgIGZ1bmN0aW9uLiBJIHdpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaGFwcGVucyB0byB0aGUgZGF0YS4gSSYjMzk7bSBnb2luZyB0byBsb29rIHRocm91Z2ggdGhlIHN1cnJvdW5kaW5nIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3FydHJfbm9kZV9lbnF1ZXVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3FydHIvYWZfcXJ0ci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9xcnRyL2FmX3FydHIuYz0zMjk9c3RhdGljIHZvaWQgcXJ0cl90eF9mbG93X2ZhaWxlZChzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBpbnQgZGVzdF9ub2RlLFxuLS1cbm5ldC9xcnRyL2FmX3FydHIuYy0zNDMtLyogUGFzcyBhbiBvdXRnb2luZyBwYWNrZXQgc29ja2V0IGJ1ZmZlciB0byB0aGUgZW5kcG9pbnQgZHJpdmVyLiAqL1xubmV0L3FydHIvYWZfcXJ0ci5jOjM0NDpzdGF0aWMgaW50IHFydHJfbm9kZV9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvcXJ0ci9hZl9xcnRyLmMtMzQ1LVx0XHRcdCAgICAgaW50IHR5cGUsIHN0cnVjdCBzb2NrYWRkcl9xcnRyICpmcm9tLFxuLS1cbm5ldC9xcnRyL2FmX3FydHIuYz01OTQ9c3RhdGljIHZvaWQgcXJ0cl9oZWxsb193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjE4LVx0dG8uc3Ffbm9kZSA9IG5vZGUtXHUwMDNlbmlkO1xubmV0L3FydHIvYWZfcXJ0ci5jOjYxOTpcdHFydHJfbm9kZV9lbnF1ZXVlKG5vZGUsIHNrYiwgUVJUUl9UWVBFX0hFTExPLCBcdTAwMjZmcm9tLCBcdTAwMjZ0byk7XG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjIwLVx0cXJ0cl9wb3J0X3B1dChjdHJsKTtcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmM9OTMwPXN0YXRpYyBpbnQgcXJ0cl9iY2FzdF9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3FydHIvYWZfcXJ0ci5jLTk0Ni1cdFx0c2tiX3NldF9vd25lcl93KHNrYm4sIHNrYi1cdTAwM2Vzayk7XG5uZXQvcXJ0ci9hZl9xcnRyLmM6OTQ3Olx0XHRxcnRyX25vZGVfZW5xdWV1ZShub2RlLCBza2JuLCB0eXBlLCBmcm9tLCB0byk7XG5uZXQvcXJ0ci9hZl9xcnRyLmMtOTQ4LVx0fVxuLS1cbm5ldC9xcnRyL2FmX3FydHIuYz05NTY9c3RhdGljIGludCBxcnRyX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxuLS1cbm5ldC9xcnRyL2FmX3FydHIuYy0xMDE2LVx0XHR9XG5uZXQvcXJ0ci9hZl9xcnRyLmM6MTAxNzpcdFx0ZW5xdWV1ZV9mbiA9IHFydHJfbm9kZV9lbnF1ZXVlO1xubmV0L3FydHIvYWZfcXJ0ci5jLTEwMTgtXHR9XG4tLVxubmV0L3FydHIvYWZfcXJ0ci5jPTEwNTk9c3RhdGljIGludCBxcnRyX3NlbmRfcmVzdW1lX3R4KHN0cnVjdCBxcnRyX2NiICpjYilcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmMtMTA4MS1cbm5ldC9xcnRyL2FmX3FydHIuYzoxMDgyOlx0cmV0ID0gcXJ0cl9ub2RlX2VucXVldWUobm9kZSwgc2tiLCBRUlRSX1RZUEVfUkVTVU1FX1RYLCBcdTAwMjZsb2NhbCwgXHUwMDI2cmVtb3RlKTtcbm5ldC9xcnRyL2FmX3FydHIuYy0xMDgzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzMxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgcXJ0cl9ub2RlX2VucXVldWVgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHF1ZXVpbmcgbWVjaGFuaXNtIHdpdGhpbiB0aGUgUU1JIFJlYWwtVGltZSAoUVJUUikgZnJhbWV3b3JrLiBNeSBleHBlcnRpc2UgbGllcyBpbiBlbWJlZGRlZCBzeXN0ZW1zIGFuZCBsb3ctbGV2ZWwgY29tbXVuaWNhdGlvbiBwcm90b2NvbHMsIHNvIHRoaXMgc2hvdWxkIGJlIHdpdGhpbiBteSB3aGVlbGhvdXNlLiBJJiMzOTttIGZvY3VzaW5nIG9uIGhvdyBtZXNzYWdlcyBhcmUgZW5xdWV1ZWQuIEnigJlsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgcmFjZSBjb25kaXRpb25zIHRoaXMgaW1wbGVtZW50YXRpb24gbWlnaHQgaW50cm9kdWNlLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoaXMgaXMgYSByZWFsLXRpbWUgc3lzdGVtLiBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHF1ZXN0aW9ucyBhYm91dCBpbnRlcnJ1cHQgaGFuZGxpbmcg4oCTIGlzIHRoaXMgYXRvbWljPyBBcmUgdGhlcmUgc3BpbmxvY2tzPyBJIHdhbnQgdG8gc2VlIHRoZSBsb2NraW5nIG1lY2hhbmlzbXMsIGlmIGFueSwgdGhhdCBhcmUgdXNlZCB0byBwcm90ZWN0IHRoZSBxdWV1ZSBmcm9tIGNvbmN1cnJlbnQgYWNjZXNzLCBlc3BlY2lhbGx5IGlmIGRlYWxpbmcgd2l0aCBtdWx0aXBsZSBwcm9jZXNzb3JzIG9yIHRocmVhZHMuIEFuZCBjcml0aWNhbGx5LCBpcyB0aGVyZSBhbnkgcHJpb3JpdHkgbWFuYWdlbWVudCBiZWluZyB1c2VkLCBhbmQgaWYgc28gaG93PyBJJiMzOTtsbCBhbHNvIGJlIGNvbnNpZGVyaW5nIHRoZSBpbXBsaWNhdGlvbnMgb2YgZXJyb3IgaGFuZGxpbmcgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBiYWNrLW9mZiBzdHJhdGVnaWVzIGVtcGxveWVkIGlmIHRoZSBxdWV1ZSBpcyBmdWxsIG9yIGV4cGVyaWVuY2luZyBjb250ZW50aW9uLiBUaGUgb3ZlcmFsbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgYXJlIGZyb250IG9mIG1pbmQuIFRoaXMga2luZCBvZiBsb3ctbGV2ZWwgZGV0YWlsIGlzIHdoZXJlIHRoZSByZWFsIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMgY2FuIGJlIGZvdW5kLCBvciB3aGVyZSBjcml0aWNhbCBidWdzIGNhbiBoaWRlLiBMZXTigJlzIHNlZSB3aGF0JiMzOTtzIHVuZGVyIHRoZSBob29kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9xcnRyL2FmX3FydHIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM0NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzQ0Olx0c3RhdGljIGludCBxcnRyX25vZGVfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIDM0NTpcdFx0XHRcdCAgICAgaW50IHR5cGUsIHN0cnVjdCBzb2NrYWRkcl9xcnRyICpmcm9tLFxuIDM0NjpcdFx0XHRcdCAgICAgc3RydWN0IHNvY2thZGRyX3FydHIgKnRvKVxuIDM0NzpcdHtcbiAzNDg6XHRcdHN0cnVjdCBxcnRyX2hkcl92MSAqaGRyO1xuIDM0OTpcdFx0c2l6ZV90IGxlbiA9IHNrYi1cdTAwM2VsZW47XG4gMzUwOlx0XHRpbnQgcmMsIGNvbmZpcm1fcng7XG4gMzUxOlx0XG4gMzUyOlx0XHRtdXRleF9sb2NrKFx1MDAyNm5vZGUtXHUwMDNlZXBfbG9jayk7XG4gMzUzOlx0XHRpZiAoIW5vZGUtXHUwMDNlaGVsbG9fc2VudCBcdTAwMjZcdTAwMjYgdHlwZSAhPSBRUlRSX1RZUEVfSEVMTE8pIHtcbiAzNTQ6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5vZGUtXHUwMDNlZXBfbG9jayk7XG4gMzU1Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDM1NjpcdFx0XHRyZXR1cm4gMDtcbiAzNTc6XHRcdH1cbiAzNTg6XHRcdG11dGV4X3VubG9jayhcdTAwMjZub2RlLVx1MDAzZWVwX2xvY2spO1xuIDM1OTpcdFxuIDM2MDpcdFx0Y29uZmlybV9yeCA9IHFydHJfdHhfd2FpdChub2RlLCB0by1cdTAwM2VzcV9ub2RlLCB0by1cdTAwM2VzcV9wb3J0LCB0eXBlKTtcbiAzNjE6XHRcdGlmIChjb25maXJtX3J4IFx1MDAzYyAwKSB7XG4gMzYyOlx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDM2MzpcdFx0XHRyZXR1cm4gY29uZmlybV9yeDtcbiAzNjQ6XHRcdH1cbiAzNjU6XHRcbiAzNjY6XHRcdGhkciA9IHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpoZHIpKTtcbiAzNjc6XHRcdGhkci1cdTAwM2V2ZXJzaW9uID0gY3B1X3RvX2xlMzIoUVJUUl9QUk9UT19WRVJfMSk7XG4gMzY4Olx0XHRoZHItXHUwMDNldHlwZSA9IGNwdV90b19sZTMyKHR5cGUpO1xuIDM2OTpcdFx0aGRyLVx1MDAzZXNyY19ub2RlX2lkID0gY3B1X3RvX2xlMzIoZnJvbS1cdTAwM2VzcV9ub2RlKTtcbiAzNzA6XHRcdGhkci1cdTAwM2VzcmNfcG9ydF9pZCA9IGNwdV90b19sZTMyKGZyb20tXHUwMDNlc3FfcG9ydCk7XG4gMzcxOlx0XHRpZiAodG8tXHUwMDNlc3FfcG9ydCA9PSBRUlRSX1BPUlRfQ1RSTCkge1xuIDM3MjpcdFx0XHRoZHItXHUwMDNlZHN0X25vZGVfaWQgPSBjcHVfdG9fbGUzMihub2RlLVx1MDAzZW5pZCk7XG4gMzczOlx0XHRcdGhkci1cdTAwM2Vkc3RfcG9ydF9pZCA9IGNwdV90b19sZTMyKFFSVFJfUE9SVF9DVFJMKTtcbiAzNzQ6XHRcdH0gZWxzZSB7XG4gMzc1Olx0XHRcdGhkci1cdTAwM2Vkc3Rfbm9kZV9pZCA9IGNwdV90b19sZTMyKHRvLVx1MDAzZXNxX25vZGUpO1xuIDM3NjpcdFx0XHRoZHItXHUwMDNlZHN0X3BvcnRfaWQgPSBjcHVfdG9fbGUzMih0by1cdTAwM2VzcV9wb3J0KTtcbiAzNzc6XHRcdH1cbiAzNzg6XHRcbiAzNzk6XHRcdGhkci1cdTAwM2VzaXplID0gY3B1X3RvX2xlMzIobGVuKTtcbiAzODA6XHRcdGhkci1cdTAwM2Vjb25maXJtX3J4ID0gY3B1X3RvX2xlMzIoISFjb25maXJtX3J4KTtcbiAzODE6XHRcbiAzODI6XHRcdHJjID0gc2tiX3B1dF9wYWR0byhza2IsIEFMSUdOKGxlbiwgNCkgJiM0Mzsgc2l6ZW9mKCpoZHIpKTtcbiAzODM6XHRcbiAzODQ6XHRcdGlmICghcmMpIHtcbiAzODU6XHRcdFx0bXV0ZXhfbG9jayhcdTAwMjZub2RlLVx1MDAzZWVwX2xvY2spO1xuIDM4NjpcdFx0XHRyYyA9IC1FTk9ERVY7XG4gMzg3Olx0XHRcdGlmIChub2RlLVx1MDAzZWVwKVxuIDM4ODpcdFx0XHRcdHJjID0gbm9kZS1cdTAwM2VlcC1cdTAwM2V4bWl0KG5vZGUtXHUwMDNlZXAsIHNrYik7XG4gMzg5Olx0XHRcdGVsc2VcbiAzOTA6XHRcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAzOTE6XHRcdFx0aWYgKCFyYyBcdTAwMjZcdTAwMjYgdHlwZSA9PSBRUlRSX1RZUEVfSEVMTE8pXG4gMzkyOlx0XHRcdFx0bm9kZS1cdTAwM2VoZWxsb19zZW50ID0gdHJ1ZTtcbiAzOTM6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5vZGUtXHUwMDNlZXBfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1MjAKCQkJCQkJCW91dHB1dDogMjkwCgkJCQkJCQl0aG91Z2h0czogMjU2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgUVJUUiBIZWxsbyBIYW5kc2hha2UgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gTGV0JiMzOTtzIHRyYWNlIG15IHRob3VnaHQgcHJvY2VzcyBzdGVwIGJ5IHN0ZXAsIGFzIEkgZG8gYSBkZWVwIGRpdmUgaGVyZS4KCkZpcnN0LCBgcXJ0cl9ub2RlX2VucXVldWVgLiBJIGNvbmZpcm1lZCB0aGF0IG9ubHkgYGZyb20tJmd0O3NxX25vZGVgIGFuZCBgZnJvbS0mZ3Q7c3FfcG9ydGAgYXJlIHJlYWQgZnJvbSB0aGUgYHN0cnVjdCBzb2NrYWRkcl9xcnRyYCBzdHJ1Y3R1cmUsIGFuZCBpdCBjb3JyZWN0bHkgaWdub3JlcyB0aGUgdW5pbml0aWFsaXplZCBwYWRkaW5nLiBObyBsZWFrIHRoZXJlLiBBbmQgd2l0aCBgc2tiX3B1dF9wYWR0b2AsIHRoYXQgaXMgZG9pbmcgcGFkZGluZyB3aXRoIHplcm9lcywgc28gbm8gcHJvYmxlbSB0aGVyZS4KClRoZW4sIEkgbG9va2VkIGNsb3NlbHkgYXQgYHFydHJfYWxsb2NfY3RybF9wYWNrZXRgLiBUaGUgYHNrYl9wdXRfemVyb2AgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IHRoZSBlbnRpcmUgYHN0cnVjdCBxcnRyX2N0cmxfcGt0YCBpcyB6ZXJvZWQuIFRoaXMgaXMgaW1wb3J0YW50OiBubyB1bmluaXRpYWxpemVkIHZhbHVlcyB3aXRoaW4gdGhlIGNvbnRyb2wgcGFja2V0IGl0c2VsZi4KCkkgY2FyZWZ1bGx5IGV4YW1pbmVkIHRoZSBjb2RlIGFkZGVkIGluIHRoZSBwYXRjaC4gVGhlIG5ldyBjaGVjayBpbiBgcXJ0cl9ub2RlX2VucXVldWVgIHRoYXQgZHJvcHMgcGFja2V0cyBpZiBgaGVsbG9fc2VudGAgaXMgZmFsc2UgYW5kIGl0JiMzOTtzIG5vdCBhIEhFTExPIHBhY2tldCBpcyBnb29kLiBUaGUgZm9sbG93LXVwIGNvZGUgYmxvY2sgaW4gdGhlIHNhbWUgZnVuY3Rpb24gdGhlbiBzZXRzIGBoZWxsb19zZW50YCB0byB0cnVlIHdoZW4gdGhlIEhFTExPIHBhY2tldCB0cmFuc21pdHMgc3VjY2Vzc2Z1bGx5LiBBbmQsIGlmIHRyYW5zbWlzc2lvbiBmYWlscywgaXQgcmVzY2hlZHVsZXMgdGhlIGBzYXlfaGVsbG9gIHdvcmsuCgpUaGUgYHFydHJfaGVsbG9fd29ya2AgZnVuY3Rpb24gaXMgY3J1Y2lhbC4gSXQgYWxsb2NhdGVzIGEgY29udHJvbCBwYWNrZXQsIHNldHMgdGhlIGNvbW1hbmQsIGFuZCBlbnF1ZXVlcyBpdC4gS2V5IHBvaW50cyBhcmUgdGhhdCBgcXJ0cl9hbGxvY19jdHJsX3BhY2tldGAgemVyby1pbml0aWFsaXplcyB0aGUgcGFja2V0IGFuZCwgaW4gdGhpcyBjYXNlLCBgZnJvbWAgYW5kIGB0b2AgYXJlIHN0YWNrIHZhcmlhYmxlcywgYW5kIG9ubHkgYHNxX25vZGVgIGFuZCBgc3FfcG9ydGAgYXJlIHJlYWQgZnJvbSB0aGVtLiBUaGUgcmVzdCBvZiB0aGUgZmllbGRzIGFyZSBpcnJlbGV2YW50LgoKV2hlbiBhbiBlbmRwb2ludCBpcyByZWdpc3RlcmVkLCB0aGlzIGluaXRpYWxpemVzIHRoZSB3b3JrIGFuZCBpbW1lZGlhdGVseSBzY2hlZHVsZXMgdGhlIHdvcmsgZnVuY3Rpb24gdmlhIGBzY2hlZHVsZV93b3JrKClgLiBUaGUgYnJvYWRjYXN0IGVucXVldWUsIHNraXBzIG5vZGVzIHdpdGggYFFSVFJfRVBfTklEX0FVVE9gIHdoaWxlIGJyb2FkY2FzdGluZy4KCkZpbmFsbHksIHRoZSBuYW1lc2VydmljZSBjb2RlIGdldHMgdXBkYXRlZCB0byByZW1vdmUgdGhlIGBzYXlfaGVsbG9gIGNhbGwgc2luY2UgaXQmIzM5O3Mgbm93IGhhbmRsZWQgYnkgdGhlIGNvcmUgbGF5ZXIuCgpTbywgbGV0JiMzOTtzIHJlY2FwIG15IGNvcmUgcG9pbnRzOgoqICAgVGhlIGBza2JgIGlzIHplcm9lZC4KKiAgIFRoZSBzdGFjay1hbGxvY2F0ZWQgYHN0cnVjdCBzb2NrYWRkcl9xcnRyYCBgZnJvbWAgYW5kIGB0b2Agc3RydWN0dXJlcyBoYXZlIHBhcnRpYWxseSBpbml0aWFsaXplZCBmaWVsZHMsIGJ1dCBvbmx5IGluaXRpYWxpemVkIHBhcnRzIGFyZSByZWFkLgoqICAgVGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLgoqICAgVGhlIHBhdGNoIGhhcyBubyBjb2RlIHRoYXQgbW9kaWZpZXMgdGhlIGxlbmd0aHMgb3IgYm91bmRzIGNoZWNrcyBpbiBhIHdheSB0byBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpUaGlzIGxlYXZlcyBtZSByZWFzb25hYmx5IGNvbmZpZGVudCB0aGF0IHRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGluZm9ybWF0aW9uIGxlYWsgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBidWdzLiBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQgbWVtb3J5IHNhZmV0eSB0b29scyBzaG91bGQgYWRlcXVhdGVseSBkZXRlY3QgYW55IGlzc3Vlcy4KClRoZSBgc3RydWN0IHNvY2thZGRyX3FydHJgIGluaXRpYWxpemF0aW9uLiBJIGRvdWJsZS1jaGVja2VkIHRoYXQgYHN0cnVjdCBzb2NrYWRkcl9xcnRyIGZyb20gPSB7QUZfUUlQQ1JUUiwgMCwgUVJUUl9QT1JUX0NUUkx9O2AgZG9lcyB3aGF0IEkgdGhpbmsgaXQgZG9lcy4gVGhlIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQgYnkgdGhlIGluaXRpYWxpemVyIGxpc3QsIGFuZCB0aGUgQzk5IHN0YW5kYXJkIGVuc3VyZXMgcmVtYWluaW5nIG1lbWJlcnMgYXJlIGluaXRpYWxpemVkIGFzIHRob3VnaCB0aGV5IGhhZCBzdGF0aWMgc3RvcmFnZSBkdXJhdGlvbiwgd2hpY2ggbWVhbnMgemVyby4gSG93ZXZlciwgZXZlbiBpZiBwYWRkaW5nIGJ5dGVzIHdlcmVuJiMzOTt0IHplcm8taW5pdGlhbGl6ZWQsIHRoZXkgYXJlIG5ldmVyIHJlYWQgb3IgbGVha2VkLCBzaW5jZSBvbmx5IGBzcV9ub2RlYCBhbmQgYHNxX3BvcnRgIGFyZSB1c2VkIGluIGBxcnRyX25vZGVfZW5xdWV1ZWAuCgpPa2F5LCBJJiMzOTttIGNvbmZpZGVudC4gTm8gcmlzayBoZXJlLiBTZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFFSVFIgc3Vic3lzdGVtIHRvIGluaXRpYXRlIHRoZSBIRUxMTyBoYW5kc2hha2UgZnJvbSB0aGUgY29yZSBsYXllciBpbnN0ZWFkIG9mIHRoZSBuYW1lc2VydmljZS4gSXQgaW50cm9kdWNlcyBhIG5ldyB3b3JrIGl0ZW0gYHFydHJfaGVsbG9fd29ya2Agd2hpY2ggYWxsb2NhdGVzIGEgY29udHJvbCBwYWNrZXQgYW5kIGVucXVldWVzIGl0LiBUaGUgY29udHJvbCBwYWNrZXQgaXMgYWxsb2NhdGVkIHVzaW5nIGBxcnRyX2FsbG9jX2N0cmxfcGFja2V0YCwgd2hpY2ggdXNlcyBgc2tiX3B1dF96ZXJvYCB0byBmdWxseSB6ZXJvLWluaXRpYWxpemUgdGhlIHBhY2tldCBwYXlsb2FkLiBUaGUgc3RhY2stYWxsb2NhdGVkIGBzdHJ1Y3Qgc29ja2FkZHJfcXJ0cmAgdmFyaWFibGVzIChgZnJvbWAgYW5kIGB0b2ApIGFyZSB1c2VkIHRvIHBhc3MgYWRkcmVzc2VzIHRvIGBxcnRyX25vZGVfZW5xdWV1ZWAsIHdoaWNoIG9ubHkgcmVhZHMgdGhlaXIgYHNxX25vZGVgIGFuZCBgc3FfcG9ydGAgZmllbGRzIHRvIHBvcHVsYXRlIHRoZSBwYWNrZXQgaGVhZGVyLiBUaGUgYHN0cnVjdCBzb2NrYWRkcl9xcnRyYCBpdHNlbGYgaXMgbm90IGNvcGllZCB0byB0aGUgcGFja2V0IG9yIHRvIHVzZXJzcGFjZSwgc28gYW55IHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBieXRlcyBvbiB0aGUgc3RhY2sgYXJlIG5ldmVyIHJlYWQgb3IgbGVha2VkLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSwgbm9yIGRvZXMgaXQgbW9kaWZ5IGJvdW5kcyBjaGVja3Mgb3IgbGVuZ3RocyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoZS5nLiwgdXNlLWFmdGVyLWZyZWUsIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvciBsb2NraW5nIGlzc3Vlcykgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQLCBvciBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgUVJUUiBzdWJzeXN0ZW0gdG8gaW5pdGlhdGUgdGhlIEhFTExPIGhhbmRzaGFrZSBmcm9tIHRoZSBjb3JlIGxheWVyIGluc3RlYWQgb2YgdGhlIG5hbWVzZXJ2aWNlLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IHdvcmsgaXRlbSBgcXJ0cl9oZWxsb193b3JrYCB3aGljaCBhbGxvY2F0ZXMgYSBjb250cm9sIHBhY2tldCBhbmQgZW5xdWV1ZXMgaXQuIFRoZSBjb250cm9sIHBhY2tldCBpcyBhbGxvY2F0ZWQgdXNpbmcgYHFydHJfYWxsb2NfY3RybF9wYWNrZXRgLCB3aGljaCB1c2VzIGBza2JfcHV0X3plcm9gIHRvIGZ1bGx5IHplcm8taW5pdGlhbGl6ZSB0aGUgcGFja2V0IHBheWxvYWQuIFRoZSBzdGFjay1hbGxvY2F0ZWQgYHN0cnVjdCBzb2NrYWRkcl9xcnRyYCB2YXJpYWJsZXMgKGBmcm9tYCBhbmQgYHRvYCkgYXJlIHVzZWQgdG8gcGFzcyBhZGRyZXNzZXMgdG8gYHFydHJfbm9kZV9lbnF1ZXVlYCwgd2hpY2ggb25seSByZWFkcyB0aGVpciBgc3Ffbm9kZWAgYW5kIGBzcV9wb3J0YCBmaWVsZHMgdG8gcG9wdWxhdGUgdGhlIHBhY2tldCBoZWFkZXIuIFRoZSBgc3RydWN0IHNvY2thZGRyX3FydHJgIGl0c2VsZiBpcyBub3QgY29waWVkIHRvIHRoZSBwYWNrZXQgb3IgdG8gdXNlcnNwYWNlLCBzbyBhbnkgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBwYWRkaW5nIGJ5dGVzIG9uIHRoZSBzdGFjayBhcmUgbmV2ZXIgcmVhZCBvciBsZWFrZWQuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLCBub3IgZG9lcyBpdCBtb2RpZnkgYm91bmRzIGNoZWNrcyBvciBsZW5ndGhzIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIG9yIGxvY2tpbmcgaXNzdWVzKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIG9yIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MTA6NTguNTgwODA1MDQ2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0MDQ4MjYwOTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlFSVFJcIixcbiAgICBcIlFSVFJfVFVOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicXJ0cl9lbmRwb2ludF9yZWdpc3RlclwiLFxuICAgIFwicXJ0cl9zZW5kbXNnXCIsXG4gICAgXCJxcnRyX3R1bl93cml0ZV9pdGVyXCIsXG4gICAgXCJxcnRyX2VuZHBvaW50X3Bvc3RcIixcbiAgICBcInFydHJfbnNfd29ya2VyXCIsXG4gICAgXCJxcnRyX2hlbGxvX3dvcmtcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBRUlRSIHN1YnN5c3RlbSB0byBpbml0aWF0ZSB0aGUgSEVMTE8gaGFuZHNoYWtlIGZyb20gdGhlIGNvcmUgbGF5ZXIgaW5zdGVhZCBvZiB0aGUgbmFtZXNlcnZpY2UuIEl0IGludHJvZHVjZXMgYSBuZXcgd29yayBpdGVtIGBxcnRyX2hlbGxvX3dvcmtgIHdoaWNoIGFsbG9jYXRlcyBhIGNvbnRyb2wgcGFja2V0IGFuZCBlbnF1ZXVlcyBpdC4gVGhlIGNvbnRyb2wgcGFja2V0IGlzIGFsbG9jYXRlZCB1c2luZyBgcXJ0cl9hbGxvY19jdHJsX3BhY2tldGAsIHdoaWNoIHVzZXMgYHNrYl9wdXRfemVyb2AgdG8gZnVsbHkgemVyby1pbml0aWFsaXplIHRoZSBwYWNrZXQgcGF5bG9hZC4gVGhlIHN0YWNrLWFsbG9jYXRlZCBgc3RydWN0IHNvY2thZGRyX3FydHJgIHZhcmlhYmxlcyAoYGZyb21gIGFuZCBgdG9gKSBhcmUgdXNlZCB0byBwYXNzIGFkZHJlc3NlcyB0byBgcXJ0cl9ub2RlX2VucXVldWVgLCB3aGljaCBvbmx5IHJlYWRzIHRoZWlyIGBzcV9ub2RlYCBhbmQgYHNxX3BvcnRgIGZpZWxkcyB0byBwb3B1bGF0ZSB0aGUgcGFja2V0IGhlYWRlci4gVGhlIGBzdHJ1Y3Qgc29ja2FkZHJfcXJ0cmAgaXRzZWxmIGlzIG5vdCBjb3BpZWQgdG8gdGhlIHBhY2tldCBvciB0byB1c2Vyc3BhY2UsIHNvIGFueSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHBhZGRpbmcgYnl0ZXMgb24gdGhlIHN0YWNrIGFyZSBuZXZlciByZWFkIG9yIGxlYWtlZC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIG5vciBkb2VzIGl0IG1vZGlmeSBib3VuZHMgY2hlY2tzIG9yIGxlbmd0aHMgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIHVzZS1hZnRlci1mcmVlLCBvdXQtb2YtYm91bmRzIGFjY2Vzcywgb3IgbG9ja2luZyBpc3N1ZXMpIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgb3Igb3RoZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBRdWFsY29tbSBJUEMgUm91dGVyIChRUlRSKSBjb3JlIGxvZ2ljIHRvIGluaXRpYXRlIGEgSEVMTE8gaGFuZHNoYWtlIHVwb24gZW5kcG9pbnQgcmVnaXN0cmF0aW9uIGFuZCBkcm9wIHBhY2tldHMgaWYgdGhlIGhhbmRzaGFrZSBoYXNuJ3QgY29tcGxldGVkLiBUaGlzIGZ1bmN0aW9uYWxpdHkgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSB1c2luZyB0aGUgYC9kZXYvcXJ0ci10dW5gIGRldmljZSwgd2hpY2ggYWxsb3dzIHVzZXJzcGFjZSB0byByZWdpc3RlciBlbmRwb2ludHMgYW5kIGluamVjdCBwYWNrZXRzLiBUaGUgY2hhbmdlcyBhZmZlY3QgY29yZSBwYWNrZXQgZW5xdWV1ZWluZyBhbmQgZW5kcG9pbnQgcmVnaXN0cmF0aW9uIHBhdGhzLCB3aGljaCBhcmUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MTA6NTguNTgwODA5OTU2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDUxNTgzMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyNWM1N2JiNTg3YzJmY2I4NWQ4MTNmM2IzNDJmYjIyMzhmYTJlMjYyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDcgMTY6MTA6NTcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3FydHIvYWZfcXJ0ci5jIGIvbmV0L3FydHIvYWZfcXJ0ci5jXFxuaW5kZXggZDAyZWY5YTc0YzNjYS4uN2FkYzBhMDUzMTI1NCAxMDA2NDRcXG4tLS0gYS9uZXQvcXJ0ci9hZl9xcnRyLmNcXG4rKysgYi9uZXQvcXJ0ci9hZl9xcnRyLmNcXG5AQCAtOSw2ICs5LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Rlcm1pb3MuaFxcdTAwM2VcXHQvKiBGb3IgVElPQ0lOUS9PVVRRICovXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zcGlubG9jay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvd2FpdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3NvY2suaFxcdTAwM2VcXG4gXFxuQEAgLTEyMCw4ICsxMjEsMTAgQEAgc3RhdGljIERFRklORV9YQVJSQVlfQUxMT0MocXJ0cl9wb3J0cyk7XFxuICAqIEBuaWQ6IG5vZGUgaWRcXG4gICogQHFydHJfdHhfZmxvdzogeGFycmF5IG9mIHFydHJfdHhfZmxvdywga2V5ZWQgYnkgbm9kZSBcXHUwMDNjXFx1MDAzYyAzMiB8IHBvcnRcXG4gICogQHFydHJfdHhfbG9jazogbG9jayBmb3IgcXJ0cl90eF9mbG93IGluc2VydHNcXG4rICogQGhlbGxvX3NlbnQ6IGhlbGxvIHBhY2tldCBzZW5kIHN1Y2Nlc3NmdWxcXG4gICogQHJ4X3F1ZXVlOiByZWNlaXZlIHF1ZXVlXFxuICAqIEBpdGVtOiBsaXN0IGl0ZW0gZm9yIGJyb2FkY2FzdCBsaXN0XFxuKyAqIEBzYXlfaGVsbG86IHNjaGVkdWxlZCB3b3JrIGZvciBzZW5kaW5nIGhlbGxvIHBhY2tldFxcbiAgKi9cXG4gc3RydWN0IHFydHJfbm9kZSB7XFxuIFxcdHN0cnVjdCBtdXRleCBlcF9sb2NrO1xcbkBAIC0xMzIsOCArMTM1LDExIEBAIHN0cnVjdCBxcnRyX25vZGUge1xcbiBcXHRzdHJ1Y3QgeGFycmF5IHFydHJfdHhfZmxvdztcXG4gXFx0c3RydWN0IG11dGV4IHFydHJfdHhfbG9jazsgLyogZm9yIHFydHJfdHhfZmxvdyAqL1xcbiBcXG4rXFx0Ym9vbCBoZWxsb19zZW50O1xcbitcXG4gXFx0c3RydWN0IHNrX2J1ZmZfaGVhZCByeF9xdWV1ZTtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBpdGVtO1xcbitcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2F5X2hlbGxvO1xcbiB9O1xcbiBcXG4gLyoqXFxuQEAgLTE4Nyw2ICsxOTMsOCBAQCBzdGF0aWMgdm9pZCBfX3FydHJfbm9kZV9yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKVxcbiBcXHRsaXN0X2RlbChcXHUwMDI2bm9kZS1cXHUwMDNlaXRlbSk7XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2cXJ0cl9ub2RlX2xvY2spO1xcbiBcXG4rXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2bm9kZS1cXHUwMDNlc2F5X2hlbGxvKTtcXG4rXFxuIFxcdHNrYl9xdWV1ZV9wdXJnZShcXHUwMDI2bm9kZS1cXHUwMDNlcnhfcXVldWUpO1xcbiBcXG4gXFx0LyogRnJlZSB0eCBmbG93IGNvdW50ZXJzICovXFxuQEAgLTM0MSw2ICszNDksMTQgQEAgc3RhdGljIGludCBxcnRyX25vZGVfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRzaXplX3QgbGVuID0gc2tiLVxcdTAwM2VsZW47XFxuIFxcdGludCByYywgY29uZmlybV9yeDtcXG4gXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNm5vZGUtXFx1MDAzZWVwX2xvY2spO1xcbitcXHRpZiAoIW5vZGUtXFx1MDAzZWhlbGxvX3NlbnQgXFx1MDAyNlxcdTAwMjYgdHlwZSAhPSBRUlRSX1RZUEVfSEVMTE8pIHtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZub2RlLVxcdTAwM2VlcF9sb2NrKTtcXG4rXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2bm9kZS1cXHUwMDNlZXBfbG9jayk7XFxuK1xcbiBcXHRjb25maXJtX3J4ID0gcXJ0cl90eF93YWl0KG5vZGUsIHRvLVxcdTAwM2VzcV9ub2RlLCB0by1cXHUwMDNlc3FfcG9ydCwgdHlwZSk7XFxuIFxcdGlmIChjb25maXJtX3J4IFxcdTAwM2MgMCkge1xcbiBcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG5AQCAtMzcyLDYgKzM4OCw4IEBAIHN0YXRpYyBpbnQgcXJ0cl9ub2RlX2VucXVldWUoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0cmMgPSBub2RlLVxcdTAwM2VlcC1cXHUwMDNleG1pdChub2RlLVxcdTAwM2VlcCwgc2tiKTtcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4rXFx0XFx0aWYgKCFyYyBcXHUwMDI2XFx1MDAyNiB0eXBlID09IFFSVFJfVFlQRV9IRUxMTylcXG4rXFx0XFx0XFx0bm9kZS1cXHUwMDNlaGVsbG9fc2VudCA9IHRydWU7XFxuIFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bm9kZS1cXHUwMDNlZXBfbG9jayk7XFxuIFxcdH1cXG4gXFx0LyogTmVlZCB0byBlbnN1cmUgdGhhdCBhIHN1YnNlcXVlbnQgbWVzc2FnZSBjYXJyaWVzIHRoZSBvdGhlcndpc2UgbG9zdFxcbkBAIC0zNzksNiArMzk3LDkgQEAgc3RhdGljIGludCBxcnRyX25vZGVfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRpZiAocmMgXFx1MDAyNlxcdTAwMjYgY29uZmlybV9yeClcXG4gXFx0XFx0cXJ0cl90eF9mbG93X2ZhaWxlZChub2RlLCB0by1cXHUwMDNlc3Ffbm9kZSwgdG8tXFx1MDAzZXNxX3BvcnQpO1xcbiBcXG4rXFx0aWYgKHJjIFxcdTAwMjZcXHUwMDI2IHR5cGUgPT0gUVJUUl9UWVBFX0hFTExPKVxcbitcXHRcXHRzY2hlZHVsZV93b3JrKFxcdTAwMjZub2RlLVxcdTAwM2VzYXlfaGVsbG8pO1xcbitcXG4gXFx0cmV0dXJuIHJjO1xcbiB9XFxuIFxcbkBAIC01NzAsNiArNTkxLDM1IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcXJ0cl9hbGxvY19jdHJsX3BhY2tldChzdHJ1Y3QgcXJ0cl9jdHJsX3BrdCAqKnBrdCxcXG4gXFx0cmV0dXJuIHNrYjtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgcXJ0cl9oZWxsb193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4re1xcbitcXHRzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciBmcm9tID0ge0FGX1FJUENSVFIsIDAsIFFSVFJfUE9SVF9DVFJMfTtcXG4rXFx0c3RydWN0IHNvY2thZGRyX3FydHIgdG8gPSB7QUZfUUlQQ1JUUiwgMCwgUVJUUl9QT1JUX0NUUkx9O1xcbitcXHRzdHJ1Y3QgcXJ0cl9jdHJsX3BrdCAqcGt0O1xcbitcXHRzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlO1xcbitcXHRzdHJ1Y3QgcXJ0cl9zb2NrICpjdHJsO1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbitcXG4rXFx0bm9kZSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcXJ0cl9ub2RlLCBzYXlfaGVsbG8pO1xcbitcXG4rXFx0LyogTlMgbXVzdCBiZSBib3VuZCBiZWZvcmUgd2UgY2FuIHNlbmQgKi9cXG4rXFx0Y3RybCA9IHFydHJfcG9ydF9sb29rdXAoUVJUUl9QT1JUX0NUUkwpO1xcbitcXHRpZiAoIWN0cmwpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHNrYiA9IHFydHJfYWxsb2NfY3RybF9wYWNrZXQoXFx1MDAyNnBrdCwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghc2tiKSB7XFxuK1xcdFxcdHFydHJfcG9ydF9wdXQoY3RybCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0cGt0LVxcdTAwM2VjbWQgPSBjcHVfdG9fbGUzMihRUlRSX1RZUEVfSEVMTE8pO1xcbitcXHRmcm9tLnNxX25vZGUgPSBxcnRyX2xvY2FsX25pZDtcXG4rXFx0dG8uc3Ffbm9kZSA9IG5vZGUtXFx1MDAzZW5pZDtcXG4rXFx0cXJ0cl9ub2RlX2VucXVldWUobm9kZSwgc2tiLCBRUlRSX1RZUEVfSEVMTE8sIFxcdTAwMjZmcm9tLCBcXHUwMDI2dG8pO1xcbitcXHRxcnRyX3BvcnRfcHV0KGN0cmwpO1xcbit9XFxuK1xcbiAvKipcXG4gICogcXJ0cl9lbmRwb2ludF9yZWdpc3RlcigpIC0gcmVnaXN0ZXIgYSBuZXcgZW5kcG9pbnRcXG4gICogQGVwOiBlbmRwb2ludCB0byByZWdpc3RlclxcbkBAIC01OTUsNiArNjQ1LDkgQEAgaW50IHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIoc3RydWN0IHFydHJfZW5kcG9pbnQgKmVwLCB1bnNpZ25lZCBpbnQgbmlkKVxcbiBcXHRub2RlLVxcdTAwM2VuaWQgPSBRUlRSX0VQX05JRF9BVVRPO1xcbiBcXHRub2RlLVxcdTAwM2VlcCA9IGVwO1xcbiBcXG4rXFx0bm9kZS1cXHUwMDNlaGVsbG9fc2VudCA9IGZhbHNlO1xcbitcXHRJTklUX1dPUksoXFx1MDAyNm5vZGUtXFx1MDAzZXNheV9oZWxsbywgcXJ0cl9oZWxsb193b3JrKTtcXG4rXFxuIFxcdHhhX2luaXQoXFx1MDAyNm5vZGUtXFx1MDAzZXFydHJfdHhfZmxvdyk7XFxuIFxcdG11dGV4X2luaXQoXFx1MDAyNm5vZGUtXFx1MDAzZXFydHJfdHhfbG9jayk7XFxuIFxcbkBAIC02MDUsNiArNjU4LDkgQEAgaW50IHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIoc3RydWN0IHFydHJfZW5kcG9pbnQgKmVwLCB1bnNpZ25lZCBpbnQgbmlkKVxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNnFydHJfbm9kZV9sb2NrKTtcXG4gXFx0ZXAtXFx1MDAzZW5vZGUgPSBub2RlO1xcbiBcXG4rXFx0LyogSW5pdGlhdGUgSEVMTE8gaGFuZHNoYWtlIGZyb20gdGhlIGNvcmUgbGF5ZXIgKi9cXG4rXFx0c2NoZWR1bGVfd29yayhcXHUwMDI2bm9kZS1cXHUwMDNlc2F5X2hlbGxvKTtcXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIpO1xcbkBAIC04NzksNiArOTM1LDExIEBAIHN0YXRpYyBpbnQgcXJ0cl9iY2FzdF9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZxcnRyX25vZGVfbG9jayk7XFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgXFx1MDAyNnFydHJfYWxsX25vZGVzLCBpdGVtKSB7XFxuK1xcdFxcdC8qIFNraXAgbm9kZXMgd2hvc2Ugbm9kZSBJRCBpcyBub3QgeWV0IGtub3duOyB0aGV5IGNhbm5vdFxcbitcXHRcXHQgKiByZWNlaXZlIGJyb2FkY2FzdCBwYWNrZXRzIGJlZm9yZSB0aGUgSEVMTE8gaGFuZHNoYWtlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKG5vZGUtXFx1MDAzZW5pZCA9PSBRUlRSX0VQX05JRF9BVVRPKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0c2tibiA9IHBza2JfY29weShza2IsIEdGUF9LRVJORUwpO1xcbiBcXHRcXHRpZiAoIXNrYm4pXFxuIFxcdFxcdFxcdGJyZWFrO1xcbmRpZmYgLS1naXQgYS9uZXQvcXJ0ci9ucy5jIGIvbmV0L3FydHIvbnMuY1xcbmluZGV4IGIzZjliYmNmOWFiOWIuLjE0MjYyNjIzZDJkZDUgMTAwNjQ0XFxuLS0tIGEvbmV0L3FydHIvbnMuY1xcbisrKyBiL25ldC9xcnRyL25zLmNcXG5AQCAtMjEyLDYgKzIxMiw3IEBAIHN0YXRpYyB2b2lkIGxvb2t1cF9ub3RpZnkoc3RydWN0IHNvY2thZGRyX3FydHIgKnRvLCBzdHJ1Y3QgcXJ0cl9zZXJ2ZXIgKnNydixcXG4gXFx0XFx0cHJfZXJyKFxcXCJmYWlsZWQgdG8gc2VuZCBsb29rdXAgbm90aWZpY2F0aW9uXFxcXG5cXFwiKTtcXG4gfVxcbiBcXG4rLyogQW5ub3VuY2UgdGhlIGxpc3Qgb2Ygc2VydmVycyByZWdpc3RlcmVkIG9uIHRoZSBsb2NhbCBub2RlICovXFxuIHN0YXRpYyBpbnQgYW5ub3VuY2Vfc2VydmVycyhzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqc3EpXFxuIHtcXG4gXFx0c3RydWN0IHFydHJfc2VydmVyICpzcnY7XFxuQEAgLTM0OSwxNSArMzUwLDggQEAgc3RhdGljIGludCBzYXlfaGVsbG8oc3RydWN0IHNvY2thZGRyX3FydHIgKmRlc3QpXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuLS8qIEFubm91bmNlIHRoZSBsaXN0IG9mIHNlcnZlcnMgcmVnaXN0ZXJlZCBvbiB0aGUgbG9jYWwgbm9kZSAqL1xcbiBzdGF0aWMgaW50IGN0cmxfY21kX2hlbGxvKHN0cnVjdCBzb2NrYWRkcl9xcnRyICpzcSlcXG4ge1xcbi1cXHRpbnQgcmV0O1xcbi1cXG4tXFx0cmV0ID0gc2F5X2hlbGxvKHNxKTtcXG4tXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuLVxcbiBcXHRyZXR1cm4gYW5ub3VuY2Vfc2VydmVycyhzcSk7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjEwOjU4Ljk4NjY2NTQ4NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEwNjU3MDMyMDk3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJRUlRSXCIsXG4gICAgXCJRUlRSX1RVTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInFydHJfZW5kcG9pbnRfcmVnaXN0ZXJcIixcbiAgICBcInFydHJfc2VuZG1zZ1wiLFxuICAgIFwicXJ0cl90dW5fd3JpdGVfaXRlclwiLFxuICAgIFwicXJ0cl9lbmRwb2ludF9wb3N0XCIsXG4gICAgXCJxcnRyX25zX3dvcmtlclwiLFxuICAgIFwicXJ0cl9oZWxsb193b3JrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFF1YWxjb21tIElQQyBSb3V0ZXIgKFFSVFIpIGNvcmUgbG9naWMgdG8gaW5pdGlhdGUgYSBIRUxMTyBoYW5kc2hha2UgdXBvbiBlbmRwb2ludCByZWdpc3RyYXRpb24gYW5kIGRyb3AgcGFja2V0cyBpZiB0aGUgaGFuZHNoYWtlIGhhc24ndCBjb21wbGV0ZWQuIFRoaXMgZnVuY3Rpb25hbGl0eSBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IHVzaW5nIHRoZSBgL2Rldi9xcnRyLXR1bmAgZGV2aWNlLCB3aGljaCBhbGxvd3MgdXNlcnNwYWNlIHRvIHJlZ2lzdGVyIGVuZHBvaW50cyBhbmQgaW5qZWN0IHBhY2tldHMuIFRoZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIHBhY2tldCBlbnF1ZXVlaW5nIGFuZCBlbmRwb2ludCByZWdpc3RyYXRpb24gcGF0aHMsIHdoaWNoIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyNWM1N2JiNTg3YzJmY2I4NWQ4MTNmM2IzNDJmYjIyMzhmYTJlMjYyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAxNjoxMDo1NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9xcnRyL2FmX3FydHIuYyBiL25ldC9xcnRyL2FmX3FydHIuY1xuaW5kZXggZDAyZWY5YTc0YzNjYS4uN2FkYzBhMDUzMTI1NCAxMDA2NDRcbi0tLSBhL25ldC9xcnRyL2FmX3FydHIuY1xuKysrIGIvbmV0L3FydHIvYWZfcXJ0ci5jXG5AQCAtOSw2ICs5LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90ZXJtaW9zLmhcdTAwM2VcdC8qIEZvciBUSU9DSU5RL09VVFEgKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvd2FpdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvc29jay5oXHUwMDNlXG4gXG5AQCAtMTIwLDggKzEyMSwxMCBAQCBzdGF0aWMgREVGSU5FX1hBUlJBWV9BTExPQyhxcnRyX3BvcnRzKTtcbiAgKiBAbmlkOiBub2RlIGlkXG4gICogQHFydHJfdHhfZmxvdzogeGFycmF5IG9mIHFydHJfdHhfZmxvdywga2V5ZWQgYnkgbm9kZSBcdTAwM2NcdTAwM2MgMzIgfCBwb3J0XG4gICogQHFydHJfdHhfbG9jazogbG9jayBmb3IgcXJ0cl90eF9mbG93IGluc2VydHNcbisgKiBAaGVsbG9fc2VudDogaGVsbG8gcGFja2V0IHNlbmQgc3VjY2Vzc2Z1bFxuICAqIEByeF9xdWV1ZTogcmVjZWl2ZSBxdWV1ZVxuICAqIEBpdGVtOiBsaXN0IGl0ZW0gZm9yIGJyb2FkY2FzdCBsaXN0XG4rICogQHNheV9oZWxsbzogc2NoZWR1bGVkIHdvcmsgZm9yIHNlbmRpbmcgaGVsbG8gcGFja2V0XG4gICovXG4gc3RydWN0IHFydHJfbm9kZSB7XG4gXHRzdHJ1Y3QgbXV0ZXggZXBfbG9jaztcbkBAIC0xMzIsOCArMTM1LDExIEBAIHN0cnVjdCBxcnRyX25vZGUge1xuIFx0c3RydWN0IHhhcnJheSBxcnRyX3R4X2Zsb3c7XG4gXHRzdHJ1Y3QgbXV0ZXggcXJ0cl90eF9sb2NrOyAvKiBmb3IgcXJ0cl90eF9mbG93ICovXG4gXG4rXHRib29sIGhlbGxvX3NlbnQ7XG4rXG4gXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHJ4X3F1ZXVlO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBpdGVtO1xuK1x0c3RydWN0IHdvcmtfc3RydWN0IHNheV9oZWxsbztcbiB9O1xuIFxuIC8qKlxuQEAgLTE4Nyw2ICsxOTMsOCBAQCBzdGF0aWMgdm9pZCBfX3FydHJfbm9kZV9yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKVxuIFx0bGlzdF9kZWwoXHUwMDI2bm9kZS1cdTAwM2VpdGVtKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZxcnRyX25vZGVfbG9jayk7XG4gXG4rXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNm5vZGUtXHUwMDNlc2F5X2hlbGxvKTtcbitcbiBcdHNrYl9xdWV1ZV9wdXJnZShcdTAwMjZub2RlLVx1MDAzZXJ4X3F1ZXVlKTtcbiBcbiBcdC8qIEZyZWUgdHggZmxvdyBjb3VudGVycyAqL1xuQEAgLTM0MSw2ICszNDksMTQgQEAgc3RhdGljIGludCBxcnRyX25vZGVfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c2l6ZV90IGxlbiA9IHNrYi1cdTAwM2VsZW47XG4gXHRpbnQgcmMsIGNvbmZpcm1fcng7XG4gXG4rXHRtdXRleF9sb2NrKFx1MDAyNm5vZGUtXHUwMDNlZXBfbG9jayk7XG4rXHRpZiAoIW5vZGUtXHUwMDNlaGVsbG9fc2VudCBcdTAwMjZcdTAwMjYgdHlwZSAhPSBRUlRSX1RZUEVfSEVMTE8pIHtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5vZGUtXHUwMDNlZXBfbG9jayk7XG4rXHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcdG11dGV4X3VubG9jayhcdTAwMjZub2RlLVx1MDAzZWVwX2xvY2spO1xuK1xuIFx0Y29uZmlybV9yeCA9IHFydHJfdHhfd2FpdChub2RlLCB0by1cdTAwM2VzcV9ub2RlLCB0by1cdTAwM2VzcV9wb3J0LCB0eXBlKTtcbiBcdGlmIChjb25maXJtX3J4IFx1MDAzYyAwKSB7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuQEAgLTM3Miw2ICszODgsOCBAQCBzdGF0aWMgaW50IHFydHJfbm9kZV9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0cmMgPSBub2RlLVx1MDAzZWVwLVx1MDAzZXhtaXQobm9kZS1cdTAwM2VlcCwgc2tiKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRpZiAoIXJjIFx1MDAyNlx1MDAyNiB0eXBlID09IFFSVFJfVFlQRV9IRUxMTylcbitcdFx0XHRub2RlLVx1MDAzZWhlbGxvX3NlbnQgPSB0cnVlO1xuIFx0XHRtdXRleF91bmxvY2soXHUwMDI2bm9kZS1cdTAwM2VlcF9sb2NrKTtcbiBcdH1cbiBcdC8qIE5lZWQgdG8gZW5zdXJlIHRoYXQgYSBzdWJzZXF1ZW50IG1lc3NhZ2UgY2FycmllcyB0aGUgb3RoZXJ3aXNlIGxvc3RcbkBAIC0zNzksNiArMzk3LDkgQEAgc3RhdGljIGludCBxcnRyX25vZGVfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKHJjIFx1MDAyNlx1MDAyNiBjb25maXJtX3J4KVxuIFx0XHRxcnRyX3R4X2Zsb3dfZmFpbGVkKG5vZGUsIHRvLVx1MDAzZXNxX25vZGUsIHRvLVx1MDAzZXNxX3BvcnQpO1xuIFxuK1x0aWYgKHJjIFx1MDAyNlx1MDAyNiB0eXBlID09IFFSVFJfVFlQRV9IRUxMTylcbitcdFx0c2NoZWR1bGVfd29yayhcdTAwMjZub2RlLVx1MDAzZXNheV9oZWxsbyk7XG4rXG4gXHRyZXR1cm4gcmM7XG4gfVxuIFxuQEAgLTU3MCw2ICs1OTEsMzUgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpxcnRyX2FsbG9jX2N0cmxfcGFja2V0KHN0cnVjdCBxcnRyX2N0cmxfcGt0ICoqcGt0LFxuIFx0cmV0dXJuIHNrYjtcbiB9XG4gXG4rc3RhdGljIHZvaWQgcXJ0cl9oZWxsb193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbit7XG4rXHRzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciBmcm9tID0ge0FGX1FJUENSVFIsIDAsIFFSVFJfUE9SVF9DVFJMfTtcbitcdHN0cnVjdCBzb2NrYWRkcl9xcnRyIHRvID0ge0FGX1FJUENSVFIsIDAsIFFSVFJfUE9SVF9DVFJMfTtcbitcdHN0cnVjdCBxcnRyX2N0cmxfcGt0ICpwa3Q7XG4rXHRzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlO1xuK1x0c3RydWN0IHFydHJfc29jayAqY3RybDtcbitcdHN0cnVjdCBza19idWZmICpza2I7XG4rXG4rXHRub2RlID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBxcnRyX25vZGUsIHNheV9oZWxsbyk7XG4rXG4rXHQvKiBOUyBtdXN0IGJlIGJvdW5kIGJlZm9yZSB3ZSBjYW4gc2VuZCAqL1xuK1x0Y3RybCA9IHFydHJfcG9ydF9sb29rdXAoUVJUUl9QT1JUX0NUUkwpO1xuK1x0aWYgKCFjdHJsKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRza2IgPSBxcnRyX2FsbG9jX2N0cmxfcGFja2V0KFx1MDAyNnBrdCwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXNrYikge1xuK1x0XHRxcnRyX3BvcnRfcHV0KGN0cmwpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRwa3QtXHUwMDNlY21kID0gY3B1X3RvX2xlMzIoUVJUUl9UWVBFX0hFTExPKTtcbitcdGZyb20uc3Ffbm9kZSA9IHFydHJfbG9jYWxfbmlkO1xuK1x0dG8uc3Ffbm9kZSA9IG5vZGUtXHUwMDNlbmlkO1xuK1x0cXJ0cl9ub2RlX2VucXVldWUobm9kZSwgc2tiLCBRUlRSX1RZUEVfSEVMTE8sIFx1MDAyNmZyb20sIFx1MDAyNnRvKTtcbitcdHFydHJfcG9ydF9wdXQoY3RybCk7XG4rfVxuK1xuIC8qKlxuICAqIHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIoKSAtIHJlZ2lzdGVyIGEgbmV3IGVuZHBvaW50XG4gICogQGVwOiBlbmRwb2ludCB0byByZWdpc3RlclxuQEAgLTU5NSw2ICs2NDUsOSBAQCBpbnQgcXJ0cl9lbmRwb2ludF9yZWdpc3RlcihzdHJ1Y3QgcXJ0cl9lbmRwb2ludCAqZXAsIHVuc2lnbmVkIGludCBuaWQpXG4gXHRub2RlLVx1MDAzZW5pZCA9IFFSVFJfRVBfTklEX0FVVE87XG4gXHRub2RlLVx1MDAzZWVwID0gZXA7XG4gXG4rXHRub2RlLVx1MDAzZWhlbGxvX3NlbnQgPSBmYWxzZTtcbitcdElOSVRfV09SSyhcdTAwMjZub2RlLVx1MDAzZXNheV9oZWxsbywgcXJ0cl9oZWxsb193b3JrKTtcbitcbiBcdHhhX2luaXQoXHUwMDI2bm9kZS1cdTAwM2VxcnRyX3R4X2Zsb3cpO1xuIFx0bXV0ZXhfaW5pdChcdTAwMjZub2RlLVx1MDAzZXFydHJfdHhfbG9jayk7XG4gXG5AQCAtNjA1LDYgKzY1OCw5IEBAIGludCBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyKHN0cnVjdCBxcnRyX2VuZHBvaW50ICplcCwgdW5zaWduZWQgaW50IG5pZClcbiBcdG11dGV4X3VubG9jayhcdTAwMjZxcnRyX25vZGVfbG9jayk7XG4gXHRlcC1cdTAwM2Vub2RlID0gbm9kZTtcbiBcbitcdC8qIEluaXRpYXRlIEhFTExPIGhhbmRzaGFrZSBmcm9tIHRoZSBjb3JlIGxheWVyICovXG4rXHRzY2hlZHVsZV93b3JrKFx1MDAyNm5vZGUtXHUwMDNlc2F5X2hlbGxvKTtcbitcbiBcdHJldHVybiAwO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChxcnRyX2VuZHBvaW50X3JlZ2lzdGVyKTtcbkBAIC04NzksNiArOTM1LDExIEBAIHN0YXRpYyBpbnQgcXJ0cl9iY2FzdF9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNnFydHJfbm9kZV9sb2NrKTtcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgXHUwMDI2cXJ0cl9hbGxfbm9kZXMsIGl0ZW0pIHtcbitcdFx0LyogU2tpcCBub2RlcyB3aG9zZSBub2RlIElEIGlzIG5vdCB5ZXQga25vd247IHRoZXkgY2Fubm90XG4rXHRcdCAqIHJlY2VpdmUgYnJvYWRjYXN0IHBhY2tldHMgYmVmb3JlIHRoZSBIRUxMTyBoYW5kc2hha2UuXG4rXHRcdCAqL1xuK1x0XHRpZiAobm9kZS1cdTAwM2VuaWQgPT0gUVJUUl9FUF9OSURfQVVUTylcbitcdFx0XHRjb250aW51ZTtcbiBcdFx0c2tibiA9IHBza2JfY29weShza2IsIEdGUF9LRVJORUwpO1xuIFx0XHRpZiAoIXNrYm4pXG4gXHRcdFx0YnJlYWs7XG5kaWZmIC0tZ2l0IGEvbmV0L3FydHIvbnMuYyBiL25ldC9xcnRyL25zLmNcbmluZGV4IGIzZjliYmNmOWFiOWIuLjE0MjYyNjIzZDJkZDUgMTAwNjQ0XG4tLS0gYS9uZXQvcXJ0ci9ucy5jXG4rKysgYi9uZXQvcXJ0ci9ucy5jXG5AQCAtMjEyLDYgKzIxMiw3IEBAIHN0YXRpYyB2b2lkIGxvb2t1cF9ub3RpZnkoc3RydWN0IHNvY2thZGRyX3FydHIgKnRvLCBzdHJ1Y3QgcXJ0cl9zZXJ2ZXIgKnNydixcbiBcdFx0cHJfZXJyKFwiZmFpbGVkIHRvIHNlbmQgbG9va3VwIG5vdGlmaWNhdGlvblxcblwiKTtcbiB9XG4gXG4rLyogQW5ub3VuY2UgdGhlIGxpc3Qgb2Ygc2VydmVycyByZWdpc3RlcmVkIG9uIHRoZSBsb2NhbCBub2RlICovXG4gc3RhdGljIGludCBhbm5vdW5jZV9zZXJ2ZXJzKHN0cnVjdCBzb2NrYWRkcl9xcnRyICpzcSlcbiB7XG4gXHRzdHJ1Y3QgcXJ0cl9zZXJ2ZXIgKnNydjtcbkBAIC0zNDksMTUgKzM1MCw4IEBAIHN0YXRpYyBpbnQgc2F5X2hlbGxvKHN0cnVjdCBzb2NrYWRkcl9xcnRyICpkZXN0KVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tLyogQW5ub3VuY2UgdGhlIGxpc3Qgb2Ygc2VydmVycyByZWdpc3RlcmVkIG9uIHRoZSBsb2NhbCBub2RlICovXG4gc3RhdGljIGludCBjdHJsX2NtZF9oZWxsbyhzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqc3EpXG4ge1xuLVx0aW50IHJldDtcbi1cbi1cdHJldCA9IHNheV9oZWxsbyhzcSk7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuIFx0cmV0dXJuIGFubm91bmNlX3NlcnZlcnMoc3EpO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjEwOjU4Ljk4NjY2NjU2NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4Njc3OTU0MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFFSVFIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIG1ha2luZyBzb21lIHByZXR0eSBzcGVjaWZpYyBjaGFuZ2VzIHRvIHRoZSBRUlRSIGNvZGUuIFNlZW1zIGxpa2UgdGhleSdyZSBhZGRpbmcgYSBgaGVsbG9fc2VudGAgZmxhZyBhbmQgYSBgc2F5X2hlbGxvYCB3b3JrIHN0cnVjdCB0byB0aGUgYHFydHJfbm9kZWAgc3RydWN0dXJlIGluIGBhZl9xcnRyLmNgLiBJbnRlcmVzdGluZy4gVGhlIGNvcmUgbG9naWMgb2YgYHFydHJfbm9kZV9lbnF1ZXVlYCBpcyBhbHNvIGJlaW5nIHR3ZWFrZWQuIEl0J3Mgbm93IGdvaW5nIHRvIGRyb3AgcGFja2V0cyBpZiBgaGVsbG9fc2VudGAgaXMgZmFsc2UsICp1bmxlc3MqIGl0J3MgYSBIRUxMTyBwYWNrZXQuIEFuZCwgY3J1Y2lhbGx5LCB0aGV5J3JlIHNjaGVkdWxpbmcgYSBIRUxMTyBoYW5kc2hha2UgZnJvbSB0aGUgY29yZSBsYXllciBub3cgd2hlbiBhbiBlbmRwb2ludCByZWdpc3RlcnMgdXNpbmcgYHFydHJfZW5kcG9pbnRfcmVnaXN0ZXJgLiBUaGF0J3MgYSBmdW5kYW1lbnRhbCBzaGlmdCBpbiB0aGUgaGFuZHNoYWtlIHByb2Nlc3MuXG5cbk5vdywgb3ZlciBpbiBgbnMuY2AsIHRoZXkndmUgcmVtb3ZlZCB0aGUgYHNheV9oZWxsb2AgY2FsbCBmcm9tIGBjdHJsX2NtZF9oZWxsb2AuIE1ha2VzIHNlbnNlLCB0aGUgY29yZSBpcyBoYW5kbGluZyB0aGUgaW5pdGlhdGlvbiBub3cuIEkgc2VlIHdoYXQgdGhleSdyZSBkb2luZyB0aGVyZSwgY29uc29saWRhdGluZyB0aGUgSEVMTE8gaGFuZGxpbmcuXG5cblRoZSBuZXh0IHF1ZXN0aW9uIGluIG15IG1pbmQsIG5hdHVyYWxseSwgaXMsIGNhbiBJIHJlYWNoIHRoaXMgaW4gbXkgdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudD8gUVJUUiBpcyBRdWFsY29tbSdzIElQQyBSb3V0ZXIgcHJvdG9jb2wsIHJpZ2h0PyBTbywgY2FuIEkgZnV6eiB0aGlzIGluIFFFTVU/IEknbSB3b25kZXJpbmcgaWYgSSBjYW4gZ2V0IEFGX1FJUENSVFIgc29ja2V0cyBjcmVhdGVkLCByZWdpc3RlciBlbmRwb2ludHMsIG1heWJlIHZpYSB0dW4vdGFwIG9yIHNvbWUgb3RoZXIgbWVjaGFuaXNtLiBIb3cgKmFyZSogUVJUUiBlbmRwb2ludHMgcmVnaXN0ZXJlZCwgYWN0dWFsbHk/IEkgbmVlZCB0byBjaGVjayBob3cgSSB3b3VsZCBnZXQgdGhlIGNvZGUgcGF0aCB0byB3b3JrLiBJIHNob3VsZCBwcm9iYWJseSBqdXN0IHNlYXJjaCBmb3IgYHFydHJfZW5kcG9pbnRfcmVnaXN0ZXJgIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTEwLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MTE6MTcuNjY0NjI0MzY0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNDQ1NDI3NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicXJ0cl9lbmRwb2ludF9yZWdpc3RlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcXJ0ci9hZl9xcnRyLmM9NTk0PXN0YXRpYyB2b2lkIHFydHJfaGVsbG9fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjIzLS8qKlxcbm5ldC9xcnRyL2FmX3FydHIuYzo2MjQ6ICogcXJ0cl9lbmRwb2ludF9yZWdpc3RlcigpIC0gcmVnaXN0ZXIgYSBuZXcgZW5kcG9pbnRcXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjI1LSAqIEBlcDogZW5kcG9pbnQgdG8gcmVnaXN0ZXJcXG4tLVxcbm5ldC9xcnRyL2FmX3FydHIuYy02MzAtICovXFxubmV0L3FydHIvYWZfcXJ0ci5jOjYzMTppbnQgcXJ0cl9lbmRwb2ludF9yZWdpc3RlcihzdHJ1Y3QgcXJ0cl9lbmRwb2ludCAqZXAsIHVuc2lnbmVkIGludCBuaWQpXFxubmV0L3FydHIvYWZfcXJ0ci5jLTYzMi17XFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjY1LX1cXG5uZXQvcXJ0ci9hZl9xcnRyLmM6NjY2OkVYUE9SVF9TWU1CT0xfR1BMKHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIpO1xcbm5ldC9xcnRyL2FmX3FydHIuYy02NjctXFxuLS1cXG5uZXQvcXJ0ci9taGkuYz0xMTA9c3RhdGljIGludCBxY29tX21oaV9xcnRyX3Byb2JlKHN0cnVjdCBtaGlfZGV2aWNlICptaGlfZGV2LFxcbi0tXFxubmV0L3FydHIvbWhpLmMtMTMwLVxcbm5ldC9xcnRyL21oaS5jOjEzMTpcXHRyYyA9IHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIoXFx1MDAyNnFkZXYtXFx1MDAzZWVwLCBRUlRSX0VQX05JRF9BVVRPKTtcXG5uZXQvcXJ0ci9taGkuYy0xMzItXFx0aWYgKHJjKVxcbi0tXFxubmV0L3FydHIvcXJ0ci5oPTIwPXN0cnVjdCBxcnRyX2VuZHBvaW50IHtcXG4tLVxcbm5ldC9xcnRyL3FydHIuaC0yNS1cXG5uZXQvcXJ0ci9xcnRyLmg6MjY6aW50IHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIoc3RydWN0IHFydHJfZW5kcG9pbnQgKmVwLCB1bnNpZ25lZCBpbnQgbmlkKTtcXG5uZXQvcXJ0ci9xcnRyLmgtMjctXFxuLS1cXG5uZXQvcXJ0ci9zbWQuYz01OT1zdGF0aWMgaW50IHFjb21fc21kX3FydHJfcHJvYmUoc3RydWN0IHJwbXNnX2RldmljZSAqcnBkZXYpXFxuLS1cXG5uZXQvcXJ0ci9zbWQuYy03MS1cXG5uZXQvcXJ0ci9zbWQuYzo3MjpcXHRyYyA9IHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIoXFx1MDAyNnFkZXYtXFx1MDAzZWVwLCBRUlRSX0VQX05JRF9BVVRPKTtcXG5uZXQvcXJ0ci9zbWQuYy03My1cXHRpZiAocmMpXFxuLS1cXG5uZXQvcXJ0ci90dW4uYz0zMT1zdGF0aWMgaW50IHFydHJfdHVuX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXFxuLS1cXG5uZXQvcXJ0ci90dW4uYy00Ni1cXG5uZXQvcXJ0ci90dW4uYzo0NzpcXHRyZXQgPSBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyKFxcdTAwMjZ0dW4tXFx1MDAzZWVwLCBRUlRSX0VQX05JRF9BVVRPKTtcXG5uZXQvcXJ0ci90dW4uYy00OC1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMToxOS44MDkxNzMwNzFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDY4OTM3MTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIFFSVFIgVHVubmVsaW5nIENhcGFiaWxpdGllcyoqXG5cblJpZ2h0LCBzbyBgbmV0L3FydHIvdHVuLmNgLi4uIHRoYXQncyB0aGUgZmlsZSBJIHdhcyBob3BpbmcgdG8gZmluZCEgQSB0dW4gZGV2aWNlLCBzcGVjaWZpY2FsbHksIGlzIGhvdyBRUlRSIGVuZHBvaW50cyBhcmUgcmVnaXN0ZXJlZC4gVGhhdCdzIGEga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUuIE5vdyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBzeXN0ZW0gb3BlcmF0ZXMsIHNvIG15IG5leHQgc3RlcCBpcyBjbGVhci4gVGltZSB0byBkaWcgaW50byBgbmV0L3FydHIvdHVuLmNgIGFuZCBzZWUgZXhhY3RseSBob3cgdGhleSd2ZSBpbXBsZW1lbnRlZCB0aGlzIHR1bm5lbGluZyBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBvZiB0aGlzIGFwcHJvYWNoIHRvIHNlZSBpZiBpdCBmaXRzIHRoZSBpbnRlbmRlZCB1c2UgY2FzZSwgYW5kIHRvIHByZXBhcmUgZm9yIGFueSBwb3RlbnRpYWwgcHJvYmxlbXMgSSBjYW4gZm9yZXNlZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE5MywiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjExOjI2Ljg3ODExMjgyN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDMwMTA0Mjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInFydHJfdHVuXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9xcnRyL3R1bi5jLTExLVxcbm5ldC9xcnRyL3R1bi5jOjEyOnN0cnVjdCBxcnRyX3R1biB7XFxubmV0L3FydHIvdHVuLmMtMTMtXFx0c3RydWN0IHFydHJfZW5kcG9pbnQgZXA7XFxuLS1cXG5uZXQvcXJ0ci90dW4uYy0xOC1cXG5uZXQvcXJ0ci90dW4uYzoxOTpzdGF0aWMgaW50IHFydHJfdHVuX3NlbmQoc3RydWN0IHFydHJfZW5kcG9pbnQgKmVwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9xcnRyL3R1bi5jLTIwLXtcXG5uZXQvcXJ0ci90dW4uYzoyMTpcXHRzdHJ1Y3QgcXJ0cl90dW4gKnR1biA9IGNvbnRhaW5lcl9vZihlcCwgc3RydWN0IHFydHJfdHVuLCBlcCk7XFxubmV0L3FydHIvdHVuLmMtMjItXFxuLS1cXG5uZXQvcXJ0ci90dW4uYy0zMC1cXG5uZXQvcXJ0ci90dW4uYzozMTpzdGF0aWMgaW50IHFydHJfdHVuX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXFxubmV0L3FydHIvdHVuLmMtMzIte1xcbm5ldC9xcnRyL3R1bi5jOjMzOlxcdHN0cnVjdCBxcnRyX3R1biAqdHVuO1xcbm5ldC9xcnRyL3R1bi5jLTM0LVxcdGludCByZXQ7XFxuLS1cXG5uZXQvcXJ0ci90dW4uYy00Mi1cXG5uZXQvcXJ0ci90dW4uYzo0MzpcXHR0dW4tXFx1MDAzZWVwLnhtaXQgPSBxcnRyX3R1bl9zZW5kO1xcbm5ldC9xcnRyL3R1bi5jLTQ0LVxcbi0tXFxubmV0L3FydHIvdHVuLmMtNTgtXFxubmV0L3FydHIvdHVuLmM6NTk6c3RhdGljIHNzaXplX3QgcXJ0cl90dW5fcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcXG5uZXQvcXJ0ci90dW4uYy02MC17XFxubmV0L3FydHIvdHVuLmMtNjEtXFx0c3RydWN0IGZpbGUgKmZpbHAgPSBpb2NiLVxcdTAwM2VraV9maWxwO1xcbm5ldC9xcnRyL3R1bi5jOjYyOlxcdHN0cnVjdCBxcnRyX3R1biAqdHVuID0gZmlscC1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbm5ldC9xcnRyL3R1bi5jLTYzLVxcdHN0cnVjdCBza19idWZmICpza2I7XFxuLS1cXG5uZXQvcXJ0ci90dW4uYy04NC1cXG5uZXQvcXJ0ci90dW4uYzo4NTpzdGF0aWMgc3NpemVfdCBxcnRyX3R1bl93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbm5ldC9xcnRyL3R1bi5jLTg2LXtcXG5uZXQvcXJ0ci90dW4uYy04Ny1cXHRzdHJ1Y3QgZmlsZSAqZmlscCA9IGlvY2ItXFx1MDAzZWtpX2ZpbHA7XFxubmV0L3FydHIvdHVuLmM6ODg6XFx0c3RydWN0IHFydHJfdHVuICp0dW4gPSBmaWxwLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxubmV0L3FydHIvdHVuLmMtODktXFx0c2l6ZV90IGxlbiA9IGlvdl9pdGVyX2NvdW50KGZyb20pO1xcbi0tXFxubmV0L3FydHIvdHVuLmMtMTEzLVxcbm5ldC9xcnRyL3R1bi5jOjExNDpzdGF0aWMgX19wb2xsX3QgcXJ0cl90dW5fcG9sbChzdHJ1Y3QgZmlsZSAqZmlscCwgcG9sbF90YWJsZSAqd2FpdClcXG5uZXQvcXJ0ci90dW4uYy0xMTUte1xcbm5ldC9xcnRyL3R1bi5jOjExNjpcXHRzdHJ1Y3QgcXJ0cl90dW4gKnR1biA9IGZpbHAtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG5uZXQvcXJ0ci90dW4uYy0xMTctXFx0X19wb2xsX3QgbWFzayA9IDA7XFxuLS1cXG5uZXQvcXJ0ci90dW4uYy0xMjYtXFxubmV0L3FydHIvdHVuLmM6MTI3OnN0YXRpYyBpbnQgcXJ0cl90dW5fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscClcXG5uZXQvcXJ0ci90dW4uYy0xMjgte1xcbm5ldC9xcnRyL3R1bi5jOjEyOTpcXHRzdHJ1Y3QgcXJ0cl90dW4gKnR1biA9IGZpbHAtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG5uZXQvcXJ0ci90dW4uYy0xMzAtXFxuLS1cXG5uZXQvcXJ0ci90dW4uYy0xNDAtXFxubmV0L3FydHIvdHVuLmM6MTQxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHFydHJfdHVuX29wcyA9IHtcXG5uZXQvcXJ0ci90dW4uYy0xNDItXFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXFxubmV0L3FydHIvdHVuLmM6MTQzOlxcdC5vcGVuID0gcXJ0cl90dW5fb3BlbixcXG5uZXQvcXJ0ci90dW4uYzoxNDQ6XFx0LnBvbGwgPSBxcnRyX3R1bl9wb2xsLFxcbm5ldC9xcnRyL3R1bi5jOjE0NTpcXHQucmVhZF9pdGVyID0gcXJ0cl90dW5fcmVhZF9pdGVyLFxcbm5ldC9xcnRyL3R1bi5jOjE0NjpcXHQud3JpdGVfaXRlciA9IHFydHJfdHVuX3dyaXRlX2l0ZXIsXFxubmV0L3FydHIvdHVuLmM6MTQ3OlxcdC5yZWxlYXNlID0gcXJ0cl90dW5fcmVsZWFzZSxcXG5uZXQvcXJ0ci90dW4uYy0xNDgtfTtcXG5uZXQvcXJ0ci90dW4uYy0xNDktXFxubmV0L3FydHIvdHVuLmM6MTUwOnN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSBxcnRyX3R1bl9taXNjZGV2ID0ge1xcbm5ldC9xcnRyL3R1bi5jLTE1MS1cXHRNSVNDX0RZTkFNSUNfTUlOT1IsXFxubmV0L3FydHIvdHVuLmMtMTUyLVxcdFxcXCJxcnRyLXR1blxcXCIsXFxubmV0L3FydHIvdHVuLmM6MTUzOlxcdFxcdTAwMjZxcnRyX3R1bl9vcHMsXFxubmV0L3FydHIvdHVuLmMtMTU0LX07XFxubmV0L3FydHIvdHVuLmMtMTU1LVxcbm5ldC9xcnRyL3R1bi5jOjE1NjpzdGF0aWMgaW50IF9faW5pdCBxcnRyX3R1bl9pbml0KHZvaWQpXFxubmV0L3FydHIvdHVuLmMtMTU3LXtcXG4tLVxcbm5ldC9xcnRyL3R1bi5jLTE1OS1cXG5uZXQvcXJ0ci90dW4uYzoxNjA6XFx0cmV0ID0gbWlzY19yZWdpc3RlcihcXHUwMDI2cXJ0cl90dW5fbWlzY2Rldik7XFxubmV0L3FydHIvdHVuLmMtMTYxLVxcdGlmIChyZXQpXFxuLS1cXG5uZXQvcXJ0ci90dW4uYy0xNjYtXFxubmV0L3FydHIvdHVuLmM6MTY3OnN0YXRpYyB2b2lkIF9fZXhpdCBxcnRyX3R1bl9leGl0KHZvaWQpXFxubmV0L3FydHIvdHVuLmMtMTY4LXtcXG5uZXQvcXJ0ci90dW4uYzoxNjk6XFx0bWlzY19kZXJlZ2lzdGVyKFxcdTAwMjZxcnRyX3R1bl9taXNjZGV2KTtcXG5uZXQvcXJ0ci90dW4uYy0xNzAtfVxcbm5ldC9xcnRyL3R1bi5jLTE3MS1cXG5uZXQvcXJ0ci90dW4uYzoxNzI6bW9kdWxlX2luaXQocXJ0cl90dW5faW5pdCk7XFxubmV0L3FydHIvdHVuLmM6MTczOm1vZHVsZV9leGl0KHFydHJfdHVuX2V4aXQpO1xcbm5ldC9xcnRyL3R1bi5jLTE3NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MTE6MjguOTA4MjI1OTI2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU4NzQ2NjEzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFFSVFIgZm9yIFZ1bG5lcmFiaWxpdGllcyoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgYC9kZXYvcXJ0ci10dW5gIGRldmljZSwgd2hpY2ggaXMgaW50cmlndWluZy4gSSBjYW4gb3BlbiBpdCwgd3JpdGUgdG8gaXQsIGFuZCB0aGF0IGFwcGFyZW50bHkgbGV0cyBtZSByZWdpc3RlciBhIFFSVFIgZW5kcG9pbnQgYW5kIGluamVjdCBwYWNrZXRzLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgY29kZSBpcyBsaXZlLCByZWFjaGFibGUsIGFuZCAqZnV6emFibGUqLiBNeSBtaW5kIGlzIGFscmVhZHkgcmFjaW5nIHdpdGggcG90ZW50aWFsIGF0dGFjayB2ZWN0b3JzLlxuXG5UaGUgcGF0Y2ggSSdtIGxvb2tpbmcgYXQgbW9kaWZpZXMgYHFydHJfbm9kZV9lbnF1ZXVlYCwgYHFydHJfZW5kcG9pbnRfcmVnaXN0ZXJgLCBhbmQgYHFydHJfYmNhc3RfZW5xdWV1ZWAg4oCTIGludGVyZXN0aW5nIGNob2ljZXMuIFRob3NlIGZ1bmN0aW9ucyBhcmUgZ29pbmcgdG8gYmUga2V5LCBhbmQgSeKAmW0gbWFraW5nIGEgbWVudGFsIG5vdGUgdG8gc3BlbmQgYSBzaWduaWZpY2FudCBhbW91bnQgb2YgdGltZSBmdXp6aW5nIHRoZW0uIEknbGwgbmVlZCB0byBzY3J1dGluaXplIHRob3NlLCBidXQgaXQgbWFrZXMgc2Vuc2UgdG8gaW5jbHVkZSBhIGZldyBvdGhlcnM6IGBxcnRyX2hlbGxvX3dvcmtgIGZlZWxzIHJlbGV2YW50LCBzaW5jZSBpdCdzIGludm9sdmVkIGluIHRoZSBzZXR1cC9yZWdpc3RyYXRpb24gcHJvY2VzcywgYW5kLCBjcnVjaWFsbHksIGBxcnRyX3R1bl93cml0ZV9pdGVyYCwgc2luY2UgdGhhdCdzIHdoZXJlIEknbSBpbmplY3RpbmcgdGhlIHBhY2tldHMuXG5cbkZpcnN0IEknbGwgZ28gY2hlY2sgdGhlIEtjb25maWcgc2V0dGluZ3MgZm9yIFFSVFIgYW5kIFFSVFJfVFVOLiBHb3R0YSBtYWtlIHN1cmUgdGhvc2Ugc2V0dGluZ3MgYXJlIHdoYXQgSSBleHBlY3QgdGhlbSB0byBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjkxMywiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMTozMy40OTU2OTUwNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTA5NjIzNzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBRUlRSXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9xcnRyL0tjb25maWctNC1cXG5uZXQvcXJ0ci9LY29uZmlnOjU6Y29uZmlnIFFSVFJcXG5uZXQvcXJ0ci9LY29uZmlnLTYtXFx0dHJpc3RhdGUgXFxcIlF1YWxjb21tIElQQyBSb3V0ZXIgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9xcnRyL0tjb25maWc9MTU9aWYgUVJUUlxcbm5ldC9xcnRyL0tjb25maWctMTYtXFxubmV0L3FydHIvS2NvbmZpZzoxNzpjb25maWcgUVJUUl9TTURcXG5uZXQvcXJ0ci9LY29uZmlnLTE4LVxcdHRyaXN0YXRlIFxcXCJTTUQgSVBDIFJvdXRlciBjaGFubmVsc1xcXCJcXG4tLVxcbm5ldC9xcnRyL0tjb25maWctMjMtXFxubmV0L3FydHIvS2NvbmZpZzoyNDpjb25maWcgUVJUUl9UVU5cXG5uZXQvcXJ0ci9LY29uZmlnLTI1LVxcdHRyaXN0YXRlIFxcXCJUVU4gZGV2aWNlIGZvciBRdWFsY29tbSBJUEMgUm91dGVyXFxcIlxcbi0tXFxubmV0L3FydHIvS2NvbmZpZy0zMC1cXG5uZXQvcXJ0ci9LY29uZmlnOjMxOmNvbmZpZyBRUlRSX01ISVxcbm5ldC9xcnRyL0tjb25maWctMzItXFx0dHJpc3RhdGUgXFxcIk1ISSBJUEMgUm91dGVyIGNoYW5uZWxzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMTozNS40MDUzMjM0MDJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzAyNDE3Nzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBpbml0aWFsIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkluaXRpYWwgUVJUUiBDb25maWd1cmF0aW9uIGFuZCBQYWNrZXQgSGFuZGxpbmcgUmV2aWV3KipcblxuQWxyaWdodCwgcmlnaHQgb2ZmIHRoZSBiYXQsIEkgbmVlZCB0byBtYWtlIHN1cmUgYFFSVFJgIGFuZCBgUVJUUl9UVU5gIGFyZSBlbmFibGVkLiBUaGF0J3MgZnVuZGFtZW50YWwsIHRoZSBmb3VuZGF0aW9uIHVwb24gd2hpY2ggZXZlcnl0aGluZyBlbHNlIHNpdHMuIFdpdGhvdXQgdGhvc2UsIHdlJ3JlIGRlYWQgaW4gdGhlIHdhdGVyLCBzbyBpdCdzIHRoZSBmaXJzdCB0aGluZyBJJ2QgY2hlY2sgaWYgc29tZXRoaW5nJ3Mgbm90IHdvcmtpbmcgYXMgZXhwZWN0ZWQuXG5cbk5vdywgd2hlcmUgZG9lcyB0aGUgcmVhbCB3b3JrIGhhcHBlbiwgdGhlIG1lYXQgYW5kIHBvdGF0b2VzIG9mIHRoZSBwYWNrZXQgZmxvdz8gVGhlIG5leHQgc3RlcCBpcyBhbHdheXMgdG8gZHJpbGwgaW50byB0aGUgY29yZSBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIHF1ZXVpbmcgcGFja2V0cy4gU28sIG15IG1pbmQgaW1tZWRpYXRlbHkgZ29lcyB0byBgcXJ0cl9ub2RlX2VucXVldWVgIGFuZCBgcXJ0cl9iY2FzdF9lbnF1ZXVlYC4gVGhvc2UgYXJlIHRoZSBwcmltZSBzdXNwZWN0cywgcmlnaHQ/IFRob3NlIGFyZSB0aGUgZnVuY3Rpb25zIEknbSBnb2luZyB0byB3YW50IHRvIGRlZXBseSBhbmFseXplLCBzcGVjaWZpY2FsbHkgaW4gYG5ldC9xcnRyL2FmX3FydHIuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHBhY2tldHMgYXJlIGJlaW5nIGFkZGVkIHRvIHRoZSBxdWV1ZXMsIGhvdyB0aGV5J3JlIGJlaW5nIGhhbmRsZWQgZm9yIGJvdGggdW5pY2FzdCBhbmQgYnJvYWRjYXN0IHNjZW5hcmlvcy4gQW55IHN1YnRsZSBkZXRhaWwgdGhlcmUgY291bGQgZXhwb3NlIGEgY3JpdGljYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVjayBvciBldmVuIGEgc3VidGxlIGJ1Zy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTgwLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MTE6MzkuMTA3NzQ5OTA3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTk2NDM1MzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInFydHJfbm9kZV9lbnF1ZXVlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9xcnRyL2FmX3FydHIuYz0zMjk9c3RhdGljIHZvaWQgcXJ0cl90eF9mbG93X2ZhaWxlZChzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBpbnQgZGVzdF9ub2RlLFxcbi0tXFxubmV0L3FydHIvYWZfcXJ0ci5jLTM0My0vKiBQYXNzIGFuIG91dGdvaW5nIHBhY2tldCBzb2NrZXQgYnVmZmVyIHRvIHRoZSBlbmRwb2ludCBkcml2ZXIuICovXFxubmV0L3FydHIvYWZfcXJ0ci5jOjM0NDpzdGF0aWMgaW50IHFydHJfbm9kZV9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3FydHIvYWZfcXJ0ci5jLTM0NS1cXHRcXHRcXHQgICAgIGludCB0eXBlLCBzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqZnJvbSxcXG4tLVxcbm5ldC9xcnRyL2FmX3FydHIuYz01OTQ9c3RhdGljIHZvaWQgcXJ0cl9oZWxsb193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9xcnRyL2FmX3FydHIuYy02MTgtXFx0dG8uc3Ffbm9kZSA9IG5vZGUtXFx1MDAzZW5pZDtcXG5uZXQvcXJ0ci9hZl9xcnRyLmM6NjE5OlxcdHFydHJfbm9kZV9lbnF1ZXVlKG5vZGUsIHNrYiwgUVJUUl9UWVBFX0hFTExPLCBcXHUwMDI2ZnJvbSwgXFx1MDAyNnRvKTtcXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjIwLVxcdHFydHJfcG9ydF9wdXQoY3RybCk7XFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmM9OTMwPXN0YXRpYyBpbnQgcXJ0cl9iY2FzdF9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmMtOTQ2LVxcdFxcdHNrYl9zZXRfb3duZXJfdyhza2JuLCBza2ItXFx1MDAzZXNrKTtcXG5uZXQvcXJ0ci9hZl9xcnRyLmM6OTQ3OlxcdFxcdHFydHJfbm9kZV9lbnF1ZXVlKG5vZGUsIHNrYm4sIHR5cGUsIGZyb20sIHRvKTtcXG5uZXQvcXJ0ci9hZl9xcnRyLmMtOTQ4LVxcdH1cXG4tLVxcbm5ldC9xcnRyL2FmX3FydHIuYz05NTY9c3RhdGljIGludCBxcnRyX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbi0tXFxubmV0L3FydHIvYWZfcXJ0ci5jLTEwMTYtXFx0XFx0fVxcbm5ldC9xcnRyL2FmX3FydHIuYzoxMDE3OlxcdFxcdGVucXVldWVfZm4gPSBxcnRyX25vZGVfZW5xdWV1ZTtcXG5uZXQvcXJ0ci9hZl9xcnRyLmMtMTAxOC1cXHR9XFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmM9MTA1OT1zdGF0aWMgaW50IHFydHJfc2VuZF9yZXN1bWVfdHgoc3RydWN0IHFydHJfY2IgKmNiKVxcbi0tXFxubmV0L3FydHIvYWZfcXJ0ci5jLTEwODEtXFxubmV0L3FydHIvYWZfcXJ0ci5jOjEwODI6XFx0cmV0ID0gcXJ0cl9ub2RlX2VucXVldWUobm9kZSwgc2tiLCBRUlRSX1RZUEVfUkVTVU1FX1RYLCBcXHUwMDI2bG9jYWwsIFxcdTAwMjZyZW1vdGUpO1xcbm5ldC9xcnRyL2FmX3FydHIuYy0xMDgzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMTo0MS4xMDQxOTk3MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjM2NTY3MDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBRUlRSIEFQSSBGdW5jdGlvbiBBdHRyaWJ1dGVzKipcblxuT2theSwgc28gSSdtIHRha2luZyBhIGxvb2sgYXQgdGhpcyBRUlRSIGNvZGUgYW5kIHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHdhbnRzIG1lIHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gSSBzZWUgYHFydHJfbm9kZV9lbnF1ZXVlYCBhbmQgYHFydHJfYmNhc3RfZW5xdWV1ZWAgYXJlIG1hcmtlZCBhcyBzdGF0aWMsIHdoaWxlIGBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyYCBpcyBleHBvcnRlZC4gYHFydHJfaGVsbG9fd29ya2AgaXMgYWxzbyBzdGF0aWMuXG5cbkJhc2VkIG9uIHRoZSBwcm9tcHQsIEkgbmVlZCB0byBmb2N1cyBvbiB0aGUgc3RhdGljIG9uZXMuIE5vdywgYHFydHJfbm9kZV9lbnF1ZXVlYCBsb29rcyBwcmV0dHkgc2l6YWJsZSwgc28gaXQncyAqbGlrZWx5KiBub3QgaW5saW5lZCBieSB0aGUgY29tcGlsZXIsIGJ1dCBpdCdzIGFsd2F5cyBiZXN0IHRvIGJlIHN1cmUuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCwgYnV0IEknbGwgYWRkIGBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyYCwgYHFydHJfdHVuX3dyaXRlX2l0ZXJgIGFuZCBgcXJ0cl9zZW5kbXNnYCB0byBteSBsaXN0IG9mIGZ1bmN0aW9ucyB0byBjaGVjay4gSSBzaG91bGQgdmVyaWZ5IHRoYXQuIEknbGwgbmVlZCB0byBzZWUgaWYgdGhvc2Ugb3RoZXIgbGlzdGVkIGZ1bmN0aW9ucyBhcmUgc3RhdGljLCBidXQgYWxzbyBjb25maXJtIHRoZSBpbmxpbmluZyBzdGF0dXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1NzksIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MTE6NDYuMzQwNzY5MjE2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODAwOTA2MjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInFydHJfc2VuZG1zZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcXJ0ci9hZl9xcnRyLmM9OTMwPXN0YXRpYyBpbnQgcXJ0cl9iY2FzdF9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmMtOTU1LVxcbm5ldC9xcnRyL2FmX3FydHIuYzo5NTY6c3RhdGljIGludCBxcnRyX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbm5ldC9xcnRyL2FmX3FydHIuYy05NTcte1xcbi0tXFxubmV0L3FydHIvYWZfcXJ0ci5jPTEyOTM9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcXJ0cl9wcm90b19vcHMgPSB7XFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmMtMTMwMC1cXHQubGlzdGVuXFx0XFx0PSBzb2NrX25vX2xpc3RlbixcXG5uZXQvcXJ0ci9hZl9xcnRyLmM6MTMwMTpcXHQuc2VuZG1zZ1xcdD0gcXJ0cl9zZW5kbXNnLFxcbm5ldC9xcnRyL2FmX3FydHIuYy0xMzAyLVxcdC5yZWN2bXNnXFx0PSBxcnRyX3JlY3Ztc2csXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjExOjQ4LjE0MTY3OTkwOVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzgwMTEwMTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIGF2YWlsYWJsZSBlbnRyeSBwb2ludHMuXG5cbioqRW50cnkgUG9pbnQgQXNzZXNzbWVudCBmb3IgUVJUUiBFeHBsb3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0byBpbnRlcmFjdCB3aXRoIHRoZSBRUlRSIHN1YnN5c3RlbSwgYW5kIGZyb20gd2hhdCBJJ3ZlIHNlZW4sIGBxcnRyX3NlbmRtc2dgIHNlZW1zIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3Igc2VuZGluZyBtZXNzYWdlcy4gSXQncyBhIGZ1bmRhbWVudGFsIGZ1bmN0aW9uLCBhbmQgSSdkIGV4cGVjdCBpdCB0byBoYW5kbGUgdGhlIGNvcmUgbWVzc2FnaW5nIGZsb3cuXG5cbmBxcnRyX3R1bl93cml0ZV9pdGVyYCBpcyBhbm90aGVyIGludHJpZ3Vpbmcgb3B0aW9uLiBHaXZlbiBpdHMgbmFtZSwgSSdtIGd1ZXNzaW5nIHRoaXMgcmVsYXRlcyB0byB0aGUgVFVOIGludGVyZmFjZSwgc28gbGlrZWx5LCBpdCdzIHVzZWQgd2hlbiBkYXRhIGlzIGJlaW5nIHdyaXR0ZW4gdG8gb3IgZnJvbSB0aGUgUVJUUiBcInR1bm5lbFwiLiBUaGlzIGNvdWxkIGJlIGhlbHBmdWwgaW4gdW5kZXJzdGFuZGluZyBob3cgcmF3IGRhdGEgaXMgaGFuZGxlZC5cblxuRmluYWxseSwgYHFydHJfZW5kcG9pbnRfcmVnaXN0ZXJgIGFsc28gY2F1Z2h0IG15IGV5ZS4gVGhhdCBzZWVtcyBrZXkgZm9yIGVzdGFibGlzaGluZyBhbmQgbWFuYWdpbmcgZW5kcG9pbnRzIHdpdGhpbiB0aGUgUVJUUiBzeXN0ZW0sIHdoaWNoIGlzIGVzc2VudGlhbCB0byBhbnkgc29ydCBvZiBjb21tdW5pY2F0aW9uLlxuXG5UbyBzdGFydCwgSSdsbCBmb2N1cyBvbiBgcXJ0cl90dW5fd3JpdGVfaXRlcmAsIHNpbmNlIEknbSBpbnRlcmVzdGVkIGluIGhvdyBRUlRSIGRhdGEgaW50ZWdyYXRlcyBpbnRvIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBJJ2xsIGhlYWQgb3ZlciB0byBgbmV0L3FydHIvdHVuLmNgIGFuZCBkaWcgaW50byB0aGF0LiBIb3BlZnVsbHksIHRoYXQgd2lsbCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaG93IHRoZSB0dW5uZWwgaW50ZXJmYWNlIHdvcmtzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjYwLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MTE6NTIuNTIxNzkyNjQ0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODgwNzE4MzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInFydHJfdHVuX3dyaXRlX2l0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3FydHIvdHVuLmM9NTk9c3RhdGljIHNzaXplX3QgcXJ0cl90dW5fcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcXG4tLVxcbm5ldC9xcnRyL3R1bi5jLTg0LVxcbm5ldC9xcnRyL3R1bi5jOjg1OnN0YXRpYyBzc2l6ZV90IHFydHJfdHVuX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxubmV0L3FydHIvdHVuLmMtODYte1xcbi0tXFxubmV0L3FydHIvdHVuLmM9MTQxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHFydHJfdHVuX29wcyA9IHtcXG4tLVxcbm5ldC9xcnRyL3R1bi5jLTE0NS1cXHQucmVhZF9pdGVyID0gcXJ0cl90dW5fcmVhZF9pdGVyLFxcbm5ldC9xcnRyL3R1bi5jOjE0NjpcXHQud3JpdGVfaXRlciA9IHFydHJfdHVuX3dyaXRlX2l0ZXIsXFxubmV0L3FydHIvdHVuLmMtMTQ3LVxcdC5yZWxlYXNlID0gcXJ0cl90dW5fcmVsZWFzZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MTE6NTQuNDAyNTE2NDA5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5OTU4NjMzMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBRUlRSIEVuZHBvaW50IFBvc3QqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEknbSBnb2luZyB0byBzdGFydCB3aXRoIGEgZGVlcCBkaXZlIGludG8gYHFydHJfZW5kcG9pbnRfcG9zdGAgd2l0aGluIGBuZXQvcXJ0ci9hZl9xcnRyLmNgLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB0aGUgY3J1eCBvZiBob3cgZGF0YSBnZXRzIHB1c2hlZCBvbnRvIGEgUVJUUiBlbmRwb2ludCwgd2hpY2ggaXMgYSBrZXkgcGFydCBvZiBob3cgdGhpcyB3aG9sZSBzeXN0ZW0gZnVuY3Rpb25zLiBVbmRlcnN0YW5kaW5nIHRoaXMgaXMgZ29pbmcgdG8gYmUgY2VudHJhbCB0byBmaWd1cmluZyBvdXQgd2hhdGV2ZXIgaXNzdWUgSSdtIGxvb2tpbmcgYXQuIEknbGwgYmUgbG9va2luZyBhdCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IG1hbmlwdWxhdGVzLCBhbnkgbG9ja2luZyBpdCB1c2VzLCBob3cgaXQgaGFuZGxlcyBlcnJvcnMsIGFuZCB0aGUgZGlmZmVyZW50IHBhdGhzIHRoZSBjb2RlIGNhbiB0YWtlIGJhc2VkIG9uIHZhcmlvdXMgY29uZGl0aW9ucy4gSSB3YW50IHRvIHNlZSBob3cgdGhlIG1lc3NhZ2VzIGFyZSBxdWV1ZWQgb3IgdHJhbnNtaXR0ZWQgYW5kIHdoZXJlIHRoZSBhY3R1YWwgZGF0YSB0cmFuc2ZlciB0byB0aGUgZGVzdGluYXRpb24gaGFwcGVucy4gSSdtIGV4cGVjdGluZyB0aGlzIGlzIHdoZXJlIGFueSBzdWJ0bGUgcGVyZm9ybWFuY2UgaXNzdWVzIG9yIHBvdGVudGlhbCBkZWFkbG9jayBzY2VuYXJpb3MgbWlnaHQgcmV2ZWFsIHRoZW1zZWx2ZXMuIExldCdzIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg1NCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjExOjU4LjM5ODM4MjY2M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwNzQzNTk1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJxcnRyX2VuZHBvaW50X3Bvc3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3FydHIvYWZfcXJ0ci5jPTQzMD1zdGF0aWMgdm9pZCBxcnRyX25vZGVfYXNzaWduKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHVuc2lnbmVkIGludCBuaWQpXFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNDQ0LS8qKlxcbm5ldC9xcnRyL2FmX3FydHIuYzo0NDU6ICogcXJ0cl9lbmRwb2ludF9wb3N0KCkgLSBwb3N0IGluY29taW5nIGRhdGFcXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNDQ2LSAqIEBlcDogZW5kcG9pbnQgaGFuZGxlXFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNDUxLSAqL1xcbm5ldC9xcnRyL2FmX3FydHIuYzo0NTI6aW50IHFydHJfZW5kcG9pbnRfcG9zdChzdHJ1Y3QgcXJ0cl9lbmRwb2ludCAqZXAsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pXFxubmV0L3FydHIvYWZfcXJ0ci5jLTQ1My17XFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNTY1LX1cXG5uZXQvcXJ0ci9hZl9xcnRyLmM6NTY2OkVYUE9SVF9TWU1CT0xfR1BMKHFydHJfZW5kcG9pbnRfcG9zdCk7XFxubmV0L3FydHIvYWZfcXJ0ci5jLTU2Ny1cXG4tLVxcbm5ldC9xcnRyL21oaS5jPTIxPXN0YXRpYyB2b2lkIHFjb21fbWhpX3FydHJfZGxfY2FsbGJhY2soc3RydWN0IG1oaV9kZXZpY2UgKm1oaV9kZXYsXFxuLS1cXG5uZXQvcXJ0ci9taGkuYy0zNS1cXG5uZXQvcXJ0ci9taGkuYzozNjpcXHRyYyA9IHFydHJfZW5kcG9pbnRfcG9zdChcXHUwMDI2cWRldi1cXHUwMDNlZXAsIG1oaV9yZXMtXFx1MDAzZWJ1Zl9hZGRyLFxcbm5ldC9xcnRyL21oaS5jLTM3LVxcdFxcdFxcdFxcdG1oaV9yZXMtXFx1MDAzZWJ5dGVzX3hmZXJkKTtcXG4tLVxcbm5ldC9xcnRyL3FydHIuaD0yOD12b2lkIHFydHJfZW5kcG9pbnRfdW5yZWdpc3RlcihzdHJ1Y3QgcXJ0cl9lbmRwb2ludCAqZXApO1xcbm5ldC9xcnRyL3FydHIuaC0yOS1cXG5uZXQvcXJ0ci9xcnRyLmg6MzA6aW50IHFydHJfZW5kcG9pbnRfcG9zdChzdHJ1Y3QgcXJ0cl9lbmRwb2ludCAqZXAsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pO1xcbm5ldC9xcnRyL3FydHIuaC0zMS1cXG4tLVxcbm5ldC9xcnRyL3NtZC5jPTIwPXN0YXRpYyBpbnQgcWNvbV9zbWRfcXJ0cl9jYWxsYmFjayhzdHJ1Y3QgcnBtc2dfZGV2aWNlICpycGRldixcXG4tLVxcbm5ldC9xcnRyL3NtZC5jLTI4LVxcbm5ldC9xcnRyL3NtZC5jOjI5OlxcdHJjID0gcXJ0cl9lbmRwb2ludF9wb3N0KFxcdTAwMjZxZGV2LVxcdTAwM2VlcCwgZGF0YSwgbGVuKTtcXG5uZXQvcXJ0ci9zbWQuYy0zMC1cXHRpZiAocmMgPT0gLUVJTlZBTCkge1xcbi0tXFxubmV0L3FydHIvdHVuLmM9ODU9c3RhdGljIHNzaXplX3QgcXJ0cl90dW5fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4tLVxcbm5ldC9xcnRyL3R1bi5jLTEwNy1cXG5uZXQvcXJ0ci90dW4uYzoxMDg6XFx0cmV0ID0gcXJ0cl9lbmRwb2ludF9wb3N0KFxcdTAwMjZ0dW4tXFx1MDAzZWVwLCBrYnVmLCBsZW4pO1xcbm5ldC9xcnRyL3R1bi5jLTEwOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MTI6MDAuMDA1ODI1MjY2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1NTM1MDU4MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBRUlRSIFNlY3VyaXR5IFBhdGNoKipcblxuT2theSwgc28gbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGFsbCBhYm91dCBzdHJlbmd0aGVuaW5nIHRoZSBRUlRSIG1lc3NhZ2luZyBwcm90b2NvbCdzIHNlY3VyaXR5LCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBIRUxMTyBoYW5kc2hha2UgYW5kIHBhY2tldCBoYW5kbGluZy4gSSBzZWUgdGhhdCBgcXJ0cl9lbmRwb2ludF9wb3N0YCBpcyB0aGUga2V5IGZ1bmN0aW9uIGZvciBoYW5kbGluZyBpbmNvbWluZyBwYWNrZXRzLCB3aGlsZSBgcXJ0cl9ub2RlX2VucXVldWVgIGlzIGNydWNpYWwgZm9yIHNlbmRpbmcgcGFja2V0cywgd2hldGhlciBsb2NhbCBvciBicm9hZGNhc3QuIFRoZSBwYXRjaCBjaGFuZ2VzIGhvdyBgcXJ0cl9ub2RlX2VucXVldWVgIHdvcmtzLCBlZmZlY3RpdmVseSBmaWx0ZXJpbmcgb3V0IHBhY2tldHMgdGhhdCBhcnJpdmUgKmJlZm9yZSogdGhlIEhFTExPIGhhbmRzaGFrZSBpcyBlc3RhYmxpc2hlZC4gVGhpcyBpcyBhIHNtYXJ0IG1vdmUg4oCTIGl0IHByZXZlbnRzIGEgcG90ZW50aWFsIGRlbmlhbC1vZi1zZXJ2aWNlIG9yIGV2ZW4gc29tZXRoaW5nIG1vcmUgbWFsaWNpb3VzIGlmIGF0dGFja2VycyB3ZXJlIGFibGUgdG8gaW5qZWN0IHBhY2tldHMgYmVmb3JlIHRoZSBsaW5rIGlzIHNlY3VyZWx5IGluaXRpYWxpemVkLiBJdCdzIGVzc2VudGlhbGx5IGltcGxlbWVudGluZyBhbiBpbXBsaWNpdCB0cnVzdCBwb2xpY3kgYmVmb3JlIHZlcmlmeWluZyBzZW5kZXIgaWRlbnRpdHkuXG5cblRoZSBmYWN0IHRoYXQgdGhlIHBhdGNoIGFsc28gaW50cm9kdWNlcyBzY2hlZHVsaW5nIGEgSEVMTE8gaGFuZHNoYWtlIGZyb20gdGhlIGNvcmUgbGF5ZXIgdXBvbiBlbmRwb2ludCByZWdpc3RyYXRpb24gKGBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyYCkgaXMgYW4gaW1wb3J0YW50IGFyY2hpdGVjdHVyYWwgY2hhbmdlLiBJdCBjZW50cmFsaXplcyBjb250cm9sIG92ZXIgdGhlIGhhbmRzaGFrZSBwcm9jZXNzLCB3aGljaCBtYWtlcyB0aGUgaW1wbGVtZW50YXRpb24gY2xlYW5lciBhbmQgcG90ZW50aWFsbHkgbW9yZSByb2J1c3QuIFJlbW92aW5nIHRoZSBgc2F5X2hlbGxvYCBjYWxsIGZyb20gYGN0cmxfY21kX2hlbGxvYCBpbiBgbmV0L3FydHIvbnMuY2AgcmVpbmZvcmNlcyB0aGlzIHNoaWZ0IHRvd2FyZHMgdGhlIGNvcmUgbGF5ZXIgdGFraW5nIHJlc3BvbnNpYmlsaXR5IGZvciB0aGUgaW5pdGlhbCBoYW5kc2hha2UuXG5cbkdpdmVuIHRoZXNlIGNoYW5nZXMsIHRoZSBtb3N0IGludGVyZXN0aW5nIGFyZWFzIGZvciBmdXp6aW5nIGFuZCBzZWN1cml0eSBhbmFseXNpcyBhcmUgY2xlYXI6IGBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyYCAoY3JpdGljYWwgZm9yIGhhbmRzaGFrZSBpbml0aWF0aW9uKSwgYHFydHJfc2VuZG1zZ2AgKHRoZSBlbnRyeSBwb2ludCBmb3Igb3V0Z29pbmcgcGFja2V0cyksIGFuZCBgcXJ0cl90dW5fd3JpdGVfaXRlcmAgKGhhbmRsZXMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdHVubmVsKS4gQW5kIGRvbid0IGZvcmdldCBgcXJ0cl9lbmRwb2ludF9wb3N0YCwgd2hpY2ggZGVhbHMgd2l0aCB0aGUgKmluY29taW5nKiBwYWNrZXRzLCBhIGNsYXNzaWMgYXR0YWNrIHZlY3Rvci5cblxuV2FpdCBhIHNlY29uZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGFjY291bnRpbmcgZm9yIGV2ZXJ5dGhpbmcuIEkgbmVlZCB0byBub3RlIHRoYXQgYHFydHJfbm9kZV9lbnF1ZXVlYCBpcyBjYWxsZWQgZnJvbSBib3RoIGBxcnRyX3NlbmRtc2dgIGFuZCBgcXJ0cl9iY2FzdF9lbnF1ZXVlYC4gU28gYHFydHJfYmNhc3RfZW5xdWV1ZWAgaXMgYWxzbyBjYWxsZWQgYnkgYHFydHJfc2VuZG1zZ2AsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgdGhlIGNvdmVyYWdlLiBBbmQgdGhlbiwgSSBzaG91bGQga2VlcCBhbiBleWUgb24gYHFydHJfaGVsbG9fd29ya2AsIGJlY2F1c2UgdGhhdCdzIHNjaGVkdWxlZCBieSBib3RoIGBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyYCBhbmQgYHFydHJfbm9kZV9lbnF1ZXVlYCB3aGljaCBpcyBjYWxsZWQgYnkgYm90aCBgcXJ0cl9zZW5kbXNnYCBhbmQgYHFydHJfYmNhc3RfZW5xdWV1ZWAuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZXNlIGNoYW5nZXMgaW4gYG5ldC9xcnRyL25zLmNgIGFzIHdlbGwsIHNvIEknbGwgY2hlY2sgYGN0cmxfY21kX2hlbGxvYCBhZ2Fpbi4gSSBuZWVkIHRvIHNlZSB3aGF0IGtpbmQgb2YgcmVmYWN0b3Jpbmcgd2FzIGRvbmUgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODE1LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjEyOjA2LjU1OTMzNDUxNloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0NjY4MTAwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjdHJsX2NtZF9oZWxsb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcXJ0ci9ucy5jPTMzMD1zdGF0aWMgaW50IHNheV9oZWxsbyhzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqZGVzdClcXG4tLVxcbm5ldC9xcnRyL25zLmMtMzUyLVxcbm5ldC9xcnRyL25zLmM6MzUzOnN0YXRpYyBpbnQgY3RybF9jbWRfaGVsbG8oc3RydWN0IHNvY2thZGRyX3FydHIgKnNxKVxcbm5ldC9xcnRyL25zLmMtMzU0LXtcXG4tLVxcbm5ldC9xcnRyL25zLmM9NjMxPXN0YXRpYyB2b2lkIHFydHJfbnNfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9xcnRyL25zLmMtNjc0LVxcdFxcdGNhc2UgUVJUUl9UWVBFX0hFTExPOlxcbm5ldC9xcnRyL25zLmM6Njc1OlxcdFxcdFxcdHJldCA9IGN0cmxfY21kX2hlbGxvKFxcdTAwMjZzcSk7XFxubmV0L3FydHIvbnMuYy02NzYtXFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjEyOjA4LjIwNjAyMTI2NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzUyODkyMTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqTXkgVGhpbmtpbmcgb24gUVJUUiBhbmQgTmV0d29yayBSb3V0aW5nKipcblxuQWxyaWdodCwgc28gYGN0cmxfY21kX2hlbGxvYCBpcyBiZWluZyBjYWxsZWQgYnkgYHFydHJfbnNfd29ya2VyYC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSBgcXJ0cl9uc193b3JrZXJgIGlzIHRoZSBjcml0aWNhbCBwaWVjZSBvZiB0aGlzIHB1enpsZSwgc2luY2UgaXQncyB0aGUgZnVuY3Rpb24gdGhhdCdzIGRpcmVjdGx5IGhhbmRsaW5nIHRoYXQgY29tbWFuZC4gQW5kIHNpbmNlIGBxcnRyX25zX3dvcmtlcmAgaXMgYSB3b3JrcXVldWUgZnVuY3Rpb24sIEknbSBkZWFsaW5nIHdpdGggYW4gYXN5bmNocm9ub3VzIGV4ZWN1dGlvbiBjb250ZXh0IGhlcmUuIFRoYXQgY2hhbmdlcyBob3cgSSdkIGFwcHJvYWNoIGRlYnVnZ2luZyBvciBhbmFseXppbmcgdGhpcyBmbG93LiBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgY29uY3VycmVuY3kgaXNzdWVzLlxuXG5TbywgbGV0J3MgaWRlbnRpZnkgdGhlIGtleSBwbGF5ZXJzIGhlcmU6IGBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyYCwgYHFydHJfc2VuZG1zZ2AsIGBxcnRyX3R1bl93cml0ZV9pdGVyYCwgYHFydHJfZW5kcG9pbnRfcG9zdGAsIGFuZCBvZiBjb3Vyc2UsIHRoZSBldmVyLXByZXNlbnQgYHFydHJfbnNfd29ya2VyYC4gSSBrbm93IHRob3NlIGZ1bmN0aW9ucyBoYW5kbGUgdmFyaW91cyBhc3BlY3RzIG9mIFFSVFIsIHdpdGggYHFydHJfZW5kcG9pbnRfcmVnaXN0ZXJgIGJlaW5nIGVzc2VudGlhbCBmb3Igc2V0IHVwLCBgcXJ0cl9zZW5kbXNnYCBhbmQgYHFydHJfdHVuX3dyaXRlX2l0ZXJgIG1hbmFnaW5nIGRhdGEgdHJhbnNmZXIsIGBxcnRyX2VuZHBvaW50X3Bvc3RgIGRlYWxpbmcgd2l0aCBtZXNzYWdlIGhhbmRsaW5nLCBhbmQgYHFydHJfbnNfd29ya2VyYCBvcmNoZXN0cmF0aW5nIHRoZSB3aG9sZSBwcm9jZXNzLlxuXG5Ob3csIGFzIGZhciBhcyBjb25maWcgZ29lcywgSSdtIGV4cGVjdGluZyBgUVJUUmAgdG8gYmUgdGhlIGNvcmUgZW5hYmxlLiBTaW5jZSBJIHNlZSBgUVJUUl9UVU5gIG1lbnRpb25lZCwgSSBrbm93IHRoYXQncyByZWxhdGVkIHRvIHRoZSBUVU4gZGV2aWNlIHN1cHBvcnQuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYFFSVFJfVFVOYCBpcyBlbmFibGVkIHRvIGhhdmUgdGhpcyB3aG9sZSBmbG93IHdvcmtpbmcgYW5kIGlmIHRoZXJlIGFyZSBhbnkgZGVwZW5kZW5jaWVzIEkgc2hvdWxkIGFsc28gYmUgbWluZGZ1bCBvZi5cblxuSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBlbmFibGVkIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTkwMCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMjoxMi45NTg5MTY0MDFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTYzNjg5OTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFFSVFJfVFVOXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9xcnRyL0tjb25maWc9MTc9Y29uZmlnIFFSVFJfU01EXFxuLS1cXG5uZXQvcXJ0ci9LY29uZmlnLTIzLVxcbm5ldC9xcnRyL0tjb25maWc6MjQ6Y29uZmlnIFFSVFJfVFVOXFxubmV0L3FydHIvS2NvbmZpZy0yNS1cXHR0cmlzdGF0ZSBcXFwiVFVOIGRldmljZSBmb3IgUXVhbGNvbW0gSVBDIFJvdXRlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MTI6MTQuNTU1Mjk0MTU1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5NTMxNDk2MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6XG5cbioqTmF2aWdhdGluZyB0aGUgUVJUUiBLZXJuZWwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHNvbWV0aGluZyBhbmQgSSBzZWUgYFFSVFJfVFVOYCBuZXN0ZWQgd2l0aGluIGBpZiBRUlRSYC4gVGhhdCdzIGEga2V5IG9ic2VydmF0aW9uLiBJdCB0ZWxscyBtZSB0aGF0IHRoZSBvcHRpb24gdG8gZW5hYmxlIHRoZSBUVU4gaW50ZXJmYWNlIHN1cHBvcnQgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgUVJUUiBzdWJzeXN0ZW0gaXMgZGVwZW5kZW50IG9uIFFSVFIgaXRzZWxmIGJlaW5nIGVuYWJsZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgcmVsYXRpb25zaGlwIHByZWNpc2VseS5cblxuU28sIHRoZSBsb2dpY2FsIG5leHQgc3RlcCBpcyB0byBnbyBzdHJhaWdodCB0byBgbmV0L3FydHIvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIFFSVFIgbW9kdWxlIGFyZSBkZWZpbmVkLiBUaGUgS2NvbmZpZyBmaWxlIHdpbGwgcmV2ZWFsIHRoZSBleGFjdCBkZXBlbmRlbmNpZXMsIGRlZmF1bHRzLCBhbmQgaGVscCB0ZXh0IGFzc29jaWF0ZWQgd2l0aCBgUVJUUl9UVU5gIGFuZCwgY3JpdGljYWxseSwgaG93IGBRUlRSYCBpcyBkZWZpbmVkIGluIHJlbGF0aW9uIHRvIGl0LiBJIGV4cGVjdCB0byBmaW5kIG1vcmUgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGFueSBkZXBlbmRlbmNpZXMsIHN1Y2ggYXMgd2hldGhlciBpdCBuZWVkcyBhIHNwZWNpZmljIHZlcnNpb24gb2YgdGhlIGtlcm5lbC4gSSB3aWxsIHBheSBhdHRlbnRpb24gdG8gdGhlIGV4YWN0IGxhbmd1YWdlIHRoZXJlIHRvIGJlIHN1cmUgSSBhbSBpbnRlcnByZXRpbmcgdGhlIGluZm9ybWF0aW9uIGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0ODUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMjoyMC41MDg0NDU5ODdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzcyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3FydHIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0IyBRdWFsY29tbSBJUEMgUm91dGVyIGNvbmZpZ3VyYXRpb25cXG4gICAzOlxcdCNcXG4gICA0OlxcdFxcbiAgIDU6XFx0Y29uZmlnIFFSVFJcXG4gICA2OlxcdFxcdHRyaXN0YXRlIFxcXCJRdWFsY29tbSBJUEMgUm91dGVyIHN1cHBvcnRcXFwiXFxuICAgNzpcXHRcXHRoZWxwXFxuICAgODpcXHRcXHQgIFNheSBZIGlmIHlvdSBpbnRlbmQgdG8gdXNlIFF1YWxjb21tIElQQyByb3V0ZXIgcHJvdG9jb2wuICBUaGVcXG4gICA5OlxcdFxcdCAgcHJvdG9jb2wgaXMgdXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoIHNlcnZpY2VzIHByb3ZpZGVkIGJ5IG90aGVyXFxuICAxMDpcXHRcXHQgIGhhcmR3YXJlIGJsb2NrcyBpbiB0aGUgc3lzdGVtLlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIEluIG9yZGVyIHRvIGRvIHNlcnZpY2UgbG9va3VwcywgYSB1c2Vyc3BhY2UgZGFlbW9uIGlzIHJlcXVpcmVkIHRvXFxuICAxMzpcXHRcXHQgIG1haW50YWluIGEgc2VydmljZSBsaXN0aW5nLlxcbiAgMTQ6XFx0XFxuICAxNTpcXHRpZiBRUlRSXFxuICAxNjpcXHRcXG4gIDE3OlxcdGNvbmZpZyBRUlRSX1NNRFxcbiAgMTg6XFx0XFx0dHJpc3RhdGUgXFxcIlNNRCBJUEMgUm91dGVyIGNoYW5uZWxzXFxcIlxcbiAgMTk6XFx0XFx0ZGVwZW5kcyBvbiBSUE1TRyB8fCAoQ09NUElMRV9URVNUIFxcdTAwMjZcXHUwMDI2IFJQTVNHPW4pXFxuICAyMDpcXHRcXHRoZWxwXFxuICAyMTpcXHRcXHQgIFNheSBZIGhlcmUgdG8gc3VwcG9ydCBTTUQgYmFzZWQgaXBjcm91dGVyIGNoYW5uZWxzLiAgU01EIGlzIHRoZVxcbiAgMjI6XFx0XFx0ICBtb3N0IGNvbW1vbiB0cmFuc3BvcnQgZm9yIElQQyBSb3V0ZXIuXFxuICAyMzpcXHRcXG4gIDI0OlxcdGNvbmZpZyBRUlRSX1RVTlxcbiAgMjU6XFx0XFx0dHJpc3RhdGUgXFxcIlRVTiBkZXZpY2UgZm9yIFF1YWxjb21tIElQQyBSb3V0ZXJcXFwiXFxuICAyNjpcXHRcXHRoZWxwXFxuICAyNzpcXHRcXHQgIFNheSBZIGhlcmUgdG8gZXhwb3NlIGEgY2hhcmFjdGVyIGRldmljZSB0aGF0IGFsbG93cyB1c2VyIHNwYWNlIHRvXFxuICAyODpcXHRcXHQgIGltcGxlbWVudCBlbmRwb2ludHMgb2YgUVJUUiwgZm9yIHB1cnBvc2Ugb2YgdHVubmVsaW5nIGRhdGEgdG8gb3RoZXJcXG4gIDI5OlxcdFxcdCAgaG9zdHMgb3IgdGVzdGluZyBwdXJwb3Nlcy5cXG4gIDMwOlxcdFxcbiAgMzE6XFx0Y29uZmlnIFFSVFJfTUhJXFxuICAzMjpcXHRcXHR0cmlzdGF0ZSBcXFwiTUhJIElQQyBSb3V0ZXIgY2hhbm5lbHNcXFwiXFxuICAzMzpcXHRcXHRkZXBlbmRzIG9uIE1ISV9CVVNcXG4gIDM0OlxcdFxcdGhlbHBcXG4gIDM1OlxcdFxcdCAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IE1ISSBiYXNlZCBpcGNyb3V0ZXIgY2hhbm5lbHMuIE1ISSBpcyB0aGVcXG4gIDM2OlxcdFxcdCAgdHJhbnNwb3J0IHVzZWQgZm9yIGNvbW11bmljYXRpbmcgdG8gZXh0ZXJuYWwgbW9kZW1zLlxcbiAgMzc6XFx0XFxuICAzODpcXHRlbmRpZiAjIFFSVFJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MTI6MjAuNTA4NTI1MzA3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMDIyMjE5Mzg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IEFzc2Vzc21lbnQ6IFFSVFIgQ29yZSBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgUVJUUiBwYXRjaCwgYW5kIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgYXJlIGBRUlRSYCBhbmQgYFFSVFJfVFVOYC4gSSBuZWVkIHRvIHNvbGlkaWZ5IHRoZSBjaGFuZ2VzLCBzdGFydGluZyB3aXRoIHRoZSBhZGRpdGlvbiBvZiBhIGBoZWxsb19zZW50YCBmbGFnIHdpdGhpbiB0aGUgYHFydHJfbm9kZWAgc3RydWN0dXJlLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGxpZXMgaW4gaG93IGBxcnRyX25vZGVfZW5xdWV1ZWAgbm93IGJlaGF2ZXM6IGl0J3MgbW9kaWZpZWQgdG8gZHJvcCBwYWNrZXRzIGlmIGBoZWxsb19zZW50YCBpcyBmYWxzZSwgdW5sZXNzIGl0J3MgYSBIRUxMTyBwYWNrZXQuIENydWNpYWxseSwgYSBIRUxMTyBoYW5kc2hha2UgaXMgc2NoZWR1bGVkIGZyb20gdGhlIGNvcmUgZHVyaW5nIGVuZHBvaW50IHJlZ2lzdHJhdGlvbiB2aWEgYHFydHJfZW5kcG9pbnRfcmVnaXN0ZXJgLiBBbHNvLCB0aGUgYGN0cmxfY21kX2hlbGxvYCBsb2dpYyBpbiBgbmV0L3FydHIvbnMuY2AgaXMgdXBkYXRlZCB0byByZW1vdmUgdGhlIGBzYXlfaGVsbG9gIGNhbGwsIGEgbm90YWJsZSBzaGlmdC5cblxuRnVuY3Rpb25hbGx5LCB0aGlzIGltcGFjdHMgdGhlIFFSVFIgY29yZSBsb2dpYyBkaXJlY3RseS4gVGhlIHJlbGV2YW50IHBhdGhzIGZvciB0aGlzIGFyZSBgcXJ0cl90dW5fd3JpdGVfaXRlcmAgd2hpY2ggY2FsbHMgYHFydHJfZW5kcG9pbnRfcG9zdGAgYW5kIGFsc28gYHFydHJfc2VuZG1zZ2Agd2hpY2ggY2FsbHMgYHFydHJfbm9kZV9lbnF1ZXVlYC4gVGhlIGVuZHBvaW50IHJlZ2lzdHJhdGlvbiBgcXJ0cl9lbmRwb2ludF9yZWdpc3RlcmAgKHdoaWNoIGlzIGl0c2VsZiB0cmlnZ2VyZWQgd2hlbiBgL2Rldi9xcnRyLXR1bmAgaXMgb3BlbmVkKSBpcyBhbHNvIGtleS5cblxuQmFzZWQgb24gYWxsIHRoaXMsIFdvcnRoRnV6emluZz10cnVlLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHN0cm9uZyBzeW1ib2xzIGZvciBmdXp6aW5nLiBGcm9tIHRoZSBwYXRjaCBhbmQgcHJldmlvdXMgdW5kZXJzdGFuZGluZywgdGhlIGZvbGxvd2luZyBzZWVtIGxpa2Ugc29saWQgdGFyZ2V0czogYHFydHJfZW5kcG9pbnRfcmVnaXN0ZXJgLCBgcXJ0cl9zZW5kbXNnYCwgYHFydHJfdHVuX3dyaXRlX2l0ZXJgLCBgcXJ0cl9lbmRwb2ludF9wb3N0YCwgYW5kIGBxcnRyX25zX3dvcmtlcmAuXG5cblJpZ2h0LCBsZXQncyBjaGVjayBzb21lIHByb3BlcnRpZXMgb2YgdGhlIGFib3ZlIHN5bWJvbHMuIEkgc2VlIHRoYXQgYHFydHJfbnNfd29ya2VyYCBpcyBzdGF0aWMgYnV0IGEgd29ya3F1ZXVlIGZ1bmN0aW9uLCBzbyBpdCdzIGEgcHJvbWlzaW5nIGVudHJ5IHBvaW50LiBgcXJ0cl90dW5fd3JpdGVfaXRlcmAgaXMgYWxzbyBzdGF0aWMsIGJ1dCBpcyBhIGZpbGUgb3BlcmF0aW9uLCBtYWtpbmcgaXQgYSBnb29kIGVudHJ5IHBvaW50LiBgcXJ0cl9zZW5kbXNnYCBpcyBzdGF0aWMgYXMgd2VsbCwgYnV0IGl0J3MgYSBwcm90b19vcHMgZnVuY3Rpb24sIGFuZCB0aG9zZSBhcmUgb2Z0ZW4gYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBgcXJ0cl9lbmRwb2ludF9wb3N0YCBpcyBleHBvcnRlZCwgZ29vZC4gQW5kIHRoZSBzYW1lIGZvciBgcXJ0cl9lbmRwb2ludF9yZWdpc3RlcmAuIFdhaXQsIGBxcnRyX25zX3dvcmtlcmAgaXMgaW4gYG5ldC9xcnRyL25zLmNgLCB3aGljaCBtYWtlcyBtZSB0aGluayB0aGF0IEkgc2hvdWxkIHJldmlldyBgcXJ0cl9uc193b3JrZXJgIHN5bWJvbCB0byBjb25zaWRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyNDQsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMjozMS41MzA3NDc4MjJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNTQwMzQxNzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicXJ0cl9uc193b3JrZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3FydHIvbnMuYz02MDc9c3RhdGljIHZvaWQgY3RybF9jbWRfZGVsX2xvb2t1cChzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqZnJvbSxcXG4tLVxcbm5ldC9xcnRyL25zLmMtNjMwLVxcbm5ldC9xcnRyL25zLmM6NjMxOnN0YXRpYyB2b2lkIHFydHJfbnNfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5uZXQvcXJ0ci9ucy5jLTYzMi17XFxuLS1cXG5uZXQvcXJ0ci9ucy5jPTczMD1pbnQgcXJ0cl9uc19pbml0KHZvaWQpXFxuLS1cXG5uZXQvcXJ0ci9ucy5jLTczNS1cXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2cXJ0cl9ucy5sb29rdXBzKTtcXG5uZXQvcXJ0ci9ucy5jOjczNjpcXHRJTklUX1dPUksoXFx1MDAyNnFydHJfbnMud29yaywgcXJ0cl9uc193b3JrZXIpO1xcbm5ldC9xcnRyL25zLmMtNzM3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMjozMy43ODQ3ODg0MzhaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzODQ1NzI5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBXb3JrcXVldWUgQ29udGV4dCoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IGEgd29ya3F1ZXVlIGZ1bmN0aW9uIGhlcmUuIFRoZSBpbml0aWFsIGltcHJlc3Npb24gaXMgY29uZmlybWVkOyBpdCdzIGRlZmluaXRlbHkgb3BlcmF0aW5nIHdpdGhpbiB0aGF0IGZyYW1ld29yay4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBnZXQgYSBicm9hZGVyIHZpZXcuIEFyZSB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhpcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgc2NvcGUgb2YgaXRzIGludGVyYWN0aW9uLiBMZXQgbWUgcXVpY2tseSBleGFtaW5lIHRoZSBjb2RlIGJhc2UuLi4gQWgsIHllcy4gYHFydHJfaGVsbG9fd29ya2Ag4oCTIHRoYXQncyB0aGUgb25lLiBBbmQgaXQgc2VlbXMgdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uIHdhcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIE9rYXksIGdvb2QgdG8ga25vdy4gTm93IEkgaGF2ZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGl0cyBwcm92ZW5hbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQ2MywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjEyOjM3LjAyMzI0OTI0MloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAzMzQxNTg5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJxcnRyX2hlbGxvX3dvcmtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3FydHIvYWZfcXJ0ci5jPTU3OD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnFydHJfYWxsb2NfY3RybF9wYWNrZXQoc3RydWN0IHFydHJfY3RybF9wa3QgKipwa3QsXFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNTkzLVxcbm5ldC9xcnRyL2FmX3FydHIuYzo1OTQ6c3RhdGljIHZvaWQgcXJ0cl9oZWxsb193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNTk1LXtcXG4tLVxcbm5ldC9xcnRyL2FmX3FydHIuYz02MzE9aW50IHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIoc3RydWN0IHFydHJfZW5kcG9pbnQgKmVwLCB1bnNpZ25lZCBpbnQgbmlkKVxcbi0tXFxubmV0L3FydHIvYWZfcXJ0ci5jLTY0OC1cXHRub2RlLVxcdTAwM2VoZWxsb19zZW50ID0gZmFsc2U7XFxubmV0L3FydHIvYWZfcXJ0ci5jOjY0OTpcXHRJTklUX1dPUksoXFx1MDAyNm5vZGUtXFx1MDAzZXNheV9oZWxsbywgcXJ0cl9oZWxsb193b3JrKTtcXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjUwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMjozOS4wNTY2ODMyNDFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM3ODM5MTg2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgYnJlYWtkb3duIG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipSZWZpbmluZyB0aGUgRnV6emluZyBTdHJhdGVneSBmb3IgUVJUUioqXG5cbk9rYXksIGBxcnRyX2hlbGxvX3dvcmtgIGZlZWxzIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgZnV6emluZy4gTm93LCBsZXQncyBuYWlsIGRvd24gYSBmZXcgbW9yZSBwcmVjaXNlIGZ1bmN0aW9uIHRhcmdldHMuIEknbSB0aGlua2luZyB3ZSBzaG91bGQgZm9jdXMgb3VyIGZ1enppbmcgZWZmb3J0cyBvbjpcblxuKiAgIGBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyYDogVGhpcyBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIGVuZHBvaW50IHJlZ2lzdHJhdGlvbiwgYSBjcml0aWNhbCBmdW5jdGlvbi5cbiogICBgcXJ0cl9zZW5kbXNnYDogS2V5IGZvciB0aGUgbWVzc2FnZSBzZW5kaW5nIHBhdGguXG4qICAgYHFydHJfdHVuX3dyaXRlX2l0ZXJgOiBUaGUgdHVubmVsIHdyaXRlIGl0ZXJhdGlvbiBmdW5jdGlvbiwgaW1wb3J0YW50IGZvciB0aGUgYFFSVFJfVFVOYCBkZXZpY2UuXG4qICAgYHFydHJfZW5kcG9pbnRfcG9zdGA6IEVuZHBvaW50IHBvc3QgZnVuY3Rpb24sIGFub3RoZXIgY29yZSBwYXJ0IG9mIHRoZSBjb2RlLlxuKiAgIGBxcnRyX25zX3dvcmtlcmA6IFRoZSBuYW1lc3BhY2Ugd29ya2VyLCBhbiBhcmVhIEkgd2FudCB0byBleHBsb3JlLlxuKiAgIGBxcnRyX2hlbGxvX3dvcmtgOiBCdWlsZGluZyBvbiBteSBpbml0aWFsIGluc3RpbmN0LCB0aGlzIGZ1bmN0aW9uIGlzIGNlbnRyYWwgdG8gdGhlIGhhbmRzaGFrZS5cblxuRXNzZW50aWFsbHksIGJ5IHRhcmdldGluZyB0aGVzZSwgd2Ugc2hvdWxkIGJlIGFibGUgdG8gdHJpZ2dlciB2YXJpb3VzIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW52b2x2ZWQgaW4gdGhlIG5ldyBIRUxMTyBoYW5kc2hha2UgbG9naWMgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLlxuXG5UbyBiZSBzdXJlIHRoYXQgZXZlcnl0aGluZyBpcyBjb3ZlcmVkIGFuZCBlbmFibGVkIGZvciBmdXp6aW5nIEkgbmVlZCB0byBjb25maWd1cmUgdGhlIGZ1enppbmcgZW52aXJvbm1lbnQ6XG5cbiogICBgUVJUUmA6IFRoaXMgbmVlZHMgdG8gYmUgYWN0aXZlLlxuKiAgIGBRUlRSX1RVTmA6IEFuZCB0aGUgVFVOIGRldmljZSwgdG8gdGVzdCB0aGUgdmlydHVhbGl6ZWQgcGF0aC5cblxuVWx0aW1hdGVseSwgdGhpcyBwYXRjaCBhbHRlcnMgY29yZSBRUlRSIGJlaGF2aW9yIHRvIHBlcmZvcm0gYSBIRUxMTyBoYW5kc2hha2UgZHVyaW5nIGVuZHBvaW50IHJlZ2lzdHJhdGlvbiwgZHJvcHBpbmcgcGFja2V0cyBpZiB0aGlzIGhhbmRzaGFrZSBpcyBpbmNvbXBsZXRlLiBUaGF0IGhhbmRzaGFrZSwgY29tYmluZWQgd2l0aCBhIGAvZGV2L3FydHItdHVuYCBkZXZpY2UsIG1ha2VzIGl0IGFjaGlldmFibGUgdG8gY29udHJvbCB0aGUgY29yZSBhbmQgdHJpZ2dlciB2YXJpb3VzIGZ1bmN0aW9ucy5cblxuSSB0aGluayB0aGUgYW5hbHlzaXMgaXMgZG9uZSwgc28gSSB3aWxsIG5vdyBzZXQgdGhlIGZ1enppbmcgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ5MDgsIk91dHB1dFRva2VucyI6MTc5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjEyOjQ1LjQzNTA3ODE1NloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTkwNDYzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUVJUUlwiLFxuICAgIFwiUVJUUl9UVU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJxcnRyX2VuZHBvaW50X3JlZ2lzdGVyXCIsXG4gICAgXCJxcnRyX3NlbmRtc2dcIixcbiAgICBcInFydHJfdHVuX3dyaXRlX2l0ZXJcIixcbiAgICBcInFydHJfZW5kcG9pbnRfcG9zdFwiLFxuICAgIFwicXJ0cl9uc193b3JrZXJcIixcbiAgICBcInFydHJfaGVsbG9fd29ya1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBRdWFsY29tbSBJUEMgUm91dGVyIChRUlRSKSBjb3JlIGxvZ2ljIHRvIGluaXRpYXRlIGEgSEVMTE8gaGFuZHNoYWtlIHVwb24gZW5kcG9pbnQgcmVnaXN0cmF0aW9uIGFuZCBkcm9wIHBhY2tldHMgaWYgdGhlIGhhbmRzaGFrZSBoYXNuJ3QgY29tcGxldGVkLiBUaGlzIGZ1bmN0aW9uYWxpdHkgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSB1c2luZyB0aGUgYC9kZXYvcXJ0ci10dW5gIGRldmljZSwgd2hpY2ggYWxsb3dzIHVzZXJzcGFjZSB0byByZWdpc3RlciBlbmRwb2ludHMgYW5kIGluamVjdCBwYWNrZXRzLiBUaGUgY2hhbmdlcyBhZmZlY3QgY29yZSBwYWNrZXQgZW5xdWV1ZWluZyBhbmQgZW5kcG9pbnQgcmVnaXN0cmF0aW9uIHBhdGhzLCB3aGljaCBhcmUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJRUlRSXCIsXG4gICAgXCJRUlRSX1RVTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInFydHJfZW5kcG9pbnRfcmVnaXN0ZXJcIixcbiAgICBcInFydHJfc2VuZG1zZ1wiLFxuICAgIFwicXJ0cl90dW5fd3JpdGVfaXRlclwiLFxuICAgIFwicXJ0cl9lbmRwb2ludF9wb3N0XCIsXG4gICAgXCJxcnRyX25zX3dvcmtlclwiLFxuICAgIFwicXJ0cl9oZWxsb193b3JrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFF1YWxjb21tIElQQyBSb3V0ZXIgKFFSVFIpIGNvcmUgbG9naWMgdG8gaW5pdGlhdGUgYSBIRUxMTyBoYW5kc2hha2UgdXBvbiBlbmRwb2ludCByZWdpc3RyYXRpb24gYW5kIGRyb3AgcGFja2V0cyBpZiB0aGUgaGFuZHNoYWtlIGhhc24ndCBjb21wbGV0ZWQuIFRoaXMgZnVuY3Rpb25hbGl0eSBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IHVzaW5nIHRoZSBgL2Rldi9xcnRyLXR1bmAgZGV2aWNlLCB3aGljaCBhbGxvd3MgdXNlcnNwYWNlIHRvIHJlZ2lzdGVyIGVuZHBvaW50cyBhbmQgaW5qZWN0IHBhY2tldHMuIFRoZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIHBhY2tldCBlbnF1ZXVlaW5nIGFuZCBlbmRwb2ludCByZWdpc3RyYXRpb24gcGF0aHMsIHdoaWNoIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMjo0NS41NTY5OTA4MzRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3MDcyMDU2NzczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MTI6NDUuNTU3NjIxMTk0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjc3MDcxNDE5OTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgUVJUUiBzdWJzeXN0ZW0gdG8gaW5pdGlhdGUgdGhlIEhFTExPIGhhbmRzaGFrZSBmcm9tIHRoZSBjb3JlIGxheWVyIGluc3RlYWQgb2YgdGhlIG5hbWVzZXJ2aWNlLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IHdvcmsgaXRlbSBgcXJ0cl9oZWxsb193b3JrYCB3aGljaCBhbGxvY2F0ZXMgYSBjb250cm9sIHBhY2tldCBhbmQgZW5xdWV1ZXMgaXQuIFRoZSBjb250cm9sIHBhY2tldCBpcyBhbGxvY2F0ZWQgdXNpbmcgYHFydHJfYWxsb2NfY3RybF9wYWNrZXRgLCB3aGljaCB1c2VzIGBza2JfcHV0X3plcm9gIHRvIGZ1bGx5IHplcm8taW5pdGlhbGl6ZSB0aGUgcGFja2V0IHBheWxvYWQuIFRoZSBzdGFjay1hbGxvY2F0ZWQgYHN0cnVjdCBzb2NrYWRkcl9xcnRyYCB2YXJpYWJsZXMgKGBmcm9tYCBhbmQgYHRvYCkgYXJlIHVzZWQgdG8gcGFzcyBhZGRyZXNzZXMgdG8gYHFydHJfbm9kZV9lbnF1ZXVlYCwgd2hpY2ggb25seSByZWFkcyB0aGVpciBgc3Ffbm9kZWAgYW5kIGBzcV9wb3J0YCBmaWVsZHMgdG8gcG9wdWxhdGUgdGhlIHBhY2tldCBoZWFkZXIuIFRoZSBgc3RydWN0IHNvY2thZGRyX3FydHJgIGl0c2VsZiBpcyBub3QgY29waWVkIHRvIHRoZSBwYWNrZXQgb3IgdG8gdXNlcnNwYWNlLCBzbyBhbnkgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBwYWRkaW5nIGJ5dGVzIG9uIHRoZSBzdGFjayBhcmUgbmV2ZXIgcmVhZCBvciBsZWFrZWQuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLCBub3IgZG9lcyBpdCBtb2RpZnkgYm91bmRzIGNoZWNrcyBvciBsZW5ndGhzIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIG9yIGxvY2tpbmcgaXNzdWVzKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIG9yIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyNWM1N2JiNTg3YzJmY2I4NWQ4MTNmM2IzNDJmYjIyMzhmYTJlMjYyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAxNjoxMDo1NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9xcnRyL2FmX3FydHIuYyBiL25ldC9xcnRyL2FmX3FydHIuY1xuaW5kZXggZDAyZWY5YTc0YzNjYS4uN2FkYzBhMDUzMTI1NCAxMDA2NDRcbi0tLSBhL25ldC9xcnRyL2FmX3FydHIuY1xuKysrIGIvbmV0L3FydHIvYWZfcXJ0ci5jXG5AQCAtOSw2ICs5LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90ZXJtaW9zLmhcdTAwM2VcdC8qIEZvciBUSU9DSU5RL09VVFEgKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvd2FpdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvc29jay5oXHUwMDNlXG4gXG5AQCAtMTIwLDggKzEyMSwxMCBAQCBzdGF0aWMgREVGSU5FX1hBUlJBWV9BTExPQyhxcnRyX3BvcnRzKTtcbiAgKiBAbmlkOiBub2RlIGlkXG4gICogQHFydHJfdHhfZmxvdzogeGFycmF5IG9mIHFydHJfdHhfZmxvdywga2V5ZWQgYnkgbm9kZSBcdTAwM2NcdTAwM2MgMzIgfCBwb3J0XG4gICogQHFydHJfdHhfbG9jazogbG9jayBmb3IgcXJ0cl90eF9mbG93IGluc2VydHNcbisgKiBAaGVsbG9fc2VudDogaGVsbG8gcGFja2V0IHNlbmQgc3VjY2Vzc2Z1bFxuICAqIEByeF9xdWV1ZTogcmVjZWl2ZSBxdWV1ZVxuICAqIEBpdGVtOiBsaXN0IGl0ZW0gZm9yIGJyb2FkY2FzdCBsaXN0XG4rICogQHNheV9oZWxsbzogc2NoZWR1bGVkIHdvcmsgZm9yIHNlbmRpbmcgaGVsbG8gcGFja2V0XG4gICovXG4gc3RydWN0IHFydHJfbm9kZSB7XG4gXHRzdHJ1Y3QgbXV0ZXggZXBfbG9jaztcbkBAIC0xMzIsOCArMTM1LDExIEBAIHN0cnVjdCBxcnRyX25vZGUge1xuIFx0c3RydWN0IHhhcnJheSBxcnRyX3R4X2Zsb3c7XG4gXHRzdHJ1Y3QgbXV0ZXggcXJ0cl90eF9sb2NrOyAvKiBmb3IgcXJ0cl90eF9mbG93ICovXG4gXG4rXHRib29sIGhlbGxvX3NlbnQ7XG4rXG4gXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHJ4X3F1ZXVlO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBpdGVtO1xuK1x0c3RydWN0IHdvcmtfc3RydWN0IHNheV9oZWxsbztcbiB9O1xuIFxuIC8qKlxuQEAgLTE4Nyw2ICsxOTMsOCBAQCBzdGF0aWMgdm9pZCBfX3FydHJfbm9kZV9yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKVxuIFx0bGlzdF9kZWwoXHUwMDI2bm9kZS1cdTAwM2VpdGVtKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZxcnRyX25vZGVfbG9jayk7XG4gXG4rXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNm5vZGUtXHUwMDNlc2F5X2hlbGxvKTtcbitcbiBcdHNrYl9xdWV1ZV9wdXJnZShcdTAwMjZub2RlLVx1MDAzZXJ4X3F1ZXVlKTtcbiBcbiBcdC8qIEZyZWUgdHggZmxvdyBjb3VudGVycyAqL1xuQEAgLTM0MSw2ICszNDksMTQgQEAgc3RhdGljIGludCBxcnRyX25vZGVfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c2l6ZV90IGxlbiA9IHNrYi1cdTAwM2VsZW47XG4gXHRpbnQgcmMsIGNvbmZpcm1fcng7XG4gXG4rXHRtdXRleF9sb2NrKFx1MDAyNm5vZGUtXHUwMDNlZXBfbG9jayk7XG4rXHRpZiAoIW5vZGUtXHUwMDNlaGVsbG9fc2VudCBcdTAwMjZcdTAwMjYgdHlwZSAhPSBRUlRSX1RZUEVfSEVMTE8pIHtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5vZGUtXHUwMDNlZXBfbG9jayk7XG4rXHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcdG11dGV4X3VubG9jayhcdTAwMjZub2RlLVx1MDAzZWVwX2xvY2spO1xuK1xuIFx0Y29uZmlybV9yeCA9IHFydHJfdHhfd2FpdChub2RlLCB0by1cdTAwM2VzcV9ub2RlLCB0by1cdTAwM2VzcV9wb3J0LCB0eXBlKTtcbiBcdGlmIChjb25maXJtX3J4IFx1MDAzYyAwKSB7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuQEAgLTM3Miw2ICszODgsOCBAQCBzdGF0aWMgaW50IHFydHJfbm9kZV9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0cmMgPSBub2RlLVx1MDAzZWVwLVx1MDAzZXhtaXQobm9kZS1cdTAwM2VlcCwgc2tiKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRpZiAoIXJjIFx1MDAyNlx1MDAyNiB0eXBlID09IFFSVFJfVFlQRV9IRUxMTylcbitcdFx0XHRub2RlLVx1MDAzZWhlbGxvX3NlbnQgPSB0cnVlO1xuIFx0XHRtdXRleF91bmxvY2soXHUwMDI2bm9kZS1cdTAwM2VlcF9sb2NrKTtcbiBcdH1cbiBcdC8qIE5lZWQgdG8gZW5zdXJlIHRoYXQgYSBzdWJzZXF1ZW50IG1lc3NhZ2UgY2FycmllcyB0aGUgb3RoZXJ3aXNlIGxvc3RcbkBAIC0zNzksNiArMzk3LDkgQEAgc3RhdGljIGludCBxcnRyX25vZGVfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKHJjIFx1MDAyNlx1MDAyNiBjb25maXJtX3J4KVxuIFx0XHRxcnRyX3R4X2Zsb3dfZmFpbGVkKG5vZGUsIHRvLVx1MDAzZXNxX25vZGUsIHRvLVx1MDAzZXNxX3BvcnQpO1xuIFxuK1x0aWYgKHJjIFx1MDAyNlx1MDAyNiB0eXBlID09IFFSVFJfVFlQRV9IRUxMTylcbitcdFx0c2NoZWR1bGVfd29yayhcdTAwMjZub2RlLVx1MDAzZXNheV9oZWxsbyk7XG4rXG4gXHRyZXR1cm4gcmM7XG4gfVxuIFxuQEAgLTU3MCw2ICs1OTEsMzUgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpxcnRyX2FsbG9jX2N0cmxfcGFja2V0KHN0cnVjdCBxcnRyX2N0cmxfcGt0ICoqcGt0LFxuIFx0cmV0dXJuIHNrYjtcbiB9XG4gXG4rc3RhdGljIHZvaWQgcXJ0cl9oZWxsb193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbit7XG4rXHRzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciBmcm9tID0ge0FGX1FJUENSVFIsIDAsIFFSVFJfUE9SVF9DVFJMfTtcbitcdHN0cnVjdCBzb2NrYWRkcl9xcnRyIHRvID0ge0FGX1FJUENSVFIsIDAsIFFSVFJfUE9SVF9DVFJMfTtcbitcdHN0cnVjdCBxcnRyX2N0cmxfcGt0ICpwa3Q7XG4rXHRzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlO1xuK1x0c3RydWN0IHFydHJfc29jayAqY3RybDtcbitcdHN0cnVjdCBza19idWZmICpza2I7XG4rXG4rXHRub2RlID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBxcnRyX25vZGUsIHNheV9oZWxsbyk7XG4rXG4rXHQvKiBOUyBtdXN0IGJlIGJvdW5kIGJlZm9yZSB3ZSBjYW4gc2VuZCAqL1xuK1x0Y3RybCA9IHFydHJfcG9ydF9sb29rdXAoUVJUUl9QT1JUX0NUUkwpO1xuK1x0aWYgKCFjdHJsKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRza2IgPSBxcnRyX2FsbG9jX2N0cmxfcGFja2V0KFx1MDAyNnBrdCwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXNrYikge1xuK1x0XHRxcnRyX3BvcnRfcHV0KGN0cmwpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRwa3QtXHUwMDNlY21kID0gY3B1X3RvX2xlMzIoUVJUUl9UWVBFX0hFTExPKTtcbitcdGZyb20uc3Ffbm9kZSA9IHFydHJfbG9jYWxfbmlkO1xuK1x0dG8uc3Ffbm9kZSA9IG5vZGUtXHUwMDNlbmlkO1xuK1x0cXJ0cl9ub2RlX2VucXVldWUobm9kZSwgc2tiLCBRUlRSX1RZUEVfSEVMTE8sIFx1MDAyNmZyb20sIFx1MDAyNnRvKTtcbitcdHFydHJfcG9ydF9wdXQoY3RybCk7XG4rfVxuK1xuIC8qKlxuICAqIHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIoKSAtIHJlZ2lzdGVyIGEgbmV3IGVuZHBvaW50XG4gICogQGVwOiBlbmRwb2ludCB0byByZWdpc3RlclxuQEAgLTU5NSw2ICs2NDUsOSBAQCBpbnQgcXJ0cl9lbmRwb2ludF9yZWdpc3RlcihzdHJ1Y3QgcXJ0cl9lbmRwb2ludCAqZXAsIHVuc2lnbmVkIGludCBuaWQpXG4gXHRub2RlLVx1MDAzZW5pZCA9IFFSVFJfRVBfTklEX0FVVE87XG4gXHRub2RlLVx1MDAzZWVwID0gZXA7XG4gXG4rXHRub2RlLVx1MDAzZWhlbGxvX3NlbnQgPSBmYWxzZTtcbitcdElOSVRfV09SSyhcdTAwMjZub2RlLVx1MDAzZXNheV9oZWxsbywgcXJ0cl9oZWxsb193b3JrKTtcbitcbiBcdHhhX2luaXQoXHUwMDI2bm9kZS1cdTAwM2VxcnRyX3R4X2Zsb3cpO1xuIFx0bXV0ZXhfaW5pdChcdTAwMjZub2RlLVx1MDAzZXFydHJfdHhfbG9jayk7XG4gXG5AQCAtNjA1LDYgKzY1OCw5IEBAIGludCBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyKHN0cnVjdCBxcnRyX2VuZHBvaW50ICplcCwgdW5zaWduZWQgaW50IG5pZClcbiBcdG11dGV4X3VubG9jayhcdTAwMjZxcnRyX25vZGVfbG9jayk7XG4gXHRlcC1cdTAwM2Vub2RlID0gbm9kZTtcbiBcbitcdC8qIEluaXRpYXRlIEhFTExPIGhhbmRzaGFrZSBmcm9tIHRoZSBjb3JlIGxheWVyICovXG4rXHRzY2hlZHVsZV93b3JrKFx1MDAyNm5vZGUtXHUwMDNlc2F5X2hlbGxvKTtcbitcbiBcdHJldHVybiAwO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChxcnRyX2VuZHBvaW50X3JlZ2lzdGVyKTtcbkBAIC04NzksNiArOTM1LDExIEBAIHN0YXRpYyBpbnQgcXJ0cl9iY2FzdF9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNnFydHJfbm9kZV9sb2NrKTtcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgXHUwMDI2cXJ0cl9hbGxfbm9kZXMsIGl0ZW0pIHtcbitcdFx0LyogU2tpcCBub2RlcyB3aG9zZSBub2RlIElEIGlzIG5vdCB5ZXQga25vd247IHRoZXkgY2Fubm90XG4rXHRcdCAqIHJlY2VpdmUgYnJvYWRjYXN0IHBhY2tldHMgYmVmb3JlIHRoZSBIRUxMTyBoYW5kc2hha2UuXG4rXHRcdCAqL1xuK1x0XHRpZiAobm9kZS1cdTAwM2VuaWQgPT0gUVJUUl9FUF9OSURfQVVUTylcbitcdFx0XHRjb250aW51ZTtcbiBcdFx0c2tibiA9IHBza2JfY29weShza2IsIEdGUF9LRVJORUwpO1xuIFx0XHRpZiAoIXNrYm4pXG4gXHRcdFx0YnJlYWs7XG5kaWZmIC0tZ2l0IGEvbmV0L3FydHIvbnMuYyBiL25ldC9xcnRyL25zLmNcbmluZGV4IGIzZjliYmNmOWFiOWIuLjE0MjYyNjIzZDJkZDUgMTAwNjQ0XG4tLS0gYS9uZXQvcXJ0ci9ucy5jXG4rKysgYi9uZXQvcXJ0ci9ucy5jXG5AQCAtMjEyLDYgKzIxMiw3IEBAIHN0YXRpYyB2b2lkIGxvb2t1cF9ub3RpZnkoc3RydWN0IHNvY2thZGRyX3FydHIgKnRvLCBzdHJ1Y3QgcXJ0cl9zZXJ2ZXIgKnNydixcbiBcdFx0cHJfZXJyKFwiZmFpbGVkIHRvIHNlbmQgbG9va3VwIG5vdGlmaWNhdGlvblxcblwiKTtcbiB9XG4gXG4rLyogQW5ub3VuY2UgdGhlIGxpc3Qgb2Ygc2VydmVycyByZWdpc3RlcmVkIG9uIHRoZSBsb2NhbCBub2RlICovXG4gc3RhdGljIGludCBhbm5vdW5jZV9zZXJ2ZXJzKHN0cnVjdCBzb2NrYWRkcl9xcnRyICpzcSlcbiB7XG4gXHRzdHJ1Y3QgcXJ0cl9zZXJ2ZXIgKnNydjtcbkBAIC0zNDksMTUgKzM1MCw4IEBAIHN0YXRpYyBpbnQgc2F5X2hlbGxvKHN0cnVjdCBzb2NrYWRkcl9xcnRyICpkZXN0KVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tLyogQW5ub3VuY2UgdGhlIGxpc3Qgb2Ygc2VydmVycyByZWdpc3RlcmVkIG9uIHRoZSBsb2NhbCBub2RlICovXG4gc3RhdGljIGludCBjdHJsX2NtZF9oZWxsbyhzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqc3EpXG4ge1xuLVx0aW50IHJldDtcbi1cbi1cdHJldCA9IHNheV9oZWxsbyhzcSk7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuIFx0cmV0dXJuIGFubm91bmNlX3NlcnZlcnMoc3EpO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjEyOjQ1LjU1NzYyMjE3NFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3Mzc3ODA2MzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUVJUUiBIRUxMTyBIYW5kc2hha2UgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gdGhlIFF1YWxjb21tIElQQyBSb3V0ZXIgKFFSVFIpIHN1YnN5c3RlbS4gTXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgaXQncyBpbnRyb2R1Y2luZyBhIGBoZWxsb19zZW50YCBmbGFnIGFuZCBhIGBzYXlfaGVsbG9gIHdvcmsgc3RydWN0IHdpdGhpbiB0aGUgYHFydHJfbm9kZWAgc3RydWN0dXJlLiBUaGUgY29yZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgbW92aW5nIHRoZSBIRUxMTyBoYW5kc2hha2UgaW5pdGlhdGlvbiBmcm9tIHRoZSBuYW1lc2VydmljZSAoYG5ldC9xcnRyL25zLmNgKSBpbnRvIHRoZSBjb3JlIGxheWVyIChgbmV0L3FydHIvYWZfcXJ0ci5jYCkuIFRoaXMgbWFrZXMgc2Vuc2UgY29uY2VwdHVhbGx5OyBjZW50cmFsaXppbmcgY29yZSBmdW5jdGlvbmFsaXRpZXMgb2Z0ZW4gbGVhZHMgdG8gYmV0dGVyIG1hbmFnZW1lbnQuXG5cbk5vdywgaXQgY3JlYXRlcyBhIHdvcmsgaXRlbSwgYHFydHJfaGVsbG9fd29ya2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgaG93IHRoaXMgd29yayBpdGVtIGZ1bmN0aW9ucy4gTGV0J3Mgc2VlLi4uIGl0IGFwcGVhcnMgdGhlIHdvcmsgaXRlbSBnZXRzIHRyaWdnZXJlZCB3aGVuIGEgbmV3IG5vZGUgY29tZXMgb25saW5lLCBJIHByZXN1bWUuIEluc2lkZSBgcXJ0cl9oZWxsb193b3JrYCwgaXQgc2V0cyB1cCBhIGNvbnRyb2wgcGFja2V0IHRvIHNlbmQgYSBgUVJUUl9UWVBFX0hFTExPYCBtZXNzYWdlLiBJIHNlZSB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMgYXJlIGJlaW5nIGluaXRpYWxpemVkIHVzaW5nIGBzdHJ1Y3Qgc29ja2FkZHJfcXJ0cmAuIFRoZSBkZXN0aW5hdGlvbiBub2RlIElEIGlzIHRha2VuIGZyb20gdGhlIG5vZGUgb2JqZWN0IGl0c2VsZi4gQSBsb29rdXAgaXMgZG9uZSBmb3IgYFFSVFJfUE9SVF9DVFJMYCwgd2hpY2ggc2VlbXMgdG8gYmUgdGhlIGNvbnRyb2wgcG9ydCBmb3IgdGhlIFFSVFIgc3lzdGVtLiBUaGUgcGFja2V0IGlzIHRoZW4gYWxsb2NhdGVkLCBwb3B1bGF0ZWQgd2l0aCB0aGUgYFFSVFJfVFlQRV9IRUxMT2AgY29tbWFuZCwgYW5kIGVucXVldWVkLlxuXG5JJ20gbm90aW5nIHRoYXQgYHFydHJfYWxsb2NfY3RybF9wYWNrZXRgIGlzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgYWxsb2NhdGluZyB0aGUgYHNrYmAgYW5kIHNldHRpbmcgdGhlIGBwa3RgIHBvaW50ZXIuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIHdvcmtzLCBlc3BlY2lhbGx5IGl0cyBtZW1vcnkgYWxsb2NhdGlvbiBzdHJhdGVneSBhbmQgYW55IHBvdGVudGlhbCByZXNvdXJjZSBjb25zdHJhaW50cyBpdCBtaWdodCBpbnRyb2R1Y2UsIG9yIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgbG93ZXIgbmV0d29ya2luZyBsYXllcnMuIFRoZSBgcXJ0cl9ub2RlX2VucXVldWVgIGZ1bmN0aW9uIHdhcnJhbnRzIGNsb3NlIHNjcnV0aW55IHRvby4gSXQgc3VnZ2VzdHMgYXN5bmNocm9ub3VzIGNvbW11bmljYXRpb24gaXMgYmVpbmcgdXNlZCwgc28gSSBuZWVkIHRvIGNoZWNrIGhvdyBpdCBoYW5kbGVzIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBlcnJvciBjb25kaXRpb25zLCBhbmQgdGhlIGZsb3cgb2YgdGhlIGNvbnRyb2wgcGFja2V0cyB3aXRoaW4gdGhlIFFSVFIgc3Vic3lzdGVtLiBUaGlzIGRlc2lnbiBpcyBpbnRlcmVzdGluZy4gVGhpcyBtb3ZlIGNvdWxkIHBvdGVudGlhbGx5IHN0cmVhbWxpbmUgaG93IEhFTExPIG1lc3NhZ2VzIGFyZSBoYW5kbGVkLCBidXQgSSBuZWVkIHRvIGRpdmUgZGVlcGVyIGludG8gdGhlIGxvdy1sZXZlbCBkZXRhaWxzIG9mIHRob3NlIGNhbGxzIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MDcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMjo1Mi45MzU0MzE3MjZaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1OTE3NzI3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJxcnRyX2FsbG9jX2N0cmxfcGFja2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9xcnRyL2FmX3FydHIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcXJ0ci9hZl9xcnRyLmM9NTY2PUVYUE9SVF9TWU1CT0xfR1BMKHFydHJfZW5kcG9pbnRfcG9zdCk7XFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNTY4LS8qKlxcbm5ldC9xcnRyL2FmX3FydHIuYzo1Njk6ICogcXJ0cl9hbGxvY19jdHJsX3BhY2tldCgpIC0gYWxsb2NhdGUgY29udHJvbCBwYWNrZXQgc2tiXFxubmV0L3FydHIvYWZfcXJ0ci5jLTU3MC0gKiBAcGt0OiByZWZlcmVuY2UgdG8gcXJ0cl9jdHJsX3BrdCBwb2ludGVyXFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNTc3LSAqL1xcbm5ldC9xcnRyL2FmX3FydHIuYzo1Nzg6c3RhdGljIHN0cnVjdCBza19idWZmICpxcnRyX2FsbG9jX2N0cmxfcGFja2V0KHN0cnVjdCBxcnRyX2N0cmxfcGt0ICoqcGt0LFxcbm5ldC9xcnRyL2FmX3FydHIuYy01NzktXFx0XFx0XFx0XFx0XFx0ICAgICAgZ2ZwX3QgZmxhZ3MpXFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmM9NTk0PXN0YXRpYyB2b2lkIHFydHJfaGVsbG9fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjA5LVxcbm5ldC9xcnRyL2FmX3FydHIuYzo2MTA6XFx0c2tiID0gcXJ0cl9hbGxvY19jdHJsX3BhY2tldChcXHUwMDI2cGt0LCBHRlBfS0VSTkVMKTtcXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjExLVxcdGlmICghc2tiKSB7XFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmM9NjcyPXZvaWQgcXJ0cl9lbmRwb2ludF91bnJlZ2lzdGVyKHN0cnVjdCBxcnRyX2VuZHBvaW50ICplcClcXG4tLVxcbm5ldC9xcnRyL2FmX3FydHIuYy02OTQtXFx0XFx0c3JjLnNxX25vZGUgPSBpdGVyLmluZGV4O1xcbm5ldC9xcnRyL2FmX3FydHIuYzo2OTU6XFx0XFx0c2tiID0gcXJ0cl9hbGxvY19jdHJsX3BhY2tldChcXHUwMDI2cGt0LCBHRlBfQVRPTUlDKTtcXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjk2LVxcdFxcdGlmIChza2IpIHtcXG4tLVxcbm5ldC9xcnRyL2FmX3FydHIuYz03NDE9c3RhdGljIHZvaWQgcXJ0cl9wb3J0X3JlbW92ZShzdHJ1Y3QgcXJ0cl9zb2NrICppcGMpXFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNzUxLVxcbm5ldC9xcnRyL2FmX3FydHIuYzo3NTI6XFx0c2tiID0gcXJ0cl9hbGxvY19jdHJsX3BhY2tldChcXHUwMDI2cGt0LCBHRlBfS0VSTkVMKTtcXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNzUzLVxcdGlmIChza2IpIHtcXG4tLVxcbm5ldC9xcnRyL2FmX3FydHIuYz0xMDU5PXN0YXRpYyBpbnQgcXJ0cl9zZW5kX3Jlc3VtZV90eChzdHJ1Y3QgcXJ0cl9jYiAqY2IpXFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmMtMTA3MS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmM6MTA3MjpcXHRza2IgPSBxcnRyX2FsbG9jX2N0cmxfcGFja2V0KFxcdTAwMjZwa3QsIEdGUF9LRVJORUwpO1xcbm5ldC9xcnRyL2FmX3FydHIuYy0xMDczLVxcdGlmICghc2tiKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjEyOjUzLjI5NDYxNTIwOVoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzU0MjQ3NzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgcXJ0cl9hbGxvY19jdHJsX3BhY2tldGAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb3JlIHB1cnBvc2UgYW5kIGhvdyBpdCBmaXRzIHdpdGhpbiB0aGUgbGFyZ2VyIFFSVFIgZnJhbWV3b3JrLiBGcm9tIG15IGV4cGVyaWVuY2Ugd2l0aCBtZXNzYWdlIHBhc3Npbmcgc3lzdGVtcywgdGhpcyBsaWtlbHkgaGFuZGxlcyBhbGxvY2F0aW9uIG9mIGNvbnRyb2wgcGFja2V0cywgd2hpY2ggYXJlIHByb2JhYmx5IHVzZWQgZm9yIHNwZWNpZmljIG1hbmFnZW1lbnQgb3Igc2V0dXAgdGFza3Mgd2l0aGluIHRoZSBRUlRSIHByb3RvY29sLiBJJ20gZXhwZWN0aW5nIHRoaXMgaXMgYSBjcml0aWNhbCBmdW5jdGlvbjsgaXQncyB0aGUgZ2F0ZXdheSBmb3Igc2VuZGluZyBhbmQgcmVjZWl2aW5nIGNvbnRyb2wgbWVzc2FnZXMsIGFuZCBpbmVmZmljaWVudCBhbGxvY2F0aW9uIGNvdWxkIGVhc2lseSBiZWNvbWUgYSBib3R0bGVuZWNrLiBJJ20gYWxzbyBpbnRlcmVzdGVkIGluIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBtZW1vcnkgbWFuYWdlbWVudCDigJMgYXJlIHdlIHRhbGtpbmcgYWJvdXQgc2xhYiBhbGxvY2F0aW9uLCBhIGN1c3RvbSBwb29sLCBvciBqdXN0IHBsYWluIGBrbWFsbG9jYD8gRG9lcyBpdCBoYW5kbGUgcG90ZW50aWFsIGZhaWx1cmUgZ3JhY2VmdWxseSwgYW5kIGlmIHNvLCBob3c/IEknbSBhbnRpY2lwYXRpbmcgdGhhdCB3ZSdsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIG1lbW9yeSBsZWFrcyBvciByYWNlIGNvbmRpdGlvbnMsIHRoaXMgaXMgY3JpdGljYWwgZnJvbSBhIHNlY3VyaXR5IGFzcGVjdC4gS25vd2luZyB0aGUgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmVzIGFuZCB0aGUgc2l6ZSBvZiB0aGVzZSBjb250cm9sIHBhY2tldHMgaXMgYWxzbyBrZXkg4oCTIGFyZSB0aGV5IGZpeGVkLXNpemUsIG9yIGRvZXMgdGhpcyBmdW5jdGlvbiBhbHNvIGhhbmRsZSB2YXJpYWJsZS1sZW5ndGggbWVzc2FnZXM/IEFyZSB0aGVyZSBhbnkgYXNzb2NpYXRlZCBsb2NrcyBvciBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyB3aXRoaW4gdGhpcyBmdW5jdGlvbiwgYW5kIGlmIHNvIHdoYXQgaXMgdGhlaXIgcHVycG9zZT8gTGV0IG1lIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIGFueSBjb21tZW50cyB3aXRoaW4gdGhlIGNvZGUsIGFuZCBpZiB0aGVyZSBhcmUgbm9uZSwgSSBhbSBnb2luZyB0byBoYXZlIHRvIG1ha2UgaW5mZXJlbmNlcyBiYXNlZCBvbiB0aGUgc291cmNlIGNvZGUsIGFuZCBpdHMgcmVsYXRlZCB1c2FnZS4gSSdtIHJlYWR5IHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZCB0aGlzIGluIGRldGFpbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU1OSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjEyOjU3LjA0ODg2NTU0OVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvcXJ0ci9hZl9xcnRyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTc4LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTc4OlxcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcXJ0cl9hbGxvY19jdHJsX3BhY2tldChzdHJ1Y3QgcXJ0cl9jdHJsX3BrdCAqKnBrdCxcXG4gNTc5OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGdmcF90IGZsYWdzKVxcbiA1ODA6XFx0e1xcbiA1ODE6XFx0XFx0Y29uc3QgaW50IHBrdF9sZW4gPSBzaXplb2Yoc3RydWN0IHFydHJfY3RybF9wa3QpO1xcbiA1ODI6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gNTgzOlxcdFxcbiA1ODQ6XFx0XFx0c2tiID0gYWxsb2Nfc2tiKFFSVFJfSERSX01BWF9TSVpFICsgcGt0X2xlbiwgZmxhZ3MpO1xcbiA1ODU6XFx0XFx0aWYgKCFza2IpXFxuIDU4NjpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNTg3OlxcdFxcbiA1ODg6XFx0XFx0c2tiX3Jlc2VydmUoc2tiLCBRUlRSX0hEUl9NQVhfU0laRSk7XFxuIDU4OTpcXHRcXHQqcGt0ID0gc2tiX3B1dF96ZXJvKHNrYiwgcGt0X2xlbik7XFxuIDU5MDpcXHRcXG4gNTkxOlxcdFxcdHJldHVybiBza2I7XFxuIDU5MjpcXHR9XFxuIDU5MzpcXHRcXG4gNTk0OlxcdHN0YXRpYyB2b2lkIHFydHJfaGVsbG9fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIDU5NTpcXHR7XFxuIDU5NjpcXHRcXHRzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciBmcm9tID0ge0FGX1FJUENSVFIsIDAsIFFSVFJfUE9SVF9DVFJMfTtcXG4gNTk3OlxcdFxcdHN0cnVjdCBzb2NrYWRkcl9xcnRyIHRvID0ge0FGX1FJUENSVFIsIDAsIFFSVFJfUE9SVF9DVFJMfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MTI6NTcuMDQ4OTQ4NzI5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxNTk0NTg4MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBRUlRSIENvbnRyb2wgUGFja2V0IEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoaXMgYHFydHJfYWxsb2NfY3RybF9wYWNrZXRgIGZ1bmN0aW9uIHdvcmtzLiBJdCdzIHVzaW5nIGBza2JfcHV0X3plcm9gLCB3aGljaCBpcyBhIHByZXR0eSBzdGFuZGFyZCBtZXRob2QuIFRoaXMgbWVhbnMgdGhlIGBzdHJ1Y3QgcXJ0cl9jdHJsX3BrdGAgSSdtIGFsbG9jYXRpbmcgaXMgY29tcGxldGVseSB6ZXJvZWQgb3V0IGluaXRpYWxseSDigJMgZ29vZCwgcHJldmVudHMgcG90ZW50aWFsIGdhcmJhZ2UgZGF0YSBpc3N1ZXMuIEkgc2VlIGBxcnRyX2hlbGxvX3dvcmtgIHRoZW4gc2V0cyBgcGt0LVx1MDAzZWNtZCA9IGNwdV90b19sZTMyKFFSVFJfVFlQRV9IRUxMTyk7YC4gTWFrZXMgc2Vuc2UsIHRoZSBjb21tYW5kIHR5cGUgbmVlZHMgdG8gYmUgc2V0LiBBbmQgdGhlIHJlc3Qgb2YgdGhlIHBhY2tldCByZW1haW5zIHplcm9lZC5cblxuTm93LCBJJ20gbm90aW5nIHRoZSBgZnJvbWAgYW5kIGB0b2AgYXJlIGluaXRpYWxpemVkIHdpdGggYHtBRl9RSVBDUlRSLCAwLCBRUlRSX1BPUlRfQ1RSTH1gLiBUaGlzIGxvb2tzIGxpa2UgdGhlIHN0YW5kYXJkIGFkZHJlc3Mgc3RydWN0dXJlIGZvciBRUlRSLiBCdXQgd2FpdCwgYHN0cnVjdCBzb2NrYWRkcl9xcnRyYC4uLiBsZXQgbWUgcmVjYWxsLCB0aGF0IGhhcyBmaWVsZHMgZm9yIGBzcV9mYW1pbHlgLCBgc3Ffbm9kZWAsIGFuZCBgc3FfcG9ydGAuXG5cblRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlIGlzOiBhcmUgdGhlcmUgYW55IHBhZGRpbmcgYnl0ZXMgaW4gYHN0cnVjdCBzb2NrYWRkcl9xcnRyYD8gVGhpcyBpcyB0aGUga2luZCBvZiBkZXRhaWwgdGhhdCBjYW4gYml0ZSB5b3UgbGF0ZXIuIElmIHRoZXJlJ3MgcGFkZGluZywgYW5kIHRoZSBjb2RlIG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IGNvbnRpZ3VvdXMgbWVtb3J5LCB0aGluZ3MgY291bGQgZ28gc2lkZXdheXMuIE5lZWQgdG8gYmUgc3VyZSBhYm91dCB0aGUgc3RydWN0dXJlJ3MgZXhhY3QgbGF5b3V0LiBSaWdodCwgdGltZSB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IHNvY2thZGRyX3FydHJgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjQxLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTczLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MTM6MDQuMjA4NDEyMjU1WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDgxODAxODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IHNvY2thZGRyX3FydHIgXFxcXHtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS91YXBpL2xpbnV4L3FydHIuaC0xMC1cXG5pbmNsdWRlL3VhcGkvbGludXgvcXJ0ci5oOjExOnN0cnVjdCBzb2NrYWRkcl9xcnRyIHtcXG5pbmNsdWRlL3VhcGkvbGludXgvcXJ0ci5oLTEyLVxcdF9fa2VybmVsX3NhX2ZhbWlseV90IHNxX2ZhbWlseTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MTM6MDQuNDE2NTk3NjQ0WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNjIxNTgxMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBpbml0aWFsIHRob3VnaHRzOlxuXG4qKlBlZXJpbmcgaW50byB0aGUgQ29yZSBvZiBRUlRSKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIGRlbHZlIGludG8gdGhlIG5pdHR5LWdyaXR0eSBvZiB0aGUgUVJUUiBrZXJuZWwgaW50ZXJmYWNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyB0aGluZyBvcGVyYXRlcyBhdCBhIGZ1bmRhbWVudGFsIGxldmVsLCBzbyB0aGUgZmlyc3Qgc3RlcCBpcyBhbHdheXMgdG8gZXhhbWluZSB0aGUgaGVhZGVyIGZpbGUuIEkga25vdyB0aGF0IGBpbmNsdWRlL3VhcGkvbGludXgvcXJ0ci5oYCBob2xkcyB0aGUga2V5IGRlZmluaXRpb25zLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGRhdGEgc3RydWN0dXJlcywgY29uc3RhbnRzLCBhbmQgZnVuY3Rpb24gcHJvdG90eXBlcyB0aGF0IGZvcm0gdGhlIGZvdW5kYXRpb24gb2YgdGhlIFVzZXItc3BhY2UtdG8tS2VybmVsLXNwYWNlIGFuZCBLZXJuZWwtc3BhY2UtdG8tS2VybmVsLXNwYWNlIGNvbW11bmljYXRpb24gcHJvdG9jb2wuIEkgd2FudCB0byBzZWUgaG93IG1lc3NhZ2VzIGFyZSBzdHJ1Y3R1cmVkLCBob3cgZW5kcG9pbnRzIGFyZSBkZWZpbmVkLCBhbmQgd2hhdCB0eXBlcyBvZiBvcGVyYXRpb25zIGFyZSBzdXBwb3J0ZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBtZW50YWwgbW9kZWwgb2YgdGhlIEFQSSdzIGFyY2hpdGVjdHVyZSBhbmQgdGhlIHVuZGVybHlpbmcgcHJpbmNpcGxlcyB0aGF0IGRyaXZlIGl0cyBvcGVyYXRpb24uIExldCdzIHNlZSB3aGF0IHNlY3JldHMgdGhpcyBoZWFkZXIgZmlsZSByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODIyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MTM6MDguNDc4NzU4OTcxWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzNzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvdWFwaS9saW51eC9xcnRyLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTEsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMTE6XFx0c3RydWN0IHNvY2thZGRyX3FydHIge1xcbiAgMTI6XFx0XFx0X19rZXJuZWxfc2FfZmFtaWx5X3Qgc3FfZmFtaWx5O1xcbiAgMTM6XFx0XFx0X191MzIgc3Ffbm9kZTtcXG4gIDE0OlxcdFxcdF9fdTMyIHNxX3BvcnQ7XFxuICAxNTpcXHR9O1xcbiAgMTY6XFx0XFxuICAxNzpcXHRlbnVtIHFydHJfcGt0X3R5cGUge1xcbiAgMTg6XFx0XFx0UVJUUl9UWVBFX0RBVEFcXHRcXHQ9IDEsXFxuICAxOTpcXHRcXHRRUlRSX1RZUEVfSEVMTE9cXHRcXHQ9IDIsXFxuICAyMDpcXHRcXHRRUlRSX1RZUEVfQllFXFx0XFx0PSAzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMzowOC40Nzg4NDU4NDFaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM1MDc0NTU2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIFBhZGRpbmcgSXNzdWVzIGluIFFSVFIgU29ja2V0IFN0cnVjdHVyZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYF9fa2VybmVsX3NhX2ZhbWlseV90YCB0eXBlLCBhbmQgaXQncyBhbG1vc3QgYWx3YXlzIGEgMi1ieXRlIGB1bnNpZ25lZCBzaG9ydGAuIFRoZW4gdGhlcmUncyB0aGUgYHNxX25vZGVgIGZpZWxkLCB3aGljaCBpcyBhIDQtYnl0ZSBgX191MzJgLiBIbW0sIHRoYXQgbWVhbnMgdGhlcmUncyBwcm9iYWJseSAyIGJ5dGVzIG9mIHBhZGRpbmcgYmV0d2VlbiBgc3FfZmFtaWx5YCBhbmQgYHNxX25vZGVgIGluIHRoZSBgc29ja2FkZHJgIHN0cnVjdHVyZS4gSSBuZWVkIHRvIGJlIHN1cmUuXG5cbldhaXQsIG5vdyBJIHNlZSB0aGUgYHN0cnVjdCBzb2NrYWRkcl9xcnRyIGZyb20gPSB7QUZfUUlQQ1JUUiwgMCwgUVJUUl9QT1JUX0NUUkx9O2AgZGVjbGFyYXRpb24uIFRoaXMgaXMgYSBsb2NhbCB2YXJpYWJsZSBvbiB0aGUgc3RhY2suIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHdoZXRoZXIgdGhpcyBzdHJ1Y3R1cmUsIHRoaXMgYHNvY2thZGRyX3FydHJgLCBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlIG9yIGlmIGl0J3Mgc2VudCBvdmVyIHRoZSBuZXR3b3JrLiBJZiBzbywgcGFkZGluZyBjb3VsZCBjYXVzZSBwcm9ibGVtcywgYW5kIEkgbmVlZCB0byBjb25zaWRlciBwb3RlbnRpYWwgZW5kaWFubmVzcyBpc3N1ZXMsIG9mIGNvdXJzZS4gTGV0J3MgZGlnIGRlZXBlciB0byBzZWUgZXhhY3RseSB3aGVyZSBhbmQgaG93IHRoaXMgYHNvY2thZGRyX3FydHJgIHN0cnVjdHVyZSBpcyBoYW5kbGVkLiBTcGVjaWZpY2FsbHksIGxldCdzIHRyYWNlIHRoaXMgdG8gdGhlIGBxcnRyX25vZGVfZW5xdWV1ZWAgZnVuY3Rpb24uIEkgd2lsbCBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBoYXBwZW5zIHRvIHRoZSBkYXRhLiBJJ20gZ29pbmcgdG8gbG9vayB0aHJvdWdoIHRoZSBzdXJyb3VuZGluZyBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjI4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MTM6MTIuODI5NTk0MTc5WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzAxNjkwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJxcnRyX25vZGVfZW5xdWV1ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcXJ0ci9hZl9xcnRyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3FydHIvYWZfcXJ0ci5jPTMyOT1zdGF0aWMgdm9pZCBxcnRyX3R4X2Zsb3dfZmFpbGVkKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIGludCBkZXN0X25vZGUsXFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmMtMzQzLS8qIFBhc3MgYW4gb3V0Z29pbmcgcGFja2V0IHNvY2tldCBidWZmZXIgdG8gdGhlIGVuZHBvaW50IGRyaXZlci4gKi9cXG5uZXQvcXJ0ci9hZl9xcnRyLmM6MzQ0OnN0YXRpYyBpbnQgcXJ0cl9ub2RlX2VucXVldWUoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvcXJ0ci9hZl9xcnRyLmMtMzQ1LVxcdFxcdFxcdCAgICAgaW50IHR5cGUsIHN0cnVjdCBzb2NrYWRkcl9xcnRyICpmcm9tLFxcbi0tXFxubmV0L3FydHIvYWZfcXJ0ci5jPTU5ND1zdGF0aWMgdm9pZCBxcnRyX2hlbGxvX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3FydHIvYWZfcXJ0ci5jLTYxOC1cXHR0by5zcV9ub2RlID0gbm9kZS1cXHUwMDNlbmlkO1xcbm5ldC9xcnRyL2FmX3FydHIuYzo2MTk6XFx0cXJ0cl9ub2RlX2VucXVldWUobm9kZSwgc2tiLCBRUlRSX1RZUEVfSEVMTE8sIFxcdTAwMjZmcm9tLCBcXHUwMDI2dG8pO1xcbm5ldC9xcnRyL2FmX3FydHIuYy02MjAtXFx0cXJ0cl9wb3J0X3B1dChjdHJsKTtcXG4tLVxcbm5ldC9xcnRyL2FmX3FydHIuYz05MzA9c3RhdGljIGludCBxcnRyX2JjYXN0X2VucXVldWUoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9xcnRyL2FmX3FydHIuYy05NDYtXFx0XFx0c2tiX3NldF9vd25lcl93KHNrYm4sIHNrYi1cXHUwMDNlc2spO1xcbm5ldC9xcnRyL2FmX3FydHIuYzo5NDc6XFx0XFx0cXJ0cl9ub2RlX2VucXVldWUobm9kZSwgc2tibiwgdHlwZSwgZnJvbSwgdG8pO1xcbm5ldC9xcnRyL2FmX3FydHIuYy05NDgtXFx0fVxcbi0tXFxubmV0L3FydHIvYWZfcXJ0ci5jPTk1Nj1zdGF0aWMgaW50IHFydHJfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmMtMTAxNi1cXHRcXHR9XFxubmV0L3FydHIvYWZfcXJ0ci5jOjEwMTc6XFx0XFx0ZW5xdWV1ZV9mbiA9IHFydHJfbm9kZV9lbnF1ZXVlO1xcbm5ldC9xcnRyL2FmX3FydHIuYy0xMDE4LVxcdH1cXG4tLVxcbm5ldC9xcnRyL2FmX3FydHIuYz0xMDU5PXN0YXRpYyBpbnQgcXJ0cl9zZW5kX3Jlc3VtZV90eChzdHJ1Y3QgcXJ0cl9jYiAqY2IpXFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmMtMTA4MS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmM6MTA4MjpcXHRyZXQgPSBxcnRyX25vZGVfZW5xdWV1ZShub2RlLCBza2IsIFFSVFJfVFlQRV9SRVNVTUVfVFgsIFxcdTAwMjZsb2NhbCwgXFx1MDAyNnJlbW90ZSk7XFxubmV0L3FydHIvYWZfcXJ0ci5jLTEwODMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjEzOjEyLjkwNjYxNjM4MVoiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTE4NDQxNTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgcXJ0cl9ub2RlX2VucXVldWVgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHF1ZXVpbmcgbWVjaGFuaXNtIHdpdGhpbiB0aGUgUU1JIFJlYWwtVGltZSAoUVJUUikgZnJhbWV3b3JrLiBNeSBleHBlcnRpc2UgbGllcyBpbiBlbWJlZGRlZCBzeXN0ZW1zIGFuZCBsb3ctbGV2ZWwgY29tbXVuaWNhdGlvbiBwcm90b2NvbHMsIHNvIHRoaXMgc2hvdWxkIGJlIHdpdGhpbiBteSB3aGVlbGhvdXNlLiBJJ20gZm9jdXNpbmcgb24gaG93IG1lc3NhZ2VzIGFyZSBlbnF1ZXVlZC4gSeKAmWxsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciByYWNlIGNvbmRpdGlvbnMgdGhpcyBpbXBsZW1lbnRhdGlvbiBtaWdodCBpbnRyb2R1Y2UsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhpcyBpcyBhIHJlYWwtdGltZSBzeXN0ZW0uIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyBxdWVzdGlvbnMgYWJvdXQgaW50ZXJydXB0IGhhbmRsaW5nIOKAkyBpcyB0aGlzIGF0b21pYz8gQXJlIHRoZXJlIHNwaW5sb2Nrcz8gSSB3YW50IHRvIHNlZSB0aGUgbG9ja2luZyBtZWNoYW5pc21zLCBpZiBhbnksIHRoYXQgYXJlIHVzZWQgdG8gcHJvdGVjdCB0aGUgcXVldWUgZnJvbSBjb25jdXJyZW50IGFjY2VzcywgZXNwZWNpYWxseSBpZiBkZWFsaW5nIHdpdGggbXVsdGlwbGUgcHJvY2Vzc29ycyBvciB0aHJlYWRzLiBBbmQgY3JpdGljYWxseSwgaXMgdGhlcmUgYW55IHByaW9yaXR5IG1hbmFnZW1lbnQgYmVpbmcgdXNlZCwgYW5kIGlmIHNvIGhvdz8gSSdsbCBhbHNvIGJlIGNvbnNpZGVyaW5nIHRoZSBpbXBsaWNhdGlvbnMgb2YgZXJyb3IgaGFuZGxpbmcgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBiYWNrLW9mZiBzdHJhdGVnaWVzIGVtcGxveWVkIGlmIHRoZSBxdWV1ZSBpcyBmdWxsIG9yIGV4cGVyaWVuY2luZyBjb250ZW50aW9uLiBUaGUgb3ZlcmFsbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgYXJlIGZyb250IG9mIG1pbmQuIFRoaXMga2luZCBvZiBsb3ctbGV2ZWwgZGV0YWlsIGlzIHdoZXJlIHRoZSByZWFsIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMgY2FuIGJlIGZvdW5kLCBvciB3aGVyZSBjcml0aWNhbCBidWdzIGNhbiBoaWRlLiBMZXTigJlzIHNlZSB3aGF0J3MgdW5kZXIgdGhlIGhvb2QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzMzEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMzoxOS44MjUwNjkyMzRaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAzMjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9xcnRyL2FmX3FydHIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNDQsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNDQ6XFx0c3RhdGljIGludCBxcnRyX25vZGVfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAzNDU6XFx0XFx0XFx0XFx0ICAgICBpbnQgdHlwZSwgc3RydWN0IHNvY2thZGRyX3FydHIgKmZyb20sXFxuIDM0NjpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBzb2NrYWRkcl9xcnRyICp0bylcXG4gMzQ3OlxcdHtcXG4gMzQ4OlxcdFxcdHN0cnVjdCBxcnRyX2hkcl92MSAqaGRyO1xcbiAzNDk6XFx0XFx0c2l6ZV90IGxlbiA9IHNrYi1cXHUwMDNlbGVuO1xcbiAzNTA6XFx0XFx0aW50IHJjLCBjb25maXJtX3J4O1xcbiAzNTE6XFx0XFxuIDM1MjpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZub2RlLVxcdTAwM2VlcF9sb2NrKTtcXG4gMzUzOlxcdFxcdGlmICghbm9kZS1cXHUwMDNlaGVsbG9fc2VudCBcXHUwMDI2XFx1MDAyNiB0eXBlICE9IFFSVFJfVFlQRV9IRUxMTykge1xcbiAzNTQ6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZub2RlLVxcdTAwM2VlcF9sb2NrKTtcXG4gMzU1OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAzNTY6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDM1NzpcXHRcXHR9XFxuIDM1ODpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm5vZGUtXFx1MDAzZWVwX2xvY2spO1xcbiAzNTk6XFx0XFxuIDM2MDpcXHRcXHRjb25maXJtX3J4ID0gcXJ0cl90eF93YWl0KG5vZGUsIHRvLVxcdTAwM2VzcV9ub2RlLCB0by1cXHUwMDNlc3FfcG9ydCwgdHlwZSk7XFxuIDM2MTpcXHRcXHRpZiAoY29uZmlybV9yeCBcXHUwMDNjIDApIHtcXG4gMzYyOlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAzNjM6XFx0XFx0XFx0cmV0dXJuIGNvbmZpcm1fcng7XFxuIDM2NDpcXHRcXHR9XFxuIDM2NTpcXHRcXG4gMzY2OlxcdFxcdGhkciA9IHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpoZHIpKTtcXG4gMzY3OlxcdFxcdGhkci1cXHUwMDNldmVyc2lvbiA9IGNwdV90b19sZTMyKFFSVFJfUFJPVE9fVkVSXzEpO1xcbiAzNjg6XFx0XFx0aGRyLVxcdTAwM2V0eXBlID0gY3B1X3RvX2xlMzIodHlwZSk7XFxuIDM2OTpcXHRcXHRoZHItXFx1MDAzZXNyY19ub2RlX2lkID0gY3B1X3RvX2xlMzIoZnJvbS1cXHUwMDNlc3Ffbm9kZSk7XFxuIDM3MDpcXHRcXHRoZHItXFx1MDAzZXNyY19wb3J0X2lkID0gY3B1X3RvX2xlMzIoZnJvbS1cXHUwMDNlc3FfcG9ydCk7XFxuIDM3MTpcXHRcXHRpZiAodG8tXFx1MDAzZXNxX3BvcnQgPT0gUVJUUl9QT1JUX0NUUkwpIHtcXG4gMzcyOlxcdFxcdFxcdGhkci1cXHUwMDNlZHN0X25vZGVfaWQgPSBjcHVfdG9fbGUzMihub2RlLVxcdTAwM2VuaWQpO1xcbiAzNzM6XFx0XFx0XFx0aGRyLVxcdTAwM2Vkc3RfcG9ydF9pZCA9IGNwdV90b19sZTMyKFFSVFJfUE9SVF9DVFJMKTtcXG4gMzc0OlxcdFxcdH0gZWxzZSB7XFxuIDM3NTpcXHRcXHRcXHRoZHItXFx1MDAzZWRzdF9ub2RlX2lkID0gY3B1X3RvX2xlMzIodG8tXFx1MDAzZXNxX25vZGUpO1xcbiAzNzY6XFx0XFx0XFx0aGRyLVxcdTAwM2Vkc3RfcG9ydF9pZCA9IGNwdV90b19sZTMyKHRvLVxcdTAwM2VzcV9wb3J0KTtcXG4gMzc3OlxcdFxcdH1cXG4gMzc4OlxcdFxcbiAzNzk6XFx0XFx0aGRyLVxcdTAwM2VzaXplID0gY3B1X3RvX2xlMzIobGVuKTtcXG4gMzgwOlxcdFxcdGhkci1cXHUwMDNlY29uZmlybV9yeCA9IGNwdV90b19sZTMyKCEhY29uZmlybV9yeCk7XFxuIDM4MTpcXHRcXG4gMzgyOlxcdFxcdHJjID0gc2tiX3B1dF9wYWR0byhza2IsIEFMSUdOKGxlbiwgNCkgKyBzaXplb2YoKmhkcikpO1xcbiAzODM6XFx0XFxuIDM4NDpcXHRcXHRpZiAoIXJjKSB7XFxuIDM4NTpcXHRcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZub2RlLVxcdTAwM2VlcF9sb2NrKTtcXG4gMzg2OlxcdFxcdFxcdHJjID0gLUVOT0RFVjtcXG4gMzg3OlxcdFxcdFxcdGlmIChub2RlLVxcdTAwM2VlcClcXG4gMzg4OlxcdFxcdFxcdFxcdHJjID0gbm9kZS1cXHUwMDNlZXAtXFx1MDAzZXhtaXQobm9kZS1cXHUwMDNlZXAsIHNrYik7XFxuIDM4OTpcXHRcXHRcXHRlbHNlXFxuIDM5MDpcXHRcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gMzkxOlxcdFxcdFxcdGlmICghcmMgXFx1MDAyNlxcdTAwMjYgdHlwZSA9PSBRUlRSX1RZUEVfSEVMTE8pXFxuIDM5MjpcXHRcXHRcXHRcXHRub2RlLVxcdTAwM2VoZWxsb19zZW50ID0gdHJ1ZTtcXG4gMzkzOlxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bm9kZS1cXHUwMDNlZXBfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjEzOjE5LjgyNTI3NDQ3NFoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjgwMzczNjUzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgUVJUUiBIZWxsbyBIYW5kc2hha2UgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gTGV0J3MgdHJhY2UgbXkgdGhvdWdodCBwcm9jZXNzIHN0ZXAgYnkgc3RlcCwgYXMgSSBkbyBhIGRlZXAgZGl2ZSBoZXJlLlxuXG5GaXJzdCwgYHFydHJfbm9kZV9lbnF1ZXVlYC4gSSBjb25maXJtZWQgdGhhdCBvbmx5IGBmcm9tLVx1MDAzZXNxX25vZGVgIGFuZCBgZnJvbS1cdTAwM2VzcV9wb3J0YCBhcmUgcmVhZCBmcm9tIHRoZSBgc3RydWN0IHNvY2thZGRyX3FydHJgIHN0cnVjdHVyZSwgYW5kIGl0IGNvcnJlY3RseSBpZ25vcmVzIHRoZSB1bmluaXRpYWxpemVkIHBhZGRpbmcuIE5vIGxlYWsgdGhlcmUuIEFuZCB3aXRoIGBza2JfcHV0X3BhZHRvYCwgdGhhdCBpcyBkb2luZyBwYWRkaW5nIHdpdGggemVyb2VzLCBzbyBubyBwcm9ibGVtIHRoZXJlLlxuXG5UaGVuLCBJIGxvb2tlZCBjbG9zZWx5IGF0IGBxcnRyX2FsbG9jX2N0cmxfcGFja2V0YC4gVGhlIGBza2JfcHV0X3plcm9gIGZ1bmN0aW9uIGVuc3VyZXMgdGhhdCB0aGUgZW50aXJlIGBzdHJ1Y3QgcXJ0cl9jdHJsX3BrdGAgaXMgemVyb2VkLiBUaGlzIGlzIGltcG9ydGFudDogbm8gdW5pbml0aWFsaXplZCB2YWx1ZXMgd2l0aGluIHRoZSBjb250cm9sIHBhY2tldCBpdHNlbGYuXG5cbkkgY2FyZWZ1bGx5IGV4YW1pbmVkIHRoZSBjb2RlIGFkZGVkIGluIHRoZSBwYXRjaC4gVGhlIG5ldyBjaGVjayBpbiBgcXJ0cl9ub2RlX2VucXVldWVgIHRoYXQgZHJvcHMgcGFja2V0cyBpZiBgaGVsbG9fc2VudGAgaXMgZmFsc2UgYW5kIGl0J3Mgbm90IGEgSEVMTE8gcGFja2V0IGlzIGdvb2QuIFRoZSBmb2xsb3ctdXAgY29kZSBibG9jayBpbiB0aGUgc2FtZSBmdW5jdGlvbiB0aGVuIHNldHMgYGhlbGxvX3NlbnRgIHRvIHRydWUgd2hlbiB0aGUgSEVMTE8gcGFja2V0IHRyYW5zbWl0cyBzdWNjZXNzZnVsbHkuIEFuZCwgaWYgdHJhbnNtaXNzaW9uIGZhaWxzLCBpdCByZXNjaGVkdWxlcyB0aGUgYHNheV9oZWxsb2Agd29yay5cblxuVGhlIGBxcnRyX2hlbGxvX3dvcmtgIGZ1bmN0aW9uIGlzIGNydWNpYWwuIEl0IGFsbG9jYXRlcyBhIGNvbnRyb2wgcGFja2V0LCBzZXRzIHRoZSBjb21tYW5kLCBhbmQgZW5xdWV1ZXMgaXQuIEtleSBwb2ludHMgYXJlIHRoYXQgYHFydHJfYWxsb2NfY3RybF9wYWNrZXRgIHplcm8taW5pdGlhbGl6ZXMgdGhlIHBhY2tldCBhbmQsIGluIHRoaXMgY2FzZSwgYGZyb21gIGFuZCBgdG9gIGFyZSBzdGFjayB2YXJpYWJsZXMsIGFuZCBvbmx5IGBzcV9ub2RlYCBhbmQgYHNxX3BvcnRgIGFyZSByZWFkIGZyb20gdGhlbS4gVGhlIHJlc3Qgb2YgdGhlIGZpZWxkcyBhcmUgaXJyZWxldmFudC5cblxuV2hlbiBhbiBlbmRwb2ludCBpcyByZWdpc3RlcmVkLCB0aGlzIGluaXRpYWxpemVzIHRoZSB3b3JrIGFuZCBpbW1lZGlhdGVseSBzY2hlZHVsZXMgdGhlIHdvcmsgZnVuY3Rpb24gdmlhIGBzY2hlZHVsZV93b3JrKClgLiBUaGUgYnJvYWRjYXN0IGVucXVldWUsIHNraXBzIG5vZGVzIHdpdGggYFFSVFJfRVBfTklEX0FVVE9gIHdoaWxlIGJyb2FkY2FzdGluZy5cblxuRmluYWxseSwgdGhlIG5hbWVzZXJ2aWNlIGNvZGUgZ2V0cyB1cGRhdGVkIHRvIHJlbW92ZSB0aGUgYHNheV9oZWxsb2AgY2FsbCBzaW5jZSBpdCdzIG5vdyBoYW5kbGVkIGJ5IHRoZSBjb3JlIGxheWVyLlxuXG5TbywgbGV0J3MgcmVjYXAgbXkgY29yZSBwb2ludHM6XG4qICAgVGhlIGBza2JgIGlzIHplcm9lZC5cbiogICBUaGUgc3RhY2stYWxsb2NhdGVkIGBzdHJ1Y3Qgc29ja2FkZHJfcXJ0cmAgYGZyb21gIGFuZCBgdG9gIHN0cnVjdHVyZXMgaGF2ZSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgZmllbGRzLCBidXQgb25seSBpbml0aWFsaXplZCBwYXJ0cyBhcmUgcmVhZC5cbiogICBUaGUgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZS5cbiogICBUaGUgcGF0Y2ggaGFzIG5vIGNvZGUgdGhhdCBtb2RpZmllcyB0aGUgbGVuZ3RocyBvciBib3VuZHMgY2hlY2tzIGluIGEgd2F5IHRvIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuVGhpcyBsZWF2ZXMgbWUgcmVhc29uYWJseSBjb25maWRlbnQgdGhhdCB0aGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBpbmZvcm1hdGlvbiBsZWFrIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgYnVncy4gS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIG1lbW9yeSBzYWZldHkgdG9vbHMgc2hvdWxkIGFkZXF1YXRlbHkgZGV0ZWN0IGFueSBpc3N1ZXMuXG5cblRoZSBgc3RydWN0IHNvY2thZGRyX3FydHJgIGluaXRpYWxpemF0aW9uLiBJIGRvdWJsZS1jaGVja2VkIHRoYXQgYHN0cnVjdCBzb2NrYWRkcl9xcnRyIGZyb20gPSB7QUZfUUlQQ1JUUiwgMCwgUVJUUl9QT1JUX0NUUkx9O2AgZG9lcyB3aGF0IEkgdGhpbmsgaXQgZG9lcy4gVGhlIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQgYnkgdGhlIGluaXRpYWxpemVyIGxpc3QsIGFuZCB0aGUgQzk5IHN0YW5kYXJkIGVuc3VyZXMgcmVtYWluaW5nIG1lbWJlcnMgYXJlIGluaXRpYWxpemVkIGFzIHRob3VnaCB0aGV5IGhhZCBzdGF0aWMgc3RvcmFnZSBkdXJhdGlvbiwgd2hpY2ggbWVhbnMgemVyby4gSG93ZXZlciwgZXZlbiBpZiBwYWRkaW5nIGJ5dGVzIHdlcmVuJ3QgemVyby1pbml0aWFsaXplZCwgdGhleSBhcmUgbmV2ZXIgcmVhZCBvciBsZWFrZWQsIHNpbmNlIG9ubHkgYHNxX25vZGVgIGFuZCBgc3FfcG9ydGAgYXJlIHVzZWQgaW4gYHFydHJfbm9kZV9lbnF1ZXVlYC5cblxuT2theSwgSSdtIGNvbmZpZGVudC4gTm8gcmlzayBoZXJlLiBTZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTUyMCwiT3V0cHV0VG9rZW5zIjoyOTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MTQ6MDIuNjI5MDE0MjM3WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgUVJUUiBzdWJzeXN0ZW0gdG8gaW5pdGlhdGUgdGhlIEhFTExPIGhhbmRzaGFrZSBmcm9tIHRoZSBjb3JlIGxheWVyIGluc3RlYWQgb2YgdGhlIG5hbWVzZXJ2aWNlLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IHdvcmsgaXRlbSBgcXJ0cl9oZWxsb193b3JrYCB3aGljaCBhbGxvY2F0ZXMgYSBjb250cm9sIHBhY2tldCBhbmQgZW5xdWV1ZXMgaXQuIFRoZSBjb250cm9sIHBhY2tldCBpcyBhbGxvY2F0ZWQgdXNpbmcgYHFydHJfYWxsb2NfY3RybF9wYWNrZXRgLCB3aGljaCB1c2VzIGBza2JfcHV0X3plcm9gIHRvIGZ1bGx5IHplcm8taW5pdGlhbGl6ZSB0aGUgcGFja2V0IHBheWxvYWQuIFRoZSBzdGFjay1hbGxvY2F0ZWQgYHN0cnVjdCBzb2NrYWRkcl9xcnRyYCB2YXJpYWJsZXMgKGBmcm9tYCBhbmQgYHRvYCkgYXJlIHVzZWQgdG8gcGFzcyBhZGRyZXNzZXMgdG8gYHFydHJfbm9kZV9lbnF1ZXVlYCwgd2hpY2ggb25seSByZWFkcyB0aGVpciBgc3Ffbm9kZWAgYW5kIGBzcV9wb3J0YCBmaWVsZHMgdG8gcG9wdWxhdGUgdGhlIHBhY2tldCBoZWFkZXIuIFRoZSBgc3RydWN0IHNvY2thZGRyX3FydHJgIGl0c2VsZiBpcyBub3QgY29waWVkIHRvIHRoZSBwYWNrZXQgb3IgdG8gdXNlcnNwYWNlLCBzbyBhbnkgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBwYWRkaW5nIGJ5dGVzIG9uIHRoZSBzdGFjayBhcmUgbmV2ZXIgcmVhZCBvciBsZWFrZWQuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLCBub3IgZG9lcyBpdCBtb2RpZnkgYm91bmRzIGNoZWNrcyBvciBsZW5ndGhzIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIG9yIGxvY2tpbmcgaXNzdWVzKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIG9yIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgUVJUUiBzdWJzeXN0ZW0gdG8gaW5pdGlhdGUgdGhlIEhFTExPIGhhbmRzaGFrZSBmcm9tIHRoZSBjb3JlIGxheWVyIGluc3RlYWQgb2YgdGhlIG5hbWVzZXJ2aWNlLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IHdvcmsgaXRlbSBgcXJ0cl9oZWxsb193b3JrYCB3aGljaCBhbGxvY2F0ZXMgYSBjb250cm9sIHBhY2tldCBhbmQgZW5xdWV1ZXMgaXQuIFRoZSBjb250cm9sIHBhY2tldCBpcyBhbGxvY2F0ZWQgdXNpbmcgYHFydHJfYWxsb2NfY3RybF9wYWNrZXRgLCB3aGljaCB1c2VzIGBza2JfcHV0X3plcm9gIHRvIGZ1bGx5IHplcm8taW5pdGlhbGl6ZSB0aGUgcGFja2V0IHBheWxvYWQuIFRoZSBzdGFjay1hbGxvY2F0ZWQgYHN0cnVjdCBzb2NrYWRkcl9xcnRyYCB2YXJpYWJsZXMgKGBmcm9tYCBhbmQgYHRvYCkgYXJlIHVzZWQgdG8gcGFzcyBhZGRyZXNzZXMgdG8gYHFydHJfbm9kZV9lbnF1ZXVlYCwgd2hpY2ggb25seSByZWFkcyB0aGVpciBgc3Ffbm9kZWAgYW5kIGBzcV9wb3J0YCBmaWVsZHMgdG8gcG9wdWxhdGUgdGhlIHBhY2tldCBoZWFkZXIuIFRoZSBgc3RydWN0IHNvY2thZGRyX3FydHJgIGl0c2VsZiBpcyBub3QgY29waWVkIHRvIHRoZSBwYWNrZXQgb3IgdG8gdXNlcnNwYWNlLCBzbyBhbnkgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBwYWRkaW5nIGJ5dGVzIG9uIHRoZSBzdGFjayBhcmUgbmV2ZXIgcmVhZCBvciBsZWFrZWQuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLCBub3IgZG9lcyBpdCBtb2RpZnkgYm91bmRzIGNoZWNrcyBvciBsZW5ndGhzIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIG9yIGxvY2tpbmcgaXNzdWVzKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIG9yIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow7kjh7[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-07 16:09:21 +0000 UTC FinishedAt: 2026-08-07 16:14:05 +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": "502d801f0ab03e4f32f9a33d203154ce84887921", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "QRTR", "QRTR_TUN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "502d801f0ab03e4f32f9a33d203154ce84887921", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "QRTR", "QRTR_TUN" ], "series_id": "4500b2e5-3e00-436b-a7ca-b8df1d7e3a55" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "qrtr_endpoint_register", "qrtr_sendmsg", "qrtr_tun_write_iter", "qrtr_endpoint_post", "qrtr_ns_worker", "qrtr_hello_work" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1FSVFImIzM0OywKICAgICYjMzQ7UVJUUl9UVU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtxcnRyX2VuZHBvaW50X3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O3FydHJfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDtxcnRyX3R1bl93cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O3FydHJfZW5kcG9pbnRfcG9zdCYjMzQ7LAogICAgJiMzNDtxcnRyX25zX3dvcmtlciYjMzQ7LAogICAgJiMzNDtxcnRyX2hlbGxvX3dvcmsmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgUVJUUiBzdWJzeXN0ZW0gdG8gaW5pdGlhdGUgdGhlIEhFTExPIGhhbmRzaGFrZSBmcm9tIHRoZSBjb3JlIGxheWVyIGluc3RlYWQgb2YgdGhlIG5hbWVzZXJ2aWNlLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IHdvcmsgaXRlbSBgcXJ0cl9oZWxsb193b3JrYCB3aGljaCBhbGxvY2F0ZXMgYSBjb250cm9sIHBhY2tldCBhbmQgZW5xdWV1ZXMgaXQuIFRoZSBjb250cm9sIHBhY2tldCBpcyBhbGxvY2F0ZWQgdXNpbmcgYHFydHJfYWxsb2NfY3RybF9wYWNrZXRgLCB3aGljaCB1c2VzIGBza2JfcHV0X3plcm9gIHRvIGZ1bGx5IHplcm8taW5pdGlhbGl6ZSB0aGUgcGFja2V0IHBheWxvYWQuIFRoZSBzdGFjay1hbGxvY2F0ZWQgYHN0cnVjdCBzb2NrYWRkcl9xcnRyYCB2YXJpYWJsZXMgKGBmcm9tYCBhbmQgYHRvYCkgYXJlIHVzZWQgdG8gcGFzcyBhZGRyZXNzZXMgdG8gYHFydHJfbm9kZV9lbnF1ZXVlYCwgd2hpY2ggb25seSByZWFkcyB0aGVpciBgc3Ffbm9kZWAgYW5kIGBzcV9wb3J0YCBmaWVsZHMgdG8gcG9wdWxhdGUgdGhlIHBhY2tldCBoZWFkZXIuIFRoZSBgc3RydWN0IHNvY2thZGRyX3FydHJgIGl0c2VsZiBpcyBub3QgY29waWVkIHRvIHRoZSBwYWNrZXQgb3IgdG8gdXNlcnNwYWNlLCBzbyBhbnkgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBwYWRkaW5nIGJ5dGVzIG9uIHRoZSBzdGFjayBhcmUgbmV2ZXIgcmVhZCBvciBsZWFrZWQuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLCBub3IgZG9lcyBpdCBtb2RpZnkgYm91bmRzIGNoZWNrcyBvciBsZW5ndGhzIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIG9yIGxvY2tpbmcgaXNzdWVzKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIG9yIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFF1YWxjb21tIElQQyBSb3V0ZXIgKFFSVFIpIGNvcmUgbG9naWMgdG8gaW5pdGlhdGUgYSBIRUxMTyBoYW5kc2hha2UgdXBvbiBlbmRwb2ludCByZWdpc3RyYXRpb24gYW5kIGRyb3AgcGFja2V0cyBpZiB0aGUgaGFuZHNoYWtlIGhhc24mIzM5O3QgY29tcGxldGVkLiBUaGlzIGZ1bmN0aW9uYWxpdHkgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSB1c2luZyB0aGUgYC9kZXYvcXJ0ci10dW5gIGRldmljZSwgd2hpY2ggYWxsb3dzIHVzZXJzcGFjZSB0byByZWdpc3RlciBlbmRwb2ludHMgYW5kIGluamVjdCBwYWNrZXRzLiBUaGUgY2hhbmdlcyBhZmZlY3QgY29yZSBwYWNrZXQgZW5xdWV1ZWluZyBhbmQgZW5kcG9pbnQgcmVnaXN0cmF0aW9uIHBhdGhzLCB3aGljaCBhcmUgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDI1YzU3YmI1ODdjMmZjYjg1ZDgxM2YzYjM0MmZiMjIzOGZhMmUyNjJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDE2OjEwOjU3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9xcnRyL2FmX3FydHIuYyBiL25ldC9xcnRyL2FmX3FydHIuY1xuaW5kZXggZDAyZWY5YTc0YzNjYS4uN2FkYzBhMDUzMTI1NCAxMDA2NDRcbi0tLSBhL25ldC9xcnRyL2FmX3FydHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3FydHIvYWZfcXJ0ci5jXG5AQCAtOSw2ICYjNDM7OSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGVybWlvcy5oXHUwMDNlXHQvKiBGb3IgVElPQ0lOUS9PVVRRICovXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3BpbmxvY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3dhaXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY25ldC9zb2NrLmhcdTAwM2VcbiBcbkBAIC0xMjAsOCAmIzQzOzEyMSwxMCBAQCBzdGF0aWMgREVGSU5FX1hBUlJBWV9BTExPQyhxcnRyX3BvcnRzKTtcbiAgKiBAbmlkOiBub2RlIGlkXG4gICogQHFydHJfdHhfZmxvdzogeGFycmF5IG9mIHFydHJfdHhfZmxvdywga2V5ZWQgYnkgbm9kZSBcdTAwM2NcdTAwM2MgMzIgfCBwb3J0XG4gICogQHFydHJfdHhfbG9jazogbG9jayBmb3IgcXJ0cl90eF9mbG93IGluc2VydHNcbiYjNDM7ICogQGhlbGxvX3NlbnQ6IGhlbGxvIHBhY2tldCBzZW5kIHN1Y2Nlc3NmdWxcbiAgKiBAcnhfcXVldWU6IHJlY2VpdmUgcXVldWVcbiAgKiBAaXRlbTogbGlzdCBpdGVtIGZvciBicm9hZGNhc3QgbGlzdFxuJiM0MzsgKiBAc2F5X2hlbGxvOiBzY2hlZHVsZWQgd29yayBmb3Igc2VuZGluZyBoZWxsbyBwYWNrZXRcbiAgKi9cbiBzdHJ1Y3QgcXJ0cl9ub2RlIHtcbiBcdHN0cnVjdCBtdXRleCBlcF9sb2NrO1xuQEAgLTEzMiw4ICYjNDM7MTM1LDExIEBAIHN0cnVjdCBxcnRyX25vZGUge1xuIFx0c3RydWN0IHhhcnJheSBxcnRyX3R4X2Zsb3c7XG4gXHRzdHJ1Y3QgbXV0ZXggcXJ0cl90eF9sb2NrOyAvKiBmb3IgcXJ0cl90eF9mbG93ICovXG4gXG4mIzQzO1x0Ym9vbCBoZWxsb19zZW50O1xuJiM0MztcbiBcdHN0cnVjdCBza19idWZmX2hlYWQgcnhfcXVldWU7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGl0ZW07XG4mIzQzO1x0c3RydWN0IHdvcmtfc3RydWN0IHNheV9oZWxsbztcbiB9O1xuIFxuIC8qKlxuQEAgLTE4Nyw2ICYjNDM7MTkzLDggQEAgc3RhdGljIHZvaWQgX19xcnRyX25vZGVfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZilcbiBcdGxpc3RfZGVsKFx1MDAyNm5vZGUtXHUwMDNlaXRlbSk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2cXJ0cl9ub2RlX2xvY2spO1xuIFxuJiM0MztcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2bm9kZS1cdTAwM2VzYXlfaGVsbG8pO1xuJiM0MztcbiBcdHNrYl9xdWV1ZV9wdXJnZShcdTAwMjZub2RlLVx1MDAzZXJ4X3F1ZXVlKTtcbiBcbiBcdC8qIEZyZWUgdHggZmxvdyBjb3VudGVycyAqL1xuQEAgLTM0MSw2ICYjNDM7MzQ5LDE0IEBAIHN0YXRpYyBpbnQgcXJ0cl9ub2RlX2VucXVldWUoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHNpemVfdCBsZW4gPSBza2ItXHUwMDNlbGVuO1xuIFx0aW50IHJjLCBjb25maXJtX3J4O1xuIFxuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2bm9kZS1cdTAwM2VlcF9sb2NrKTtcbiYjNDM7XHRpZiAoIW5vZGUtXHUwMDNlaGVsbG9fc2VudCBcdTAwMjZcdTAwMjYgdHlwZSAhPSBRUlRSX1RZUEVfSEVMTE8pIHtcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZub2RlLVx1MDAzZWVwX2xvY2spO1xuJiM0MztcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm5vZGUtXHUwMDNlZXBfbG9jayk7XG4mIzQzO1xuIFx0Y29uZmlybV9yeCA9IHFydHJfdHhfd2FpdChub2RlLCB0by1cdTAwM2VzcV9ub2RlLCB0by1cdTAwM2VzcV9wb3J0LCB0eXBlKTtcbiBcdGlmIChjb25maXJtX3J4IFx1MDAzYyAwKSB7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuQEAgLTM3Miw2ICYjNDM7Mzg4LDggQEAgc3RhdGljIGludCBxcnRyX25vZGVfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdHJjID0gbm9kZS1cdTAwM2VlcC1cdTAwM2V4bWl0KG5vZGUtXHUwMDNlZXAsIHNrYik7XG4gXHRcdGVsc2VcbiBcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRcdGlmICghcmMgXHUwMDI2XHUwMDI2IHR5cGUgPT0gUVJUUl9UWVBFX0hFTExPKVxuJiM0MztcdFx0XHRub2RlLVx1MDAzZWhlbGxvX3NlbnQgPSB0cnVlO1xuIFx0XHRtdXRleF91bmxvY2soXHUwMDI2bm9kZS1cdTAwM2VlcF9sb2NrKTtcbiBcdH1cbiBcdC8qIE5lZWQgdG8gZW5zdXJlIHRoYXQgYSBzdWJzZXF1ZW50IG1lc3NhZ2UgY2FycmllcyB0aGUgb3RoZXJ3aXNlIGxvc3RcbkBAIC0zNzksNiAmIzQzOzM5Nyw5IEBAIHN0YXRpYyBpbnQgcXJ0cl9ub2RlX2VucXVldWUoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChyYyBcdTAwMjZcdTAwMjYgY29uZmlybV9yeClcbiBcdFx0cXJ0cl90eF9mbG93X2ZhaWxlZChub2RlLCB0by1cdTAwM2VzcV9ub2RlLCB0by1cdTAwM2VzcV9wb3J0KTtcbiBcbiYjNDM7XHRpZiAocmMgXHUwMDI2XHUwMDI2IHR5cGUgPT0gUVJUUl9UWVBFX0hFTExPKVxuJiM0MztcdFx0c2NoZWR1bGVfd29yayhcdTAwMjZub2RlLVx1MDAzZXNheV9oZWxsbyk7XG4mIzQzO1xuIFx0cmV0dXJuIHJjO1xuIH1cbiBcbkBAIC01NzAsNiAmIzQzOzU5MSwzNSBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnFydHJfYWxsb2NfY3RybF9wYWNrZXQoc3RydWN0IHFydHJfY3RybF9wa3QgKipwa3QsXG4gXHRyZXR1cm4gc2tiO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgcXJ0cl9oZWxsb193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzb2NrYWRkcl9xcnRyIGZyb20gPSB7QUZfUUlQQ1JUUiwgMCwgUVJUUl9QT1JUX0NUUkx9O1xuJiM0MztcdHN0cnVjdCBzb2NrYWRkcl9xcnRyIHRvID0ge0FGX1FJUENSVFIsIDAsIFFSVFJfUE9SVF9DVFJMfTtcbiYjNDM7XHRzdHJ1Y3QgcXJ0cl9jdHJsX3BrdCAqcGt0O1xuJiM0MztcdHN0cnVjdCBxcnRyX25vZGUgKm5vZGU7XG4mIzQzO1x0c3RydWN0IHFydHJfc29jayAqY3RybDtcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuJiM0MztcbiYjNDM7XHRub2RlID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBxcnRyX25vZGUsIHNheV9oZWxsbyk7XG4mIzQzO1xuJiM0MztcdC8qIE5TIG11c3QgYmUgYm91bmQgYmVmb3JlIHdlIGNhbiBzZW5kICovXG4mIzQzO1x0Y3RybCA9IHFydHJfcG9ydF9sb29rdXAoUVJUUl9QT1JUX0NUUkwpO1xuJiM0MztcdGlmICghY3RybClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0c2tiID0gcXJ0cl9hbGxvY19jdHJsX3BhY2tldChcdTAwMjZwa3QsIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghc2tiKSB7XG4mIzQzO1x0XHRxcnRyX3BvcnRfcHV0KGN0cmwpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cGt0LVx1MDAzZWNtZCA9IGNwdV90b19sZTMyKFFSVFJfVFlQRV9IRUxMTyk7XG4mIzQzO1x0ZnJvbS5zcV9ub2RlID0gcXJ0cl9sb2NhbF9uaWQ7XG4mIzQzO1x0dG8uc3Ffbm9kZSA9IG5vZGUtXHUwMDNlbmlkO1xuJiM0MztcdHFydHJfbm9kZV9lbnF1ZXVlKG5vZGUsIHNrYiwgUVJUUl9UWVBFX0hFTExPLCBcdTAwMjZmcm9tLCBcdTAwMjZ0byk7XG4mIzQzO1x0cXJ0cl9wb3J0X3B1dChjdHJsKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyKCkgLSByZWdpc3RlciBhIG5ldyBlbmRwb2ludFxuICAqIEBlcDogZW5kcG9pbnQgdG8gcmVnaXN0ZXJcbkBAIC01OTUsNiAmIzQzOzY0NSw5IEBAIGludCBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyKHN0cnVjdCBxcnRyX2VuZHBvaW50ICplcCwgdW5zaWduZWQgaW50IG5pZClcbiBcdG5vZGUtXHUwMDNlbmlkID0gUVJUUl9FUF9OSURfQVVUTztcbiBcdG5vZGUtXHUwMDNlZXAgPSBlcDtcbiBcbiYjNDM7XHRub2RlLVx1MDAzZWhlbGxvX3NlbnQgPSBmYWxzZTtcbiYjNDM7XHRJTklUX1dPUksoXHUwMDI2bm9kZS1cdTAwM2VzYXlfaGVsbG8sIHFydHJfaGVsbG9fd29yayk7XG4mIzQzO1xuIFx0eGFfaW5pdChcdTAwMjZub2RlLVx1MDAzZXFydHJfdHhfZmxvdyk7XG4gXHRtdXRleF9pbml0KFx1MDAyNm5vZGUtXHUwMDNlcXJ0cl90eF9sb2NrKTtcbiBcbkBAIC02MDUsNiAmIzQzOzY1OCw5IEBAIGludCBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyKHN0cnVjdCBxcnRyX2VuZHBvaW50ICplcCwgdW5zaWduZWQgaW50IG5pZClcbiBcdG11dGV4X3VubG9jayhcdTAwMjZxcnRyX25vZGVfbG9jayk7XG4gXHRlcC1cdTAwM2Vub2RlID0gbm9kZTtcbiBcbiYjNDM7XHQvKiBJbml0aWF0ZSBIRUxMTyBoYW5kc2hha2UgZnJvbSB0aGUgY29yZSBsYXllciAqL1xuJiM0MztcdHNjaGVkdWxlX3dvcmsoXHUwMDI2bm9kZS1cdTAwM2VzYXlfaGVsbG8pO1xuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChxcnRyX2VuZHBvaW50X3JlZ2lzdGVyKTtcbkBAIC04NzksNiAmIzQzOzkzNSwxMSBAQCBzdGF0aWMgaW50IHFydHJfYmNhc3RfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZxcnRyX25vZGVfbG9jayk7XG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsIFx1MDAyNnFydHJfYWxsX25vZGVzLCBpdGVtKSB7XG4mIzQzO1x0XHQvKiBTa2lwIG5vZGVzIHdob3NlIG5vZGUgSUQgaXMgbm90IHlldCBrbm93bjsgdGhleSBjYW5ub3RcbiYjNDM7XHRcdCAqIHJlY2VpdmUgYnJvYWRjYXN0IHBhY2tldHMgYmVmb3JlIHRoZSBIRUxMTyBoYW5kc2hha2UuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChub2RlLVx1MDAzZW5pZCA9PSBRUlRSX0VQX05JRF9BVVRPKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiBcdFx0c2tibiA9IHBza2JfY29weShza2IsIEdGUF9LRVJORUwpO1xuIFx0XHRpZiAoIXNrYm4pXG4gXHRcdFx0YnJlYWs7XG5kaWZmIC0tZ2l0IGEvbmV0L3FydHIvbnMuYyBiL25ldC9xcnRyL25zLmNcbmluZGV4IGIzZjliYmNmOWFiOWIuLjE0MjYyNjIzZDJkZDUgMTAwNjQ0XG4tLS0gYS9uZXQvcXJ0ci9ucy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcXJ0ci9ucy5jXG5AQCAtMjEyLDYgJiM0MzsyMTIsNyBAQCBzdGF0aWMgdm9pZCBsb29rdXBfbm90aWZ5KHN0cnVjdCBzb2NrYWRkcl9xcnRyICp0bywgc3RydWN0IHFydHJfc2VydmVyICpzcnYsXG4gXHRcdHByX2VycihcJiMzNDtmYWlsZWQgdG8gc2VuZCBsb29rdXAgbm90aWZpY2F0aW9uXFxuXCYjMzQ7KTtcbiB9XG4gXG4mIzQzOy8qIEFubm91bmNlIHRoZSBsaXN0IG9mIHNlcnZlcnMgcmVnaXN0ZXJlZCBvbiB0aGUgbG9jYWwgbm9kZSAqL1xuIHN0YXRpYyBpbnQgYW5ub3VuY2Vfc2VydmVycyhzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqc3EpXG4ge1xuIFx0c3RydWN0IHFydHJfc2VydmVyICpzcnY7XG5AQCAtMzQ5LDE1ICYjNDM7MzUwLDggQEAgc3RhdGljIGludCBzYXlfaGVsbG8oc3RydWN0IHNvY2thZGRyX3FydHIgKmRlc3QpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi0vKiBBbm5vdW5jZSB0aGUgbGlzdCBvZiBzZXJ2ZXJzIHJlZ2lzdGVyZWQgb24gdGhlIGxvY2FsIG5vZGUgKi9cbiBzdGF0aWMgaW50IGN0cmxfY21kX2hlbGxvKHN0cnVjdCBzb2NrYWRkcl9xcnRyICpzcSlcbiB7XG4tXHRpbnQgcmV0O1xuLVxuLVx0cmV0ID0gc2F5X2hlbGxvKHNxKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdHJldHVybiByZXQ7XG4tXG4gXHRyZXR1cm4gYW5ub3VuY2Vfc2VydmVycyhzcSk7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjEwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtRUlRSJiMzNDssCiAgICAmIzM0O1FSVFJfVFVOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cXJ0cl9lbmRwb2ludF9yZWdpc3RlciYjMzQ7LAogICAgJiMzNDtxcnRyX3NlbmRtc2cmIzM0OywKICAgICYjMzQ7cXJ0cl90dW5fd3JpdGVfaXRlciYjMzQ7LAogICAgJiMzNDtxcnRyX2VuZHBvaW50X3Bvc3QmIzM0OywKICAgICYjMzQ7cXJ0cl9uc193b3JrZXImIzM0OywKICAgICYjMzQ7cXJ0cl9oZWxsb193b3JrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBRdWFsY29tbSBJUEMgUm91dGVyIChRUlRSKSBjb3JlIGxvZ2ljIHRvIGluaXRpYXRlIGEgSEVMTE8gaGFuZHNoYWtlIHVwb24gZW5kcG9pbnQgcmVnaXN0cmF0aW9uIGFuZCBkcm9wIHBhY2tldHMgaWYgdGhlIGhhbmRzaGFrZSBoYXNuJiMzOTt0IGNvbXBsZXRlZC4gVGhpcyBmdW5jdGlvbmFsaXR5IGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYnkgdXNpbmcgdGhlIGAvZGV2L3FydHItdHVuYCBkZXZpY2UsIHdoaWNoIGFsbG93cyB1c2Vyc3BhY2UgdG8gcmVnaXN0ZXIgZW5kcG9pbnRzIGFuZCBpbmplY3QgcGFja2V0cy4gVGhlIGNoYW5nZXMgYWZmZWN0IGNvcmUgcGFja2V0IGVucXVldWVpbmcgYW5kIGVuZHBvaW50IHJlZ2lzdHJhdGlvbiBwYXRocywgd2hpY2ggYXJlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyNWM1N2JiNTg3YzJmY2I4NWQ4MTNmM2IzNDJmYjIyMzhmYTJlMjYyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgNyAxNjoxMDo1NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9xcnRyL2FmX3FydHIuYyBiL25ldC9xcnRyL2FmX3FydHIuYwppbmRleCBkMDJlZjlhNzRjM2NhLi43YWRjMGEwNTMxMjU0IDEwMDY0NAotLS0gYS9uZXQvcXJ0ci9hZl9xcnRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3FydHIvYWZfcXJ0ci5jCkBAIC05LDYgJiM0Mzs5LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC90ZXJtaW9zLmgmZ3Q7CS8qIEZvciBUSU9DSU5RL09VVFEgKi8KICNpbmNsdWRlICZsdDtsaW51eC9zcGlubG9jay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3dhaXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvd29ya3F1ZXVlLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDtuZXQvc29jay5oJmd0OwogCkBAIC0xMjAsOCAmIzQzOzEyMSwxMCBAQCBzdGF0aWMgREVGSU5FX1hBUlJBWV9BTExPQyhxcnRyX3BvcnRzKTsKICAqIEBuaWQ6IG5vZGUgaWQKICAqIEBxcnRyX3R4X2Zsb3c6IHhhcnJheSBvZiBxcnRyX3R4X2Zsb3csIGtleWVkIGJ5IG5vZGUgJmx0OyZsdDsgMzIgfCBwb3J0CiAgKiBAcXJ0cl90eF9sb2NrOiBsb2NrIGZvciBxcnRyX3R4X2Zsb3cgaW5zZXJ0cwomIzQzOyAqIEBoZWxsb19zZW50OiBoZWxsbyBwYWNrZXQgc2VuZCBzdWNjZXNzZnVsCiAgKiBAcnhfcXVldWU6IHJlY2VpdmUgcXVldWUKICAqIEBpdGVtOiBsaXN0IGl0ZW0gZm9yIGJyb2FkY2FzdCBsaXN0CiYjNDM7ICogQHNheV9oZWxsbzogc2NoZWR1bGVkIHdvcmsgZm9yIHNlbmRpbmcgaGVsbG8gcGFja2V0CiAgKi8KIHN0cnVjdCBxcnRyX25vZGUgewogCXN0cnVjdCBtdXRleCBlcF9sb2NrOwpAQCAtMTMyLDggJiM0MzsxMzUsMTEgQEAgc3RydWN0IHFydHJfbm9kZSB7CiAJc3RydWN0IHhhcnJheSBxcnRyX3R4X2Zsb3c7CiAJc3RydWN0IG11dGV4IHFydHJfdHhfbG9jazsgLyogZm9yIHFydHJfdHhfZmxvdyAqLwogCiYjNDM7CWJvb2wgaGVsbG9fc2VudDsKJiM0MzsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHJ4X3F1ZXVlOwogCXN0cnVjdCBsaXN0X2hlYWQgaXRlbTsKJiM0MzsJc3RydWN0IHdvcmtfc3RydWN0IHNheV9oZWxsbzsKIH07CiAKIC8qKgpAQCAtMTg3LDYgJiM0MzsxOTMsOCBAQCBzdGF0aWMgdm9pZCBfX3FydHJfbm9kZV9yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKQogCWxpc3RfZGVsKCZhbXA7bm9kZS0mZ3Q7aXRlbSk7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7cXJ0cl9ub2RlX2xvY2spOwogCiYjNDM7CWNhbmNlbF93b3JrX3N5bmMoJmFtcDtub2RlLSZndDtzYXlfaGVsbG8pOwomIzQzOwogCXNrYl9xdWV1ZV9wdXJnZSgmYW1wO25vZGUtJmd0O3J4X3F1ZXVlKTsKIAogCS8qIEZyZWUgdHggZmxvdyBjb3VudGVycyAqLwpAQCAtMzQxLDYgJiM0MzszNDksMTQgQEAgc3RhdGljIGludCBxcnRyX25vZGVfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXNpemVfdCBsZW4gPSBza2ItJmd0O2xlbjsKIAlpbnQgcmMsIGNvbmZpcm1fcng7CiAKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO25vZGUtJmd0O2VwX2xvY2spOwomIzQzOwlpZiAoIW5vZGUtJmd0O2hlbGxvX3NlbnQgJmFtcDsmYW1wOyB0eXBlICE9IFFSVFJfVFlQRV9IRUxMTykgewomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7bm9kZS0mZ3Q7ZXBfbG9jayk7CiYjNDM7CQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO25vZGUtJmd0O2VwX2xvY2spOwomIzQzOwogCWNvbmZpcm1fcnggPSBxcnRyX3R4X3dhaXQobm9kZSwgdG8tJmd0O3NxX25vZGUsIHRvLSZndDtzcV9wb3J0LCB0eXBlKTsKIAlpZiAoY29uZmlybV9yeCAmbHQ7IDApIHsKIAkJa2ZyZWVfc2tiKHNrYik7CkBAIC0zNzIsNiAmIzQzOzM4OCw4IEBAIHN0YXRpYyBpbnQgcXJ0cl9ub2RlX2VucXVldWUoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCXJjID0gbm9kZS0mZ3Q7ZXAtJmd0O3htaXQobm9kZS0mZ3Q7ZXAsIHNrYik7CiAJCWVsc2UKIAkJCWtmcmVlX3NrYihza2IpOwomIzQzOwkJaWYgKCFyYyAmYW1wOyZhbXA7IHR5cGUgPT0gUVJUUl9UWVBFX0hFTExPKQomIzQzOwkJCW5vZGUtJmd0O2hlbGxvX3NlbnQgPSB0cnVlOwogCQltdXRleF91bmxvY2soJmFtcDtub2RlLSZndDtlcF9sb2NrKTsKIAl9CiAJLyogTmVlZCB0byBlbnN1cmUgdGhhdCBhIHN1YnNlcXVlbnQgbWVzc2FnZSBjYXJyaWVzIHRoZSBvdGhlcndpc2UgbG9zdApAQCAtMzc5LDYgJiM0MzszOTcsOSBAQCBzdGF0aWMgaW50IHFydHJfbm9kZV9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsCiAJaWYgKHJjICZhbXA7JmFtcDsgY29uZmlybV9yeCkKIAkJcXJ0cl90eF9mbG93X2ZhaWxlZChub2RlLCB0by0mZ3Q7c3Ffbm9kZSwgdG8tJmd0O3NxX3BvcnQpOwogCiYjNDM7CWlmIChyYyAmYW1wOyZhbXA7IHR5cGUgPT0gUVJUUl9UWVBFX0hFTExPKQomIzQzOwkJc2NoZWR1bGVfd29yaygmYW1wO25vZGUtJmd0O3NheV9oZWxsbyk7CiYjNDM7CiAJcmV0dXJuIHJjOwogfQogCkBAIC01NzAsNiAmIzQzOzU5MSwzNSBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnFydHJfYWxsb2NfY3RybF9wYWNrZXQoc3RydWN0IHFydHJfY3RybF9wa3QgKipwa3QsCiAJcmV0dXJuIHNrYjsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHFydHJfaGVsbG9fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciBmcm9tID0ge0FGX1FJUENSVFIsIDAsIFFSVFJfUE9SVF9DVFJMfTsKJiM0MzsJc3RydWN0IHNvY2thZGRyX3FydHIgdG8gPSB7QUZfUUlQQ1JUUiwgMCwgUVJUUl9QT1JUX0NUUkx9OwomIzQzOwlzdHJ1Y3QgcXJ0cl9jdHJsX3BrdCAqcGt0OwomIzQzOwlzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlOwomIzQzOwlzdHJ1Y3QgcXJ0cl9zb2NrICpjdHJsOwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwomIzQzOwomIzQzOwlub2RlID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBxcnRyX25vZGUsIHNheV9oZWxsbyk7CiYjNDM7CiYjNDM7CS8qIE5TIG11c3QgYmUgYm91bmQgYmVmb3JlIHdlIGNhbiBzZW5kICovCiYjNDM7CWN0cmwgPSBxcnRyX3BvcnRfbG9va3VwKFFSVFJfUE9SVF9DVFJMKTsKJiM0MzsJaWYgKCFjdHJsKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlza2IgPSBxcnRyX2FsbG9jX2N0cmxfcGFja2V0KCZhbXA7cGt0LCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFza2IpIHsKJiM0MzsJCXFydHJfcG9ydF9wdXQoY3RybCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJcGt0LSZndDtjbWQgPSBjcHVfdG9fbGUzMihRUlRSX1RZUEVfSEVMTE8pOwomIzQzOwlmcm9tLnNxX25vZGUgPSBxcnRyX2xvY2FsX25pZDsKJiM0MzsJdG8uc3Ffbm9kZSA9IG5vZGUtJmd0O25pZDsKJiM0MzsJcXJ0cl9ub2RlX2VucXVldWUobm9kZSwgc2tiLCBRUlRSX1RZUEVfSEVMTE8sICZhbXA7ZnJvbSwgJmFtcDt0byk7CiYjNDM7CXFydHJfcG9ydF9wdXQoY3RybCk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyKCkgLSByZWdpc3RlciBhIG5ldyBlbmRwb2ludAogICogQGVwOiBlbmRwb2ludCB0byByZWdpc3RlcgpAQCAtNTk1LDYgJiM0Mzs2NDUsOSBAQCBpbnQgcXJ0cl9lbmRwb2ludF9yZWdpc3RlcihzdHJ1Y3QgcXJ0cl9lbmRwb2ludCAqZXAsIHVuc2lnbmVkIGludCBuaWQpCiAJbm9kZS0mZ3Q7bmlkID0gUVJUUl9FUF9OSURfQVVUTzsKIAlub2RlLSZndDtlcCA9IGVwOwogCiYjNDM7CW5vZGUtJmd0O2hlbGxvX3NlbnQgPSBmYWxzZTsKJiM0MzsJSU5JVF9XT1JLKCZhbXA7bm9kZS0mZ3Q7c2F5X2hlbGxvLCBxcnRyX2hlbGxvX3dvcmspOwomIzQzOwogCXhhX2luaXQoJmFtcDtub2RlLSZndDtxcnRyX3R4X2Zsb3cpOwogCW11dGV4X2luaXQoJmFtcDtub2RlLSZndDtxcnRyX3R4X2xvY2spOwogCkBAIC02MDUsNiAmIzQzOzY1OCw5IEBAIGludCBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyKHN0cnVjdCBxcnRyX2VuZHBvaW50ICplcCwgdW5zaWduZWQgaW50IG5pZCkKIAltdXRleF91bmxvY2soJmFtcDtxcnRyX25vZGVfbG9jayk7CiAJZXAtJmd0O25vZGUgPSBub2RlOwogCiYjNDM7CS8qIEluaXRpYXRlIEhFTExPIGhhbmRzaGFrZSBmcm9tIHRoZSBjb3JlIGxheWVyICovCiYjNDM7CXNjaGVkdWxlX3dvcmsoJmFtcDtub2RlLSZndDtzYXlfaGVsbG8pOwomIzQzOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocXJ0cl9lbmRwb2ludF9yZWdpc3Rlcik7CkBAIC04NzksNiAmIzQzOzkzNSwxMSBAQCBzdGF0aWMgaW50IHFydHJfYmNhc3RfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCiAJbXV0ZXhfbG9jaygmYW1wO3FydHJfbm9kZV9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsICZhbXA7cXJ0cl9hbGxfbm9kZXMsIGl0ZW0pIHsKJiM0MzsJCS8qIFNraXAgbm9kZXMgd2hvc2Ugbm9kZSBJRCBpcyBub3QgeWV0IGtub3duOyB0aGV5IGNhbm5vdAomIzQzOwkJICogcmVjZWl2ZSBicm9hZGNhc3QgcGFja2V0cyBiZWZvcmUgdGhlIEhFTExPIGhhbmRzaGFrZS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKG5vZGUtJmd0O25pZCA9PSBRUlRSX0VQX05JRF9BVVRPKQomIzQzOwkJCWNvbnRpbnVlOwogCQlza2JuID0gcHNrYl9jb3B5KHNrYiwgR0ZQX0tFUk5FTCk7CiAJCWlmICghc2tibikKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvbmV0L3FydHIvbnMuYyBiL25ldC9xcnRyL25zLmMKaW5kZXggYjNmOWJiY2Y5YWI5Yi4uMTQyNjI2MjNkMmRkNSAxMDA2NDQKLS0tIGEvbmV0L3FydHIvbnMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcXJ0ci9ucy5jCkBAIC0yMTIsNiAmIzQzOzIxMiw3IEBAIHN0YXRpYyB2b2lkIGxvb2t1cF9ub3RpZnkoc3RydWN0IHNvY2thZGRyX3FydHIgKnRvLCBzdHJ1Y3QgcXJ0cl9zZXJ2ZXIgKnNydiwKIAkJcHJfZXJyKCYjMzQ7ZmFpbGVkIHRvIHNlbmQgbG9va3VwIG5vdGlmaWNhdGlvblxuJiMzNDspOwogfQogCiYjNDM7LyogQW5ub3VuY2UgdGhlIGxpc3Qgb2Ygc2VydmVycyByZWdpc3RlcmVkIG9uIHRoZSBsb2NhbCBub2RlICovCiBzdGF0aWMgaW50IGFubm91bmNlX3NlcnZlcnMoc3RydWN0IHNvY2thZGRyX3FydHIgKnNxKQogewogCXN0cnVjdCBxcnRyX3NlcnZlciAqc3J2OwpAQCAtMzQ5LDE1ICYjNDM7MzUwLDggQEAgc3RhdGljIGludCBzYXlfaGVsbG8oc3RydWN0IHNvY2thZGRyX3FydHIgKmRlc3QpCiAJcmV0dXJuIHJldDsKIH0KIAotLyogQW5ub3VuY2UgdGhlIGxpc3Qgb2Ygc2VydmVycyByZWdpc3RlcmVkIG9uIHRoZSBsb2NhbCBub2RlICovCiBzdGF0aWMgaW50IGN0cmxfY21kX2hlbGxvKHN0cnVjdCBzb2NrYWRkcl9xcnRyICpzcSkKIHsKLQlpbnQgcmV0OwotCi0JcmV0ID0gc2F5X2hlbGxvKHNxKTsKLQlpZiAocmV0ICZsdDsgMCkKLQkJcmV0dXJuIHJldDsKLQogCXJldHVybiBhbm5vdW5jZV9zZXJ2ZXJzKHNxKTsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTEwCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFFSVFIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIG1ha2luZyBzb21lIHByZXR0eSBzcGVjaWZpYyBjaGFuZ2VzIHRvIHRoZSBRUlRSIGNvZGUuIFNlZW1zIGxpa2UgdGhleSYjMzk7cmUgYWRkaW5nIGEgYGhlbGxvX3NlbnRgIGZsYWcgYW5kIGEgYHNheV9oZWxsb2Agd29yayBzdHJ1Y3QgdG8gdGhlIGBxcnRyX25vZGVgIHN0cnVjdHVyZSBpbiBgYWZfcXJ0ci5jYC4gSW50ZXJlc3RpbmcuIFRoZSBjb3JlIGxvZ2ljIG9mIGBxcnRyX25vZGVfZW5xdWV1ZWAgaXMgYWxzbyBiZWluZyB0d2Vha2VkLiBJdCYjMzk7cyBub3cgZ29pbmcgdG8gZHJvcCBwYWNrZXRzIGlmIGBoZWxsb19zZW50YCBpcyBmYWxzZSwgKnVubGVzcyogaXQmIzM5O3MgYSBIRUxMTyBwYWNrZXQuIEFuZCwgY3J1Y2lhbGx5LCB0aGV5JiMzOTtyZSBzY2hlZHVsaW5nIGEgSEVMTE8gaGFuZHNoYWtlIGZyb20gdGhlIGNvcmUgbGF5ZXIgbm93IHdoZW4gYW4gZW5kcG9pbnQgcmVnaXN0ZXJzIHVzaW5nIGBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyYC4gVGhhdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHNoaWZ0IGluIHRoZSBoYW5kc2hha2UgcHJvY2Vzcy4KCk5vdywgb3ZlciBpbiBgbnMuY2AsIHRoZXkmIzM5O3ZlIHJlbW92ZWQgdGhlIGBzYXlfaGVsbG9gIGNhbGwgZnJvbSBgY3RybF9jbWRfaGVsbG9gLiBNYWtlcyBzZW5zZSwgdGhlIGNvcmUgaXMgaGFuZGxpbmcgdGhlIGluaXRpYXRpb24gbm93LiBJIHNlZSB3aGF0IHRoZXkmIzM5O3JlIGRvaW5nIHRoZXJlLCBjb25zb2xpZGF0aW5nIHRoZSBIRUxMTyBoYW5kbGluZy4KClRoZSBuZXh0IHF1ZXN0aW9uIGluIG15IG1pbmQsIG5hdHVyYWxseSwgaXMsIGNhbiBJIHJlYWNoIHRoaXMgaW4gbXkgdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudD8gUVJUUiBpcyBRdWFsY29tbSYjMzk7cyBJUEMgUm91dGVyIHByb3RvY29sLCByaWdodD8gU28sIGNhbiBJIGZ1enogdGhpcyBpbiBRRU1VPyBJJiMzOTttIHdvbmRlcmluZyBpZiBJIGNhbiBnZXQgQUZfUUlQQ1JUUiBzb2NrZXRzIGNyZWF0ZWQsIHJlZ2lzdGVyIGVuZHBvaW50cywgbWF5YmUgdmlhIHR1bi90YXAgb3Igc29tZSBvdGhlciBtZWNoYW5pc20uIEhvdyAqYXJlKiBRUlRSIGVuZHBvaW50cyByZWdpc3RlcmVkLCBhY3R1YWxseT8gSSBuZWVkIHRvIGNoZWNrIGhvdyBJIHdvdWxkIGdldCB0aGUgY29kZSBwYXRoIHRvIHdvcmsuIEkgc2hvdWxkIHByb2JhYmx5IGp1c3Qgc2VhcmNoIGZvciBgcXJ0cl9lbmRwb2ludF9yZWdpc3RlcmAgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cXJ0cl9lbmRwb2ludF9yZWdpc3RlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcXJ0ci9hZl9xcnRyLmM9NTk0PXN0YXRpYyB2b2lkIHFydHJfaGVsbG9fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L3FydHIvYWZfcXJ0ci5jLTYyMy0vKipcbm5ldC9xcnRyL2FmX3FydHIuYzo2MjQ6ICogcXJ0cl9lbmRwb2ludF9yZWdpc3RlcigpIC0gcmVnaXN0ZXIgYSBuZXcgZW5kcG9pbnRcbm5ldC9xcnRyL2FmX3FydHIuYy02MjUtICogQGVwOiBlbmRwb2ludCB0byByZWdpc3RlclxuLS1cbm5ldC9xcnRyL2FmX3FydHIuYy02MzAtICovXG5uZXQvcXJ0ci9hZl9xcnRyLmM6NjMxOmludCBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyKHN0cnVjdCBxcnRyX2VuZHBvaW50ICplcCwgdW5zaWduZWQgaW50IG5pZClcbm5ldC9xcnRyL2FmX3FydHIuYy02MzIte1xuLS1cbm5ldC9xcnRyL2FmX3FydHIuYy02NjUtfVxubmV0L3FydHIvYWZfcXJ0ci5jOjY2NjpFWFBPUlRfU1lNQk9MX0dQTChxcnRyX2VuZHBvaW50X3JlZ2lzdGVyKTtcbm5ldC9xcnRyL2FmX3FydHIuYy02NjctXG4tLVxubmV0L3FydHIvbWhpLmM9MTEwPXN0YXRpYyBpbnQgcWNvbV9taGlfcXJ0cl9wcm9iZShzdHJ1Y3QgbWhpX2RldmljZSAqbWhpX2Rldixcbi0tXG5uZXQvcXJ0ci9taGkuYy0xMzAtXG5uZXQvcXJ0ci9taGkuYzoxMzE6XHRyYyA9IHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIoXHUwMDI2cWRldi1cdTAwM2VlcCwgUVJUUl9FUF9OSURfQVVUTyk7XG5uZXQvcXJ0ci9taGkuYy0xMzItXHRpZiAocmMpXG4tLVxubmV0L3FydHIvcXJ0ci5oPTIwPXN0cnVjdCBxcnRyX2VuZHBvaW50IHtcbi0tXG5uZXQvcXJ0ci9xcnRyLmgtMjUtXG5uZXQvcXJ0ci9xcnRyLmg6MjY6aW50IHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIoc3RydWN0IHFydHJfZW5kcG9pbnQgKmVwLCB1bnNpZ25lZCBpbnQgbmlkKTtcbm5ldC9xcnRyL3FydHIuaC0yNy1cbi0tXG5uZXQvcXJ0ci9zbWQuYz01OT1zdGF0aWMgaW50IHFjb21fc21kX3FydHJfcHJvYmUoc3RydWN0IHJwbXNnX2RldmljZSAqcnBkZXYpXG4tLVxubmV0L3FydHIvc21kLmMtNzEtXG5uZXQvcXJ0ci9zbWQuYzo3MjpcdHJjID0gcXJ0cl9lbmRwb2ludF9yZWdpc3RlcihcdTAwMjZxZGV2LVx1MDAzZWVwLCBRUlRSX0VQX05JRF9BVVRPKTtcbm5ldC9xcnRyL3NtZC5jLTczLVx0aWYgKHJjKVxuLS1cbm5ldC9xcnRyL3R1bi5jPTMxPXN0YXRpYyBpbnQgcXJ0cl90dW5fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscClcbi0tXG5uZXQvcXJ0ci90dW4uYy00Ni1cbm5ldC9xcnRyL3R1bi5jOjQ3Olx0cmV0ID0gcXJ0cl9lbmRwb2ludF9yZWdpc3RlcihcdTAwMjZ0dW4tXHUwMDNlZXAsIFFSVFJfRVBfTklEX0FVVE8pO1xubmV0L3FydHIvdHVuLmMtNDgtXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxOTMKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBRUlRSIFR1bm5lbGluZyBDYXBhYmlsaXRpZXMqKgoKUmlnaHQsIHNvIGBuZXQvcXJ0ci90dW4uY2AuLi4gdGhhdCYjMzk7cyB0aGUgZmlsZSBJIHdhcyBob3BpbmcgdG8gZmluZCEgQSB0dW4gZGV2aWNlLCBzcGVjaWZpY2FsbHksIGlzIGhvdyBRUlRSIGVuZHBvaW50cyBhcmUgcmVnaXN0ZXJlZC4gVGhhdCYjMzk7cyBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlLiBOb3cgSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdGhlIHN5c3RlbSBvcGVyYXRlcywgc28gbXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBUaW1lIHRvIGRpZyBpbnRvIGBuZXQvcXJ0ci90dW4uY2AgYW5kIHNlZSBleGFjdGx5IGhvdyB0aGV5JiMzOTt2ZSBpbXBsZW1lbnRlZCB0aGlzIHR1bm5lbGluZyBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBvZiB0aGlzIGFwcHJvYWNoIHRvIHNlZSBpZiBpdCBmaXRzIHRoZSBpbnRlbmRlZCB1c2UgY2FzZSwgYW5kIHRvIHByZXBhcmUgZm9yIGFueSBwb3RlbnRpYWwgcHJvYmxlbXMgSSBjYW4gZm9yZXNlZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtxcnRyX3R1biYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcXJ0ci90dW4uYy0xMS1cbm5ldC9xcnRyL3R1bi5jOjEyOnN0cnVjdCBxcnRyX3R1biB7XG5uZXQvcXJ0ci90dW4uYy0xMy1cdHN0cnVjdCBxcnRyX2VuZHBvaW50IGVwO1xuLS1cbm5ldC9xcnRyL3R1bi5jLTE4LVxubmV0L3FydHIvdHVuLmM6MTk6c3RhdGljIGludCBxcnRyX3R1bl9zZW5kKHN0cnVjdCBxcnRyX2VuZHBvaW50ICplcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9xcnRyL3R1bi5jLTIwLXtcbm5ldC9xcnRyL3R1bi5jOjIxOlx0c3RydWN0IHFydHJfdHVuICp0dW4gPSBjb250YWluZXJfb2YoZXAsIHN0cnVjdCBxcnRyX3R1biwgZXApO1xubmV0L3FydHIvdHVuLmMtMjItXG4tLVxubmV0L3FydHIvdHVuLmMtMzAtXG5uZXQvcXJ0ci90dW4uYzozMTpzdGF0aWMgaW50IHFydHJfdHVuX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXG5uZXQvcXJ0ci90dW4uYy0zMi17XG5uZXQvcXJ0ci90dW4uYzozMzpcdHN0cnVjdCBxcnRyX3R1biAqdHVuO1xubmV0L3FydHIvdHVuLmMtMzQtXHRpbnQgcmV0O1xuLS1cbm5ldC9xcnRyL3R1bi5jLTQyLVxubmV0L3FydHIvdHVuLmM6NDM6XHR0dW4tXHUwMDNlZXAueG1pdCA9IHFydHJfdHVuX3NlbmQ7XG5uZXQvcXJ0ci90dW4uYy00NC1cbi0tXG5uZXQvcXJ0ci90dW4uYy01OC1cbm5ldC9xcnRyL3R1bi5jOjU5OnN0YXRpYyBzc2l6ZV90IHFydHJfdHVuX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXG5uZXQvcXJ0ci90dW4uYy02MC17XG5uZXQvcXJ0ci90dW4uYy02MS1cdHN0cnVjdCBmaWxlICpmaWxwID0gaW9jYi1cdTAwM2VraV9maWxwO1xubmV0L3FydHIvdHVuLmM6NjI6XHRzdHJ1Y3QgcXJ0cl90dW4gKnR1biA9IGZpbHAtXHUwMDNlcHJpdmF0ZV9kYXRhO1xubmV0L3FydHIvdHVuLmMtNjMtXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuLS1cbm5ldC9xcnRyL3R1bi5jLTg0LVxubmV0L3FydHIvdHVuLmM6ODU6c3RhdGljIHNzaXplX3QgcXJ0cl90dW5fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbm5ldC9xcnRyL3R1bi5jLTg2LXtcbm5ldC9xcnRyL3R1bi5jLTg3LVx0c3RydWN0IGZpbGUgKmZpbHAgPSBpb2NiLVx1MDAzZWtpX2ZpbHA7XG5uZXQvcXJ0ci90dW4uYzo4ODpcdHN0cnVjdCBxcnRyX3R1biAqdHVuID0gZmlscC1cdTAwM2Vwcml2YXRlX2RhdGE7XG5uZXQvcXJ0ci90dW4uYy04OS1cdHNpemVfdCBsZW4gPSBpb3ZfaXRlcl9jb3VudChmcm9tKTtcbi0tXG5uZXQvcXJ0ci90dW4uYy0xMTMtXG5uZXQvcXJ0ci90dW4uYzoxMTQ6c3RhdGljIF9fcG9sbF90IHFydHJfdHVuX3BvbGwoc3RydWN0IGZpbGUgKmZpbHAsIHBvbGxfdGFibGUgKndhaXQpXG5uZXQvcXJ0ci90dW4uYy0xMTUte1xubmV0L3FydHIvdHVuLmM6MTE2Olx0c3RydWN0IHFydHJfdHVuICp0dW4gPSBmaWxwLVx1MDAzZXByaXZhdGVfZGF0YTtcbm5ldC9xcnRyL3R1bi5jLTExNy1cdF9fcG9sbF90IG1hc2sgPSAwO1xuLS1cbm5ldC9xcnRyL3R1bi5jLTEyNi1cbm5ldC9xcnRyL3R1bi5jOjEyNzpzdGF0aWMgaW50IHFydHJfdHVuX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXG5uZXQvcXJ0ci90dW4uYy0xMjgte1xubmV0L3FydHIvdHVuLmM6MTI5Olx0c3RydWN0IHFydHJfdHVuICp0dW4gPSBmaWxwLVx1MDAzZXByaXZhdGVfZGF0YTtcbm5ldC9xcnRyL3R1bi5jLTEzMC1cbi0tXG5uZXQvcXJ0ci90dW4uYy0xNDAtXG5uZXQvcXJ0ci90dW4uYzoxNDE6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcXJ0cl90dW5fb3BzID0ge1xubmV0L3FydHIvdHVuLmMtMTQyLVx0Lm93bmVyID0gVEhJU19NT0RVTEUsXG5uZXQvcXJ0ci90dW4uYzoxNDM6XHQub3BlbiA9IHFydHJfdHVuX29wZW4sXG5uZXQvcXJ0ci90dW4uYzoxNDQ6XHQucG9sbCA9IHFydHJfdHVuX3BvbGwsXG5uZXQvcXJ0ci90dW4uYzoxNDU6XHQucmVhZF9pdGVyID0gcXJ0cl90dW5fcmVhZF9pdGVyLFxubmV0L3FydHIvdHVuLmM6MTQ2Olx0LndyaXRlX2l0ZXIgPSBxcnRyX3R1bl93cml0ZV9pdGVyLFxubmV0L3FydHIvdHVuLmM6MTQ3Olx0LnJlbGVhc2UgPSBxcnRyX3R1bl9yZWxlYXNlLFxubmV0L3FydHIvdHVuLmMtMTQ4LX07XG5uZXQvcXJ0ci90dW4uYy0xNDktXG5uZXQvcXJ0ci90dW4uYzoxNTA6c3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIHFydHJfdHVuX21pc2NkZXYgPSB7XG5uZXQvcXJ0ci90dW4uYy0xNTEtXHRNSVNDX0RZTkFNSUNfTUlOT1IsXG5uZXQvcXJ0ci90dW4uYy0xNTItXHRcJiMzNDtxcnRyLXR1blwmIzM0Oyxcbm5ldC9xcnRyL3R1bi5jOjE1MzpcdFx1MDAyNnFydHJfdHVuX29wcyxcbm5ldC9xcnRyL3R1bi5jLTE1NC19O1xubmV0L3FydHIvdHVuLmMtMTU1LVxubmV0L3FydHIvdHVuLmM6MTU2OnN0YXRpYyBpbnQgX19pbml0IHFydHJfdHVuX2luaXQodm9pZClcbm5ldC9xcnRyL3R1bi5jLTE1Ny17XG4tLVxubmV0L3FydHIvdHVuLmMtMTU5LVxubmV0L3FydHIvdHVuLmM6MTYwOlx0cmV0ID0gbWlzY19yZWdpc3RlcihcdTAwMjZxcnRyX3R1bl9taXNjZGV2KTtcbm5ldC9xcnRyL3R1bi5jLTE2MS1cdGlmIChyZXQpXG4tLVxubmV0L3FydHIvdHVuLmMtMTY2LVxubmV0L3FydHIvdHVuLmM6MTY3OnN0YXRpYyB2b2lkIF9fZXhpdCBxcnRyX3R1bl9leGl0KHZvaWQpXG5uZXQvcXJ0ci90dW4uYy0xNjgte1xubmV0L3FydHIvdHVuLmM6MTY5Olx0bWlzY19kZXJlZ2lzdGVyKFx1MDAyNnFydHJfdHVuX21pc2NkZXYpO1xubmV0L3FydHIvdHVuLmMtMTcwLX1cbm5ldC9xcnRyL3R1bi5jLTE3MS1cbm5ldC9xcnRyL3R1bi5jOjE3Mjptb2R1bGVfaW5pdChxcnRyX3R1bl9pbml0KTtcbm5ldC9xcnRyL3R1bi5jOjE3Mzptb2R1bGVfZXhpdChxcnRyX3R1bl9leGl0KTtcbm5ldC9xcnRyL3R1bi5jLTE3NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTEzCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMTYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgUVJUUiBmb3IgVnVsbmVyYWJpbGl0aWVzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIGAvZGV2L3FydHItdHVuYCBkZXZpY2UsIHdoaWNoIGlzIGludHJpZ3VpbmcuIEkgY2FuIG9wZW4gaXQsIHdyaXRlIHRvIGl0LCBhbmQgdGhhdCBhcHBhcmVudGx5IGxldHMgbWUgcmVnaXN0ZXIgYSBRUlRSIGVuZHBvaW50IGFuZCBpbmplY3QgcGFja2V0cy4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGNvZGUgaXMgbGl2ZSwgcmVhY2hhYmxlLCBhbmQgKmZ1enphYmxlKi4gTXkgbWluZCBpcyBhbHJlYWR5IHJhY2luZyB3aXRoIHBvdGVudGlhbCBhdHRhY2sgdmVjdG9ycy4KClRoZSBwYXRjaCBJJiMzOTttIGxvb2tpbmcgYXQgbW9kaWZpZXMgYHFydHJfbm9kZV9lbnF1ZXVlYCwgYHFydHJfZW5kcG9pbnRfcmVnaXN0ZXJgLCBhbmQgYHFydHJfYmNhc3RfZW5xdWV1ZWAg4oCTIGludGVyZXN0aW5nIGNob2ljZXMuIFRob3NlIGZ1bmN0aW9ucyBhcmUgZ29pbmcgdG8gYmUga2V5LCBhbmQgSeKAmW0gbWFraW5nIGEgbWVudGFsIG5vdGUgdG8gc3BlbmQgYSBzaWduaWZpY2FudCBhbW91bnQgb2YgdGltZSBmdXp6aW5nIHRoZW0uIEkmIzM5O2xsIG5lZWQgdG8gc2NydXRpbml6ZSB0aG9zZSwgYnV0IGl0IG1ha2VzIHNlbnNlIHRvIGluY2x1ZGUgYSBmZXcgb3RoZXJzOiBgcXJ0cl9oZWxsb193b3JrYCBmZWVscyByZWxldmFudCwgc2luY2UgaXQmIzM5O3MgaW52b2x2ZWQgaW4gdGhlIHNldHVwL3JlZ2lzdHJhdGlvbiBwcm9jZXNzLCBhbmQsIGNydWNpYWxseSwgYHFydHJfdHVuX3dyaXRlX2l0ZXJgLCBzaW5jZSB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O20gaW5qZWN0aW5nIHRoZSBwYWNrZXRzLgoKRmlyc3QgSSYjMzk7bGwgZ28gY2hlY2sgdGhlIEtjb25maWcgc2V0dGluZ3MgZm9yIFFSVFIgYW5kIFFSVFJfVFVOLiBHb3R0YSBtYWtlIHN1cmUgdGhvc2Ugc2V0dGluZ3MgYXJlIHdoYXQgSSBleHBlY3QgdGhlbSB0byBiZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUVJUUiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcXJ0ci9LY29uZmlnLTQtXG5uZXQvcXJ0ci9LY29uZmlnOjU6Y29uZmlnIFFSVFJcbm5ldC9xcnRyL0tjb25maWctNi1cdHRyaXN0YXRlIFwmIzM0O1F1YWxjb21tIElQQyBSb3V0ZXIgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9xcnRyL0tjb25maWc9MTU9aWYgUVJUUlxubmV0L3FydHIvS2NvbmZpZy0xNi1cbm5ldC9xcnRyL0tjb25maWc6MTc6Y29uZmlnIFFSVFJfU01EXG5uZXQvcXJ0ci9LY29uZmlnLTE4LVx0dHJpc3RhdGUgXCYjMzQ7U01EIElQQyBSb3V0ZXIgY2hhbm5lbHNcJiMzNDtcbi0tXG5uZXQvcXJ0ci9LY29uZmlnLTIzLVxubmV0L3FydHIvS2NvbmZpZzoyNDpjb25maWcgUVJUUl9UVU5cbm5ldC9xcnRyL0tjb25maWctMjUtXHR0cmlzdGF0ZSBcJiMzNDtUVU4gZGV2aWNlIGZvciBRdWFsY29tbSBJUEMgUm91dGVyXCYjMzQ7XG4tLVxubmV0L3FydHIvS2NvbmZpZy0zMC1cbm5ldC9xcnRyL0tjb25maWc6MzE6Y29uZmlnIFFSVFJfTUhJXG5uZXQvcXJ0ci9LY29uZmlnLTMyLVx0dHJpc3RhdGUgXCYjMzQ7TUhJIElQQyBSb3V0ZXIgY2hhbm5lbHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTgwCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBpbml0aWFsIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbml0aWFsIFFSVFIgQ29uZmlndXJhdGlvbiBhbmQgUGFja2V0IEhhbmRsaW5nIFJldmlldyoqCgpBbHJpZ2h0LCByaWdodCBvZmYgdGhlIGJhdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgUVJUUmAgYW5kIGBRUlRSX1RVTmAgYXJlIGVuYWJsZWQuIFRoYXQmIzM5O3MgZnVuZGFtZW50YWwsIHRoZSBmb3VuZGF0aW9uIHVwb24gd2hpY2ggZXZlcnl0aGluZyBlbHNlIHNpdHMuIFdpdGhvdXQgdGhvc2UsIHdlJiMzOTtyZSBkZWFkIGluIHRoZSB3YXRlciwgc28gaXQmIzM5O3MgdGhlIGZpcnN0IHRoaW5nIEkmIzM5O2QgY2hlY2sgaWYgc29tZXRoaW5nJiMzOTtzIG5vdCB3b3JraW5nIGFzIGV4cGVjdGVkLgoKTm93LCB3aGVyZSBkb2VzIHRoZSByZWFsIHdvcmsgaGFwcGVuLCB0aGUgbWVhdCBhbmQgcG90YXRvZXMgb2YgdGhlIHBhY2tldCBmbG93PyBUaGUgbmV4dCBzdGVwIGlzIGFsd2F5cyB0byBkcmlsbCBpbnRvIHRoZSBjb3JlIGZ1bmN0aW9ucyByZXNwb25zaWJsZSBmb3IgcXVldWluZyBwYWNrZXRzLiBTbywgbXkgbWluZCBpbW1lZGlhdGVseSBnb2VzIHRvIGBxcnRyX25vZGVfZW5xdWV1ZWAgYW5kIGBxcnRyX2JjYXN0X2VucXVldWVgLiBUaG9zZSBhcmUgdGhlIHByaW1lIHN1c3BlY3RzLCByaWdodD8gVGhvc2UgYXJlIHRoZSBmdW5jdGlvbnMgSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIGRlZXBseSBhbmFseXplLCBzcGVjaWZpY2FsbHkgaW4gYG5ldC9xcnRyL2FmX3FydHIuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHBhY2tldHMgYXJlIGJlaW5nIGFkZGVkIHRvIHRoZSBxdWV1ZXMsIGhvdyB0aGV5JiMzOTtyZSBiZWluZyBoYW5kbGVkIGZvciBib3RoIHVuaWNhc3QgYW5kIGJyb2FkY2FzdCBzY2VuYXJpb3MuIEFueSBzdWJ0bGUgZGV0YWlsIHRoZXJlIGNvdWxkIGV4cG9zZSBhIGNyaXRpY2FsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2sgb3IgZXZlbiBhIHN1YnRsZSBidWcuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3FydHJfbm9kZV9lbnF1ZXVlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9xcnRyL2FmX3FydHIuYz0zMjk9c3RhdGljIHZvaWQgcXJ0cl90eF9mbG93X2ZhaWxlZChzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBpbnQgZGVzdF9ub2RlLFxuLS1cbm5ldC9xcnRyL2FmX3FydHIuYy0zNDMtLyogUGFzcyBhbiBvdXRnb2luZyBwYWNrZXQgc29ja2V0IGJ1ZmZlciB0byB0aGUgZW5kcG9pbnQgZHJpdmVyLiAqL1xubmV0L3FydHIvYWZfcXJ0ci5jOjM0NDpzdGF0aWMgaW50IHFydHJfbm9kZV9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvcXJ0ci9hZl9xcnRyLmMtMzQ1LVx0XHRcdCAgICAgaW50IHR5cGUsIHN0cnVjdCBzb2NrYWRkcl9xcnRyICpmcm9tLFxuLS1cbm5ldC9xcnRyL2FmX3FydHIuYz01OTQ9c3RhdGljIHZvaWQgcXJ0cl9oZWxsb193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjE4LVx0dG8uc3Ffbm9kZSA9IG5vZGUtXHUwMDNlbmlkO1xubmV0L3FydHIvYWZfcXJ0ci5jOjYxOTpcdHFydHJfbm9kZV9lbnF1ZXVlKG5vZGUsIHNrYiwgUVJUUl9UWVBFX0hFTExPLCBcdTAwMjZmcm9tLCBcdTAwMjZ0byk7XG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjIwLVx0cXJ0cl9wb3J0X3B1dChjdHJsKTtcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmM9OTMwPXN0YXRpYyBpbnQgcXJ0cl9iY2FzdF9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3FydHIvYWZfcXJ0ci5jLTk0Ni1cdFx0c2tiX3NldF9vd25lcl93KHNrYm4sIHNrYi1cdTAwM2Vzayk7XG5uZXQvcXJ0ci9hZl9xcnRyLmM6OTQ3Olx0XHRxcnRyX25vZGVfZW5xdWV1ZShub2RlLCBza2JuLCB0eXBlLCBmcm9tLCB0byk7XG5uZXQvcXJ0ci9hZl9xcnRyLmMtOTQ4LVx0fVxuLS1cbm5ldC9xcnRyL2FmX3FydHIuYz05NTY9c3RhdGljIGludCBxcnRyX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxuLS1cbm5ldC9xcnRyL2FmX3FydHIuYy0xMDE2LVx0XHR9XG5uZXQvcXJ0ci9hZl9xcnRyLmM6MTAxNzpcdFx0ZW5xdWV1ZV9mbiA9IHFydHJfbm9kZV9lbnF1ZXVlO1xubmV0L3FydHIvYWZfcXJ0ci5jLTEwMTgtXHR9XG4tLVxubmV0L3FydHIvYWZfcXJ0ci5jPTEwNTk9c3RhdGljIGludCBxcnRyX3NlbmRfcmVzdW1lX3R4KHN0cnVjdCBxcnRyX2NiICpjYilcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmMtMTA4MS1cbm5ldC9xcnRyL2FmX3FydHIuYzoxMDgyOlx0cmV0ID0gcXJ0cl9ub2RlX2VucXVldWUobm9kZSwgc2tiLCBRUlRSX1RZUEVfUkVTVU1FX1RYLCBcdTAwMjZsb2NhbCwgXHUwMDI2cmVtb3RlKTtcbm5ldC9xcnRyL2FmX3FydHIuYy0xMDgzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTc5CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBRUlRSIEFQSSBGdW5jdGlvbiBBdHRyaWJ1dGVzKioKCk9rYXksIHNvIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCB0aGlzIFFSVFIgY29kZSBhbmQgdGhlIHByb21wdCBzcGVjaWZpY2FsbHkgd2FudHMgbWUgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBJIHNlZSBgcXJ0cl9ub2RlX2VucXVldWVgIGFuZCBgcXJ0cl9iY2FzdF9lbnF1ZXVlYCBhcmUgbWFya2VkIGFzIHN0YXRpYywgd2hpbGUgYHFydHJfZW5kcG9pbnRfcmVnaXN0ZXJgIGlzIGV4cG9ydGVkLiBgcXJ0cl9oZWxsb193b3JrYCBpcyBhbHNvIHN0YXRpYy4KCkJhc2VkIG9uIHRoZSBwcm9tcHQsIEkgbmVlZCB0byBmb2N1cyBvbiB0aGUgc3RhdGljIG9uZXMuIE5vdywgYHFydHJfbm9kZV9lbnF1ZXVlYCBsb29rcyBwcmV0dHkgc2l6YWJsZSwgc28gaXQmIzM5O3MgKmxpa2VseSogbm90IGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLCBidXQgaXQmIzM5O3MgYWx3YXlzIGJlc3QgdG8gYmUgc3VyZS4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCwgYnV0IEkmIzM5O2xsIGFkZCBgcXJ0cl9lbmRwb2ludF9yZWdpc3RlcmAsIGBxcnRyX3R1bl93cml0ZV9pdGVyYCBhbmQgYHFydHJfc2VuZG1zZ2AgdG8gbXkgbGlzdCBvZiBmdW5jdGlvbnMgdG8gY2hlY2suIEkgc2hvdWxkIHZlcmlmeSB0aGF0LiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBpZiB0aG9zZSBvdGhlciBsaXN0ZWQgZnVuY3Rpb25zIGFyZSBzdGF0aWMsIGJ1dCBhbHNvIGNvbmZpcm0gdGhlIGlubGluaW5nIHN0YXR1cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cXJ0cl9zZW5kbXNnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9xcnRyL2FmX3FydHIuYz05MzA9c3RhdGljIGludCBxcnRyX2JjYXN0X2VucXVldWUoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmMtOTU1LVxubmV0L3FydHIvYWZfcXJ0ci5jOjk1NjpzdGF0aWMgaW50IHFydHJfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG5uZXQvcXJ0ci9hZl9xcnRyLmMtOTU3LXtcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmM9MTI5Mz1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBxcnRyX3Byb3RvX29wcyA9IHtcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmMtMTMwMC1cdC5saXN0ZW5cdFx0PSBzb2NrX25vX2xpc3Rlbixcbm5ldC9xcnRyL2FmX3FydHIuYzoxMzAxOlx0LnNlbmRtc2dcdD0gcXJ0cl9zZW5kbXNnLFxubmV0L3FydHIvYWZfcXJ0ci5jLTEzMDItXHQucmVjdm1zZ1x0PSBxcnRyX3JlY3Ztc2csXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyNjAKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgYXZhaWxhYmxlIGVudHJ5IHBvaW50cy4KCioqRW50cnkgUG9pbnQgQXNzZXNzbWVudCBmb3IgUVJUUiBFeHBsb3JhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRvIGludGVyYWN0IHdpdGggdGhlIFFSVFIgc3Vic3lzdGVtLCBhbmQgZnJvbSB3aGF0IEkmIzM5O3ZlIHNlZW4sIGBxcnRyX3NlbmRtc2dgIHNlZW1zIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3Igc2VuZGluZyBtZXNzYWdlcy4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBmdW5jdGlvbiwgYW5kIEkmIzM5O2QgZXhwZWN0IGl0IHRvIGhhbmRsZSB0aGUgY29yZSBtZXNzYWdpbmcgZmxvdy4KCmBxcnRyX3R1bl93cml0ZV9pdGVyYCBpcyBhbm90aGVyIGludHJpZ3Vpbmcgb3B0aW9uLiBHaXZlbiBpdHMgbmFtZSwgSSYjMzk7bSBndWVzc2luZyB0aGlzIHJlbGF0ZXMgdG8gdGhlIFRVTiBpbnRlcmZhY2UsIHNvIGxpa2VseSwgaXQmIzM5O3MgdXNlZCB3aGVuIGRhdGEgaXMgYmVpbmcgd3JpdHRlbiB0byBvciBmcm9tIHRoZSBRUlRSICYjMzQ7dHVubmVsJiMzNDsuIFRoaXMgY291bGQgYmUgaGVscGZ1bCBpbiB1bmRlcnN0YW5kaW5nIGhvdyByYXcgZGF0YSBpcyBoYW5kbGVkLgoKRmluYWxseSwgYHFydHJfZW5kcG9pbnRfcmVnaXN0ZXJgIGFsc28gY2F1Z2h0IG15IGV5ZS4gVGhhdCBzZWVtcyBrZXkgZm9yIGVzdGFibGlzaGluZyBhbmQgbWFuYWdpbmcgZW5kcG9pbnRzIHdpdGhpbiB0aGUgUVJUUiBzeXN0ZW0sIHdoaWNoIGlzIGVzc2VudGlhbCB0byBhbnkgc29ydCBvZiBjb21tdW5pY2F0aW9uLgoKVG8gc3RhcnQsIEkmIzM5O2xsIGZvY3VzIG9uIGBxcnRyX3R1bl93cml0ZV9pdGVyYCwgc2luY2UgSSYjMzk7bSBpbnRlcmVzdGVkIGluIGhvdyBRUlRSIGRhdGEgaW50ZWdyYXRlcyBpbnRvIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBJJiMzOTtsbCBoZWFkIG92ZXIgdG8gYG5ldC9xcnRyL3R1bi5jYCBhbmQgZGlnIGludG8gdGhhdC4gSG9wZWZ1bGx5LCB0aGF0IHdpbGwgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGhvdyB0aGUgdHVubmVsIGludGVyZmFjZSB3b3Jrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cXJ0cl90dW5fd3JpdGVfaXRlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcXJ0ci90dW4uYz01OT1zdGF0aWMgc3NpemVfdCBxcnRyX3R1bl9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxuLS1cbm5ldC9xcnRyL3R1bi5jLTg0LVxubmV0L3FydHIvdHVuLmM6ODU6c3RhdGljIHNzaXplX3QgcXJ0cl90dW5fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbm5ldC9xcnRyL3R1bi5jLTg2LXtcbi0tXG5uZXQvcXJ0ci90dW4uYz0xNDE9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcXJ0cl90dW5fb3BzID0ge1xuLS1cbm5ldC9xcnRyL3R1bi5jLTE0NS1cdC5yZWFkX2l0ZXIgPSBxcnRyX3R1bl9yZWFkX2l0ZXIsXG5uZXQvcXJ0ci90dW4uYzoxNDY6XHQud3JpdGVfaXRlciA9IHFydHJfdHVuX3dyaXRlX2l0ZXIsXG5uZXQvcXJ0ci90dW4uYy0xNDctXHQucmVsZWFzZSA9IHFydHJfdHVuX3JlbGVhc2UsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4NTQKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqRGl2aW5nIGludG8gdGhlIFFSVFIgRW5kcG9pbnQgUG9zdCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIGRlZXAgZGl2ZSBpbnRvIGBxcnRyX2VuZHBvaW50X3Bvc3RgIHdpdGhpbiBgbmV0L3FydHIvYWZfcXJ0ci5jYC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgdGhlIGNydXggb2YgaG93IGRhdGEgZ2V0cyBwdXNoZWQgb250byBhIFFSVFIgZW5kcG9pbnQsIHdoaWNoIGlzIGEga2V5IHBhcnQgb2YgaG93IHRoaXMgd2hvbGUgc3lzdGVtIGZ1bmN0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGlzIGlzIGdvaW5nIHRvIGJlIGNlbnRyYWwgdG8gZmlndXJpbmcgb3V0IHdoYXRldmVyIGlzc3VlIEkmIzM5O20gbG9va2luZyBhdC4gSSYjMzk7bGwgYmUgbG9va2luZyBhdCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IG1hbmlwdWxhdGVzLCBhbnkgbG9ja2luZyBpdCB1c2VzLCBob3cgaXQgaGFuZGxlcyBlcnJvcnMsIGFuZCB0aGUgZGlmZmVyZW50IHBhdGhzIHRoZSBjb2RlIGNhbiB0YWtlIGJhc2VkIG9uIHZhcmlvdXMgY29uZGl0aW9ucy4gSSB3YW50IHRvIHNlZSBob3cgdGhlIG1lc3NhZ2VzIGFyZSBxdWV1ZWQgb3IgdHJhbnNtaXR0ZWQgYW5kIHdoZXJlIHRoZSBhY3R1YWwgZGF0YSB0cmFuc2ZlciB0byB0aGUgZGVzdGluYXRpb24gaGFwcGVucy4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBpcyB3aGVyZSBhbnkgc3VidGxlIHBlcmZvcm1hbmNlIGlzc3VlcyBvciBwb3RlbnRpYWwgZGVhZGxvY2sgc2NlbmFyaW9zIG1pZ2h0IHJldmVhbCB0aGVtc2VsdmVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cXJ0cl9lbmRwb2ludF9wb3N0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9xcnRyL2FmX3FydHIuYz00MzA9c3RhdGljIHZvaWQgcXJ0cl9ub2RlX2Fzc2lnbihzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCB1bnNpZ25lZCBpbnQgbmlkKVxuLS1cbm5ldC9xcnRyL2FmX3FydHIuYy00NDQtLyoqXG5uZXQvcXJ0ci9hZl9xcnRyLmM6NDQ1OiAqIHFydHJfZW5kcG9pbnRfcG9zdCgpIC0gcG9zdCBpbmNvbWluZyBkYXRhXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNDQ2LSAqIEBlcDogZW5kcG9pbnQgaGFuZGxlXG4tLVxubmV0L3FydHIvYWZfcXJ0ci5jLTQ1MS0gKi9cbm5ldC9xcnRyL2FmX3FydHIuYzo0NTI6aW50IHFydHJfZW5kcG9pbnRfcG9zdChzdHJ1Y3QgcXJ0cl9lbmRwb2ludCAqZXAsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNDUzLXtcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNTY1LX1cbm5ldC9xcnRyL2FmX3FydHIuYzo1NjY6RVhQT1JUX1NZTUJPTF9HUEwocXJ0cl9lbmRwb2ludF9wb3N0KTtcbm5ldC9xcnRyL2FmX3FydHIuYy01NjctXG4tLVxubmV0L3FydHIvbWhpLmM9MjE9c3RhdGljIHZvaWQgcWNvbV9taGlfcXJ0cl9kbF9jYWxsYmFjayhzdHJ1Y3QgbWhpX2RldmljZSAqbWhpX2Rldixcbi0tXG5uZXQvcXJ0ci9taGkuYy0zNS1cbm5ldC9xcnRyL21oaS5jOjM2Olx0cmMgPSBxcnRyX2VuZHBvaW50X3Bvc3QoXHUwMDI2cWRldi1cdTAwM2VlcCwgbWhpX3Jlcy1cdTAwM2VidWZfYWRkcixcbm5ldC9xcnRyL21oaS5jLTM3LVx0XHRcdFx0bWhpX3Jlcy1cdTAwM2VieXRlc194ZmVyZCk7XG4tLVxubmV0L3FydHIvcXJ0ci5oPTI4PXZvaWQgcXJ0cl9lbmRwb2ludF91bnJlZ2lzdGVyKHN0cnVjdCBxcnRyX2VuZHBvaW50ICplcCk7XG5uZXQvcXJ0ci9xcnRyLmgtMjktXG5uZXQvcXJ0ci9xcnRyLmg6MzA6aW50IHFydHJfZW5kcG9pbnRfcG9zdChzdHJ1Y3QgcXJ0cl9lbmRwb2ludCAqZXAsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pO1xubmV0L3FydHIvcXJ0ci5oLTMxLVxuLS1cbm5ldC9xcnRyL3NtZC5jPTIwPXN0YXRpYyBpbnQgcWNvbV9zbWRfcXJ0cl9jYWxsYmFjayhzdHJ1Y3QgcnBtc2dfZGV2aWNlICpycGRldixcbi0tXG5uZXQvcXJ0ci9zbWQuYy0yOC1cbm5ldC9xcnRyL3NtZC5jOjI5Olx0cmMgPSBxcnRyX2VuZHBvaW50X3Bvc3QoXHUwMDI2cWRldi1cdTAwM2VlcCwgZGF0YSwgbGVuKTtcbm5ldC9xcnRyL3NtZC5jLTMwLVx0aWYgKHJjID09IC1FSU5WQUwpIHtcbi0tXG5uZXQvcXJ0ci90dW4uYz04NT1zdGF0aWMgc3NpemVfdCBxcnRyX3R1bl93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuLS1cbm5ldC9xcnRyL3R1bi5jLTEwNy1cbm5ldC9xcnRyL3R1bi5jOjEwODpcdHJldCA9IHFydHJfZW5kcG9pbnRfcG9zdChcdTAwMjZ0dW4tXHUwMDNlZXAsIGtidWYsIGxlbik7XG5uZXQvcXJ0ci90dW4uYy0xMDktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODE1CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUVJUUiBTZWN1cml0eSBQYXRjaCoqCgpPa2F5LCBzbyBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGFsbCBhYm91dCBzdHJlbmd0aGVuaW5nIHRoZSBRUlRSIG1lc3NhZ2luZyBwcm90b2NvbCYjMzk7cyBzZWN1cml0eSwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgSEVMTE8gaGFuZHNoYWtlIGFuZCBwYWNrZXQgaGFuZGxpbmcuIEkgc2VlIHRoYXQgYHFydHJfZW5kcG9pbnRfcG9zdGAgaXMgdGhlIGtleSBmdW5jdGlvbiBmb3IgaGFuZGxpbmcgaW5jb21pbmcgcGFja2V0cywgd2hpbGUgYHFydHJfbm9kZV9lbnF1ZXVlYCBpcyBjcnVjaWFsIGZvciBzZW5kaW5nIHBhY2tldHMsIHdoZXRoZXIgbG9jYWwgb3IgYnJvYWRjYXN0LiBUaGUgcGF0Y2ggY2hhbmdlcyBob3cgYHFydHJfbm9kZV9lbnF1ZXVlYCB3b3JrcywgZWZmZWN0aXZlbHkgZmlsdGVyaW5nIG91dCBwYWNrZXRzIHRoYXQgYXJyaXZlICpiZWZvcmUqIHRoZSBIRUxMTyBoYW5kc2hha2UgaXMgZXN0YWJsaXNoZWQuIFRoaXMgaXMgYSBzbWFydCBtb3ZlIOKAkyBpdCBwcmV2ZW50cyBhIHBvdGVudGlhbCBkZW5pYWwtb2Ytc2VydmljZSBvciBldmVuIHNvbWV0aGluZyBtb3JlIG1hbGljaW91cyBpZiBhdHRhY2tlcnMgd2VyZSBhYmxlIHRvIGluamVjdCBwYWNrZXRzIGJlZm9yZSB0aGUgbGluayBpcyBzZWN1cmVseSBpbml0aWFsaXplZC4gSXQmIzM5O3MgZXNzZW50aWFsbHkgaW1wbGVtZW50aW5nIGFuIGltcGxpY2l0IHRydXN0IHBvbGljeSBiZWZvcmUgdmVyaWZ5aW5nIHNlbmRlciBpZGVudGl0eS4KClRoZSBmYWN0IHRoYXQgdGhlIHBhdGNoIGFsc28gaW50cm9kdWNlcyBzY2hlZHVsaW5nIGEgSEVMTE8gaGFuZHNoYWtlIGZyb20gdGhlIGNvcmUgbGF5ZXIgdXBvbiBlbmRwb2ludCByZWdpc3RyYXRpb24gKGBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyYCkgaXMgYW4gaW1wb3J0YW50IGFyY2hpdGVjdHVyYWwgY2hhbmdlLiBJdCBjZW50cmFsaXplcyBjb250cm9sIG92ZXIgdGhlIGhhbmRzaGFrZSBwcm9jZXNzLCB3aGljaCBtYWtlcyB0aGUgaW1wbGVtZW50YXRpb24gY2xlYW5lciBhbmQgcG90ZW50aWFsbHkgbW9yZSByb2J1c3QuIFJlbW92aW5nIHRoZSBgc2F5X2hlbGxvYCBjYWxsIGZyb20gYGN0cmxfY21kX2hlbGxvYCBpbiBgbmV0L3FydHIvbnMuY2AgcmVpbmZvcmNlcyB0aGlzIHNoaWZ0IHRvd2FyZHMgdGhlIGNvcmUgbGF5ZXIgdGFraW5nIHJlc3BvbnNpYmlsaXR5IGZvciB0aGUgaW5pdGlhbCBoYW5kc2hha2UuCgpHaXZlbiB0aGVzZSBjaGFuZ2VzLCB0aGUgbW9zdCBpbnRlcmVzdGluZyBhcmVhcyBmb3IgZnV6emluZyBhbmQgc2VjdXJpdHkgYW5hbHlzaXMgYXJlIGNsZWFyOiBgcXJ0cl9lbmRwb2ludF9yZWdpc3RlcmAgKGNyaXRpY2FsIGZvciBoYW5kc2hha2UgaW5pdGlhdGlvbiksIGBxcnRyX3NlbmRtc2dgICh0aGUgZW50cnkgcG9pbnQgZm9yIG91dGdvaW5nIHBhY2tldHMpLCBhbmQgYHFydHJfdHVuX3dyaXRlX2l0ZXJgIChoYW5kbGVzIGludGVyYWN0aW9uIHdpdGggdGhlIHR1bm5lbCkuIEFuZCBkb24mIzM5O3QgZm9yZ2V0IGBxcnRyX2VuZHBvaW50X3Bvc3RgLCB3aGljaCBkZWFscyB3aXRoIHRoZSAqaW5jb21pbmcqIHBhY2tldHMsIGEgY2xhc3NpYyBhdHRhY2sgdmVjdG9yLgoKV2FpdCBhIHNlY29uZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGFjY291bnRpbmcgZm9yIGV2ZXJ5dGhpbmcuIEkgbmVlZCB0byBub3RlIHRoYXQgYHFydHJfbm9kZV9lbnF1ZXVlYCBpcyBjYWxsZWQgZnJvbSBib3RoIGBxcnRyX3NlbmRtc2dgIGFuZCBgcXJ0cl9iY2FzdF9lbnF1ZXVlYC4gU28gYHFydHJfYmNhc3RfZW5xdWV1ZWAgaXMgYWxzbyBjYWxsZWQgYnkgYHFydHJfc2VuZG1zZ2AsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgdGhlIGNvdmVyYWdlLiBBbmQgdGhlbiwgSSBzaG91bGQga2VlcCBhbiBleWUgb24gYHFydHJfaGVsbG9fd29ya2AsIGJlY2F1c2UgdGhhdCYjMzk7cyBzY2hlZHVsZWQgYnkgYm90aCBgcXJ0cl9lbmRwb2ludF9yZWdpc3RlcmAgYW5kIGBxcnRyX25vZGVfZW5xdWV1ZWAgd2hpY2ggaXMgY2FsbGVkIGJ5IGJvdGggYHFydHJfc2VuZG1zZ2AgYW5kIGBxcnRyX2JjYXN0X2VucXVldWVgLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlc2UgY2hhbmdlcyBpbiBgbmV0L3FydHIvbnMuY2AgYXMgd2VsbCwgc28gSSYjMzk7bGwgY2hlY2sgYGN0cmxfY21kX2hlbGxvYCBhZ2Fpbi4gSSBuZWVkIHRvIHNlZSB3aGF0IGtpbmQgb2YgcmVmYWN0b3Jpbmcgd2FzIGRvbmUgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2N0cmxfY21kX2hlbGxvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9xcnRyL25zLmM9MzMwPXN0YXRpYyBpbnQgc2F5X2hlbGxvKHN0cnVjdCBzb2NrYWRkcl9xcnRyICpkZXN0KVxuLS1cbm5ldC9xcnRyL25zLmMtMzUyLVxubmV0L3FydHIvbnMuYzozNTM6c3RhdGljIGludCBjdHJsX2NtZF9oZWxsbyhzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqc3EpXG5uZXQvcXJ0ci9ucy5jLTM1NC17XG4tLVxubmV0L3FydHIvbnMuYz02MzE9c3RhdGljIHZvaWQgcXJ0cl9uc193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9xcnRyL25zLmMtNjc0LVx0XHRjYXNlIFFSVFJfVFlQRV9IRUxMTzpcbm5ldC9xcnRyL25zLmM6Njc1Olx0XHRcdHJldCA9IGN0cmxfY21kX2hlbGxvKFx1MDAyNnNxKTtcbm5ldC9xcnRyL25zLmMtNjc2LVx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTkwMAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDEyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqTXkgVGhpbmtpbmcgb24gUVJUUiBhbmQgTmV0d29yayBSb3V0aW5nKioKCkFscmlnaHQsIHNvIGBjdHJsX2NtZF9oZWxsb2AgaXMgYmVpbmcgY2FsbGVkIGJ5IGBxcnRyX25zX3dvcmtlcmAuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgYHFydHJfbnNfd29ya2VyYCBpcyB0aGUgY3JpdGljYWwgcGllY2Ugb2YgdGhpcyBwdXp6bGUsIHNpbmNlIGl0JiMzOTtzIHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIGRpcmVjdGx5IGhhbmRsaW5nIHRoYXQgY29tbWFuZC4gQW5kIHNpbmNlIGBxcnRyX25zX3dvcmtlcmAgaXMgYSB3b3JrcXVldWUgZnVuY3Rpb24sIEkmIzM5O20gZGVhbGluZyB3aXRoIGFuIGFzeW5jaHJvbm91cyBleGVjdXRpb24gY29udGV4dCBoZXJlLiBUaGF0IGNoYW5nZXMgaG93IEkmIzM5O2QgYXBwcm9hY2ggZGVidWdnaW5nIG9yIGFuYWx5emluZyB0aGlzIGZsb3cuIEkgbmVlZCB0byBiZSBhd2FyZSBvZiBjb25jdXJyZW5jeSBpc3N1ZXMuCgpTbywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBrZXkgcGxheWVycyBoZXJlOiBgcXJ0cl9lbmRwb2ludF9yZWdpc3RlcmAsIGBxcnRyX3NlbmRtc2dgLCBgcXJ0cl90dW5fd3JpdGVfaXRlcmAsIGBxcnRyX2VuZHBvaW50X3Bvc3RgLCBhbmQgb2YgY291cnNlLCB0aGUgZXZlci1wcmVzZW50IGBxcnRyX25zX3dvcmtlcmAuIEkga25vdyB0aG9zZSBmdW5jdGlvbnMgaGFuZGxlIHZhcmlvdXMgYXNwZWN0cyBvZiBRUlRSLCB3aXRoIGBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyYCBiZWluZyBlc3NlbnRpYWwgZm9yIHNldCB1cCwgYHFydHJfc2VuZG1zZ2AgYW5kIGBxcnRyX3R1bl93cml0ZV9pdGVyYCBtYW5hZ2luZyBkYXRhIHRyYW5zZmVyLCBgcXJ0cl9lbmRwb2ludF9wb3N0YCBkZWFsaW5nIHdpdGggbWVzc2FnZSBoYW5kbGluZywgYW5kIGBxcnRyX25zX3dvcmtlcmAgb3JjaGVzdHJhdGluZyB0aGUgd2hvbGUgcHJvY2Vzcy4KCk5vdywgYXMgZmFyIGFzIGNvbmZpZyBnb2VzLCBJJiMzOTttIGV4cGVjdGluZyBgUVJUUmAgdG8gYmUgdGhlIGNvcmUgZW5hYmxlLiBTaW5jZSBJIHNlZSBgUVJUUl9UVU5gIG1lbnRpb25lZCwgSSBrbm93IHRoYXQmIzM5O3MgcmVsYXRlZCB0byB0aGUgVFVOIGRldmljZSBzdXBwb3J0LiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBRUlRSX1RVTmAgaXMgZW5hYmxlZCB0byBoYXZlIHRoaXMgd2hvbGUgZmxvdyB3b3JraW5nIGFuZCBpZiB0aGVyZSBhcmUgYW55IGRlcGVuZGVuY2llcyBJIHNob3VsZCBhbHNvIGJlIG1pbmRmdWwgb2YuCgpJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGVuYWJsZWQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBRUlRSX1RVTiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcXJ0ci9LY29uZmlnPTE3PWNvbmZpZyBRUlRSX1NNRFxuLS1cbm5ldC9xcnRyL0tjb25maWctMjMtXG5uZXQvcXJ0ci9LY29uZmlnOjI0OmNvbmZpZyBRUlRSX1RVTlxubmV0L3FydHIvS2NvbmZpZy0yNS1cdHRyaXN0YXRlIFwmIzM0O1RVTiBkZXZpY2UgZm9yIFF1YWxjb21tIElQQyBSb3V0ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0ODUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6CgoqKk5hdmlnYXRpbmcgdGhlIFFSVFIgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHNvbWV0aGluZyBhbmQgSSBzZWUgYFFSVFJfVFVOYCBuZXN0ZWQgd2l0aGluIGBpZiBRUlRSYC4gVGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbi4gSXQgdGVsbHMgbWUgdGhhdCB0aGUgb3B0aW9uIHRvIGVuYWJsZSB0aGUgVFVOIGludGVyZmFjZSBzdXBwb3J0IHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIFFSVFIgc3Vic3lzdGVtIGlzIGRlcGVuZGVudCBvbiBRUlRSIGl0c2VsZiBiZWluZyBlbmFibGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IHJlbGF0aW9uc2hpcCBwcmVjaXNlbHkuCgpTbywgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIGdvIHN0cmFpZ2h0IHRvIGBuZXQvcXJ0ci9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIFFSVFIgbW9kdWxlIGFyZSBkZWZpbmVkLiBUaGUgS2NvbmZpZyBmaWxlIHdpbGwgcmV2ZWFsIHRoZSBleGFjdCBkZXBlbmRlbmNpZXMsIGRlZmF1bHRzLCBhbmQgaGVscCB0ZXh0IGFzc29jaWF0ZWQgd2l0aCBgUVJUUl9UVU5gIGFuZCwgY3JpdGljYWxseSwgaG93IGBRUlRSYCBpcyBkZWZpbmVkIGluIHJlbGF0aW9uIHRvIGl0LiBJIGV4cGVjdCB0byBmaW5kIG1vcmUgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGFueSBkZXBlbmRlbmNpZXMsIHN1Y2ggYXMgd2hldGhlciBpdCBuZWVkcyBhIHNwZWNpZmljIHZlcnNpb24gb2YgdGhlIGtlcm5lbC4gSSB3aWxsIHBheSBhdHRlbnRpb24gdG8gdGhlIGV4YWN0IGxhbmd1YWdlIHRoZXJlIHRvIGJlIHN1cmUgSSBhbSBpbnRlcnByZXRpbmcgdGhlIGluZm9ybWF0aW9uIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvcXJ0ci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0IyBRdWFsY29tbSBJUEMgUm91dGVyIGNvbmZpZ3VyYXRpb25cbiAgIDM6XHQjXG4gICA0Olx0XG4gICA1Olx0Y29uZmlnIFFSVFJcbiAgIDY6XHRcdHRyaXN0YXRlIFwmIzM0O1F1YWxjb21tIElQQyBSb3V0ZXIgc3VwcG9ydFwmIzM0O1xuICAgNzpcdFx0aGVscFxuICAgODpcdFx0ICBTYXkgWSBpZiB5b3UgaW50ZW5kIHRvIHVzZSBRdWFsY29tbSBJUEMgcm91dGVyIHByb3RvY29sLiAgVGhlXG4gICA5Olx0XHQgIHByb3RvY29sIGlzIHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCBzZXJ2aWNlcyBwcm92aWRlZCBieSBvdGhlclxuICAxMDpcdFx0ICBoYXJkd2FyZSBibG9ja3MgaW4gdGhlIHN5c3RlbS5cbiAgMTE6XHRcbiAgMTI6XHRcdCAgSW4gb3JkZXIgdG8gZG8gc2VydmljZSBsb29rdXBzLCBhIHVzZXJzcGFjZSBkYWVtb24gaXMgcmVxdWlyZWQgdG9cbiAgMTM6XHRcdCAgbWFpbnRhaW4gYSBzZXJ2aWNlIGxpc3RpbmcuXG4gIDE0Olx0XG4gIDE1Olx0aWYgUVJUUlxuICAxNjpcdFxuICAxNzpcdGNvbmZpZyBRUlRSX1NNRFxuICAxODpcdFx0dHJpc3RhdGUgXCYjMzQ7U01EIElQQyBSb3V0ZXIgY2hhbm5lbHNcJiMzNDtcbiAgMTk6XHRcdGRlcGVuZHMgb24gUlBNU0cgfHwgKENPTVBJTEVfVEVTVCBcdTAwMjZcdTAwMjYgUlBNU0c9bilcbiAgMjA6XHRcdGhlbHBcbiAgMjE6XHRcdCAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IFNNRCBiYXNlZCBpcGNyb3V0ZXIgY2hhbm5lbHMuICBTTUQgaXMgdGhlXG4gIDIyOlx0XHQgIG1vc3QgY29tbW9uIHRyYW5zcG9ydCBmb3IgSVBDIFJvdXRlci5cbiAgMjM6XHRcbiAgMjQ6XHRjb25maWcgUVJUUl9UVU5cbiAgMjU6XHRcdHRyaXN0YXRlIFwmIzM0O1RVTiBkZXZpY2UgZm9yIFF1YWxjb21tIElQQyBSb3V0ZXJcJiMzNDtcbiAgMjY6XHRcdGhlbHBcbiAgMjc6XHRcdCAgU2F5IFkgaGVyZSB0byBleHBvc2UgYSBjaGFyYWN0ZXIgZGV2aWNlIHRoYXQgYWxsb3dzIHVzZXIgc3BhY2UgdG9cbiAgMjg6XHRcdCAgaW1wbGVtZW50IGVuZHBvaW50cyBvZiBRUlRSLCBmb3IgcHVycG9zZSBvZiB0dW5uZWxpbmcgZGF0YSB0byBvdGhlclxuICAyOTpcdFx0ICBob3N0cyBvciB0ZXN0aW5nIHB1cnBvc2VzLlxuICAzMDpcdFxuICAzMTpcdGNvbmZpZyBRUlRSX01ISVxuICAzMjpcdFx0dHJpc3RhdGUgXCYjMzQ7TUhJIElQQyBSb3V0ZXIgY2hhbm5lbHNcJiMzNDtcbiAgMzM6XHRcdGRlcGVuZHMgb24gTUhJX0JVU1xuICAzNDpcdFx0aGVscFxuICAzNTpcdFx0ICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgTUhJIGJhc2VkIGlwY3JvdXRlciBjaGFubmVscy4gTUhJIGlzIHRoZVxuICAzNjpcdFx0ICB0cmFuc3BvcnQgdXNlZCBmb3IgY29tbXVuaWNhdGluZyB0byBleHRlcm5hbCBtb2RlbXMuXG4gIDM3Olx0XG4gIDM4Olx0ZW5kaWYgIyBRUlRSXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjQ0CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IEFzc2Vzc21lbnQ6IFFSVFIgQ29yZSBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBRUlRSIHBhdGNoLCBhbmQgdGhlIGtleSBjb25maWd1cmF0aW9ucyBhcmUgYFFSVFJgIGFuZCBgUVJUUl9UVU5gLiBJIG5lZWQgdG8gc29saWRpZnkgdGhlIGNoYW5nZXMsIHN0YXJ0aW5nIHdpdGggdGhlIGFkZGl0aW9uIG9mIGEgYGhlbGxvX3NlbnRgIGZsYWcgd2l0aGluIHRoZSBgcXJ0cl9ub2RlYCBzdHJ1Y3R1cmUuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgbGllcyBpbiBob3cgYHFydHJfbm9kZV9lbnF1ZXVlYCBub3cgYmVoYXZlczogaXQmIzM5O3MgbW9kaWZpZWQgdG8gZHJvcCBwYWNrZXRzIGlmIGBoZWxsb19zZW50YCBpcyBmYWxzZSwgdW5sZXNzIGl0JiMzOTtzIGEgSEVMTE8gcGFja2V0LiBDcnVjaWFsbHksIGEgSEVMTE8gaGFuZHNoYWtlIGlzIHNjaGVkdWxlZCBmcm9tIHRoZSBjb3JlIGR1cmluZyBlbmRwb2ludCByZWdpc3RyYXRpb24gdmlhIGBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyYC4gQWxzbywgdGhlIGBjdHJsX2NtZF9oZWxsb2AgbG9naWMgaW4gYG5ldC9xcnRyL25zLmNgIGlzIHVwZGF0ZWQgdG8gcmVtb3ZlIHRoZSBgc2F5X2hlbGxvYCBjYWxsLCBhIG5vdGFibGUgc2hpZnQuCgpGdW5jdGlvbmFsbHksIHRoaXMgaW1wYWN0cyB0aGUgUVJUUiBjb3JlIGxvZ2ljIGRpcmVjdGx5LiBUaGUgcmVsZXZhbnQgcGF0aHMgZm9yIHRoaXMgYXJlIGBxcnRyX3R1bl93cml0ZV9pdGVyYCB3aGljaCBjYWxscyBgcXJ0cl9lbmRwb2ludF9wb3N0YCBhbmQgYWxzbyBgcXJ0cl9zZW5kbXNnYCB3aGljaCBjYWxscyBgcXJ0cl9ub2RlX2VucXVldWVgLiBUaGUgZW5kcG9pbnQgcmVnaXN0cmF0aW9uIGBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyYCAod2hpY2ggaXMgaXRzZWxmIHRyaWdnZXJlZCB3aGVuIGAvZGV2L3FydHItdHVuYCBpcyBvcGVuZWQpIGlzIGFsc28ga2V5LgoKQmFzZWQgb24gYWxsIHRoaXMsIFdvcnRoRnV6emluZz10cnVlLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgc3Ryb25nIHN5bWJvbHMgZm9yIGZ1enppbmcuIEZyb20gdGhlIHBhdGNoIGFuZCBwcmV2aW91cyB1bmRlcnN0YW5kaW5nLCB0aGUgZm9sbG93aW5nIHNlZW0gbGlrZSBzb2xpZCB0YXJnZXRzOiBgcXJ0cl9lbmRwb2ludF9yZWdpc3RlcmAsIGBxcnRyX3NlbmRtc2dgLCBgcXJ0cl90dW5fd3JpdGVfaXRlcmAsIGBxcnRyX2VuZHBvaW50X3Bvc3RgLCBhbmQgYHFydHJfbnNfd29ya2VyYC4KClJpZ2h0LCBsZXQmIzM5O3MgY2hlY2sgc29tZSBwcm9wZXJ0aWVzIG9mIHRoZSBhYm92ZSBzeW1ib2xzLiBJIHNlZSB0aGF0IGBxcnRyX25zX3dvcmtlcmAgaXMgc3RhdGljIGJ1dCBhIHdvcmtxdWV1ZSBmdW5jdGlvbiwgc28gaXQmIzM5O3MgYSBwcm9taXNpbmcgZW50cnkgcG9pbnQuIGBxcnRyX3R1bl93cml0ZV9pdGVyYCBpcyBhbHNvIHN0YXRpYywgYnV0IGlzIGEgZmlsZSBvcGVyYXRpb24sIG1ha2luZyBpdCBhIGdvb2QgZW50cnkgcG9pbnQuIGBxcnRyX3NlbmRtc2dgIGlzIHN0YXRpYyBhcyB3ZWxsLCBidXQgaXQmIzM5O3MgYSBwcm90b19vcHMgZnVuY3Rpb24sIGFuZCB0aG9zZSBhcmUgb2Z0ZW4gYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBgcXJ0cl9lbmRwb2ludF9wb3N0YCBpcyBleHBvcnRlZCwgZ29vZC4gQW5kIHRoZSBzYW1lIGZvciBgcXJ0cl9lbmRwb2ludF9yZWdpc3RlcmAuIFdhaXQsIGBxcnRyX25zX3dvcmtlcmAgaXMgaW4gYG5ldC9xcnRyL25zLmNgLCB3aGljaCBtYWtlcyBtZSB0aGluayB0aGF0IEkgc2hvdWxkIHJldmlldyBgcXJ0cl9uc193b3JrZXJgIHN5bWJvbCB0byBjb25zaWRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cXJ0cl9uc193b3JrZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3FydHIvbnMuYz02MDc9c3RhdGljIHZvaWQgY3RybF9jbWRfZGVsX2xvb2t1cChzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqZnJvbSxcbi0tXG5uZXQvcXJ0ci9ucy5jLTYzMC1cbm5ldC9xcnRyL25zLmM6NjMxOnN0YXRpYyB2b2lkIHFydHJfbnNfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbm5ldC9xcnRyL25zLmMtNjMyLXtcbi0tXG5uZXQvcXJ0ci9ucy5jPTczMD1pbnQgcXJ0cl9uc19pbml0KHZvaWQpXG4tLVxubmV0L3FydHIvbnMuYy03MzUtXHRJTklUX0xJU1RfSEVBRChcdTAwMjZxcnRyX25zLmxvb2t1cHMpO1xubmV0L3FydHIvbnMuYzo3MzY6XHRJTklUX1dPUksoXHUwMDI2cXJ0cl9ucy53b3JrLCBxcnRyX25zX3dvcmtlcik7XG5uZXQvcXJ0ci9ucy5jLTczNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ0NjMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIFdvcmtxdWV1ZSBDb250ZXh0KioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIHdvcmtxdWV1ZSBmdW5jdGlvbiBoZXJlLiBUaGUgaW5pdGlhbCBpbXByZXNzaW9uIGlzIGNvbmZpcm1lZDsgaXQmIzM5O3MgZGVmaW5pdGVseSBvcGVyYXRpbmcgd2l0aGluIHRoYXQgZnJhbWV3b3JrLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGdldCBhIGJyb2FkZXIgdmlldy4gQXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGlzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBzY29wZSBvZiBpdHMgaW50ZXJhY3Rpb24uIExldCBtZSBxdWlja2x5IGV4YW1pbmUgdGhlIGNvZGUgYmFzZS4uLiBBaCwgeWVzLiBgcXJ0cl9oZWxsb193b3JrYCDigJMgdGhhdCYjMzk7cyB0aGUgb25lLiBBbmQgaXQgc2VlbXMgdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uIHdhcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIE9rYXksIGdvb2QgdG8ga25vdy4gTm93IEkgaGF2ZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGl0cyBwcm92ZW5hbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtxcnRyX2hlbGxvX3dvcmsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3FydHIvYWZfcXJ0ci5jPTU3OD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnFydHJfYWxsb2NfY3RybF9wYWNrZXQoc3RydWN0IHFydHJfY3RybF9wa3QgKipwa3QsXG4tLVxubmV0L3FydHIvYWZfcXJ0ci5jLTU5My1cbm5ldC9xcnRyL2FmX3FydHIuYzo1OTQ6c3RhdGljIHZvaWQgcXJ0cl9oZWxsb193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbm5ldC9xcnRyL2FmX3FydHIuYy01OTUte1xuLS1cbm5ldC9xcnRyL2FmX3FydHIuYz02MzE9aW50IHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIoc3RydWN0IHFydHJfZW5kcG9pbnQgKmVwLCB1bnNpZ25lZCBpbnQgbmlkKVxuLS1cbm5ldC9xcnRyL2FmX3FydHIuYy02NDgtXHRub2RlLVx1MDAzZWhlbGxvX3NlbnQgPSBmYWxzZTtcbm5ldC9xcnRyL2FmX3FydHIuYzo2NDk6XHRJTklUX1dPUksoXHUwMDI2bm9kZS1cdTAwM2VzYXlfaGVsbG8sIHFydHJfaGVsbG9fd29yayk7XG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjUwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDkwOAoJCQkJCQkJb3V0cHV0OiAxNzkKCQkJCQkJCXRob3VnaHRzOiAyMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBicmVha2Rvd24gb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipSZWZpbmluZyB0aGUgRnV6emluZyBTdHJhdGVneSBmb3IgUVJUUioqCgpPa2F5LCBgcXJ0cl9oZWxsb193b3JrYCBmZWVscyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGZ1enppbmcuIE5vdywgbGV0JiMzOTtzIG5haWwgZG93biBhIGZldyBtb3JlIHByZWNpc2UgZnVuY3Rpb24gdGFyZ2V0cy4gSSYjMzk7bSB0aGlua2luZyB3ZSBzaG91bGQgZm9jdXMgb3VyIGZ1enppbmcgZWZmb3J0cyBvbjoKCiogICBgcXJ0cl9lbmRwb2ludF9yZWdpc3RlcmA6IFRoaXMgaXMgdGhlIGVudHJ5IHBvaW50IGZvciBlbmRwb2ludCByZWdpc3RyYXRpb24sIGEgY3JpdGljYWwgZnVuY3Rpb24uCiogICBgcXJ0cl9zZW5kbXNnYDogS2V5IGZvciB0aGUgbWVzc2FnZSBzZW5kaW5nIHBhdGguCiogICBgcXJ0cl90dW5fd3JpdGVfaXRlcmA6IFRoZSB0dW5uZWwgd3JpdGUgaXRlcmF0aW9uIGZ1bmN0aW9uLCBpbXBvcnRhbnQgZm9yIHRoZSBgUVJUUl9UVU5gIGRldmljZS4KKiAgIGBxcnRyX2VuZHBvaW50X3Bvc3RgOiBFbmRwb2ludCBwb3N0IGZ1bmN0aW9uLCBhbm90aGVyIGNvcmUgcGFydCBvZiB0aGUgY29kZS4KKiAgIGBxcnRyX25zX3dvcmtlcmA6IFRoZSBuYW1lc3BhY2Ugd29ya2VyLCBhbiBhcmVhIEkgd2FudCB0byBleHBsb3JlLgoqICAgYHFydHJfaGVsbG9fd29ya2A6IEJ1aWxkaW5nIG9uIG15IGluaXRpYWwgaW5zdGluY3QsIHRoaXMgZnVuY3Rpb24gaXMgY2VudHJhbCB0byB0aGUgaGFuZHNoYWtlLgoKRXNzZW50aWFsbHksIGJ5IHRhcmdldGluZyB0aGVzZSwgd2Ugc2hvdWxkIGJlIGFibGUgdG8gdHJpZ2dlciB2YXJpb3VzIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW52b2x2ZWQgaW4gdGhlIG5ldyBIRUxMTyBoYW5kc2hha2UgbG9naWMgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLgoKVG8gYmUgc3VyZSB0aGF0IGV2ZXJ5dGhpbmcgaXMgY292ZXJlZCBhbmQgZW5hYmxlZCBmb3IgZnV6emluZyBJIG5lZWQgdG8gY29uZmlndXJlIHRoZSBmdXp6aW5nIGVudmlyb25tZW50OgoKKiAgIGBRUlRSYDogVGhpcyBuZWVkcyB0byBiZSBhY3RpdmUuCiogICBgUVJUUl9UVU5gOiBBbmQgdGhlIFRVTiBkZXZpY2UsIHRvIHRlc3QgdGhlIHZpcnR1YWxpemVkIHBhdGguCgpVbHRpbWF0ZWx5LCB0aGlzIHBhdGNoIGFsdGVycyBjb3JlIFFSVFIgYmVoYXZpb3IgdG8gcGVyZm9ybSBhIEhFTExPIGhhbmRzaGFrZSBkdXJpbmcgZW5kcG9pbnQgcmVnaXN0cmF0aW9uLCBkcm9wcGluZyBwYWNrZXRzIGlmIHRoaXMgaGFuZHNoYWtlIGlzIGluY29tcGxldGUuIFRoYXQgaGFuZHNoYWtlLCBjb21iaW5lZCB3aXRoIGEgYC9kZXYvcXJ0ci10dW5gIGRldmljZSwgbWFrZXMgaXQgYWNoaWV2YWJsZSB0byBjb250cm9sIHRoZSBjb3JlIGFuZCB0cmlnZ2VyIHZhcmlvdXMgZnVuY3Rpb25zLgoKSSB0aGluayB0aGUgYW5hbHlzaXMgaXMgZG9uZSwgc28gSSB3aWxsIG5vdyBzZXQgdGhlIGZ1enppbmcgcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1FSVFImIzM0OywKICAgICYjMzQ7UVJUUl9UVU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtxcnRyX2VuZHBvaW50X3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O3FydHJfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDtxcnRyX3R1bl93cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O3FydHJfZW5kcG9pbnRfcG9zdCYjMzQ7LAogICAgJiMzNDtxcnRyX25zX3dvcmtlciYjMzQ7LAogICAgJiMzNDtxcnRyX2hlbGxvX3dvcmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFF1YWxjb21tIElQQyBSb3V0ZXIgKFFSVFIpIGNvcmUgbG9naWMgdG8gaW5pdGlhdGUgYSBIRUxMTyBoYW5kc2hha2UgdXBvbiBlbmRwb2ludCByZWdpc3RyYXRpb24gYW5kIGRyb3AgcGFja2V0cyBpZiB0aGUgaGFuZHNoYWtlIGhhc24mIzM5O3QgY29tcGxldGVkLiBUaGlzIGZ1bmN0aW9uYWxpdHkgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSB1c2luZyB0aGUgYC9kZXYvcXJ0ci10dW5gIGRldmljZSwgd2hpY2ggYWxsb3dzIHVzZXJzcGFjZSB0byByZWdpc3RlciBlbmRwb2ludHMgYW5kIGluamVjdCBwYWNrZXRzLiBUaGUgY2hhbmdlcyBhZmZlY3QgY29yZSBwYWNrZXQgZW5xdWV1ZWluZyBhbmQgZW5kcG9pbnQgcmVnaXN0cmF0aW9uIHBhdGhzLCB3aGljaCBhcmUgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UVJUUiYjMzQ7LAogICAgJiMzNDtRUlRSX1RVTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3FydHJfZW5kcG9pbnRfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7cXJ0cl9zZW5kbXNnJiMzNDssCiAgICAmIzM0O3FydHJfdHVuX3dyaXRlX2l0ZXImIzM0OywKICAgICYjMzQ7cXJ0cl9lbmRwb2ludF9wb3N0JiMzNDssCiAgICAmIzM0O3FydHJfbnNfd29ya2VyJiMzNDssCiAgICAmIzM0O3FydHJfaGVsbG9fd29yayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgUXVhbGNvbW0gSVBDIFJvdXRlciAoUVJUUikgY29yZSBsb2dpYyB0byBpbml0aWF0ZSBhIEhFTExPIGhhbmRzaGFrZSB1cG9uIGVuZHBvaW50IHJlZ2lzdHJhdGlvbiBhbmQgZHJvcCBwYWNrZXRzIGlmIHRoZSBoYW5kc2hha2UgaGFzbiYjMzk7dCBjb21wbGV0ZWQuIFRoaXMgZnVuY3Rpb25hbGl0eSBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IHVzaW5nIHRoZSBgL2Rldi9xcnRyLXR1bmAgZGV2aWNlLCB3aGljaCBhbGxvd3MgdXNlcnNwYWNlIHRvIHJlZ2lzdGVyIGVuZHBvaW50cyBhbmQgaW5qZWN0IHBhY2tldHMuIFRoZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIHBhY2tldCBlbnF1ZXVlaW5nIGFuZCBlbmRwb2ludCByZWdpc3RyYXRpb24gcGF0aHMsIHdoaWNoIGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjEyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBRUlRSIHN1YnN5c3RlbSB0byBpbml0aWF0ZSB0aGUgSEVMTE8gaGFuZHNoYWtlIGZyb20gdGhlIGNvcmUgbGF5ZXIgaW5zdGVhZCBvZiB0aGUgbmFtZXNlcnZpY2UuIEl0IGludHJvZHVjZXMgYSBuZXcgd29yayBpdGVtIGBxcnRyX2hlbGxvX3dvcmtgIHdoaWNoIGFsbG9jYXRlcyBhIGNvbnRyb2wgcGFja2V0IGFuZCBlbnF1ZXVlcyBpdC4gVGhlIGNvbnRyb2wgcGFja2V0IGlzIGFsbG9jYXRlZCB1c2luZyBgcXJ0cl9hbGxvY19jdHJsX3BhY2tldGAsIHdoaWNoIHVzZXMgYHNrYl9wdXRfemVyb2AgdG8gZnVsbHkgemVyby1pbml0aWFsaXplIHRoZSBwYWNrZXQgcGF5bG9hZC4gVGhlIHN0YWNrLWFsbG9jYXRlZCBgc3RydWN0IHNvY2thZGRyX3FydHJgIHZhcmlhYmxlcyAoYGZyb21gIGFuZCBgdG9gKSBhcmUgdXNlZCB0byBwYXNzIGFkZHJlc3NlcyB0byBgcXJ0cl9ub2RlX2VucXVldWVgLCB3aGljaCBvbmx5IHJlYWRzIHRoZWlyIGBzcV9ub2RlYCBhbmQgYHNxX3BvcnRgIGZpZWxkcyB0byBwb3B1bGF0ZSB0aGUgcGFja2V0IGhlYWRlci4gVGhlIGBzdHJ1Y3Qgc29ja2FkZHJfcXJ0cmAgaXRzZWxmIGlzIG5vdCBjb3BpZWQgdG8gdGhlIHBhY2tldCBvciB0byB1c2Vyc3BhY2UsIHNvIGFueSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHBhZGRpbmcgYnl0ZXMgb24gdGhlIHN0YWNrIGFyZSBuZXZlciByZWFkIG9yIGxlYWtlZC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIG5vciBkb2VzIGl0IG1vZGlmeSBib3VuZHMgY2hlY2tzIG9yIGxlbmd0aHMgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIHVzZS1hZnRlci1mcmVlLCBvdXQtb2YtYm91bmRzIGFjY2Vzcywgb3IgbG9ja2luZyBpc3N1ZXMpIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgb3Igb3RoZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyNWM1N2JiNTg3YzJmY2I4NWQ4MTNmM2IzNDJmYjIyMzhmYTJlMjYyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgNyAxNjoxMDo1NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9xcnRyL2FmX3FydHIuYyBiL25ldC9xcnRyL2FmX3FydHIuYwppbmRleCBkMDJlZjlhNzRjM2NhLi43YWRjMGEwNTMxMjU0IDEwMDY0NAotLS0gYS9uZXQvcXJ0ci9hZl9xcnRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3FydHIvYWZfcXJ0ci5jCkBAIC05LDYgJiM0Mzs5LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC90ZXJtaW9zLmgmZ3Q7CS8qIEZvciBUSU9DSU5RL09VVFEgKi8KICNpbmNsdWRlICZsdDtsaW51eC9zcGlubG9jay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3dhaXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvd29ya3F1ZXVlLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDtuZXQvc29jay5oJmd0OwogCkBAIC0xMjAsOCAmIzQzOzEyMSwxMCBAQCBzdGF0aWMgREVGSU5FX1hBUlJBWV9BTExPQyhxcnRyX3BvcnRzKTsKICAqIEBuaWQ6IG5vZGUgaWQKICAqIEBxcnRyX3R4X2Zsb3c6IHhhcnJheSBvZiBxcnRyX3R4X2Zsb3csIGtleWVkIGJ5IG5vZGUgJmx0OyZsdDsgMzIgfCBwb3J0CiAgKiBAcXJ0cl90eF9sb2NrOiBsb2NrIGZvciBxcnRyX3R4X2Zsb3cgaW5zZXJ0cwomIzQzOyAqIEBoZWxsb19zZW50OiBoZWxsbyBwYWNrZXQgc2VuZCBzdWNjZXNzZnVsCiAgKiBAcnhfcXVldWU6IHJlY2VpdmUgcXVldWUKICAqIEBpdGVtOiBsaXN0IGl0ZW0gZm9yIGJyb2FkY2FzdCBsaXN0CiYjNDM7ICogQHNheV9oZWxsbzogc2NoZWR1bGVkIHdvcmsgZm9yIHNlbmRpbmcgaGVsbG8gcGFja2V0CiAgKi8KIHN0cnVjdCBxcnRyX25vZGUgewogCXN0cnVjdCBtdXRleCBlcF9sb2NrOwpAQCAtMTMyLDggJiM0MzsxMzUsMTEgQEAgc3RydWN0IHFydHJfbm9kZSB7CiAJc3RydWN0IHhhcnJheSBxcnRyX3R4X2Zsb3c7CiAJc3RydWN0IG11dGV4IHFydHJfdHhfbG9jazsgLyogZm9yIHFydHJfdHhfZmxvdyAqLwogCiYjNDM7CWJvb2wgaGVsbG9fc2VudDsKJiM0MzsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHJ4X3F1ZXVlOwogCXN0cnVjdCBsaXN0X2hlYWQgaXRlbTsKJiM0MzsJc3RydWN0IHdvcmtfc3RydWN0IHNheV9oZWxsbzsKIH07CiAKIC8qKgpAQCAtMTg3LDYgJiM0MzsxOTMsOCBAQCBzdGF0aWMgdm9pZCBfX3FydHJfbm9kZV9yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKQogCWxpc3RfZGVsKCZhbXA7bm9kZS0mZ3Q7aXRlbSk7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7cXJ0cl9ub2RlX2xvY2spOwogCiYjNDM7CWNhbmNlbF93b3JrX3N5bmMoJmFtcDtub2RlLSZndDtzYXlfaGVsbG8pOwomIzQzOwogCXNrYl9xdWV1ZV9wdXJnZSgmYW1wO25vZGUtJmd0O3J4X3F1ZXVlKTsKIAogCS8qIEZyZWUgdHggZmxvdyBjb3VudGVycyAqLwpAQCAtMzQxLDYgJiM0MzszNDksMTQgQEAgc3RhdGljIGludCBxcnRyX25vZGVfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXNpemVfdCBsZW4gPSBza2ItJmd0O2xlbjsKIAlpbnQgcmMsIGNvbmZpcm1fcng7CiAKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO25vZGUtJmd0O2VwX2xvY2spOwomIzQzOwlpZiAoIW5vZGUtJmd0O2hlbGxvX3NlbnQgJmFtcDsmYW1wOyB0eXBlICE9IFFSVFJfVFlQRV9IRUxMTykgewomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7bm9kZS0mZ3Q7ZXBfbG9jayk7CiYjNDM7CQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO25vZGUtJmd0O2VwX2xvY2spOwomIzQzOwogCWNvbmZpcm1fcnggPSBxcnRyX3R4X3dhaXQobm9kZSwgdG8tJmd0O3NxX25vZGUsIHRvLSZndDtzcV9wb3J0LCB0eXBlKTsKIAlpZiAoY29uZmlybV9yeCAmbHQ7IDApIHsKIAkJa2ZyZWVfc2tiKHNrYik7CkBAIC0zNzIsNiAmIzQzOzM4OCw4IEBAIHN0YXRpYyBpbnQgcXJ0cl9ub2RlX2VucXVldWUoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCXJjID0gbm9kZS0mZ3Q7ZXAtJmd0O3htaXQobm9kZS0mZ3Q7ZXAsIHNrYik7CiAJCWVsc2UKIAkJCWtmcmVlX3NrYihza2IpOwomIzQzOwkJaWYgKCFyYyAmYW1wOyZhbXA7IHR5cGUgPT0gUVJUUl9UWVBFX0hFTExPKQomIzQzOwkJCW5vZGUtJmd0O2hlbGxvX3NlbnQgPSB0cnVlOwogCQltdXRleF91bmxvY2soJmFtcDtub2RlLSZndDtlcF9sb2NrKTsKIAl9CiAJLyogTmVlZCB0byBlbnN1cmUgdGhhdCBhIHN1YnNlcXVlbnQgbWVzc2FnZSBjYXJyaWVzIHRoZSBvdGhlcndpc2UgbG9zdApAQCAtMzc5LDYgJiM0MzszOTcsOSBAQCBzdGF0aWMgaW50IHFydHJfbm9kZV9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsCiAJaWYgKHJjICZhbXA7JmFtcDsgY29uZmlybV9yeCkKIAkJcXJ0cl90eF9mbG93X2ZhaWxlZChub2RlLCB0by0mZ3Q7c3Ffbm9kZSwgdG8tJmd0O3NxX3BvcnQpOwogCiYjNDM7CWlmIChyYyAmYW1wOyZhbXA7IHR5cGUgPT0gUVJUUl9UWVBFX0hFTExPKQomIzQzOwkJc2NoZWR1bGVfd29yaygmYW1wO25vZGUtJmd0O3NheV9oZWxsbyk7CiYjNDM7CiAJcmV0dXJuIHJjOwogfQogCkBAIC01NzAsNiAmIzQzOzU5MSwzNSBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnFydHJfYWxsb2NfY3RybF9wYWNrZXQoc3RydWN0IHFydHJfY3RybF9wa3QgKipwa3QsCiAJcmV0dXJuIHNrYjsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHFydHJfaGVsbG9fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciBmcm9tID0ge0FGX1FJUENSVFIsIDAsIFFSVFJfUE9SVF9DVFJMfTsKJiM0MzsJc3RydWN0IHNvY2thZGRyX3FydHIgdG8gPSB7QUZfUUlQQ1JUUiwgMCwgUVJUUl9QT1JUX0NUUkx9OwomIzQzOwlzdHJ1Y3QgcXJ0cl9jdHJsX3BrdCAqcGt0OwomIzQzOwlzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlOwomIzQzOwlzdHJ1Y3QgcXJ0cl9zb2NrICpjdHJsOwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwomIzQzOwomIzQzOwlub2RlID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBxcnRyX25vZGUsIHNheV9oZWxsbyk7CiYjNDM7CiYjNDM7CS8qIE5TIG11c3QgYmUgYm91bmQgYmVmb3JlIHdlIGNhbiBzZW5kICovCiYjNDM7CWN0cmwgPSBxcnRyX3BvcnRfbG9va3VwKFFSVFJfUE9SVF9DVFJMKTsKJiM0MzsJaWYgKCFjdHJsKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlza2IgPSBxcnRyX2FsbG9jX2N0cmxfcGFja2V0KCZhbXA7cGt0LCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFza2IpIHsKJiM0MzsJCXFydHJfcG9ydF9wdXQoY3RybCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJcGt0LSZndDtjbWQgPSBjcHVfdG9fbGUzMihRUlRSX1RZUEVfSEVMTE8pOwomIzQzOwlmcm9tLnNxX25vZGUgPSBxcnRyX2xvY2FsX25pZDsKJiM0MzsJdG8uc3Ffbm9kZSA9IG5vZGUtJmd0O25pZDsKJiM0MzsJcXJ0cl9ub2RlX2VucXVldWUobm9kZSwgc2tiLCBRUlRSX1RZUEVfSEVMTE8sICZhbXA7ZnJvbSwgJmFtcDt0byk7CiYjNDM7CXFydHJfcG9ydF9wdXQoY3RybCk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyKCkgLSByZWdpc3RlciBhIG5ldyBlbmRwb2ludAogICogQGVwOiBlbmRwb2ludCB0byByZWdpc3RlcgpAQCAtNTk1LDYgJiM0Mzs2NDUsOSBAQCBpbnQgcXJ0cl9lbmRwb2ludF9yZWdpc3RlcihzdHJ1Y3QgcXJ0cl9lbmRwb2ludCAqZXAsIHVuc2lnbmVkIGludCBuaWQpCiAJbm9kZS0mZ3Q7bmlkID0gUVJUUl9FUF9OSURfQVVUTzsKIAlub2RlLSZndDtlcCA9IGVwOwogCiYjNDM7CW5vZGUtJmd0O2hlbGxvX3NlbnQgPSBmYWxzZTsKJiM0MzsJSU5JVF9XT1JLKCZhbXA7bm9kZS0mZ3Q7c2F5X2hlbGxvLCBxcnRyX2hlbGxvX3dvcmspOwomIzQzOwogCXhhX2luaXQoJmFtcDtub2RlLSZndDtxcnRyX3R4X2Zsb3cpOwogCW11dGV4X2luaXQoJmFtcDtub2RlLSZndDtxcnRyX3R4X2xvY2spOwogCkBAIC02MDUsNiAmIzQzOzY1OCw5IEBAIGludCBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyKHN0cnVjdCBxcnRyX2VuZHBvaW50ICplcCwgdW5zaWduZWQgaW50IG5pZCkKIAltdXRleF91bmxvY2soJmFtcDtxcnRyX25vZGVfbG9jayk7CiAJZXAtJmd0O25vZGUgPSBub2RlOwogCiYjNDM7CS8qIEluaXRpYXRlIEhFTExPIGhhbmRzaGFrZSBmcm9tIHRoZSBjb3JlIGxheWVyICovCiYjNDM7CXNjaGVkdWxlX3dvcmsoJmFtcDtub2RlLSZndDtzYXlfaGVsbG8pOwomIzQzOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocXJ0cl9lbmRwb2ludF9yZWdpc3Rlcik7CkBAIC04NzksNiAmIzQzOzkzNSwxMSBAQCBzdGF0aWMgaW50IHFydHJfYmNhc3RfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCiAJbXV0ZXhfbG9jaygmYW1wO3FydHJfbm9kZV9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsICZhbXA7cXJ0cl9hbGxfbm9kZXMsIGl0ZW0pIHsKJiM0MzsJCS8qIFNraXAgbm9kZXMgd2hvc2Ugbm9kZSBJRCBpcyBub3QgeWV0IGtub3duOyB0aGV5IGNhbm5vdAomIzQzOwkJICogcmVjZWl2ZSBicm9hZGNhc3QgcGFja2V0cyBiZWZvcmUgdGhlIEhFTExPIGhhbmRzaGFrZS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKG5vZGUtJmd0O25pZCA9PSBRUlRSX0VQX05JRF9BVVRPKQomIzQzOwkJCWNvbnRpbnVlOwogCQlza2JuID0gcHNrYl9jb3B5KHNrYiwgR0ZQX0tFUk5FTCk7CiAJCWlmICghc2tibikKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvbmV0L3FydHIvbnMuYyBiL25ldC9xcnRyL25zLmMKaW5kZXggYjNmOWJiY2Y5YWI5Yi4uMTQyNjI2MjNkMmRkNSAxMDA2NDQKLS0tIGEvbmV0L3FydHIvbnMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcXJ0ci9ucy5jCkBAIC0yMTIsNiAmIzQzOzIxMiw3IEBAIHN0YXRpYyB2b2lkIGxvb2t1cF9ub3RpZnkoc3RydWN0IHNvY2thZGRyX3FydHIgKnRvLCBzdHJ1Y3QgcXJ0cl9zZXJ2ZXIgKnNydiwKIAkJcHJfZXJyKCYjMzQ7ZmFpbGVkIHRvIHNlbmQgbG9va3VwIG5vdGlmaWNhdGlvblxuJiMzNDspOwogfQogCiYjNDM7LyogQW5ub3VuY2UgdGhlIGxpc3Qgb2Ygc2VydmVycyByZWdpc3RlcmVkIG9uIHRoZSBsb2NhbCBub2RlICovCiBzdGF0aWMgaW50IGFubm91bmNlX3NlcnZlcnMoc3RydWN0IHNvY2thZGRyX3FydHIgKnNxKQogewogCXN0cnVjdCBxcnRyX3NlcnZlciAqc3J2OwpAQCAtMzQ5LDE1ICYjNDM7MzUwLDggQEAgc3RhdGljIGludCBzYXlfaGVsbG8oc3RydWN0IHNvY2thZGRyX3FydHIgKmRlc3QpCiAJcmV0dXJuIHJldDsKIH0KIAotLyogQW5ub3VuY2UgdGhlIGxpc3Qgb2Ygc2VydmVycyByZWdpc3RlcmVkIG9uIHRoZSBsb2NhbCBub2RlICovCiBzdGF0aWMgaW50IGN0cmxfY21kX2hlbGxvKHN0cnVjdCBzb2NrYWRkcl9xcnRyICpzcSkKIHsKLQlpbnQgcmV0OwotCi0JcmV0ID0gc2F5X2hlbGxvKHNxKTsKLQlpZiAocmV0ICZsdDsgMCkKLQkJcmV0dXJuIHJldDsKLQogCXJldHVybiBhbm5vdW5jZV9zZXJ2ZXJzKHNxKTsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkwNwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDQ4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFFSVFIgSEVMTE8gSGFuZHNoYWtlIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgUXVhbGNvbW0gSVBDIFJvdXRlciAoUVJUUikgc3Vic3lzdGVtLiBNeSBpbml0aWFsIHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBpdCYjMzk7cyBpbnRyb2R1Y2luZyBhIGBoZWxsb19zZW50YCBmbGFnIGFuZCBhIGBzYXlfaGVsbG9gIHdvcmsgc3RydWN0IHdpdGhpbiB0aGUgYHFydHJfbm9kZWAgc3RydWN0dXJlLiBUaGUgY29yZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgbW92aW5nIHRoZSBIRUxMTyBoYW5kc2hha2UgaW5pdGlhdGlvbiBmcm9tIHRoZSBuYW1lc2VydmljZSAoYG5ldC9xcnRyL25zLmNgKSBpbnRvIHRoZSBjb3JlIGxheWVyIChgbmV0L3FydHIvYWZfcXJ0ci5jYCkuIFRoaXMgbWFrZXMgc2Vuc2UgY29uY2VwdHVhbGx5OyBjZW50cmFsaXppbmcgY29yZSBmdW5jdGlvbmFsaXRpZXMgb2Z0ZW4gbGVhZHMgdG8gYmV0dGVyIG1hbmFnZW1lbnQuCgpOb3csIGl0IGNyZWF0ZXMgYSB3b3JrIGl0ZW0sIGBxcnRyX2hlbGxvX3dvcmtgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGlzIHdvcmsgaXRlbSBmdW5jdGlvbnMuIExldCYjMzk7cyBzZWUuLi4gaXQgYXBwZWFycyB0aGUgd29yayBpdGVtIGdldHMgdHJpZ2dlcmVkIHdoZW4gYSBuZXcgbm9kZSBjb21lcyBvbmxpbmUsIEkgcHJlc3VtZS4gSW5zaWRlIGBxcnRyX2hlbGxvX3dvcmtgLCBpdCBzZXRzIHVwIGEgY29udHJvbCBwYWNrZXQgdG8gc2VuZCBhIGBRUlRSX1RZUEVfSEVMTE9gIG1lc3NhZ2UuIEkgc2VlIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyBhcmUgYmVpbmcgaW5pdGlhbGl6ZWQgdXNpbmcgYHN0cnVjdCBzb2NrYWRkcl9xcnRyYC4gVGhlIGRlc3RpbmF0aW9uIG5vZGUgSUQgaXMgdGFrZW4gZnJvbSB0aGUgbm9kZSBvYmplY3QgaXRzZWxmLiBBIGxvb2t1cCBpcyBkb25lIGZvciBgUVJUUl9QT1JUX0NUUkxgLCB3aGljaCBzZWVtcyB0byBiZSB0aGUgY29udHJvbCBwb3J0IGZvciB0aGUgUVJUUiBzeXN0ZW0uIFRoZSBwYWNrZXQgaXMgdGhlbiBhbGxvY2F0ZWQsIHBvcHVsYXRlZCB3aXRoIHRoZSBgUVJUUl9UWVBFX0hFTExPYCBjb21tYW5kLCBhbmQgZW5xdWV1ZWQuCgpJJiMzOTttIG5vdGluZyB0aGF0IGBxcnRyX2FsbG9jX2N0cmxfcGFja2V0YCBpcyB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcgdGhlIGBza2JgIGFuZCBzZXR0aW5nIHRoZSBgcGt0YCBwb2ludGVyLiBJdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gd29ya3MsIGVzcGVjaWFsbHkgaXRzIG1lbW9yeSBhbGxvY2F0aW9uIHN0cmF0ZWd5IGFuZCBhbnkgcG90ZW50aWFsIHJlc291cmNlIGNvbnN0cmFpbnRzIGl0IG1pZ2h0IGludHJvZHVjZSwgb3IgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBsb3dlciBuZXR3b3JraW5nIGxheWVycy4gVGhlIGBxcnRyX25vZGVfZW5xdWV1ZWAgZnVuY3Rpb24gd2FycmFudHMgY2xvc2Ugc2NydXRpbnkgdG9vLiBJdCBzdWdnZXN0cyBhc3luY2hyb25vdXMgY29tbXVuaWNhdGlvbiBpcyBiZWluZyB1c2VkLCBzbyBJIG5lZWQgdG8gY2hlY2sgaG93IGl0IGhhbmRsZXMgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGVycm9yIGNvbmRpdGlvbnMsIGFuZCB0aGUgZmxvdyBvZiB0aGUgY29udHJvbCBwYWNrZXRzIHdpdGhpbiB0aGUgUVJUUiBzdWJzeXN0ZW0uIFRoaXMgZGVzaWduIGlzIGludGVyZXN0aW5nLiBUaGlzIG1vdmUgY291bGQgcG90ZW50aWFsbHkgc3RyZWFtbGluZSBob3cgSEVMTE8gbWVzc2FnZXMgYXJlIGhhbmRsZWQsIGJ1dCBJIG5lZWQgdG8gZGl2ZSBkZWVwZXIgaW50byB0aGUgbG93LWxldmVsIGRldGFpbHMgb2YgdGhvc2UgY2FsbHMgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cXJ0cl9hbGxvY19jdHJsX3BhY2tldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9xcnRyL2FmX3FydHIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcXJ0ci9hZl9xcnRyLmM9NTY2PUVYUE9SVF9TWU1CT0xfR1BMKHFydHJfZW5kcG9pbnRfcG9zdCk7XG4tLVxubmV0L3FydHIvYWZfcXJ0ci5jLTU2OC0vKipcbm5ldC9xcnRyL2FmX3FydHIuYzo1Njk6ICogcXJ0cl9hbGxvY19jdHJsX3BhY2tldCgpIC0gYWxsb2NhdGUgY29udHJvbCBwYWNrZXQgc2tiXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNTcwLSAqIEBwa3Q6IHJlZmVyZW5jZSB0byBxcnRyX2N0cmxfcGt0IHBvaW50ZXJcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNTc3LSAqL1xubmV0L3FydHIvYWZfcXJ0ci5jOjU3ODpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnFydHJfYWxsb2NfY3RybF9wYWNrZXQoc3RydWN0IHFydHJfY3RybF9wa3QgKipwa3QsXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNTc5LVx0XHRcdFx0XHQgICAgICBnZnBfdCBmbGFncylcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmM9NTk0PXN0YXRpYyB2b2lkIHFydHJfaGVsbG9fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L3FydHIvYWZfcXJ0ci5jLTYwOS1cbm5ldC9xcnRyL2FmX3FydHIuYzo2MTA6XHRza2IgPSBxcnRyX2FsbG9jX2N0cmxfcGFja2V0KFx1MDAyNnBrdCwgR0ZQX0tFUk5FTCk7XG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjExLVx0aWYgKCFza2IpIHtcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmM9NjcyPXZvaWQgcXJ0cl9lbmRwb2ludF91bnJlZ2lzdGVyKHN0cnVjdCBxcnRyX2VuZHBvaW50ICplcClcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjk0LVx0XHRzcmMuc3Ffbm9kZSA9IGl0ZXIuaW5kZXg7XG5uZXQvcXJ0ci9hZl9xcnRyLmM6Njk1Olx0XHRza2IgPSBxcnRyX2FsbG9jX2N0cmxfcGFja2V0KFx1MDAyNnBrdCwgR0ZQX0FUT01JQyk7XG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjk2LVx0XHRpZiAoc2tiKSB7XG4tLVxubmV0L3FydHIvYWZfcXJ0ci5jPTc0MT1zdGF0aWMgdm9pZCBxcnRyX3BvcnRfcmVtb3ZlKHN0cnVjdCBxcnRyX3NvY2sgKmlwYylcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNzUxLVxubmV0L3FydHIvYWZfcXJ0ci5jOjc1MjpcdHNrYiA9IHFydHJfYWxsb2NfY3RybF9wYWNrZXQoXHUwMDI2cGt0LCBHRlBfS0VSTkVMKTtcbm5ldC9xcnRyL2FmX3FydHIuYy03NTMtXHRpZiAoc2tiKSB7XG4tLVxubmV0L3FydHIvYWZfcXJ0ci5jPTEwNTk9c3RhdGljIGludCBxcnRyX3NlbmRfcmVzdW1lX3R4KHN0cnVjdCBxcnRyX2NiICpjYilcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmMtMTA3MS1cbm5ldC9xcnRyL2FmX3FydHIuYzoxMDcyOlx0c2tiID0gcXJ0cl9hbGxvY19jdHJsX3BhY2tldChcdTAwMjZwa3QsIEdGUF9LRVJORUwpO1xubmV0L3FydHIvYWZfcXJ0ci5jLTEwNzMtXHRpZiAoIXNrYikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTU5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgcXJ0cl9hbGxvY19jdHJsX3BhY2tldGAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb3JlIHB1cnBvc2UgYW5kIGhvdyBpdCBmaXRzIHdpdGhpbiB0aGUgbGFyZ2VyIFFSVFIgZnJhbWV3b3JrLiBGcm9tIG15IGV4cGVyaWVuY2Ugd2l0aCBtZXNzYWdlIHBhc3Npbmcgc3lzdGVtcywgdGhpcyBsaWtlbHkgaGFuZGxlcyBhbGxvY2F0aW9uIG9mIGNvbnRyb2wgcGFja2V0cywgd2hpY2ggYXJlIHByb2JhYmx5IHVzZWQgZm9yIHNwZWNpZmljIG1hbmFnZW1lbnQgb3Igc2V0dXAgdGFza3Mgd2l0aGluIHRoZSBRUlRSIHByb3RvY29sLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGlzIGEgY3JpdGljYWwgZnVuY3Rpb247IGl0JiMzOTtzIHRoZSBnYXRld2F5IGZvciBzZW5kaW5nIGFuZCByZWNlaXZpbmcgY29udHJvbCBtZXNzYWdlcywgYW5kIGluZWZmaWNpZW50IGFsbG9jYXRpb24gY291bGQgZWFzaWx5IGJlY29tZSBhIGJvdHRsZW5lY2suIEkmIzM5O20gYWxzbyBpbnRlcmVzdGVkIGluIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBtZW1vcnkgbWFuYWdlbWVudCDigJMgYXJlIHdlIHRhbGtpbmcgYWJvdXQgc2xhYiBhbGxvY2F0aW9uLCBhIGN1c3RvbSBwb29sLCBvciBqdXN0IHBsYWluIGBrbWFsbG9jYD8gRG9lcyBpdCBoYW5kbGUgcG90ZW50aWFsIGZhaWx1cmUgZ3JhY2VmdWxseSwgYW5kIGlmIHNvLCBob3c/IEkmIzM5O20gYW50aWNpcGF0aW5nIHRoYXQgd2UmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzIG9yIHJhY2UgY29uZGl0aW9ucywgdGhpcyBpcyBjcml0aWNhbCBmcm9tIGEgc2VjdXJpdHkgYXNwZWN0LiBLbm93aW5nIHRoZSBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZXMgYW5kIHRoZSBzaXplIG9mIHRoZXNlIGNvbnRyb2wgcGFja2V0cyBpcyBhbHNvIGtleSDigJMgYXJlIHRoZXkgZml4ZWQtc2l6ZSwgb3IgZG9lcyB0aGlzIGZ1bmN0aW9uIGFsc28gaGFuZGxlIHZhcmlhYmxlLWxlbmd0aCBtZXNzYWdlcz8gQXJlIHRoZXJlIGFueSBhc3NvY2lhdGVkIGxvY2tzIG9yIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLCBhbmQgaWYgc28gd2hhdCBpcyB0aGVpciBwdXJwb3NlPyBMZXQgbWUgc3RhcnQgYnkgbG9va2luZyBmb3IgYW55IGNvbW1lbnRzIHdpdGhpbiB0aGUgY29kZSwgYW5kIGlmIHRoZXJlIGFyZSBub25lLCBJIGFtIGdvaW5nIHRvIGhhdmUgdG8gbWFrZSBpbmZlcmVuY2VzIGJhc2VkIG9uIHRoZSBzb3VyY2UgY29kZSwgYW5kIGl0cyByZWxhdGVkIHVzYWdlLiBJJiMzOTttIHJlYWR5IHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZCB0aGlzIGluIGRldGFpbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvcXJ0ci9hZl9xcnRyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NzgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU3ODpcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcXJ0cl9hbGxvY19jdHJsX3BhY2tldChzdHJ1Y3QgcXJ0cl9jdHJsX3BrdCAqKnBrdCxcbiA1Nzk6XHRcdFx0XHRcdFx0ICAgICAgZ2ZwX3QgZmxhZ3MpXG4gNTgwOlx0e1xuIDU4MTpcdFx0Y29uc3QgaW50IHBrdF9sZW4gPSBzaXplb2Yoc3RydWN0IHFydHJfY3RybF9wa3QpO1xuIDU4MjpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiA1ODM6XHRcbiA1ODQ6XHRcdHNrYiA9IGFsbG9jX3NrYihRUlRSX0hEUl9NQVhfU0laRSAmIzQzOyBwa3RfbGVuLCBmbGFncyk7XG4gNTg1Olx0XHRpZiAoIXNrYilcbiA1ODY6XHRcdFx0cmV0dXJuIE5VTEw7XG4gNTg3Olx0XG4gNTg4Olx0XHRza2JfcmVzZXJ2ZShza2IsIFFSVFJfSERSX01BWF9TSVpFKTtcbiA1ODk6XHRcdCpwa3QgPSBza2JfcHV0X3plcm8oc2tiLCBwa3RfbGVuKTtcbiA1OTA6XHRcbiA1OTE6XHRcdHJldHVybiBza2I7XG4gNTkyOlx0fVxuIDU5MzpcdFxuIDU5NDpcdHN0YXRpYyB2b2lkIHFydHJfaGVsbG9fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gNTk1Olx0e1xuIDU5NjpcdFx0c3RydWN0IHNvY2thZGRyX3FydHIgZnJvbSA9IHtBRl9RSVBDUlRSLCAwLCBRUlRSX1BPUlRfQ1RSTH07XG4gNTk3Olx0XHRzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciB0byA9IHtBRl9RSVBDUlRSLCAwLCBRUlRSX1BPUlRfQ1RSTH07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyNDEKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBRUlRSIENvbnRyb2wgUGFja2V0IEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhpcyBgcXJ0cl9hbGxvY19jdHJsX3BhY2tldGAgZnVuY3Rpb24gd29ya3MuIEl0JiMzOTtzIHVzaW5nIGBza2JfcHV0X3plcm9gLCB3aGljaCBpcyBhIHByZXR0eSBzdGFuZGFyZCBtZXRob2QuIFRoaXMgbWVhbnMgdGhlIGBzdHJ1Y3QgcXJ0cl9jdHJsX3BrdGAgSSYjMzk7bSBhbGxvY2F0aW5nIGlzIGNvbXBsZXRlbHkgemVyb2VkIG91dCBpbml0aWFsbHkg4oCTIGdvb2QsIHByZXZlbnRzIHBvdGVudGlhbCBnYXJiYWdlIGRhdGEgaXNzdWVzLiBJIHNlZSBgcXJ0cl9oZWxsb193b3JrYCB0aGVuIHNldHMgYHBrdC0mZ3Q7Y21kID0gY3B1X3RvX2xlMzIoUVJUUl9UWVBFX0hFTExPKTtgLiBNYWtlcyBzZW5zZSwgdGhlIGNvbW1hbmQgdHlwZSBuZWVkcyB0byBiZSBzZXQuIEFuZCB0aGUgcmVzdCBvZiB0aGUgcGFja2V0IHJlbWFpbnMgemVyb2VkLgoKTm93LCBJJiMzOTttIG5vdGluZyB0aGUgYGZyb21gIGFuZCBgdG9gIGFyZSBpbml0aWFsaXplZCB3aXRoIGB7QUZfUUlQQ1JUUiwgMCwgUVJUUl9QT1JUX0NUUkx9YC4gVGhpcyBsb29rcyBsaWtlIHRoZSBzdGFuZGFyZCBhZGRyZXNzIHN0cnVjdHVyZSBmb3IgUVJUUi4gQnV0IHdhaXQsIGBzdHJ1Y3Qgc29ja2FkZHJfcXJ0cmAuLi4gbGV0IG1lIHJlY2FsbCwgdGhhdCBoYXMgZmllbGRzIGZvciBgc3FfZmFtaWx5YCwgYHNxX25vZGVgLCBhbmQgYHNxX3BvcnRgLgoKVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGhlcmUgaXM6IGFyZSB0aGVyZSBhbnkgcGFkZGluZyBieXRlcyBpbiBgc3RydWN0IHNvY2thZGRyX3FydHJgPyBUaGlzIGlzIHRoZSBraW5kIG9mIGRldGFpbCB0aGF0IGNhbiBiaXRlIHlvdSBsYXRlci4gSWYgdGhlcmUmIzM5O3MgcGFkZGluZywgYW5kIHRoZSBjb2RlIG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IGNvbnRpZ3VvdXMgbWVtb3J5LCB0aGluZ3MgY291bGQgZ28gc2lkZXdheXMuIE5lZWQgdG8gYmUgc3VyZSBhYm91dCB0aGUgc3RydWN0dXJlJiMzOTtzIGV4YWN0IGxheW91dC4gUmlnaHQsIHRpbWUgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBzb2NrYWRkcl9xcnRyYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IHNvY2thZGRyX3FydHIgXFx7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS91YXBpL2xpbnV4L3FydHIuaC0xMC1cbmluY2x1ZGUvdWFwaS9saW51eC9xcnRyLmg6MTE6c3RydWN0IHNvY2thZGRyX3FydHIge1xuaW5jbHVkZS91YXBpL2xpbnV4L3FydHIuaC0xMi1cdF9fa2VybmVsX3NhX2ZhbWlseV90IHNxX2ZhbWlseTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjgyMgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBpbml0aWFsIHRob3VnaHRzOgoKKipQZWVyaW5nIGludG8gdGhlIENvcmUgb2YgUVJUUioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgZGVsdmUgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIHRoZSBRUlRSIGtlcm5lbCBpbnRlcmZhY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHRoaW5nIG9wZXJhdGVzIGF0IGEgZnVuZGFtZW50YWwgbGV2ZWwsIHNvIHRoZSBmaXJzdCBzdGVwIGlzIGFsd2F5cyB0byBleGFtaW5lIHRoZSBoZWFkZXIgZmlsZS4gSSBrbm93IHRoYXQgYGluY2x1ZGUvdWFwaS9saW51eC9xcnRyLmhgIGhvbGRzIHRoZSBrZXkgZGVmaW5pdGlvbnMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGRhdGEgc3RydWN0dXJlcywgY29uc3RhbnRzLCBhbmQgZnVuY3Rpb24gcHJvdG90eXBlcyB0aGF0IGZvcm0gdGhlIGZvdW5kYXRpb24gb2YgdGhlIFVzZXItc3BhY2UtdG8tS2VybmVsLXNwYWNlIGFuZCBLZXJuZWwtc3BhY2UtdG8tS2VybmVsLXNwYWNlIGNvbW11bmljYXRpb24gcHJvdG9jb2wuIEkgd2FudCB0byBzZWUgaG93IG1lc3NhZ2VzIGFyZSBzdHJ1Y3R1cmVkLCBob3cgZW5kcG9pbnRzIGFyZSBkZWZpbmVkLCBhbmQgd2hhdCB0eXBlcyBvZiBvcGVyYXRpb25zIGFyZSBzdXBwb3J0ZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBtZW50YWwgbW9kZWwgb2YgdGhlIEFQSSYjMzk7cyBhcmNoaXRlY3R1cmUgYW5kIHRoZSB1bmRlcmx5aW5nIHByaW5jaXBsZXMgdGhhdCBkcml2ZSBpdHMgb3BlcmF0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgc2VjcmV0cyB0aGlzIGhlYWRlciBmaWxlIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS91YXBpL2xpbnV4L3FydHIuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMTE6XHRzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciB7XG4gIDEyOlx0XHRfX2tlcm5lbF9zYV9mYW1pbHlfdCBzcV9mYW1pbHk7XG4gIDEzOlx0XHRfX3UzMiBzcV9ub2RlO1xuICAxNDpcdFx0X191MzIgc3FfcG9ydDtcbiAgMTU6XHR9O1xuICAxNjpcdFxuICAxNzpcdGVudW0gcXJ0cl9wa3RfdHlwZSB7XG4gIDE4Olx0XHRRUlRSX1RZUEVfREFUQVx0XHQ9IDEsXG4gIDE5Olx0XHRRUlRSX1RZUEVfSEVMTE9cdFx0PSAyLFxuICAyMDpcdFx0UVJUUl9UWVBFX0JZRVx0XHQ9IDMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyMjgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBQYWRkaW5nIElzc3VlcyBpbiBRUlRSIFNvY2tldCBTdHJ1Y3R1cmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYF9fa2VybmVsX3NhX2ZhbWlseV90YCB0eXBlLCBhbmQgaXQmIzM5O3MgYWxtb3N0IGFsd2F5cyBhIDItYnl0ZSBgdW5zaWduZWQgc2hvcnRgLiBUaGVuIHRoZXJlJiMzOTtzIHRoZSBgc3Ffbm9kZWAgZmllbGQsIHdoaWNoIGlzIGEgNC1ieXRlIGBfX3UzMmAuIEhtbSwgdGhhdCBtZWFucyB0aGVyZSYjMzk7cyBwcm9iYWJseSAyIGJ5dGVzIG9mIHBhZGRpbmcgYmV0d2VlbiBgc3FfZmFtaWx5YCBhbmQgYHNxX25vZGVgIGluIHRoZSBgc29ja2FkZHJgIHN0cnVjdHVyZS4gSSBuZWVkIHRvIGJlIHN1cmUuCgpXYWl0LCBub3cgSSBzZWUgdGhlIGBzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciBmcm9tID0ge0FGX1FJUENSVFIsIDAsIFFSVFJfUE9SVF9DVFJMfTtgIGRlY2xhcmF0aW9uLiBUaGlzIGlzIGEgbG9jYWwgdmFyaWFibGUgb24gdGhlIHN0YWNrLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgc3RydWN0dXJlLCB0aGlzIGBzb2NrYWRkcl9xcnRyYCwgaXMgY29waWVkIHRvIHVzZXJzcGFjZSBvciBpZiBpdCYjMzk7cyBzZW50IG92ZXIgdGhlIG5ldHdvcmsuIElmIHNvLCBwYWRkaW5nIGNvdWxkIGNhdXNlIHByb2JsZW1zLCBhbmQgSSBuZWVkIHRvIGNvbnNpZGVyIHBvdGVudGlhbCBlbmRpYW5uZXNzIGlzc3Vlcywgb2YgY291cnNlLiBMZXQmIzM5O3MgZGlnIGRlZXBlciB0byBzZWUgZXhhY3RseSB3aGVyZSBhbmQgaG93IHRoaXMgYHNvY2thZGRyX3FydHJgIHN0cnVjdHVyZSBpcyBoYW5kbGVkLiBTcGVjaWZpY2FsbHksIGxldCYjMzk7cyB0cmFjZSB0aGlzIHRvIHRoZSBgcXJ0cl9ub2RlX2VucXVldWVgIGZ1bmN0aW9uLiBJIHdpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaGFwcGVucyB0byB0aGUgZGF0YS4gSSYjMzk7bSBnb2luZyB0byBsb29rIHRocm91Z2ggdGhlIHN1cnJvdW5kaW5nIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3FydHJfbm9kZV9lbnF1ZXVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3FydHIvYWZfcXJ0ci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9xcnRyL2FmX3FydHIuYz0zMjk9c3RhdGljIHZvaWQgcXJ0cl90eF9mbG93X2ZhaWxlZChzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBpbnQgZGVzdF9ub2RlLFxuLS1cbm5ldC9xcnRyL2FmX3FydHIuYy0zNDMtLyogUGFzcyBhbiBvdXRnb2luZyBwYWNrZXQgc29ja2V0IGJ1ZmZlciB0byB0aGUgZW5kcG9pbnQgZHJpdmVyLiAqL1xubmV0L3FydHIvYWZfcXJ0ci5jOjM0NDpzdGF0aWMgaW50IHFydHJfbm9kZV9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvcXJ0ci9hZl9xcnRyLmMtMzQ1LVx0XHRcdCAgICAgaW50IHR5cGUsIHN0cnVjdCBzb2NrYWRkcl9xcnRyICpmcm9tLFxuLS1cbm5ldC9xcnRyL2FmX3FydHIuYz01OTQ9c3RhdGljIHZvaWQgcXJ0cl9oZWxsb193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjE4LVx0dG8uc3Ffbm9kZSA9IG5vZGUtXHUwMDNlbmlkO1xubmV0L3FydHIvYWZfcXJ0ci5jOjYxOTpcdHFydHJfbm9kZV9lbnF1ZXVlKG5vZGUsIHNrYiwgUVJUUl9UWVBFX0hFTExPLCBcdTAwMjZmcm9tLCBcdTAwMjZ0byk7XG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjIwLVx0cXJ0cl9wb3J0X3B1dChjdHJsKTtcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmM9OTMwPXN0YXRpYyBpbnQgcXJ0cl9iY2FzdF9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3FydHIvYWZfcXJ0ci5jLTk0Ni1cdFx0c2tiX3NldF9vd25lcl93KHNrYm4sIHNrYi1cdTAwM2Vzayk7XG5uZXQvcXJ0ci9hZl9xcnRyLmM6OTQ3Olx0XHRxcnRyX25vZGVfZW5xdWV1ZShub2RlLCBza2JuLCB0eXBlLCBmcm9tLCB0byk7XG5uZXQvcXJ0ci9hZl9xcnRyLmMtOTQ4LVx0fVxuLS1cbm5ldC9xcnRyL2FmX3FydHIuYz05NTY9c3RhdGljIGludCBxcnRyX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxuLS1cbm5ldC9xcnRyL2FmX3FydHIuYy0xMDE2LVx0XHR9XG5uZXQvcXJ0ci9hZl9xcnRyLmM6MTAxNzpcdFx0ZW5xdWV1ZV9mbiA9IHFydHJfbm9kZV9lbnF1ZXVlO1xubmV0L3FydHIvYWZfcXJ0ci5jLTEwMTgtXHR9XG4tLVxubmV0L3FydHIvYWZfcXJ0ci5jPTEwNTk9c3RhdGljIGludCBxcnRyX3NlbmRfcmVzdW1lX3R4KHN0cnVjdCBxcnRyX2NiICpjYilcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmMtMTA4MS1cbm5ldC9xcnRyL2FmX3FydHIuYzoxMDgyOlx0cmV0ID0gcXJ0cl9ub2RlX2VucXVldWUobm9kZSwgc2tiLCBRUlRSX1RZUEVfUkVTVU1FX1RYLCBcdTAwMjZsb2NhbCwgXHUwMDI2cmVtb3RlKTtcbm5ldC9xcnRyL2FmX3FydHIuYy0xMDgzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzMxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgcXJ0cl9ub2RlX2VucXVldWVgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHF1ZXVpbmcgbWVjaGFuaXNtIHdpdGhpbiB0aGUgUU1JIFJlYWwtVGltZSAoUVJUUikgZnJhbWV3b3JrLiBNeSBleHBlcnRpc2UgbGllcyBpbiBlbWJlZGRlZCBzeXN0ZW1zIGFuZCBsb3ctbGV2ZWwgY29tbXVuaWNhdGlvbiBwcm90b2NvbHMsIHNvIHRoaXMgc2hvdWxkIGJlIHdpdGhpbiBteSB3aGVlbGhvdXNlLiBJJiMzOTttIGZvY3VzaW5nIG9uIGhvdyBtZXNzYWdlcyBhcmUgZW5xdWV1ZWQuIEnigJlsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgcmFjZSBjb25kaXRpb25zIHRoaXMgaW1wbGVtZW50YXRpb24gbWlnaHQgaW50cm9kdWNlLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoaXMgaXMgYSByZWFsLXRpbWUgc3lzdGVtLiBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHF1ZXN0aW9ucyBhYm91dCBpbnRlcnJ1cHQgaGFuZGxpbmcg4oCTIGlzIHRoaXMgYXRvbWljPyBBcmUgdGhlcmUgc3BpbmxvY2tzPyBJIHdhbnQgdG8gc2VlIHRoZSBsb2NraW5nIG1lY2hhbmlzbXMsIGlmIGFueSwgdGhhdCBhcmUgdXNlZCB0byBwcm90ZWN0IHRoZSBxdWV1ZSBmcm9tIGNvbmN1cnJlbnQgYWNjZXNzLCBlc3BlY2lhbGx5IGlmIGRlYWxpbmcgd2l0aCBtdWx0aXBsZSBwcm9jZXNzb3JzIG9yIHRocmVhZHMuIEFuZCBjcml0aWNhbGx5LCBpcyB0aGVyZSBhbnkgcHJpb3JpdHkgbWFuYWdlbWVudCBiZWluZyB1c2VkLCBhbmQgaWYgc28gaG93PyBJJiMzOTtsbCBhbHNvIGJlIGNvbnNpZGVyaW5nIHRoZSBpbXBsaWNhdGlvbnMgb2YgZXJyb3IgaGFuZGxpbmcgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBiYWNrLW9mZiBzdHJhdGVnaWVzIGVtcGxveWVkIGlmIHRoZSBxdWV1ZSBpcyBmdWxsIG9yIGV4cGVyaWVuY2luZyBjb250ZW50aW9uLiBUaGUgb3ZlcmFsbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgYXJlIGZyb250IG9mIG1pbmQuIFRoaXMga2luZCBvZiBsb3ctbGV2ZWwgZGV0YWlsIGlzIHdoZXJlIHRoZSByZWFsIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMgY2FuIGJlIGZvdW5kLCBvciB3aGVyZSBjcml0aWNhbCBidWdzIGNhbiBoaWRlLiBMZXTigJlzIHNlZSB3aGF0JiMzOTtzIHVuZGVyIHRoZSBob29kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9xcnRyL2FmX3FydHIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM0NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzQ0Olx0c3RhdGljIGludCBxcnRyX25vZGVfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIDM0NTpcdFx0XHRcdCAgICAgaW50IHR5cGUsIHN0cnVjdCBzb2NrYWRkcl9xcnRyICpmcm9tLFxuIDM0NjpcdFx0XHRcdCAgICAgc3RydWN0IHNvY2thZGRyX3FydHIgKnRvKVxuIDM0NzpcdHtcbiAzNDg6XHRcdHN0cnVjdCBxcnRyX2hkcl92MSAqaGRyO1xuIDM0OTpcdFx0c2l6ZV90IGxlbiA9IHNrYi1cdTAwM2VsZW47XG4gMzUwOlx0XHRpbnQgcmMsIGNvbmZpcm1fcng7XG4gMzUxOlx0XG4gMzUyOlx0XHRtdXRleF9sb2NrKFx1MDAyNm5vZGUtXHUwMDNlZXBfbG9jayk7XG4gMzUzOlx0XHRpZiAoIW5vZGUtXHUwMDNlaGVsbG9fc2VudCBcdTAwMjZcdTAwMjYgdHlwZSAhPSBRUlRSX1RZUEVfSEVMTE8pIHtcbiAzNTQ6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5vZGUtXHUwMDNlZXBfbG9jayk7XG4gMzU1Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDM1NjpcdFx0XHRyZXR1cm4gMDtcbiAzNTc6XHRcdH1cbiAzNTg6XHRcdG11dGV4X3VubG9jayhcdTAwMjZub2RlLVx1MDAzZWVwX2xvY2spO1xuIDM1OTpcdFxuIDM2MDpcdFx0Y29uZmlybV9yeCA9IHFydHJfdHhfd2FpdChub2RlLCB0by1cdTAwM2VzcV9ub2RlLCB0by1cdTAwM2VzcV9wb3J0LCB0eXBlKTtcbiAzNjE6XHRcdGlmIChjb25maXJtX3J4IFx1MDAzYyAwKSB7XG4gMzYyOlx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDM2MzpcdFx0XHRyZXR1cm4gY29uZmlybV9yeDtcbiAzNjQ6XHRcdH1cbiAzNjU6XHRcbiAzNjY6XHRcdGhkciA9IHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpoZHIpKTtcbiAzNjc6XHRcdGhkci1cdTAwM2V2ZXJzaW9uID0gY3B1X3RvX2xlMzIoUVJUUl9QUk9UT19WRVJfMSk7XG4gMzY4Olx0XHRoZHItXHUwMDNldHlwZSA9IGNwdV90b19sZTMyKHR5cGUpO1xuIDM2OTpcdFx0aGRyLVx1MDAzZXNyY19ub2RlX2lkID0gY3B1X3RvX2xlMzIoZnJvbS1cdTAwM2VzcV9ub2RlKTtcbiAzNzA6XHRcdGhkci1cdTAwM2VzcmNfcG9ydF9pZCA9IGNwdV90b19sZTMyKGZyb20tXHUwMDNlc3FfcG9ydCk7XG4gMzcxOlx0XHRpZiAodG8tXHUwMDNlc3FfcG9ydCA9PSBRUlRSX1BPUlRfQ1RSTCkge1xuIDM3MjpcdFx0XHRoZHItXHUwMDNlZHN0X25vZGVfaWQgPSBjcHVfdG9fbGUzMihub2RlLVx1MDAzZW5pZCk7XG4gMzczOlx0XHRcdGhkci1cdTAwM2Vkc3RfcG9ydF9pZCA9IGNwdV90b19sZTMyKFFSVFJfUE9SVF9DVFJMKTtcbiAzNzQ6XHRcdH0gZWxzZSB7XG4gMzc1Olx0XHRcdGhkci1cdTAwM2Vkc3Rfbm9kZV9pZCA9IGNwdV90b19sZTMyKHRvLVx1MDAzZXNxX25vZGUpO1xuIDM3NjpcdFx0XHRoZHItXHUwMDNlZHN0X3BvcnRfaWQgPSBjcHVfdG9fbGUzMih0by1cdTAwM2VzcV9wb3J0KTtcbiAzNzc6XHRcdH1cbiAzNzg6XHRcbiAzNzk6XHRcdGhkci1cdTAwM2VzaXplID0gY3B1X3RvX2xlMzIobGVuKTtcbiAzODA6XHRcdGhkci1cdTAwM2Vjb25maXJtX3J4ID0gY3B1X3RvX2xlMzIoISFjb25maXJtX3J4KTtcbiAzODE6XHRcbiAzODI6XHRcdHJjID0gc2tiX3B1dF9wYWR0byhza2IsIEFMSUdOKGxlbiwgNCkgJiM0Mzsgc2l6ZW9mKCpoZHIpKTtcbiAzODM6XHRcbiAzODQ6XHRcdGlmICghcmMpIHtcbiAzODU6XHRcdFx0bXV0ZXhfbG9jayhcdTAwMjZub2RlLVx1MDAzZWVwX2xvY2spO1xuIDM4NjpcdFx0XHRyYyA9IC1FTk9ERVY7XG4gMzg3Olx0XHRcdGlmIChub2RlLVx1MDAzZWVwKVxuIDM4ODpcdFx0XHRcdHJjID0gbm9kZS1cdTAwM2VlcC1cdTAwM2V4bWl0KG5vZGUtXHUwMDNlZXAsIHNrYik7XG4gMzg5Olx0XHRcdGVsc2VcbiAzOTA6XHRcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAzOTE6XHRcdFx0aWYgKCFyYyBcdTAwMjZcdTAwMjYgdHlwZSA9PSBRUlRSX1RZUEVfSEVMTE8pXG4gMzkyOlx0XHRcdFx0bm9kZS1cdTAwM2VoZWxsb19zZW50ID0gdHJ1ZTtcbiAzOTM6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5vZGUtXHUwMDNlZXBfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1MjAKCQkJCQkJCW91dHB1dDogMjkwCgkJCQkJCQl0aG91Z2h0czogMjU2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgUVJUUiBIZWxsbyBIYW5kc2hha2UgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gTGV0JiMzOTtzIHRyYWNlIG15IHRob3VnaHQgcHJvY2VzcyBzdGVwIGJ5IHN0ZXAsIGFzIEkgZG8gYSBkZWVwIGRpdmUgaGVyZS4KCkZpcnN0LCBgcXJ0cl9ub2RlX2VucXVldWVgLiBJIGNvbmZpcm1lZCB0aGF0IG9ubHkgYGZyb20tJmd0O3NxX25vZGVgIGFuZCBgZnJvbS0mZ3Q7c3FfcG9ydGAgYXJlIHJlYWQgZnJvbSB0aGUgYHN0cnVjdCBzb2NrYWRkcl9xcnRyYCBzdHJ1Y3R1cmUsIGFuZCBpdCBjb3JyZWN0bHkgaWdub3JlcyB0aGUgdW5pbml0aWFsaXplZCBwYWRkaW5nLiBObyBsZWFrIHRoZXJlLiBBbmQgd2l0aCBgc2tiX3B1dF9wYWR0b2AsIHRoYXQgaXMgZG9pbmcgcGFkZGluZyB3aXRoIHplcm9lcywgc28gbm8gcHJvYmxlbSB0aGVyZS4KClRoZW4sIEkgbG9va2VkIGNsb3NlbHkgYXQgYHFydHJfYWxsb2NfY3RybF9wYWNrZXRgLiBUaGUgYHNrYl9wdXRfemVyb2AgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IHRoZSBlbnRpcmUgYHN0cnVjdCBxcnRyX2N0cmxfcGt0YCBpcyB6ZXJvZWQuIFRoaXMgaXMgaW1wb3J0YW50OiBubyB1bmluaXRpYWxpemVkIHZhbHVlcyB3aXRoaW4gdGhlIGNvbnRyb2wgcGFja2V0IGl0c2VsZi4KCkkgY2FyZWZ1bGx5IGV4YW1pbmVkIHRoZSBjb2RlIGFkZGVkIGluIHRoZSBwYXRjaC4gVGhlIG5ldyBjaGVjayBpbiBgcXJ0cl9ub2RlX2VucXVldWVgIHRoYXQgZHJvcHMgcGFja2V0cyBpZiBgaGVsbG9fc2VudGAgaXMgZmFsc2UgYW5kIGl0JiMzOTtzIG5vdCBhIEhFTExPIHBhY2tldCBpcyBnb29kLiBUaGUgZm9sbG93LXVwIGNvZGUgYmxvY2sgaW4gdGhlIHNhbWUgZnVuY3Rpb24gdGhlbiBzZXRzIGBoZWxsb19zZW50YCB0byB0cnVlIHdoZW4gdGhlIEhFTExPIHBhY2tldCB0cmFuc21pdHMgc3VjY2Vzc2Z1bGx5LiBBbmQsIGlmIHRyYW5zbWlzc2lvbiBmYWlscywgaXQgcmVzY2hlZHVsZXMgdGhlIGBzYXlfaGVsbG9gIHdvcmsuCgpUaGUgYHFydHJfaGVsbG9fd29ya2AgZnVuY3Rpb24gaXMgY3J1Y2lhbC4gSXQgYWxsb2NhdGVzIGEgY29udHJvbCBwYWNrZXQsIHNldHMgdGhlIGNvbW1hbmQsIGFuZCBlbnF1ZXVlcyBpdC4gS2V5IHBvaW50cyBhcmUgdGhhdCBgcXJ0cl9hbGxvY19jdHJsX3BhY2tldGAgemVyby1pbml0aWFsaXplcyB0aGUgcGFja2V0IGFuZCwgaW4gdGhpcyBjYXNlLCBgZnJvbWAgYW5kIGB0b2AgYXJlIHN0YWNrIHZhcmlhYmxlcywgYW5kIG9ubHkgYHNxX25vZGVgIGFuZCBgc3FfcG9ydGAgYXJlIHJlYWQgZnJvbSB0aGVtLiBUaGUgcmVzdCBvZiB0aGUgZmllbGRzIGFyZSBpcnJlbGV2YW50LgoKV2hlbiBhbiBlbmRwb2ludCBpcyByZWdpc3RlcmVkLCB0aGlzIGluaXRpYWxpemVzIHRoZSB3b3JrIGFuZCBpbW1lZGlhdGVseSBzY2hlZHVsZXMgdGhlIHdvcmsgZnVuY3Rpb24gdmlhIGBzY2hlZHVsZV93b3JrKClgLiBUaGUgYnJvYWRjYXN0IGVucXVldWUsIHNraXBzIG5vZGVzIHdpdGggYFFSVFJfRVBfTklEX0FVVE9gIHdoaWxlIGJyb2FkY2FzdGluZy4KCkZpbmFsbHksIHRoZSBuYW1lc2VydmljZSBjb2RlIGdldHMgdXBkYXRlZCB0byByZW1vdmUgdGhlIGBzYXlfaGVsbG9gIGNhbGwgc2luY2UgaXQmIzM5O3Mgbm93IGhhbmRsZWQgYnkgdGhlIGNvcmUgbGF5ZXIuCgpTbywgbGV0JiMzOTtzIHJlY2FwIG15IGNvcmUgcG9pbnRzOgoqICAgVGhlIGBza2JgIGlzIHplcm9lZC4KKiAgIFRoZSBzdGFjay1hbGxvY2F0ZWQgYHN0cnVjdCBzb2NrYWRkcl9xcnRyYCBgZnJvbWAgYW5kIGB0b2Agc3RydWN0dXJlcyBoYXZlIHBhcnRpYWxseSBpbml0aWFsaXplZCBmaWVsZHMsIGJ1dCBvbmx5IGluaXRpYWxpemVkIHBhcnRzIGFyZSByZWFkLgoqICAgVGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLgoqICAgVGhlIHBhdGNoIGhhcyBubyBjb2RlIHRoYXQgbW9kaWZpZXMgdGhlIGxlbmd0aHMgb3IgYm91bmRzIGNoZWNrcyBpbiBhIHdheSB0byBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpUaGlzIGxlYXZlcyBtZSByZWFzb25hYmx5IGNvbmZpZGVudCB0aGF0IHRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGluZm9ybWF0aW9uIGxlYWsgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBidWdzLiBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQgbWVtb3J5IHNhZmV0eSB0b29scyBzaG91bGQgYWRlcXVhdGVseSBkZXRlY3QgYW55IGlzc3Vlcy4KClRoZSBgc3RydWN0IHNvY2thZGRyX3FydHJgIGluaXRpYWxpemF0aW9uLiBJIGRvdWJsZS1jaGVja2VkIHRoYXQgYHN0cnVjdCBzb2NrYWRkcl9xcnRyIGZyb20gPSB7QUZfUUlQQ1JUUiwgMCwgUVJUUl9QT1JUX0NUUkx9O2AgZG9lcyB3aGF0IEkgdGhpbmsgaXQgZG9lcy4gVGhlIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQgYnkgdGhlIGluaXRpYWxpemVyIGxpc3QsIGFuZCB0aGUgQzk5IHN0YW5kYXJkIGVuc3VyZXMgcmVtYWluaW5nIG1lbWJlcnMgYXJlIGluaXRpYWxpemVkIGFzIHRob3VnaCB0aGV5IGhhZCBzdGF0aWMgc3RvcmFnZSBkdXJhdGlvbiwgd2hpY2ggbWVhbnMgemVyby4gSG93ZXZlciwgZXZlbiBpZiBwYWRkaW5nIGJ5dGVzIHdlcmVuJiMzOTt0IHplcm8taW5pdGlhbGl6ZWQsIHRoZXkgYXJlIG5ldmVyIHJlYWQgb3IgbGVha2VkLCBzaW5jZSBvbmx5IGBzcV9ub2RlYCBhbmQgYHNxX3BvcnRgIGFyZSB1c2VkIGluIGBxcnRyX25vZGVfZW5xdWV1ZWAuCgpPa2F5LCBJJiMzOTttIGNvbmZpZGVudC4gTm8gcmlzayBoZXJlLiBTZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFFSVFIgc3Vic3lzdGVtIHRvIGluaXRpYXRlIHRoZSBIRUxMTyBoYW5kc2hha2UgZnJvbSB0aGUgY29yZSBsYXllciBpbnN0ZWFkIG9mIHRoZSBuYW1lc2VydmljZS4gSXQgaW50cm9kdWNlcyBhIG5ldyB3b3JrIGl0ZW0gYHFydHJfaGVsbG9fd29ya2Agd2hpY2ggYWxsb2NhdGVzIGEgY29udHJvbCBwYWNrZXQgYW5kIGVucXVldWVzIGl0LiBUaGUgY29udHJvbCBwYWNrZXQgaXMgYWxsb2NhdGVkIHVzaW5nIGBxcnRyX2FsbG9jX2N0cmxfcGFja2V0YCwgd2hpY2ggdXNlcyBgc2tiX3B1dF96ZXJvYCB0byBmdWxseSB6ZXJvLWluaXRpYWxpemUgdGhlIHBhY2tldCBwYXlsb2FkLiBUaGUgc3RhY2stYWxsb2NhdGVkIGBzdHJ1Y3Qgc29ja2FkZHJfcXJ0cmAgdmFyaWFibGVzIChgZnJvbWAgYW5kIGB0b2ApIGFyZSB1c2VkIHRvIHBhc3MgYWRkcmVzc2VzIHRvIGBxcnRyX25vZGVfZW5xdWV1ZWAsIHdoaWNoIG9ubHkgcmVhZHMgdGhlaXIgYHNxX25vZGVgIGFuZCBgc3FfcG9ydGAgZmllbGRzIHRvIHBvcHVsYXRlIHRoZSBwYWNrZXQgaGVhZGVyLiBUaGUgYHN0cnVjdCBzb2NrYWRkcl9xcnRyYCBpdHNlbGYgaXMgbm90IGNvcGllZCB0byB0aGUgcGFja2V0IG9yIHRvIHVzZXJzcGFjZSwgc28gYW55IHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBieXRlcyBvbiB0aGUgc3RhY2sgYXJlIG5ldmVyIHJlYWQgb3IgbGVha2VkLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSwgbm9yIGRvZXMgaXQgbW9kaWZ5IGJvdW5kcyBjaGVja3Mgb3IgbGVuZ3RocyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoZS5nLiwgdXNlLWFmdGVyLWZyZWUsIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvciBsb2NraW5nIGlzc3Vlcykgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQLCBvciBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgUVJUUiBzdWJzeXN0ZW0gdG8gaW5pdGlhdGUgdGhlIEhFTExPIGhhbmRzaGFrZSBmcm9tIHRoZSBjb3JlIGxheWVyIGluc3RlYWQgb2YgdGhlIG5hbWVzZXJ2aWNlLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IHdvcmsgaXRlbSBgcXJ0cl9oZWxsb193b3JrYCB3aGljaCBhbGxvY2F0ZXMgYSBjb250cm9sIHBhY2tldCBhbmQgZW5xdWV1ZXMgaXQuIFRoZSBjb250cm9sIHBhY2tldCBpcyBhbGxvY2F0ZWQgdXNpbmcgYHFydHJfYWxsb2NfY3RybF9wYWNrZXRgLCB3aGljaCB1c2VzIGBza2JfcHV0X3plcm9gIHRvIGZ1bGx5IHplcm8taW5pdGlhbGl6ZSB0aGUgcGFja2V0IHBheWxvYWQuIFRoZSBzdGFjay1hbGxvY2F0ZWQgYHN0cnVjdCBzb2NrYWRkcl9xcnRyYCB2YXJpYWJsZXMgKGBmcm9tYCBhbmQgYHRvYCkgYXJlIHVzZWQgdG8gcGFzcyBhZGRyZXNzZXMgdG8gYHFydHJfbm9kZV9lbnF1ZXVlYCwgd2hpY2ggb25seSByZWFkcyB0aGVpciBgc3Ffbm9kZWAgYW5kIGBzcV9wb3J0YCBmaWVsZHMgdG8gcG9wdWxhdGUgdGhlIHBhY2tldCBoZWFkZXIuIFRoZSBgc3RydWN0IHNvY2thZGRyX3FydHJgIGl0c2VsZiBpcyBub3QgY29waWVkIHRvIHRoZSBwYWNrZXQgb3IgdG8gdXNlcnNwYWNlLCBzbyBhbnkgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBwYWRkaW5nIGJ5dGVzIG9uIHRoZSBzdGFjayBhcmUgbmV2ZXIgcmVhZCBvciBsZWFrZWQuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLCBub3IgZG9lcyBpdCBtb2RpZnkgYm91bmRzIGNoZWNrcyBvciBsZW5ndGhzIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIG9yIGxvY2tpbmcgaXNzdWVzKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIG9yIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MTA6NTguNTgwODA1MDQ2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0MDQ4MjYwOTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlFSVFJcIixcbiAgICBcIlFSVFJfVFVOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicXJ0cl9lbmRwb2ludF9yZWdpc3RlclwiLFxuICAgIFwicXJ0cl9zZW5kbXNnXCIsXG4gICAgXCJxcnRyX3R1bl93cml0ZV9pdGVyXCIsXG4gICAgXCJxcnRyX2VuZHBvaW50X3Bvc3RcIixcbiAgICBcInFydHJfbnNfd29ya2VyXCIsXG4gICAgXCJxcnRyX2hlbGxvX3dvcmtcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBRUlRSIHN1YnN5c3RlbSB0byBpbml0aWF0ZSB0aGUgSEVMTE8gaGFuZHNoYWtlIGZyb20gdGhlIGNvcmUgbGF5ZXIgaW5zdGVhZCBvZiB0aGUgbmFtZXNlcnZpY2UuIEl0IGludHJvZHVjZXMgYSBuZXcgd29yayBpdGVtIGBxcnRyX2hlbGxvX3dvcmtgIHdoaWNoIGFsbG9jYXRlcyBhIGNvbnRyb2wgcGFja2V0IGFuZCBlbnF1ZXVlcyBpdC4gVGhlIGNvbnRyb2wgcGFja2V0IGlzIGFsbG9jYXRlZCB1c2luZyBgcXJ0cl9hbGxvY19jdHJsX3BhY2tldGAsIHdoaWNoIHVzZXMgYHNrYl9wdXRfemVyb2AgdG8gZnVsbHkgemVyby1pbml0aWFsaXplIHRoZSBwYWNrZXQgcGF5bG9hZC4gVGhlIHN0YWNrLWFsbG9jYXRlZCBgc3RydWN0IHNvY2thZGRyX3FydHJgIHZhcmlhYmxlcyAoYGZyb21gIGFuZCBgdG9gKSBhcmUgdXNlZCB0byBwYXNzIGFkZHJlc3NlcyB0byBgcXJ0cl9ub2RlX2VucXVldWVgLCB3aGljaCBvbmx5IHJlYWRzIHRoZWlyIGBzcV9ub2RlYCBhbmQgYHNxX3BvcnRgIGZpZWxkcyB0byBwb3B1bGF0ZSB0aGUgcGFja2V0IGhlYWRlci4gVGhlIGBzdHJ1Y3Qgc29ja2FkZHJfcXJ0cmAgaXRzZWxmIGlzIG5vdCBjb3BpZWQgdG8gdGhlIHBhY2tldCBvciB0byB1c2Vyc3BhY2UsIHNvIGFueSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHBhZGRpbmcgYnl0ZXMgb24gdGhlIHN0YWNrIGFyZSBuZXZlciByZWFkIG9yIGxlYWtlZC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIG5vciBkb2VzIGl0IG1vZGlmeSBib3VuZHMgY2hlY2tzIG9yIGxlbmd0aHMgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIHVzZS1hZnRlci1mcmVlLCBvdXQtb2YtYm91bmRzIGFjY2Vzcywgb3IgbG9ja2luZyBpc3N1ZXMpIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgb3Igb3RoZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBRdWFsY29tbSBJUEMgUm91dGVyIChRUlRSKSBjb3JlIGxvZ2ljIHRvIGluaXRpYXRlIGEgSEVMTE8gaGFuZHNoYWtlIHVwb24gZW5kcG9pbnQgcmVnaXN0cmF0aW9uIGFuZCBkcm9wIHBhY2tldHMgaWYgdGhlIGhhbmRzaGFrZSBoYXNuJ3QgY29tcGxldGVkLiBUaGlzIGZ1bmN0aW9uYWxpdHkgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSB1c2luZyB0aGUgYC9kZXYvcXJ0ci10dW5gIGRldmljZSwgd2hpY2ggYWxsb3dzIHVzZXJzcGFjZSB0byByZWdpc3RlciBlbmRwb2ludHMgYW5kIGluamVjdCBwYWNrZXRzLiBUaGUgY2hhbmdlcyBhZmZlY3QgY29yZSBwYWNrZXQgZW5xdWV1ZWluZyBhbmQgZW5kcG9pbnQgcmVnaXN0cmF0aW9uIHBhdGhzLCB3aGljaCBhcmUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MTA6NTguNTgwODA5OTU2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDUxNTgzMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyNWM1N2JiNTg3YzJmY2I4NWQ4MTNmM2IzNDJmYjIyMzhmYTJlMjYyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDcgMTY6MTA6NTcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3FydHIvYWZfcXJ0ci5jIGIvbmV0L3FydHIvYWZfcXJ0ci5jXFxuaW5kZXggZDAyZWY5YTc0YzNjYS4uN2FkYzBhMDUzMTI1NCAxMDA2NDRcXG4tLS0gYS9uZXQvcXJ0ci9hZl9xcnRyLmNcXG4rKysgYi9uZXQvcXJ0ci9hZl9xcnRyLmNcXG5AQCAtOSw2ICs5LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Rlcm1pb3MuaFxcdTAwM2VcXHQvKiBGb3IgVElPQ0lOUS9PVVRRICovXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zcGlubG9jay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvd2FpdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3NvY2suaFxcdTAwM2VcXG4gXFxuQEAgLTEyMCw4ICsxMjEsMTAgQEAgc3RhdGljIERFRklORV9YQVJSQVlfQUxMT0MocXJ0cl9wb3J0cyk7XFxuICAqIEBuaWQ6IG5vZGUgaWRcXG4gICogQHFydHJfdHhfZmxvdzogeGFycmF5IG9mIHFydHJfdHhfZmxvdywga2V5ZWQgYnkgbm9kZSBcXHUwMDNjXFx1MDAzYyAzMiB8IHBvcnRcXG4gICogQHFydHJfdHhfbG9jazogbG9jayBmb3IgcXJ0cl90eF9mbG93IGluc2VydHNcXG4rICogQGhlbGxvX3NlbnQ6IGhlbGxvIHBhY2tldCBzZW5kIHN1Y2Nlc3NmdWxcXG4gICogQHJ4X3F1ZXVlOiByZWNlaXZlIHF1ZXVlXFxuICAqIEBpdGVtOiBsaXN0IGl0ZW0gZm9yIGJyb2FkY2FzdCBsaXN0XFxuKyAqIEBzYXlfaGVsbG86IHNjaGVkdWxlZCB3b3JrIGZvciBzZW5kaW5nIGhlbGxvIHBhY2tldFxcbiAgKi9cXG4gc3RydWN0IHFydHJfbm9kZSB7XFxuIFxcdHN0cnVjdCBtdXRleCBlcF9sb2NrO1xcbkBAIC0xMzIsOCArMTM1LDExIEBAIHN0cnVjdCBxcnRyX25vZGUge1xcbiBcXHRzdHJ1Y3QgeGFycmF5IHFydHJfdHhfZmxvdztcXG4gXFx0c3RydWN0IG11dGV4IHFydHJfdHhfbG9jazsgLyogZm9yIHFydHJfdHhfZmxvdyAqL1xcbiBcXG4rXFx0Ym9vbCBoZWxsb19zZW50O1xcbitcXG4gXFx0c3RydWN0IHNrX2J1ZmZfaGVhZCByeF9xdWV1ZTtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBpdGVtO1xcbitcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2F5X2hlbGxvO1xcbiB9O1xcbiBcXG4gLyoqXFxuQEAgLTE4Nyw2ICsxOTMsOCBAQCBzdGF0aWMgdm9pZCBfX3FydHJfbm9kZV9yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKVxcbiBcXHRsaXN0X2RlbChcXHUwMDI2bm9kZS1cXHUwMDNlaXRlbSk7XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2cXJ0cl9ub2RlX2xvY2spO1xcbiBcXG4rXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2bm9kZS1cXHUwMDNlc2F5X2hlbGxvKTtcXG4rXFxuIFxcdHNrYl9xdWV1ZV9wdXJnZShcXHUwMDI2bm9kZS1cXHUwMDNlcnhfcXVldWUpO1xcbiBcXG4gXFx0LyogRnJlZSB0eCBmbG93IGNvdW50ZXJzICovXFxuQEAgLTM0MSw2ICszNDksMTQgQEAgc3RhdGljIGludCBxcnRyX25vZGVfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRzaXplX3QgbGVuID0gc2tiLVxcdTAwM2VsZW47XFxuIFxcdGludCByYywgY29uZmlybV9yeDtcXG4gXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNm5vZGUtXFx1MDAzZWVwX2xvY2spO1xcbitcXHRpZiAoIW5vZGUtXFx1MDAzZWhlbGxvX3NlbnQgXFx1MDAyNlxcdTAwMjYgdHlwZSAhPSBRUlRSX1RZUEVfSEVMTE8pIHtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZub2RlLVxcdTAwM2VlcF9sb2NrKTtcXG4rXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2bm9kZS1cXHUwMDNlZXBfbG9jayk7XFxuK1xcbiBcXHRjb25maXJtX3J4ID0gcXJ0cl90eF93YWl0KG5vZGUsIHRvLVxcdTAwM2VzcV9ub2RlLCB0by1cXHUwMDNlc3FfcG9ydCwgdHlwZSk7XFxuIFxcdGlmIChjb25maXJtX3J4IFxcdTAwM2MgMCkge1xcbiBcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG5AQCAtMzcyLDYgKzM4OCw4IEBAIHN0YXRpYyBpbnQgcXJ0cl9ub2RlX2VucXVldWUoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0cmMgPSBub2RlLVxcdTAwM2VlcC1cXHUwMDNleG1pdChub2RlLVxcdTAwM2VlcCwgc2tiKTtcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4rXFx0XFx0aWYgKCFyYyBcXHUwMDI2XFx1MDAyNiB0eXBlID09IFFSVFJfVFlQRV9IRUxMTylcXG4rXFx0XFx0XFx0bm9kZS1cXHUwMDNlaGVsbG9fc2VudCA9IHRydWU7XFxuIFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bm9kZS1cXHUwMDNlZXBfbG9jayk7XFxuIFxcdH1cXG4gXFx0LyogTmVlZCB0byBlbnN1cmUgdGhhdCBhIHN1YnNlcXVlbnQgbWVzc2FnZSBjYXJyaWVzIHRoZSBvdGhlcndpc2UgbG9zdFxcbkBAIC0zNzksNiArMzk3LDkgQEAgc3RhdGljIGludCBxcnRyX25vZGVfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRpZiAocmMgXFx1MDAyNlxcdTAwMjYgY29uZmlybV9yeClcXG4gXFx0XFx0cXJ0cl90eF9mbG93X2ZhaWxlZChub2RlLCB0by1cXHUwMDNlc3Ffbm9kZSwgdG8tXFx1MDAzZXNxX3BvcnQpO1xcbiBcXG4rXFx0aWYgKHJjIFxcdTAwMjZcXHUwMDI2IHR5cGUgPT0gUVJUUl9UWVBFX0hFTExPKVxcbitcXHRcXHRzY2hlZHVsZV93b3JrKFxcdTAwMjZub2RlLVxcdTAwM2VzYXlfaGVsbG8pO1xcbitcXG4gXFx0cmV0dXJuIHJjO1xcbiB9XFxuIFxcbkBAIC01NzAsNiArNTkxLDM1IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcXJ0cl9hbGxvY19jdHJsX3BhY2tldChzdHJ1Y3QgcXJ0cl9jdHJsX3BrdCAqKnBrdCxcXG4gXFx0cmV0dXJuIHNrYjtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgcXJ0cl9oZWxsb193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4re1xcbitcXHRzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciBmcm9tID0ge0FGX1FJUENSVFIsIDAsIFFSVFJfUE9SVF9DVFJMfTtcXG4rXFx0c3RydWN0IHNvY2thZGRyX3FydHIgdG8gPSB7QUZfUUlQQ1JUUiwgMCwgUVJUUl9QT1JUX0NUUkx9O1xcbitcXHRzdHJ1Y3QgcXJ0cl9jdHJsX3BrdCAqcGt0O1xcbitcXHRzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlO1xcbitcXHRzdHJ1Y3QgcXJ0cl9zb2NrICpjdHJsO1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbitcXG4rXFx0bm9kZSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcXJ0cl9ub2RlLCBzYXlfaGVsbG8pO1xcbitcXG4rXFx0LyogTlMgbXVzdCBiZSBib3VuZCBiZWZvcmUgd2UgY2FuIHNlbmQgKi9cXG4rXFx0Y3RybCA9IHFydHJfcG9ydF9sb29rdXAoUVJUUl9QT1JUX0NUUkwpO1xcbitcXHRpZiAoIWN0cmwpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHNrYiA9IHFydHJfYWxsb2NfY3RybF9wYWNrZXQoXFx1MDAyNnBrdCwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghc2tiKSB7XFxuK1xcdFxcdHFydHJfcG9ydF9wdXQoY3RybCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0cGt0LVxcdTAwM2VjbWQgPSBjcHVfdG9fbGUzMihRUlRSX1RZUEVfSEVMTE8pO1xcbitcXHRmcm9tLnNxX25vZGUgPSBxcnRyX2xvY2FsX25pZDtcXG4rXFx0dG8uc3Ffbm9kZSA9IG5vZGUtXFx1MDAzZW5pZDtcXG4rXFx0cXJ0cl9ub2RlX2VucXVldWUobm9kZSwgc2tiLCBRUlRSX1RZUEVfSEVMTE8sIFxcdTAwMjZmcm9tLCBcXHUwMDI2dG8pO1xcbitcXHRxcnRyX3BvcnRfcHV0KGN0cmwpO1xcbit9XFxuK1xcbiAvKipcXG4gICogcXJ0cl9lbmRwb2ludF9yZWdpc3RlcigpIC0gcmVnaXN0ZXIgYSBuZXcgZW5kcG9pbnRcXG4gICogQGVwOiBlbmRwb2ludCB0byByZWdpc3RlclxcbkBAIC01OTUsNiArNjQ1LDkgQEAgaW50IHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIoc3RydWN0IHFydHJfZW5kcG9pbnQgKmVwLCB1bnNpZ25lZCBpbnQgbmlkKVxcbiBcXHRub2RlLVxcdTAwM2VuaWQgPSBRUlRSX0VQX05JRF9BVVRPO1xcbiBcXHRub2RlLVxcdTAwM2VlcCA9IGVwO1xcbiBcXG4rXFx0bm9kZS1cXHUwMDNlaGVsbG9fc2VudCA9IGZhbHNlO1xcbitcXHRJTklUX1dPUksoXFx1MDAyNm5vZGUtXFx1MDAzZXNheV9oZWxsbywgcXJ0cl9oZWxsb193b3JrKTtcXG4rXFxuIFxcdHhhX2luaXQoXFx1MDAyNm5vZGUtXFx1MDAzZXFydHJfdHhfZmxvdyk7XFxuIFxcdG11dGV4X2luaXQoXFx1MDAyNm5vZGUtXFx1MDAzZXFydHJfdHhfbG9jayk7XFxuIFxcbkBAIC02MDUsNiArNjU4LDkgQEAgaW50IHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIoc3RydWN0IHFydHJfZW5kcG9pbnQgKmVwLCB1bnNpZ25lZCBpbnQgbmlkKVxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNnFydHJfbm9kZV9sb2NrKTtcXG4gXFx0ZXAtXFx1MDAzZW5vZGUgPSBub2RlO1xcbiBcXG4rXFx0LyogSW5pdGlhdGUgSEVMTE8gaGFuZHNoYWtlIGZyb20gdGhlIGNvcmUgbGF5ZXIgKi9cXG4rXFx0c2NoZWR1bGVfd29yayhcXHUwMDI2bm9kZS1cXHUwMDNlc2F5X2hlbGxvKTtcXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIpO1xcbkBAIC04NzksNiArOTM1LDExIEBAIHN0YXRpYyBpbnQgcXJ0cl9iY2FzdF9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZxcnRyX25vZGVfbG9jayk7XFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgXFx1MDAyNnFydHJfYWxsX25vZGVzLCBpdGVtKSB7XFxuK1xcdFxcdC8qIFNraXAgbm9kZXMgd2hvc2Ugbm9kZSBJRCBpcyBub3QgeWV0IGtub3duOyB0aGV5IGNhbm5vdFxcbitcXHRcXHQgKiByZWNlaXZlIGJyb2FkY2FzdCBwYWNrZXRzIGJlZm9yZSB0aGUgSEVMTE8gaGFuZHNoYWtlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKG5vZGUtXFx1MDAzZW5pZCA9PSBRUlRSX0VQX05JRF9BVVRPKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0c2tibiA9IHBza2JfY29weShza2IsIEdGUF9LRVJORUwpO1xcbiBcXHRcXHRpZiAoIXNrYm4pXFxuIFxcdFxcdFxcdGJyZWFrO1xcbmRpZmYgLS1naXQgYS9uZXQvcXJ0ci9ucy5jIGIvbmV0L3FydHIvbnMuY1xcbmluZGV4IGIzZjliYmNmOWFiOWIuLjE0MjYyNjIzZDJkZDUgMTAwNjQ0XFxuLS0tIGEvbmV0L3FydHIvbnMuY1xcbisrKyBiL25ldC9xcnRyL25zLmNcXG5AQCAtMjEyLDYgKzIxMiw3IEBAIHN0YXRpYyB2b2lkIGxvb2t1cF9ub3RpZnkoc3RydWN0IHNvY2thZGRyX3FydHIgKnRvLCBzdHJ1Y3QgcXJ0cl9zZXJ2ZXIgKnNydixcXG4gXFx0XFx0cHJfZXJyKFxcXCJmYWlsZWQgdG8gc2VuZCBsb29rdXAgbm90aWZpY2F0aW9uXFxcXG5cXFwiKTtcXG4gfVxcbiBcXG4rLyogQW5ub3VuY2UgdGhlIGxpc3Qgb2Ygc2VydmVycyByZWdpc3RlcmVkIG9uIHRoZSBsb2NhbCBub2RlICovXFxuIHN0YXRpYyBpbnQgYW5ub3VuY2Vfc2VydmVycyhzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqc3EpXFxuIHtcXG4gXFx0c3RydWN0IHFydHJfc2VydmVyICpzcnY7XFxuQEAgLTM0OSwxNSArMzUwLDggQEAgc3RhdGljIGludCBzYXlfaGVsbG8oc3RydWN0IHNvY2thZGRyX3FydHIgKmRlc3QpXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuLS8qIEFubm91bmNlIHRoZSBsaXN0IG9mIHNlcnZlcnMgcmVnaXN0ZXJlZCBvbiB0aGUgbG9jYWwgbm9kZSAqL1xcbiBzdGF0aWMgaW50IGN0cmxfY21kX2hlbGxvKHN0cnVjdCBzb2NrYWRkcl9xcnRyICpzcSlcXG4ge1xcbi1cXHRpbnQgcmV0O1xcbi1cXG4tXFx0cmV0ID0gc2F5X2hlbGxvKHNxKTtcXG4tXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuLVxcbiBcXHRyZXR1cm4gYW5ub3VuY2Vfc2VydmVycyhzcSk7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjEwOjU4Ljk4NjY2NTQ4NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEwNjU3MDMyMDk3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJRUlRSXCIsXG4gICAgXCJRUlRSX1RVTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInFydHJfZW5kcG9pbnRfcmVnaXN0ZXJcIixcbiAgICBcInFydHJfc2VuZG1zZ1wiLFxuICAgIFwicXJ0cl90dW5fd3JpdGVfaXRlclwiLFxuICAgIFwicXJ0cl9lbmRwb2ludF9wb3N0XCIsXG4gICAgXCJxcnRyX25zX3dvcmtlclwiLFxuICAgIFwicXJ0cl9oZWxsb193b3JrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFF1YWxjb21tIElQQyBSb3V0ZXIgKFFSVFIpIGNvcmUgbG9naWMgdG8gaW5pdGlhdGUgYSBIRUxMTyBoYW5kc2hha2UgdXBvbiBlbmRwb2ludCByZWdpc3RyYXRpb24gYW5kIGRyb3AgcGFja2V0cyBpZiB0aGUgaGFuZHNoYWtlIGhhc24ndCBjb21wbGV0ZWQuIFRoaXMgZnVuY3Rpb25hbGl0eSBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IHVzaW5nIHRoZSBgL2Rldi9xcnRyLXR1bmAgZGV2aWNlLCB3aGljaCBhbGxvd3MgdXNlcnNwYWNlIHRvIHJlZ2lzdGVyIGVuZHBvaW50cyBhbmQgaW5qZWN0IHBhY2tldHMuIFRoZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIHBhY2tldCBlbnF1ZXVlaW5nIGFuZCBlbmRwb2ludCByZWdpc3RyYXRpb24gcGF0aHMsIHdoaWNoIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyNWM1N2JiNTg3YzJmY2I4NWQ4MTNmM2IzNDJmYjIyMzhmYTJlMjYyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAxNjoxMDo1NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9xcnRyL2FmX3FydHIuYyBiL25ldC9xcnRyL2FmX3FydHIuY1xuaW5kZXggZDAyZWY5YTc0YzNjYS4uN2FkYzBhMDUzMTI1NCAxMDA2NDRcbi0tLSBhL25ldC9xcnRyL2FmX3FydHIuY1xuKysrIGIvbmV0L3FydHIvYWZfcXJ0ci5jXG5AQCAtOSw2ICs5LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90ZXJtaW9zLmhcdTAwM2VcdC8qIEZvciBUSU9DSU5RL09VVFEgKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvd2FpdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvc29jay5oXHUwMDNlXG4gXG5AQCAtMTIwLDggKzEyMSwxMCBAQCBzdGF0aWMgREVGSU5FX1hBUlJBWV9BTExPQyhxcnRyX3BvcnRzKTtcbiAgKiBAbmlkOiBub2RlIGlkXG4gICogQHFydHJfdHhfZmxvdzogeGFycmF5IG9mIHFydHJfdHhfZmxvdywga2V5ZWQgYnkgbm9kZSBcdTAwM2NcdTAwM2MgMzIgfCBwb3J0XG4gICogQHFydHJfdHhfbG9jazogbG9jayBmb3IgcXJ0cl90eF9mbG93IGluc2VydHNcbisgKiBAaGVsbG9fc2VudDogaGVsbG8gcGFja2V0IHNlbmQgc3VjY2Vzc2Z1bFxuICAqIEByeF9xdWV1ZTogcmVjZWl2ZSBxdWV1ZVxuICAqIEBpdGVtOiBsaXN0IGl0ZW0gZm9yIGJyb2FkY2FzdCBsaXN0XG4rICogQHNheV9oZWxsbzogc2NoZWR1bGVkIHdvcmsgZm9yIHNlbmRpbmcgaGVsbG8gcGFja2V0XG4gICovXG4gc3RydWN0IHFydHJfbm9kZSB7XG4gXHRzdHJ1Y3QgbXV0ZXggZXBfbG9jaztcbkBAIC0xMzIsOCArMTM1LDExIEBAIHN0cnVjdCBxcnRyX25vZGUge1xuIFx0c3RydWN0IHhhcnJheSBxcnRyX3R4X2Zsb3c7XG4gXHRzdHJ1Y3QgbXV0ZXggcXJ0cl90eF9sb2NrOyAvKiBmb3IgcXJ0cl90eF9mbG93ICovXG4gXG4rXHRib29sIGhlbGxvX3NlbnQ7XG4rXG4gXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHJ4X3F1ZXVlO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBpdGVtO1xuK1x0c3RydWN0IHdvcmtfc3RydWN0IHNheV9oZWxsbztcbiB9O1xuIFxuIC8qKlxuQEAgLTE4Nyw2ICsxOTMsOCBAQCBzdGF0aWMgdm9pZCBfX3FydHJfbm9kZV9yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKVxuIFx0bGlzdF9kZWwoXHUwMDI2bm9kZS1cdTAwM2VpdGVtKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZxcnRyX25vZGVfbG9jayk7XG4gXG4rXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNm5vZGUtXHUwMDNlc2F5X2hlbGxvKTtcbitcbiBcdHNrYl9xdWV1ZV9wdXJnZShcdTAwMjZub2RlLVx1MDAzZXJ4X3F1ZXVlKTtcbiBcbiBcdC8qIEZyZWUgdHggZmxvdyBjb3VudGVycyAqL1xuQEAgLTM0MSw2ICszNDksMTQgQEAgc3RhdGljIGludCBxcnRyX25vZGVfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c2l6ZV90IGxlbiA9IHNrYi1cdTAwM2VsZW47XG4gXHRpbnQgcmMsIGNvbmZpcm1fcng7XG4gXG4rXHRtdXRleF9sb2NrKFx1MDAyNm5vZGUtXHUwMDNlZXBfbG9jayk7XG4rXHRpZiAoIW5vZGUtXHUwMDNlaGVsbG9fc2VudCBcdTAwMjZcdTAwMjYgdHlwZSAhPSBRUlRSX1RZUEVfSEVMTE8pIHtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5vZGUtXHUwMDNlZXBfbG9jayk7XG4rXHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcdG11dGV4X3VubG9jayhcdTAwMjZub2RlLVx1MDAzZWVwX2xvY2spO1xuK1xuIFx0Y29uZmlybV9yeCA9IHFydHJfdHhfd2FpdChub2RlLCB0by1cdTAwM2VzcV9ub2RlLCB0by1cdTAwM2VzcV9wb3J0LCB0eXBlKTtcbiBcdGlmIChjb25maXJtX3J4IFx1MDAzYyAwKSB7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuQEAgLTM3Miw2ICszODgsOCBAQCBzdGF0aWMgaW50IHFydHJfbm9kZV9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0cmMgPSBub2RlLVx1MDAzZWVwLVx1MDAzZXhtaXQobm9kZS1cdTAwM2VlcCwgc2tiKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRpZiAoIXJjIFx1MDAyNlx1MDAyNiB0eXBlID09IFFSVFJfVFlQRV9IRUxMTylcbitcdFx0XHRub2RlLVx1MDAzZWhlbGxvX3NlbnQgPSB0cnVlO1xuIFx0XHRtdXRleF91bmxvY2soXHUwMDI2bm9kZS1cdTAwM2VlcF9sb2NrKTtcbiBcdH1cbiBcdC8qIE5lZWQgdG8gZW5zdXJlIHRoYXQgYSBzdWJzZXF1ZW50IG1lc3NhZ2UgY2FycmllcyB0aGUgb3RoZXJ3aXNlIGxvc3RcbkBAIC0zNzksNiArMzk3LDkgQEAgc3RhdGljIGludCBxcnRyX25vZGVfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKHJjIFx1MDAyNlx1MDAyNiBjb25maXJtX3J4KVxuIFx0XHRxcnRyX3R4X2Zsb3dfZmFpbGVkKG5vZGUsIHRvLVx1MDAzZXNxX25vZGUsIHRvLVx1MDAzZXNxX3BvcnQpO1xuIFxuK1x0aWYgKHJjIFx1MDAyNlx1MDAyNiB0eXBlID09IFFSVFJfVFlQRV9IRUxMTylcbitcdFx0c2NoZWR1bGVfd29yayhcdTAwMjZub2RlLVx1MDAzZXNheV9oZWxsbyk7XG4rXG4gXHRyZXR1cm4gcmM7XG4gfVxuIFxuQEAgLTU3MCw2ICs1OTEsMzUgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpxcnRyX2FsbG9jX2N0cmxfcGFja2V0KHN0cnVjdCBxcnRyX2N0cmxfcGt0ICoqcGt0LFxuIFx0cmV0dXJuIHNrYjtcbiB9XG4gXG4rc3RhdGljIHZvaWQgcXJ0cl9oZWxsb193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbit7XG4rXHRzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciBmcm9tID0ge0FGX1FJUENSVFIsIDAsIFFSVFJfUE9SVF9DVFJMfTtcbitcdHN0cnVjdCBzb2NrYWRkcl9xcnRyIHRvID0ge0FGX1FJUENSVFIsIDAsIFFSVFJfUE9SVF9DVFJMfTtcbitcdHN0cnVjdCBxcnRyX2N0cmxfcGt0ICpwa3Q7XG4rXHRzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlO1xuK1x0c3RydWN0IHFydHJfc29jayAqY3RybDtcbitcdHN0cnVjdCBza19idWZmICpza2I7XG4rXG4rXHRub2RlID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBxcnRyX25vZGUsIHNheV9oZWxsbyk7XG4rXG4rXHQvKiBOUyBtdXN0IGJlIGJvdW5kIGJlZm9yZSB3ZSBjYW4gc2VuZCAqL1xuK1x0Y3RybCA9IHFydHJfcG9ydF9sb29rdXAoUVJUUl9QT1JUX0NUUkwpO1xuK1x0aWYgKCFjdHJsKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRza2IgPSBxcnRyX2FsbG9jX2N0cmxfcGFja2V0KFx1MDAyNnBrdCwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXNrYikge1xuK1x0XHRxcnRyX3BvcnRfcHV0KGN0cmwpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRwa3QtXHUwMDNlY21kID0gY3B1X3RvX2xlMzIoUVJUUl9UWVBFX0hFTExPKTtcbitcdGZyb20uc3Ffbm9kZSA9IHFydHJfbG9jYWxfbmlkO1xuK1x0dG8uc3Ffbm9kZSA9IG5vZGUtXHUwMDNlbmlkO1xuK1x0cXJ0cl9ub2RlX2VucXVldWUobm9kZSwgc2tiLCBRUlRSX1RZUEVfSEVMTE8sIFx1MDAyNmZyb20sIFx1MDAyNnRvKTtcbitcdHFydHJfcG9ydF9wdXQoY3RybCk7XG4rfVxuK1xuIC8qKlxuICAqIHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIoKSAtIHJlZ2lzdGVyIGEgbmV3IGVuZHBvaW50XG4gICogQGVwOiBlbmRwb2ludCB0byByZWdpc3RlclxuQEAgLTU5NSw2ICs2NDUsOSBAQCBpbnQgcXJ0cl9lbmRwb2ludF9yZWdpc3RlcihzdHJ1Y3QgcXJ0cl9lbmRwb2ludCAqZXAsIHVuc2lnbmVkIGludCBuaWQpXG4gXHRub2RlLVx1MDAzZW5pZCA9IFFSVFJfRVBfTklEX0FVVE87XG4gXHRub2RlLVx1MDAzZWVwID0gZXA7XG4gXG4rXHRub2RlLVx1MDAzZWhlbGxvX3NlbnQgPSBmYWxzZTtcbitcdElOSVRfV09SSyhcdTAwMjZub2RlLVx1MDAzZXNheV9oZWxsbywgcXJ0cl9oZWxsb193b3JrKTtcbitcbiBcdHhhX2luaXQoXHUwMDI2bm9kZS1cdTAwM2VxcnRyX3R4X2Zsb3cpO1xuIFx0bXV0ZXhfaW5pdChcdTAwMjZub2RlLVx1MDAzZXFydHJfdHhfbG9jayk7XG4gXG5AQCAtNjA1LDYgKzY1OCw5IEBAIGludCBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyKHN0cnVjdCBxcnRyX2VuZHBvaW50ICplcCwgdW5zaWduZWQgaW50IG5pZClcbiBcdG11dGV4X3VubG9jayhcdTAwMjZxcnRyX25vZGVfbG9jayk7XG4gXHRlcC1cdTAwM2Vub2RlID0gbm9kZTtcbiBcbitcdC8qIEluaXRpYXRlIEhFTExPIGhhbmRzaGFrZSBmcm9tIHRoZSBjb3JlIGxheWVyICovXG4rXHRzY2hlZHVsZV93b3JrKFx1MDAyNm5vZGUtXHUwMDNlc2F5X2hlbGxvKTtcbitcbiBcdHJldHVybiAwO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChxcnRyX2VuZHBvaW50X3JlZ2lzdGVyKTtcbkBAIC04NzksNiArOTM1LDExIEBAIHN0YXRpYyBpbnQgcXJ0cl9iY2FzdF9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNnFydHJfbm9kZV9sb2NrKTtcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgXHUwMDI2cXJ0cl9hbGxfbm9kZXMsIGl0ZW0pIHtcbitcdFx0LyogU2tpcCBub2RlcyB3aG9zZSBub2RlIElEIGlzIG5vdCB5ZXQga25vd247IHRoZXkgY2Fubm90XG4rXHRcdCAqIHJlY2VpdmUgYnJvYWRjYXN0IHBhY2tldHMgYmVmb3JlIHRoZSBIRUxMTyBoYW5kc2hha2UuXG4rXHRcdCAqL1xuK1x0XHRpZiAobm9kZS1cdTAwM2VuaWQgPT0gUVJUUl9FUF9OSURfQVVUTylcbitcdFx0XHRjb250aW51ZTtcbiBcdFx0c2tibiA9IHBza2JfY29weShza2IsIEdGUF9LRVJORUwpO1xuIFx0XHRpZiAoIXNrYm4pXG4gXHRcdFx0YnJlYWs7XG5kaWZmIC0tZ2l0IGEvbmV0L3FydHIvbnMuYyBiL25ldC9xcnRyL25zLmNcbmluZGV4IGIzZjliYmNmOWFiOWIuLjE0MjYyNjIzZDJkZDUgMTAwNjQ0XG4tLS0gYS9uZXQvcXJ0ci9ucy5jXG4rKysgYi9uZXQvcXJ0ci9ucy5jXG5AQCAtMjEyLDYgKzIxMiw3IEBAIHN0YXRpYyB2b2lkIGxvb2t1cF9ub3RpZnkoc3RydWN0IHNvY2thZGRyX3FydHIgKnRvLCBzdHJ1Y3QgcXJ0cl9zZXJ2ZXIgKnNydixcbiBcdFx0cHJfZXJyKFwiZmFpbGVkIHRvIHNlbmQgbG9va3VwIG5vdGlmaWNhdGlvblxcblwiKTtcbiB9XG4gXG4rLyogQW5ub3VuY2UgdGhlIGxpc3Qgb2Ygc2VydmVycyByZWdpc3RlcmVkIG9uIHRoZSBsb2NhbCBub2RlICovXG4gc3RhdGljIGludCBhbm5vdW5jZV9zZXJ2ZXJzKHN0cnVjdCBzb2NrYWRkcl9xcnRyICpzcSlcbiB7XG4gXHRzdHJ1Y3QgcXJ0cl9zZXJ2ZXIgKnNydjtcbkBAIC0zNDksMTUgKzM1MCw4IEBAIHN0YXRpYyBpbnQgc2F5X2hlbGxvKHN0cnVjdCBzb2NrYWRkcl9xcnRyICpkZXN0KVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tLyogQW5ub3VuY2UgdGhlIGxpc3Qgb2Ygc2VydmVycyByZWdpc3RlcmVkIG9uIHRoZSBsb2NhbCBub2RlICovXG4gc3RhdGljIGludCBjdHJsX2NtZF9oZWxsbyhzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqc3EpXG4ge1xuLVx0aW50IHJldDtcbi1cbi1cdHJldCA9IHNheV9oZWxsbyhzcSk7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuIFx0cmV0dXJuIGFubm91bmNlX3NlcnZlcnMoc3EpO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjEwOjU4Ljk4NjY2NjU2NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4Njc3OTU0MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFFSVFIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIG1ha2luZyBzb21lIHByZXR0eSBzcGVjaWZpYyBjaGFuZ2VzIHRvIHRoZSBRUlRSIGNvZGUuIFNlZW1zIGxpa2UgdGhleSdyZSBhZGRpbmcgYSBgaGVsbG9fc2VudGAgZmxhZyBhbmQgYSBgc2F5X2hlbGxvYCB3b3JrIHN0cnVjdCB0byB0aGUgYHFydHJfbm9kZWAgc3RydWN0dXJlIGluIGBhZl9xcnRyLmNgLiBJbnRlcmVzdGluZy4gVGhlIGNvcmUgbG9naWMgb2YgYHFydHJfbm9kZV9lbnF1ZXVlYCBpcyBhbHNvIGJlaW5nIHR3ZWFrZWQuIEl0J3Mgbm93IGdvaW5nIHRvIGRyb3AgcGFja2V0cyBpZiBgaGVsbG9fc2VudGAgaXMgZmFsc2UsICp1bmxlc3MqIGl0J3MgYSBIRUxMTyBwYWNrZXQuIEFuZCwgY3J1Y2lhbGx5LCB0aGV5J3JlIHNjaGVkdWxpbmcgYSBIRUxMTyBoYW5kc2hha2UgZnJvbSB0aGUgY29yZSBsYXllciBub3cgd2hlbiBhbiBlbmRwb2ludCByZWdpc3RlcnMgdXNpbmcgYHFydHJfZW5kcG9pbnRfcmVnaXN0ZXJgLiBUaGF0J3MgYSBmdW5kYW1lbnRhbCBzaGlmdCBpbiB0aGUgaGFuZHNoYWtlIHByb2Nlc3MuXG5cbk5vdywgb3ZlciBpbiBgbnMuY2AsIHRoZXkndmUgcmVtb3ZlZCB0aGUgYHNheV9oZWxsb2AgY2FsbCBmcm9tIGBjdHJsX2NtZF9oZWxsb2AuIE1ha2VzIHNlbnNlLCB0aGUgY29yZSBpcyBoYW5kbGluZyB0aGUgaW5pdGlhdGlvbiBub3cuIEkgc2VlIHdoYXQgdGhleSdyZSBkb2luZyB0aGVyZSwgY29uc29saWRhdGluZyB0aGUgSEVMTE8gaGFuZGxpbmcuXG5cblRoZSBuZXh0IHF1ZXN0aW9uIGluIG15IG1pbmQsIG5hdHVyYWxseSwgaXMsIGNhbiBJIHJlYWNoIHRoaXMgaW4gbXkgdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudD8gUVJUUiBpcyBRdWFsY29tbSdzIElQQyBSb3V0ZXIgcHJvdG9jb2wsIHJpZ2h0PyBTbywgY2FuIEkgZnV6eiB0aGlzIGluIFFFTVU/IEknbSB3b25kZXJpbmcgaWYgSSBjYW4gZ2V0IEFGX1FJUENSVFIgc29ja2V0cyBjcmVhdGVkLCByZWdpc3RlciBlbmRwb2ludHMsIG1heWJlIHZpYSB0dW4vdGFwIG9yIHNvbWUgb3RoZXIgbWVjaGFuaXNtLiBIb3cgKmFyZSogUVJUUiBlbmRwb2ludHMgcmVnaXN0ZXJlZCwgYWN0dWFsbHk/IEkgbmVlZCB0byBjaGVjayBob3cgSSB3b3VsZCBnZXQgdGhlIGNvZGUgcGF0aCB0byB3b3JrLiBJIHNob3VsZCBwcm9iYWJseSBqdXN0IHNlYXJjaCBmb3IgYHFydHJfZW5kcG9pbnRfcmVnaXN0ZXJgIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTEwLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MTE6MTcuNjY0NjI0MzY0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNDQ1NDI3NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicXJ0cl9lbmRwb2ludF9yZWdpc3RlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcXJ0ci9hZl9xcnRyLmM9NTk0PXN0YXRpYyB2b2lkIHFydHJfaGVsbG9fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjIzLS8qKlxcbm5ldC9xcnRyL2FmX3FydHIuYzo2MjQ6ICogcXJ0cl9lbmRwb2ludF9yZWdpc3RlcigpIC0gcmVnaXN0ZXIgYSBuZXcgZW5kcG9pbnRcXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjI1LSAqIEBlcDogZW5kcG9pbnQgdG8gcmVnaXN0ZXJcXG4tLVxcbm5ldC9xcnRyL2FmX3FydHIuYy02MzAtICovXFxubmV0L3FydHIvYWZfcXJ0ci5jOjYzMTppbnQgcXJ0cl9lbmRwb2ludF9yZWdpc3RlcihzdHJ1Y3QgcXJ0cl9lbmRwb2ludCAqZXAsIHVuc2lnbmVkIGludCBuaWQpXFxubmV0L3FydHIvYWZfcXJ0ci5jLTYzMi17XFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjY1LX1cXG5uZXQvcXJ0ci9hZl9xcnRyLmM6NjY2OkVYUE9SVF9TWU1CT0xfR1BMKHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIpO1xcbm5ldC9xcnRyL2FmX3FydHIuYy02NjctXFxuLS1cXG5uZXQvcXJ0ci9taGkuYz0xMTA9c3RhdGljIGludCBxY29tX21oaV9xcnRyX3Byb2JlKHN0cnVjdCBtaGlfZGV2aWNlICptaGlfZGV2LFxcbi0tXFxubmV0L3FydHIvbWhpLmMtMTMwLVxcbm5ldC9xcnRyL21oaS5jOjEzMTpcXHRyYyA9IHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIoXFx1MDAyNnFkZXYtXFx1MDAzZWVwLCBRUlRSX0VQX05JRF9BVVRPKTtcXG5uZXQvcXJ0ci9taGkuYy0xMzItXFx0aWYgKHJjKVxcbi0tXFxubmV0L3FydHIvcXJ0ci5oPTIwPXN0cnVjdCBxcnRyX2VuZHBvaW50IHtcXG4tLVxcbm5ldC9xcnRyL3FydHIuaC0yNS1cXG5uZXQvcXJ0ci9xcnRyLmg6MjY6aW50IHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIoc3RydWN0IHFydHJfZW5kcG9pbnQgKmVwLCB1bnNpZ25lZCBpbnQgbmlkKTtcXG5uZXQvcXJ0ci9xcnRyLmgtMjctXFxuLS1cXG5uZXQvcXJ0ci9zbWQuYz01OT1zdGF0aWMgaW50IHFjb21fc21kX3FydHJfcHJvYmUoc3RydWN0IHJwbXNnX2RldmljZSAqcnBkZXYpXFxuLS1cXG5uZXQvcXJ0ci9zbWQuYy03MS1cXG5uZXQvcXJ0ci9zbWQuYzo3MjpcXHRyYyA9IHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIoXFx1MDAyNnFkZXYtXFx1MDAzZWVwLCBRUlRSX0VQX05JRF9BVVRPKTtcXG5uZXQvcXJ0ci9zbWQuYy03My1cXHRpZiAocmMpXFxuLS1cXG5uZXQvcXJ0ci90dW4uYz0zMT1zdGF0aWMgaW50IHFydHJfdHVuX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXFxuLS1cXG5uZXQvcXJ0ci90dW4uYy00Ni1cXG5uZXQvcXJ0ci90dW4uYzo0NzpcXHRyZXQgPSBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyKFxcdTAwMjZ0dW4tXFx1MDAzZWVwLCBRUlRSX0VQX05JRF9BVVRPKTtcXG5uZXQvcXJ0ci90dW4uYy00OC1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMToxOS44MDkxNzMwNzFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDY4OTM3MTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIFFSVFIgVHVubmVsaW5nIENhcGFiaWxpdGllcyoqXG5cblJpZ2h0LCBzbyBgbmV0L3FydHIvdHVuLmNgLi4uIHRoYXQncyB0aGUgZmlsZSBJIHdhcyBob3BpbmcgdG8gZmluZCEgQSB0dW4gZGV2aWNlLCBzcGVjaWZpY2FsbHksIGlzIGhvdyBRUlRSIGVuZHBvaW50cyBhcmUgcmVnaXN0ZXJlZC4gVGhhdCdzIGEga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUuIE5vdyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBzeXN0ZW0gb3BlcmF0ZXMsIHNvIG15IG5leHQgc3RlcCBpcyBjbGVhci4gVGltZSB0byBkaWcgaW50byBgbmV0L3FydHIvdHVuLmNgIGFuZCBzZWUgZXhhY3RseSBob3cgdGhleSd2ZSBpbXBsZW1lbnRlZCB0aGlzIHR1bm5lbGluZyBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBvZiB0aGlzIGFwcHJvYWNoIHRvIHNlZSBpZiBpdCBmaXRzIHRoZSBpbnRlbmRlZCB1c2UgY2FzZSwgYW5kIHRvIHByZXBhcmUgZm9yIGFueSBwb3RlbnRpYWwgcHJvYmxlbXMgSSBjYW4gZm9yZXNlZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE5MywiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjExOjI2Ljg3ODExMjgyN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDMwMTA0Mjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInFydHJfdHVuXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9xcnRyL3R1bi5jLTExLVxcbm5ldC9xcnRyL3R1bi5jOjEyOnN0cnVjdCBxcnRyX3R1biB7XFxubmV0L3FydHIvdHVuLmMtMTMtXFx0c3RydWN0IHFydHJfZW5kcG9pbnQgZXA7XFxuLS1cXG5uZXQvcXJ0ci90dW4uYy0xOC1cXG5uZXQvcXJ0ci90dW4uYzoxOTpzdGF0aWMgaW50IHFydHJfdHVuX3NlbmQoc3RydWN0IHFydHJfZW5kcG9pbnQgKmVwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9xcnRyL3R1bi5jLTIwLXtcXG5uZXQvcXJ0ci90dW4uYzoyMTpcXHRzdHJ1Y3QgcXJ0cl90dW4gKnR1biA9IGNvbnRhaW5lcl9vZihlcCwgc3RydWN0IHFydHJfdHVuLCBlcCk7XFxubmV0L3FydHIvdHVuLmMtMjItXFxuLS1cXG5uZXQvcXJ0ci90dW4uYy0zMC1cXG5uZXQvcXJ0ci90dW4uYzozMTpzdGF0aWMgaW50IHFydHJfdHVuX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXFxubmV0L3FydHIvdHVuLmMtMzIte1xcbm5ldC9xcnRyL3R1bi5jOjMzOlxcdHN0cnVjdCBxcnRyX3R1biAqdHVuO1xcbm5ldC9xcnRyL3R1bi5jLTM0LVxcdGludCByZXQ7XFxuLS1cXG5uZXQvcXJ0ci90dW4uYy00Mi1cXG5uZXQvcXJ0ci90dW4uYzo0MzpcXHR0dW4tXFx1MDAzZWVwLnhtaXQgPSBxcnRyX3R1bl9zZW5kO1xcbm5ldC9xcnRyL3R1bi5jLTQ0LVxcbi0tXFxubmV0L3FydHIvdHVuLmMtNTgtXFxubmV0L3FydHIvdHVuLmM6NTk6c3RhdGljIHNzaXplX3QgcXJ0cl90dW5fcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcXG5uZXQvcXJ0ci90dW4uYy02MC17XFxubmV0L3FydHIvdHVuLmMtNjEtXFx0c3RydWN0IGZpbGUgKmZpbHAgPSBpb2NiLVxcdTAwM2VraV9maWxwO1xcbm5ldC9xcnRyL3R1bi5jOjYyOlxcdHN0cnVjdCBxcnRyX3R1biAqdHVuID0gZmlscC1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbm5ldC9xcnRyL3R1bi5jLTYzLVxcdHN0cnVjdCBza19idWZmICpza2I7XFxuLS1cXG5uZXQvcXJ0ci90dW4uYy04NC1cXG5uZXQvcXJ0ci90dW4uYzo4NTpzdGF0aWMgc3NpemVfdCBxcnRyX3R1bl93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbm5ldC9xcnRyL3R1bi5jLTg2LXtcXG5uZXQvcXJ0ci90dW4uYy04Ny1cXHRzdHJ1Y3QgZmlsZSAqZmlscCA9IGlvY2ItXFx1MDAzZWtpX2ZpbHA7XFxubmV0L3FydHIvdHVuLmM6ODg6XFx0c3RydWN0IHFydHJfdHVuICp0dW4gPSBmaWxwLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxubmV0L3FydHIvdHVuLmMtODktXFx0c2l6ZV90IGxlbiA9IGlvdl9pdGVyX2NvdW50KGZyb20pO1xcbi0tXFxubmV0L3FydHIvdHVuLmMtMTEzLVxcbm5ldC9xcnRyL3R1bi5jOjExNDpzdGF0aWMgX19wb2xsX3QgcXJ0cl90dW5fcG9sbChzdHJ1Y3QgZmlsZSAqZmlscCwgcG9sbF90YWJsZSAqd2FpdClcXG5uZXQvcXJ0ci90dW4uYy0xMTUte1xcbm5ldC9xcnRyL3R1bi5jOjExNjpcXHRzdHJ1Y3QgcXJ0cl90dW4gKnR1biA9IGZpbHAtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG5uZXQvcXJ0ci90dW4uYy0xMTctXFx0X19wb2xsX3QgbWFzayA9IDA7XFxuLS1cXG5uZXQvcXJ0ci90dW4uYy0xMjYtXFxubmV0L3FydHIvdHVuLmM6MTI3OnN0YXRpYyBpbnQgcXJ0cl90dW5fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscClcXG5uZXQvcXJ0ci90dW4uYy0xMjgte1xcbm5ldC9xcnRyL3R1bi5jOjEyOTpcXHRzdHJ1Y3QgcXJ0cl90dW4gKnR1biA9IGZpbHAtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG5uZXQvcXJ0ci90dW4uYy0xMzAtXFxuLS1cXG5uZXQvcXJ0ci90dW4uYy0xNDAtXFxubmV0L3FydHIvdHVuLmM6MTQxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHFydHJfdHVuX29wcyA9IHtcXG5uZXQvcXJ0ci90dW4uYy0xNDItXFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXFxubmV0L3FydHIvdHVuLmM6MTQzOlxcdC5vcGVuID0gcXJ0cl90dW5fb3BlbixcXG5uZXQvcXJ0ci90dW4uYzoxNDQ6XFx0LnBvbGwgPSBxcnRyX3R1bl9wb2xsLFxcbm5ldC9xcnRyL3R1bi5jOjE0NTpcXHQucmVhZF9pdGVyID0gcXJ0cl90dW5fcmVhZF9pdGVyLFxcbm5ldC9xcnRyL3R1bi5jOjE0NjpcXHQud3JpdGVfaXRlciA9IHFydHJfdHVuX3dyaXRlX2l0ZXIsXFxubmV0L3FydHIvdHVuLmM6MTQ3OlxcdC5yZWxlYXNlID0gcXJ0cl90dW5fcmVsZWFzZSxcXG5uZXQvcXJ0ci90dW4uYy0xNDgtfTtcXG5uZXQvcXJ0ci90dW4uYy0xNDktXFxubmV0L3FydHIvdHVuLmM6MTUwOnN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSBxcnRyX3R1bl9taXNjZGV2ID0ge1xcbm5ldC9xcnRyL3R1bi5jLTE1MS1cXHRNSVNDX0RZTkFNSUNfTUlOT1IsXFxubmV0L3FydHIvdHVuLmMtMTUyLVxcdFxcXCJxcnRyLXR1blxcXCIsXFxubmV0L3FydHIvdHVuLmM6MTUzOlxcdFxcdTAwMjZxcnRyX3R1bl9vcHMsXFxubmV0L3FydHIvdHVuLmMtMTU0LX07XFxubmV0L3FydHIvdHVuLmMtMTU1LVxcbm5ldC9xcnRyL3R1bi5jOjE1NjpzdGF0aWMgaW50IF9faW5pdCBxcnRyX3R1bl9pbml0KHZvaWQpXFxubmV0L3FydHIvdHVuLmMtMTU3LXtcXG4tLVxcbm5ldC9xcnRyL3R1bi5jLTE1OS1cXG5uZXQvcXJ0ci90dW4uYzoxNjA6XFx0cmV0ID0gbWlzY19yZWdpc3RlcihcXHUwMDI2cXJ0cl90dW5fbWlzY2Rldik7XFxubmV0L3FydHIvdHVuLmMtMTYxLVxcdGlmIChyZXQpXFxuLS1cXG5uZXQvcXJ0ci90dW4uYy0xNjYtXFxubmV0L3FydHIvdHVuLmM6MTY3OnN0YXRpYyB2b2lkIF9fZXhpdCBxcnRyX3R1bl9leGl0KHZvaWQpXFxubmV0L3FydHIvdHVuLmMtMTY4LXtcXG5uZXQvcXJ0ci90dW4uYzoxNjk6XFx0bWlzY19kZXJlZ2lzdGVyKFxcdTAwMjZxcnRyX3R1bl9taXNjZGV2KTtcXG5uZXQvcXJ0ci90dW4uYy0xNzAtfVxcbm5ldC9xcnRyL3R1bi5jLTE3MS1cXG5uZXQvcXJ0ci90dW4uYzoxNzI6bW9kdWxlX2luaXQocXJ0cl90dW5faW5pdCk7XFxubmV0L3FydHIvdHVuLmM6MTczOm1vZHVsZV9leGl0KHFydHJfdHVuX2V4aXQpO1xcbm5ldC9xcnRyL3R1bi5jLTE3NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MTE6MjguOTA4MjI1OTI2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU4NzQ2NjEzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFFSVFIgZm9yIFZ1bG5lcmFiaWxpdGllcyoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgYC9kZXYvcXJ0ci10dW5gIGRldmljZSwgd2hpY2ggaXMgaW50cmlndWluZy4gSSBjYW4gb3BlbiBpdCwgd3JpdGUgdG8gaXQsIGFuZCB0aGF0IGFwcGFyZW50bHkgbGV0cyBtZSByZWdpc3RlciBhIFFSVFIgZW5kcG9pbnQgYW5kIGluamVjdCBwYWNrZXRzLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgY29kZSBpcyBsaXZlLCByZWFjaGFibGUsIGFuZCAqZnV6emFibGUqLiBNeSBtaW5kIGlzIGFscmVhZHkgcmFjaW5nIHdpdGggcG90ZW50aWFsIGF0dGFjayB2ZWN0b3JzLlxuXG5UaGUgcGF0Y2ggSSdtIGxvb2tpbmcgYXQgbW9kaWZpZXMgYHFydHJfbm9kZV9lbnF1ZXVlYCwgYHFydHJfZW5kcG9pbnRfcmVnaXN0ZXJgLCBhbmQgYHFydHJfYmNhc3RfZW5xdWV1ZWAg4oCTIGludGVyZXN0aW5nIGNob2ljZXMuIFRob3NlIGZ1bmN0aW9ucyBhcmUgZ29pbmcgdG8gYmUga2V5LCBhbmQgSeKAmW0gbWFraW5nIGEgbWVudGFsIG5vdGUgdG8gc3BlbmQgYSBzaWduaWZpY2FudCBhbW91bnQgb2YgdGltZSBmdXp6aW5nIHRoZW0uIEknbGwgbmVlZCB0byBzY3J1dGluaXplIHRob3NlLCBidXQgaXQgbWFrZXMgc2Vuc2UgdG8gaW5jbHVkZSBhIGZldyBvdGhlcnM6IGBxcnRyX2hlbGxvX3dvcmtgIGZlZWxzIHJlbGV2YW50LCBzaW5jZSBpdCdzIGludm9sdmVkIGluIHRoZSBzZXR1cC9yZWdpc3RyYXRpb24gcHJvY2VzcywgYW5kLCBjcnVjaWFsbHksIGBxcnRyX3R1bl93cml0ZV9pdGVyYCwgc2luY2UgdGhhdCdzIHdoZXJlIEknbSBpbmplY3RpbmcgdGhlIHBhY2tldHMuXG5cbkZpcnN0IEknbGwgZ28gY2hlY2sgdGhlIEtjb25maWcgc2V0dGluZ3MgZm9yIFFSVFIgYW5kIFFSVFJfVFVOLiBHb3R0YSBtYWtlIHN1cmUgdGhvc2Ugc2V0dGluZ3MgYXJlIHdoYXQgSSBleHBlY3QgdGhlbSB0byBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjkxMywiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMTozMy40OTU2OTUwNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTA5NjIzNzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBRUlRSXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9xcnRyL0tjb25maWctNC1cXG5uZXQvcXJ0ci9LY29uZmlnOjU6Y29uZmlnIFFSVFJcXG5uZXQvcXJ0ci9LY29uZmlnLTYtXFx0dHJpc3RhdGUgXFxcIlF1YWxjb21tIElQQyBSb3V0ZXIgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9xcnRyL0tjb25maWc9MTU9aWYgUVJUUlxcbm5ldC9xcnRyL0tjb25maWctMTYtXFxubmV0L3FydHIvS2NvbmZpZzoxNzpjb25maWcgUVJUUl9TTURcXG5uZXQvcXJ0ci9LY29uZmlnLTE4LVxcdHRyaXN0YXRlIFxcXCJTTUQgSVBDIFJvdXRlciBjaGFubmVsc1xcXCJcXG4tLVxcbm5ldC9xcnRyL0tjb25maWctMjMtXFxubmV0L3FydHIvS2NvbmZpZzoyNDpjb25maWcgUVJUUl9UVU5cXG5uZXQvcXJ0ci9LY29uZmlnLTI1LVxcdHRyaXN0YXRlIFxcXCJUVU4gZGV2aWNlIGZvciBRdWFsY29tbSBJUEMgUm91dGVyXFxcIlxcbi0tXFxubmV0L3FydHIvS2NvbmZpZy0zMC1cXG5uZXQvcXJ0ci9LY29uZmlnOjMxOmNvbmZpZyBRUlRSX01ISVxcbm5ldC9xcnRyL0tjb25maWctMzItXFx0dHJpc3RhdGUgXFxcIk1ISSBJUEMgUm91dGVyIGNoYW5uZWxzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMTozNS40MDUzMjM0MDJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzAyNDE3Nzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBpbml0aWFsIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkluaXRpYWwgUVJUUiBDb25maWd1cmF0aW9uIGFuZCBQYWNrZXQgSGFuZGxpbmcgUmV2aWV3KipcblxuQWxyaWdodCwgcmlnaHQgb2ZmIHRoZSBiYXQsIEkgbmVlZCB0byBtYWtlIHN1cmUgYFFSVFJgIGFuZCBgUVJUUl9UVU5gIGFyZSBlbmFibGVkLiBUaGF0J3MgZnVuZGFtZW50YWwsIHRoZSBmb3VuZGF0aW9uIHVwb24gd2hpY2ggZXZlcnl0aGluZyBlbHNlIHNpdHMuIFdpdGhvdXQgdGhvc2UsIHdlJ3JlIGRlYWQgaW4gdGhlIHdhdGVyLCBzbyBpdCdzIHRoZSBmaXJzdCB0aGluZyBJJ2QgY2hlY2sgaWYgc29tZXRoaW5nJ3Mgbm90IHdvcmtpbmcgYXMgZXhwZWN0ZWQuXG5cbk5vdywgd2hlcmUgZG9lcyB0aGUgcmVhbCB3b3JrIGhhcHBlbiwgdGhlIG1lYXQgYW5kIHBvdGF0b2VzIG9mIHRoZSBwYWNrZXQgZmxvdz8gVGhlIG5leHQgc3RlcCBpcyBhbHdheXMgdG8gZHJpbGwgaW50byB0aGUgY29yZSBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIHF1ZXVpbmcgcGFja2V0cy4gU28sIG15IG1pbmQgaW1tZWRpYXRlbHkgZ29lcyB0byBgcXJ0cl9ub2RlX2VucXVldWVgIGFuZCBgcXJ0cl9iY2FzdF9lbnF1ZXVlYC4gVGhvc2UgYXJlIHRoZSBwcmltZSBzdXNwZWN0cywgcmlnaHQ/IFRob3NlIGFyZSB0aGUgZnVuY3Rpb25zIEknbSBnb2luZyB0byB3YW50IHRvIGRlZXBseSBhbmFseXplLCBzcGVjaWZpY2FsbHkgaW4gYG5ldC9xcnRyL2FmX3FydHIuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHBhY2tldHMgYXJlIGJlaW5nIGFkZGVkIHRvIHRoZSBxdWV1ZXMsIGhvdyB0aGV5J3JlIGJlaW5nIGhhbmRsZWQgZm9yIGJvdGggdW5pY2FzdCBhbmQgYnJvYWRjYXN0IHNjZW5hcmlvcy4gQW55IHN1YnRsZSBkZXRhaWwgdGhlcmUgY291bGQgZXhwb3NlIGEgY3JpdGljYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVjayBvciBldmVuIGEgc3VidGxlIGJ1Zy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTgwLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MTE6MzkuMTA3NzQ5OTA3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTk2NDM1MzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInFydHJfbm9kZV9lbnF1ZXVlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9xcnRyL2FmX3FydHIuYz0zMjk9c3RhdGljIHZvaWQgcXJ0cl90eF9mbG93X2ZhaWxlZChzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBpbnQgZGVzdF9ub2RlLFxcbi0tXFxubmV0L3FydHIvYWZfcXJ0ci5jLTM0My0vKiBQYXNzIGFuIG91dGdvaW5nIHBhY2tldCBzb2NrZXQgYnVmZmVyIHRvIHRoZSBlbmRwb2ludCBkcml2ZXIuICovXFxubmV0L3FydHIvYWZfcXJ0ci5jOjM0NDpzdGF0aWMgaW50IHFydHJfbm9kZV9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3FydHIvYWZfcXJ0ci5jLTM0NS1cXHRcXHRcXHQgICAgIGludCB0eXBlLCBzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqZnJvbSxcXG4tLVxcbm5ldC9xcnRyL2FmX3FydHIuYz01OTQ9c3RhdGljIHZvaWQgcXJ0cl9oZWxsb193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9xcnRyL2FmX3FydHIuYy02MTgtXFx0dG8uc3Ffbm9kZSA9IG5vZGUtXFx1MDAzZW5pZDtcXG5uZXQvcXJ0ci9hZl9xcnRyLmM6NjE5OlxcdHFydHJfbm9kZV9lbnF1ZXVlKG5vZGUsIHNrYiwgUVJUUl9UWVBFX0hFTExPLCBcXHUwMDI2ZnJvbSwgXFx1MDAyNnRvKTtcXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjIwLVxcdHFydHJfcG9ydF9wdXQoY3RybCk7XFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmM9OTMwPXN0YXRpYyBpbnQgcXJ0cl9iY2FzdF9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmMtOTQ2LVxcdFxcdHNrYl9zZXRfb3duZXJfdyhza2JuLCBza2ItXFx1MDAzZXNrKTtcXG5uZXQvcXJ0ci9hZl9xcnRyLmM6OTQ3OlxcdFxcdHFydHJfbm9kZV9lbnF1ZXVlKG5vZGUsIHNrYm4sIHR5cGUsIGZyb20sIHRvKTtcXG5uZXQvcXJ0ci9hZl9xcnRyLmMtOTQ4LVxcdH1cXG4tLVxcbm5ldC9xcnRyL2FmX3FydHIuYz05NTY9c3RhdGljIGludCBxcnRyX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbi0tXFxubmV0L3FydHIvYWZfcXJ0ci5jLTEwMTYtXFx0XFx0fVxcbm5ldC9xcnRyL2FmX3FydHIuYzoxMDE3OlxcdFxcdGVucXVldWVfZm4gPSBxcnRyX25vZGVfZW5xdWV1ZTtcXG5uZXQvcXJ0ci9hZl9xcnRyLmMtMTAxOC1cXHR9XFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmM9MTA1OT1zdGF0aWMgaW50IHFydHJfc2VuZF9yZXN1bWVfdHgoc3RydWN0IHFydHJfY2IgKmNiKVxcbi0tXFxubmV0L3FydHIvYWZfcXJ0ci5jLTEwODEtXFxubmV0L3FydHIvYWZfcXJ0ci5jOjEwODI6XFx0cmV0ID0gcXJ0cl9ub2RlX2VucXVldWUobm9kZSwgc2tiLCBRUlRSX1RZUEVfUkVTVU1FX1RYLCBcXHUwMDI2bG9jYWwsIFxcdTAwMjZyZW1vdGUpO1xcbm5ldC9xcnRyL2FmX3FydHIuYy0xMDgzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMTo0MS4xMDQxOTk3MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjM2NTY3MDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBRUlRSIEFQSSBGdW5jdGlvbiBBdHRyaWJ1dGVzKipcblxuT2theSwgc28gSSdtIHRha2luZyBhIGxvb2sgYXQgdGhpcyBRUlRSIGNvZGUgYW5kIHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHdhbnRzIG1lIHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gSSBzZWUgYHFydHJfbm9kZV9lbnF1ZXVlYCBhbmQgYHFydHJfYmNhc3RfZW5xdWV1ZWAgYXJlIG1hcmtlZCBhcyBzdGF0aWMsIHdoaWxlIGBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyYCBpcyBleHBvcnRlZC4gYHFydHJfaGVsbG9fd29ya2AgaXMgYWxzbyBzdGF0aWMuXG5cbkJhc2VkIG9uIHRoZSBwcm9tcHQsIEkgbmVlZCB0byBmb2N1cyBvbiB0aGUgc3RhdGljIG9uZXMuIE5vdywgYHFydHJfbm9kZV9lbnF1ZXVlYCBsb29rcyBwcmV0dHkgc2l6YWJsZSwgc28gaXQncyAqbGlrZWx5KiBub3QgaW5saW5lZCBieSB0aGUgY29tcGlsZXIsIGJ1dCBpdCdzIGFsd2F5cyBiZXN0IHRvIGJlIHN1cmUuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCwgYnV0IEknbGwgYWRkIGBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyYCwgYHFydHJfdHVuX3dyaXRlX2l0ZXJgIGFuZCBgcXJ0cl9zZW5kbXNnYCB0byBteSBsaXN0IG9mIGZ1bmN0aW9ucyB0byBjaGVjay4gSSBzaG91bGQgdmVyaWZ5IHRoYXQuIEknbGwgbmVlZCB0byBzZWUgaWYgdGhvc2Ugb3RoZXIgbGlzdGVkIGZ1bmN0aW9ucyBhcmUgc3RhdGljLCBidXQgYWxzbyBjb25maXJtIHRoZSBpbmxpbmluZyBzdGF0dXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1NzksIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MTE6NDYuMzQwNzY5MjE2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODAwOTA2MjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInFydHJfc2VuZG1zZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcXJ0ci9hZl9xcnRyLmM9OTMwPXN0YXRpYyBpbnQgcXJ0cl9iY2FzdF9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmMtOTU1LVxcbm5ldC9xcnRyL2FmX3FydHIuYzo5NTY6c3RhdGljIGludCBxcnRyX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbm5ldC9xcnRyL2FmX3FydHIuYy05NTcte1xcbi0tXFxubmV0L3FydHIvYWZfcXJ0ci5jPTEyOTM9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcXJ0cl9wcm90b19vcHMgPSB7XFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmMtMTMwMC1cXHQubGlzdGVuXFx0XFx0PSBzb2NrX25vX2xpc3RlbixcXG5uZXQvcXJ0ci9hZl9xcnRyLmM6MTMwMTpcXHQuc2VuZG1zZ1xcdD0gcXJ0cl9zZW5kbXNnLFxcbm5ldC9xcnRyL2FmX3FydHIuYy0xMzAyLVxcdC5yZWN2bXNnXFx0PSBxcnRyX3JlY3Ztc2csXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjExOjQ4LjE0MTY3OTkwOVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzgwMTEwMTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIGF2YWlsYWJsZSBlbnRyeSBwb2ludHMuXG5cbioqRW50cnkgUG9pbnQgQXNzZXNzbWVudCBmb3IgUVJUUiBFeHBsb3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0byBpbnRlcmFjdCB3aXRoIHRoZSBRUlRSIHN1YnN5c3RlbSwgYW5kIGZyb20gd2hhdCBJJ3ZlIHNlZW4sIGBxcnRyX3NlbmRtc2dgIHNlZW1zIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3Igc2VuZGluZyBtZXNzYWdlcy4gSXQncyBhIGZ1bmRhbWVudGFsIGZ1bmN0aW9uLCBhbmQgSSdkIGV4cGVjdCBpdCB0byBoYW5kbGUgdGhlIGNvcmUgbWVzc2FnaW5nIGZsb3cuXG5cbmBxcnRyX3R1bl93cml0ZV9pdGVyYCBpcyBhbm90aGVyIGludHJpZ3Vpbmcgb3B0aW9uLiBHaXZlbiBpdHMgbmFtZSwgSSdtIGd1ZXNzaW5nIHRoaXMgcmVsYXRlcyB0byB0aGUgVFVOIGludGVyZmFjZSwgc28gbGlrZWx5LCBpdCdzIHVzZWQgd2hlbiBkYXRhIGlzIGJlaW5nIHdyaXR0ZW4gdG8gb3IgZnJvbSB0aGUgUVJUUiBcInR1bm5lbFwiLiBUaGlzIGNvdWxkIGJlIGhlbHBmdWwgaW4gdW5kZXJzdGFuZGluZyBob3cgcmF3IGRhdGEgaXMgaGFuZGxlZC5cblxuRmluYWxseSwgYHFydHJfZW5kcG9pbnRfcmVnaXN0ZXJgIGFsc28gY2F1Z2h0IG15IGV5ZS4gVGhhdCBzZWVtcyBrZXkgZm9yIGVzdGFibGlzaGluZyBhbmQgbWFuYWdpbmcgZW5kcG9pbnRzIHdpdGhpbiB0aGUgUVJUUiBzeXN0ZW0sIHdoaWNoIGlzIGVzc2VudGlhbCB0byBhbnkgc29ydCBvZiBjb21tdW5pY2F0aW9uLlxuXG5UbyBzdGFydCwgSSdsbCBmb2N1cyBvbiBgcXJ0cl90dW5fd3JpdGVfaXRlcmAsIHNpbmNlIEknbSBpbnRlcmVzdGVkIGluIGhvdyBRUlRSIGRhdGEgaW50ZWdyYXRlcyBpbnRvIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBJJ2xsIGhlYWQgb3ZlciB0byBgbmV0L3FydHIvdHVuLmNgIGFuZCBkaWcgaW50byB0aGF0LiBIb3BlZnVsbHksIHRoYXQgd2lsbCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaG93IHRoZSB0dW5uZWwgaW50ZXJmYWNlIHdvcmtzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjYwLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MTE6NTIuNTIxNzkyNjQ0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODgwNzE4MzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInFydHJfdHVuX3dyaXRlX2l0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3FydHIvdHVuLmM9NTk9c3RhdGljIHNzaXplX3QgcXJ0cl90dW5fcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcXG4tLVxcbm5ldC9xcnRyL3R1bi5jLTg0LVxcbm5ldC9xcnRyL3R1bi5jOjg1OnN0YXRpYyBzc2l6ZV90IHFydHJfdHVuX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxubmV0L3FydHIvdHVuLmMtODYte1xcbi0tXFxubmV0L3FydHIvdHVuLmM9MTQxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHFydHJfdHVuX29wcyA9IHtcXG4tLVxcbm5ldC9xcnRyL3R1bi5jLTE0NS1cXHQucmVhZF9pdGVyID0gcXJ0cl90dW5fcmVhZF9pdGVyLFxcbm5ldC9xcnRyL3R1bi5jOjE0NjpcXHQud3JpdGVfaXRlciA9IHFydHJfdHVuX3dyaXRlX2l0ZXIsXFxubmV0L3FydHIvdHVuLmMtMTQ3LVxcdC5yZWxlYXNlID0gcXJ0cl90dW5fcmVsZWFzZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MTE6NTQuNDAyNTE2NDA5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5OTU4NjMzMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBRUlRSIEVuZHBvaW50IFBvc3QqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEknbSBnb2luZyB0byBzdGFydCB3aXRoIGEgZGVlcCBkaXZlIGludG8gYHFydHJfZW5kcG9pbnRfcG9zdGAgd2l0aGluIGBuZXQvcXJ0ci9hZl9xcnRyLmNgLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB0aGUgY3J1eCBvZiBob3cgZGF0YSBnZXRzIHB1c2hlZCBvbnRvIGEgUVJUUiBlbmRwb2ludCwgd2hpY2ggaXMgYSBrZXkgcGFydCBvZiBob3cgdGhpcyB3aG9sZSBzeXN0ZW0gZnVuY3Rpb25zLiBVbmRlcnN0YW5kaW5nIHRoaXMgaXMgZ29pbmcgdG8gYmUgY2VudHJhbCB0byBmaWd1cmluZyBvdXQgd2hhdGV2ZXIgaXNzdWUgSSdtIGxvb2tpbmcgYXQuIEknbGwgYmUgbG9va2luZyBhdCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IG1hbmlwdWxhdGVzLCBhbnkgbG9ja2luZyBpdCB1c2VzLCBob3cgaXQgaGFuZGxlcyBlcnJvcnMsIGFuZCB0aGUgZGlmZmVyZW50IHBhdGhzIHRoZSBjb2RlIGNhbiB0YWtlIGJhc2VkIG9uIHZhcmlvdXMgY29uZGl0aW9ucy4gSSB3YW50IHRvIHNlZSBob3cgdGhlIG1lc3NhZ2VzIGFyZSBxdWV1ZWQgb3IgdHJhbnNtaXR0ZWQgYW5kIHdoZXJlIHRoZSBhY3R1YWwgZGF0YSB0cmFuc2ZlciB0byB0aGUgZGVzdGluYXRpb24gaGFwcGVucy4gSSdtIGV4cGVjdGluZyB0aGlzIGlzIHdoZXJlIGFueSBzdWJ0bGUgcGVyZm9ybWFuY2UgaXNzdWVzIG9yIHBvdGVudGlhbCBkZWFkbG9jayBzY2VuYXJpb3MgbWlnaHQgcmV2ZWFsIHRoZW1zZWx2ZXMuIExldCdzIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg1NCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjExOjU4LjM5ODM4MjY2M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwNzQzNTk1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJxcnRyX2VuZHBvaW50X3Bvc3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3FydHIvYWZfcXJ0ci5jPTQzMD1zdGF0aWMgdm9pZCBxcnRyX25vZGVfYXNzaWduKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHVuc2lnbmVkIGludCBuaWQpXFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNDQ0LS8qKlxcbm5ldC9xcnRyL2FmX3FydHIuYzo0NDU6ICogcXJ0cl9lbmRwb2ludF9wb3N0KCkgLSBwb3N0IGluY29taW5nIGRhdGFcXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNDQ2LSAqIEBlcDogZW5kcG9pbnQgaGFuZGxlXFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNDUxLSAqL1xcbm5ldC9xcnRyL2FmX3FydHIuYzo0NTI6aW50IHFydHJfZW5kcG9pbnRfcG9zdChzdHJ1Y3QgcXJ0cl9lbmRwb2ludCAqZXAsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pXFxubmV0L3FydHIvYWZfcXJ0ci5jLTQ1My17XFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNTY1LX1cXG5uZXQvcXJ0ci9hZl9xcnRyLmM6NTY2OkVYUE9SVF9TWU1CT0xfR1BMKHFydHJfZW5kcG9pbnRfcG9zdCk7XFxubmV0L3FydHIvYWZfcXJ0ci5jLTU2Ny1cXG4tLVxcbm5ldC9xcnRyL21oaS5jPTIxPXN0YXRpYyB2b2lkIHFjb21fbWhpX3FydHJfZGxfY2FsbGJhY2soc3RydWN0IG1oaV9kZXZpY2UgKm1oaV9kZXYsXFxuLS1cXG5uZXQvcXJ0ci9taGkuYy0zNS1cXG5uZXQvcXJ0ci9taGkuYzozNjpcXHRyYyA9IHFydHJfZW5kcG9pbnRfcG9zdChcXHUwMDI2cWRldi1cXHUwMDNlZXAsIG1oaV9yZXMtXFx1MDAzZWJ1Zl9hZGRyLFxcbm5ldC9xcnRyL21oaS5jLTM3LVxcdFxcdFxcdFxcdG1oaV9yZXMtXFx1MDAzZWJ5dGVzX3hmZXJkKTtcXG4tLVxcbm5ldC9xcnRyL3FydHIuaD0yOD12b2lkIHFydHJfZW5kcG9pbnRfdW5yZWdpc3RlcihzdHJ1Y3QgcXJ0cl9lbmRwb2ludCAqZXApO1xcbm5ldC9xcnRyL3FydHIuaC0yOS1cXG5uZXQvcXJ0ci9xcnRyLmg6MzA6aW50IHFydHJfZW5kcG9pbnRfcG9zdChzdHJ1Y3QgcXJ0cl9lbmRwb2ludCAqZXAsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pO1xcbm5ldC9xcnRyL3FydHIuaC0zMS1cXG4tLVxcbm5ldC9xcnRyL3NtZC5jPTIwPXN0YXRpYyBpbnQgcWNvbV9zbWRfcXJ0cl9jYWxsYmFjayhzdHJ1Y3QgcnBtc2dfZGV2aWNlICpycGRldixcXG4tLVxcbm5ldC9xcnRyL3NtZC5jLTI4LVxcbm5ldC9xcnRyL3NtZC5jOjI5OlxcdHJjID0gcXJ0cl9lbmRwb2ludF9wb3N0KFxcdTAwMjZxZGV2LVxcdTAwM2VlcCwgZGF0YSwgbGVuKTtcXG5uZXQvcXJ0ci9zbWQuYy0zMC1cXHRpZiAocmMgPT0gLUVJTlZBTCkge1xcbi0tXFxubmV0L3FydHIvdHVuLmM9ODU9c3RhdGljIHNzaXplX3QgcXJ0cl90dW5fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4tLVxcbm5ldC9xcnRyL3R1bi5jLTEwNy1cXG5uZXQvcXJ0ci90dW4uYzoxMDg6XFx0cmV0ID0gcXJ0cl9lbmRwb2ludF9wb3N0KFxcdTAwMjZ0dW4tXFx1MDAzZWVwLCBrYnVmLCBsZW4pO1xcbm5ldC9xcnRyL3R1bi5jLTEwOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MTI6MDAuMDA1ODI1MjY2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1NTM1MDU4MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBRUlRSIFNlY3VyaXR5IFBhdGNoKipcblxuT2theSwgc28gbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGFsbCBhYm91dCBzdHJlbmd0aGVuaW5nIHRoZSBRUlRSIG1lc3NhZ2luZyBwcm90b2NvbCdzIHNlY3VyaXR5LCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBIRUxMTyBoYW5kc2hha2UgYW5kIHBhY2tldCBoYW5kbGluZy4gSSBzZWUgdGhhdCBgcXJ0cl9lbmRwb2ludF9wb3N0YCBpcyB0aGUga2V5IGZ1bmN0aW9uIGZvciBoYW5kbGluZyBpbmNvbWluZyBwYWNrZXRzLCB3aGlsZSBgcXJ0cl9ub2RlX2VucXVldWVgIGlzIGNydWNpYWwgZm9yIHNlbmRpbmcgcGFja2V0cywgd2hldGhlciBsb2NhbCBvciBicm9hZGNhc3QuIFRoZSBwYXRjaCBjaGFuZ2VzIGhvdyBgcXJ0cl9ub2RlX2VucXVldWVgIHdvcmtzLCBlZmZlY3RpdmVseSBmaWx0ZXJpbmcgb3V0IHBhY2tldHMgdGhhdCBhcnJpdmUgKmJlZm9yZSogdGhlIEhFTExPIGhhbmRzaGFrZSBpcyBlc3RhYmxpc2hlZC4gVGhpcyBpcyBhIHNtYXJ0IG1vdmUg4oCTIGl0IHByZXZlbnRzIGEgcG90ZW50aWFsIGRlbmlhbC1vZi1zZXJ2aWNlIG9yIGV2ZW4gc29tZXRoaW5nIG1vcmUgbWFsaWNpb3VzIGlmIGF0dGFja2VycyB3ZXJlIGFibGUgdG8gaW5qZWN0IHBhY2tldHMgYmVmb3JlIHRoZSBsaW5rIGlzIHNlY3VyZWx5IGluaXRpYWxpemVkLiBJdCdzIGVzc2VudGlhbGx5IGltcGxlbWVudGluZyBhbiBpbXBsaWNpdCB0cnVzdCBwb2xpY3kgYmVmb3JlIHZlcmlmeWluZyBzZW5kZXIgaWRlbnRpdHkuXG5cblRoZSBmYWN0IHRoYXQgdGhlIHBhdGNoIGFsc28gaW50cm9kdWNlcyBzY2hlZHVsaW5nIGEgSEVMTE8gaGFuZHNoYWtlIGZyb20gdGhlIGNvcmUgbGF5ZXIgdXBvbiBlbmRwb2ludCByZWdpc3RyYXRpb24gKGBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyYCkgaXMgYW4gaW1wb3J0YW50IGFyY2hpdGVjdHVyYWwgY2hhbmdlLiBJdCBjZW50cmFsaXplcyBjb250cm9sIG92ZXIgdGhlIGhhbmRzaGFrZSBwcm9jZXNzLCB3aGljaCBtYWtlcyB0aGUgaW1wbGVtZW50YXRpb24gY2xlYW5lciBhbmQgcG90ZW50aWFsbHkgbW9yZSByb2J1c3QuIFJlbW92aW5nIHRoZSBgc2F5X2hlbGxvYCBjYWxsIGZyb20gYGN0cmxfY21kX2hlbGxvYCBpbiBgbmV0L3FydHIvbnMuY2AgcmVpbmZvcmNlcyB0aGlzIHNoaWZ0IHRvd2FyZHMgdGhlIGNvcmUgbGF5ZXIgdGFraW5nIHJlc3BvbnNpYmlsaXR5IGZvciB0aGUgaW5pdGlhbCBoYW5kc2hha2UuXG5cbkdpdmVuIHRoZXNlIGNoYW5nZXMsIHRoZSBtb3N0IGludGVyZXN0aW5nIGFyZWFzIGZvciBmdXp6aW5nIGFuZCBzZWN1cml0eSBhbmFseXNpcyBhcmUgY2xlYXI6IGBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyYCAoY3JpdGljYWwgZm9yIGhhbmRzaGFrZSBpbml0aWF0aW9uKSwgYHFydHJfc2VuZG1zZ2AgKHRoZSBlbnRyeSBwb2ludCBmb3Igb3V0Z29pbmcgcGFja2V0cyksIGFuZCBgcXJ0cl90dW5fd3JpdGVfaXRlcmAgKGhhbmRsZXMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdHVubmVsKS4gQW5kIGRvbid0IGZvcmdldCBgcXJ0cl9lbmRwb2ludF9wb3N0YCwgd2hpY2ggZGVhbHMgd2l0aCB0aGUgKmluY29taW5nKiBwYWNrZXRzLCBhIGNsYXNzaWMgYXR0YWNrIHZlY3Rvci5cblxuV2FpdCBhIHNlY29uZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGFjY291bnRpbmcgZm9yIGV2ZXJ5dGhpbmcuIEkgbmVlZCB0byBub3RlIHRoYXQgYHFydHJfbm9kZV9lbnF1ZXVlYCBpcyBjYWxsZWQgZnJvbSBib3RoIGBxcnRyX3NlbmRtc2dgIGFuZCBgcXJ0cl9iY2FzdF9lbnF1ZXVlYC4gU28gYHFydHJfYmNhc3RfZW5xdWV1ZWAgaXMgYWxzbyBjYWxsZWQgYnkgYHFydHJfc2VuZG1zZ2AsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgdGhlIGNvdmVyYWdlLiBBbmQgdGhlbiwgSSBzaG91bGQga2VlcCBhbiBleWUgb24gYHFydHJfaGVsbG9fd29ya2AsIGJlY2F1c2UgdGhhdCdzIHNjaGVkdWxlZCBieSBib3RoIGBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyYCBhbmQgYHFydHJfbm9kZV9lbnF1ZXVlYCB3aGljaCBpcyBjYWxsZWQgYnkgYm90aCBgcXJ0cl9zZW5kbXNnYCBhbmQgYHFydHJfYmNhc3RfZW5xdWV1ZWAuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZXNlIGNoYW5nZXMgaW4gYG5ldC9xcnRyL25zLmNgIGFzIHdlbGwsIHNvIEknbGwgY2hlY2sgYGN0cmxfY21kX2hlbGxvYCBhZ2Fpbi4gSSBuZWVkIHRvIHNlZSB3aGF0IGtpbmQgb2YgcmVmYWN0b3Jpbmcgd2FzIGRvbmUgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODE1LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjEyOjA2LjU1OTMzNDUxNloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0NjY4MTAwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjdHJsX2NtZF9oZWxsb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcXJ0ci9ucy5jPTMzMD1zdGF0aWMgaW50IHNheV9oZWxsbyhzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqZGVzdClcXG4tLVxcbm5ldC9xcnRyL25zLmMtMzUyLVxcbm5ldC9xcnRyL25zLmM6MzUzOnN0YXRpYyBpbnQgY3RybF9jbWRfaGVsbG8oc3RydWN0IHNvY2thZGRyX3FydHIgKnNxKVxcbm5ldC9xcnRyL25zLmMtMzU0LXtcXG4tLVxcbm5ldC9xcnRyL25zLmM9NjMxPXN0YXRpYyB2b2lkIHFydHJfbnNfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9xcnRyL25zLmMtNjc0LVxcdFxcdGNhc2UgUVJUUl9UWVBFX0hFTExPOlxcbm5ldC9xcnRyL25zLmM6Njc1OlxcdFxcdFxcdHJldCA9IGN0cmxfY21kX2hlbGxvKFxcdTAwMjZzcSk7XFxubmV0L3FydHIvbnMuYy02NzYtXFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjEyOjA4LjIwNjAyMTI2NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzUyODkyMTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqTXkgVGhpbmtpbmcgb24gUVJUUiBhbmQgTmV0d29yayBSb3V0aW5nKipcblxuQWxyaWdodCwgc28gYGN0cmxfY21kX2hlbGxvYCBpcyBiZWluZyBjYWxsZWQgYnkgYHFydHJfbnNfd29ya2VyYC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSBgcXJ0cl9uc193b3JrZXJgIGlzIHRoZSBjcml0aWNhbCBwaWVjZSBvZiB0aGlzIHB1enpsZSwgc2luY2UgaXQncyB0aGUgZnVuY3Rpb24gdGhhdCdzIGRpcmVjdGx5IGhhbmRsaW5nIHRoYXQgY29tbWFuZC4gQW5kIHNpbmNlIGBxcnRyX25zX3dvcmtlcmAgaXMgYSB3b3JrcXVldWUgZnVuY3Rpb24sIEknbSBkZWFsaW5nIHdpdGggYW4gYXN5bmNocm9ub3VzIGV4ZWN1dGlvbiBjb250ZXh0IGhlcmUuIFRoYXQgY2hhbmdlcyBob3cgSSdkIGFwcHJvYWNoIGRlYnVnZ2luZyBvciBhbmFseXppbmcgdGhpcyBmbG93LiBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgY29uY3VycmVuY3kgaXNzdWVzLlxuXG5TbywgbGV0J3MgaWRlbnRpZnkgdGhlIGtleSBwbGF5ZXJzIGhlcmU6IGBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyYCwgYHFydHJfc2VuZG1zZ2AsIGBxcnRyX3R1bl93cml0ZV9pdGVyYCwgYHFydHJfZW5kcG9pbnRfcG9zdGAsIGFuZCBvZiBjb3Vyc2UsIHRoZSBldmVyLXByZXNlbnQgYHFydHJfbnNfd29ya2VyYC4gSSBrbm93IHRob3NlIGZ1bmN0aW9ucyBoYW5kbGUgdmFyaW91cyBhc3BlY3RzIG9mIFFSVFIsIHdpdGggYHFydHJfZW5kcG9pbnRfcmVnaXN0ZXJgIGJlaW5nIGVzc2VudGlhbCBmb3Igc2V0IHVwLCBgcXJ0cl9zZW5kbXNnYCBhbmQgYHFydHJfdHVuX3dyaXRlX2l0ZXJgIG1hbmFnaW5nIGRhdGEgdHJhbnNmZXIsIGBxcnRyX2VuZHBvaW50X3Bvc3RgIGRlYWxpbmcgd2l0aCBtZXNzYWdlIGhhbmRsaW5nLCBhbmQgYHFydHJfbnNfd29ya2VyYCBvcmNoZXN0cmF0aW5nIHRoZSB3aG9sZSBwcm9jZXNzLlxuXG5Ob3csIGFzIGZhciBhcyBjb25maWcgZ29lcywgSSdtIGV4cGVjdGluZyBgUVJUUmAgdG8gYmUgdGhlIGNvcmUgZW5hYmxlLiBTaW5jZSBJIHNlZSBgUVJUUl9UVU5gIG1lbnRpb25lZCwgSSBrbm93IHRoYXQncyByZWxhdGVkIHRvIHRoZSBUVU4gZGV2aWNlIHN1cHBvcnQuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYFFSVFJfVFVOYCBpcyBlbmFibGVkIHRvIGhhdmUgdGhpcyB3aG9sZSBmbG93IHdvcmtpbmcgYW5kIGlmIHRoZXJlIGFyZSBhbnkgZGVwZW5kZW5jaWVzIEkgc2hvdWxkIGFsc28gYmUgbWluZGZ1bCBvZi5cblxuSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBlbmFibGVkIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTkwMCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMjoxMi45NTg5MTY0MDFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTYzNjg5OTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFFSVFJfVFVOXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9xcnRyL0tjb25maWc9MTc9Y29uZmlnIFFSVFJfU01EXFxuLS1cXG5uZXQvcXJ0ci9LY29uZmlnLTIzLVxcbm5ldC9xcnRyL0tjb25maWc6MjQ6Y29uZmlnIFFSVFJfVFVOXFxubmV0L3FydHIvS2NvbmZpZy0yNS1cXHR0cmlzdGF0ZSBcXFwiVFVOIGRldmljZSBmb3IgUXVhbGNvbW0gSVBDIFJvdXRlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MTI6MTQuNTU1Mjk0MTU1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5NTMxNDk2MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6XG5cbioqTmF2aWdhdGluZyB0aGUgUVJUUiBLZXJuZWwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHNvbWV0aGluZyBhbmQgSSBzZWUgYFFSVFJfVFVOYCBuZXN0ZWQgd2l0aGluIGBpZiBRUlRSYC4gVGhhdCdzIGEga2V5IG9ic2VydmF0aW9uLiBJdCB0ZWxscyBtZSB0aGF0IHRoZSBvcHRpb24gdG8gZW5hYmxlIHRoZSBUVU4gaW50ZXJmYWNlIHN1cHBvcnQgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgUVJUUiBzdWJzeXN0ZW0gaXMgZGVwZW5kZW50IG9uIFFSVFIgaXRzZWxmIGJlaW5nIGVuYWJsZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgcmVsYXRpb25zaGlwIHByZWNpc2VseS5cblxuU28sIHRoZSBsb2dpY2FsIG5leHQgc3RlcCBpcyB0byBnbyBzdHJhaWdodCB0byBgbmV0L3FydHIvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIFFSVFIgbW9kdWxlIGFyZSBkZWZpbmVkLiBUaGUgS2NvbmZpZyBmaWxlIHdpbGwgcmV2ZWFsIHRoZSBleGFjdCBkZXBlbmRlbmNpZXMsIGRlZmF1bHRzLCBhbmQgaGVscCB0ZXh0IGFzc29jaWF0ZWQgd2l0aCBgUVJUUl9UVU5gIGFuZCwgY3JpdGljYWxseSwgaG93IGBRUlRSYCBpcyBkZWZpbmVkIGluIHJlbGF0aW9uIHRvIGl0LiBJIGV4cGVjdCB0byBmaW5kIG1vcmUgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGFueSBkZXBlbmRlbmNpZXMsIHN1Y2ggYXMgd2hldGhlciBpdCBuZWVkcyBhIHNwZWNpZmljIHZlcnNpb24gb2YgdGhlIGtlcm5lbC4gSSB3aWxsIHBheSBhdHRlbnRpb24gdG8gdGhlIGV4YWN0IGxhbmd1YWdlIHRoZXJlIHRvIGJlIHN1cmUgSSBhbSBpbnRlcnByZXRpbmcgdGhlIGluZm9ybWF0aW9uIGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0ODUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMjoyMC41MDg0NDU5ODdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzcyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3FydHIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0IyBRdWFsY29tbSBJUEMgUm91dGVyIGNvbmZpZ3VyYXRpb25cXG4gICAzOlxcdCNcXG4gICA0OlxcdFxcbiAgIDU6XFx0Y29uZmlnIFFSVFJcXG4gICA2OlxcdFxcdHRyaXN0YXRlIFxcXCJRdWFsY29tbSBJUEMgUm91dGVyIHN1cHBvcnRcXFwiXFxuICAgNzpcXHRcXHRoZWxwXFxuICAgODpcXHRcXHQgIFNheSBZIGlmIHlvdSBpbnRlbmQgdG8gdXNlIFF1YWxjb21tIElQQyByb3V0ZXIgcHJvdG9jb2wuICBUaGVcXG4gICA5OlxcdFxcdCAgcHJvdG9jb2wgaXMgdXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoIHNlcnZpY2VzIHByb3ZpZGVkIGJ5IG90aGVyXFxuICAxMDpcXHRcXHQgIGhhcmR3YXJlIGJsb2NrcyBpbiB0aGUgc3lzdGVtLlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIEluIG9yZGVyIHRvIGRvIHNlcnZpY2UgbG9va3VwcywgYSB1c2Vyc3BhY2UgZGFlbW9uIGlzIHJlcXVpcmVkIHRvXFxuICAxMzpcXHRcXHQgIG1haW50YWluIGEgc2VydmljZSBsaXN0aW5nLlxcbiAgMTQ6XFx0XFxuICAxNTpcXHRpZiBRUlRSXFxuICAxNjpcXHRcXG4gIDE3OlxcdGNvbmZpZyBRUlRSX1NNRFxcbiAgMTg6XFx0XFx0dHJpc3RhdGUgXFxcIlNNRCBJUEMgUm91dGVyIGNoYW5uZWxzXFxcIlxcbiAgMTk6XFx0XFx0ZGVwZW5kcyBvbiBSUE1TRyB8fCAoQ09NUElMRV9URVNUIFxcdTAwMjZcXHUwMDI2IFJQTVNHPW4pXFxuICAyMDpcXHRcXHRoZWxwXFxuICAyMTpcXHRcXHQgIFNheSBZIGhlcmUgdG8gc3VwcG9ydCBTTUQgYmFzZWQgaXBjcm91dGVyIGNoYW5uZWxzLiAgU01EIGlzIHRoZVxcbiAgMjI6XFx0XFx0ICBtb3N0IGNvbW1vbiB0cmFuc3BvcnQgZm9yIElQQyBSb3V0ZXIuXFxuICAyMzpcXHRcXG4gIDI0OlxcdGNvbmZpZyBRUlRSX1RVTlxcbiAgMjU6XFx0XFx0dHJpc3RhdGUgXFxcIlRVTiBkZXZpY2UgZm9yIFF1YWxjb21tIElQQyBSb3V0ZXJcXFwiXFxuICAyNjpcXHRcXHRoZWxwXFxuICAyNzpcXHRcXHQgIFNheSBZIGhlcmUgdG8gZXhwb3NlIGEgY2hhcmFjdGVyIGRldmljZSB0aGF0IGFsbG93cyB1c2VyIHNwYWNlIHRvXFxuICAyODpcXHRcXHQgIGltcGxlbWVudCBlbmRwb2ludHMgb2YgUVJUUiwgZm9yIHB1cnBvc2Ugb2YgdHVubmVsaW5nIGRhdGEgdG8gb3RoZXJcXG4gIDI5OlxcdFxcdCAgaG9zdHMgb3IgdGVzdGluZyBwdXJwb3Nlcy5cXG4gIDMwOlxcdFxcbiAgMzE6XFx0Y29uZmlnIFFSVFJfTUhJXFxuICAzMjpcXHRcXHR0cmlzdGF0ZSBcXFwiTUhJIElQQyBSb3V0ZXIgY2hhbm5lbHNcXFwiXFxuICAzMzpcXHRcXHRkZXBlbmRzIG9uIE1ISV9CVVNcXG4gIDM0OlxcdFxcdGhlbHBcXG4gIDM1OlxcdFxcdCAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IE1ISSBiYXNlZCBpcGNyb3V0ZXIgY2hhbm5lbHMuIE1ISSBpcyB0aGVcXG4gIDM2OlxcdFxcdCAgdHJhbnNwb3J0IHVzZWQgZm9yIGNvbW11bmljYXRpbmcgdG8gZXh0ZXJuYWwgbW9kZW1zLlxcbiAgMzc6XFx0XFxuICAzODpcXHRlbmRpZiAjIFFSVFJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MTI6MjAuNTA4NTI1MzA3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMDIyMjE5Mzg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IEFzc2Vzc21lbnQ6IFFSVFIgQ29yZSBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgUVJUUiBwYXRjaCwgYW5kIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgYXJlIGBRUlRSYCBhbmQgYFFSVFJfVFVOYC4gSSBuZWVkIHRvIHNvbGlkaWZ5IHRoZSBjaGFuZ2VzLCBzdGFydGluZyB3aXRoIHRoZSBhZGRpdGlvbiBvZiBhIGBoZWxsb19zZW50YCBmbGFnIHdpdGhpbiB0aGUgYHFydHJfbm9kZWAgc3RydWN0dXJlLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGxpZXMgaW4gaG93IGBxcnRyX25vZGVfZW5xdWV1ZWAgbm93IGJlaGF2ZXM6IGl0J3MgbW9kaWZpZWQgdG8gZHJvcCBwYWNrZXRzIGlmIGBoZWxsb19zZW50YCBpcyBmYWxzZSwgdW5sZXNzIGl0J3MgYSBIRUxMTyBwYWNrZXQuIENydWNpYWxseSwgYSBIRUxMTyBoYW5kc2hha2UgaXMgc2NoZWR1bGVkIGZyb20gdGhlIGNvcmUgZHVyaW5nIGVuZHBvaW50IHJlZ2lzdHJhdGlvbiB2aWEgYHFydHJfZW5kcG9pbnRfcmVnaXN0ZXJgLiBBbHNvLCB0aGUgYGN0cmxfY21kX2hlbGxvYCBsb2dpYyBpbiBgbmV0L3FydHIvbnMuY2AgaXMgdXBkYXRlZCB0byByZW1vdmUgdGhlIGBzYXlfaGVsbG9gIGNhbGwsIGEgbm90YWJsZSBzaGlmdC5cblxuRnVuY3Rpb25hbGx5LCB0aGlzIGltcGFjdHMgdGhlIFFSVFIgY29yZSBsb2dpYyBkaXJlY3RseS4gVGhlIHJlbGV2YW50IHBhdGhzIGZvciB0aGlzIGFyZSBgcXJ0cl90dW5fd3JpdGVfaXRlcmAgd2hpY2ggY2FsbHMgYHFydHJfZW5kcG9pbnRfcG9zdGAgYW5kIGFsc28gYHFydHJfc2VuZG1zZ2Agd2hpY2ggY2FsbHMgYHFydHJfbm9kZV9lbnF1ZXVlYC4gVGhlIGVuZHBvaW50IHJlZ2lzdHJhdGlvbiBgcXJ0cl9lbmRwb2ludF9yZWdpc3RlcmAgKHdoaWNoIGlzIGl0c2VsZiB0cmlnZ2VyZWQgd2hlbiBgL2Rldi9xcnRyLXR1bmAgaXMgb3BlbmVkKSBpcyBhbHNvIGtleS5cblxuQmFzZWQgb24gYWxsIHRoaXMsIFdvcnRoRnV6emluZz10cnVlLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHN0cm9uZyBzeW1ib2xzIGZvciBmdXp6aW5nLiBGcm9tIHRoZSBwYXRjaCBhbmQgcHJldmlvdXMgdW5kZXJzdGFuZGluZywgdGhlIGZvbGxvd2luZyBzZWVtIGxpa2Ugc29saWQgdGFyZ2V0czogYHFydHJfZW5kcG9pbnRfcmVnaXN0ZXJgLCBgcXJ0cl9zZW5kbXNnYCwgYHFydHJfdHVuX3dyaXRlX2l0ZXJgLCBgcXJ0cl9lbmRwb2ludF9wb3N0YCwgYW5kIGBxcnRyX25zX3dvcmtlcmAuXG5cblJpZ2h0LCBsZXQncyBjaGVjayBzb21lIHByb3BlcnRpZXMgb2YgdGhlIGFib3ZlIHN5bWJvbHMuIEkgc2VlIHRoYXQgYHFydHJfbnNfd29ya2VyYCBpcyBzdGF0aWMgYnV0IGEgd29ya3F1ZXVlIGZ1bmN0aW9uLCBzbyBpdCdzIGEgcHJvbWlzaW5nIGVudHJ5IHBvaW50LiBgcXJ0cl90dW5fd3JpdGVfaXRlcmAgaXMgYWxzbyBzdGF0aWMsIGJ1dCBpcyBhIGZpbGUgb3BlcmF0aW9uLCBtYWtpbmcgaXQgYSBnb29kIGVudHJ5IHBvaW50LiBgcXJ0cl9zZW5kbXNnYCBpcyBzdGF0aWMgYXMgd2VsbCwgYnV0IGl0J3MgYSBwcm90b19vcHMgZnVuY3Rpb24sIGFuZCB0aG9zZSBhcmUgb2Z0ZW4gYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBgcXJ0cl9lbmRwb2ludF9wb3N0YCBpcyBleHBvcnRlZCwgZ29vZC4gQW5kIHRoZSBzYW1lIGZvciBgcXJ0cl9lbmRwb2ludF9yZWdpc3RlcmAuIFdhaXQsIGBxcnRyX25zX3dvcmtlcmAgaXMgaW4gYG5ldC9xcnRyL25zLmNgLCB3aGljaCBtYWtlcyBtZSB0aGluayB0aGF0IEkgc2hvdWxkIHJldmlldyBgcXJ0cl9uc193b3JrZXJgIHN5bWJvbCB0byBjb25zaWRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyNDQsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMjozMS41MzA3NDc4MjJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNTQwMzQxNzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicXJ0cl9uc193b3JrZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3FydHIvbnMuYz02MDc9c3RhdGljIHZvaWQgY3RybF9jbWRfZGVsX2xvb2t1cChzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqZnJvbSxcXG4tLVxcbm5ldC9xcnRyL25zLmMtNjMwLVxcbm5ldC9xcnRyL25zLmM6NjMxOnN0YXRpYyB2b2lkIHFydHJfbnNfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5uZXQvcXJ0ci9ucy5jLTYzMi17XFxuLS1cXG5uZXQvcXJ0ci9ucy5jPTczMD1pbnQgcXJ0cl9uc19pbml0KHZvaWQpXFxuLS1cXG5uZXQvcXJ0ci9ucy5jLTczNS1cXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2cXJ0cl9ucy5sb29rdXBzKTtcXG5uZXQvcXJ0ci9ucy5jOjczNjpcXHRJTklUX1dPUksoXFx1MDAyNnFydHJfbnMud29yaywgcXJ0cl9uc193b3JrZXIpO1xcbm5ldC9xcnRyL25zLmMtNzM3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMjozMy43ODQ3ODg0MzhaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzODQ1NzI5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBXb3JrcXVldWUgQ29udGV4dCoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IGEgd29ya3F1ZXVlIGZ1bmN0aW9uIGhlcmUuIFRoZSBpbml0aWFsIGltcHJlc3Npb24gaXMgY29uZmlybWVkOyBpdCdzIGRlZmluaXRlbHkgb3BlcmF0aW5nIHdpdGhpbiB0aGF0IGZyYW1ld29yay4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBnZXQgYSBicm9hZGVyIHZpZXcuIEFyZSB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhpcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgc2NvcGUgb2YgaXRzIGludGVyYWN0aW9uLiBMZXQgbWUgcXVpY2tseSBleGFtaW5lIHRoZSBjb2RlIGJhc2UuLi4gQWgsIHllcy4gYHFydHJfaGVsbG9fd29ya2Ag4oCTIHRoYXQncyB0aGUgb25lLiBBbmQgaXQgc2VlbXMgdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uIHdhcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIE9rYXksIGdvb2QgdG8ga25vdy4gTm93IEkgaGF2ZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGl0cyBwcm92ZW5hbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQ2MywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjEyOjM3LjAyMzI0OTI0MloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAzMzQxNTg5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJxcnRyX2hlbGxvX3dvcmtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3FydHIvYWZfcXJ0ci5jPTU3OD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnFydHJfYWxsb2NfY3RybF9wYWNrZXQoc3RydWN0IHFydHJfY3RybF9wa3QgKipwa3QsXFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNTkzLVxcbm5ldC9xcnRyL2FmX3FydHIuYzo1OTQ6c3RhdGljIHZvaWQgcXJ0cl9oZWxsb193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNTk1LXtcXG4tLVxcbm5ldC9xcnRyL2FmX3FydHIuYz02MzE9aW50IHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIoc3RydWN0IHFydHJfZW5kcG9pbnQgKmVwLCB1bnNpZ25lZCBpbnQgbmlkKVxcbi0tXFxubmV0L3FydHIvYWZfcXJ0ci5jLTY0OC1cXHRub2RlLVxcdTAwM2VoZWxsb19zZW50ID0gZmFsc2U7XFxubmV0L3FydHIvYWZfcXJ0ci5jOjY0OTpcXHRJTklUX1dPUksoXFx1MDAyNm5vZGUtXFx1MDAzZXNheV9oZWxsbywgcXJ0cl9oZWxsb193b3JrKTtcXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjUwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMjozOS4wNTY2ODMyNDFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM3ODM5MTg2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgYnJlYWtkb3duIG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipSZWZpbmluZyB0aGUgRnV6emluZyBTdHJhdGVneSBmb3IgUVJUUioqXG5cbk9rYXksIGBxcnRyX2hlbGxvX3dvcmtgIGZlZWxzIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgZnV6emluZy4gTm93LCBsZXQncyBuYWlsIGRvd24gYSBmZXcgbW9yZSBwcmVjaXNlIGZ1bmN0aW9uIHRhcmdldHMuIEknbSB0aGlua2luZyB3ZSBzaG91bGQgZm9jdXMgb3VyIGZ1enppbmcgZWZmb3J0cyBvbjpcblxuKiAgIGBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyYDogVGhpcyBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIGVuZHBvaW50IHJlZ2lzdHJhdGlvbiwgYSBjcml0aWNhbCBmdW5jdGlvbi5cbiogICBgcXJ0cl9zZW5kbXNnYDogS2V5IGZvciB0aGUgbWVzc2FnZSBzZW5kaW5nIHBhdGguXG4qICAgYHFydHJfdHVuX3dyaXRlX2l0ZXJgOiBUaGUgdHVubmVsIHdyaXRlIGl0ZXJhdGlvbiBmdW5jdGlvbiwgaW1wb3J0YW50IGZvciB0aGUgYFFSVFJfVFVOYCBkZXZpY2UuXG4qICAgYHFydHJfZW5kcG9pbnRfcG9zdGA6IEVuZHBvaW50IHBvc3QgZnVuY3Rpb24sIGFub3RoZXIgY29yZSBwYXJ0IG9mIHRoZSBjb2RlLlxuKiAgIGBxcnRyX25zX3dvcmtlcmA6IFRoZSBuYW1lc3BhY2Ugd29ya2VyLCBhbiBhcmVhIEkgd2FudCB0byBleHBsb3JlLlxuKiAgIGBxcnRyX2hlbGxvX3dvcmtgOiBCdWlsZGluZyBvbiBteSBpbml0aWFsIGluc3RpbmN0LCB0aGlzIGZ1bmN0aW9uIGlzIGNlbnRyYWwgdG8gdGhlIGhhbmRzaGFrZS5cblxuRXNzZW50aWFsbHksIGJ5IHRhcmdldGluZyB0aGVzZSwgd2Ugc2hvdWxkIGJlIGFibGUgdG8gdHJpZ2dlciB2YXJpb3VzIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW52b2x2ZWQgaW4gdGhlIG5ldyBIRUxMTyBoYW5kc2hha2UgbG9naWMgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLlxuXG5UbyBiZSBzdXJlIHRoYXQgZXZlcnl0aGluZyBpcyBjb3ZlcmVkIGFuZCBlbmFibGVkIGZvciBmdXp6aW5nIEkgbmVlZCB0byBjb25maWd1cmUgdGhlIGZ1enppbmcgZW52aXJvbm1lbnQ6XG5cbiogICBgUVJUUmA6IFRoaXMgbmVlZHMgdG8gYmUgYWN0aXZlLlxuKiAgIGBRUlRSX1RVTmA6IEFuZCB0aGUgVFVOIGRldmljZSwgdG8gdGVzdCB0aGUgdmlydHVhbGl6ZWQgcGF0aC5cblxuVWx0aW1hdGVseSwgdGhpcyBwYXRjaCBhbHRlcnMgY29yZSBRUlRSIGJlaGF2aW9yIHRvIHBlcmZvcm0gYSBIRUxMTyBoYW5kc2hha2UgZHVyaW5nIGVuZHBvaW50IHJlZ2lzdHJhdGlvbiwgZHJvcHBpbmcgcGFja2V0cyBpZiB0aGlzIGhhbmRzaGFrZSBpcyBpbmNvbXBsZXRlLiBUaGF0IGhhbmRzaGFrZSwgY29tYmluZWQgd2l0aCBhIGAvZGV2L3FydHItdHVuYCBkZXZpY2UsIG1ha2VzIGl0IGFjaGlldmFibGUgdG8gY29udHJvbCB0aGUgY29yZSBhbmQgdHJpZ2dlciB2YXJpb3VzIGZ1bmN0aW9ucy5cblxuSSB0aGluayB0aGUgYW5hbHlzaXMgaXMgZG9uZSwgc28gSSB3aWxsIG5vdyBzZXQgdGhlIGZ1enppbmcgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ5MDgsIk91dHB1dFRva2VucyI6MTc5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjEyOjQ1LjQzNTA3ODE1NloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTkwNDYzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUVJUUlwiLFxuICAgIFwiUVJUUl9UVU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJxcnRyX2VuZHBvaW50X3JlZ2lzdGVyXCIsXG4gICAgXCJxcnRyX3NlbmRtc2dcIixcbiAgICBcInFydHJfdHVuX3dyaXRlX2l0ZXJcIixcbiAgICBcInFydHJfZW5kcG9pbnRfcG9zdFwiLFxuICAgIFwicXJ0cl9uc193b3JrZXJcIixcbiAgICBcInFydHJfaGVsbG9fd29ya1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBRdWFsY29tbSBJUEMgUm91dGVyIChRUlRSKSBjb3JlIGxvZ2ljIHRvIGluaXRpYXRlIGEgSEVMTE8gaGFuZHNoYWtlIHVwb24gZW5kcG9pbnQgcmVnaXN0cmF0aW9uIGFuZCBkcm9wIHBhY2tldHMgaWYgdGhlIGhhbmRzaGFrZSBoYXNuJ3QgY29tcGxldGVkLiBUaGlzIGZ1bmN0aW9uYWxpdHkgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSB1c2luZyB0aGUgYC9kZXYvcXJ0ci10dW5gIGRldmljZSwgd2hpY2ggYWxsb3dzIHVzZXJzcGFjZSB0byByZWdpc3RlciBlbmRwb2ludHMgYW5kIGluamVjdCBwYWNrZXRzLiBUaGUgY2hhbmdlcyBhZmZlY3QgY29yZSBwYWNrZXQgZW5xdWV1ZWluZyBhbmQgZW5kcG9pbnQgcmVnaXN0cmF0aW9uIHBhdGhzLCB3aGljaCBhcmUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJRUlRSXCIsXG4gICAgXCJRUlRSX1RVTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInFydHJfZW5kcG9pbnRfcmVnaXN0ZXJcIixcbiAgICBcInFydHJfc2VuZG1zZ1wiLFxuICAgIFwicXJ0cl90dW5fd3JpdGVfaXRlclwiLFxuICAgIFwicXJ0cl9lbmRwb2ludF9wb3N0XCIsXG4gICAgXCJxcnRyX25zX3dvcmtlclwiLFxuICAgIFwicXJ0cl9oZWxsb193b3JrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFF1YWxjb21tIElQQyBSb3V0ZXIgKFFSVFIpIGNvcmUgbG9naWMgdG8gaW5pdGlhdGUgYSBIRUxMTyBoYW5kc2hha2UgdXBvbiBlbmRwb2ludCByZWdpc3RyYXRpb24gYW5kIGRyb3AgcGFja2V0cyBpZiB0aGUgaGFuZHNoYWtlIGhhc24ndCBjb21wbGV0ZWQuIFRoaXMgZnVuY3Rpb25hbGl0eSBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IHVzaW5nIHRoZSBgL2Rldi9xcnRyLXR1bmAgZGV2aWNlLCB3aGljaCBhbGxvd3MgdXNlcnNwYWNlIHRvIHJlZ2lzdGVyIGVuZHBvaW50cyBhbmQgaW5qZWN0IHBhY2tldHMuIFRoZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIHBhY2tldCBlbnF1ZXVlaW5nIGFuZCBlbmRwb2ludCByZWdpc3RyYXRpb24gcGF0aHMsIHdoaWNoIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMjo0NS41NTY5OTA4MzRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3MDcyMDU2NzczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MTI6NDUuNTU3NjIxMTk0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjc3MDcxNDE5OTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgUVJUUiBzdWJzeXN0ZW0gdG8gaW5pdGlhdGUgdGhlIEhFTExPIGhhbmRzaGFrZSBmcm9tIHRoZSBjb3JlIGxheWVyIGluc3RlYWQgb2YgdGhlIG5hbWVzZXJ2aWNlLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IHdvcmsgaXRlbSBgcXJ0cl9oZWxsb193b3JrYCB3aGljaCBhbGxvY2F0ZXMgYSBjb250cm9sIHBhY2tldCBhbmQgZW5xdWV1ZXMgaXQuIFRoZSBjb250cm9sIHBhY2tldCBpcyBhbGxvY2F0ZWQgdXNpbmcgYHFydHJfYWxsb2NfY3RybF9wYWNrZXRgLCB3aGljaCB1c2VzIGBza2JfcHV0X3plcm9gIHRvIGZ1bGx5IHplcm8taW5pdGlhbGl6ZSB0aGUgcGFja2V0IHBheWxvYWQuIFRoZSBzdGFjay1hbGxvY2F0ZWQgYHN0cnVjdCBzb2NrYWRkcl9xcnRyYCB2YXJpYWJsZXMgKGBmcm9tYCBhbmQgYHRvYCkgYXJlIHVzZWQgdG8gcGFzcyBhZGRyZXNzZXMgdG8gYHFydHJfbm9kZV9lbnF1ZXVlYCwgd2hpY2ggb25seSByZWFkcyB0aGVpciBgc3Ffbm9kZWAgYW5kIGBzcV9wb3J0YCBmaWVsZHMgdG8gcG9wdWxhdGUgdGhlIHBhY2tldCBoZWFkZXIuIFRoZSBgc3RydWN0IHNvY2thZGRyX3FydHJgIGl0c2VsZiBpcyBub3QgY29waWVkIHRvIHRoZSBwYWNrZXQgb3IgdG8gdXNlcnNwYWNlLCBzbyBhbnkgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBwYWRkaW5nIGJ5dGVzIG9uIHRoZSBzdGFjayBhcmUgbmV2ZXIgcmVhZCBvciBsZWFrZWQuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLCBub3IgZG9lcyBpdCBtb2RpZnkgYm91bmRzIGNoZWNrcyBvciBsZW5ndGhzIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIG9yIGxvY2tpbmcgaXNzdWVzKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIG9yIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyNWM1N2JiNTg3YzJmY2I4NWQ4MTNmM2IzNDJmYjIyMzhmYTJlMjYyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAxNjoxMDo1NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9xcnRyL2FmX3FydHIuYyBiL25ldC9xcnRyL2FmX3FydHIuY1xuaW5kZXggZDAyZWY5YTc0YzNjYS4uN2FkYzBhMDUzMTI1NCAxMDA2NDRcbi0tLSBhL25ldC9xcnRyL2FmX3FydHIuY1xuKysrIGIvbmV0L3FydHIvYWZfcXJ0ci5jXG5AQCAtOSw2ICs5LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90ZXJtaW9zLmhcdTAwM2VcdC8qIEZvciBUSU9DSU5RL09VVFEgKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvd2FpdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvc29jay5oXHUwMDNlXG4gXG5AQCAtMTIwLDggKzEyMSwxMCBAQCBzdGF0aWMgREVGSU5FX1hBUlJBWV9BTExPQyhxcnRyX3BvcnRzKTtcbiAgKiBAbmlkOiBub2RlIGlkXG4gICogQHFydHJfdHhfZmxvdzogeGFycmF5IG9mIHFydHJfdHhfZmxvdywga2V5ZWQgYnkgbm9kZSBcdTAwM2NcdTAwM2MgMzIgfCBwb3J0XG4gICogQHFydHJfdHhfbG9jazogbG9jayBmb3IgcXJ0cl90eF9mbG93IGluc2VydHNcbisgKiBAaGVsbG9fc2VudDogaGVsbG8gcGFja2V0IHNlbmQgc3VjY2Vzc2Z1bFxuICAqIEByeF9xdWV1ZTogcmVjZWl2ZSBxdWV1ZVxuICAqIEBpdGVtOiBsaXN0IGl0ZW0gZm9yIGJyb2FkY2FzdCBsaXN0XG4rICogQHNheV9oZWxsbzogc2NoZWR1bGVkIHdvcmsgZm9yIHNlbmRpbmcgaGVsbG8gcGFja2V0XG4gICovXG4gc3RydWN0IHFydHJfbm9kZSB7XG4gXHRzdHJ1Y3QgbXV0ZXggZXBfbG9jaztcbkBAIC0xMzIsOCArMTM1LDExIEBAIHN0cnVjdCBxcnRyX25vZGUge1xuIFx0c3RydWN0IHhhcnJheSBxcnRyX3R4X2Zsb3c7XG4gXHRzdHJ1Y3QgbXV0ZXggcXJ0cl90eF9sb2NrOyAvKiBmb3IgcXJ0cl90eF9mbG93ICovXG4gXG4rXHRib29sIGhlbGxvX3NlbnQ7XG4rXG4gXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHJ4X3F1ZXVlO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBpdGVtO1xuK1x0c3RydWN0IHdvcmtfc3RydWN0IHNheV9oZWxsbztcbiB9O1xuIFxuIC8qKlxuQEAgLTE4Nyw2ICsxOTMsOCBAQCBzdGF0aWMgdm9pZCBfX3FydHJfbm9kZV9yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKVxuIFx0bGlzdF9kZWwoXHUwMDI2bm9kZS1cdTAwM2VpdGVtKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZxcnRyX25vZGVfbG9jayk7XG4gXG4rXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNm5vZGUtXHUwMDNlc2F5X2hlbGxvKTtcbitcbiBcdHNrYl9xdWV1ZV9wdXJnZShcdTAwMjZub2RlLVx1MDAzZXJ4X3F1ZXVlKTtcbiBcbiBcdC8qIEZyZWUgdHggZmxvdyBjb3VudGVycyAqL1xuQEAgLTM0MSw2ICszNDksMTQgQEAgc3RhdGljIGludCBxcnRyX25vZGVfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c2l6ZV90IGxlbiA9IHNrYi1cdTAwM2VsZW47XG4gXHRpbnQgcmMsIGNvbmZpcm1fcng7XG4gXG4rXHRtdXRleF9sb2NrKFx1MDAyNm5vZGUtXHUwMDNlZXBfbG9jayk7XG4rXHRpZiAoIW5vZGUtXHUwMDNlaGVsbG9fc2VudCBcdTAwMjZcdTAwMjYgdHlwZSAhPSBRUlRSX1RZUEVfSEVMTE8pIHtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5vZGUtXHUwMDNlZXBfbG9jayk7XG4rXHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcdG11dGV4X3VubG9jayhcdTAwMjZub2RlLVx1MDAzZWVwX2xvY2spO1xuK1xuIFx0Y29uZmlybV9yeCA9IHFydHJfdHhfd2FpdChub2RlLCB0by1cdTAwM2VzcV9ub2RlLCB0by1cdTAwM2VzcV9wb3J0LCB0eXBlKTtcbiBcdGlmIChjb25maXJtX3J4IFx1MDAzYyAwKSB7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuQEAgLTM3Miw2ICszODgsOCBAQCBzdGF0aWMgaW50IHFydHJfbm9kZV9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0cmMgPSBub2RlLVx1MDAzZWVwLVx1MDAzZXhtaXQobm9kZS1cdTAwM2VlcCwgc2tiKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRpZiAoIXJjIFx1MDAyNlx1MDAyNiB0eXBlID09IFFSVFJfVFlQRV9IRUxMTylcbitcdFx0XHRub2RlLVx1MDAzZWhlbGxvX3NlbnQgPSB0cnVlO1xuIFx0XHRtdXRleF91bmxvY2soXHUwMDI2bm9kZS1cdTAwM2VlcF9sb2NrKTtcbiBcdH1cbiBcdC8qIE5lZWQgdG8gZW5zdXJlIHRoYXQgYSBzdWJzZXF1ZW50IG1lc3NhZ2UgY2FycmllcyB0aGUgb3RoZXJ3aXNlIGxvc3RcbkBAIC0zNzksNiArMzk3LDkgQEAgc3RhdGljIGludCBxcnRyX25vZGVfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKHJjIFx1MDAyNlx1MDAyNiBjb25maXJtX3J4KVxuIFx0XHRxcnRyX3R4X2Zsb3dfZmFpbGVkKG5vZGUsIHRvLVx1MDAzZXNxX25vZGUsIHRvLVx1MDAzZXNxX3BvcnQpO1xuIFxuK1x0aWYgKHJjIFx1MDAyNlx1MDAyNiB0eXBlID09IFFSVFJfVFlQRV9IRUxMTylcbitcdFx0c2NoZWR1bGVfd29yayhcdTAwMjZub2RlLVx1MDAzZXNheV9oZWxsbyk7XG4rXG4gXHRyZXR1cm4gcmM7XG4gfVxuIFxuQEAgLTU3MCw2ICs1OTEsMzUgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpxcnRyX2FsbG9jX2N0cmxfcGFja2V0KHN0cnVjdCBxcnRyX2N0cmxfcGt0ICoqcGt0LFxuIFx0cmV0dXJuIHNrYjtcbiB9XG4gXG4rc3RhdGljIHZvaWQgcXJ0cl9oZWxsb193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbit7XG4rXHRzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciBmcm9tID0ge0FGX1FJUENSVFIsIDAsIFFSVFJfUE9SVF9DVFJMfTtcbitcdHN0cnVjdCBzb2NrYWRkcl9xcnRyIHRvID0ge0FGX1FJUENSVFIsIDAsIFFSVFJfUE9SVF9DVFJMfTtcbitcdHN0cnVjdCBxcnRyX2N0cmxfcGt0ICpwa3Q7XG4rXHRzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlO1xuK1x0c3RydWN0IHFydHJfc29jayAqY3RybDtcbitcdHN0cnVjdCBza19idWZmICpza2I7XG4rXG4rXHRub2RlID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBxcnRyX25vZGUsIHNheV9oZWxsbyk7XG4rXG4rXHQvKiBOUyBtdXN0IGJlIGJvdW5kIGJlZm9yZSB3ZSBjYW4gc2VuZCAqL1xuK1x0Y3RybCA9IHFydHJfcG9ydF9sb29rdXAoUVJUUl9QT1JUX0NUUkwpO1xuK1x0aWYgKCFjdHJsKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRza2IgPSBxcnRyX2FsbG9jX2N0cmxfcGFja2V0KFx1MDAyNnBrdCwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXNrYikge1xuK1x0XHRxcnRyX3BvcnRfcHV0KGN0cmwpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRwa3QtXHUwMDNlY21kID0gY3B1X3RvX2xlMzIoUVJUUl9UWVBFX0hFTExPKTtcbitcdGZyb20uc3Ffbm9kZSA9IHFydHJfbG9jYWxfbmlkO1xuK1x0dG8uc3Ffbm9kZSA9IG5vZGUtXHUwMDNlbmlkO1xuK1x0cXJ0cl9ub2RlX2VucXVldWUobm9kZSwgc2tiLCBRUlRSX1RZUEVfSEVMTE8sIFx1MDAyNmZyb20sIFx1MDAyNnRvKTtcbitcdHFydHJfcG9ydF9wdXQoY3RybCk7XG4rfVxuK1xuIC8qKlxuICAqIHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIoKSAtIHJlZ2lzdGVyIGEgbmV3IGVuZHBvaW50XG4gICogQGVwOiBlbmRwb2ludCB0byByZWdpc3RlclxuQEAgLTU5NSw2ICs2NDUsOSBAQCBpbnQgcXJ0cl9lbmRwb2ludF9yZWdpc3RlcihzdHJ1Y3QgcXJ0cl9lbmRwb2ludCAqZXAsIHVuc2lnbmVkIGludCBuaWQpXG4gXHRub2RlLVx1MDAzZW5pZCA9IFFSVFJfRVBfTklEX0FVVE87XG4gXHRub2RlLVx1MDAzZWVwID0gZXA7XG4gXG4rXHRub2RlLVx1MDAzZWhlbGxvX3NlbnQgPSBmYWxzZTtcbitcdElOSVRfV09SSyhcdTAwMjZub2RlLVx1MDAzZXNheV9oZWxsbywgcXJ0cl9oZWxsb193b3JrKTtcbitcbiBcdHhhX2luaXQoXHUwMDI2bm9kZS1cdTAwM2VxcnRyX3R4X2Zsb3cpO1xuIFx0bXV0ZXhfaW5pdChcdTAwMjZub2RlLVx1MDAzZXFydHJfdHhfbG9jayk7XG4gXG5AQCAtNjA1LDYgKzY1OCw5IEBAIGludCBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyKHN0cnVjdCBxcnRyX2VuZHBvaW50ICplcCwgdW5zaWduZWQgaW50IG5pZClcbiBcdG11dGV4X3VubG9jayhcdTAwMjZxcnRyX25vZGVfbG9jayk7XG4gXHRlcC1cdTAwM2Vub2RlID0gbm9kZTtcbiBcbitcdC8qIEluaXRpYXRlIEhFTExPIGhhbmRzaGFrZSBmcm9tIHRoZSBjb3JlIGxheWVyICovXG4rXHRzY2hlZHVsZV93b3JrKFx1MDAyNm5vZGUtXHUwMDNlc2F5X2hlbGxvKTtcbitcbiBcdHJldHVybiAwO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChxcnRyX2VuZHBvaW50X3JlZ2lzdGVyKTtcbkBAIC04NzksNiArOTM1LDExIEBAIHN0YXRpYyBpbnQgcXJ0cl9iY2FzdF9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNnFydHJfbm9kZV9sb2NrKTtcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgXHUwMDI2cXJ0cl9hbGxfbm9kZXMsIGl0ZW0pIHtcbitcdFx0LyogU2tpcCBub2RlcyB3aG9zZSBub2RlIElEIGlzIG5vdCB5ZXQga25vd247IHRoZXkgY2Fubm90XG4rXHRcdCAqIHJlY2VpdmUgYnJvYWRjYXN0IHBhY2tldHMgYmVmb3JlIHRoZSBIRUxMTyBoYW5kc2hha2UuXG4rXHRcdCAqL1xuK1x0XHRpZiAobm9kZS1cdTAwM2VuaWQgPT0gUVJUUl9FUF9OSURfQVVUTylcbitcdFx0XHRjb250aW51ZTtcbiBcdFx0c2tibiA9IHBza2JfY29weShza2IsIEdGUF9LRVJORUwpO1xuIFx0XHRpZiAoIXNrYm4pXG4gXHRcdFx0YnJlYWs7XG5kaWZmIC0tZ2l0IGEvbmV0L3FydHIvbnMuYyBiL25ldC9xcnRyL25zLmNcbmluZGV4IGIzZjliYmNmOWFiOWIuLjE0MjYyNjIzZDJkZDUgMTAwNjQ0XG4tLS0gYS9uZXQvcXJ0ci9ucy5jXG4rKysgYi9uZXQvcXJ0ci9ucy5jXG5AQCAtMjEyLDYgKzIxMiw3IEBAIHN0YXRpYyB2b2lkIGxvb2t1cF9ub3RpZnkoc3RydWN0IHNvY2thZGRyX3FydHIgKnRvLCBzdHJ1Y3QgcXJ0cl9zZXJ2ZXIgKnNydixcbiBcdFx0cHJfZXJyKFwiZmFpbGVkIHRvIHNlbmQgbG9va3VwIG5vdGlmaWNhdGlvblxcblwiKTtcbiB9XG4gXG4rLyogQW5ub3VuY2UgdGhlIGxpc3Qgb2Ygc2VydmVycyByZWdpc3RlcmVkIG9uIHRoZSBsb2NhbCBub2RlICovXG4gc3RhdGljIGludCBhbm5vdW5jZV9zZXJ2ZXJzKHN0cnVjdCBzb2NrYWRkcl9xcnRyICpzcSlcbiB7XG4gXHRzdHJ1Y3QgcXJ0cl9zZXJ2ZXIgKnNydjtcbkBAIC0zNDksMTUgKzM1MCw4IEBAIHN0YXRpYyBpbnQgc2F5X2hlbGxvKHN0cnVjdCBzb2NrYWRkcl9xcnRyICpkZXN0KVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tLyogQW5ub3VuY2UgdGhlIGxpc3Qgb2Ygc2VydmVycyByZWdpc3RlcmVkIG9uIHRoZSBsb2NhbCBub2RlICovXG4gc3RhdGljIGludCBjdHJsX2NtZF9oZWxsbyhzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqc3EpXG4ge1xuLVx0aW50IHJldDtcbi1cbi1cdHJldCA9IHNheV9oZWxsbyhzcSk7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuIFx0cmV0dXJuIGFubm91bmNlX3NlcnZlcnMoc3EpO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjEyOjQ1LjU1NzYyMjE3NFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3Mzc3ODA2MzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUVJUUiBIRUxMTyBIYW5kc2hha2UgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gdGhlIFF1YWxjb21tIElQQyBSb3V0ZXIgKFFSVFIpIHN1YnN5c3RlbS4gTXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgaXQncyBpbnRyb2R1Y2luZyBhIGBoZWxsb19zZW50YCBmbGFnIGFuZCBhIGBzYXlfaGVsbG9gIHdvcmsgc3RydWN0IHdpdGhpbiB0aGUgYHFydHJfbm9kZWAgc3RydWN0dXJlLiBUaGUgY29yZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgbW92aW5nIHRoZSBIRUxMTyBoYW5kc2hha2UgaW5pdGlhdGlvbiBmcm9tIHRoZSBuYW1lc2VydmljZSAoYG5ldC9xcnRyL25zLmNgKSBpbnRvIHRoZSBjb3JlIGxheWVyIChgbmV0L3FydHIvYWZfcXJ0ci5jYCkuIFRoaXMgbWFrZXMgc2Vuc2UgY29uY2VwdHVhbGx5OyBjZW50cmFsaXppbmcgY29yZSBmdW5jdGlvbmFsaXRpZXMgb2Z0ZW4gbGVhZHMgdG8gYmV0dGVyIG1hbmFnZW1lbnQuXG5cbk5vdywgaXQgY3JlYXRlcyBhIHdvcmsgaXRlbSwgYHFydHJfaGVsbG9fd29ya2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgaG93IHRoaXMgd29yayBpdGVtIGZ1bmN0aW9ucy4gTGV0J3Mgc2VlLi4uIGl0IGFwcGVhcnMgdGhlIHdvcmsgaXRlbSBnZXRzIHRyaWdnZXJlZCB3aGVuIGEgbmV3IG5vZGUgY29tZXMgb25saW5lLCBJIHByZXN1bWUuIEluc2lkZSBgcXJ0cl9oZWxsb193b3JrYCwgaXQgc2V0cyB1cCBhIGNvbnRyb2wgcGFja2V0IHRvIHNlbmQgYSBgUVJUUl9UWVBFX0hFTExPYCBtZXNzYWdlLiBJIHNlZSB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMgYXJlIGJlaW5nIGluaXRpYWxpemVkIHVzaW5nIGBzdHJ1Y3Qgc29ja2FkZHJfcXJ0cmAuIFRoZSBkZXN0aW5hdGlvbiBub2RlIElEIGlzIHRha2VuIGZyb20gdGhlIG5vZGUgb2JqZWN0IGl0c2VsZi4gQSBsb29rdXAgaXMgZG9uZSBmb3IgYFFSVFJfUE9SVF9DVFJMYCwgd2hpY2ggc2VlbXMgdG8gYmUgdGhlIGNvbnRyb2wgcG9ydCBmb3IgdGhlIFFSVFIgc3lzdGVtLiBUaGUgcGFja2V0IGlzIHRoZW4gYWxsb2NhdGVkLCBwb3B1bGF0ZWQgd2l0aCB0aGUgYFFSVFJfVFlQRV9IRUxMT2AgY29tbWFuZCwgYW5kIGVucXVldWVkLlxuXG5JJ20gbm90aW5nIHRoYXQgYHFydHJfYWxsb2NfY3RybF9wYWNrZXRgIGlzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgYWxsb2NhdGluZyB0aGUgYHNrYmAgYW5kIHNldHRpbmcgdGhlIGBwa3RgIHBvaW50ZXIuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIHdvcmtzLCBlc3BlY2lhbGx5IGl0cyBtZW1vcnkgYWxsb2NhdGlvbiBzdHJhdGVneSBhbmQgYW55IHBvdGVudGlhbCByZXNvdXJjZSBjb25zdHJhaW50cyBpdCBtaWdodCBpbnRyb2R1Y2UsIG9yIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgbG93ZXIgbmV0d29ya2luZyBsYXllcnMuIFRoZSBgcXJ0cl9ub2RlX2VucXVldWVgIGZ1bmN0aW9uIHdhcnJhbnRzIGNsb3NlIHNjcnV0aW55IHRvby4gSXQgc3VnZ2VzdHMgYXN5bmNocm9ub3VzIGNvbW11bmljYXRpb24gaXMgYmVpbmcgdXNlZCwgc28gSSBuZWVkIHRvIGNoZWNrIGhvdyBpdCBoYW5kbGVzIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBlcnJvciBjb25kaXRpb25zLCBhbmQgdGhlIGZsb3cgb2YgdGhlIGNvbnRyb2wgcGFja2V0cyB3aXRoaW4gdGhlIFFSVFIgc3Vic3lzdGVtLiBUaGlzIGRlc2lnbiBpcyBpbnRlcmVzdGluZy4gVGhpcyBtb3ZlIGNvdWxkIHBvdGVudGlhbGx5IHN0cmVhbWxpbmUgaG93IEhFTExPIG1lc3NhZ2VzIGFyZSBoYW5kbGVkLCBidXQgSSBuZWVkIHRvIGRpdmUgZGVlcGVyIGludG8gdGhlIGxvdy1sZXZlbCBkZXRhaWxzIG9mIHRob3NlIGNhbGxzIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MDcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMjo1Mi45MzU0MzE3MjZaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1OTE3NzI3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJxcnRyX2FsbG9jX2N0cmxfcGFja2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9xcnRyL2FmX3FydHIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcXJ0ci9hZl9xcnRyLmM9NTY2PUVYUE9SVF9TWU1CT0xfR1BMKHFydHJfZW5kcG9pbnRfcG9zdCk7XFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNTY4LS8qKlxcbm5ldC9xcnRyL2FmX3FydHIuYzo1Njk6ICogcXJ0cl9hbGxvY19jdHJsX3BhY2tldCgpIC0gYWxsb2NhdGUgY29udHJvbCBwYWNrZXQgc2tiXFxubmV0L3FydHIvYWZfcXJ0ci5jLTU3MC0gKiBAcGt0OiByZWZlcmVuY2UgdG8gcXJ0cl9jdHJsX3BrdCBwb2ludGVyXFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNTc3LSAqL1xcbm5ldC9xcnRyL2FmX3FydHIuYzo1Nzg6c3RhdGljIHN0cnVjdCBza19idWZmICpxcnRyX2FsbG9jX2N0cmxfcGFja2V0KHN0cnVjdCBxcnRyX2N0cmxfcGt0ICoqcGt0LFxcbm5ldC9xcnRyL2FmX3FydHIuYy01NzktXFx0XFx0XFx0XFx0XFx0ICAgICAgZ2ZwX3QgZmxhZ3MpXFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmM9NTk0PXN0YXRpYyB2b2lkIHFydHJfaGVsbG9fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjA5LVxcbm5ldC9xcnRyL2FmX3FydHIuYzo2MTA6XFx0c2tiID0gcXJ0cl9hbGxvY19jdHJsX3BhY2tldChcXHUwMDI2cGt0LCBHRlBfS0VSTkVMKTtcXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjExLVxcdGlmICghc2tiKSB7XFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmM9NjcyPXZvaWQgcXJ0cl9lbmRwb2ludF91bnJlZ2lzdGVyKHN0cnVjdCBxcnRyX2VuZHBvaW50ICplcClcXG4tLVxcbm5ldC9xcnRyL2FmX3FydHIuYy02OTQtXFx0XFx0c3JjLnNxX25vZGUgPSBpdGVyLmluZGV4O1xcbm5ldC9xcnRyL2FmX3FydHIuYzo2OTU6XFx0XFx0c2tiID0gcXJ0cl9hbGxvY19jdHJsX3BhY2tldChcXHUwMDI2cGt0LCBHRlBfQVRPTUlDKTtcXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjk2LVxcdFxcdGlmIChza2IpIHtcXG4tLVxcbm5ldC9xcnRyL2FmX3FydHIuYz03NDE9c3RhdGljIHZvaWQgcXJ0cl9wb3J0X3JlbW92ZShzdHJ1Y3QgcXJ0cl9zb2NrICppcGMpXFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNzUxLVxcbm5ldC9xcnRyL2FmX3FydHIuYzo3NTI6XFx0c2tiID0gcXJ0cl9hbGxvY19jdHJsX3BhY2tldChcXHUwMDI2cGt0LCBHRlBfS0VSTkVMKTtcXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNzUzLVxcdGlmIChza2IpIHtcXG4tLVxcbm5ldC9xcnRyL2FmX3FydHIuYz0xMDU5PXN0YXRpYyBpbnQgcXJ0cl9zZW5kX3Jlc3VtZV90eChzdHJ1Y3QgcXJ0cl9jYiAqY2IpXFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmMtMTA3MS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmM6MTA3MjpcXHRza2IgPSBxcnRyX2FsbG9jX2N0cmxfcGFja2V0KFxcdTAwMjZwa3QsIEdGUF9LRVJORUwpO1xcbm5ldC9xcnRyL2FmX3FydHIuYy0xMDczLVxcdGlmICghc2tiKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjEyOjUzLjI5NDYxNTIwOVoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzU0MjQ3NzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgcXJ0cl9hbGxvY19jdHJsX3BhY2tldGAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb3JlIHB1cnBvc2UgYW5kIGhvdyBpdCBmaXRzIHdpdGhpbiB0aGUgbGFyZ2VyIFFSVFIgZnJhbWV3b3JrLiBGcm9tIG15IGV4cGVyaWVuY2Ugd2l0aCBtZXNzYWdlIHBhc3Npbmcgc3lzdGVtcywgdGhpcyBsaWtlbHkgaGFuZGxlcyBhbGxvY2F0aW9uIG9mIGNvbnRyb2wgcGFja2V0cywgd2hpY2ggYXJlIHByb2JhYmx5IHVzZWQgZm9yIHNwZWNpZmljIG1hbmFnZW1lbnQgb3Igc2V0dXAgdGFza3Mgd2l0aGluIHRoZSBRUlRSIHByb3RvY29sLiBJJ20gZXhwZWN0aW5nIHRoaXMgaXMgYSBjcml0aWNhbCBmdW5jdGlvbjsgaXQncyB0aGUgZ2F0ZXdheSBmb3Igc2VuZGluZyBhbmQgcmVjZWl2aW5nIGNvbnRyb2wgbWVzc2FnZXMsIGFuZCBpbmVmZmljaWVudCBhbGxvY2F0aW9uIGNvdWxkIGVhc2lseSBiZWNvbWUgYSBib3R0bGVuZWNrLiBJJ20gYWxzbyBpbnRlcmVzdGVkIGluIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBtZW1vcnkgbWFuYWdlbWVudCDigJMgYXJlIHdlIHRhbGtpbmcgYWJvdXQgc2xhYiBhbGxvY2F0aW9uLCBhIGN1c3RvbSBwb29sLCBvciBqdXN0IHBsYWluIGBrbWFsbG9jYD8gRG9lcyBpdCBoYW5kbGUgcG90ZW50aWFsIGZhaWx1cmUgZ3JhY2VmdWxseSwgYW5kIGlmIHNvLCBob3c/IEknbSBhbnRpY2lwYXRpbmcgdGhhdCB3ZSdsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIG1lbW9yeSBsZWFrcyBvciByYWNlIGNvbmRpdGlvbnMsIHRoaXMgaXMgY3JpdGljYWwgZnJvbSBhIHNlY3VyaXR5IGFzcGVjdC4gS25vd2luZyB0aGUgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmVzIGFuZCB0aGUgc2l6ZSBvZiB0aGVzZSBjb250cm9sIHBhY2tldHMgaXMgYWxzbyBrZXkg4oCTIGFyZSB0aGV5IGZpeGVkLXNpemUsIG9yIGRvZXMgdGhpcyBmdW5jdGlvbiBhbHNvIGhhbmRsZSB2YXJpYWJsZS1sZW5ndGggbWVzc2FnZXM/IEFyZSB0aGVyZSBhbnkgYXNzb2NpYXRlZCBsb2NrcyBvciBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyB3aXRoaW4gdGhpcyBmdW5jdGlvbiwgYW5kIGlmIHNvIHdoYXQgaXMgdGhlaXIgcHVycG9zZT8gTGV0IG1lIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIGFueSBjb21tZW50cyB3aXRoaW4gdGhlIGNvZGUsIGFuZCBpZiB0aGVyZSBhcmUgbm9uZSwgSSBhbSBnb2luZyB0byBoYXZlIHRvIG1ha2UgaW5mZXJlbmNlcyBiYXNlZCBvbiB0aGUgc291cmNlIGNvZGUsIGFuZCBpdHMgcmVsYXRlZCB1c2FnZS4gSSdtIHJlYWR5IHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZCB0aGlzIGluIGRldGFpbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU1OSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjEyOjU3LjA0ODg2NTU0OVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvcXJ0ci9hZl9xcnRyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTc4LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTc4OlxcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcXJ0cl9hbGxvY19jdHJsX3BhY2tldChzdHJ1Y3QgcXJ0cl9jdHJsX3BrdCAqKnBrdCxcXG4gNTc5OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGdmcF90IGZsYWdzKVxcbiA1ODA6XFx0e1xcbiA1ODE6XFx0XFx0Y29uc3QgaW50IHBrdF9sZW4gPSBzaXplb2Yoc3RydWN0IHFydHJfY3RybF9wa3QpO1xcbiA1ODI6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gNTgzOlxcdFxcbiA1ODQ6XFx0XFx0c2tiID0gYWxsb2Nfc2tiKFFSVFJfSERSX01BWF9TSVpFICsgcGt0X2xlbiwgZmxhZ3MpO1xcbiA1ODU6XFx0XFx0aWYgKCFza2IpXFxuIDU4NjpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNTg3OlxcdFxcbiA1ODg6XFx0XFx0c2tiX3Jlc2VydmUoc2tiLCBRUlRSX0hEUl9NQVhfU0laRSk7XFxuIDU4OTpcXHRcXHQqcGt0ID0gc2tiX3B1dF96ZXJvKHNrYiwgcGt0X2xlbik7XFxuIDU5MDpcXHRcXG4gNTkxOlxcdFxcdHJldHVybiBza2I7XFxuIDU5MjpcXHR9XFxuIDU5MzpcXHRcXG4gNTk0OlxcdHN0YXRpYyB2b2lkIHFydHJfaGVsbG9fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIDU5NTpcXHR7XFxuIDU5NjpcXHRcXHRzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciBmcm9tID0ge0FGX1FJUENSVFIsIDAsIFFSVFJfUE9SVF9DVFJMfTtcXG4gNTk3OlxcdFxcdHN0cnVjdCBzb2NrYWRkcl9xcnRyIHRvID0ge0FGX1FJUENSVFIsIDAsIFFSVFJfUE9SVF9DVFJMfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MTI6NTcuMDQ4OTQ4NzI5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxNTk0NTg4MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBRUlRSIENvbnRyb2wgUGFja2V0IEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoaXMgYHFydHJfYWxsb2NfY3RybF9wYWNrZXRgIGZ1bmN0aW9uIHdvcmtzLiBJdCdzIHVzaW5nIGBza2JfcHV0X3plcm9gLCB3aGljaCBpcyBhIHByZXR0eSBzdGFuZGFyZCBtZXRob2QuIFRoaXMgbWVhbnMgdGhlIGBzdHJ1Y3QgcXJ0cl9jdHJsX3BrdGAgSSdtIGFsbG9jYXRpbmcgaXMgY29tcGxldGVseSB6ZXJvZWQgb3V0IGluaXRpYWxseSDigJMgZ29vZCwgcHJldmVudHMgcG90ZW50aWFsIGdhcmJhZ2UgZGF0YSBpc3N1ZXMuIEkgc2VlIGBxcnRyX2hlbGxvX3dvcmtgIHRoZW4gc2V0cyBgcGt0LVx1MDAzZWNtZCA9IGNwdV90b19sZTMyKFFSVFJfVFlQRV9IRUxMTyk7YC4gTWFrZXMgc2Vuc2UsIHRoZSBjb21tYW5kIHR5cGUgbmVlZHMgdG8gYmUgc2V0LiBBbmQgdGhlIHJlc3Qgb2YgdGhlIHBhY2tldCByZW1haW5zIHplcm9lZC5cblxuTm93LCBJJ20gbm90aW5nIHRoZSBgZnJvbWAgYW5kIGB0b2AgYXJlIGluaXRpYWxpemVkIHdpdGggYHtBRl9RSVBDUlRSLCAwLCBRUlRSX1BPUlRfQ1RSTH1gLiBUaGlzIGxvb2tzIGxpa2UgdGhlIHN0YW5kYXJkIGFkZHJlc3Mgc3RydWN0dXJlIGZvciBRUlRSLiBCdXQgd2FpdCwgYHN0cnVjdCBzb2NrYWRkcl9xcnRyYC4uLiBsZXQgbWUgcmVjYWxsLCB0aGF0IGhhcyBmaWVsZHMgZm9yIGBzcV9mYW1pbHlgLCBgc3Ffbm9kZWAsIGFuZCBgc3FfcG9ydGAuXG5cblRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlIGlzOiBhcmUgdGhlcmUgYW55IHBhZGRpbmcgYnl0ZXMgaW4gYHN0cnVjdCBzb2NrYWRkcl9xcnRyYD8gVGhpcyBpcyB0aGUga2luZCBvZiBkZXRhaWwgdGhhdCBjYW4gYml0ZSB5b3UgbGF0ZXIuIElmIHRoZXJlJ3MgcGFkZGluZywgYW5kIHRoZSBjb2RlIG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IGNvbnRpZ3VvdXMgbWVtb3J5LCB0aGluZ3MgY291bGQgZ28gc2lkZXdheXMuIE5lZWQgdG8gYmUgc3VyZSBhYm91dCB0aGUgc3RydWN0dXJlJ3MgZXhhY3QgbGF5b3V0LiBSaWdodCwgdGltZSB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IHNvY2thZGRyX3FydHJgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjQxLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTczLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MTM6MDQuMjA4NDEyMjU1WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDgxODAxODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IHNvY2thZGRyX3FydHIgXFxcXHtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS91YXBpL2xpbnV4L3FydHIuaC0xMC1cXG5pbmNsdWRlL3VhcGkvbGludXgvcXJ0ci5oOjExOnN0cnVjdCBzb2NrYWRkcl9xcnRyIHtcXG5pbmNsdWRlL3VhcGkvbGludXgvcXJ0ci5oLTEyLVxcdF9fa2VybmVsX3NhX2ZhbWlseV90IHNxX2ZhbWlseTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MTM6MDQuNDE2NTk3NjQ0WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNjIxNTgxMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBpbml0aWFsIHRob3VnaHRzOlxuXG4qKlBlZXJpbmcgaW50byB0aGUgQ29yZSBvZiBRUlRSKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIGRlbHZlIGludG8gdGhlIG5pdHR5LWdyaXR0eSBvZiB0aGUgUVJUUiBrZXJuZWwgaW50ZXJmYWNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyB0aGluZyBvcGVyYXRlcyBhdCBhIGZ1bmRhbWVudGFsIGxldmVsLCBzbyB0aGUgZmlyc3Qgc3RlcCBpcyBhbHdheXMgdG8gZXhhbWluZSB0aGUgaGVhZGVyIGZpbGUuIEkga25vdyB0aGF0IGBpbmNsdWRlL3VhcGkvbGludXgvcXJ0ci5oYCBob2xkcyB0aGUga2V5IGRlZmluaXRpb25zLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGRhdGEgc3RydWN0dXJlcywgY29uc3RhbnRzLCBhbmQgZnVuY3Rpb24gcHJvdG90eXBlcyB0aGF0IGZvcm0gdGhlIGZvdW5kYXRpb24gb2YgdGhlIFVzZXItc3BhY2UtdG8tS2VybmVsLXNwYWNlIGFuZCBLZXJuZWwtc3BhY2UtdG8tS2VybmVsLXNwYWNlIGNvbW11bmljYXRpb24gcHJvdG9jb2wuIEkgd2FudCB0byBzZWUgaG93IG1lc3NhZ2VzIGFyZSBzdHJ1Y3R1cmVkLCBob3cgZW5kcG9pbnRzIGFyZSBkZWZpbmVkLCBhbmQgd2hhdCB0eXBlcyBvZiBvcGVyYXRpb25zIGFyZSBzdXBwb3J0ZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBtZW50YWwgbW9kZWwgb2YgdGhlIEFQSSdzIGFyY2hpdGVjdHVyZSBhbmQgdGhlIHVuZGVybHlpbmcgcHJpbmNpcGxlcyB0aGF0IGRyaXZlIGl0cyBvcGVyYXRpb24uIExldCdzIHNlZSB3aGF0IHNlY3JldHMgdGhpcyBoZWFkZXIgZmlsZSByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODIyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MTM6MDguNDc4NzU4OTcxWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzNzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvdWFwaS9saW51eC9xcnRyLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTEsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMTE6XFx0c3RydWN0IHNvY2thZGRyX3FydHIge1xcbiAgMTI6XFx0XFx0X19rZXJuZWxfc2FfZmFtaWx5X3Qgc3FfZmFtaWx5O1xcbiAgMTM6XFx0XFx0X191MzIgc3Ffbm9kZTtcXG4gIDE0OlxcdFxcdF9fdTMyIHNxX3BvcnQ7XFxuICAxNTpcXHR9O1xcbiAgMTY6XFx0XFxuICAxNzpcXHRlbnVtIHFydHJfcGt0X3R5cGUge1xcbiAgMTg6XFx0XFx0UVJUUl9UWVBFX0RBVEFcXHRcXHQ9IDEsXFxuICAxOTpcXHRcXHRRUlRSX1RZUEVfSEVMTE9cXHRcXHQ9IDIsXFxuICAyMDpcXHRcXHRRUlRSX1RZUEVfQllFXFx0XFx0PSAzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMzowOC40Nzg4NDU4NDFaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM1MDc0NTU2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIFBhZGRpbmcgSXNzdWVzIGluIFFSVFIgU29ja2V0IFN0cnVjdHVyZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYF9fa2VybmVsX3NhX2ZhbWlseV90YCB0eXBlLCBhbmQgaXQncyBhbG1vc3QgYWx3YXlzIGEgMi1ieXRlIGB1bnNpZ25lZCBzaG9ydGAuIFRoZW4gdGhlcmUncyB0aGUgYHNxX25vZGVgIGZpZWxkLCB3aGljaCBpcyBhIDQtYnl0ZSBgX191MzJgLiBIbW0sIHRoYXQgbWVhbnMgdGhlcmUncyBwcm9iYWJseSAyIGJ5dGVzIG9mIHBhZGRpbmcgYmV0d2VlbiBgc3FfZmFtaWx5YCBhbmQgYHNxX25vZGVgIGluIHRoZSBgc29ja2FkZHJgIHN0cnVjdHVyZS4gSSBuZWVkIHRvIGJlIHN1cmUuXG5cbldhaXQsIG5vdyBJIHNlZSB0aGUgYHN0cnVjdCBzb2NrYWRkcl9xcnRyIGZyb20gPSB7QUZfUUlQQ1JUUiwgMCwgUVJUUl9QT1JUX0NUUkx9O2AgZGVjbGFyYXRpb24uIFRoaXMgaXMgYSBsb2NhbCB2YXJpYWJsZSBvbiB0aGUgc3RhY2suIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHdoZXRoZXIgdGhpcyBzdHJ1Y3R1cmUsIHRoaXMgYHNvY2thZGRyX3FydHJgLCBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlIG9yIGlmIGl0J3Mgc2VudCBvdmVyIHRoZSBuZXR3b3JrLiBJZiBzbywgcGFkZGluZyBjb3VsZCBjYXVzZSBwcm9ibGVtcywgYW5kIEkgbmVlZCB0byBjb25zaWRlciBwb3RlbnRpYWwgZW5kaWFubmVzcyBpc3N1ZXMsIG9mIGNvdXJzZS4gTGV0J3MgZGlnIGRlZXBlciB0byBzZWUgZXhhY3RseSB3aGVyZSBhbmQgaG93IHRoaXMgYHNvY2thZGRyX3FydHJgIHN0cnVjdHVyZSBpcyBoYW5kbGVkLiBTcGVjaWZpY2FsbHksIGxldCdzIHRyYWNlIHRoaXMgdG8gdGhlIGBxcnRyX25vZGVfZW5xdWV1ZWAgZnVuY3Rpb24uIEkgd2lsbCBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBoYXBwZW5zIHRvIHRoZSBkYXRhLiBJJ20gZ29pbmcgdG8gbG9vayB0aHJvdWdoIHRoZSBzdXJyb3VuZGluZyBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjI4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MTM6MTIuODI5NTk0MTc5WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzAxNjkwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJxcnRyX25vZGVfZW5xdWV1ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcXJ0ci9hZl9xcnRyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3FydHIvYWZfcXJ0ci5jPTMyOT1zdGF0aWMgdm9pZCBxcnRyX3R4X2Zsb3dfZmFpbGVkKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIGludCBkZXN0X25vZGUsXFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmMtMzQzLS8qIFBhc3MgYW4gb3V0Z29pbmcgcGFja2V0IHNvY2tldCBidWZmZXIgdG8gdGhlIGVuZHBvaW50IGRyaXZlci4gKi9cXG5uZXQvcXJ0ci9hZl9xcnRyLmM6MzQ0OnN0YXRpYyBpbnQgcXJ0cl9ub2RlX2VucXVldWUoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvcXJ0ci9hZl9xcnRyLmMtMzQ1LVxcdFxcdFxcdCAgICAgaW50IHR5cGUsIHN0cnVjdCBzb2NrYWRkcl9xcnRyICpmcm9tLFxcbi0tXFxubmV0L3FydHIvYWZfcXJ0ci5jPTU5ND1zdGF0aWMgdm9pZCBxcnRyX2hlbGxvX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3FydHIvYWZfcXJ0ci5jLTYxOC1cXHR0by5zcV9ub2RlID0gbm9kZS1cXHUwMDNlbmlkO1xcbm5ldC9xcnRyL2FmX3FydHIuYzo2MTk6XFx0cXJ0cl9ub2RlX2VucXVldWUobm9kZSwgc2tiLCBRUlRSX1RZUEVfSEVMTE8sIFxcdTAwMjZmcm9tLCBcXHUwMDI2dG8pO1xcbm5ldC9xcnRyL2FmX3FydHIuYy02MjAtXFx0cXJ0cl9wb3J0X3B1dChjdHJsKTtcXG4tLVxcbm5ldC9xcnRyL2FmX3FydHIuYz05MzA9c3RhdGljIGludCBxcnRyX2JjYXN0X2VucXVldWUoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9xcnRyL2FmX3FydHIuYy05NDYtXFx0XFx0c2tiX3NldF9vd25lcl93KHNrYm4sIHNrYi1cXHUwMDNlc2spO1xcbm5ldC9xcnRyL2FmX3FydHIuYzo5NDc6XFx0XFx0cXJ0cl9ub2RlX2VucXVldWUobm9kZSwgc2tibiwgdHlwZSwgZnJvbSwgdG8pO1xcbm5ldC9xcnRyL2FmX3FydHIuYy05NDgtXFx0fVxcbi0tXFxubmV0L3FydHIvYWZfcXJ0ci5jPTk1Nj1zdGF0aWMgaW50IHFydHJfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmMtMTAxNi1cXHRcXHR9XFxubmV0L3FydHIvYWZfcXJ0ci5jOjEwMTc6XFx0XFx0ZW5xdWV1ZV9mbiA9IHFydHJfbm9kZV9lbnF1ZXVlO1xcbm5ldC9xcnRyL2FmX3FydHIuYy0xMDE4LVxcdH1cXG4tLVxcbm5ldC9xcnRyL2FmX3FydHIuYz0xMDU5PXN0YXRpYyBpbnQgcXJ0cl9zZW5kX3Jlc3VtZV90eChzdHJ1Y3QgcXJ0cl9jYiAqY2IpXFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmMtMTA4MS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmM6MTA4MjpcXHRyZXQgPSBxcnRyX25vZGVfZW5xdWV1ZShub2RlLCBza2IsIFFSVFJfVFlQRV9SRVNVTUVfVFgsIFxcdTAwMjZsb2NhbCwgXFx1MDAyNnJlbW90ZSk7XFxubmV0L3FydHIvYWZfcXJ0ci5jLTEwODMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjEzOjEyLjkwNjYxNjM4MVoiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTE4NDQxNTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgcXJ0cl9ub2RlX2VucXVldWVgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHF1ZXVpbmcgbWVjaGFuaXNtIHdpdGhpbiB0aGUgUU1JIFJlYWwtVGltZSAoUVJUUikgZnJhbWV3b3JrLiBNeSBleHBlcnRpc2UgbGllcyBpbiBlbWJlZGRlZCBzeXN0ZW1zIGFuZCBsb3ctbGV2ZWwgY29tbXVuaWNhdGlvbiBwcm90b2NvbHMsIHNvIHRoaXMgc2hvdWxkIGJlIHdpdGhpbiBteSB3aGVlbGhvdXNlLiBJJ20gZm9jdXNpbmcgb24gaG93IG1lc3NhZ2VzIGFyZSBlbnF1ZXVlZC4gSeKAmWxsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciByYWNlIGNvbmRpdGlvbnMgdGhpcyBpbXBsZW1lbnRhdGlvbiBtaWdodCBpbnRyb2R1Y2UsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhpcyBpcyBhIHJlYWwtdGltZSBzeXN0ZW0uIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyBxdWVzdGlvbnMgYWJvdXQgaW50ZXJydXB0IGhhbmRsaW5nIOKAkyBpcyB0aGlzIGF0b21pYz8gQXJlIHRoZXJlIHNwaW5sb2Nrcz8gSSB3YW50IHRvIHNlZSB0aGUgbG9ja2luZyBtZWNoYW5pc21zLCBpZiBhbnksIHRoYXQgYXJlIHVzZWQgdG8gcHJvdGVjdCB0aGUgcXVldWUgZnJvbSBjb25jdXJyZW50IGFjY2VzcywgZXNwZWNpYWxseSBpZiBkZWFsaW5nIHdpdGggbXVsdGlwbGUgcHJvY2Vzc29ycyBvciB0aHJlYWRzLiBBbmQgY3JpdGljYWxseSwgaXMgdGhlcmUgYW55IHByaW9yaXR5IG1hbmFnZW1lbnQgYmVpbmcgdXNlZCwgYW5kIGlmIHNvIGhvdz8gSSdsbCBhbHNvIGJlIGNvbnNpZGVyaW5nIHRoZSBpbXBsaWNhdGlvbnMgb2YgZXJyb3IgaGFuZGxpbmcgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBiYWNrLW9mZiBzdHJhdGVnaWVzIGVtcGxveWVkIGlmIHRoZSBxdWV1ZSBpcyBmdWxsIG9yIGV4cGVyaWVuY2luZyBjb250ZW50aW9uLiBUaGUgb3ZlcmFsbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgYXJlIGZyb250IG9mIG1pbmQuIFRoaXMga2luZCBvZiBsb3ctbGV2ZWwgZGV0YWlsIGlzIHdoZXJlIHRoZSByZWFsIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMgY2FuIGJlIGZvdW5kLCBvciB3aGVyZSBjcml0aWNhbCBidWdzIGNhbiBoaWRlLiBMZXTigJlzIHNlZSB3aGF0J3MgdW5kZXIgdGhlIGhvb2QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzMzEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMzoxOS44MjUwNjkyMzRaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAzMjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9xcnRyL2FmX3FydHIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNDQsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNDQ6XFx0c3RhdGljIGludCBxcnRyX25vZGVfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAzNDU6XFx0XFx0XFx0XFx0ICAgICBpbnQgdHlwZSwgc3RydWN0IHNvY2thZGRyX3FydHIgKmZyb20sXFxuIDM0NjpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBzb2NrYWRkcl9xcnRyICp0bylcXG4gMzQ3OlxcdHtcXG4gMzQ4OlxcdFxcdHN0cnVjdCBxcnRyX2hkcl92MSAqaGRyO1xcbiAzNDk6XFx0XFx0c2l6ZV90IGxlbiA9IHNrYi1cXHUwMDNlbGVuO1xcbiAzNTA6XFx0XFx0aW50IHJjLCBjb25maXJtX3J4O1xcbiAzNTE6XFx0XFxuIDM1MjpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZub2RlLVxcdTAwM2VlcF9sb2NrKTtcXG4gMzUzOlxcdFxcdGlmICghbm9kZS1cXHUwMDNlaGVsbG9fc2VudCBcXHUwMDI2XFx1MDAyNiB0eXBlICE9IFFSVFJfVFlQRV9IRUxMTykge1xcbiAzNTQ6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZub2RlLVxcdTAwM2VlcF9sb2NrKTtcXG4gMzU1OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAzNTY6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDM1NzpcXHRcXHR9XFxuIDM1ODpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm5vZGUtXFx1MDAzZWVwX2xvY2spO1xcbiAzNTk6XFx0XFxuIDM2MDpcXHRcXHRjb25maXJtX3J4ID0gcXJ0cl90eF93YWl0KG5vZGUsIHRvLVxcdTAwM2VzcV9ub2RlLCB0by1cXHUwMDNlc3FfcG9ydCwgdHlwZSk7XFxuIDM2MTpcXHRcXHRpZiAoY29uZmlybV9yeCBcXHUwMDNjIDApIHtcXG4gMzYyOlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAzNjM6XFx0XFx0XFx0cmV0dXJuIGNvbmZpcm1fcng7XFxuIDM2NDpcXHRcXHR9XFxuIDM2NTpcXHRcXG4gMzY2OlxcdFxcdGhkciA9IHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpoZHIpKTtcXG4gMzY3OlxcdFxcdGhkci1cXHUwMDNldmVyc2lvbiA9IGNwdV90b19sZTMyKFFSVFJfUFJPVE9fVkVSXzEpO1xcbiAzNjg6XFx0XFx0aGRyLVxcdTAwM2V0eXBlID0gY3B1X3RvX2xlMzIodHlwZSk7XFxuIDM2OTpcXHRcXHRoZHItXFx1MDAzZXNyY19ub2RlX2lkID0gY3B1X3RvX2xlMzIoZnJvbS1cXHUwMDNlc3Ffbm9kZSk7XFxuIDM3MDpcXHRcXHRoZHItXFx1MDAzZXNyY19wb3J0X2lkID0gY3B1X3RvX2xlMzIoZnJvbS1cXHUwMDNlc3FfcG9ydCk7XFxuIDM3MTpcXHRcXHRpZiAodG8tXFx1MDAzZXNxX3BvcnQgPT0gUVJUUl9QT1JUX0NUUkwpIHtcXG4gMzcyOlxcdFxcdFxcdGhkci1cXHUwMDNlZHN0X25vZGVfaWQgPSBjcHVfdG9fbGUzMihub2RlLVxcdTAwM2VuaWQpO1xcbiAzNzM6XFx0XFx0XFx0aGRyLVxcdTAwM2Vkc3RfcG9ydF9pZCA9IGNwdV90b19sZTMyKFFSVFJfUE9SVF9DVFJMKTtcXG4gMzc0OlxcdFxcdH0gZWxzZSB7XFxuIDM3NTpcXHRcXHRcXHRoZHItXFx1MDAzZWRzdF9ub2RlX2lkID0gY3B1X3RvX2xlMzIodG8tXFx1MDAzZXNxX25vZGUpO1xcbiAzNzY6XFx0XFx0XFx0aGRyLVxcdTAwM2Vkc3RfcG9ydF9pZCA9IGNwdV90b19sZTMyKHRvLVxcdTAwM2VzcV9wb3J0KTtcXG4gMzc3OlxcdFxcdH1cXG4gMzc4OlxcdFxcbiAzNzk6XFx0XFx0aGRyLVxcdTAwM2VzaXplID0gY3B1X3RvX2xlMzIobGVuKTtcXG4gMzgwOlxcdFxcdGhkci1cXHUwMDNlY29uZmlybV9yeCA9IGNwdV90b19sZTMyKCEhY29uZmlybV9yeCk7XFxuIDM4MTpcXHRcXG4gMzgyOlxcdFxcdHJjID0gc2tiX3B1dF9wYWR0byhza2IsIEFMSUdOKGxlbiwgNCkgKyBzaXplb2YoKmhkcikpO1xcbiAzODM6XFx0XFxuIDM4NDpcXHRcXHRpZiAoIXJjKSB7XFxuIDM4NTpcXHRcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZub2RlLVxcdTAwM2VlcF9sb2NrKTtcXG4gMzg2OlxcdFxcdFxcdHJjID0gLUVOT0RFVjtcXG4gMzg3OlxcdFxcdFxcdGlmIChub2RlLVxcdTAwM2VlcClcXG4gMzg4OlxcdFxcdFxcdFxcdHJjID0gbm9kZS1cXHUwMDNlZXAtXFx1MDAzZXhtaXQobm9kZS1cXHUwMDNlZXAsIHNrYik7XFxuIDM4OTpcXHRcXHRcXHRlbHNlXFxuIDM5MDpcXHRcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gMzkxOlxcdFxcdFxcdGlmICghcmMgXFx1MDAyNlxcdTAwMjYgdHlwZSA9PSBRUlRSX1RZUEVfSEVMTE8pXFxuIDM5MjpcXHRcXHRcXHRcXHRub2RlLVxcdTAwM2VoZWxsb19zZW50ID0gdHJ1ZTtcXG4gMzkzOlxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bm9kZS1cXHUwMDNlZXBfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjEzOjE5LjgyNTI3NDQ3NFoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjgwMzczNjUzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgUVJUUiBIZWxsbyBIYW5kc2hha2UgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gTGV0J3MgdHJhY2UgbXkgdGhvdWdodCBwcm9jZXNzIHN0ZXAgYnkgc3RlcCwgYXMgSSBkbyBhIGRlZXAgZGl2ZSBoZXJlLlxuXG5GaXJzdCwgYHFydHJfbm9kZV9lbnF1ZXVlYC4gSSBjb25maXJtZWQgdGhhdCBvbmx5IGBmcm9tLVx1MDAzZXNxX25vZGVgIGFuZCBgZnJvbS1cdTAwM2VzcV9wb3J0YCBhcmUgcmVhZCBmcm9tIHRoZSBgc3RydWN0IHNvY2thZGRyX3FydHJgIHN0cnVjdHVyZSwgYW5kIGl0IGNvcnJlY3RseSBpZ25vcmVzIHRoZSB1bmluaXRpYWxpemVkIHBhZGRpbmcuIE5vIGxlYWsgdGhlcmUuIEFuZCB3aXRoIGBza2JfcHV0X3BhZHRvYCwgdGhhdCBpcyBkb2luZyBwYWRkaW5nIHdpdGggemVyb2VzLCBzbyBubyBwcm9ibGVtIHRoZXJlLlxuXG5UaGVuLCBJIGxvb2tlZCBjbG9zZWx5IGF0IGBxcnRyX2FsbG9jX2N0cmxfcGFja2V0YC4gVGhlIGBza2JfcHV0X3plcm9gIGZ1bmN0aW9uIGVuc3VyZXMgdGhhdCB0aGUgZW50aXJlIGBzdHJ1Y3QgcXJ0cl9jdHJsX3BrdGAgaXMgemVyb2VkLiBUaGlzIGlzIGltcG9ydGFudDogbm8gdW5pbml0aWFsaXplZCB2YWx1ZXMgd2l0aGluIHRoZSBjb250cm9sIHBhY2tldCBpdHNlbGYuXG5cbkkgY2FyZWZ1bGx5IGV4YW1pbmVkIHRoZSBjb2RlIGFkZGVkIGluIHRoZSBwYXRjaC4gVGhlIG5ldyBjaGVjayBpbiBgcXJ0cl9ub2RlX2VucXVldWVgIHRoYXQgZHJvcHMgcGFja2V0cyBpZiBgaGVsbG9fc2VudGAgaXMgZmFsc2UgYW5kIGl0J3Mgbm90IGEgSEVMTE8gcGFja2V0IGlzIGdvb2QuIFRoZSBmb2xsb3ctdXAgY29kZSBibG9jayBpbiB0aGUgc2FtZSBmdW5jdGlvbiB0aGVuIHNldHMgYGhlbGxvX3NlbnRgIHRvIHRydWUgd2hlbiB0aGUgSEVMTE8gcGFja2V0IHRyYW5zbWl0cyBzdWNjZXNzZnVsbHkuIEFuZCwgaWYgdHJhbnNtaXNzaW9uIGZhaWxzLCBpdCByZXNjaGVkdWxlcyB0aGUgYHNheV9oZWxsb2Agd29yay5cblxuVGhlIGBxcnRyX2hlbGxvX3dvcmtgIGZ1bmN0aW9uIGlzIGNydWNpYWwuIEl0IGFsbG9jYXRlcyBhIGNvbnRyb2wgcGFja2V0LCBzZXRzIHRoZSBjb21tYW5kLCBhbmQgZW5xdWV1ZXMgaXQuIEtleSBwb2ludHMgYXJlIHRoYXQgYHFydHJfYWxsb2NfY3RybF9wYWNrZXRgIHplcm8taW5pdGlhbGl6ZXMgdGhlIHBhY2tldCBhbmQsIGluIHRoaXMgY2FzZSwgYGZyb21gIGFuZCBgdG9gIGFyZSBzdGFjayB2YXJpYWJsZXMsIGFuZCBvbmx5IGBzcV9ub2RlYCBhbmQgYHNxX3BvcnRgIGFyZSByZWFkIGZyb20gdGhlbS4gVGhlIHJlc3Qgb2YgdGhlIGZpZWxkcyBhcmUgaXJyZWxldmFudC5cblxuV2hlbiBhbiBlbmRwb2ludCBpcyByZWdpc3RlcmVkLCB0aGlzIGluaXRpYWxpemVzIHRoZSB3b3JrIGFuZCBpbW1lZGlhdGVseSBzY2hlZHVsZXMgdGhlIHdvcmsgZnVuY3Rpb24gdmlhIGBzY2hlZHVsZV93b3JrKClgLiBUaGUgYnJvYWRjYXN0IGVucXVldWUsIHNraXBzIG5vZGVzIHdpdGggYFFSVFJfRVBfTklEX0FVVE9gIHdoaWxlIGJyb2FkY2FzdGluZy5cblxuRmluYWxseSwgdGhlIG5hbWVzZXJ2aWNlIGNvZGUgZ2V0cyB1cGRhdGVkIHRvIHJlbW92ZSB0aGUgYHNheV9oZWxsb2AgY2FsbCBzaW5jZSBpdCdzIG5vdyBoYW5kbGVkIGJ5IHRoZSBjb3JlIGxheWVyLlxuXG5TbywgbGV0J3MgcmVjYXAgbXkgY29yZSBwb2ludHM6XG4qICAgVGhlIGBza2JgIGlzIHplcm9lZC5cbiogICBUaGUgc3RhY2stYWxsb2NhdGVkIGBzdHJ1Y3Qgc29ja2FkZHJfcXJ0cmAgYGZyb21gIGFuZCBgdG9gIHN0cnVjdHVyZXMgaGF2ZSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgZmllbGRzLCBidXQgb25seSBpbml0aWFsaXplZCBwYXJ0cyBhcmUgcmVhZC5cbiogICBUaGUgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZS5cbiogICBUaGUgcGF0Y2ggaGFzIG5vIGNvZGUgdGhhdCBtb2RpZmllcyB0aGUgbGVuZ3RocyBvciBib3VuZHMgY2hlY2tzIGluIGEgd2F5IHRvIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuVGhpcyBsZWF2ZXMgbWUgcmVhc29uYWJseSBjb25maWRlbnQgdGhhdCB0aGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBpbmZvcm1hdGlvbiBsZWFrIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgYnVncy4gS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIG1lbW9yeSBzYWZldHkgdG9vbHMgc2hvdWxkIGFkZXF1YXRlbHkgZGV0ZWN0IGFueSBpc3N1ZXMuXG5cblRoZSBgc3RydWN0IHNvY2thZGRyX3FydHJgIGluaXRpYWxpemF0aW9uLiBJIGRvdWJsZS1jaGVja2VkIHRoYXQgYHN0cnVjdCBzb2NrYWRkcl9xcnRyIGZyb20gPSB7QUZfUUlQQ1JUUiwgMCwgUVJUUl9QT1JUX0NUUkx9O2AgZG9lcyB3aGF0IEkgdGhpbmsgaXQgZG9lcy4gVGhlIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQgYnkgdGhlIGluaXRpYWxpemVyIGxpc3QsIGFuZCB0aGUgQzk5IHN0YW5kYXJkIGVuc3VyZXMgcmVtYWluaW5nIG1lbWJlcnMgYXJlIGluaXRpYWxpemVkIGFzIHRob3VnaCB0aGV5IGhhZCBzdGF0aWMgc3RvcmFnZSBkdXJhdGlvbiwgd2hpY2ggbWVhbnMgemVyby4gSG93ZXZlciwgZXZlbiBpZiBwYWRkaW5nIGJ5dGVzIHdlcmVuJ3QgemVyby1pbml0aWFsaXplZCwgdGhleSBhcmUgbmV2ZXIgcmVhZCBvciBsZWFrZWQsIHNpbmNlIG9ubHkgYHNxX25vZGVgIGFuZCBgc3FfcG9ydGAgYXJlIHVzZWQgaW4gYHFydHJfbm9kZV9lbnF1ZXVlYC5cblxuT2theSwgSSdtIGNvbmZpZGVudC4gTm8gcmlzayBoZXJlLiBTZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTUyMCwiT3V0cHV0VG9rZW5zIjoyOTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MTQ6MDIuNjI5MDE0MjM3WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgUVJUUiBzdWJzeXN0ZW0gdG8gaW5pdGlhdGUgdGhlIEhFTExPIGhhbmRzaGFrZSBmcm9tIHRoZSBjb3JlIGxheWVyIGluc3RlYWQgb2YgdGhlIG5hbWVzZXJ2aWNlLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IHdvcmsgaXRlbSBgcXJ0cl9oZWxsb193b3JrYCB3aGljaCBhbGxvY2F0ZXMgYSBjb250cm9sIHBhY2tldCBhbmQgZW5xdWV1ZXMgaXQuIFRoZSBjb250cm9sIHBhY2tldCBpcyBhbGxvY2F0ZWQgdXNpbmcgYHFydHJfYWxsb2NfY3RybF9wYWNrZXRgLCB3aGljaCB1c2VzIGBza2JfcHV0X3plcm9gIHRvIGZ1bGx5IHplcm8taW5pdGlhbGl6ZSB0aGUgcGFja2V0IHBheWxvYWQuIFRoZSBzdGFjay1hbGxvY2F0ZWQgYHN0cnVjdCBzb2NrYWRkcl9xcnRyYCB2YXJpYWJsZXMgKGBmcm9tYCBhbmQgYHRvYCkgYXJlIHVzZWQgdG8gcGFzcyBhZGRyZXNzZXMgdG8gYHFydHJfbm9kZV9lbnF1ZXVlYCwgd2hpY2ggb25seSByZWFkcyB0aGVpciBgc3Ffbm9kZWAgYW5kIGBzcV9wb3J0YCBmaWVsZHMgdG8gcG9wdWxhdGUgdGhlIHBhY2tldCBoZWFkZXIuIFRoZSBgc3RydWN0IHNvY2thZGRyX3FydHJgIGl0c2VsZiBpcyBub3QgY29waWVkIHRvIHRoZSBwYWNrZXQgb3IgdG8gdXNlcnNwYWNlLCBzbyBhbnkgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBwYWRkaW5nIGJ5dGVzIG9uIHRoZSBzdGFjayBhcmUgbmV2ZXIgcmVhZCBvciBsZWFrZWQuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLCBub3IgZG9lcyBpdCBtb2RpZnkgYm91bmRzIGNoZWNrcyBvciBsZW5ndGhzIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIG9yIGxvY2tpbmcgaXNzdWVzKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIG9yIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgUVJUUiBzdWJzeXN0ZW0gdG8gaW5pdGlhdGUgdGhlIEhFTExPIGhhbmRzaGFrZSBmcm9tIHRoZSBjb3JlIGxheWVyIGluc3RlYWQgb2YgdGhlIG5hbWVzZXJ2aWNlLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IHdvcmsgaXRlbSBgcXJ0cl9oZWxsb193b3JrYCB3aGljaCBhbGxvY2F0ZXMgYSBjb250cm9sIHBhY2tldCBhbmQgZW5xdWV1ZXMgaXQuIFRoZSBjb250cm9sIHBhY2tldCBpcyBhbGxvY2F0ZWQgdXNpbmcgYHFydHJfYWxsb2NfY3RybF9wYWNrZXRgLCB3aGljaCB1c2VzIGBza2JfcHV0X3plcm9gIHRvIGZ1bGx5IHplcm8taW5pdGlhbGl6ZSB0aGUgcGFja2V0IHBheWxvYWQuIFRoZSBzdGFjay1hbGxvY2F0ZWQgYHN0cnVjdCBzb2NrYWRkcl9xcnRyYCB2YXJpYWJsZXMgKGBmcm9tYCBhbmQgYHRvYCkgYXJlIHVzZWQgdG8gcGFzcyBhZGRyZXNzZXMgdG8gYHFydHJfbm9kZV9lbnF1ZXVlYCwgd2hpY2ggb25seSByZWFkcyB0aGVpciBgc3Ffbm9kZWAgYW5kIGBzcV9wb3J0YCBmaWVsZHMgdG8gcG9wdWxhdGUgdGhlIHBhY2tldCBoZWFkZXIuIFRoZSBgc3RydWN0IHNvY2thZGRyX3FydHJgIGl0c2VsZiBpcyBub3QgY29waWVkIHRvIHRoZSBwYWNrZXQgb3IgdG8gdXNlcnNwYWNlLCBzbyBhbnkgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBwYWRkaW5nIGJ5dGVzIG9uIHRoZSBzdGFjayBhcmUgbmV2ZXIgcmVhZCBvciBsZWFrZWQuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLCBub3IgZG9lcyBpdCBtb2RpZnkgYm91bmRzIGNoZWNrcyBvciBsZW5ndGhzIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIG9yIGxvY2tpbmcgaXNzdWVzKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIG9yIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow7kjh7[1] Phase: Succeeded StartedAt: 2026-08-07 16:14:14 +0000 UTC FinishedAt: 2026-08-07 16:14:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kjh7[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-07 16:14:14 +0000 UTC FinishedAt: 2026-08-07 16:14:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kjh7[2] Phase: Succeeded StartedAt: 2026-08-07 16:14:14 +0000 UTC FinishedAt: 2026-08-07 20:02:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kjh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_endpoint_register","qrtr_sendmsg","qrtr_tun_write_iter","qrtr_endpoint_post","qrtr_ns_worker","qrtr_hello_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"4500b2e5-3e00-436b-a7ca-b8df1d7e3a55","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-07 16:14:14 +0000 UTC FinishedAt: 2026-08-07 20:02:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_endpoint_register","qrtr_sendmsg","qrtr_tun_write_iter","qrtr_endpoint_post","qrtr_ns_worker","qrtr_hello_work"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"4500b2e5-3e00-436b-a7ca-b8df1d7e3a55","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-workflow7kjh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_endpoint_register","qrtr_sendmsg","qrtr_tun_write_iter","qrtr_endpoint_post","qrtr_ns_worker","qrtr_hello_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"4500b2e5-3e00-436b-a7ca-b8df1d7e3a55","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-07 16:14:14 +0000 UTC FinishedAt: 2026-08-07 16:14:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kjh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_endpoint_register","qrtr_sendmsg","qrtr_tun_write_iter","qrtr_endpoint_post","qrtr_ns_worker","qrtr_hello_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"4500b2e5-3e00-436b-a7ca-b8df1d7e3a55","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-07 16:14:14 +0000 UTC FinishedAt: 2026-08-07 16:14:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"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-workflow7kjh7/series-workflow7kjh7-convert-artifact-4249131647/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7kjh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_endpoint_register","qrtr_sendmsg","qrtr_tun_write_iter","qrtr_endpoint_post","qrtr_ns_worker","qrtr_hello_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"4500b2e5-3e00-436b-a7ca-b8df1d7e3a55","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-07 16:14:25 +0000 UTC FinishedAt: 2026-08-07 16:34:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kjh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_endpoint_register","qrtr_sendmsg","qrtr_tun_write_iter","qrtr_endpoint_post","qrtr_ns_worker","qrtr_hello_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"4500b2e5-3e00-436b-a7ca-b8df1d7e3a55","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-07 16:14:25 +0000 UTC FinishedAt: 2026-08-07 16:34:06 +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:*9bf56098-892d-4d9f-861f-059f57e318e1,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-workflow7kjh7/series-workflow7kjh7-convert-artifact-4249131647/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": "3ada92e3-7507-454d-8b27-781992c6f1f2", "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-workflow7kjh7/series-workflow7kjh7-build-action-1924887813/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7kjh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_endpoint_register","qrtr_sendmsg","qrtr_tun_write_iter","qrtr_endpoint_post","qrtr_ns_worker","qrtr_hello_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"4500b2e5-3e00-436b-a7ca-b8df1d7e3a55","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-07 16:14:25 +0000 UTC FinishedAt: 2026-08-07 16:33:56 +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:*9bf56098-892d-4d9f-861f-059f57e318e1,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-workflow7kjh7/series-workflow7kjh7-convert-artifact-4249131647/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": "3ada92e3-7507-454d-8b27-781992c6f1f2", "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-workflow7kjh7/series-workflow7kjh7-build-action-1924887813/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7kjh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_endpoint_register","qrtr_sendmsg","qrtr_tun_write_iter","qrtr_endpoint_post","qrtr_ns_worker","qrtr_hello_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"4500b2e5-3e00-436b-a7ca-b8df1d7e3a55","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-07 16:34:06 +0000 UTC FinishedAt: 2026-08-07 16:34:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kjh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_endpoint_register","qrtr_sendmsg","qrtr_tun_write_iter","qrtr_endpoint_post","qrtr_ns_worker","qrtr_hello_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"4500b2e5-3e00-436b-a7ca-b8df1d7e3a55","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-07 16:34:06 +0000 UTC FinishedAt: 2026-08-07 16:34:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kjh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_endpoint_register","qrtr_sendmsg","qrtr_tun_write_iter","qrtr_endpoint_post","qrtr_ns_worker","qrtr_hello_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"4500b2e5-3e00-436b-a7ca-b8df1d7e3a55","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-07 16:34:06 +0000 UTC FinishedAt: 2026-08-07 16:34:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kjh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_endpoint_register","qrtr_sendmsg","qrtr_tun_write_iter","qrtr_endpoint_post","qrtr_ns_worker","qrtr_hello_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"4500b2e5-3e00-436b-a7ca-b8df1d7e3a55","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-07 16:34:06 +0000 UTC FinishedAt: 2026-08-07 16:34:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"4500b2e5-3e00-436b-a7ca-b8df1d7e3a55","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-workflow7kjh7/series-workflow7kjh7-convert-artifact-1734051214/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7kjh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_endpoint_register","qrtr_sendmsg","qrtr_tun_write_iter","qrtr_endpoint_post","qrtr_ns_worker","qrtr_hello_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"4500b2e5-3e00-436b-a7ca-b8df1d7e3a55","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-07 16:34:16 +0000 UTC FinishedAt: 2026-08-07 16:36:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kjh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_endpoint_register","qrtr_sendmsg","qrtr_tun_write_iter","qrtr_endpoint_post","qrtr_ns_worker","qrtr_hello_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"4500b2e5-3e00-436b-a7ca-b8df1d7e3a55","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-07 16:34:16 +0000 UTC FinishedAt: 2026-08-07 16:35:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3ada92e3-7507-454d-8b27-781992c6f1f2,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-workflow7kjh7/series-workflow7kjh7-build-action-1924887813/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-workflow7kjh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_endpoint_register","qrtr_sendmsg","qrtr_tun_write_iter","qrtr_endpoint_post","qrtr_ns_worker","qrtr_hello_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"4500b2e5-3e00-436b-a7ca-b8df1d7e3a55","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-07 16:36:09 +0000 UTC FinishedAt: 2026-08-07 16:36:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kjh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_endpoint_register","qrtr_sendmsg","qrtr_tun_write_iter","qrtr_endpoint_post","qrtr_ns_worker","qrtr_hello_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"4500b2e5-3e00-436b-a7ca-b8df1d7e3a55","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-07 16:36:09 +0000 UTC FinishedAt: 2026-08-07 16:36:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kjh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_endpoint_register","qrtr_sendmsg","qrtr_tun_write_iter","qrtr_endpoint_post","qrtr_ns_worker","qrtr_hello_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"4500b2e5-3e00-436b-a7ca-b8df1d7e3a55","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-07 16:36:09 +0000 UTC FinishedAt: 2026-08-07 16:57:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kjh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_endpoint_register","qrtr_sendmsg","qrtr_tun_write_iter","qrtr_endpoint_post","qrtr_ns_worker","qrtr_hello_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"4500b2e5-3e00-436b-a7ca-b8df1d7e3a55","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-07 16:36:09 +0000 UTC FinishedAt: 2026-08-07 16:57:06 +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:*9bf56098-892d-4d9f-861f-059f57e318e1,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-workflow7kjh7/series-workflow7kjh7-convert-artifact-1734051214/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": "5370621c-050b-4cbf-8728-dfd9ea4dda4d", "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-workflow7kjh7/series-workflow7kjh7-build-action-237427490/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7kjh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_endpoint_register","qrtr_sendmsg","qrtr_tun_write_iter","qrtr_endpoint_post","qrtr_ns_worker","qrtr_hello_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"4500b2e5-3e00-436b-a7ca-b8df1d7e3a55","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-07 16:36:09 +0000 UTC FinishedAt: 2026-08-07 16:56:56 +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:*9bf56098-892d-4d9f-861f-059f57e318e1,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-workflow7kjh7/series-workflow7kjh7-convert-artifact-1734051214/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": "5370621c-050b-4cbf-8728-dfd9ea4dda4d", "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-workflow7kjh7/series-workflow7kjh7-build-action-237427490/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7kjh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_endpoint_register","qrtr_sendmsg","qrtr_tun_write_iter","qrtr_endpoint_post","qrtr_ns_worker","qrtr_hello_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"4500b2e5-3e00-436b-a7ca-b8df1d7e3a55","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-07 16:57:06 +0000 UTC FinishedAt: 2026-08-07 16:57:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kjh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_endpoint_register","qrtr_sendmsg","qrtr_tun_write_iter","qrtr_endpoint_post","qrtr_ns_worker","qrtr_hello_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"4500b2e5-3e00-436b-a7ca-b8df1d7e3a55","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-07 16:57:06 +0000 UTC FinishedAt: 2026-08-07 16:57:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kjh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_endpoint_register","qrtr_sendmsg","qrtr_tun_write_iter","qrtr_endpoint_post","qrtr_ns_worker","qrtr_hello_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"4500b2e5-3e00-436b-a7ca-b8df1d7e3a55","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-07 16:57:06 +0000 UTC FinishedAt: 2026-08-07 16:59:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kjh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_endpoint_register","qrtr_sendmsg","qrtr_tun_write_iter","qrtr_endpoint_post","qrtr_ns_worker","qrtr_hello_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"4500b2e5-3e00-436b-a7ca-b8df1d7e3a55","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-07 16:57:06 +0000 UTC FinishedAt: 2026-08-07 16:58:37 +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:*5370621c-050b-4cbf-8728-dfd9ea4dda4d,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-workflow7kjh7/series-workflow7kjh7-build-action-237427490/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-workflow7kjh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_endpoint_register","qrtr_sendmsg","qrtr_tun_write_iter","qrtr_endpoint_post","qrtr_ns_worker","qrtr_hello_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"4500b2e5-3e00-436b-a7ca-b8df1d7e3a55","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-07 16:59:10 +0000 UTC FinishedAt: 2026-08-07 20:02:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kjh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_endpoint_register","qrtr_sendmsg","qrtr_tun_write_iter","qrtr_endpoint_post","qrtr_ns_worker","qrtr_hello_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"4500b2e5-3e00-436b-a7ca-b8df1d7e3a55","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-07 16:59:10 +0000 UTC FinishedAt: 2026-08-07 20:02:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_endpoint_register","qrtr_sendmsg","qrtr_tun_write_iter","qrtr_endpoint_post","qrtr_ns_worker","qrtr_hello_work"],"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:*3ada92e3-7507-454d-8b27-781992c6f1f2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5370621c-050b-4cbf-8728-dfd9ea4dda4d,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-workflow7kjh7/series-workflow7kjh7-build-action-1924887813/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-workflow7kjh7/series-workflow7kjh7-build-action-237427490/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow7kjh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_endpoint_register","qrtr_sendmsg","qrtr_tun_write_iter","qrtr_endpoint_post","qrtr_ns_worker","qrtr_hello_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"4500b2e5-3e00-436b-a7ca-b8df1d7e3a55","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-07 16:59:10 +0000 UTC FinishedAt: 2026-08-07 16:59:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kjh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_endpoint_register","qrtr_sendmsg","qrtr_tun_write_iter","qrtr_endpoint_post","qrtr_ns_worker","qrtr_hello_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"4500b2e5-3e00-436b-a7ca-b8df1d7e3a55","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-07 16:59:10 +0000 UTC FinishedAt: 2026-08-07 16:59:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_endpoint_register","qrtr_sendmsg","qrtr_tun_write_iter","qrtr_endpoint_post","qrtr_ns_worker","qrtr_hello_work"],"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-workflow7kjh7/series-workflow7kjh7-convert-artifact-2720836275/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7kjh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_endpoint_register","qrtr_sendmsg","qrtr_tun_write_iter","qrtr_endpoint_post","qrtr_ns_worker","qrtr_hello_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"4500b2e5-3e00-436b-a7ca-b8df1d7e3a55","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-07 16:59:10 +0000 UTC FinishedAt: 2026-08-07 16:59:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kjh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_endpoint_register","qrtr_sendmsg","qrtr_tun_write_iter","qrtr_endpoint_post","qrtr_ns_worker","qrtr_hello_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"4500b2e5-3e00-436b-a7ca-b8df1d7e3a55","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-07 16:59:10 +0000 UTC FinishedAt: 2026-08-07 16:59:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kjh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_endpoint_register","qrtr_sendmsg","qrtr_tun_write_iter","qrtr_endpoint_post","qrtr_ns_worker","qrtr_hello_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"4500b2e5-3e00-436b-a7ca-b8df1d7e3a55","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-07 16:59:10 +0000 UTC FinishedAt: 2026-08-07 16:59:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kjh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_endpoint_register","qrtr_sendmsg","qrtr_tun_write_iter","qrtr_endpoint_post","qrtr_ns_worker","qrtr_hello_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"4500b2e5-3e00-436b-a7ca-b8df1d7e3a55","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-07 16:59:20 +0000 UTC FinishedAt: 2026-08-07 20:02:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kjh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_endpoint_register","qrtr_sendmsg","qrtr_tun_write_iter","qrtr_endpoint_post","qrtr_ns_worker","qrtr_hello_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"4500b2e5-3e00-436b-a7ca-b8df1d7e3a55","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-07 16:59:20 +0000 UTC FinishedAt: 2026-08-07 20:02:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3ada92e3-7507-454d-8b27-781992c6f1f2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5370621c-050b-4cbf-8728-dfd9ea4dda4d,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-workflow7kjh7/series-workflow7kjh7-build-action-1924887813/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-workflow7kjh7/series-workflow7kjh7-build-action-237427490/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-workflow7kjh7/series-workflow7kjh7-convert-artifact-2720836275/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,}