Name: series-workflowhv2hs Phase: Succeeded StartedAt: 2026-07-02 04:48:20 +0000 UTC FinishedAt: 2026-07-02 06:12:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhv2hs[0] Phase: Succeeded StartedAt: 2026-07-02 04:48:20 +0000 UTC FinishedAt: 2026-07-02 05:03:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhv2hs[0].run-triage Phase: Succeeded StartedAt: 2026-07-02 04:48:20 +0000 UTC FinishedAt: 2026-07-02 05:03:04 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "665159e246749578d4e4bfe106ee3b74edcdab18", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ADVISE_SYSCALLS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "665159e246749578d4e4bfe106ee3b74edcdab18", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ADVISE_SYSCALLS" ], "series_id": "6435682e-4e6b-4d72-b92f-8d65599f8ee4" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "madvise_free_pte_range", "guard_remove_pte_entry", "zap_pte_range" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA1OjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FEVklTRV9TWVNDQUxMUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21hZHZpc2VfZnJlZV9wdGVfcmFuZ2UmIzM0OywKICAgICYjMzQ7Z3VhcmRfcmVtb3ZlX3B0ZV9lbnRyeSYjMzQ7LAogICAgJiMzNDt6YXBfcHRlX3JhbmdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zIHJlc3BvbnNpYmxlIGZvciBjbGVhcmluZyBub24tcHJlc2VudCBQVEVzIGR1cmluZyBvcGVyYXRpb25zIGxpa2UgTUFEVl9GUkVFLCBNQURWX0dVQVJEX1JFTU9WRSwgYW5kIHVubWFwcGluZyBtZW1vcnkuIFRoZXNlIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGFuZCBjYW4gdHJpZ2dlciBjb21wbGV4IHBhZ2UgdGFibGUgbWFuaXB1bGF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNTowMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGMxMDcyZWNlYTRiZGZmMWU3MTkyYWUzODQyOTQ3Yzk5YmE0YTliMzFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAyIDA1OjAxOjM5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0LmhcbmluZGV4IDc0ZWRlNzA2ZmIzMjVkLi4wODM3ZWJiYzVkY2U2MyAxMDA2NDRcbi0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaFxuQEAgLTk0NSwxMCAmIzQzOzk0NSw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuICNkZWZpbmUgcHRlX2NsZWFyKG1tLGFkZHIscHRlcClcdFx0XFxcbiBcdHNldF9wdGVfYXQoKG1tKSwgKGFkZHIpLCAocHRlcCksIF9fcHRlKDBVTCkpXG4gXG4tI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVfQ0xFQVJfTk9UX1BSRVNFTlRfRlVMTFxuLSNkZWZpbmUgcHRlX2NsZWFyX25vdF9wcmVzZW50X2Z1bGwobW0sYWRkcixwdGVwLGZ1bGxtbSlcdFxcXG4tXHRfX3NldF9wdGVfYXQoKG1tKSwgKGFkZHIpLCAocHRlcCksIF9fcHRlKDBVTCksIChmdWxsbW0pKVxuLVxuICNpZmRlZiBEQ0FDSEVfQUxJQVNJTkdfUE9TU0lCTEVcbiAjZGVmaW5lIF9fSEFWRV9BUkNIX01PVkVfUFRFXG4gI2RlZmluZSBtb3ZlX3B0ZShwdGUsIG9sZF9hZGRyLCBuZXdfYWRkcilcdFx0XHRcdFxcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmggYi9pbmNsdWRlL2xpbnV4L3BndGFibGUuaFxuaW5kZXggMjk4MWUzODZkYTdiM2MuLjY1NTFmNDVhODU0MGMxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXG5AQCAtOTg4LDQ5ICYjNDM7OTg4LDMwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfbW11X3RsYihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdHVwZGF0ZV9tbXVfdGxiX3JhbmdlKHZtYSwgYWRkcmVzcywgcHRlcCwgMSk7XG4gfVxuIFxuLS8qXG4tICogU29tZSBhcmNoaXRlY3R1cmVzIG1heSBiZSBhYmxlIHRvIGF2b2lkIGV4cGVuc2l2ZSBzeW5jaHJvbml6YXRpb25cbi0gKiBwcmltaXRpdmVzIHdoZW4gbW9kaWZpY2F0aW9ucyBhcmUgbWFkZSB0byBQVEUmIzM5O3Mgd2hpY2ggYXJlIGFscmVhZHlcbi0gKiBub3QgcHJlc2VudCwgb3IgaW4gdGhlIHByb2Nlc3Mgb2YgYW4gYWRkcmVzcyBzcGFjZSBkZXN0cnVjdGlvbi5cbi0gKi9cbi0jaWZuZGVmIF9fSEFWRV9BUkNIX1BURV9DTEVBUl9OT1RfUFJFU0VOVF9GVUxMXG4tc3RhdGljIGlubGluZSB2b2lkIHB0ZV9jbGVhcl9ub3RfcHJlc2VudF9mdWxsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLVx0XHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4tXHRcdFx0XHRcdCAgICAgIHB0ZV90ICpwdGVwLFxuLVx0XHRcdFx0XHQgICAgICBpbnQgZnVsbClcbi17XG4tXHRwdGVfY2xlYXIobW0sIGFkZHJlc3MsIHB0ZXApO1xuLX1cbi0jZW5kaWZcbi1cbi0jaWZuZGVmIGNsZWFyX25vdF9wcmVzZW50X2Z1bGxfcHRlc1xuIC8qKlxuLSAqIGNsZWFyX25vdF9wcmVzZW50X2Z1bGxfcHRlcyAtIENsZWFyIG11bHRpcGxlIG5vdCBwcmVzZW50IFBURXMgd2hpY2ggYXJlXG4tICpcdFx0XHRcdCBjb25zZWN1dGl2ZSBpbiB0aGUgcGd0YWJsZS5cbiYjNDM7ICogY2xlYXJfbm9ucHJlc2VudF9wdGVzIC0gQ2xlYXIgbXVsdGlwbGUgbm9uLXByZXNlbnQgUFRFcyB3aGljaCBhcmVcbiYjNDM7ICpcdFx0XHQgICAgY29uc2VjdXRpdmUgaW4gdGhlIHBndGFibGUuXG4gICogQG1tOiBBZGRyZXNzIHNwYWNlIHRoZSBwdGVzIHJlcHJlc2VudC5cbiAgKiBAYWRkcjogQWRkcmVzcyBvZiB0aGUgZmlyc3QgcHRlLlxuICAqIEBwdGVwOiBQYWdlIHRhYmxlIHBvaW50ZXIgZm9yIHRoZSBmaXJzdCBlbnRyeS5cbiAgKiBAbnI6IE51bWJlciBvZiBlbnRyaWVzIHRvIGNsZWFyLlxuLSAqIEBmdWxsOiBXaGV0aGVyIHdlIGFyZSBjbGVhcmluZyBhIGZ1bGwgbW0uXG4tICpcbi0gKiBNYXkgYmUgb3ZlcnJpZGRlbiBieSB0aGUgYXJjaGl0ZWN0dXJlOyBvdGhlcndpc2UsIGltcGxlbWVudGVkIGFzIGEgc2ltcGxlXG4tICogbG9vcCBvdmVyIHB0ZV9jbGVhcl9ub3RfcHJlc2VudF9mdWxsKCkuXG4gICpcbiAgKiBDb250ZXh0OiBUaGUgY2FsbGVyIGhvbGRzIHRoZSBwYWdlIHRhYmxlIGxvY2suICBUaGUgUFRFcyBhcmUgYWxsIG5vdCBwcmVzZW50LlxuICAqIFRoZSBQVEVzIGFyZSBhbGwgaW4gdGhlIHNhbWUgUE1ELlxuICAqL1xuLXN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9ub3RfcHJlc2VudF9mdWxsX3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGludCBuciwgaW50IGZ1bGwpXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9ub25wcmVzZW50X3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCB1bnNpZ25lZCBpbnQgbnIpXG4ge1xuJiM0MztcdCh2b2lkKWFkZHI7XG4mIzQzO1xuIFx0Zm9yICg7Oykge1xuLVx0XHRwdGVfY2xlYXJfbm90X3ByZXNlbnRfZnVsbChtbSwgYWRkciwgcHRlcCwgZnVsbCk7XG4mIzQzO1x0XHRwdGVfY2xlYXIobW0sIGFkZHIsIHB0ZXApO1xuIFx0XHRpZiAoLS1uciA9PSAwKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRwdGVwJiM0MzsmIzQzOztcbiBcdFx0YWRkciAmIzQzOz0gUEFHRV9TSVpFO1xuIFx0fVxuIH1cbi0jZW5kaWZcbiBcbiAjaWZuZGVmIF9fSEFWRV9BUkNIX1BURVBfQ0xFQVJfRkxVU0hcbiBleHRlcm4gcHRlX3QgcHRlcF9jbGVhcl9mbHVzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmRpZmYgLS1naXQgYS9tbS9tYWR2aXNlLmMgYi9tbS9tYWR2aXNlLmNcbmluZGV4IGNkOWJiMDc3MDcyY2NiLi4zZGIxNDNjNDQyZWFhYSAxMDA2NDRcbi0tLSBhL21tL21hZHZpc2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWFkdmlzZS5jXG5AQCAtNjk1LDEwICYjNDM7Njk1LDEwIEBAIHN0YXRpYyBpbnQgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0XHRuciA9IHN3YXBfcHRlX2JhdGNoKHB0ZSwgbWF4X25yLCBwdGVudCk7XG4gXHRcdFx0XHRucl9zd2FwIC09IG5yO1xuIFx0XHRcdFx0c3dhcF9wdXRfZW50cmllc19kaXJlY3QoZW50cnksIG5yKTtcbi1cdFx0XHRcdGNsZWFyX25vdF9wcmVzZW50X2Z1bGxfcHRlcyhtbSwgYWRkciwgcHRlLCBuciwgdGxiLVx1MDAzZWZ1bGxtbSk7XG4mIzQzO1x0XHRcdFx0Y2xlYXJfbm9ucHJlc2VudF9wdGVzKG1tLCBhZGRyLCBwdGUsIG5yKTtcbiBcdFx0XHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2h3cG9pc29uKGVudHJ5KSB8fFxuIFx0XHRcdFx0ICAgc29mdGxlYWZfaXNfcG9pc29uX21hcmtlcihlbnRyeSkpIHtcbi1cdFx0XHRcdHB0ZV9jbGVhcl9ub3RfcHJlc2VudF9mdWxsKG1tLCBhZGRyLCBwdGUsIHRsYi1cdTAwM2VmdWxsbW0pO1xuJiM0MztcdFx0XHRcdHB0ZV9jbGVhcihtbSwgYWRkciwgcHRlKTtcbiBcdFx0XHR9XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbkBAIC0xMjM0LDcgJiM0MzsxMjM0LDcgQEAgc3RhdGljIGludCBndWFyZF9yZW1vdmVfcHRlX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcbiBcdGlmIChpc19ndWFyZF9wdGVfbWFya2VyKHB0ZW50KSkge1xuIFx0XHQvKiBTaW1wbHkgY2xlYXIgdGhlIFBURSBtYXJrZXIuICovXG4tXHRcdHB0ZV9jbGVhcl9ub3RfcHJlc2VudF9mdWxsKHdhbGstXHUwMDNlbW0sIGFkZHIsIHB0ZSwgZmFsc2UpO1xuJiM0MztcdFx0cHRlX2NsZWFyKHdhbGstXHUwMDNlbW0sIGFkZHIsIHB0ZSk7XG4gXHRcdHVwZGF0ZV9tbXVfY2FjaGUod2Fsay1cdTAwM2V2bWEsIGFkZHIsIHB0ZSk7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggZmYzMzhjMmFiZTkyMzEuLmEzZmNhZjhjZmU4ZjhiIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jXG5AQCAtMTc5Nyw3ICYjNDM7MTc5Nyw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHphcF9ub25wcmVzZW50X3B0ZXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbiBcdFx0cHJfYWxlcnQoXCYjMzQ7dW5yZWNvZ25pemVkIHN3YXAgZW50cnkgMHglbHhcXG5cJiMzNDssIGVudHJ5LnZhbCk7XG4gXHRcdFdBUk5fT05fT05DRSgxKTtcbiBcdH1cbi1cdGNsZWFyX25vdF9wcmVzZW50X2Z1bGxfcHRlcyh2bWEtXHUwMDNldm1fbW0sIGFkZHIsIHB0ZSwgbnIsIHRsYi1cdTAwM2VmdWxsbW0pO1xuJiM0MztcdGNsZWFyX25vbnByZXNlbnRfcHRlcyh2bWEtXHUwMDNldm1fbW0sIGFkZHIsIHB0ZSwgbnIpO1xuIFx0KmFueV9za2lwcGVkID0gemFwX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQodm1hLCBhZGRyLCBwdGUsIG5yLCBkZXRhaWxzLCBwdGVudCk7XG4gXG4gXHRyZXR1cm4gbnI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDU6MDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QURWSVNFX1NZU0NBTExTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFkdmlzZV9mcmVlX3B0ZV9yYW5nZSYjMzQ7LAogICAgJiMzNDtndWFyZF9yZW1vdmVfcHRlX2VudHJ5JiMzNDssCiAgICAmIzM0O3phcF9wdGVfcmFuZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIGNsZWFyaW5nIG5vbi1wcmVzZW50IFBURXMgZHVyaW5nIG9wZXJhdGlvbnMgbGlrZSBNQURWX0ZSRUUsIE1BRFZfR1VBUkRfUkVNT1ZFLCBhbmQgdW5tYXBwaW5nIG1lbW9yeS4gVGhlc2UgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYW5kIGNhbiB0cmlnZ2VyIGNvbXBsZXggcGFnZSB0YWJsZSBtYW5pcHVsYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjMTA3MmVjZWE0YmRmZjFlNzE5MmFlMzg0Mjk0N2M5OWJhNGE5YjMxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMiAwNTowMTozOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0LmgKaW5kZXggNzRlZGU3MDZmYjMyNWQuLjA4MzdlYmJjNWRjZTYzIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaApAQCAtOTQ1LDEwICYjNDM7OTQ1LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAjZGVmaW5lIHB0ZV9jbGVhcihtbSxhZGRyLHB0ZXApCQlcCiAJc2V0X3B0ZV9hdCgobW0pLCAoYWRkciksIChwdGVwKSwgX19wdGUoMFVMKSkKIAotI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVfQ0xFQVJfTk9UX1BSRVNFTlRfRlVMTAotI2RlZmluZSBwdGVfY2xlYXJfbm90X3ByZXNlbnRfZnVsbChtbSxhZGRyLHB0ZXAsZnVsbG1tKQlcCi0JX19zZXRfcHRlX2F0KChtbSksIChhZGRyKSwgKHB0ZXApLCBfX3B0ZSgwVUwpLCAoZnVsbG1tKSkKLQogI2lmZGVmIERDQUNIRV9BTElBU0lOR19QT1NTSUJMRQogI2RlZmluZSBfX0hBVkVfQVJDSF9NT1ZFX1BURQogI2RlZmluZSBtb3ZlX3B0ZShwdGUsIG9sZF9hZGRyLCBuZXdfYWRkcikJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmggYi9pbmNsdWRlL2xpbnV4L3BndGFibGUuaAppbmRleCAyOTgxZTM4NmRhN2IzYy4uNjU1MWY0NWE4NTQwYzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oCkBAIC05ODgsNDkgJiM0Mzs5ODgsMzAgQEAgc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9tbXVfdGxiKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCXVwZGF0ZV9tbXVfdGxiX3JhbmdlKHZtYSwgYWRkcmVzcywgcHRlcCwgMSk7CiB9CiAKLS8qCi0gKiBTb21lIGFyY2hpdGVjdHVyZXMgbWF5IGJlIGFibGUgdG8gYXZvaWQgZXhwZW5zaXZlIHN5bmNocm9uaXphdGlvbgotICogcHJpbWl0aXZlcyB3aGVuIG1vZGlmaWNhdGlvbnMgYXJlIG1hZGUgdG8gUFRFJiMzOTtzIHdoaWNoIGFyZSBhbHJlYWR5Ci0gKiBub3QgcHJlc2VudCwgb3IgaW4gdGhlIHByb2Nlc3Mgb2YgYW4gYWRkcmVzcyBzcGFjZSBkZXN0cnVjdGlvbi4KLSAqLwotI2lmbmRlZiBfX0hBVkVfQVJDSF9QVEVfQ0xFQVJfTk9UX1BSRVNFTlRfRlVMTAotc3RhdGljIGlubGluZSB2b2lkIHB0ZV9jbGVhcl9ub3RfcHJlc2VudF9mdWxsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCi0JCQkJCSAgICAgIHB0ZV90ICpwdGVwLAotCQkJCQkgICAgICBpbnQgZnVsbCkKLXsKLQlwdGVfY2xlYXIobW0sIGFkZHJlc3MsIHB0ZXApOwotfQotI2VuZGlmCi0KLSNpZm5kZWYgY2xlYXJfbm90X3ByZXNlbnRfZnVsbF9wdGVzCiAvKioKLSAqIGNsZWFyX25vdF9wcmVzZW50X2Z1bGxfcHRlcyAtIENsZWFyIG11bHRpcGxlIG5vdCBwcmVzZW50IFBURXMgd2hpY2ggYXJlCi0gKgkJCQkgY29uc2VjdXRpdmUgaW4gdGhlIHBndGFibGUuCiYjNDM7ICogY2xlYXJfbm9ucHJlc2VudF9wdGVzIC0gQ2xlYXIgbXVsdGlwbGUgbm9uLXByZXNlbnQgUFRFcyB3aGljaCBhcmUKJiM0MzsgKgkJCSAgICBjb25zZWN1dGl2ZSBpbiB0aGUgcGd0YWJsZS4KICAqIEBtbTogQWRkcmVzcyBzcGFjZSB0aGUgcHRlcyByZXByZXNlbnQuCiAgKiBAYWRkcjogQWRkcmVzcyBvZiB0aGUgZmlyc3QgcHRlLgogICogQHB0ZXA6IFBhZ2UgdGFibGUgcG9pbnRlciBmb3IgdGhlIGZpcnN0IGVudHJ5LgogICogQG5yOiBOdW1iZXIgb2YgZW50cmllcyB0byBjbGVhci4KLSAqIEBmdWxsOiBXaGV0aGVyIHdlIGFyZSBjbGVhcmluZyBhIGZ1bGwgbW0uCi0gKgotICogTWF5IGJlIG92ZXJyaWRkZW4gYnkgdGhlIGFyY2hpdGVjdHVyZTsgb3RoZXJ3aXNlLCBpbXBsZW1lbnRlZCBhcyBhIHNpbXBsZQotICogbG9vcCBvdmVyIHB0ZV9jbGVhcl9ub3RfcHJlc2VudF9mdWxsKCkuCiAgKgogICogQ29udGV4dDogVGhlIGNhbGxlciBob2xkcyB0aGUgcGFnZSB0YWJsZSBsb2NrLiAgVGhlIFBURXMgYXJlIGFsbCBub3QgcHJlc2VudC4KICAqIFRoZSBQVEVzIGFyZSBhbGwgaW4gdGhlIHNhbWUgUE1ELgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfbm90X3ByZXNlbnRfZnVsbF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotCQl1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCB1bnNpZ25lZCBpbnQgbnIsIGludCBmdWxsKQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9ub25wcmVzZW50X3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiYjNDM7CQl1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCB1bnNpZ25lZCBpbnQgbnIpCiB7CiYjNDM7CSh2b2lkKWFkZHI7CiYjNDM7CiAJZm9yICg7OykgewotCQlwdGVfY2xlYXJfbm90X3ByZXNlbnRfZnVsbChtbSwgYWRkciwgcHRlcCwgZnVsbCk7CiYjNDM7CQlwdGVfY2xlYXIobW0sIGFkZHIsIHB0ZXApOwogCQlpZiAoLS1uciA9PSAwKQogCQkJYnJlYWs7CiAJCXB0ZXAmIzQzOyYjNDM7OwogCQlhZGRyICYjNDM7PSBQQUdFX1NJWkU7CiAJfQogfQotI2VuZGlmCiAKICNpZm5kZWYgX19IQVZFX0FSQ0hfUFRFUF9DTEVBUl9GTFVTSAogZXh0ZXJuIHB0ZV90IHB0ZXBfY2xlYXJfZmx1c2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCmRpZmYgLS1naXQgYS9tbS9tYWR2aXNlLmMgYi9tbS9tYWR2aXNlLmMKaW5kZXggY2Q5YmIwNzcwNzJjY2IuLjNkYjE0M2M0NDJlYWFhIDEwMDY0NAotLS0gYS9tbS9tYWR2aXNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWFkdmlzZS5jCkBAIC02OTUsMTAgJiM0Mzs2OTUsMTAgQEAgc3RhdGljIGludCBtYWR2aXNlX2ZyZWVfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCQluciA9IHN3YXBfcHRlX2JhdGNoKHB0ZSwgbWF4X25yLCBwdGVudCk7CiAJCQkJbnJfc3dhcCAtPSBucjsKIAkJCQlzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdChlbnRyeSwgbnIpOwotCQkJCWNsZWFyX25vdF9wcmVzZW50X2Z1bGxfcHRlcyhtbSwgYWRkciwgcHRlLCBuciwgdGxiLSZndDtmdWxsbW0pOwomIzQzOwkJCQljbGVhcl9ub25wcmVzZW50X3B0ZXMobW0sIGFkZHIsIHB0ZSwgbnIpOwogCQkJfSBlbHNlIGlmIChzb2Z0bGVhZl9pc19od3BvaXNvbihlbnRyeSkgfHwKIAkJCQkgICBzb2Z0bGVhZl9pc19wb2lzb25fbWFya2VyKGVudHJ5KSkgewotCQkJCXB0ZV9jbGVhcl9ub3RfcHJlc2VudF9mdWxsKG1tLCBhZGRyLCBwdGUsIHRsYi0mZ3Q7ZnVsbG1tKTsKJiM0MzsJCQkJcHRlX2NsZWFyKG1tLCBhZGRyLCBwdGUpOwogCQkJfQogCQkJY29udGludWU7CiAJCX0KQEAgLTEyMzQsNyAmIzQzOzEyMzQsNyBAQCBzdGF0aWMgaW50IGd1YXJkX3JlbW92ZV9wdGVfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCiAJaWYgKGlzX2d1YXJkX3B0ZV9tYXJrZXIocHRlbnQpKSB7CiAJCS8qIFNpbXBseSBjbGVhciB0aGUgUFRFIG1hcmtlci4gKi8KLQkJcHRlX2NsZWFyX25vdF9wcmVzZW50X2Z1bGwod2Fsay0mZ3Q7bW0sIGFkZHIsIHB0ZSwgZmFsc2UpOwomIzQzOwkJcHRlX2NsZWFyKHdhbGstJmd0O21tLCBhZGRyLCBwdGUpOwogCQl1cGRhdGVfbW11X2NhY2hlKHdhbGstJmd0O3ZtYSwgYWRkciwgcHRlKTsKIAl9CiAKZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmMKaW5kZXggZmYzMzhjMmFiZTkyMzEuLmEzZmNhZjhjZmU4ZjhiIDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuYwpAQCAtMTc5Nyw3ICYjNDM7MTc5Nyw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHphcF9ub25wcmVzZW50X3B0ZXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwKIAkJcHJfYWxlcnQoJiMzNDt1bnJlY29nbml6ZWQgc3dhcCBlbnRyeSAweCVseFxuJiMzNDssIGVudHJ5LnZhbCk7CiAJCVdBUk5fT05fT05DRSgxKTsKIAl9Ci0JY2xlYXJfbm90X3ByZXNlbnRfZnVsbF9wdGVzKHZtYS0mZ3Q7dm1fbW0sIGFkZHIsIHB0ZSwgbnIsIHRsYi0mZ3Q7ZnVsbG1tKTsKJiM0MzsJY2xlYXJfbm9ucHJlc2VudF9wdGVzKHZtYS0mZ3Q7dm1fbW0sIGFkZHIsIHB0ZSwgbnIpOwogCSphbnlfc2tpcHBlZCA9IHphcF9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkKHZtYSwgYWRkciwgcHRlLCBuciwgZGV0YWlscywgcHRlbnQpOwogCiAJcmV0dXJuIG5yOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzQ1CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gc29tZSBwcmV0dHkgZnVuZGFtZW50YWwgc3R1ZmYg4oCTIHBhZ2UgdGFibGUgbWFuaXB1bGF0aW9uLCBzcGVjaWZpY2FsbHkuIEl0JiMzOTtzIHRvdWNoaW5nIGBhcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaGAsIGBpbmNsdWRlL2xpbnV4L3BndGFibGUuaGAsIGBtbS9tYWR2aXNlLmNgLCBhbmQgYG1tL21lbW9yeS5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIHJlbW92aW5nIGBwdGVfY2xlYXJfbm90X3ByZXNlbnRfZnVsbGAgYW5kIGBjbGVhcl9ub3RfcHJlc2VudF9mdWxsX3B0ZXNgIGFuZCByZXBsYWNpbmcgdGhlbSB3aXRoIHRoZSBuZXcgZnVuY3Rpb25zIGBjbGVhcl9ub25wcmVzZW50X3B0ZXNgIGFuZCBgcHRlX2NsZWFyYC4gVGhhdCYjMzk7cyBhIGRlZmluaXRlIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgbm9uLXByZXNlbnQgcGFnZSB0YWJsZSBlbnRyaWVzLgoKVGhpcyBoYXMgZG93bnN0cmVhbSBpbXBhY3RzIG9uIGEgZmV3IGtleSBhcmVhczogYG1hZHZpc2VfZnJlZV9wdGVfcmFuZ2VgLCBgZ3VhcmRfcmVtb3ZlX3B0ZV9lbnRyeWAsIGFuZCBgemFwX25vbnByZXNlbnRfcHRlc2AuIEkgc2hvdWxkIGNvbmZpcm0gaWYgYW55IHBhcnRpY3VsYXIga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSByZWxldmFudCBoZXJlLiBMZXQmIzM5O3Mgc2VlLi4uIGBtYWR2aXNlX2ZyZWVfcHRlX3JhbmdlYCBpcyBpbiBgbW0vbWFkdmlzZS5jYCwgc28gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBgbW0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gaWYgaXQmIzM5O3MgYWx3YXlzIGNvbXBpbGVkIGluLCBvciBpZiBpdCBkZXBlbmRzIG9uIGBDT05GSUdfQURWSVNFX1NZU0NBTExTYCBvciBzb21ldGhpbmcgc2ltaWxhci4gSXQgY291bGQgYmUuIEFuZCBgZ3VhcmRfcmVtb3ZlX3B0ZV9lbnRyeWAgaXMgYWxzbyBpbiBgbW0vbWFkdmlzZS5jYCwgYW5kIGB6YXBfbm9ucHJlc2VudF9wdGVzYCBpcyBpbiBgbW0vbWVtb3J5LmNgLgoKT2theSwgSSYjMzk7bGwgZG8gYSBxdWljayBgZ3JlcGAgZm9yIGBtYWR2aXNlX2ZyZWVfcHRlX3JhbmdlYCBhbmQgYHphcF9ub25wcmVzZW50X3B0ZXNgIHRocm91Z2ggdGhlIHNvdXJjZSB0cmVlIHRvIGJlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBvYnZpb3VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA1OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hZHZpc2VfZnJlZV9wdGVfcmFuZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jPTYyNz1zdGF0aWMgbG9uZyBtYWR2aXNlX3BhZ2VvdXQoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTY1Mi1cbm1tL21hZHZpc2UuYzo2NTM6c3RhdGljIGludCBtYWR2aXNlX2ZyZWVfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL21hZHZpc2UuYy02NTQtXHRcdFx0XHR1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IG1tX3dhbGsgKndhbGspXG4tLVxubW0vbWFkdmlzZS5jPTgwMD1zdGF0aWMgaW50IG1hZHZpc2VfZnJlZV9zaW5nbGVfdm1hKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy04MDktXHRzdHJ1Y3QgbW1fd2Fsa19vcHMgd2Fsa19vcHMgPSB7XG5tbS9tYWR2aXNlLmM6ODEwOlx0XHQucG1kX2VudHJ5XHRcdD0gbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZSxcbm1tL21hZHZpc2UuYy04MTEtXHR9O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA1OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNDgKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgYW5kIHN1bW1hcml6aW5nIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIENvZGViYXNlOiBBIEZvY3VzZWQgQ2hlY2sqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGEgc3BlY2lmaWMgZnVuY3Rpb24gb3IgbW9kdWxlOiBgemFwX25vbnByZXNlbnRfcHRlc2AuIFRoaXMgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBvciBvdXRkYXRlZCBlbnRyaWVzIOKAkyBwcm9iYWJseSBzb21ldGhpbmcgcmVsYXRlZCB0byBQVEVzIChwYWdlIHRhYmxlIGVudHJpZXMpIGdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbi4gVGhlICYjMzQ7emFwJiMzNDsgcHJlZml4IHR5cGljYWxseSBzaWduYWxzIGRlbGV0aW9uIG9yIGludmFsaWRhdGlvbi4gVGhlIHBocmFzZSAmIzM0O25vbnByZXNlbnQmIzM0OyBzdWdnZXN0cyB0aGVzZSBhcmUgZW50cmllcyB0aGF0ICpzaG91bGRuJiMzOTt0KiBiZSB2YWxpZCBhbnkgbG9uZ2VyLiBTbywgdGhpcyBjb21tYW5kIHdpbGwgbGlrZWx5IGJlIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIHBlcmhhcHMgY2xlYW5pbmcgdXAgc3RhbGUgZW50cmllcyB0aGF0IGFyZSBubyBsb25nZXIgYXNzb2NpYXRlZCB3aXRoIGFjdGl2ZSBwYWdlcy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBjb25maXJtaW5nIHdoYXQgaXQgYWN0dWFsbHkgKmRvZXMqIGJ5IGV4YW1pbmluZyB0aGUgaW1wbGVtZW50YXRpb24gYW5kIHRoZW4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Igd2hlcmUgaXQgaXMgY2FsbGVkIGluIG15IHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6YXBfbm9ucHJlc2VudF9wdGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbW9yeS5jPTE2ODk9c3RhdGljIGlubGluZSBpbnQgemFwX3ByZXNlbnRfcHRlcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuLS1cbm1tL21lbW9yeS5jLTE3MzQtXG5tbS9tZW1vcnkuYzoxNzM1OnN0YXRpYyBpbmxpbmUgaW50IHphcF9ub25wcmVzZW50X3B0ZXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbm1tL21lbW9yeS5jLTE3MzYtXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwdGVfdCAqcHRlLCBwdGVfdCBwdGVudCxcbi0tXG5tbS9tZW1vcnkuYz0xODA2PXN0YXRpYyBpbmxpbmUgaW50IGRvX3phcF9wdGVfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbi0tXG5tbS9tZW1vcnkuYy0xODM1LVx0ZWxzZVxubW0vbWVtb3J5LmM6MTgzNjpcdFx0bnIgJiM0Mzs9IHphcF9ub25wcmVzZW50X3B0ZXModGxiLCB2bWEsIHB0ZSwgcHRlbnQsIG1heF9uciwgYWRkcixcbm1tL21lbW9yeS5jLTE4MzctXHRcdFx0XHRcdCAgZGV0YWlscywgcnNzLCBhbnlfc2tpcHBlZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDU6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcxNwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogTWVtb3J5IE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7dmUgcGlucG9pbnRlZCBzb21lIGNydWNpYWwgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBoZXJlIOKAkyBkZWZpbml0ZWx5IHdvcnRoIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbi4gVGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IGFyZSBzY3JlYW1pbmcgZm9yIGF0dGVudGlvbiBhcmUgYG1hZHZpc2VfZnJlZV9wdGVfcmFuZ2VgLCBgZ3VhcmRfcmVtb3ZlX3B0ZV9lbnRyeWAsIGFuZCBgemFwX25vbnByZXNlbnRfcHRlc2AuIFdhaXQgYSBtaW51dGUsIGB6YXBfbm9ucHJlc2VudF9wdGVzYCBpcyBhbiBpbmxpbmUgZnVuY3Rpb24sIGJ1dCBpdCYjMzk7cyBpbmRpcmVjdGx5IGNhbGxlZCB0aHJvdWdoIGEgc2VyaWVzIG9mIG90aGVyIGZ1bmN0aW9ucyBsaWtlIGBkb196YXBfcHRlX3JhbmdlYCwgYHphcF9wdGVfcmFuZ2VgLCBhbmQgdWx0aW1hdGVseSwgYHVubWFwX3BhZ2VfcmFuZ2VgLiBNYWtlcyBzZW5zZSwgdGhlIGNhbGwgY2hhaW4gaXMgcmVsZXZhbnQuCgpgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZWAsIEkgcmVjYWxsLCBpcyBwYXJ0IG9mIGBtbV93YWxrX29wc2AsIHRoYXQmIzM5O3MgYW4gaW50ZXJlc3RpbmcgaG9vayBwb2ludCBmb3IgbWVtb3J5IHJlY2xhaW0gc2NlbmFyaW9zLiBgZ3VhcmRfcmVtb3ZlX3B0ZV9lbnRyeWAgYWxzbyByZXNpZGVzIGluIGBtbS9tYWR2aXNlLmNgLiBPa2F5LCBsZXQmIzM5O3MgdHJhY2UgaXRzIGNhbGwgZ3JhcGggYW5kIHNlZSBleGFjdGx5IHdoZXJlIGl0JiMzOTtzIGJlaW5nIGludm9rZWQuIFRoYXQgZ2l2ZXMgbWUgYSBoYW5kbGUgb24gdGhlIHZhcmlvdXMgZXhlY3V0aW9uIHBhdGhzIHRocm91Z2ggdGhlIGtlcm5lbC4gVGhpcyBzaG91bGQgcHJvdmlkZSBtZSB3aXRoIHRoZSBzcGVjaWZpYyBpbnRlcmZhY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA1OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2d1YXJkX3JlbW92ZV9wdGVfZW50cnkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jPTEyMTg9c3RhdGljIGludCBndWFyZF9yZW1vdmVfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9tYWR2aXNlLmMtMTIyOS1cbm1tL21hZHZpc2UuYzoxMjMwOnN0YXRpYyBpbnQgZ3VhcmRfcmVtb3ZlX3B0ZV9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5tbS9tYWR2aXNlLmMtMTIzMS1cdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBuZXh0LCBzdHJ1Y3QgbW1fd2FsayAqd2Fsaylcbi0tXG5tbS9tYWR2aXNlLmM9MTI0ND1zdGF0aWMgbG9uZyBtYWR2aXNlX2d1YXJkX3JlbW92ZShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTI1MC1cdFx0LnBtZF9lbnRyeSA9IGd1YXJkX3JlbW92ZV9wbWRfZW50cnksXG5tbS9tYWR2aXNlLmM6MTI1MTpcdFx0LnB0ZV9lbnRyeSA9IGd1YXJkX3JlbW92ZV9wdGVfZW50cnksXG5tbS9tYWR2aXNlLmMtMTI1Mi1cdFx0LndhbGtfbG9jayA9IGdldF93YWxrX2xvY2sobWFkdl9iZWhhdmlvci1cdTAwM2Vsb2NrX21vZGUpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA1OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzOTkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGl0OgoKKipBbmFseXppbmcgYG1hZHZpc2VgIGFuZCBNZW1vcnkgUmVjbGFtYXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGVudHJ5IHBvaW50cyBmb3IgaGFuZGxpbmcgbWVtb3J5IHJlY2xhbWF0aW9uIHRocm91Z2ggYG1hZHZpc2VgLiBUaGUgY3JpdGljYWwgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgaGVyZSBzZWVtIHRvIGJlIGBtYWR2aXNlX2d1YXJkX3JlbW92ZWAgYW5kIGBtYWR2aXNlX2ZyZWVfc2luZ2xlX3ZtYWAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIG1hZ2ljIHN0YXJ0cy4KClRoZXNlIHNob3VsZCBjb3JyZXNwb25kIGRpcmVjdGx5IHRvIHRoZSBgTUFEVl9GUkVFYCBhbmQgYE1BRFZfR1VBUkRfUkVNT1ZFYCBvcGVyYXRpb25zIChvciBzaW1pbGFyIHZhcmlhbnRzIGRlcGVuZGluZyBvbiBrZXJuZWwgdmVyc2lvbiwgYnV0IHRoZXNlIGFyZSB0aGUga2V5IGlkZWFzKS4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRob3NlIHN5bWJvbGljIGNvbnN0YW50cyBhcmUgcHJvcGVybHkgbWFwcGVkIHRvIHRob3NlIGVudHJ5IHBvaW50cy4KCk15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIHNjcnV0aW5pemUgaG93IHRob3NlIGBNQURWX0ZSRUVgIGFuZCBgTUFEVl9HVUFSRF9SRU1PVkVgIG1hZHZpc2UgZmxhZ3MgYXJlIGhhbmRsZWQgd2l0aGluIGBtbS9tYWR2aXNlLmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGFjdHVhbCBsb2dpYyBmb3IgZnJlZWluZyBvciBndWFyZGluZyBtZW1vcnkgcmVnaW9ucy4gTGV0JiMzOTtzIHNlZSBob3cgdGhlIGtlcm5lbCBpbXBsZW1lbnRzIHRoZXNlIG9wdGltaXphdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA1OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01BRFZfR1VBUkRfUkVNT1ZFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYWxwaGEvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmgtODEtI2RlZmluZSBNQURWX0dVQVJEX0lOU1RBTEwgMTAyXHRcdC8qIGZhdGFsIHNpZ25hbCBvbiBhY2Nlc3MgdG8gcmFuZ2UgKi9cbmFyY2gvYWxwaGEvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmg6ODI6I2RlZmluZSBNQURWX0dVQVJEX1JFTU9WRSAxMDNcdFx0LyogdW5ndWFyZCByYW5nZSAqL1xuYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC04My1cbi0tXG5hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmgtMTA4LSNkZWZpbmUgTUFEVl9HVUFSRF9JTlNUQUxMIDEwMlx0XHQvKiBmYXRhbCBzaWduYWwgb24gYWNjZXNzIHRvIHJhbmdlICovXG5hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmg6MTA5OiNkZWZpbmUgTUFEVl9HVUFSRF9SRU1PVkUgMTAzXHRcdC8qIHVuZ3VhcmQgcmFuZ2UgKi9cbmFyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC0xMTAtXG4tLVxuYXJjaC9wYXJpc2MvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmgtNzgtI2RlZmluZSBNQURWX0dVQVJEX0lOU1RBTEwgMTAyXHRcdC8qIGZhdGFsIHNpZ25hbCBvbiBhY2Nlc3MgdG8gcmFuZ2UgKi9cbmFyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oOjc5OiNkZWZpbmUgTUFEVl9HVUFSRF9SRU1PVkUgMTAzXHRcdC8qIHVuZ3VhcmQgcmFuZ2UgKi9cbmFyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTgwLVxuLS1cbmFyY2gveHRlbnNhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTExNi0jZGVmaW5lIE1BRFZfR1VBUkRfSU5TVEFMTCAxMDJcdFx0LyogZmF0YWwgc2lnbmFsIG9uIGFjY2VzcyB0byByYW5nZSAqL1xuYXJjaC94dGVuc2EvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmg6MTE3OiNkZWZpbmUgTUFEVl9HVUFSRF9SRU1PVkUgMTAzXHRcdC8qIHVuZ3VhcmQgcmFuZ2UgKi9cbmFyY2gveHRlbnNhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTExOC1cbi0tXG5pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvbW1hbi1jb21tb24uaC04Mi0jZGVmaW5lIE1BRFZfR1VBUkRfSU5TVEFMTCAxMDJcdFx0LyogZmF0YWwgc2lnbmFsIG9uIGFjY2VzcyB0byByYW5nZSAqL1xuaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmg6ODM6I2RlZmluZSBNQURWX0dVQVJEX1JFTU9WRSAxMDNcdFx0LyogdW5ndWFyZCByYW5nZSAqL1xuaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmgtODQtXG4tLVxubW0vbWFkdmlzZS5jPTEzMzk9c3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTM2Ny1cdFx0cmV0dXJuIG1hZHZpc2VfZ3VhcmRfaW5zdGFsbChtYWR2X2JlaGF2aW9yKTtcbm1tL21hZHZpc2UuYzoxMzY4Olx0Y2FzZSBNQURWX0dVQVJEX1JFTU9WRTpcbm1tL21hZHZpc2UuYy0xMzY5LVx0XHRyZXR1cm4gbWFkdmlzZV9ndWFyZF9yZW1vdmUobWFkdl9iZWhhdmlvcik7XG4tLVxubW0vbWFkdmlzZS5jPTE1MTk9bWFkdmlzZV9iZWhhdmlvcl92YWxpZChpbnQgYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTE1NDktXHRjYXNlIE1BRFZfR1VBUkRfSU5TVEFMTDpcbm1tL21hZHZpc2UuYzoxNTUwOlx0Y2FzZSBNQURWX0dVQVJEX1JFTU9WRTpcbm1tL21hZHZpc2UuYy0xNTUxLSNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVcbi0tXG5tbS9tYWR2aXNlLmM9MTc0Mz1zdGF0aWMgZW51bSBtYWR2aXNlX2xvY2tfbW9kZSBnZXRfbG9ja19tb2RlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xNzU3LVx0Y2FzZSBNQURWX0dVQVJEX0lOU1RBTEw6XG5tbS9tYWR2aXNlLmM6MTc1ODpcdGNhc2UgTUFEVl9HVUFSRF9SRU1PVkU6XG5tbS9tYWR2aXNlLmMtMTc1OS1cdGNhc2UgTUFEVl9ET05UTkVFRDpcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvbW1hbi1jb21tb24uaC04Mi0jZGVmaW5lIE1BRFZfR1VBUkRfSU5TVEFMTCAxMDJcdFx0LyogZmF0YWwgc2lnbmFsIG9uIGFjY2VzcyB0byByYW5nZSAqL1xudG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmg6ODM6I2RlZmluZSBNQURWX0dVQVJEX1JFTU9WRSAxMDNcdFx0LyogdW5ndWFyZCByYW5nZSAqL1xudG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmgtODQtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jPTM0Nz1URVNUX0YoZ3VhcmRfcmVnaW9ucywgYmFzaWMpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTM4MS1cdC8qIFJlbW92ZSB0aGUgZmlyc3QgZ3VhcmQgcGFnZS4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYzozODI6XHRBU1NFUlRfRkFMU0UobWFkdmlzZShwdHIsIHBhZ2Vfc2l6ZSwgTUFEVl9HVUFSRF9SRU1PVkUpKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy0zODMtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTM4OC1cdEFTU0VSVF9GQUxTRShtYWR2aXNlKFx1MDAyNnB0clsoTlVNX1BBR0VTIC0gMSkgKiBwYWdlX3NpemVdLCBwYWdlX3NpemUsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmM6Mzg5Olx0XHRcdCAgICAgTUFEVl9HVUFSRF9SRU1PVkUpKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy0zOTAtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTQxNS1cdC8qIFJlbW92ZSBndWFyZCBwYWdlcy4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYzo0MTY6XHRBU1NFUlRfRVEobWFkdmlzZShwdHIsIE5VTV9QQUdFUyAqIHBhZ2Vfc2l6ZSwgTUFEVl9HVUFSRF9SRU1PVkUpLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy00MTctXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTQyOC1cdCAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jOjQyOTpcdEFTU0VSVF9FUShtYWR2aXNlKHB0ciwgTlVNX1BBR0VTICogcGFnZV9zaXplLCBNQURWX0dVQVJEX1JFTU9WRSksIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTQzMC1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmM9NDQxPVRFU1RfRihndWFyZF9yZWdpb25zLCBtdWx0aV92bWEpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTUxMS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYzo1MTI6XHRBU1NFUlRfRVEobWFkdmlzZShwdHJfcmVnaW9uLCAxMDAgKiBwYWdlX3NpemUsIE1BRFZfR1VBUkRfUkVNT1ZFKSwgLTEpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTUxMy1cdEFTU0VSVF9FUShlcnJubywgRU5PTUVNKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtNTU3LVx0fVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jOjU1ODpcdEFTU0VSVF9FUShtYWR2aXNlKHB0cl9yZWdpb24sIDEwMCAqIHBhZ2Vfc2l6ZSwgTUFEVl9HVUFSRF9SRU1PVkUpLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy01NTktXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAxMDA7IGkmIzQzOyYjNDM7KSB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jPTU3Mz1URVNUX0YoZ3VhcmRfcmVnaW9ucywgcHJvY2Vzc19tYWR2aXNlKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy02NDQtXHQvKiBOb3cgZG8gdGhlIHNhbWUgd2l0aCB1bmd1YXJkLi4uICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmM6NjQ1Olx0Y291bnQgPSBzeXNfcHJvY2Vzc19tYWR2aXNlKFBJREZEX1NFTEYsIHZlYywgNiwgTUFEVl9HVUFSRF9SRU1PVkUsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTY0Ni1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmM9NzAzPVRFU1RfRihndWFyZF9yZWdpb25zLCBtcHJvdGVjdClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtNzM2LVx0LyogTm93IHVuZ3VhcmQgdGhlIHdob2xlIHJhbmdlLiAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jOjczNzpcdEFTU0VSVF9FUShtYWR2aXNlKHB0ciwgMTAgKiBwYWdlX3NpemUsIE1BRFZfR1VBUkRfUkVNT1ZFKSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtNzM4LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYz03NTE9VEVTVF9GKGd1YXJkX3JlZ2lvbnMsIHNwbGl0X21lcmdlKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy04NTUtXHQvKiAuLi5hbmQgdW5ndWFyZCB0aGUgd2hvbGUgcmFuZ2UuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmM6ODU2Olx0QVNTRVJUX0VRKG1hZHZpc2UocHRyLCAxMCAqIHBhZ2Vfc2l6ZSwgTUFEVl9HVUFSRF9SRU1PVkUpLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy04NTctXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jPTk0Mz1URVNUX0YoZ3VhcmRfcmVnaW9ucywgbWxvY2spXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTk5Ni1cdCAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jOjk5NzpcdEFTU0VSVF9FUShtYWR2aXNlKHB0ciwgMTAgKiBwYWdlX3NpemUsIE1BRFZfR1VBUkRfUkVNT1ZFKSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtOTk4LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYz0xMTg4PVRFU1RfRihndWFyZF9yZWdpb25zLCBmb3JrKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy0xMjE2LVx0XHQvKiBOb3cgdW5ndWFyZCB0aGUgcmFuZ2UuKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYzoxMjE3Olx0XHRBU1NFUlRfRVEobWFkdmlzZShwdHIsIDEwICogcGFnZV9zaXplLCBNQURWX0dVQVJEX1JFTU9WRSksIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTEyMTgtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jPTEyNDM9VEVTVF9GKGd1YXJkX3JlZ2lvbnMsIGZvcmtfY293KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy0xMjgwLVx0XHQvKiBSZW1vdmUgaXQuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmM6MTI4MTpcdFx0QVNTRVJUX0VRKG1hZHZpc2UocHRyLCAxMCAqIHBhZ2Vfc2l6ZSwgTUFEVl9HVUFSRF9SRU1PVkUpLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy0xMjgyLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYz0xNTU0PVRFU1RfRihndWFyZF9yZWdpb25zLCBtYWR2aXNlX3NlcXVlbnRpYWwpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTE1OTctXHQvKiBOb3cgcmVtb3ZlIGd1YXJkIHBhZ2VzLiAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jOjE1OTg6XHRBU1NFUlRfRVEobWFkdmlzZShwdHIsIDEwICogcGFnZV9zaXplLCBNQURWX0dVQVJEX1JFTU9WRSksIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTE1OTktXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jPTE2MTE9VEVTVF9GKGd1YXJkX3JlZ2lvbnMsIG1hcF9wcml2YXRlKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy0xNjU4LVx0LyogUmVtb3ZlIGd1YXJkIHJlZ2lvbnMgZnJvbSBzaGFyZWQgbWFwcGluZy4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYzoxNjU5Olx0QVNTRVJUX0VRKG1hZHZpc2UocHRyX3NoYXJlZCwgMTAgKiBwYWdlX3NpemUsIE1BRFZfR1VBUkRfUkVNT1ZFKSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtMTY2MC1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtMTY2OC1cdC8qIFJlbW92ZSBndWFyZCByZWdpb25zIGZyb20gcHJpdmF0ZSBtYXBwaW5nLiAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jOjE2Njk6XHRBU1NFUlRfRVEobWFkdmlzZShwdHJfcHJpdmF0ZSwgMTAgKiBwYWdlX3NpemUsIE1BRFZfR1VBUkRfUkVNT1ZFKSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtMTY3MC1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtMTcxNy1cdC8qIFJlbW92ZSB0aGUgZ3VhcmQgcmVnaW9ucyBhbHRvZ2V0aGVyLiAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jOjE3MTg6XHRBU1NFUlRfRVEobWFkdmlzZShwdHJfcHJpdmF0ZSwgMTAgKiBwYWdlX3NpemUsIE1BRFZfR1VBUkRfUkVNT1ZFKSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtMTcxOS1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmM9MTc1ND1URVNUX0YoZ3VhcmRfcmVnaW9ucywgcmVhZG9ubHlfZmlsZSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtMTc5My1cdC8qIFJlbW92ZSBndWFyZCByZWdpb25zLiAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jOjE3OTQ6XHRBU1NFUlRfRVEobWFkdmlzZShwdHIsIDEwICogcGFnZV9zaXplLCBNQURWX0dVQVJEX1JFTU9WRSksIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTE3OTUtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jPTE5MTE9VEVTVF9GKGd1YXJkX3JlZ2lvbnMsIGhvbGVfcHVuY2gpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTE5NTctXHQvKiBOb3cgcmVtb3ZlIGd1YXJkIHJlZ2lvbiB0aHJvdWdob3V0LiAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jOjE5NTg6XHRBU1NFUlRfRVEobWFkdmlzZShwdHIsIDEwICogcGFnZV9zaXplLCBNQURWX0dVQVJEX1JFTU9WRSksIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTE5NTktXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jPTE5NzU9VEVTVF9GKGd1YXJkX3JlZ2lvbnMsIG1lbWZkX3dyaXRlX3NlYWwpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTIwMjMtXHQvKiBOb3cgcmVtb3ZlIGd1YXJkIHJlZ2lvbnMuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmM6MjAyNDpcdEFTU0VSVF9FUShtYWR2aXNlKHB0ciwgMTAgKiBwYWdlX3NpemUsIE1BRFZfR1VBUkRfUkVNT1ZFKSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtMjAyNS1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmM9MjA0Nj1URVNUX0YoZ3VhcmRfcmVnaW9ucywgYW5vbl96ZXJvcGFnZSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtMjA3My1cdC8qIE5vdyByZW1vdmUgYWxsIGd1YXJkIHJlZ2lvbnMuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmM6MjA3NDpcdEFTU0VSVF9FUShtYWR2aXNlKHB0ciwgMTAgKiBwYWdlX3NpemUsIE1BRFZfR1VBUkRfUkVNT1ZFKSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtMjA3NS1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmM9MjI0OT1URVNUX0YoZ3VhcmRfcmVnaW9ucywgc21hcHMpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTIyNzMtXHQgKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYzoyMjc0Olx0QVNTRVJUX0VRKG1hZHZpc2UocHRyLCBwYWdlX3NpemUsIE1BRFZfR1VBUkRfUkVNT1ZFKSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtMjI3NS1cdEFTU0VSVF9UUlVFKGNoZWNrX3ZtZmxhZ19ndWFyZChwdHIpKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaD0zMz1zZXBhcmF0ZWQgYnkgc3BhY2VzOlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoLTUyLS0gbWFkdl9ndWFyZFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2g6NTM6XHR0ZXN0IG1hZHZpc2UoMikgTUFEVl9HVUFSRF9JTlNUQUxMIGFuZCBNQURWX0dVQVJEX1JFTU9WRSBvcHRpb25zXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaC01NC0tIG1hZHZfcG9wdWxhdGVcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaD0zNDM9Q0FURUdPUlk9XCYjMzQ7aG1tXCYjMzQ7IHJ1bl90ZXN0IGJhc2ggLi90ZXN0X2htbS5zaCBzbW9rZVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gtMzQ0LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2g6MzQ1OiMgTUFEVl9HVUFSRF9JTlNUQUxMIGFuZCBNQURWX0dVQVJEX1JFTU9WRSB0ZXN0c1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gtMzQ2LUNBVEVHT1JZPVwmIzM0O21hZHZfZ3VhcmRcJiMzNDsgcnVuX3Rlc3QgLi9ndWFyZC1yZWdpb25zXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA1OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2NjQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyByZWdhcmRpbmcgYE1BRFZfR1VBUkRfUkVNT1ZFYDoKCioqSW52ZXN0aWdhdGluZyB0aGUgSW1wbGVtZW50YXRpb24gb2YgYE1BRFZfR1VBUkRfUkVNT1ZFYCoqCgpBbHJpZ2h0LCBzbyBgTUFEVl9HVUFSRF9SRU1PVkVgIGlzIHNvbWV0aGluZyBuZXcsIG9yIGF0IGxlYXN0IGEgbmV3IGZlYXR1cmUgYmVpbmcgZXZhbHVhdGVkLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCBkb2VzIHRoaXMgdGhpbmcgaGF2ZSBhbnkgY29uZmlndXJhdGlvbiBrbm9icyBvciBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyYjMzQ7IEZpcnN0IHRoaW5nJiMzOTtzIGZpcnN0LCBJIHNob3VsZCBmaW5kIGl0cyBpbXBsZW1lbnRhdGlvbi4gTG9va3MgbGlrZSB0aGUgaW5pdGlhbCBsZWFkIGlzIHBvaW50aW5nIHRvd2FyZHMgYG1hZHZpc2UuY2AuICBMZXQmIzM5O3MgaGVhZCBvdmVyIHRvIGBtbS9tYWR2aXNlLmNgIGFuZCBodW50IGZvciBgTUFEVl9HVUFSRF9SRU1PVkVgIGl0c2VsZi4gVGhhdCYjMzk7bGwgYmUgdGhlIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgaXRzIGNvcmUgYmVoYXZpb3IgYW5kIGFueSBhc3NvY2lhdGVkIGRlcGVuZGVuY2llcy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtNQURWX0dVQVJEX1JFTU9WRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21hZHZpc2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tYWR2aXNlLmM9MTMzOT1zdGF0aWMgaW50IG1hZHZpc2Vfdm1hX2JlaGF2aW9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xMzY3LVx0XHRyZXR1cm4gbWFkdmlzZV9ndWFyZF9pbnN0YWxsKG1hZHZfYmVoYXZpb3IpO1xubW0vbWFkdmlzZS5jOjEzNjg6XHRjYXNlIE1BRFZfR1VBUkRfUkVNT1ZFOlxubW0vbWFkdmlzZS5jLTEzNjktXHRcdHJldHVybiBtYWR2aXNlX2d1YXJkX3JlbW92ZShtYWR2X2JlaGF2aW9yKTtcbi0tXG5tbS9tYWR2aXNlLmM9MTUxOT1tYWR2aXNlX2JlaGF2aW9yX3ZhbGlkKGludCBiZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTU0OS1cdGNhc2UgTUFEVl9HVUFSRF9JTlNUQUxMOlxubW0vbWFkdmlzZS5jOjE1NTA6XHRjYXNlIE1BRFZfR1VBUkRfUkVNT1ZFOlxubW0vbWFkdmlzZS5jLTE1NTEtI2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRVxuLS1cbm1tL21hZHZpc2UuYz0xNzQzPXN0YXRpYyBlbnVtIG1hZHZpc2VfbG9ja19tb2RlIGdldF9sb2NrX21vZGUoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTE3NTctXHRjYXNlIE1BRFZfR1VBUkRfSU5TVEFMTDpcbm1tL21hZHZpc2UuYzoxNzU4Olx0Y2FzZSBNQURWX0dVQVJEX1JFTU9WRTpcbm1tL21hZHZpc2UuYy0xNzU5LVx0Y2FzZSBNQURWX0RPTlRORUVEOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDI4MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgTUFEVl9HVUFSRF9SRU1PVkUmIzM5O3MgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gdGhpcyBgTUFEVl9HVUFSRF9SRU1PVkVgIGZsYWcgYW5kIGltbWVkaWF0ZWx5IEkmIzM5O20gd29uZGVyaW5nOiBpcyB0aGlzIGZlYXR1cmUgY29uZGl0aW9uYWxseSBjb21waWxlZD8gSXMgaXQgb25seSBhdmFpbGFibGUgb24gc3BlY2lmaWMgYXJjaGl0ZWN0dXJlcyBvciB3aXRoIGNlcnRhaW4ga2VybmVsIGNvbmZpZ3VyYXRpb25zPyBUaGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIGNvbmZpcm0gdGhhdC4gSSBuZWVkIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGAjaWZkZWZgIGRpcmVjdGl2ZXMgc3Vycm91bmRpbmcgaXRzIGRlZmluaXRpb24gb3IgdXNhZ2UuIE15IGluc3RpbmN0IGlzIHRvIGdvIGRpcmVjdGx5IHRvIGBtbS9tYWR2aXNlLmNgLCB0aGF0IHNlZW1zIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBmaW5kIHRoZSBgbWFkdmlzZV9ndWFyZF9yZW1vdmVgIGZ1bmN0aW9uYWxpdHksIGFzc3VtaW5nIGl0IGhhcyBpdHMgb3duIGRlZGljYXRlZCBmdW5jdGlvbi4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDU6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFkdmlzZV9ndWFyZF9yZW1vdmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tYWR2aXNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jPTEyMzA9c3RhdGljIGludCBndWFyZF9yZW1vdmVfcHRlX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9tYWR2aXNlLmMtMTI0My1cbm1tL21hZHZpc2UuYzoxMjQ0OnN0YXRpYyBsb25nIG1hZHZpc2VfZ3VhcmRfcmVtb3ZlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxubW0vbWFkdmlzZS5jLTEyNDUte1xuLS1cbm1tL21hZHZpc2UuYz0xMzM5PXN0YXRpYyBpbnQgbWFkdmlzZV92bWFfYmVoYXZpb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTEzNjgtXHRjYXNlIE1BRFZfR1VBUkRfUkVNT1ZFOlxubW0vbWFkdmlzZS5jOjEzNjk6XHRcdHJldHVybiBtYWR2aXNlX2d1YXJkX3JlbW92ZShtYWR2X2JlaGF2aW9yKTtcbm1tL21hZHZpc2UuYy0xMzcwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDcxNgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgTWVtb3J5IEFkdmlzZSBBdmFpbGFiaWxpdHkqKgoKSG1tLCBpdCYjMzk7cyBvY2N1cnJpbmcgdG8gbWUgdGhhdCBgTUFEVl9HVUFSRF9SRU1PVkVgIGFwcGVhcnMgdG8gYmUgcmVsaWFibHkgYXZhaWxhYmxlIHdoZW5ldmVyIGBtYWR2aXNlYCBpdHNlbGYgaXMuIFRoYXQmIzM5O3MgYSBnb29kIG9ic2VydmF0aW9uLCBtYWtlcyBzZW5zZSBnaXZlbiB0aGUgZ2VuZXJhbCBkZXNpZ24gcGhpbG9zb3BoeSBvZiB0aGVzZSBtZW1vcnkgbWFuYWdlbWVudCB0b29scy4gQnV0IHdoYXQgYWJvdXQgYG1hZHZpc2VfZnJlZV9wdGVfcmFuZ2VgPyBUaGF0JiMzOTtzIHNwZWNpZmljYWxseSB0aWVkIHRvIGBNQURWX0ZSRUVgLCByaWdodD8gSSBuZWVkIHRvIGNsYXJpZnkgaWYgdGhhdCBmdW5jdGlvbiYjMzk7cyBhdmFpbGFiaWxpdHkgaGFzIHNpbWlsYXIgZ3VhcmFudGVlcywgb3IgaWYgdGhlcmUmIzM5O3MgYSBtb3JlIG51YW5jZWQgZGVwZW5kZW5jeSBhdCBwbGF5LgoKVG8gYmUgY2VydGFpbiwgaXTigJlzIGJlc3QgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZS4gTGV0JiMzOTtzIGRlbHZlIGludG8gYG1tL21hZHZpc2UuY2AuIEkgbmVlZCB0byByZXZpZXcgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBNQURWX0ZSRUVgIHdpdGhpbiB0aGF0IG1vZHVsZSB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgd2l0aCBgbWFkdmlzZWAgYW5kLCBieSBleHRlbnNpb24sIHRoZSBhdmFpbGFiaWxpdHkgYW5kIHBvdGVudGlhbCB1c2VzIG9mIGBtYWR2aXNlX2ZyZWVfcHRlX3JhbmdlYC4gVGltZSB0byBnZXQgaW50byB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDU6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TUFEVl9GUkVFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21hZHZpc2UuYz04MDA9c3RhdGljIGludCBtYWR2aXNlX2ZyZWVfc2luZ2xlX3ZtYShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtODEyLVxubW0vbWFkdmlzZS5jOjgxMzpcdC8qIE1BRFZfRlJFRSB3b3JrcyBmb3Igb25seSBhbm9uIHZtYSBhdCB0aGUgbW9tZW50ICovXG5tbS9tYWR2aXNlLmMtODE0LVx0aWYgKCF2bWFfaXNfYW5vbnltb3VzKHZtYSkpXG4tLVxubW0vbWFkdmlzZS5jPTg5Nz1zdGF0aWMgbG9uZyBtYWR2aXNlX2RvbnRuZWVkX2ZyZWUoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTk1MS1cdFx0cmV0dXJuIG1hZHZpc2VfZG9udG5lZWRfc2luZ2xlX3ZtYShtYWR2X2JlaGF2aW9yKTtcbm1tL21hZHZpc2UuYzo5NTI6XHRlbHNlIGlmIChiZWhhdmlvciA9PSBNQURWX0ZSRUUpXG5tbS9tYWR2aXNlLmMtOTUzLVx0XHRyZXR1cm4gbWFkdmlzZV9mcmVlX3NpbmdsZV92bWEobWFkdl9iZWhhdmlvcik7XG4tLVxubW0vbWFkdmlzZS5jPTEyNjg9c3RhdGljIGJvb2wgaXNfZGlzY2FyZChpbnQgYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTEyNzAtXHRzd2l0Y2ggKGJlaGF2aW9yKSB7XG5tbS9tYWR2aXNlLmM6MTI3MTpcdGNhc2UgTUFEVl9GUkVFOlxubW0vbWFkdmlzZS5jLTEyNzItXHRjYXNlIE1BRFZfRE9OVE5FRUQ6XG4tLVxubW0vbWFkdmlzZS5jPTEzMzk9c3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTM1OC1cdFx0cmV0dXJuIG1hZHZpc2VfcGFnZW91dChtYWR2X2JlaGF2aW9yKTtcbm1tL21hZHZpc2UuYzoxMzU5Olx0Y2FzZSBNQURWX0ZSRUU6XG5tbS9tYWR2aXNlLmMtMTM2MC1cdGNhc2UgTUFEVl9ET05UTkVFRDpcbi0tXG5tbS9tYWR2aXNlLmM9MTUxOT1tYWR2aXNlX2JlaGF2aW9yX3ZhbGlkKGludCBiZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTUzMC1cdGNhc2UgTUFEVl9ET05UTkVFRF9MT0NLRUQ6XG5tbS9tYWR2aXNlLmM6MTUzMTpcdGNhc2UgTUFEVl9GUkVFOlxubW0vbWFkdmlzZS5jLTE1MzItXHRjYXNlIE1BRFZfQ09MRDpcbi0tXG5tbS9tYWR2aXNlLmM9MTc0Mz1zdGF0aWMgZW51bSBtYWR2aXNlX2xvY2tfbW9kZSBnZXRfbG9ja19tb2RlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xNzYwLVx0Y2FzZSBNQURWX0RPTlRORUVEX0xPQ0tFRDpcbm1tL21hZHZpc2UuYzoxNzYxOlx0Y2FzZSBNQURWX0ZSRUU6XG5tbS9tYWR2aXNlLmMtMTc2Mi1cdFx0cmV0dXJuIE1BRFZJU0VfVk1BX1JFQURfTE9DSztcbi0tXG5tbS9tYWR2aXNlLmM9MTgxMz1zdGF0aWMgYm9vbCBtYWR2aXNlX2JhdGNoX3RsYl9mbHVzaChpbnQgYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTE4MTctXHRjYXNlIE1BRFZfRE9OVE5FRURfTE9DS0VEOlxubW0vbWFkdmlzZS5jOjE4MTg6XHRjYXNlIE1BRFZfRlJFRTpcbm1tL21hZHZpc2UuYy0xODE5LVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5tbS9tYWR2aXNlLmM9MTg4OD1zdGF0aWMgaW50IG1hZHZpc2VfZG9fYmVoYXZpb3IodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbl9pbixcbi0tXG5tbS9tYWR2aXNlLmMtMTkzNC0gKlx0XHRzbyB0aGUga2VybmVsIGNhbiBmcmVlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggaXQuXG5tbS9tYWR2aXNlLmM6MTkzNTogKiAgTUFEVl9GUkVFIC0gdGhlIGFwcGxpY2F0aW9uIG1hcmtzIHBhZ2VzIGluIHRoZSBnaXZlbiByYW5nZSBhcyBsYXp5IGZyZWUsXG5tbS9tYWR2aXNlLmMtMTkzNi0gKlx0XHR3aGVyZSBhY3R1YWwgcHVyZ2VzIGFyZSBwb3N0cG9uZWQgdW50aWwgbWVtb3J5IHByZXNzdXJlIGhhcHBlbnMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA1OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTA4CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBhIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY3kqKgoKSG1tLCBgQ09ORklHX0FEVklTRV9TWVNDQUxMU2AuLi4gSSYjMzk7bSBnZXR0aW5nIGEgZmVlbGluZyB0aGF0IHNvbWV0aGluZyBpcyB1c2luZyBpdCwgYnV0IEkgY2FuJiMzOTt0IHF1aXRlIHBsYWNlIGl0LiBPa2F5LCBiZXN0IHRvIGp1c3QgZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBzb3VyY2UuIE15IGluc3RpbmN0IGlzIHRoYXQgdGhpcyBpcyBzb21ldGhpbmcgdGhhdCYjMzk7cyBsaWtlbHkgdGllZCBpbnRvIG1lbW9yeSBtYW5hZ2VtZW50LCBzbyBJIHNob3VsZCBwcm9iYWJseSBzdGFydCB3aXRoIHRoZSBgbW0vYCBkaXJlY3RvcnkuIFJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIHBlZWsgYXQgYG1tL01ha2VmaWxlYC4gVGhhdCBzaG91bGQgYmUgdGhlIHF1aWNrZXN0IHdheSB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCBtaWdodCBiZSBjb25kaXRpb25hbGx5IGNvbXBpbGluZyBiYXNlZCBvbiB0aGF0IGZsYWcuIEhvcGVmdWxseSwgaXTigJlzIHJlYXNvbmFibHkgd2VsbC1jb21tZW50ZWQgYW5kIEkgY2FuIGp1c3QgcGFyc2UgdGhhdCBxdWlja2x5IHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIEl0JiMzOTtzIGFsbW9zdCBhbHdheXMgYSBnb29kIHN0cmF0ZWd5IHRvIHN0YXJ0IHdpdGggdGhlIGJ1aWxkIHN5c3RlbSBpdHNlbGYgd2hlbiBjaGFzaW5nIGRvd24gY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA1OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hZHZpc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT03ND1pZmRlZiBDT05GSUdfTU1VXG5tbS9NYWtlZmlsZTo3NTpcdG9iai0kKENPTkZJR19BRFZJU0VfU1lTQ0FMTFMpXHQmIzQzOz0gbWFkdmlzZS5vXG5tbS9NYWtlZmlsZS03Ni1lbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIwMwoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipDaGVja2luZyB0aGUgRGVwZW5kZW5jaWVzIGZvciBgbWFkdmlzZS5jYCoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHByZXR0eSBzdXJlIGBDT05GSUdfQURWSVNFX1NZU0NBTExTYCBpcyBhIHJlcXVpcmVtZW50IGZvciBgbWFkdmlzZS5jYC4gVGhhdCYjMzk7cyB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGFjdHVhbGx5IGJlaW5nIGVuYWJsZWQgd2hlbiBJIGV4cGVjdCBpdCB0byBiZS4KCkhhbmcgb24gYSBzZWNvbmTigKYgSSBuZWVkIHRvIGNvbnNpZGVyIGB6YXBfbm9ucHJlc2VudF9wdGVzYC4gSSBzZWVtIHRvIHJlY2FsbCB0aGF0IGJlaW5nIGluIGBtbS9tZW1vcnkuY2AuIEJ1dCBgbW0vbWVtb3J5LmNgIGlzIGFsd2F5cyBjb21waWxlZCwgaXNuJiMzOTt0IGl0PyBJZiBzbywgd2h5IHdvdWxkIHRoaXMgYENPTkZJR2AgbWF0dGVyIGZvciBzb21ldGhpbmcgdGhhdCYjMzk7cyBhbHdheXMgYnVpbHQ/IFNvbWV0aGluZyBkb2VzbiYjMzk7dCBxdWl0ZSBhZGQgdXAgaGVyZSwgc28gdGhlIG5leHQgc3RlcCBpcyB0byBuYWlsIGRvd24gdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5LgoKTGV0IG1lIGdvIGxvb2sgYXQgYGluaXQvS2NvbmZpZ2Agb3Igc29tZXdoZXJlIHNpbWlsYXIgdG8gZG91YmxlLWNoZWNrIHRoaXMgYENPTkZJR19BRFZJU0VfU1lTQ0FMTFNgIGFuZCBtYWtlIHN1cmUgSSBmdWxseSB1bmRlcnN0YW5kIHdoZXJlIGl0IGNvbWVzIGZyb20gYW5kIHdoYXQgaXQgY29udHJvbHMuIEl0JiMzOTtzIGxpa2VseSByZWxhdGVkIHRvIHRoZSBzeXNjYWxsIGl0c2VsZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDU6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFEVklTRV9TWVNDQUxMUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTkzNz1jb25maWcgSU9fVVJJTkdfTU9DS19GSUxFXG4tLVxuaW5pdC9LY29uZmlnLTE5NDctXG5pbml0L0tjb25maWc6MTk0ODpjb25maWcgQURWSVNFX1NZU0NBTExTXG5pbml0L0tjb25maWctMTk0OS1cdGJvb2wgXCYjMzQ7RW5hYmxlIG1hZHZpc2UvZmFkdmlzZSBzeXNjYWxsc1wmIzM0OyBpZiBFWFBFUlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDU6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2MzAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgRGVmYXVsdCBCZWhhdmlvciBvZiBQVEUgQ2xlYXJpbmcqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBjbGVhcmluZyBvZiBwYWdlIHRhYmxlIGVudHJpZXMgd29ya3MuIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhpcyBgemFwX25vbnByZXNlbnRfcHRlc2AgZnVuY3Rpb25hbGl0eSBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuIEkgbmVlZCB0byBjb25maXJtIHRoaXMuIFRoZSBmaXJzdCBwbGFjZSB0byBjaGVjayBpcyBgbW0vbWVtb3J5LmNgLiBJIHJlY2FsbCBhIHBhdGNoIHRoYXQgZGVhbHQgd2l0aCB0aGlzIGFyZWEsIHNwZWNpZmljYWxseSByZXBsYWNpbmcgYGNsZWFyX25vdF9wcmVzZW50X2Z1bGxfcHRlc2Agd2l0aCBgY2xlYXJfbm9ucHJlc2VudF9wdGVzYC4gVGhhdCBjaGFuZ2UgaXMgc2lnbmlmaWNhbnQuIE5vdywgd2hlcmUgaXMgdGhpcyBuZXcgYGNsZWFyX25vbnByZXNlbnRfcHRlc2AgZnVuY3Rpb24gZGVmaW5lZD8gQWgsIGl0JiMzOTtzIGFuIGlubGluZSBzdGF0aWMgZnVuY3Rpb247IEkmIzM5O2xsIGZpbmQgaXQgaW4gYGluY2x1ZGUvbGludXgvcGd0YWJsZS5oYC4KCk5vdywgSSBuZWVkIHRvIHpvb20gaW4gb24gaG93IHRoaXMgaXMgdXRpbGl6ZWQuIEkgd2FudCB0byBzZWUgdGhpcyBpbiBjb250ZXh0LCBzbyBJJiMzOTtsbCBiZSBmb2N1c2luZyBvbjogYG1hZHZpc2VfZnJlZV9wdGVfcmFuZ2VgLCBgZ3VhcmRfcmVtb3ZlX3B0ZV9lbnRyeWAsIGFuZCBgemFwX25vbnByZXNlbnRfcHRlc2AgdG8gYmVnaW4gd2l0aC4gCgpUbyBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IGEgY29tcHJlaGVuc2l2ZSB2aWV3LCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGlmIGBjbGVhcl9ub25wcmVzZW50X3B0ZXNgIGlzIHVzZWQgaW4gYW55IG90aGVyIHBsYWNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDU6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2xlYXJfbm9ucHJlc2VudF9wdGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGd0YWJsZS5oPTk4NT1zdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX21tdV90bGIoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtOTkxLS8qKlxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg6OTkyOiAqIGNsZWFyX25vbnByZXNlbnRfcHRlcyAtIENsZWFyIG11bHRpcGxlIG5vbi1wcmVzZW50IFBURXMgd2hpY2ggYXJlXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC05OTMtICpcdFx0XHQgICAgY29uc2VjdXRpdmUgaW4gdGhlIHBndGFibGUuXG4tLVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMTAwMS0gKi9cbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oOjEwMDI6c3RhdGljIGlubGluZSB2b2lkIGNsZWFyX25vbnByZXNlbnRfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTEwMDMtXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGludCBucilcbi0tXG5tbS9tYWR2aXNlLmM9NjUzPXN0YXRpYyBpbnQgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vbWFkdmlzZS5jLTY5Ny1cdFx0XHRcdHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0KGVudHJ5LCBucik7XG5tbS9tYWR2aXNlLmM6Njk4Olx0XHRcdFx0Y2xlYXJfbm9ucHJlc2VudF9wdGVzKG1tLCBhZGRyLCBwdGUsIG5yKTtcbm1tL21hZHZpc2UuYy02OTktXHRcdFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19od3BvaXNvbihlbnRyeSkgfHxcbi0tXG5tbS9tZW1vcnkuYz0xNzM1PXN0YXRpYyBpbmxpbmUgaW50IHphcF9ub25wcmVzZW50X3B0ZXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbi0tXG5tbS9tZW1vcnkuYy0xNzk5LVx0fVxubW0vbWVtb3J5LmM6MTgwMDpcdGNsZWFyX25vbnByZXNlbnRfcHRlcyh2bWEtXHUwMDNldm1fbW0sIGFkZHIsIHB0ZSwgbnIpO1xubW0vbWVtb3J5LmMtMTgwMS1cdCphbnlfc2tpcHBlZCA9IHphcF9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkKHZtYSwgYWRkciwgcHRlLCBuciwgZGV0YWlscywgcHRlbnQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzUxNwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLCBteSBtZW50YWwgZ2VhcnMgYXJlIHR1cm5pbmcuLi4KCioqQW5hbHl6aW5nIFBhZ2UgVGFibGUgRW50cnkgKFBURSkgTWFuYWdlbWVudCBGdW5jdGlvbnMqKgoKUmlnaHQsIEkmIzM5O20gZm9jdXNpbmcgaW4gb24gdGhlc2Uga2V5IGZ1bmN0aW9uczogYG1hZHZpc2VfZnJlZV9wdGVfcmFuZ2VgLCBgZ3VhcmRfcmVtb3ZlX3B0ZV9lbnRyeWAsIGFuZCB0aGF0IHBlc2t5IGB6YXBfbm9ucHJlc2VudF9wdGVzYC4gTm93LCB3YWl0IGEgbWludXRlLCB3YXNuJiMzOTt0IGB6YXBfbm9ucHJlc2VudF9wdGVzYCBzdGF0aWMgaW5saW5lPyBUaGF0IG1lYW5zIGl0JiMzOTtzIHByb2JhYmx5ICpub3QqIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIGNhbGwgSSYjMzk7bSBhZnRlciwgbW9yZSBsaWtlIGEgaGVscGVyLCBwZXJoYXBzIGxlYWRpbmcgbWUgaW5zdGVhZCB0byBgZG9femFwX3B0ZV9yYW5nZWAgb3IgZXZlbiBqdXN0IHRoZSBwbGFpbiBgemFwX3B0ZV9yYW5nZWAuIFRpbWUgdG8gZG91YmxlLWNoZWNrIHRoYXQgYHphcF9ub25wcmVzZW50X3B0ZXNgIGFnYWluLCBqdXN0IHRvIGJlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBzb21ldGhpbmcgc3VidGxlIGluIGl0cyBpbXBsZW1lbnRhdGlvbiB0aGF0IG1pZ2h0IHBvaW50IHRvIHRoZSBjb3JlIG9wZXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgdGhlIGFjdHVhbCBhY3Rpb25zIHRoZXNlIGZ1bmN0aW9ucyBhcmUgb3JjaGVzdHJhdGluZy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6YXBfbm9ucHJlc2VudF9wdGVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmM9MTY4OT1zdGF0aWMgaW5saW5lIGludCB6YXBfcHJlc2VudF9wdGVzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG4tLVxubW0vbWVtb3J5LmMtMTczNC1cbm1tL21lbW9yeS5jOjE3MzU6c3RhdGljIGlubGluZSBpbnQgemFwX25vbnByZXNlbnRfcHRlcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxubW0vbWVtb3J5LmMtMTczNi1cdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHB0ZV90ICpwdGUsIHB0ZV90IHB0ZW50LFxuLS1cbm1tL21lbW9yeS5jPTE4MDY9c3RhdGljIGlubGluZSBpbnQgZG9femFwX3B0ZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuLS1cbm1tL21lbW9yeS5jLTE4MzUtXHRlbHNlXG5tbS9tZW1vcnkuYzoxODM2Olx0XHRuciAmIzQzOz0gemFwX25vbnByZXNlbnRfcHRlcyh0bGIsIHZtYSwgcHRlLCBwdGVudCwgbWF4X25yLCBhZGRyLFxubW0vbWVtb3J5LmMtMTgzNy1cdFx0XHRcdFx0ICBkZXRhaWxzLCByc3MsIGFueV9za2lwcGVkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDU6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwNzIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzcywgd2l0aCB0aGUgYm9sZGVkIGhlYWRlcjoKCioqRGl2aW5nIGludG8gdGhlIFBURSBSYW5nZSBaYXBwZXIqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGBkb196YXBfcHRlX3JhbmdlYCwgYW5kIGl0JiMzOTtzIGZsYWdnZWQgYXMgc3RhdGljIGlubGluZSwgd2hpY2ggc3VnZ2VzdHMgYSBwZXJmb3JtYW5jZS1mb2N1c2VkIGltcGxlbWVudGF0aW9uLiBUaGF0JiMzOTtzIGdvb2Q7IGxpa2VseSB0aGVyZSYjMzk7cyBzb21lIGxvdy1sZXZlbCBvcHRpbWl6YXRpb24gZ29pbmcgb24gaGVyZS4gQ29uc2lkZXJpbmcgaXRzIG5hbWUsIEkmIzM5O20gZ3Vlc3NpbmcgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgY2xlYXJpbmcgb3IgaW52YWxpZGF0aW5nIGEgcmFuZ2Ugb2YgcGFnZSB0YWJsZSBlbnRyaWVzLiBMZXQgbWUgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIGBkb196YXBfcHRlX3JhbmdlYCBhbmQgc2VlIGhvdyB0aGlzIGlubGluZSBiZWFzdCBvcGVyYXRlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDU6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9femFwX3B0ZV9yYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbW9yeS5jPTE3MzU9c3RhdGljIGlubGluZSBpbnQgemFwX25vbnByZXNlbnRfcHRlcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuLS1cbm1tL21lbW9yeS5jLTE4MDUtXG5tbS9tZW1vcnkuYzoxODA2OnN0YXRpYyBpbmxpbmUgaW50IGRvX3phcF9wdGVfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbm1tL21lbW9yeS5jLTE4MDctXHRcdFx0XHQgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcHRlX3QgKnB0ZSxcbi0tXG5tbS9tZW1vcnkuYz0xOTAwPXN0YXRpYyB1bnNpZ25lZCBsb25nIHphcF9wdGVfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbi0tXG5tbS9tZW1vcnkuYy0xOTMzLVxubW0vbWVtb3J5LmM6MTkzNDpcdFx0bnIgPSBkb196YXBfcHRlX3JhbmdlKHRsYiwgdm1hLCBwdGUsIGFkZHIsIGVuZCwgZGV0YWlscywgcnNzLFxubW0vbWVtb3J5LmMtMTkzNS1cdFx0XHRcdCAgICAgIFx1MDAyNmZvcmNlX2ZsdXNoLCBcdTAwMjZmb3JjZV9icmVhaywgXHUwMDI2YW55X3NraXBwZWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDUyMwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyBgemFwX3B0ZV9yYW5nZWAqKgoKT2theSwgc28gYHphcF9wdGVfcmFuZ2VgIGlzbiYjMzk7dCBhbiBpbmxpbmUgZnVuY3Rpb24g4oCTIHRoYXQmIzM5O3MgYSBrZXkgb2JzZXJ2YXRpb24uIFRoYXQgYWxvbmUgdGVsbHMgdXMgc29tZXRoaW5nIGFib3V0IGl0cyBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wYWN0LCBhcyBvcHBvc2VkIHRvIGEgZnVuY3Rpb24gdGhhdCBjb3VsZCBiZSBvcHRpbWl6ZWQgZGlyZWN0bHkgYnkgdGhlIGNvbXBpbGVyLiBHaXZlbiB0aGlzLCBpdCBtYWtlcyBhIGdvb2QgY2FuZGlkYXRlIGZvciBkZWVwZXIgaW52ZXN0aWdhdGlvbi4gTGV0JiMzOTtzIGRpZyBpbnRvIGB6YXBfcHRlX3JhbmdlYCBhbmQgc2VlIGV4YWN0bHkgd2hhdCBpdCYjMzk7cyBkb2luZy4gV2hhdCYjMzk7cyBpdCBkb2luZyBhbmQgd2h5IGlzbiYjMzk7dCBpdCBpbi1saW5lPyBMZXQmIzM5O3MgdHJhY2UgdGhyb3VnaCBpdHMgaW1wbGVtZW50YXRpb24gYW5kIHNlZSB3aGVyZSB0aGUgaG90c3BvdHMgbWlnaHQgYmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA1OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3phcF9wdGVfcmFuZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnkuYz0xNzM1PXN0YXRpYyBpbmxpbmUgaW50IHphcF9ub25wcmVzZW50X3B0ZXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbi0tXG5tbS9tZW1vcnkuYy0xODA1LVxubW0vbWVtb3J5LmM6MTgwNjpzdGF0aWMgaW5saW5lIGludCBkb196YXBfcHRlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG5tbS9tZW1vcnkuYy0xODA3LVx0XHRcdFx0ICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHB0ZV90ICpwdGUsXG4tLVxubW0vbWVtb3J5LmM9MTg2Nj1zdGF0aWMgYm9vbCB6YXBfcHRlX3RhYmxlX2lmX2VtcHR5KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLFxuLS1cbm1tL21lbW9yeS5jLTE4OTktXG5tbS9tZW1vcnkuYzoxOTAwOnN0YXRpYyB1bnNpZ25lZCBsb25nIHphcF9wdGVfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbm1tL21lbW9yeS5jLTE5MDEtXHRcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcG1kX3QgKnBtZCxcbi0tXG5tbS9tZW1vcnkuYy0xOTMzLVxubW0vbWVtb3J5LmM6MTkzNDpcdFx0bnIgPSBkb196YXBfcHRlX3JhbmdlKHRsYiwgdm1hLCBwdGUsIGFkZHIsIGVuZCwgZGV0YWlscywgcnNzLFxubW0vbWVtb3J5LmMtMTkzNS1cdFx0XHRcdCAgICAgIFx1MDAyNmZvcmNlX2ZsdXNoLCBcdTAwMjZmb3JjZV9icmVhaywgXHUwMDI2YW55X3NraXBwZWQpO1xuLS1cbm1tL21lbW9yeS5jPTE5OTI9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHphcF9wbWRfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbi0tXG5tbS9tZW1vcnkuYy0yMDE5LVx0XHR9XG5tbS9tZW1vcnkuYzoyMDIwOlx0XHRhZGRyID0gemFwX3B0ZV9yYW5nZSh0bGIsIHZtYSwgcG1kLCBhZGRyLCBuZXh0LCBkZXRhaWxzKTtcbm1tL21lbW9yeS5jLTIwMjEtXHRcdGlmIChhZGRyICE9IG5leHQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA1OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTUxCgkJCQkJCQlvdXRwdXQ6IDExOQoJCQkJCQkJdGhvdWdodHM6IDMxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2gsIGFuZCBteSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgaXQmIzM5O3MgZ290IHNvbWUgaW50ZXJlc3RpbmcgYW5nbGVzIGZvciBmdXp6aW5nLiBgemFwX3B0ZV9yYW5nZWAgc2VlbXMgbGlrZSBhIGtleSBmdW5jdGlvbiB0byB0YXJnZXQg4oCTIHRoYXQmIzM5O3MgZGVmaW5pdGVseSBhIHBsYWNlIHdoZXJlIHRoaW5ncyBjb3VsZCBnZXQgaW50ZXJlc3Rpbmcgd2l0aCBwYWdlIHRhYmxlIGludGVyYWN0aW9ucy4gSSBhbHNvIHNlZSB0aGF0IGBtYWR2aXNlX2ZyZWVfcHRlX3JhbmdlYCBpcyBhIHN0cm9uZyBjYW5kaWRhdGUgYW5kIGBndWFyZF9yZW1vdmVfcHRlX2VudHJ5YC4gV2FpdCwgaG9sZCBvbiDigJMgYGd1YXJkX3JlbW92ZV9wdGVfZW50cnlgIGlzIHN0YXRpYywgd2hpY2ggc2ltcGxpZmllcyB0aGluZ3MuIExlc3MgZ2xvYmFsIGV4cG9zdXJlIGlzIGdlbmVyYWxseSBiZXR0ZXIsIGJ1dCB0aGVyZSBtaWdodCBiZSBpbmRpcmVjdCBpbnRlcmFjdGlvbnMuCgpMZXQmIzM5O3Mgc2Vl4oCmIGFueSBjb25maWd1cmF0aW9uIGZsYWdzIHRoYXQgYXJlIGNydWNpYWwgaGVyZT8gUmlnaHQsIGBDT05GSUdfQURWSVNFX1NZU0NBTExTYCBpcyB0aGUgb2J2aW91cyBvbmUsIGVzcGVjaWFsbHkgc2luY2UgdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBtYWR2aXNlLmNgIHByZXR0eSBleHRlbnNpdmVseS4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpc27igJl0IG92ZXJseSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMuIEkgc2VlIGEgbW9kaWZpY2F0aW9uIHRvIGBhcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaGAsIHdoaWNoIHJhaXNlcyBhIGZsYWcuIEJ1dCB0aGUgcmVhbCBtZWF0IG9mIHRoZSBjaGFuZ2VzIGlzIGluIHRob3NlIGNvcmUgZmlsZXM6IGBpbmNsdWRlL2xpbnV4L3BndGFibGUuaGAsIGBtbS9tYWR2aXNlLmNgLCBhbmQgYG1tL21lbW9yeS5jYC4gVGhlIHNwYXJjLXNwZWNpZmljIGNoYW5nZSBqdXN0IGdldHMgcmlkIG9mIGFuIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBvdmVycmlkZSwgYHB0ZV9jbGVhcl9ub3RfcHJlc2VudF9mdWxsYCwgd2hpY2ggdGhlIGdlbmVyaWMgY29kZSBpcyBub3cgaGFuZGxpbmcuIFNvIGl0JiMzOTtzIGxvb2tpbmcgcHJldHR5IGdlbmVyaWMgb3ZlcmFsbC4KCkFscmlnaHQsIGxldCYjMzk7cyBwdWxsIGFsbCB0aGlzIHRvZ2V0aGVyIGludG8gYSBjb25jaXNlIHN1bW1hcnkuIFRoaXMgaXMgbG9va2luZyBwcm9taXNpbmcgZm9yIGZ1enppbmcuCgoqICAgKipXb3J0aEZ1enppbmc6KiogVHJ1ZSwgZGVmaW5pdGVseSB3b3J0aCB0aGUgZWZmb3J0LgoqICAgKipGb2N1c1N5bWJvbHM6KiogYG1hZHZpc2VfZnJlZV9wdGVfcmFuZ2VgLCBgZ3VhcmRfcmVtb3ZlX3B0ZV9lbnRyeWAsIGB6YXBfcHRlX3JhbmdlYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgSSYjMzk7bSBtb3N0IGludGVyZXN0ZWQgaW4uCiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYEFEVklTRV9TWVNDQUxMU2AgaXMgZXNzZW50aWFsLgoqICAgKipSZWFzb25pbmc6KiogVGhlIGNoYW5nZXMgYXJlIGhhcHBlbmluZyBpbiBjcml0aWNhbCBtZW1vcnkgbWFuYWdlbWVudCByb3V0aW5lcyByZXNwb25zaWJsZSBmb3IgY2xlYXJpbmcgbm9uLXByZXNlbnQgUFRFcyBkdXJpbmcgb3BlcmF0aW9ucyBsaWtlIGBNQURWX0ZSRUVgLCBgTUFEVl9HVUFSRF9SRU1PVkVgLCBhbmQgbWVtb3J5IHVubWFwcGluZy4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBzeXN0ZW0gY2FsbHMsIG1lYW5pbmcgd2UgY2FuIHRyaWdnZXIgY29tcGxleCBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbnMsIG9wZW5pbmcgYSBwb3RlbnRpYWwgZm9yIHZ1bG5lcmFiaWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDU6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FEVklTRV9TWVNDQUxMUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21hZHZpc2VfZnJlZV9wdGVfcmFuZ2UmIzM0OywKICAgICYjMzQ7Z3VhcmRfcmVtb3ZlX3B0ZV9lbnRyeSYjMzQ7LAogICAgJiMzNDt6YXBfcHRlX3JhbmdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zIHJlc3BvbnNpYmxlIGZvciBjbGVhcmluZyBub24tcHJlc2VudCBQVEVzIGR1cmluZyBvcGVyYXRpb25zIGxpa2UgTUFEVl9GUkVFLCBNQURWX0dVQVJEX1JFTU9WRSwgYW5kIHVubWFwcGluZyBtZW1vcnkuIFRoZXNlIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGFuZCBjYW4gdHJpZ2dlciBjb21wbGV4IHBhZ2UgdGFibGUgbWFuaXB1bGF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QURWSVNFX1NZU0NBTExTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFkdmlzZV9mcmVlX3B0ZV9yYW5nZSYjMzQ7LAogICAgJiMzNDtndWFyZF9yZW1vdmVfcHRlX2VudHJ5JiMzNDssCiAgICAmIzM0O3phcF9wdGVfcmFuZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIGNsZWFyaW5nIG5vbi1wcmVzZW50IFBURXMgZHVyaW5nIG9wZXJhdGlvbnMgbGlrZSBNQURWX0ZSRUUsIE1BRFZfR1VBUkRfUkVNT1ZFLCBhbmQgdW5tYXBwaW5nIG1lbW9yeS4gVGhlc2UgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYW5kIGNhbiB0cmlnZ2VyIGNvbXBsZXggcGFnZSB0YWJsZSBtYW5pcHVsYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDJUMDU6MDE6NDAuODQ3ODIwMTQ1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzIzNDA5MzI5NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQURWSVNFX1NZU0NBTExTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWFkdmlzZV9mcmVlX3B0ZV9yYW5nZVwiLFxuICAgIFwiZ3VhcmRfcmVtb3ZlX3B0ZV9lbnRyeVwiLFxuICAgIFwiemFwX3B0ZV9yYW5nZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zIHJlc3BvbnNpYmxlIGZvciBjbGVhcmluZyBub24tcHJlc2VudCBQVEVzIGR1cmluZyBvcGVyYXRpb25zIGxpa2UgTUFEVl9GUkVFLCBNQURWX0dVQVJEX1JFTU9WRSwgYW5kIHVubWFwcGluZyBtZW1vcnkuIFRoZXNlIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGFuZCBjYW4gdHJpZ2dlciBjb21wbGV4IHBhZ2UgdGFibGUgbWFuaXB1bGF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDU6MDE6NDAuODQ3ODI4MTc1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDY5MDE1OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjMTA3MmVjZWE0YmRmZjFlNzE5MmFlMzg0Mjk0N2M5OWJhNGE5YjMxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDIgMDU6MDE6MzkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaFxcbmluZGV4IDc0ZWRlNzA2ZmIzMjVkLi4wODM3ZWJiYzVkY2U2MyAxMDA2NDRcXG4tLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaFxcbisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oXFxuQEAgLTk0NSwxMCArOTQ1LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuICNkZWZpbmUgcHRlX2NsZWFyKG1tLGFkZHIscHRlcClcXHRcXHRcXFxcXFxuIFxcdHNldF9wdGVfYXQoKG1tKSwgKGFkZHIpLCAocHRlcCksIF9fcHRlKDBVTCkpXFxuIFxcbi0jZGVmaW5lIF9fSEFWRV9BUkNIX1BURV9DTEVBUl9OT1RfUFJFU0VOVF9GVUxMXFxuLSNkZWZpbmUgcHRlX2NsZWFyX25vdF9wcmVzZW50X2Z1bGwobW0sYWRkcixwdGVwLGZ1bGxtbSlcXHRcXFxcXFxuLVxcdF9fc2V0X3B0ZV9hdCgobW0pLCAoYWRkciksIChwdGVwKSwgX19wdGUoMFVMKSwgKGZ1bGxtbSkpXFxuLVxcbiAjaWZkZWYgRENBQ0hFX0FMSUFTSU5HX1BPU1NJQkxFXFxuICNkZWZpbmUgX19IQVZFX0FSQ0hfTU9WRV9QVEVcXG4gI2RlZmluZSBtb3ZlX3B0ZShwdGUsIG9sZF9hZGRyLCBuZXdfYWRkcilcXHRcXHRcXHRcXHRcXFxcXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oIGIvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhcXG5pbmRleCAyOTgxZTM4NmRhN2IzYy4uNjU1MWY0NWE4NTQwYzEgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BndGFibGUuaFxcbkBAIC05ODgsNDkgKzk4OCwzMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX21tdV90bGIoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdHVwZGF0ZV9tbXVfdGxiX3JhbmdlKHZtYSwgYWRkcmVzcywgcHRlcCwgMSk7XFxuIH1cXG4gXFxuLS8qXFxuLSAqIFNvbWUgYXJjaGl0ZWN0dXJlcyBtYXkgYmUgYWJsZSB0byBhdm9pZCBleHBlbnNpdmUgc3luY2hyb25pemF0aW9uXFxuLSAqIHByaW1pdGl2ZXMgd2hlbiBtb2RpZmljYXRpb25zIGFyZSBtYWRlIHRvIFBURSdzIHdoaWNoIGFyZSBhbHJlYWR5XFxuLSAqIG5vdCBwcmVzZW50LCBvciBpbiB0aGUgcHJvY2VzcyBvZiBhbiBhZGRyZXNzIHNwYWNlIGRlc3RydWN0aW9uLlxcbi0gKi9cXG4tI2lmbmRlZiBfX0hBVkVfQVJDSF9QVEVfQ0xFQVJfTk9UX1BSRVNFTlRfRlVMTFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgcHRlX2NsZWFyX25vdF9wcmVzZW50X2Z1bGwoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgcHRlX3QgKnB0ZXAsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgIGludCBmdWxsKVxcbi17XFxuLVxcdHB0ZV9jbGVhcihtbSwgYWRkcmVzcywgcHRlcCk7XFxuLX1cXG4tI2VuZGlmXFxuLVxcbi0jaWZuZGVmIGNsZWFyX25vdF9wcmVzZW50X2Z1bGxfcHRlc1xcbiAvKipcXG4tICogY2xlYXJfbm90X3ByZXNlbnRfZnVsbF9wdGVzIC0gQ2xlYXIgbXVsdGlwbGUgbm90IHByZXNlbnQgUFRFcyB3aGljaCBhcmVcXG4tICpcXHRcXHRcXHRcXHQgY29uc2VjdXRpdmUgaW4gdGhlIHBndGFibGUuXFxuKyAqIGNsZWFyX25vbnByZXNlbnRfcHRlcyAtIENsZWFyIG11bHRpcGxlIG5vbi1wcmVzZW50IFBURXMgd2hpY2ggYXJlXFxuKyAqXFx0XFx0XFx0ICAgIGNvbnNlY3V0aXZlIGluIHRoZSBwZ3RhYmxlLlxcbiAgKiBAbW06IEFkZHJlc3Mgc3BhY2UgdGhlIHB0ZXMgcmVwcmVzZW50LlxcbiAgKiBAYWRkcjogQWRkcmVzcyBvZiB0aGUgZmlyc3QgcHRlLlxcbiAgKiBAcHRlcDogUGFnZSB0YWJsZSBwb2ludGVyIGZvciB0aGUgZmlyc3QgZW50cnkuXFxuICAqIEBucjogTnVtYmVyIG9mIGVudHJpZXMgdG8gY2xlYXIuXFxuLSAqIEBmdWxsOiBXaGV0aGVyIHdlIGFyZSBjbGVhcmluZyBhIGZ1bGwgbW0uXFxuLSAqXFxuLSAqIE1heSBiZSBvdmVycmlkZGVuIGJ5IHRoZSBhcmNoaXRlY3R1cmU7IG90aGVyd2lzZSwgaW1wbGVtZW50ZWQgYXMgYSBzaW1wbGVcXG4tICogbG9vcCBvdmVyIHB0ZV9jbGVhcl9ub3RfcHJlc2VudF9mdWxsKCkuXFxuICAqXFxuICAqIENvbnRleHQ6IFRoZSBjYWxsZXIgaG9sZHMgdGhlIHBhZ2UgdGFibGUgbG9jay4gIFRoZSBQVEVzIGFyZSBhbGwgbm90IHByZXNlbnQuXFxuICAqIFRoZSBQVEVzIGFyZSBhbGwgaW4gdGhlIHNhbWUgUE1ELlxcbiAgKi9cXG4tc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX25vdF9wcmVzZW50X2Z1bGxfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgdW5zaWduZWQgaW50IG5yLCBpbnQgZnVsbClcXG4rc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX25vbnByZXNlbnRfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgdW5zaWduZWQgaW50IG5yKVxcbiB7XFxuK1xcdCh2b2lkKWFkZHI7XFxuK1xcbiBcXHRmb3IgKDs7KSB7XFxuLVxcdFxcdHB0ZV9jbGVhcl9ub3RfcHJlc2VudF9mdWxsKG1tLCBhZGRyLCBwdGVwLCBmdWxsKTtcXG4rXFx0XFx0cHRlX2NsZWFyKG1tLCBhZGRyLCBwdGVwKTtcXG4gXFx0XFx0aWYgKC0tbnIgPT0gMClcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdHB0ZXArKztcXG4gXFx0XFx0YWRkciArPSBQQUdFX1NJWkU7XFxuIFxcdH1cXG4gfVxcbi0jZW5kaWZcXG4gXFxuICNpZm5kZWYgX19IQVZFX0FSQ0hfUFRFUF9DTEVBUl9GTFVTSFxcbiBleHRlcm4gcHRlX3QgcHRlcF9jbGVhcl9mbHVzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5kaWZmIC0tZ2l0IGEvbW0vbWFkdmlzZS5jIGIvbW0vbWFkdmlzZS5jXFxuaW5kZXggY2Q5YmIwNzcwNzJjY2IuLjNkYjE0M2M0NDJlYWFhIDEwMDY0NFxcbi0tLSBhL21tL21hZHZpc2UuY1xcbisrKyBiL21tL21hZHZpc2UuY1xcbkBAIC02OTUsMTAgKzY5NSwxMCBAQCBzdGF0aWMgaW50IG1hZHZpc2VfZnJlZV9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRcXHRcXHRuciA9IHN3YXBfcHRlX2JhdGNoKHB0ZSwgbWF4X25yLCBwdGVudCk7XFxuIFxcdFxcdFxcdFxcdG5yX3N3YXAgLT0gbnI7XFxuIFxcdFxcdFxcdFxcdHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0KGVudHJ5LCBucik7XFxuLVxcdFxcdFxcdFxcdGNsZWFyX25vdF9wcmVzZW50X2Z1bGxfcHRlcyhtbSwgYWRkciwgcHRlLCBuciwgdGxiLVxcdTAwM2VmdWxsbW0pO1xcbitcXHRcXHRcXHRcXHRjbGVhcl9ub25wcmVzZW50X3B0ZXMobW0sIGFkZHIsIHB0ZSwgbnIpO1xcbiBcXHRcXHRcXHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2h3cG9pc29uKGVudHJ5KSB8fFxcbiBcXHRcXHRcXHRcXHQgICBzb2Z0bGVhZl9pc19wb2lzb25fbWFya2VyKGVudHJ5KSkge1xcbi1cXHRcXHRcXHRcXHRwdGVfY2xlYXJfbm90X3ByZXNlbnRfZnVsbChtbSwgYWRkciwgcHRlLCB0bGItXFx1MDAzZWZ1bGxtbSk7XFxuK1xcdFxcdFxcdFxcdHB0ZV9jbGVhcihtbSwgYWRkciwgcHRlKTtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbkBAIC0xMjM0LDcgKzEyMzQsNyBAQCBzdGF0aWMgaW50IGd1YXJkX3JlbW92ZV9wdGVfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXG4gXFx0aWYgKGlzX2d1YXJkX3B0ZV9tYXJrZXIocHRlbnQpKSB7XFxuIFxcdFxcdC8qIFNpbXBseSBjbGVhciB0aGUgUFRFIG1hcmtlci4gKi9cXG4tXFx0XFx0cHRlX2NsZWFyX25vdF9wcmVzZW50X2Z1bGwod2Fsay1cXHUwMDNlbW0sIGFkZHIsIHB0ZSwgZmFsc2UpO1xcbitcXHRcXHRwdGVfY2xlYXIod2Fsay1cXHUwMDNlbW0sIGFkZHIsIHB0ZSk7XFxuIFxcdFxcdHVwZGF0ZV9tbXVfY2FjaGUod2Fsay1cXHUwMDNldm1hLCBhZGRyLCBwdGUpO1xcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXFxuaW5kZXggZmYzMzhjMmFiZTkyMzEuLmEzZmNhZjhjZmU4ZjhiIDEwMDY0NFxcbi0tLSBhL21tL21lbW9yeS5jXFxuKysrIGIvbW0vbWVtb3J5LmNcXG5AQCAtMTc5Nyw3ICsxNzk3LDcgQEAgc3RhdGljIGlubGluZSBpbnQgemFwX25vbnByZXNlbnRfcHRlcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbiBcXHRcXHRwcl9hbGVydChcXFwidW5yZWNvZ25pemVkIHN3YXAgZW50cnkgMHglbHhcXFxcblxcXCIsIGVudHJ5LnZhbCk7XFxuIFxcdFxcdFdBUk5fT05fT05DRSgxKTtcXG4gXFx0fVxcbi1cXHRjbGVhcl9ub3RfcHJlc2VudF9mdWxsX3B0ZXModm1hLVxcdTAwM2V2bV9tbSwgYWRkciwgcHRlLCBuciwgdGxiLVxcdTAwM2VmdWxsbW0pO1xcbitcXHRjbGVhcl9ub25wcmVzZW50X3B0ZXModm1hLVxcdTAwM2V2bV9tbSwgYWRkciwgcHRlLCBucik7XFxuIFxcdCphbnlfc2tpcHBlZCA9IHphcF9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkKHZtYSwgYWRkciwgcHRlLCBuciwgZGV0YWlscywgcHRlbnQpO1xcbiBcXG4gXFx0cmV0dXJuIG5yO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNTowMTo0MS40NTU0ODcyMjFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxNzMzMjUxOTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFEVklTRV9TWVNDQUxMU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1hZHZpc2VfZnJlZV9wdGVfcmFuZ2VcIixcbiAgICBcImd1YXJkX3JlbW92ZV9wdGVfZW50cnlcIixcbiAgICBcInphcF9wdGVfcmFuZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyByZXNwb25zaWJsZSBmb3IgY2xlYXJpbmcgbm9uLXByZXNlbnQgUFRFcyBkdXJpbmcgb3BlcmF0aW9ucyBsaWtlIE1BRFZfRlJFRSwgTUFEVl9HVUFSRF9SRU1PVkUsIGFuZCB1bm1hcHBpbmcgbWVtb3J5LiBUaGVzZSBhcmUgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgY2FuIHRyaWdnZXIgY29tcGxleCBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzEwNzJlY2VhNGJkZmYxZTcxOTJhZTM4NDI5NDdjOTliYTRhOWIzMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIgMDU6MDE6MzkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oXG5pbmRleCA3NGVkZTcwNmZiMzI1ZC4uMDgzN2ViYmM1ZGNlNjMgMTAwNjQ0XG4tLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaFxuKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0LmhcbkBAIC05NDUsMTAgKzk0NSw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuICNkZWZpbmUgcHRlX2NsZWFyKG1tLGFkZHIscHRlcClcdFx0XFxcbiBcdHNldF9wdGVfYXQoKG1tKSwgKGFkZHIpLCAocHRlcCksIF9fcHRlKDBVTCkpXG4gXG4tI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVfQ0xFQVJfTk9UX1BSRVNFTlRfRlVMTFxuLSNkZWZpbmUgcHRlX2NsZWFyX25vdF9wcmVzZW50X2Z1bGwobW0sYWRkcixwdGVwLGZ1bGxtbSlcdFxcXG4tXHRfX3NldF9wdGVfYXQoKG1tKSwgKGFkZHIpLCAocHRlcCksIF9fcHRlKDBVTCksIChmdWxsbW0pKVxuLVxuICNpZmRlZiBEQ0FDSEVfQUxJQVNJTkdfUE9TU0lCTEVcbiAjZGVmaW5lIF9fSEFWRV9BUkNIX01PVkVfUFRFXG4gI2RlZmluZSBtb3ZlX3B0ZShwdGUsIG9sZF9hZGRyLCBuZXdfYWRkcilcdFx0XHRcdFxcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmggYi9pbmNsdWRlL2xpbnV4L3BndGFibGUuaFxuaW5kZXggMjk4MWUzODZkYTdiM2MuLjY1NTFmNDVhODU0MGMxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXG5AQCAtOTg4LDQ5ICs5ODgsMzAgQEAgc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9tbXVfdGxiKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0dXBkYXRlX21tdV90bGJfcmFuZ2Uodm1hLCBhZGRyZXNzLCBwdGVwLCAxKTtcbiB9XG4gXG4tLypcbi0gKiBTb21lIGFyY2hpdGVjdHVyZXMgbWF5IGJlIGFibGUgdG8gYXZvaWQgZXhwZW5zaXZlIHN5bmNocm9uaXphdGlvblxuLSAqIHByaW1pdGl2ZXMgd2hlbiBtb2RpZmljYXRpb25zIGFyZSBtYWRlIHRvIFBURSdzIHdoaWNoIGFyZSBhbHJlYWR5XG4tICogbm90IHByZXNlbnQsIG9yIGluIHRoZSBwcm9jZXNzIG9mIGFuIGFkZHJlc3Mgc3BhY2UgZGVzdHJ1Y3Rpb24uXG4tICovXG4tI2lmbmRlZiBfX0hBVkVfQVJDSF9QVEVfQ0xFQVJfTk9UX1BSRVNFTlRfRlVMTFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBwdGVfY2xlYXJfbm90X3ByZXNlbnRfZnVsbChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi1cdFx0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuLVx0XHRcdFx0XHQgICAgICBwdGVfdCAqcHRlcCxcbi1cdFx0XHRcdFx0ICAgICAgaW50IGZ1bGwpXG4te1xuLVx0cHRlX2NsZWFyKG1tLCBhZGRyZXNzLCBwdGVwKTtcbi19XG4tI2VuZGlmXG4tXG4tI2lmbmRlZiBjbGVhcl9ub3RfcHJlc2VudF9mdWxsX3B0ZXNcbiAvKipcbi0gKiBjbGVhcl9ub3RfcHJlc2VudF9mdWxsX3B0ZXMgLSBDbGVhciBtdWx0aXBsZSBub3QgcHJlc2VudCBQVEVzIHdoaWNoIGFyZVxuLSAqXHRcdFx0XHQgY29uc2VjdXRpdmUgaW4gdGhlIHBndGFibGUuXG4rICogY2xlYXJfbm9ucHJlc2VudF9wdGVzIC0gQ2xlYXIgbXVsdGlwbGUgbm9uLXByZXNlbnQgUFRFcyB3aGljaCBhcmVcbisgKlx0XHRcdCAgICBjb25zZWN1dGl2ZSBpbiB0aGUgcGd0YWJsZS5cbiAgKiBAbW06IEFkZHJlc3Mgc3BhY2UgdGhlIHB0ZXMgcmVwcmVzZW50LlxuICAqIEBhZGRyOiBBZGRyZXNzIG9mIHRoZSBmaXJzdCBwdGUuXG4gICogQHB0ZXA6IFBhZ2UgdGFibGUgcG9pbnRlciBmb3IgdGhlIGZpcnN0IGVudHJ5LlxuICAqIEBucjogTnVtYmVyIG9mIGVudHJpZXMgdG8gY2xlYXIuXG4tICogQGZ1bGw6IFdoZXRoZXIgd2UgYXJlIGNsZWFyaW5nIGEgZnVsbCBtbS5cbi0gKlxuLSAqIE1heSBiZSBvdmVycmlkZGVuIGJ5IHRoZSBhcmNoaXRlY3R1cmU7IG90aGVyd2lzZSwgaW1wbGVtZW50ZWQgYXMgYSBzaW1wbGVcbi0gKiBsb29wIG92ZXIgcHRlX2NsZWFyX25vdF9wcmVzZW50X2Z1bGwoKS5cbiAgKlxuICAqIENvbnRleHQ6IFRoZSBjYWxsZXIgaG9sZHMgdGhlIHBhZ2UgdGFibGUgbG9jay4gIFRoZSBQVEVzIGFyZSBhbGwgbm90IHByZXNlbnQuXG4gICogVGhlIFBURXMgYXJlIGFsbCBpbiB0aGUgc2FtZSBQTUQuXG4gICovXG4tc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX25vdF9wcmVzZW50X2Z1bGxfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi1cdFx0dW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgdW5zaWduZWQgaW50IG5yLCBpbnQgZnVsbClcbitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfbm9ucHJlc2VudF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuK1x0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCB1bnNpZ25lZCBpbnQgbnIpXG4ge1xuK1x0KHZvaWQpYWRkcjtcbitcbiBcdGZvciAoOzspIHtcbi1cdFx0cHRlX2NsZWFyX25vdF9wcmVzZW50X2Z1bGwobW0sIGFkZHIsIHB0ZXAsIGZ1bGwpO1xuK1x0XHRwdGVfY2xlYXIobW0sIGFkZHIsIHB0ZXApO1xuIFx0XHRpZiAoLS1uciA9PSAwKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRwdGVwKys7XG4gXHRcdGFkZHIgKz0gUEFHRV9TSVpFO1xuIFx0fVxuIH1cbi0jZW5kaWZcbiBcbiAjaWZuZGVmIF9fSEFWRV9BUkNIX1BURVBfQ0xFQVJfRkxVU0hcbiBleHRlcm4gcHRlX3QgcHRlcF9jbGVhcl9mbHVzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmRpZmYgLS1naXQgYS9tbS9tYWR2aXNlLmMgYi9tbS9tYWR2aXNlLmNcbmluZGV4IGNkOWJiMDc3MDcyY2NiLi4zZGIxNDNjNDQyZWFhYSAxMDA2NDRcbi0tLSBhL21tL21hZHZpc2UuY1xuKysrIGIvbW0vbWFkdmlzZS5jXG5AQCAtNjk1LDEwICs2OTUsMTAgQEAgc3RhdGljIGludCBtYWR2aXNlX2ZyZWVfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHRcdG5yID0gc3dhcF9wdGVfYmF0Y2gocHRlLCBtYXhfbnIsIHB0ZW50KTtcbiBcdFx0XHRcdG5yX3N3YXAgLT0gbnI7XG4gXHRcdFx0XHRzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdChlbnRyeSwgbnIpO1xuLVx0XHRcdFx0Y2xlYXJfbm90X3ByZXNlbnRfZnVsbF9wdGVzKG1tLCBhZGRyLCBwdGUsIG5yLCB0bGItXHUwMDNlZnVsbG1tKTtcbitcdFx0XHRcdGNsZWFyX25vbnByZXNlbnRfcHRlcyhtbSwgYWRkciwgcHRlLCBucik7XG4gXHRcdFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19od3BvaXNvbihlbnRyeSkgfHxcbiBcdFx0XHRcdCAgIHNvZnRsZWFmX2lzX3BvaXNvbl9tYXJrZXIoZW50cnkpKSB7XG4tXHRcdFx0XHRwdGVfY2xlYXJfbm90X3ByZXNlbnRfZnVsbChtbSwgYWRkciwgcHRlLCB0bGItXHUwMDNlZnVsbG1tKTtcbitcdFx0XHRcdHB0ZV9jbGVhcihtbSwgYWRkciwgcHRlKTtcbiBcdFx0XHR9XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbkBAIC0xMjM0LDcgKzEyMzQsNyBAQCBzdGF0aWMgaW50IGd1YXJkX3JlbW92ZV9wdGVfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFxuIFx0aWYgKGlzX2d1YXJkX3B0ZV9tYXJrZXIocHRlbnQpKSB7XG4gXHRcdC8qIFNpbXBseSBjbGVhciB0aGUgUFRFIG1hcmtlci4gKi9cbi1cdFx0cHRlX2NsZWFyX25vdF9wcmVzZW50X2Z1bGwod2Fsay1cdTAwM2VtbSwgYWRkciwgcHRlLCBmYWxzZSk7XG4rXHRcdHB0ZV9jbGVhcih3YWxrLVx1MDAzZW1tLCBhZGRyLCBwdGUpO1xuIFx0XHR1cGRhdGVfbW11X2NhY2hlKHdhbGstXHUwMDNldm1hLCBhZGRyLCBwdGUpO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcbmluZGV4IGZmMzM4YzJhYmU5MjMxLi5hM2ZjYWY4Y2ZlOGY4YiAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4rKysgYi9tbS9tZW1vcnkuY1xuQEAgLTE3OTcsNyArMTc5Nyw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHphcF9ub25wcmVzZW50X3B0ZXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbiBcdFx0cHJfYWxlcnQoXCJ1bnJlY29nbml6ZWQgc3dhcCBlbnRyeSAweCVseFxcblwiLCBlbnRyeS52YWwpO1xuIFx0XHRXQVJOX09OX09OQ0UoMSk7XG4gXHR9XG4tXHRjbGVhcl9ub3RfcHJlc2VudF9mdWxsX3B0ZXModm1hLVx1MDAzZXZtX21tLCBhZGRyLCBwdGUsIG5yLCB0bGItXHUwMDNlZnVsbG1tKTtcbitcdGNsZWFyX25vbnByZXNlbnRfcHRlcyh2bWEtXHUwMDNldm1fbW0sIGFkZHIsIHB0ZSwgbnIpO1xuIFx0KmFueV9za2lwcGVkID0gemFwX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQodm1hLCBhZGRyLCBwdGUsIG5yLCBkZXRhaWxzLCBwdGVudCk7XG4gXG4gXHRyZXR1cm4gbnI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNTowMTo0MS40NTU0OTA0MjFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTk5OTE3NzYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byBzb21lIHByZXR0eSBmdW5kYW1lbnRhbCBzdHVmZiDigJMgcGFnZSB0YWJsZSBtYW5pcHVsYXRpb24sIHNwZWNpZmljYWxseS4gSXQncyB0b3VjaGluZyBgYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0LmhgLCBgaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhgLCBgbW0vbWFkdmlzZS5jYCwgYW5kIGBtbS9tZW1vcnkuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgYXBwZWFycyB0byBiZSByZW1vdmluZyBgcHRlX2NsZWFyX25vdF9wcmVzZW50X2Z1bGxgIGFuZCBgY2xlYXJfbm90X3ByZXNlbnRfZnVsbF9wdGVzYCBhbmQgcmVwbGFjaW5nIHRoZW0gd2l0aCB0aGUgbmV3IGZ1bmN0aW9ucyBgY2xlYXJfbm9ucHJlc2VudF9wdGVzYCBhbmQgYHB0ZV9jbGVhcmAuIFRoYXQncyBhIGRlZmluaXRlIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgbm9uLXByZXNlbnQgcGFnZSB0YWJsZSBlbnRyaWVzLlxuXG5UaGlzIGhhcyBkb3duc3RyZWFtIGltcGFjdHMgb24gYSBmZXcga2V5IGFyZWFzOiBgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZWAsIGBndWFyZF9yZW1vdmVfcHRlX2VudHJ5YCwgYW5kIGB6YXBfbm9ucHJlc2VudF9wdGVzYC4gSSBzaG91bGQgY29uZmlybSBpZiBhbnkgcGFydGljdWxhciBrZXJuZWwgY29uZmlndXJhdGlvbnMgYXJlIHJlbGV2YW50IGhlcmUuIExldCdzIHNlZS4uLiBgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZWAgaXMgaW4gYG1tL21hZHZpc2UuY2AsIHNvIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgYG1tL01ha2VmaWxlYCB0byBjb25maXJtIGlmIGl0J3MgYWx3YXlzIGNvbXBpbGVkIGluLCBvciBpZiBpdCBkZXBlbmRzIG9uIGBDT05GSUdfQURWSVNFX1NZU0NBTExTYCBvciBzb21ldGhpbmcgc2ltaWxhci4gSXQgY291bGQgYmUuIEFuZCBgZ3VhcmRfcmVtb3ZlX3B0ZV9lbnRyeWAgaXMgYWxzbyBpbiBgbW0vbWFkdmlzZS5jYCwgYW5kIGB6YXBfbm9ucHJlc2VudF9wdGVzYCBpcyBpbiBgbW0vbWVtb3J5LmNgLlxuXG5Pa2F5LCBJJ2xsIGRvIGEgcXVpY2sgYGdyZXBgIGZvciBgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZWAgYW5kIGB6YXBfbm9ucHJlc2VudF9wdGVzYCB0aHJvdWdoIHRoZSBzb3VyY2UgdHJlZSB0byBiZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyBvYnZpb3VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzQ1LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDU6MDE6NDYuNjU1NDEwNjYyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMTQ2OTA0OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFkdmlzZV9mcmVlX3B0ZV9yYW5nZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tYWR2aXNlLmM9NjI3PXN0YXRpYyBsb25nIG1hZHZpc2VfcGFnZW91dChzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy02NTItXFxubW0vbWFkdmlzZS5jOjY1MzpzdGF0aWMgaW50IG1hZHZpc2VfZnJlZV9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbm1tL21hZHZpc2UuYy02NTQtXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxcbi0tXFxubW0vbWFkdmlzZS5jPTgwMD1zdGF0aWMgaW50IG1hZHZpc2VfZnJlZV9zaW5nbGVfdm1hKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTgwOS1cXHRzdHJ1Y3QgbW1fd2Fsa19vcHMgd2Fsa19vcHMgPSB7XFxubW0vbWFkdmlzZS5jOjgxMDpcXHRcXHQucG1kX2VudHJ5XFx0XFx0PSBtYWR2aXNlX2ZyZWVfcHRlX3JhbmdlLFxcbm1tL21hZHZpc2UuYy04MTEtXFx0fTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDU6MDE6NDkuNjcwMTA5NTAxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk2NzQ2MTU3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQsIGFuZCBzdW1tYXJpemluZyBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIENvZGViYXNlOiBBIEZvY3VzZWQgQ2hlY2sqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYSBzcGVjaWZpYyBmdW5jdGlvbiBvciBtb2R1bGU6IGB6YXBfbm9ucHJlc2VudF9wdGVzYC4gVGhpcyBzdWdnZXN0cyB3ZSdyZSBkZWFsaW5nIHdpdGggcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgb3Igb3V0ZGF0ZWQgZW50cmllcyDigJMgcHJvYmFibHkgc29tZXRoaW5nIHJlbGF0ZWQgdG8gUFRFcyAocGFnZSB0YWJsZSBlbnRyaWVzKSBnaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24uIFRoZSBcInphcFwiIHByZWZpeCB0eXBpY2FsbHkgc2lnbmFscyBkZWxldGlvbiBvciBpbnZhbGlkYXRpb24uIFRoZSBwaHJhc2UgXCJub25wcmVzZW50XCIgc3VnZ2VzdHMgdGhlc2UgYXJlIGVudHJpZXMgdGhhdCAqc2hvdWxkbid0KiBiZSB2YWxpZCBhbnkgbG9uZ2VyLiBTbywgdGhpcyBjb21tYW5kIHdpbGwgbGlrZWx5IGJlIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIHBlcmhhcHMgY2xlYW5pbmcgdXAgc3RhbGUgZW50cmllcyB0aGF0IGFyZSBubyBsb25nZXIgYXNzb2NpYXRlZCB3aXRoIGFjdGl2ZSBwYWdlcy4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGNvbmZpcm1pbmcgd2hhdCBpdCBhY3R1YWxseSAqZG9lcyogYnkgZXhhbWluaW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBhbmQgdGhlbiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHdoZXJlIGl0IGlzIGNhbGxlZCBpbiBteSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyNDgsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNTowMTo1Mi42Mzc1NzM0NzFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ5NTAxNzcwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6YXBfbm9ucHJlc2VudF9wdGVzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbW9yeS5jPTE2ODk9c3RhdGljIGlubGluZSBpbnQgemFwX3ByZXNlbnRfcHRlcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbi0tXFxubW0vbWVtb3J5LmMtMTczNC1cXG5tbS9tZW1vcnkuYzoxNzM1OnN0YXRpYyBpbmxpbmUgaW50IHphcF9ub25wcmVzZW50X3B0ZXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG5tbS9tZW1vcnkuYy0xNzM2LVxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwdGVfdCAqcHRlLCBwdGVfdCBwdGVudCxcXG4tLVxcbm1tL21lbW9yeS5jPTE4MDY9c3RhdGljIGlubGluZSBpbnQgZG9femFwX3B0ZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbi0tXFxubW0vbWVtb3J5LmMtMTgzNS1cXHRlbHNlXFxubW0vbWVtb3J5LmM6MTgzNjpcXHRcXHRuciArPSB6YXBfbm9ucHJlc2VudF9wdGVzKHRsYiwgdm1hLCBwdGUsIHB0ZW50LCBtYXhfbnIsIGFkZHIsXFxubW0vbWVtb3J5LmMtMTgzNy1cXHRcXHRcXHRcXHRcXHQgIGRldGFpbHMsIHJzcywgYW55X3NraXBwZWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNTowMTo1NS4xMzI1OTkxMjFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDY5MTcwMTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEkndmUgcGlucG9pbnRlZCBzb21lIGNydWNpYWwgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBoZXJlIOKAkyBkZWZpbml0ZWx5IHdvcnRoIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbi4gVGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IGFyZSBzY3JlYW1pbmcgZm9yIGF0dGVudGlvbiBhcmUgYG1hZHZpc2VfZnJlZV9wdGVfcmFuZ2VgLCBgZ3VhcmRfcmVtb3ZlX3B0ZV9lbnRyeWAsIGFuZCBgemFwX25vbnByZXNlbnRfcHRlc2AuIFdhaXQgYSBtaW51dGUsIGB6YXBfbm9ucHJlc2VudF9wdGVzYCBpcyBhbiBpbmxpbmUgZnVuY3Rpb24sIGJ1dCBpdCdzIGluZGlyZWN0bHkgY2FsbGVkIHRocm91Z2ggYSBzZXJpZXMgb2Ygb3RoZXIgZnVuY3Rpb25zIGxpa2UgYGRvX3phcF9wdGVfcmFuZ2VgLCBgemFwX3B0ZV9yYW5nZWAsIGFuZCB1bHRpbWF0ZWx5LCBgdW5tYXBfcGFnZV9yYW5nZWAuIE1ha2VzIHNlbnNlLCB0aGUgY2FsbCBjaGFpbiBpcyByZWxldmFudC5cblxuYG1hZHZpc2VfZnJlZV9wdGVfcmFuZ2VgLCBJIHJlY2FsbCwgaXMgcGFydCBvZiBgbW1fd2Fsa19vcHNgLCB0aGF0J3MgYW4gaW50ZXJlc3RpbmcgaG9vayBwb2ludCBmb3IgbWVtb3J5IHJlY2xhaW0gc2NlbmFyaW9zLiBgZ3VhcmRfcmVtb3ZlX3B0ZV9lbnRyeWAgYWxzbyByZXNpZGVzIGluIGBtbS9tYWR2aXNlLmNgLiBPa2F5LCBsZXQncyB0cmFjZSBpdHMgY2FsbCBncmFwaCBhbmQgc2VlIGV4YWN0bHkgd2hlcmUgaXQncyBiZWluZyBpbnZva2VkLiBUaGF0IGdpdmVzIG1lIGEgaGFuZGxlIG9uIHRoZSB2YXJpb3VzIGV4ZWN1dGlvbiBwYXRocyB0aHJvdWdoIHRoZSBrZXJuZWwuIFRoaXMgc2hvdWxkIHByb3ZpZGUgbWUgd2l0aCB0aGUgc3BlY2lmaWMgaW50ZXJmYWNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDcxNywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNTowMTo1OC42MDE3NzIzMTRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY0MjEwNzk1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJndWFyZF9yZW1vdmVfcHRlX2VudHJ5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21hZHZpc2UuYz0xMjE4PXN0YXRpYyBpbnQgZ3VhcmRfcmVtb3ZlX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTIyOS1cXG5tbS9tYWR2aXNlLmM6MTIzMDpzdGF0aWMgaW50IGd1YXJkX3JlbW92ZV9wdGVfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbm1tL21hZHZpc2UuYy0xMjMxLVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBuZXh0LCBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcXG4tLVxcbm1tL21hZHZpc2UuYz0xMjQ0PXN0YXRpYyBsb25nIG1hZHZpc2VfZ3VhcmRfcmVtb3ZlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTEyNTAtXFx0XFx0LnBtZF9lbnRyeSA9IGd1YXJkX3JlbW92ZV9wbWRfZW50cnksXFxubW0vbWFkdmlzZS5jOjEyNTE6XFx0XFx0LnB0ZV9lbnRyeSA9IGd1YXJkX3JlbW92ZV9wdGVfZW50cnksXFxubW0vbWFkdmlzZS5jLTEyNTItXFx0XFx0LndhbGtfbG9jayA9IGdldF93YWxrX2xvY2sobWFkdl9iZWhhdmlvci1cXHUwMDNlbG9ja19tb2RlKSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDU6MDI6MDEuMjQzODg2NzU1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYyODIwNzY1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdtIHRoaW5raW5nIGFib3V0IGl0OlxuXG4qKkFuYWx5emluZyBgbWFkdmlzZWAgYW5kIE1lbW9yeSBSZWNsYW1hdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlIGVudHJ5IHBvaW50cyBmb3IgaGFuZGxpbmcgbWVtb3J5IHJlY2xhbWF0aW9uIHRocm91Z2ggYG1hZHZpc2VgLiBUaGUgY3JpdGljYWwgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgaGVyZSBzZWVtIHRvIGJlIGBtYWR2aXNlX2d1YXJkX3JlbW92ZWAgYW5kIGBtYWR2aXNlX2ZyZWVfc2luZ2xlX3ZtYWAuIFRoYXQncyB3aGVyZSB0aGUgbWFnaWMgc3RhcnRzLlxuXG5UaGVzZSBzaG91bGQgY29ycmVzcG9uZCBkaXJlY3RseSB0byB0aGUgYE1BRFZfRlJFRWAgYW5kIGBNQURWX0dVQVJEX1JFTU9WRWAgb3BlcmF0aW9ucyAob3Igc2ltaWxhciB2YXJpYW50cyBkZXBlbmRpbmcgb24ga2VybmVsIHZlcnNpb24sIGJ1dCB0aGVzZSBhcmUgdGhlIGtleSBpZGVhcykuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aG9zZSBzeW1ib2xpYyBjb25zdGFudHMgYXJlIHByb3Blcmx5IG1hcHBlZCB0byB0aG9zZSBlbnRyeSBwb2ludHMuXG5cbk15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIHNjcnV0aW5pemUgaG93IHRob3NlIGBNQURWX0ZSRUVgIGFuZCBgTUFEVl9HVUFSRF9SRU1PVkVgIG1hZHZpc2UgZmxhZ3MgYXJlIGhhbmRsZWQgd2l0aGluIGBtbS9tYWR2aXNlLmNgLiBUaGF0J3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgYWN0dWFsIGxvZ2ljIGZvciBmcmVlaW5nIG9yIGd1YXJkaW5nIG1lbW9yeSByZWdpb25zLiBMZXQncyBzZWUgaG93IHRoZSBrZXJuZWwgaW1wbGVtZW50cyB0aGVzZSBvcHRpbWl6YXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Mzk5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDU6MDI6MDQuODcyMDk2OTdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2ODk4NjI1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTUFEVl9HVUFSRF9SRU1PVkVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC04MS0jZGVmaW5lIE1BRFZfR1VBUkRfSU5TVEFMTCAxMDJcXHRcXHQvKiBmYXRhbCBzaWduYWwgb24gYWNjZXNzIHRvIHJhbmdlICovXFxuYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaDo4MjojZGVmaW5lIE1BRFZfR1VBUkRfUkVNT1ZFIDEwM1xcdFxcdC8qIHVuZ3VhcmQgcmFuZ2UgKi9cXG5hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTgzLVxcbi0tXFxuYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTEwOC0jZGVmaW5lIE1BRFZfR1VBUkRfSU5TVEFMTCAxMDJcXHRcXHQvKiBmYXRhbCBzaWduYWwgb24gYWNjZXNzIHRvIHJhbmdlICovXFxuYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oOjEwOTojZGVmaW5lIE1BRFZfR1VBUkRfUkVNT1ZFIDEwM1xcdFxcdC8qIHVuZ3VhcmQgcmFuZ2UgKi9cXG5hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmgtMTEwLVxcbi0tXFxuYXJjaC9wYXJpc2MvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmgtNzgtI2RlZmluZSBNQURWX0dVQVJEX0lOU1RBTEwgMTAyXFx0XFx0LyogZmF0YWwgc2lnbmFsIG9uIGFjY2VzcyB0byByYW5nZSAqL1xcbmFyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oOjc5OiNkZWZpbmUgTUFEVl9HVUFSRF9SRU1PVkUgMTAzXFx0XFx0LyogdW5ndWFyZCByYW5nZSAqL1xcbmFyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTgwLVxcbi0tXFxuYXJjaC94dGVuc2EvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmgtMTE2LSNkZWZpbmUgTUFEVl9HVUFSRF9JTlNUQUxMIDEwMlxcdFxcdC8qIGZhdGFsIHNpZ25hbCBvbiBhY2Nlc3MgdG8gcmFuZ2UgKi9cXG5hcmNoL3h0ZW5zYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaDoxMTc6I2RlZmluZSBNQURWX0dVQVJEX1JFTU9WRSAxMDNcXHRcXHQvKiB1bmd1YXJkIHJhbmdlICovXFxuYXJjaC94dGVuc2EvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmgtMTE4LVxcbi0tXFxuaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmgtODItI2RlZmluZSBNQURWX0dVQVJEX0lOU1RBTEwgMTAyXFx0XFx0LyogZmF0YWwgc2lnbmFsIG9uIGFjY2VzcyB0byByYW5nZSAqL1xcbmluY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9tbWFuLWNvbW1vbi5oOjgzOiNkZWZpbmUgTUFEVl9HVUFSRF9SRU1PVkUgMTAzXFx0XFx0LyogdW5ndWFyZCByYW5nZSAqL1xcbmluY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9tbWFuLWNvbW1vbi5oLTg0LVxcbi0tXFxubW0vbWFkdmlzZS5jPTEzMzk9c3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xMzY3LVxcdFxcdHJldHVybiBtYWR2aXNlX2d1YXJkX2luc3RhbGwobWFkdl9iZWhhdmlvcik7XFxubW0vbWFkdmlzZS5jOjEzNjg6XFx0Y2FzZSBNQURWX0dVQVJEX1JFTU9WRTpcXG5tbS9tYWR2aXNlLmMtMTM2OS1cXHRcXHRyZXR1cm4gbWFkdmlzZV9ndWFyZF9yZW1vdmUobWFkdl9iZWhhdmlvcik7XFxuLS1cXG5tbS9tYWR2aXNlLmM9MTUxOT1tYWR2aXNlX2JlaGF2aW9yX3ZhbGlkKGludCBiZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xNTQ5LVxcdGNhc2UgTUFEVl9HVUFSRF9JTlNUQUxMOlxcbm1tL21hZHZpc2UuYzoxNTUwOlxcdGNhc2UgTUFEVl9HVUFSRF9SRU1PVkU6XFxubW0vbWFkdmlzZS5jLTE1NTEtI2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRVxcbi0tXFxubW0vbWFkdmlzZS5jPTE3NDM9c3RhdGljIGVudW0gbWFkdmlzZV9sb2NrX21vZGUgZ2V0X2xvY2tfbW9kZShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xNzU3LVxcdGNhc2UgTUFEVl9HVUFSRF9JTlNUQUxMOlxcbm1tL21hZHZpc2UuYzoxNzU4OlxcdGNhc2UgTUFEVl9HVUFSRF9SRU1PVkU6XFxubW0vbWFkdmlzZS5jLTE3NTktXFx0Y2FzZSBNQURWX0RPTlRORUVEOlxcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmgtODItI2RlZmluZSBNQURWX0dVQVJEX0lOU1RBTEwgMTAyXFx0XFx0LyogZmF0YWwgc2lnbmFsIG9uIGFjY2VzcyB0byByYW5nZSAqL1xcbnRvb2xzL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9tbWFuLWNvbW1vbi5oOjgzOiNkZWZpbmUgTUFEVl9HVUFSRF9SRU1PVkUgMTAzXFx0XFx0LyogdW5ndWFyZCByYW5nZSAqL1xcbnRvb2xzL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9tbWFuLWNvbW1vbi5oLTg0LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jPTM0Nz1URVNUX0YoZ3VhcmRfcmVnaW9ucywgYmFzaWMpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtMzgxLVxcdC8qIFJlbW92ZSB0aGUgZmlyc3QgZ3VhcmQgcGFnZS4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmM6MzgyOlxcdEFTU0VSVF9GQUxTRShtYWR2aXNlKHB0ciwgcGFnZV9zaXplLCBNQURWX0dVQVJEX1JFTU9WRSkpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy0zODMtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtMzg4LVxcdEFTU0VSVF9GQUxTRShtYWR2aXNlKFxcdTAwMjZwdHJbKE5VTV9QQUdFUyAtIDEpICogcGFnZV9zaXplXSwgcGFnZV9zaXplLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYzozODk6XFx0XFx0XFx0ICAgICBNQURWX0dVQVJEX1JFTU9WRSkpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy0zOTAtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtNDE1LVxcdC8qIFJlbW92ZSBndWFyZCBwYWdlcy4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmM6NDE2OlxcdEFTU0VSVF9FUShtYWR2aXNlKHB0ciwgTlVNX1BBR0VTICogcGFnZV9zaXplLCBNQURWX0dVQVJEX1JFTU9WRSksIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy00MTctXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtNDI4LVxcdCAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYzo0Mjk6XFx0QVNTRVJUX0VRKG1hZHZpc2UocHRyLCBOVU1fUEFHRVMgKiBwYWdlX3NpemUsIE1BRFZfR1VBUkRfUkVNT1ZFKSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTQzMC1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYz00NDE9VEVTVF9GKGd1YXJkX3JlZ2lvbnMsIG11bHRpX3ZtYSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy01MTEtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jOjUxMjpcXHRBU1NFUlRfRVEobWFkdmlzZShwdHJfcmVnaW9uLCAxMDAgKiBwYWdlX3NpemUsIE1BRFZfR1VBUkRfUkVNT1ZFKSwgLTEpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy01MTMtXFx0QVNTRVJUX0VRKGVycm5vLCBFTk9NRU0pO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTU1Ny1cXHR9XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jOjU1ODpcXHRBU1NFUlRfRVEobWFkdmlzZShwdHJfcmVnaW9uLCAxMDAgKiBwYWdlX3NpemUsIE1BRFZfR1VBUkRfUkVNT1ZFKSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTU1OS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgMTAwOyBpKyspIHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYz01NzM9VEVTVF9GKGd1YXJkX3JlZ2lvbnMsIHByb2Nlc3NfbWFkdmlzZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy02NDQtXFx0LyogTm93IGRvIHRoZSBzYW1lIHdpdGggdW5ndWFyZC4uLiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYzo2NDU6XFx0Y291bnQgPSBzeXNfcHJvY2Vzc19tYWR2aXNlKFBJREZEX1NFTEYsIHZlYywgNiwgTUFEVl9HVUFSRF9SRU1PVkUsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy02NDYtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmM9NzAzPVRFU1RfRihndWFyZF9yZWdpb25zLCBtcHJvdGVjdClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy03MzYtXFx0LyogTm93IHVuZ3VhcmQgdGhlIHdob2xlIHJhbmdlLiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYzo3Mzc6XFx0QVNTRVJUX0VRKG1hZHZpc2UocHRyLCAxMCAqIHBhZ2Vfc2l6ZSwgTUFEVl9HVUFSRF9SRU1PVkUpLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtNzM4LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jPTc1MT1URVNUX0YoZ3VhcmRfcmVnaW9ucywgc3BsaXRfbWVyZ2UpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtODU1LVxcdC8qIC4uLmFuZCB1bmd1YXJkIHRoZSB3aG9sZSByYW5nZS4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmM6ODU2OlxcdEFTU0VSVF9FUShtYWR2aXNlKHB0ciwgMTAgKiBwYWdlX3NpemUsIE1BRFZfR1VBUkRfUkVNT1ZFKSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTg1Ny1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYz05NDM9VEVTVF9GKGd1YXJkX3JlZ2lvbnMsIG1sb2NrKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTk5Ni1cXHQgKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmM6OTk3OlxcdEFTU0VSVF9FUShtYWR2aXNlKHB0ciwgMTAgKiBwYWdlX3NpemUsIE1BRFZfR1VBUkRfUkVNT1ZFKSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTk5OC1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYz0xMTg4PVRFU1RfRihndWFyZF9yZWdpb25zLCBmb3JrKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTEyMTYtXFx0XFx0LyogTm93IHVuZ3VhcmQgdGhlIHJhbmdlLiovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jOjEyMTc6XFx0XFx0QVNTRVJUX0VRKG1hZHZpc2UocHRyLCAxMCAqIHBhZ2Vfc2l6ZSwgTUFEVl9HVUFSRF9SRU1PVkUpLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtMTIxOC1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYz0xMjQzPVRFU1RfRihndWFyZF9yZWdpb25zLCBmb3JrX2NvdylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy0xMjgwLVxcdFxcdC8qIFJlbW92ZSBpdC4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmM6MTI4MTpcXHRcXHRBU1NFUlRfRVEobWFkdmlzZShwdHIsIDEwICogcGFnZV9zaXplLCBNQURWX0dVQVJEX1JFTU9WRSksIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy0xMjgyLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jPTE1NTQ9VEVTVF9GKGd1YXJkX3JlZ2lvbnMsIG1hZHZpc2Vfc2VxdWVudGlhbClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy0xNTk3LVxcdC8qIE5vdyByZW1vdmUgZ3VhcmQgcGFnZXMuICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jOjE1OTg6XFx0QVNTRVJUX0VRKG1hZHZpc2UocHRyLCAxMCAqIHBhZ2Vfc2l6ZSwgTUFEVl9HVUFSRF9SRU1PVkUpLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtMTU5OS1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYz0xNjExPVRFU1RfRihndWFyZF9yZWdpb25zLCBtYXBfcHJpdmF0ZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy0xNjU4LVxcdC8qIFJlbW92ZSBndWFyZCByZWdpb25zIGZyb20gc2hhcmVkIG1hcHBpbmcuICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jOjE2NTk6XFx0QVNTRVJUX0VRKG1hZHZpc2UocHRyX3NoYXJlZCwgMTAgKiBwYWdlX3NpemUsIE1BRFZfR1VBUkRfUkVNT1ZFKSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTE2NjAtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtMTY2OC1cXHQvKiBSZW1vdmUgZ3VhcmQgcmVnaW9ucyBmcm9tIHByaXZhdGUgbWFwcGluZy4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmM6MTY2OTpcXHRBU1NFUlRfRVEobWFkdmlzZShwdHJfcHJpdmF0ZSwgMTAgKiBwYWdlX3NpemUsIE1BRFZfR1VBUkRfUkVNT1ZFKSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTE2NzAtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtMTcxNy1cXHQvKiBSZW1vdmUgdGhlIGd1YXJkIHJlZ2lvbnMgYWx0b2dldGhlci4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmM6MTcxODpcXHRBU1NFUlRfRVEobWFkdmlzZShwdHJfcHJpdmF0ZSwgMTAgKiBwYWdlX3NpemUsIE1BRFZfR1VBUkRfUkVNT1ZFKSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTE3MTktXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmM9MTc1ND1URVNUX0YoZ3VhcmRfcmVnaW9ucywgcmVhZG9ubHlfZmlsZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy0xNzkzLVxcdC8qIFJlbW92ZSBndWFyZCByZWdpb25zLiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYzoxNzk0OlxcdEFTU0VSVF9FUShtYWR2aXNlKHB0ciwgMTAgKiBwYWdlX3NpemUsIE1BRFZfR1VBUkRfUkVNT1ZFKSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTE3OTUtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmM9MTkxMT1URVNUX0YoZ3VhcmRfcmVnaW9ucywgaG9sZV9wdW5jaClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy0xOTU3LVxcdC8qIE5vdyByZW1vdmUgZ3VhcmQgcmVnaW9uIHRocm91Z2hvdXQuICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jOjE5NTg6XFx0QVNTRVJUX0VRKG1hZHZpc2UocHRyLCAxMCAqIHBhZ2Vfc2l6ZSwgTUFEVl9HVUFSRF9SRU1PVkUpLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtMTk1OS1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYz0xOTc1PVRFU1RfRihndWFyZF9yZWdpb25zLCBtZW1mZF93cml0ZV9zZWFsKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTIwMjMtXFx0LyogTm93IHJlbW92ZSBndWFyZCByZWdpb25zLiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYzoyMDI0OlxcdEFTU0VSVF9FUShtYWR2aXNlKHB0ciwgMTAgKiBwYWdlX3NpemUsIE1BRFZfR1VBUkRfUkVNT1ZFKSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTIwMjUtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmM9MjA0Nj1URVNUX0YoZ3VhcmRfcmVnaW9ucywgYW5vbl96ZXJvcGFnZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy0yMDczLVxcdC8qIE5vdyByZW1vdmUgYWxsIGd1YXJkIHJlZ2lvbnMuICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jOjIwNzQ6XFx0QVNTRVJUX0VRKG1hZHZpc2UocHRyLCAxMCAqIHBhZ2Vfc2l6ZSwgTUFEVl9HVUFSRF9SRU1PVkUpLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtMjA3NS1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYz0yMjQ5PVRFU1RfRihndWFyZF9yZWdpb25zLCBzbWFwcylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy0yMjczLVxcdCAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYzoyMjc0OlxcdEFTU0VSVF9FUShtYWR2aXNlKHB0ciwgcGFnZV9zaXplLCBNQURWX0dVQVJEX1JFTU9WRSksIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy0yMjc1LVxcdEFTU0VSVF9UUlVFKGNoZWNrX3ZtZmxhZ19ndWFyZChwdHIpKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoPTMzPXNlcGFyYXRlZCBieSBzcGFjZXM6XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaC01Mi0tIG1hZHZfZ3VhcmRcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaDo1MzpcXHR0ZXN0IG1hZHZpc2UoMikgTUFEVl9HVUFSRF9JTlNUQUxMIGFuZCBNQURWX0dVQVJEX1JFTU9WRSBvcHRpb25zXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gtNTQtLSBtYWR2X3BvcHVsYXRlXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaD0zNDM9Q0FURUdPUlk9XFxcImhtbVxcXCIgcnVuX3Rlc3QgYmFzaCAuL3Rlc3RfaG1tLnNoIHNtb2tlXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gtMzQ0LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoOjM0NTojIE1BRFZfR1VBUkRfSU5TVEFMTCBhbmQgTUFEVl9HVUFSRF9SRU1PVkUgdGVzdHNcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaC0zNDYtQ0FURUdPUlk9XFxcIm1hZHZfZ3VhcmRcXFwiIHJ1bl90ZXN0IC4vZ3VhcmQtcmVnaW9uc1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNTowMjowNy41NjE5NjUxM1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTkxMDUwNzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyByZWdhcmRpbmcgYE1BRFZfR1VBUkRfUkVNT1ZFYDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBJbXBsZW1lbnRhdGlvbiBvZiBgTUFEVl9HVUFSRF9SRU1PVkVgKipcblxuQWxyaWdodCwgc28gYE1BRFZfR1VBUkRfUkVNT1ZFYCBpcyBzb21ldGhpbmcgbmV3LCBvciBhdCBsZWFzdCBhIG5ldyBmZWF0dXJlIGJlaW5nIGV2YWx1YXRlZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgZG9lcyB0aGlzIHRoaW5nIGhhdmUgYW55IGNvbmZpZ3VyYXRpb24ga25vYnMgb3IgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj9cIiBGaXJzdCB0aGluZydzIGZpcnN0LCBJIHNob3VsZCBmaW5kIGl0cyBpbXBsZW1lbnRhdGlvbi4gTG9va3MgbGlrZSB0aGUgaW5pdGlhbCBsZWFkIGlzIHBvaW50aW5nIHRvd2FyZHMgYG1hZHZpc2UuY2AuICBMZXQncyBoZWFkIG92ZXIgdG8gYG1tL21hZHZpc2UuY2AgYW5kIGh1bnQgZm9yIGBNQURWX0dVQVJEX1JFTU9WRWAgaXRzZWxmLiBUaGF0J2xsIGJlIHRoZSBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIGl0cyBjb3JlIGJlaGF2aW9yIGFuZCBhbnkgYXNzb2NpYXRlZCBkZXBlbmRlbmNpZXMuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjY0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDU6MDI6MTEuMTUzMDE3OTE2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDgxNDQ4ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTUFEVl9HVUFSRF9SRU1PVkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWFkdmlzZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21hZHZpc2UuYz0xMzM5PXN0YXRpYyBpbnQgbWFkdmlzZV92bWFfYmVoYXZpb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTM2Ny1cXHRcXHRyZXR1cm4gbWFkdmlzZV9ndWFyZF9pbnN0YWxsKG1hZHZfYmVoYXZpb3IpO1xcbm1tL21hZHZpc2UuYzoxMzY4OlxcdGNhc2UgTUFEVl9HVUFSRF9SRU1PVkU6XFxubW0vbWFkdmlzZS5jLTEzNjktXFx0XFx0cmV0dXJuIG1hZHZpc2VfZ3VhcmRfcmVtb3ZlKG1hZHZfYmVoYXZpb3IpO1xcbi0tXFxubW0vbWFkdmlzZS5jPTE1MTk9bWFkdmlzZV9iZWhhdmlvcl92YWxpZChpbnQgYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTU0OS1cXHRjYXNlIE1BRFZfR1VBUkRfSU5TVEFMTDpcXG5tbS9tYWR2aXNlLmM6MTU1MDpcXHRjYXNlIE1BRFZfR1VBUkRfUkVNT1ZFOlxcbm1tL21hZHZpc2UuYy0xNTUxLSNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVcXG4tLVxcbm1tL21hZHZpc2UuYz0xNzQzPXN0YXRpYyBlbnVtIG1hZHZpc2VfbG9ja19tb2RlIGdldF9sb2NrX21vZGUoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTc1Ny1cXHRjYXNlIE1BRFZfR1VBUkRfSU5TVEFMTDpcXG5tbS9tYWR2aXNlLmM6MTc1ODpcXHRjYXNlIE1BRFZfR1VBUkRfUkVNT1ZFOlxcbm1tL21hZHZpc2UuYy0xNzU5LVxcdGNhc2UgTUFEVl9ET05UTkVFRDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDU6MDI6MTEuNTAxMTY4OTEzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MTUyMzM3MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBNQURWX0dVQVJEX1JFTU9WRSdzIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byB0aGlzIGBNQURWX0dVQVJEX1JFTU9WRWAgZmxhZyBhbmQgaW1tZWRpYXRlbHkgSSdtIHdvbmRlcmluZzogaXMgdGhpcyBmZWF0dXJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQ/IElzIGl0IG9ubHkgYXZhaWxhYmxlIG9uIHNwZWNpZmljIGFyY2hpdGVjdHVyZXMgb3Igd2l0aCBjZXJ0YWluIGtlcm5lbCBjb25maWd1cmF0aW9ucz8gVGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBjb25maXJtIHRoYXQuIEkgbmVlZCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBgI2lmZGVmYCBkaXJlY3RpdmVzIHN1cnJvdW5kaW5nIGl0cyBkZWZpbml0aW9uIG9yIHVzYWdlLiBNeSBpbnN0aW5jdCBpcyB0byBnbyBkaXJlY3RseSB0byBgbW0vbWFkdmlzZS5jYCwgdGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gZmluZCB0aGUgYG1hZHZpc2VfZ3VhcmRfcmVtb3ZlYCBmdW5jdGlvbmFsaXR5LCBhc3N1bWluZyBpdCBoYXMgaXRzIG93biBkZWRpY2F0ZWQgZnVuY3Rpb24uIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDI4MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA1OjAyOjE0LjkxNjQwNTA5NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2MzIxNzg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hZHZpc2VfZ3VhcmRfcmVtb3ZlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21hZHZpc2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tYWR2aXNlLmM9MTIzMD1zdGF0aWMgaW50IGd1YXJkX3JlbW92ZV9wdGVfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vbWFkdmlzZS5jLTEyNDMtXFxubW0vbWFkdmlzZS5jOjEyNDQ6c3RhdGljIGxvbmcgbWFkdmlzZV9ndWFyZF9yZW1vdmUoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxubW0vbWFkdmlzZS5jLTEyNDUte1xcbi0tXFxubW0vbWFkdmlzZS5jPTEzMzk9c3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xMzY4LVxcdGNhc2UgTUFEVl9HVUFSRF9SRU1PVkU6XFxubW0vbWFkdmlzZS5jOjEzNjk6XFx0XFx0cmV0dXJuIG1hZHZpc2VfZ3VhcmRfcmVtb3ZlKG1hZHZfYmVoYXZpb3IpO1xcbm1tL21hZHZpc2UuYy0xMzcwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNTowMjoxNS4wNjI3MzA3NzFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI3MzE1MTI3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBNZW1vcnkgQWR2aXNlIEF2YWlsYWJpbGl0eSoqXG5cbkhtbSwgaXQncyBvY2N1cnJpbmcgdG8gbWUgdGhhdCBgTUFEVl9HVUFSRF9SRU1PVkVgIGFwcGVhcnMgdG8gYmUgcmVsaWFibHkgYXZhaWxhYmxlIHdoZW5ldmVyIGBtYWR2aXNlYCBpdHNlbGYgaXMuIFRoYXQncyBhIGdvb2Qgb2JzZXJ2YXRpb24sIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBnZW5lcmFsIGRlc2lnbiBwaGlsb3NvcGh5IG9mIHRoZXNlIG1lbW9yeSBtYW5hZ2VtZW50IHRvb2xzLiBCdXQgd2hhdCBhYm91dCBgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZWA/IFRoYXQncyBzcGVjaWZpY2FsbHkgdGllZCB0byBgTUFEVl9GUkVFYCwgcmlnaHQ/IEkgbmVlZCB0byBjbGFyaWZ5IGlmIHRoYXQgZnVuY3Rpb24ncyBhdmFpbGFiaWxpdHkgaGFzIHNpbWlsYXIgZ3VhcmFudGVlcywgb3IgaWYgdGhlcmUncyBhIG1vcmUgbnVhbmNlZCBkZXBlbmRlbmN5IGF0IHBsYXkuXG5cblRvIGJlIGNlcnRhaW4sIGl04oCZcyBiZXN0IHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UuIExldCdzIGRlbHZlIGludG8gYG1tL21hZHZpc2UuY2AuIEkgbmVlZCB0byByZXZpZXcgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBNQURWX0ZSRUVgIHdpdGhpbiB0aGF0IG1vZHVsZSB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgd2l0aCBgbWFkdmlzZWAgYW5kLCBieSBleHRlbnNpb24sIHRoZSBhdmFpbGFiaWxpdHkgYW5kIHBvdGVudGlhbCB1c2VzIG9mIGBtYWR2aXNlX2ZyZWVfcHRlX3JhbmdlYC4gVGltZSB0byBnZXQgaW50byB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3MTYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNTowMjoxOC4zMzU4ODQ4MThaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDMxNDMxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJNQURWX0ZSRUVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWFkdmlzZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21hZHZpc2UuYz04MDA9c3RhdGljIGludCBtYWR2aXNlX2ZyZWVfc2luZ2xlX3ZtYShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy04MTItXFxubW0vbWFkdmlzZS5jOjgxMzpcXHQvKiBNQURWX0ZSRUUgd29ya3MgZm9yIG9ubHkgYW5vbiB2bWEgYXQgdGhlIG1vbWVudCAqL1xcbm1tL21hZHZpc2UuYy04MTQtXFx0aWYgKCF2bWFfaXNfYW5vbnltb3VzKHZtYSkpXFxuLS1cXG5tbS9tYWR2aXNlLmM9ODk3PXN0YXRpYyBsb25nIG1hZHZpc2VfZG9udG5lZWRfZnJlZShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy05NTEtXFx0XFx0cmV0dXJuIG1hZHZpc2VfZG9udG5lZWRfc2luZ2xlX3ZtYShtYWR2X2JlaGF2aW9yKTtcXG5tbS9tYWR2aXNlLmM6OTUyOlxcdGVsc2UgaWYgKGJlaGF2aW9yID09IE1BRFZfRlJFRSlcXG5tbS9tYWR2aXNlLmMtOTUzLVxcdFxcdHJldHVybiBtYWR2aXNlX2ZyZWVfc2luZ2xlX3ZtYShtYWR2X2JlaGF2aW9yKTtcXG4tLVxcbm1tL21hZHZpc2UuYz0xMjY4PXN0YXRpYyBib29sIGlzX2Rpc2NhcmQoaW50IGJlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTEyNzAtXFx0c3dpdGNoIChiZWhhdmlvcikge1xcbm1tL21hZHZpc2UuYzoxMjcxOlxcdGNhc2UgTUFEVl9GUkVFOlxcbm1tL21hZHZpc2UuYy0xMjcyLVxcdGNhc2UgTUFEVl9ET05UTkVFRDpcXG4tLVxcbm1tL21hZHZpc2UuYz0xMzM5PXN0YXRpYyBpbnQgbWFkdmlzZV92bWFfYmVoYXZpb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTM1OC1cXHRcXHRyZXR1cm4gbWFkdmlzZV9wYWdlb3V0KG1hZHZfYmVoYXZpb3IpO1xcbm1tL21hZHZpc2UuYzoxMzU5OlxcdGNhc2UgTUFEVl9GUkVFOlxcbm1tL21hZHZpc2UuYy0xMzYwLVxcdGNhc2UgTUFEVl9ET05UTkVFRDpcXG4tLVxcbm1tL21hZHZpc2UuYz0xNTE5PW1hZHZpc2VfYmVoYXZpb3JfdmFsaWQoaW50IGJlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTE1MzAtXFx0Y2FzZSBNQURWX0RPTlRORUVEX0xPQ0tFRDpcXG5tbS9tYWR2aXNlLmM6MTUzMTpcXHRjYXNlIE1BRFZfRlJFRTpcXG5tbS9tYWR2aXNlLmMtMTUzMi1cXHRjYXNlIE1BRFZfQ09MRDpcXG4tLVxcbm1tL21hZHZpc2UuYz0xNzQzPXN0YXRpYyBlbnVtIG1hZHZpc2VfbG9ja19tb2RlIGdldF9sb2NrX21vZGUoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTc2MC1cXHRjYXNlIE1BRFZfRE9OVE5FRURfTE9DS0VEOlxcbm1tL21hZHZpc2UuYzoxNzYxOlxcdGNhc2UgTUFEVl9GUkVFOlxcbm1tL21hZHZpc2UuYy0xNzYyLVxcdFxcdHJldHVybiBNQURWSVNFX1ZNQV9SRUFEX0xPQ0s7XFxuLS1cXG5tbS9tYWR2aXNlLmM9MTgxMz1zdGF0aWMgYm9vbCBtYWR2aXNlX2JhdGNoX3RsYl9mbHVzaChpbnQgYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTgxNy1cXHRjYXNlIE1BRFZfRE9OVE5FRURfTE9DS0VEOlxcbm1tL21hZHZpc2UuYzoxODE4OlxcdGNhc2UgTUFEVl9GUkVFOlxcbm1tL21hZHZpc2UuYy0xODE5LVxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxubW0vbWFkdmlzZS5jPTE4ODg9c3RhdGljIGludCBtYWR2aXNlX2RvX2JlaGF2aW9yKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW5faW4sXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTkzNC0gKlxcdFxcdHNvIHRoZSBrZXJuZWwgY2FuIGZyZWUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBpdC5cXG5tbS9tYWR2aXNlLmM6MTkzNTogKiAgTUFEVl9GUkVFIC0gdGhlIGFwcGxpY2F0aW9uIG1hcmtzIHBhZ2VzIGluIHRoZSBnaXZlbiByYW5nZSBhcyBsYXp5IGZyZWUsXFxubW0vbWFkdmlzZS5jLTE5MzYtICpcXHRcXHR3aGVyZSBhY3R1YWwgcHVyZ2VzIGFyZSBwb3N0cG9uZWQgdW50aWwgbWVtb3J5IHByZXNzdXJlIGhhcHBlbnMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA1OjAyOjE4LjQ3MDIwMzA3M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDQ1NzE4MTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqXG5cbkhtbSwgYENPTkZJR19BRFZJU0VfU1lTQ0FMTFNgLi4uIEknbSBnZXR0aW5nIGEgZmVlbGluZyB0aGF0IHNvbWV0aGluZyBpcyB1c2luZyBpdCwgYnV0IEkgY2FuJ3QgcXVpdGUgcGxhY2UgaXQuIE9rYXksIGJlc3QgdG8ganVzdCBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIHNvdXJjZS4gTXkgaW5zdGluY3QgaXMgdGhhdCB0aGlzIGlzIHNvbWV0aGluZyB0aGF0J3MgbGlrZWx5IHRpZWQgaW50byBtZW1vcnkgbWFuYWdlbWVudCwgc28gSSBzaG91bGQgcHJvYmFibHkgc3RhcnQgd2l0aCB0aGUgYG1tL2AgZGlyZWN0b3J5LiBSaWdodCwgbGV0J3MgdGFrZSBhIHBlZWsgYXQgYG1tL01ha2VmaWxlYC4gVGhhdCBzaG91bGQgYmUgdGhlIHF1aWNrZXN0IHdheSB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCBtaWdodCBiZSBjb25kaXRpb25hbGx5IGNvbXBpbGluZyBiYXNlZCBvbiB0aGF0IGZsYWcuIEhvcGVmdWxseSwgaXTigJlzIHJlYXNvbmFibHkgd2VsbC1jb21tZW50ZWQgYW5kIEkgY2FuIGp1c3QgcGFyc2UgdGhhdCBxdWlja2x5IHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIEl0J3MgYWxtb3N0IGFsd2F5cyBhIGdvb2Qgc3RyYXRlZ3kgdG8gc3RhcnQgd2l0aCB0aGUgYnVpbGQgc3lzdGVtIGl0c2VsZiB3aGVuIGNoYXNpbmcgZG93biBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5MDgsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNTowMjoyMS41MTU5MjQ5OFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTY5NTMyMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFkdmlzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT03ND1pZmRlZiBDT05GSUdfTU1VXFxubW0vTWFrZWZpbGU6NzU6XFx0b2JqLSQoQ09ORklHX0FEVklTRV9TWVNDQUxMUylcXHQrPSBtYWR2aXNlLm9cXG5tbS9NYWtlZmlsZS03Ni1lbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNTowMjoyMS42MTI4ODU4NTZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM2NDU2NjAxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKkNoZWNraW5nIHRoZSBEZXBlbmRlbmNpZXMgZm9yIGBtYWR2aXNlLmNgKipcblxuQWxyaWdodCwgc28gSSdtIHByZXR0eSBzdXJlIGBDT05GSUdfQURWSVNFX1NZU0NBTExTYCBpcyBhIHJlcXVpcmVtZW50IGZvciBgbWFkdmlzZS5jYC4gVGhhdCdzIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYWN0dWFsbHkgYmVpbmcgZW5hYmxlZCB3aGVuIEkgZXhwZWN0IGl0IHRvIGJlLlxuXG5IYW5nIG9uIGEgc2Vjb25k4oCmIEkgbmVlZCB0byBjb25zaWRlciBgemFwX25vbnByZXNlbnRfcHRlc2AuIEkgc2VlbSB0byByZWNhbGwgdGhhdCBiZWluZyBpbiBgbW0vbWVtb3J5LmNgLiBCdXQgYG1tL21lbW9yeS5jYCBpcyBhbHdheXMgY29tcGlsZWQsIGlzbid0IGl0PyBJZiBzbywgd2h5IHdvdWxkIHRoaXMgYENPTkZJR2AgbWF0dGVyIGZvciBzb21ldGhpbmcgdGhhdCdzIGFsd2F5cyBidWlsdD8gU29tZXRoaW5nIGRvZXNuJ3QgcXVpdGUgYWRkIHVwIGhlcmUsIHNvIHRoZSBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eS5cblxuTGV0IG1lIGdvIGxvb2sgYXQgYGluaXQvS2NvbmZpZ2Agb3Igc29tZXdoZXJlIHNpbWlsYXIgdG8gZG91YmxlLWNoZWNrIHRoaXMgYENPTkZJR19BRFZJU0VfU1lTQ0FMTFNgIGFuZCBtYWtlIHN1cmUgSSBmdWxseSB1bmRlcnN0YW5kIHdoZXJlIGl0IGNvbWVzIGZyb20gYW5kIHdoYXQgaXQgY29udHJvbHMuIEl0J3MgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIHN5c2NhbGwgaXRzZWxmLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjIwMywiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA1OjAyOjI1Ljk3NzQ1NTEwNFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYzNDYxNjU2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQURWSVNFX1NZU0NBTExTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xOTM3PWNvbmZpZyBJT19VUklOR19NT0NLX0ZJTEVcXG4tLVxcbmluaXQvS2NvbmZpZy0xOTQ3LVxcbmluaXQvS2NvbmZpZzoxOTQ4OmNvbmZpZyBBRFZJU0VfU1lTQ0FMTFNcXG5pbml0L0tjb25maWctMTk0OS1cXHRib29sIFxcXCJFbmFibGUgbWFkdmlzZS9mYWR2aXNlIHN5c2NhbGxzXFxcIiBpZiBFWFBFUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDU6MDI6MjguNjEyMDc4MTA1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNjEzMzkxMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgRGVmYXVsdCBCZWhhdmlvciBvZiBQVEUgQ2xlYXJpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgY2xlYXJpbmcgb2YgcGFnZSB0YWJsZSBlbnRyaWVzIHdvcmtzLiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IHRoaXMgYHphcF9ub25wcmVzZW50X3B0ZXNgIGZ1bmN0aW9uYWxpdHkgaXMgZW5hYmxlZCBieSBkZWZhdWx0LiBJIG5lZWQgdG8gY29uZmlybSB0aGlzLiBUaGUgZmlyc3QgcGxhY2UgdG8gY2hlY2sgaXMgYG1tL21lbW9yeS5jYC4gSSByZWNhbGwgYSBwYXRjaCB0aGF0IGRlYWx0IHdpdGggdGhpcyBhcmVhLCBzcGVjaWZpY2FsbHkgcmVwbGFjaW5nIGBjbGVhcl9ub3RfcHJlc2VudF9mdWxsX3B0ZXNgIHdpdGggYGNsZWFyX25vbnByZXNlbnRfcHRlc2AuIFRoYXQgY2hhbmdlIGlzIHNpZ25pZmljYW50LiBOb3csIHdoZXJlIGlzIHRoaXMgbmV3IGBjbGVhcl9ub25wcmVzZW50X3B0ZXNgIGZ1bmN0aW9uIGRlZmluZWQ/IEFoLCBpdCdzIGFuIGlubGluZSBzdGF0aWMgZnVuY3Rpb247IEknbGwgZmluZCBpdCBpbiBgaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhgLlxuXG5Ob3csIEkgbmVlZCB0byB6b29tIGluIG9uIGhvdyB0aGlzIGlzIHV0aWxpemVkLiBJIHdhbnQgdG8gc2VlIHRoaXMgaW4gY29udGV4dCwgc28gSSdsbCBiZSBmb2N1c2luZyBvbjogYG1hZHZpc2VfZnJlZV9wdGVfcmFuZ2VgLCBgZ3VhcmRfcmVtb3ZlX3B0ZV9lbnRyeWAsIGFuZCBgemFwX25vbnByZXNlbnRfcHRlc2AgdG8gYmVnaW4gd2l0aC4gXG5cblRvIG1ha2Ugc3VyZSBJJ3ZlIGdvdCBhIGNvbXByZWhlbnNpdmUgdmlldywgSSdsbCBuZWVkIHRvIGNoZWNrIGlmIGBjbGVhcl9ub25wcmVzZW50X3B0ZXNgIGlzIHVzZWQgaW4gYW55IG90aGVyIHBsYWNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2MzAsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDU6MDI6MzIuNjczNDIwNjc0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzMxMTg2ODM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNsZWFyX25vbnByZXNlbnRfcHRlc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3BndGFibGUuaD05ODU9c3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9tbXVfdGxiKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtOTkxLS8qKlxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oOjk5MjogKiBjbGVhcl9ub25wcmVzZW50X3B0ZXMgLSBDbGVhciBtdWx0aXBsZSBub24tcHJlc2VudCBQVEVzIHdoaWNoIGFyZVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTk5My0gKlxcdFxcdFxcdCAgICBjb25zZWN1dGl2ZSBpbiB0aGUgcGd0YWJsZS5cXG4tLVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTEwMDEtICovXFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg6MTAwMjpzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfbm9ucHJlc2VudF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTEwMDMtXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgdW5zaWduZWQgaW50IG5yKVxcbi0tXFxubW0vbWFkdmlzZS5jPTY1Mz1zdGF0aWMgaW50IG1hZHZpc2VfZnJlZV9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vbWFkdmlzZS5jLTY5Ny1cXHRcXHRcXHRcXHRzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdChlbnRyeSwgbnIpO1xcbm1tL21hZHZpc2UuYzo2OTg6XFx0XFx0XFx0XFx0Y2xlYXJfbm9ucHJlc2VudF9wdGVzKG1tLCBhZGRyLCBwdGUsIG5yKTtcXG5tbS9tYWR2aXNlLmMtNjk5LVxcdFxcdFxcdH0gZWxzZSBpZiAoc29mdGxlYWZfaXNfaHdwb2lzb24oZW50cnkpIHx8XFxuLS1cXG5tbS9tZW1vcnkuYz0xNzM1PXN0YXRpYyBpbmxpbmUgaW50IHphcF9ub25wcmVzZW50X3B0ZXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG4tLVxcbm1tL21lbW9yeS5jLTE3OTktXFx0fVxcbm1tL21lbW9yeS5jOjE4MDA6XFx0Y2xlYXJfbm9ucHJlc2VudF9wdGVzKHZtYS1cXHUwMDNldm1fbW0sIGFkZHIsIHB0ZSwgbnIpO1xcbm1tL21lbW9yeS5jLTE4MDEtXFx0KmFueV9za2lwcGVkID0gemFwX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQodm1hLCBhZGRyLCBwdGUsIG5yLCBkZXRhaWxzLCBwdGVudCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA1OjAyOjM1LjQwNDYxNDg5MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODMwNzIyOTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUsIG15IG1lbnRhbCBnZWFycyBhcmUgdHVybmluZy4uLlxuXG4qKkFuYWx5emluZyBQYWdlIFRhYmxlIEVudHJ5IChQVEUpIE1hbmFnZW1lbnQgRnVuY3Rpb25zKipcblxuUmlnaHQsIEknbSBmb2N1c2luZyBpbiBvbiB0aGVzZSBrZXkgZnVuY3Rpb25zOiBgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZWAsIGBndWFyZF9yZW1vdmVfcHRlX2VudHJ5YCwgYW5kIHRoYXQgcGVza3kgYHphcF9ub25wcmVzZW50X3B0ZXNgLiBOb3csIHdhaXQgYSBtaW51dGUsIHdhc24ndCBgemFwX25vbnByZXNlbnRfcHRlc2Agc3RhdGljIGlubGluZT8gVGhhdCBtZWFucyBpdCdzIHByb2JhYmx5ICpub3QqIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIGNhbGwgSSdtIGFmdGVyLCBtb3JlIGxpa2UgYSBoZWxwZXIsIHBlcmhhcHMgbGVhZGluZyBtZSBpbnN0ZWFkIHRvIGBkb196YXBfcHRlX3JhbmdlYCBvciBldmVuIGp1c3QgdGhlIHBsYWluIGB6YXBfcHRlX3JhbmdlYC4gVGltZSB0byBkb3VibGUtY2hlY2sgdGhhdCBgemFwX25vbnByZXNlbnRfcHRlc2AgYWdhaW4sIGp1c3QgdG8gYmUgc3VyZSBJJ20gbm90IG1pc3Npbmcgc29tZXRoaW5nIHN1YnRsZSBpbiBpdHMgaW1wbGVtZW50YXRpb24gdGhhdCBtaWdodCBwb2ludCB0byB0aGUgY29yZSBvcGVyYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHRoZSBhY3R1YWwgYWN0aW9ucyB0aGVzZSBmdW5jdGlvbnMgYXJlIG9yY2hlc3RyYXRpbmcuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1MTcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNTowMjozOS4yMzUzNDE0NzlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyMTkwNDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInphcF9ub25wcmVzZW50X3B0ZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtb3J5LmM9MTY4OT1zdGF0aWMgaW5saW5lIGludCB6YXBfcHJlc2VudF9wdGVzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuLS1cXG5tbS9tZW1vcnkuYy0xNzM0LVxcbm1tL21lbW9yeS5jOjE3MzU6c3RhdGljIGlubGluZSBpbnQgemFwX25vbnByZXNlbnRfcHRlcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbm1tL21lbW9yeS5jLTE3MzYtXFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHB0ZV90ICpwdGUsIHB0ZV90IHB0ZW50LFxcbi0tXFxubW0vbWVtb3J5LmM9MTgwNj1zdGF0aWMgaW5saW5lIGludCBkb196YXBfcHRlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuLS1cXG5tbS9tZW1vcnkuYy0xODM1LVxcdGVsc2VcXG5tbS9tZW1vcnkuYzoxODM2OlxcdFxcdG5yICs9IHphcF9ub25wcmVzZW50X3B0ZXModGxiLCB2bWEsIHB0ZSwgcHRlbnQsIG1heF9uciwgYWRkcixcXG5tbS9tZW1vcnkuYy0xODM3LVxcdFxcdFxcdFxcdFxcdCAgZGV0YWlscywgcnNzLCBhbnlfc2tpcHBlZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA1OjAyOjM5LjMyNzUzNjk1NloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDAxNzU5MzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIHdpdGggdGhlIGJvbGRlZCBoZWFkZXI6XG5cbioqRGl2aW5nIGludG8gdGhlIFBURSBSYW5nZSBaYXBwZXIqKlxuXG5SaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBgZG9femFwX3B0ZV9yYW5nZWAsIGFuZCBpdCdzIGZsYWdnZWQgYXMgc3RhdGljIGlubGluZSwgd2hpY2ggc3VnZ2VzdHMgYSBwZXJmb3JtYW5jZS1mb2N1c2VkIGltcGxlbWVudGF0aW9uLiBUaGF0J3MgZ29vZDsgbGlrZWx5IHRoZXJlJ3Mgc29tZSBsb3ctbGV2ZWwgb3B0aW1pemF0aW9uIGdvaW5nIG9uIGhlcmUuIENvbnNpZGVyaW5nIGl0cyBuYW1lLCBJJ20gZ3Vlc3NpbmcgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgY2xlYXJpbmcgb3IgaW52YWxpZGF0aW5nIGEgcmFuZ2Ugb2YgcGFnZSB0YWJsZSBlbnRyaWVzLiBMZXQgbWUgc2VlIHdoYXQncyBhY3R1YWxseSBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIFRpbWUgdG8gZGlnIGludG8gdGhlIGRlZmluaXRpb24gb2YgYGRvX3phcF9wdGVfcmFuZ2VgIGFuZCBzZWUgaG93IHRoaXMgaW5saW5lIGJlYXN0IG9wZXJhdGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDA3MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA1OjAyOjQyLjcyOTI5OTEyOVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5MDIwODE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRvX3phcF9wdGVfcmFuZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtb3J5LmM9MTczNT1zdGF0aWMgaW5saW5lIGludCB6YXBfbm9ucHJlc2VudF9wdGVzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuLS1cXG5tbS9tZW1vcnkuYy0xODA1LVxcbm1tL21lbW9yeS5jOjE4MDY6c3RhdGljIGlubGluZSBpbnQgZG9femFwX3B0ZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbm1tL21lbW9yeS5jLTE4MDctXFx0XFx0XFx0XFx0ICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHB0ZV90ICpwdGUsXFxuLS1cXG5tbS9tZW1vcnkuYz0xOTAwPXN0YXRpYyB1bnNpZ25lZCBsb25nIHphcF9wdGVfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG4tLVxcbm1tL21lbW9yeS5jLTE5MzMtXFxubW0vbWVtb3J5LmM6MTkzNDpcXHRcXHRuciA9IGRvX3phcF9wdGVfcmFuZ2UodGxiLCB2bWEsIHB0ZSwgYWRkciwgZW5kLCBkZXRhaWxzLCByc3MsXFxubW0vbWVtb3J5LmMtMTkzNS1cXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2Zm9yY2VfZmx1c2gsIFxcdTAwMjZmb3JjZV9icmVhaywgXFx1MDAyNmFueV9za2lwcGVkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDU6MDI6NDIuODU4MzY3NDY0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3OTg1MDQwNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgemFwX3B0ZV9yYW5nZWAqKlxuXG5Pa2F5LCBzbyBgemFwX3B0ZV9yYW5nZWAgaXNuJ3QgYW4gaW5saW5lIGZ1bmN0aW9uIOKAkyB0aGF0J3MgYSBrZXkgb2JzZXJ2YXRpb24uIFRoYXQgYWxvbmUgdGVsbHMgdXMgc29tZXRoaW5nIGFib3V0IGl0cyBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wYWN0LCBhcyBvcHBvc2VkIHRvIGEgZnVuY3Rpb24gdGhhdCBjb3VsZCBiZSBvcHRpbWl6ZWQgZGlyZWN0bHkgYnkgdGhlIGNvbXBpbGVyLiBHaXZlbiB0aGlzLCBpdCBtYWtlcyBhIGdvb2QgY2FuZGlkYXRlIGZvciBkZWVwZXIgaW52ZXN0aWdhdGlvbi4gTGV0J3MgZGlnIGludG8gYHphcF9wdGVfcmFuZ2VgIGFuZCBzZWUgZXhhY3RseSB3aGF0IGl0J3MgZG9pbmcuIFdoYXQncyBpdCBkb2luZyBhbmQgd2h5IGlzbid0IGl0IGluLWxpbmU/IExldCdzIHRyYWNlIHRocm91Z2ggaXRzIGltcGxlbWVudGF0aW9uIGFuZCBzZWUgd2hlcmUgdGhlIGhvdHNwb3RzIG1pZ2h0IGJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDUyMywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA1OjAyOjQ1LjY1Njg3NTRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODg3ODk0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6YXBfcHRlX3JhbmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbW9yeS5jPTE3MzU9c3RhdGljIGlubGluZSBpbnQgemFwX25vbnByZXNlbnRfcHRlcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbi0tXFxubW0vbWVtb3J5LmMtMTgwNS1cXG5tbS9tZW1vcnkuYzoxODA2OnN0YXRpYyBpbmxpbmUgaW50IGRvX3phcF9wdGVfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG5tbS9tZW1vcnkuYy0xODA3LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwdGVfdCAqcHRlLFxcbi0tXFxubW0vbWVtb3J5LmM9MTg2Nj1zdGF0aWMgYm9vbCB6YXBfcHRlX3RhYmxlX2lmX2VtcHR5KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLFxcbi0tXFxubW0vbWVtb3J5LmMtMTg5OS1cXG5tbS9tZW1vcnkuYzoxOTAwOnN0YXRpYyB1bnNpZ25lZCBsb25nIHphcF9wdGVfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG5tbS9tZW1vcnkuYy0xOTAxLVxcdFxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwbWRfdCAqcG1kLFxcbi0tXFxubW0vbWVtb3J5LmMtMTkzMy1cXG5tbS9tZW1vcnkuYzoxOTM0OlxcdFxcdG5yID0gZG9femFwX3B0ZV9yYW5nZSh0bGIsIHZtYSwgcHRlLCBhZGRyLCBlbmQsIGRldGFpbHMsIHJzcyxcXG5tbS9tZW1vcnkuYy0xOTM1LVxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZmb3JjZV9mbHVzaCwgXFx1MDAyNmZvcmNlX2JyZWFrLCBcXHUwMDI2YW55X3NraXBwZWQpO1xcbi0tXFxubW0vbWVtb3J5LmM9MTk5Mj1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgemFwX3BtZF9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbi0tXFxubW0vbWVtb3J5LmMtMjAxOS1cXHRcXHR9XFxubW0vbWVtb3J5LmM6MjAyMDpcXHRcXHRhZGRyID0gemFwX3B0ZV9yYW5nZSh0bGIsIHZtYSwgcG1kLCBhZGRyLCBuZXh0LCBkZXRhaWxzKTtcXG5tbS9tZW1vcnkuYy0yMDIxLVxcdFxcdGlmIChhZGRyICE9IG5leHQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA1OjAyOjQ1Ljc3NTc1ODMzNVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3Mjc5MDIxMTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2gsIGFuZCBteSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgaXQncyBnb3Qgc29tZSBpbnRlcmVzdGluZyBhbmdsZXMgZm9yIGZ1enppbmcuIGB6YXBfcHRlX3JhbmdlYCBzZWVtcyBsaWtlIGEga2V5IGZ1bmN0aW9uIHRvIHRhcmdldCDigJMgdGhhdCdzIGRlZmluaXRlbHkgYSBwbGFjZSB3aGVyZSB0aGluZ3MgY291bGQgZ2V0IGludGVyZXN0aW5nIHdpdGggcGFnZSB0YWJsZSBpbnRlcmFjdGlvbnMuIEkgYWxzbyBzZWUgdGhhdCBgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZWAgaXMgYSBzdHJvbmcgY2FuZGlkYXRlIGFuZCBgZ3VhcmRfcmVtb3ZlX3B0ZV9lbnRyeWAuIFdhaXQsIGhvbGQgb24g4oCTIGBndWFyZF9yZW1vdmVfcHRlX2VudHJ5YCBpcyBzdGF0aWMsIHdoaWNoIHNpbXBsaWZpZXMgdGhpbmdzLiBMZXNzIGdsb2JhbCBleHBvc3VyZSBpcyBnZW5lcmFsbHkgYmV0dGVyLCBidXQgdGhlcmUgbWlnaHQgYmUgaW5kaXJlY3QgaW50ZXJhY3Rpb25zLlxuXG5MZXQncyBzZWXigKYgYW55IGNvbmZpZ3VyYXRpb24gZmxhZ3MgdGhhdCBhcmUgY3J1Y2lhbCBoZXJlPyBSaWdodCwgYENPTkZJR19BRFZJU0VfU1lTQ0FMTFNgIGlzIHRoZSBvYnZpb3VzIG9uZSwgZXNwZWNpYWxseSBzaW5jZSB0aGUgcGF0Y2ggaXMgdG91Y2hpbmcgYG1hZHZpc2UuY2AgcHJldHR5IGV4dGVuc2l2ZWx5LiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzbuKAmXQgb3Zlcmx5IGFyY2hpdGVjdHVyZS1zcGVjaWZpYy4gSSBzZWUgYSBtb2RpZmljYXRpb24gdG8gYGFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oYCwgd2hpY2ggcmFpc2VzIGEgZmxhZy4gQnV0IHRoZSByZWFsIG1lYXQgb2YgdGhlIGNoYW5nZXMgaXMgaW4gdGhvc2UgY29yZSBmaWxlczogYGluY2x1ZGUvbGludXgvcGd0YWJsZS5oYCwgYG1tL21hZHZpc2UuY2AsIGFuZCBgbW0vbWVtb3J5LmNgLiBUaGUgc3BhcmMtc3BlY2lmaWMgY2hhbmdlIGp1c3QgZ2V0cyByaWQgb2YgYW4gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG92ZXJyaWRlLCBgcHRlX2NsZWFyX25vdF9wcmVzZW50X2Z1bGxgLCB3aGljaCB0aGUgZ2VuZXJpYyBjb2RlIGlzIG5vdyBoYW5kbGluZy4gU28gaXQncyBsb29raW5nIHByZXR0eSBnZW5lcmljIG92ZXJhbGwuXG5cbkFscmlnaHQsIGxldCdzIHB1bGwgYWxsIHRoaXMgdG9nZXRoZXIgaW50byBhIGNvbmNpc2Ugc3VtbWFyeS4gVGhpcyBpcyBsb29raW5nIHByb21pc2luZyBmb3IgZnV6emluZy5cblxuKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWUsIGRlZmluaXRlbHkgd29ydGggdGhlIGVmZm9ydC5cbiogICAqKkZvY3VzU3ltYm9sczoqKiBgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZWAsIGBndWFyZF9yZW1vdmVfcHRlX2VudHJ5YCwgYHphcF9wdGVfcmFuZ2VgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyBJJ20gbW9zdCBpbnRlcmVzdGVkIGluLlxuKiAgICoqRW5hYmxlQ29uZmlnczoqKiBgQURWSVNFX1NZU0NBTExTYCBpcyBlc3NlbnRpYWwuXG4qICAgKipSZWFzb25pbmc6KiogVGhlIGNoYW5nZXMgYXJlIGhhcHBlbmluZyBpbiBjcml0aWNhbCBtZW1vcnkgbWFuYWdlbWVudCByb3V0aW5lcyByZXNwb25zaWJsZSBmb3IgY2xlYXJpbmcgbm9uLXByZXNlbnQgUFRFcyBkdXJpbmcgb3BlcmF0aW9ucyBsaWtlIGBNQURWX0ZSRUVgLCBgTUFEVl9HVUFSRF9SRU1PVkVgLCBhbmQgbWVtb3J5IHVubWFwcGluZy4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBzeXN0ZW0gY2FsbHMsIG1lYW5pbmcgd2UgY2FuIHRyaWdnZXIgY29tcGxleCBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbnMsIG9wZW5pbmcgYSBwb3RlbnRpYWwgZm9yIHZ1bG5lcmFiaWxpdGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxNTEsIk91dHB1dFRva2VucyI6MTE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA1OjAyOjUzLjA1NDc4MjMyNFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMzk0ODM2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQURWSVNFX1NZU0NBTExTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWFkdmlzZV9mcmVlX3B0ZV9yYW5nZVwiLFxuICAgIFwiZ3VhcmRfcmVtb3ZlX3B0ZV9lbnRyeVwiLFxuICAgIFwiemFwX3B0ZV9yYW5nZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zIHJlc3BvbnNpYmxlIGZvciBjbGVhcmluZyBub24tcHJlc2VudCBQVEVzIGR1cmluZyBvcGVyYXRpb25zIGxpa2UgTUFEVl9GUkVFLCBNQURWX0dVQVJEX1JFTU9WRSwgYW5kIHVubWFwcGluZyBtZW1vcnkuIFRoZXNlIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGFuZCBjYW4gdHJpZ2dlciBjb21wbGV4IHBhZ2UgdGFibGUgbWFuaXB1bGF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRFZJU0VfU1lTQ0FMTFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYWR2aXNlX2ZyZWVfcHRlX3JhbmdlXCIsXG4gICAgXCJndWFyZF9yZW1vdmVfcHRlX2VudHJ5XCIsXG4gICAgXCJ6YXBfcHRlX3JhbmdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIGNsZWFyaW5nIG5vbi1wcmVzZW50IFBURXMgZHVyaW5nIG9wZXJhdGlvbnMgbGlrZSBNQURWX0ZSRUUsIE1BRFZfR1VBUkRfUkVNT1ZFLCBhbmQgdW5tYXBwaW5nIG1lbW9yeS4gVGhlc2UgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYW5kIGNhbiB0cmlnZ2VyIGNvbXBsZXggcGFnZSB0YWJsZSBtYW5pcHVsYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowhv2hs[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-02 04:48:20 +0000 UTC FinishedAt: 2026-07-02 05:02:54 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "665159e246749578d4e4bfe106ee3b74edcdab18", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ADVISE_SYSCALLS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "665159e246749578d4e4bfe106ee3b74edcdab18", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ADVISE_SYSCALLS" ], "series_id": "6435682e-4e6b-4d72-b92f-8d65599f8ee4" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "madvise_free_pte_range", "guard_remove_pte_entry", "zap_pte_range" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA1OjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FEVklTRV9TWVNDQUxMUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21hZHZpc2VfZnJlZV9wdGVfcmFuZ2UmIzM0OywKICAgICYjMzQ7Z3VhcmRfcmVtb3ZlX3B0ZV9lbnRyeSYjMzQ7LAogICAgJiMzNDt6YXBfcHRlX3JhbmdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zIHJlc3BvbnNpYmxlIGZvciBjbGVhcmluZyBub24tcHJlc2VudCBQVEVzIGR1cmluZyBvcGVyYXRpb25zIGxpa2UgTUFEVl9GUkVFLCBNQURWX0dVQVJEX1JFTU9WRSwgYW5kIHVubWFwcGluZyBtZW1vcnkuIFRoZXNlIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGFuZCBjYW4gdHJpZ2dlciBjb21wbGV4IHBhZ2UgdGFibGUgbWFuaXB1bGF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNTowMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGMxMDcyZWNlYTRiZGZmMWU3MTkyYWUzODQyOTQ3Yzk5YmE0YTliMzFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAyIDA1OjAxOjM5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0LmhcbmluZGV4IDc0ZWRlNzA2ZmIzMjVkLi4wODM3ZWJiYzVkY2U2MyAxMDA2NDRcbi0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaFxuQEAgLTk0NSwxMCAmIzQzOzk0NSw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuICNkZWZpbmUgcHRlX2NsZWFyKG1tLGFkZHIscHRlcClcdFx0XFxcbiBcdHNldF9wdGVfYXQoKG1tKSwgKGFkZHIpLCAocHRlcCksIF9fcHRlKDBVTCkpXG4gXG4tI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVfQ0xFQVJfTk9UX1BSRVNFTlRfRlVMTFxuLSNkZWZpbmUgcHRlX2NsZWFyX25vdF9wcmVzZW50X2Z1bGwobW0sYWRkcixwdGVwLGZ1bGxtbSlcdFxcXG4tXHRfX3NldF9wdGVfYXQoKG1tKSwgKGFkZHIpLCAocHRlcCksIF9fcHRlKDBVTCksIChmdWxsbW0pKVxuLVxuICNpZmRlZiBEQ0FDSEVfQUxJQVNJTkdfUE9TU0lCTEVcbiAjZGVmaW5lIF9fSEFWRV9BUkNIX01PVkVfUFRFXG4gI2RlZmluZSBtb3ZlX3B0ZShwdGUsIG9sZF9hZGRyLCBuZXdfYWRkcilcdFx0XHRcdFxcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmggYi9pbmNsdWRlL2xpbnV4L3BndGFibGUuaFxuaW5kZXggMjk4MWUzODZkYTdiM2MuLjY1NTFmNDVhODU0MGMxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXG5AQCAtOTg4LDQ5ICYjNDM7OTg4LDMwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfbW11X3RsYihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdHVwZGF0ZV9tbXVfdGxiX3JhbmdlKHZtYSwgYWRkcmVzcywgcHRlcCwgMSk7XG4gfVxuIFxuLS8qXG4tICogU29tZSBhcmNoaXRlY3R1cmVzIG1heSBiZSBhYmxlIHRvIGF2b2lkIGV4cGVuc2l2ZSBzeW5jaHJvbml6YXRpb25cbi0gKiBwcmltaXRpdmVzIHdoZW4gbW9kaWZpY2F0aW9ucyBhcmUgbWFkZSB0byBQVEUmIzM5O3Mgd2hpY2ggYXJlIGFscmVhZHlcbi0gKiBub3QgcHJlc2VudCwgb3IgaW4gdGhlIHByb2Nlc3Mgb2YgYW4gYWRkcmVzcyBzcGFjZSBkZXN0cnVjdGlvbi5cbi0gKi9cbi0jaWZuZGVmIF9fSEFWRV9BUkNIX1BURV9DTEVBUl9OT1RfUFJFU0VOVF9GVUxMXG4tc3RhdGljIGlubGluZSB2b2lkIHB0ZV9jbGVhcl9ub3RfcHJlc2VudF9mdWxsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLVx0XHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4tXHRcdFx0XHRcdCAgICAgIHB0ZV90ICpwdGVwLFxuLVx0XHRcdFx0XHQgICAgICBpbnQgZnVsbClcbi17XG4tXHRwdGVfY2xlYXIobW0sIGFkZHJlc3MsIHB0ZXApO1xuLX1cbi0jZW5kaWZcbi1cbi0jaWZuZGVmIGNsZWFyX25vdF9wcmVzZW50X2Z1bGxfcHRlc1xuIC8qKlxuLSAqIGNsZWFyX25vdF9wcmVzZW50X2Z1bGxfcHRlcyAtIENsZWFyIG11bHRpcGxlIG5vdCBwcmVzZW50IFBURXMgd2hpY2ggYXJlXG4tICpcdFx0XHRcdCBjb25zZWN1dGl2ZSBpbiB0aGUgcGd0YWJsZS5cbiYjNDM7ICogY2xlYXJfbm9ucHJlc2VudF9wdGVzIC0gQ2xlYXIgbXVsdGlwbGUgbm9uLXByZXNlbnQgUFRFcyB3aGljaCBhcmVcbiYjNDM7ICpcdFx0XHQgICAgY29uc2VjdXRpdmUgaW4gdGhlIHBndGFibGUuXG4gICogQG1tOiBBZGRyZXNzIHNwYWNlIHRoZSBwdGVzIHJlcHJlc2VudC5cbiAgKiBAYWRkcjogQWRkcmVzcyBvZiB0aGUgZmlyc3QgcHRlLlxuICAqIEBwdGVwOiBQYWdlIHRhYmxlIHBvaW50ZXIgZm9yIHRoZSBmaXJzdCBlbnRyeS5cbiAgKiBAbnI6IE51bWJlciBvZiBlbnRyaWVzIHRvIGNsZWFyLlxuLSAqIEBmdWxsOiBXaGV0aGVyIHdlIGFyZSBjbGVhcmluZyBhIGZ1bGwgbW0uXG4tICpcbi0gKiBNYXkgYmUgb3ZlcnJpZGRlbiBieSB0aGUgYXJjaGl0ZWN0dXJlOyBvdGhlcndpc2UsIGltcGxlbWVudGVkIGFzIGEgc2ltcGxlXG4tICogbG9vcCBvdmVyIHB0ZV9jbGVhcl9ub3RfcHJlc2VudF9mdWxsKCkuXG4gICpcbiAgKiBDb250ZXh0OiBUaGUgY2FsbGVyIGhvbGRzIHRoZSBwYWdlIHRhYmxlIGxvY2suICBUaGUgUFRFcyBhcmUgYWxsIG5vdCBwcmVzZW50LlxuICAqIFRoZSBQVEVzIGFyZSBhbGwgaW4gdGhlIHNhbWUgUE1ELlxuICAqL1xuLXN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9ub3RfcHJlc2VudF9mdWxsX3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGludCBuciwgaW50IGZ1bGwpXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9ub25wcmVzZW50X3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCB1bnNpZ25lZCBpbnQgbnIpXG4ge1xuJiM0MztcdCh2b2lkKWFkZHI7XG4mIzQzO1xuIFx0Zm9yICg7Oykge1xuLVx0XHRwdGVfY2xlYXJfbm90X3ByZXNlbnRfZnVsbChtbSwgYWRkciwgcHRlcCwgZnVsbCk7XG4mIzQzO1x0XHRwdGVfY2xlYXIobW0sIGFkZHIsIHB0ZXApO1xuIFx0XHRpZiAoLS1uciA9PSAwKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRwdGVwJiM0MzsmIzQzOztcbiBcdFx0YWRkciAmIzQzOz0gUEFHRV9TSVpFO1xuIFx0fVxuIH1cbi0jZW5kaWZcbiBcbiAjaWZuZGVmIF9fSEFWRV9BUkNIX1BURVBfQ0xFQVJfRkxVU0hcbiBleHRlcm4gcHRlX3QgcHRlcF9jbGVhcl9mbHVzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmRpZmYgLS1naXQgYS9tbS9tYWR2aXNlLmMgYi9tbS9tYWR2aXNlLmNcbmluZGV4IGNkOWJiMDc3MDcyY2NiLi4zZGIxNDNjNDQyZWFhYSAxMDA2NDRcbi0tLSBhL21tL21hZHZpc2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWFkdmlzZS5jXG5AQCAtNjk1LDEwICYjNDM7Njk1LDEwIEBAIHN0YXRpYyBpbnQgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0XHRuciA9IHN3YXBfcHRlX2JhdGNoKHB0ZSwgbWF4X25yLCBwdGVudCk7XG4gXHRcdFx0XHRucl9zd2FwIC09IG5yO1xuIFx0XHRcdFx0c3dhcF9wdXRfZW50cmllc19kaXJlY3QoZW50cnksIG5yKTtcbi1cdFx0XHRcdGNsZWFyX25vdF9wcmVzZW50X2Z1bGxfcHRlcyhtbSwgYWRkciwgcHRlLCBuciwgdGxiLVx1MDAzZWZ1bGxtbSk7XG4mIzQzO1x0XHRcdFx0Y2xlYXJfbm9ucHJlc2VudF9wdGVzKG1tLCBhZGRyLCBwdGUsIG5yKTtcbiBcdFx0XHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2h3cG9pc29uKGVudHJ5KSB8fFxuIFx0XHRcdFx0ICAgc29mdGxlYWZfaXNfcG9pc29uX21hcmtlcihlbnRyeSkpIHtcbi1cdFx0XHRcdHB0ZV9jbGVhcl9ub3RfcHJlc2VudF9mdWxsKG1tLCBhZGRyLCBwdGUsIHRsYi1cdTAwM2VmdWxsbW0pO1xuJiM0MztcdFx0XHRcdHB0ZV9jbGVhcihtbSwgYWRkciwgcHRlKTtcbiBcdFx0XHR9XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbkBAIC0xMjM0LDcgJiM0MzsxMjM0LDcgQEAgc3RhdGljIGludCBndWFyZF9yZW1vdmVfcHRlX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcbiBcdGlmIChpc19ndWFyZF9wdGVfbWFya2VyKHB0ZW50KSkge1xuIFx0XHQvKiBTaW1wbHkgY2xlYXIgdGhlIFBURSBtYXJrZXIuICovXG4tXHRcdHB0ZV9jbGVhcl9ub3RfcHJlc2VudF9mdWxsKHdhbGstXHUwMDNlbW0sIGFkZHIsIHB0ZSwgZmFsc2UpO1xuJiM0MztcdFx0cHRlX2NsZWFyKHdhbGstXHUwMDNlbW0sIGFkZHIsIHB0ZSk7XG4gXHRcdHVwZGF0ZV9tbXVfY2FjaGUod2Fsay1cdTAwM2V2bWEsIGFkZHIsIHB0ZSk7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggZmYzMzhjMmFiZTkyMzEuLmEzZmNhZjhjZmU4ZjhiIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jXG5AQCAtMTc5Nyw3ICYjNDM7MTc5Nyw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHphcF9ub25wcmVzZW50X3B0ZXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbiBcdFx0cHJfYWxlcnQoXCYjMzQ7dW5yZWNvZ25pemVkIHN3YXAgZW50cnkgMHglbHhcXG5cJiMzNDssIGVudHJ5LnZhbCk7XG4gXHRcdFdBUk5fT05fT05DRSgxKTtcbiBcdH1cbi1cdGNsZWFyX25vdF9wcmVzZW50X2Z1bGxfcHRlcyh2bWEtXHUwMDNldm1fbW0sIGFkZHIsIHB0ZSwgbnIsIHRsYi1cdTAwM2VmdWxsbW0pO1xuJiM0MztcdGNsZWFyX25vbnByZXNlbnRfcHRlcyh2bWEtXHUwMDNldm1fbW0sIGFkZHIsIHB0ZSwgbnIpO1xuIFx0KmFueV9za2lwcGVkID0gemFwX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQodm1hLCBhZGRyLCBwdGUsIG5yLCBkZXRhaWxzLCBwdGVudCk7XG4gXG4gXHRyZXR1cm4gbnI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDU6MDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QURWSVNFX1NZU0NBTExTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFkdmlzZV9mcmVlX3B0ZV9yYW5nZSYjMzQ7LAogICAgJiMzNDtndWFyZF9yZW1vdmVfcHRlX2VudHJ5JiMzNDssCiAgICAmIzM0O3phcF9wdGVfcmFuZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIGNsZWFyaW5nIG5vbi1wcmVzZW50IFBURXMgZHVyaW5nIG9wZXJhdGlvbnMgbGlrZSBNQURWX0ZSRUUsIE1BRFZfR1VBUkRfUkVNT1ZFLCBhbmQgdW5tYXBwaW5nIG1lbW9yeS4gVGhlc2UgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYW5kIGNhbiB0cmlnZ2VyIGNvbXBsZXggcGFnZSB0YWJsZSBtYW5pcHVsYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjMTA3MmVjZWE0YmRmZjFlNzE5MmFlMzg0Mjk0N2M5OWJhNGE5YjMxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMiAwNTowMTozOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0LmgKaW5kZXggNzRlZGU3MDZmYjMyNWQuLjA4MzdlYmJjNWRjZTYzIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaApAQCAtOTQ1LDEwICYjNDM7OTQ1LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAjZGVmaW5lIHB0ZV9jbGVhcihtbSxhZGRyLHB0ZXApCQlcCiAJc2V0X3B0ZV9hdCgobW0pLCAoYWRkciksIChwdGVwKSwgX19wdGUoMFVMKSkKIAotI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVfQ0xFQVJfTk9UX1BSRVNFTlRfRlVMTAotI2RlZmluZSBwdGVfY2xlYXJfbm90X3ByZXNlbnRfZnVsbChtbSxhZGRyLHB0ZXAsZnVsbG1tKQlcCi0JX19zZXRfcHRlX2F0KChtbSksIChhZGRyKSwgKHB0ZXApLCBfX3B0ZSgwVUwpLCAoZnVsbG1tKSkKLQogI2lmZGVmIERDQUNIRV9BTElBU0lOR19QT1NTSUJMRQogI2RlZmluZSBfX0hBVkVfQVJDSF9NT1ZFX1BURQogI2RlZmluZSBtb3ZlX3B0ZShwdGUsIG9sZF9hZGRyLCBuZXdfYWRkcikJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmggYi9pbmNsdWRlL2xpbnV4L3BndGFibGUuaAppbmRleCAyOTgxZTM4NmRhN2IzYy4uNjU1MWY0NWE4NTQwYzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oCkBAIC05ODgsNDkgJiM0Mzs5ODgsMzAgQEAgc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9tbXVfdGxiKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCXVwZGF0ZV9tbXVfdGxiX3JhbmdlKHZtYSwgYWRkcmVzcywgcHRlcCwgMSk7CiB9CiAKLS8qCi0gKiBTb21lIGFyY2hpdGVjdHVyZXMgbWF5IGJlIGFibGUgdG8gYXZvaWQgZXhwZW5zaXZlIHN5bmNocm9uaXphdGlvbgotICogcHJpbWl0aXZlcyB3aGVuIG1vZGlmaWNhdGlvbnMgYXJlIG1hZGUgdG8gUFRFJiMzOTtzIHdoaWNoIGFyZSBhbHJlYWR5Ci0gKiBub3QgcHJlc2VudCwgb3IgaW4gdGhlIHByb2Nlc3Mgb2YgYW4gYWRkcmVzcyBzcGFjZSBkZXN0cnVjdGlvbi4KLSAqLwotI2lmbmRlZiBfX0hBVkVfQVJDSF9QVEVfQ0xFQVJfTk9UX1BSRVNFTlRfRlVMTAotc3RhdGljIGlubGluZSB2b2lkIHB0ZV9jbGVhcl9ub3RfcHJlc2VudF9mdWxsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCi0JCQkJCSAgICAgIHB0ZV90ICpwdGVwLAotCQkJCQkgICAgICBpbnQgZnVsbCkKLXsKLQlwdGVfY2xlYXIobW0sIGFkZHJlc3MsIHB0ZXApOwotfQotI2VuZGlmCi0KLSNpZm5kZWYgY2xlYXJfbm90X3ByZXNlbnRfZnVsbF9wdGVzCiAvKioKLSAqIGNsZWFyX25vdF9wcmVzZW50X2Z1bGxfcHRlcyAtIENsZWFyIG11bHRpcGxlIG5vdCBwcmVzZW50IFBURXMgd2hpY2ggYXJlCi0gKgkJCQkgY29uc2VjdXRpdmUgaW4gdGhlIHBndGFibGUuCiYjNDM7ICogY2xlYXJfbm9ucHJlc2VudF9wdGVzIC0gQ2xlYXIgbXVsdGlwbGUgbm9uLXByZXNlbnQgUFRFcyB3aGljaCBhcmUKJiM0MzsgKgkJCSAgICBjb25zZWN1dGl2ZSBpbiB0aGUgcGd0YWJsZS4KICAqIEBtbTogQWRkcmVzcyBzcGFjZSB0aGUgcHRlcyByZXByZXNlbnQuCiAgKiBAYWRkcjogQWRkcmVzcyBvZiB0aGUgZmlyc3QgcHRlLgogICogQHB0ZXA6IFBhZ2UgdGFibGUgcG9pbnRlciBmb3IgdGhlIGZpcnN0IGVudHJ5LgogICogQG5yOiBOdW1iZXIgb2YgZW50cmllcyB0byBjbGVhci4KLSAqIEBmdWxsOiBXaGV0aGVyIHdlIGFyZSBjbGVhcmluZyBhIGZ1bGwgbW0uCi0gKgotICogTWF5IGJlIG92ZXJyaWRkZW4gYnkgdGhlIGFyY2hpdGVjdHVyZTsgb3RoZXJ3aXNlLCBpbXBsZW1lbnRlZCBhcyBhIHNpbXBsZQotICogbG9vcCBvdmVyIHB0ZV9jbGVhcl9ub3RfcHJlc2VudF9mdWxsKCkuCiAgKgogICogQ29udGV4dDogVGhlIGNhbGxlciBob2xkcyB0aGUgcGFnZSB0YWJsZSBsb2NrLiAgVGhlIFBURXMgYXJlIGFsbCBub3QgcHJlc2VudC4KICAqIFRoZSBQVEVzIGFyZSBhbGwgaW4gdGhlIHNhbWUgUE1ELgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfbm90X3ByZXNlbnRfZnVsbF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotCQl1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCB1bnNpZ25lZCBpbnQgbnIsIGludCBmdWxsKQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9ub25wcmVzZW50X3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiYjNDM7CQl1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCB1bnNpZ25lZCBpbnQgbnIpCiB7CiYjNDM7CSh2b2lkKWFkZHI7CiYjNDM7CiAJZm9yICg7OykgewotCQlwdGVfY2xlYXJfbm90X3ByZXNlbnRfZnVsbChtbSwgYWRkciwgcHRlcCwgZnVsbCk7CiYjNDM7CQlwdGVfY2xlYXIobW0sIGFkZHIsIHB0ZXApOwogCQlpZiAoLS1uciA9PSAwKQogCQkJYnJlYWs7CiAJCXB0ZXAmIzQzOyYjNDM7OwogCQlhZGRyICYjNDM7PSBQQUdFX1NJWkU7CiAJfQogfQotI2VuZGlmCiAKICNpZm5kZWYgX19IQVZFX0FSQ0hfUFRFUF9DTEVBUl9GTFVTSAogZXh0ZXJuIHB0ZV90IHB0ZXBfY2xlYXJfZmx1c2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCmRpZmYgLS1naXQgYS9tbS9tYWR2aXNlLmMgYi9tbS9tYWR2aXNlLmMKaW5kZXggY2Q5YmIwNzcwNzJjY2IuLjNkYjE0M2M0NDJlYWFhIDEwMDY0NAotLS0gYS9tbS9tYWR2aXNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWFkdmlzZS5jCkBAIC02OTUsMTAgJiM0Mzs2OTUsMTAgQEAgc3RhdGljIGludCBtYWR2aXNlX2ZyZWVfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCQluciA9IHN3YXBfcHRlX2JhdGNoKHB0ZSwgbWF4X25yLCBwdGVudCk7CiAJCQkJbnJfc3dhcCAtPSBucjsKIAkJCQlzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdChlbnRyeSwgbnIpOwotCQkJCWNsZWFyX25vdF9wcmVzZW50X2Z1bGxfcHRlcyhtbSwgYWRkciwgcHRlLCBuciwgdGxiLSZndDtmdWxsbW0pOwomIzQzOwkJCQljbGVhcl9ub25wcmVzZW50X3B0ZXMobW0sIGFkZHIsIHB0ZSwgbnIpOwogCQkJfSBlbHNlIGlmIChzb2Z0bGVhZl9pc19od3BvaXNvbihlbnRyeSkgfHwKIAkJCQkgICBzb2Z0bGVhZl9pc19wb2lzb25fbWFya2VyKGVudHJ5KSkgewotCQkJCXB0ZV9jbGVhcl9ub3RfcHJlc2VudF9mdWxsKG1tLCBhZGRyLCBwdGUsIHRsYi0mZ3Q7ZnVsbG1tKTsKJiM0MzsJCQkJcHRlX2NsZWFyKG1tLCBhZGRyLCBwdGUpOwogCQkJfQogCQkJY29udGludWU7CiAJCX0KQEAgLTEyMzQsNyAmIzQzOzEyMzQsNyBAQCBzdGF0aWMgaW50IGd1YXJkX3JlbW92ZV9wdGVfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCiAJaWYgKGlzX2d1YXJkX3B0ZV9tYXJrZXIocHRlbnQpKSB7CiAJCS8qIFNpbXBseSBjbGVhciB0aGUgUFRFIG1hcmtlci4gKi8KLQkJcHRlX2NsZWFyX25vdF9wcmVzZW50X2Z1bGwod2Fsay0mZ3Q7bW0sIGFkZHIsIHB0ZSwgZmFsc2UpOwomIzQzOwkJcHRlX2NsZWFyKHdhbGstJmd0O21tLCBhZGRyLCBwdGUpOwogCQl1cGRhdGVfbW11X2NhY2hlKHdhbGstJmd0O3ZtYSwgYWRkciwgcHRlKTsKIAl9CiAKZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmMKaW5kZXggZmYzMzhjMmFiZTkyMzEuLmEzZmNhZjhjZmU4ZjhiIDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuYwpAQCAtMTc5Nyw3ICYjNDM7MTc5Nyw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHphcF9ub25wcmVzZW50X3B0ZXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwKIAkJcHJfYWxlcnQoJiMzNDt1bnJlY29nbml6ZWQgc3dhcCBlbnRyeSAweCVseFxuJiMzNDssIGVudHJ5LnZhbCk7CiAJCVdBUk5fT05fT05DRSgxKTsKIAl9Ci0JY2xlYXJfbm90X3ByZXNlbnRfZnVsbF9wdGVzKHZtYS0mZ3Q7dm1fbW0sIGFkZHIsIHB0ZSwgbnIsIHRsYi0mZ3Q7ZnVsbG1tKTsKJiM0MzsJY2xlYXJfbm9ucHJlc2VudF9wdGVzKHZtYS0mZ3Q7dm1fbW0sIGFkZHIsIHB0ZSwgbnIpOwogCSphbnlfc2tpcHBlZCA9IHphcF9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkKHZtYSwgYWRkciwgcHRlLCBuciwgZGV0YWlscywgcHRlbnQpOwogCiAJcmV0dXJuIG5yOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzQ1CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gc29tZSBwcmV0dHkgZnVuZGFtZW50YWwgc3R1ZmYg4oCTIHBhZ2UgdGFibGUgbWFuaXB1bGF0aW9uLCBzcGVjaWZpY2FsbHkuIEl0JiMzOTtzIHRvdWNoaW5nIGBhcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaGAsIGBpbmNsdWRlL2xpbnV4L3BndGFibGUuaGAsIGBtbS9tYWR2aXNlLmNgLCBhbmQgYG1tL21lbW9yeS5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIHJlbW92aW5nIGBwdGVfY2xlYXJfbm90X3ByZXNlbnRfZnVsbGAgYW5kIGBjbGVhcl9ub3RfcHJlc2VudF9mdWxsX3B0ZXNgIGFuZCByZXBsYWNpbmcgdGhlbSB3aXRoIHRoZSBuZXcgZnVuY3Rpb25zIGBjbGVhcl9ub25wcmVzZW50X3B0ZXNgIGFuZCBgcHRlX2NsZWFyYC4gVGhhdCYjMzk7cyBhIGRlZmluaXRlIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgbm9uLXByZXNlbnQgcGFnZSB0YWJsZSBlbnRyaWVzLgoKVGhpcyBoYXMgZG93bnN0cmVhbSBpbXBhY3RzIG9uIGEgZmV3IGtleSBhcmVhczogYG1hZHZpc2VfZnJlZV9wdGVfcmFuZ2VgLCBgZ3VhcmRfcmVtb3ZlX3B0ZV9lbnRyeWAsIGFuZCBgemFwX25vbnByZXNlbnRfcHRlc2AuIEkgc2hvdWxkIGNvbmZpcm0gaWYgYW55IHBhcnRpY3VsYXIga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSByZWxldmFudCBoZXJlLiBMZXQmIzM5O3Mgc2VlLi4uIGBtYWR2aXNlX2ZyZWVfcHRlX3JhbmdlYCBpcyBpbiBgbW0vbWFkdmlzZS5jYCwgc28gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBgbW0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gaWYgaXQmIzM5O3MgYWx3YXlzIGNvbXBpbGVkIGluLCBvciBpZiBpdCBkZXBlbmRzIG9uIGBDT05GSUdfQURWSVNFX1NZU0NBTExTYCBvciBzb21ldGhpbmcgc2ltaWxhci4gSXQgY291bGQgYmUuIEFuZCBgZ3VhcmRfcmVtb3ZlX3B0ZV9lbnRyeWAgaXMgYWxzbyBpbiBgbW0vbWFkdmlzZS5jYCwgYW5kIGB6YXBfbm9ucHJlc2VudF9wdGVzYCBpcyBpbiBgbW0vbWVtb3J5LmNgLgoKT2theSwgSSYjMzk7bGwgZG8gYSBxdWljayBgZ3JlcGAgZm9yIGBtYWR2aXNlX2ZyZWVfcHRlX3JhbmdlYCBhbmQgYHphcF9ub25wcmVzZW50X3B0ZXNgIHRocm91Z2ggdGhlIHNvdXJjZSB0cmVlIHRvIGJlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBvYnZpb3VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA1OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hZHZpc2VfZnJlZV9wdGVfcmFuZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jPTYyNz1zdGF0aWMgbG9uZyBtYWR2aXNlX3BhZ2VvdXQoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTY1Mi1cbm1tL21hZHZpc2UuYzo2NTM6c3RhdGljIGludCBtYWR2aXNlX2ZyZWVfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL21hZHZpc2UuYy02NTQtXHRcdFx0XHR1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IG1tX3dhbGsgKndhbGspXG4tLVxubW0vbWFkdmlzZS5jPTgwMD1zdGF0aWMgaW50IG1hZHZpc2VfZnJlZV9zaW5nbGVfdm1hKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy04MDktXHRzdHJ1Y3QgbW1fd2Fsa19vcHMgd2Fsa19vcHMgPSB7XG5tbS9tYWR2aXNlLmM6ODEwOlx0XHQucG1kX2VudHJ5XHRcdD0gbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZSxcbm1tL21hZHZpc2UuYy04MTEtXHR9O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA1OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNDgKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgYW5kIHN1bW1hcml6aW5nIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIENvZGViYXNlOiBBIEZvY3VzZWQgQ2hlY2sqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGEgc3BlY2lmaWMgZnVuY3Rpb24gb3IgbW9kdWxlOiBgemFwX25vbnByZXNlbnRfcHRlc2AuIFRoaXMgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBvciBvdXRkYXRlZCBlbnRyaWVzIOKAkyBwcm9iYWJseSBzb21ldGhpbmcgcmVsYXRlZCB0byBQVEVzIChwYWdlIHRhYmxlIGVudHJpZXMpIGdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbi4gVGhlICYjMzQ7emFwJiMzNDsgcHJlZml4IHR5cGljYWxseSBzaWduYWxzIGRlbGV0aW9uIG9yIGludmFsaWRhdGlvbi4gVGhlIHBocmFzZSAmIzM0O25vbnByZXNlbnQmIzM0OyBzdWdnZXN0cyB0aGVzZSBhcmUgZW50cmllcyB0aGF0ICpzaG91bGRuJiMzOTt0KiBiZSB2YWxpZCBhbnkgbG9uZ2VyLiBTbywgdGhpcyBjb21tYW5kIHdpbGwgbGlrZWx5IGJlIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIHBlcmhhcHMgY2xlYW5pbmcgdXAgc3RhbGUgZW50cmllcyB0aGF0IGFyZSBubyBsb25nZXIgYXNzb2NpYXRlZCB3aXRoIGFjdGl2ZSBwYWdlcy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBjb25maXJtaW5nIHdoYXQgaXQgYWN0dWFsbHkgKmRvZXMqIGJ5IGV4YW1pbmluZyB0aGUgaW1wbGVtZW50YXRpb24gYW5kIHRoZW4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Igd2hlcmUgaXQgaXMgY2FsbGVkIGluIG15IHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6YXBfbm9ucHJlc2VudF9wdGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbW9yeS5jPTE2ODk9c3RhdGljIGlubGluZSBpbnQgemFwX3ByZXNlbnRfcHRlcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuLS1cbm1tL21lbW9yeS5jLTE3MzQtXG5tbS9tZW1vcnkuYzoxNzM1OnN0YXRpYyBpbmxpbmUgaW50IHphcF9ub25wcmVzZW50X3B0ZXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbm1tL21lbW9yeS5jLTE3MzYtXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwdGVfdCAqcHRlLCBwdGVfdCBwdGVudCxcbi0tXG5tbS9tZW1vcnkuYz0xODA2PXN0YXRpYyBpbmxpbmUgaW50IGRvX3phcF9wdGVfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbi0tXG5tbS9tZW1vcnkuYy0xODM1LVx0ZWxzZVxubW0vbWVtb3J5LmM6MTgzNjpcdFx0bnIgJiM0Mzs9IHphcF9ub25wcmVzZW50X3B0ZXModGxiLCB2bWEsIHB0ZSwgcHRlbnQsIG1heF9uciwgYWRkcixcbm1tL21lbW9yeS5jLTE4MzctXHRcdFx0XHRcdCAgZGV0YWlscywgcnNzLCBhbnlfc2tpcHBlZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDU6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcxNwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogTWVtb3J5IE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7dmUgcGlucG9pbnRlZCBzb21lIGNydWNpYWwgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBoZXJlIOKAkyBkZWZpbml0ZWx5IHdvcnRoIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbi4gVGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IGFyZSBzY3JlYW1pbmcgZm9yIGF0dGVudGlvbiBhcmUgYG1hZHZpc2VfZnJlZV9wdGVfcmFuZ2VgLCBgZ3VhcmRfcmVtb3ZlX3B0ZV9lbnRyeWAsIGFuZCBgemFwX25vbnByZXNlbnRfcHRlc2AuIFdhaXQgYSBtaW51dGUsIGB6YXBfbm9ucHJlc2VudF9wdGVzYCBpcyBhbiBpbmxpbmUgZnVuY3Rpb24sIGJ1dCBpdCYjMzk7cyBpbmRpcmVjdGx5IGNhbGxlZCB0aHJvdWdoIGEgc2VyaWVzIG9mIG90aGVyIGZ1bmN0aW9ucyBsaWtlIGBkb196YXBfcHRlX3JhbmdlYCwgYHphcF9wdGVfcmFuZ2VgLCBhbmQgdWx0aW1hdGVseSwgYHVubWFwX3BhZ2VfcmFuZ2VgLiBNYWtlcyBzZW5zZSwgdGhlIGNhbGwgY2hhaW4gaXMgcmVsZXZhbnQuCgpgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZWAsIEkgcmVjYWxsLCBpcyBwYXJ0IG9mIGBtbV93YWxrX29wc2AsIHRoYXQmIzM5O3MgYW4gaW50ZXJlc3RpbmcgaG9vayBwb2ludCBmb3IgbWVtb3J5IHJlY2xhaW0gc2NlbmFyaW9zLiBgZ3VhcmRfcmVtb3ZlX3B0ZV9lbnRyeWAgYWxzbyByZXNpZGVzIGluIGBtbS9tYWR2aXNlLmNgLiBPa2F5LCBsZXQmIzM5O3MgdHJhY2UgaXRzIGNhbGwgZ3JhcGggYW5kIHNlZSBleGFjdGx5IHdoZXJlIGl0JiMzOTtzIGJlaW5nIGludm9rZWQuIFRoYXQgZ2l2ZXMgbWUgYSBoYW5kbGUgb24gdGhlIHZhcmlvdXMgZXhlY3V0aW9uIHBhdGhzIHRocm91Z2ggdGhlIGtlcm5lbC4gVGhpcyBzaG91bGQgcHJvdmlkZSBtZSB3aXRoIHRoZSBzcGVjaWZpYyBpbnRlcmZhY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA1OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2d1YXJkX3JlbW92ZV9wdGVfZW50cnkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jPTEyMTg9c3RhdGljIGludCBndWFyZF9yZW1vdmVfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9tYWR2aXNlLmMtMTIyOS1cbm1tL21hZHZpc2UuYzoxMjMwOnN0YXRpYyBpbnQgZ3VhcmRfcmVtb3ZlX3B0ZV9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5tbS9tYWR2aXNlLmMtMTIzMS1cdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBuZXh0LCBzdHJ1Y3QgbW1fd2FsayAqd2Fsaylcbi0tXG5tbS9tYWR2aXNlLmM9MTI0ND1zdGF0aWMgbG9uZyBtYWR2aXNlX2d1YXJkX3JlbW92ZShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTI1MC1cdFx0LnBtZF9lbnRyeSA9IGd1YXJkX3JlbW92ZV9wbWRfZW50cnksXG5tbS9tYWR2aXNlLmM6MTI1MTpcdFx0LnB0ZV9lbnRyeSA9IGd1YXJkX3JlbW92ZV9wdGVfZW50cnksXG5tbS9tYWR2aXNlLmMtMTI1Mi1cdFx0LndhbGtfbG9jayA9IGdldF93YWxrX2xvY2sobWFkdl9iZWhhdmlvci1cdTAwM2Vsb2NrX21vZGUpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA1OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzOTkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGl0OgoKKipBbmFseXppbmcgYG1hZHZpc2VgIGFuZCBNZW1vcnkgUmVjbGFtYXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGVudHJ5IHBvaW50cyBmb3IgaGFuZGxpbmcgbWVtb3J5IHJlY2xhbWF0aW9uIHRocm91Z2ggYG1hZHZpc2VgLiBUaGUgY3JpdGljYWwgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgaGVyZSBzZWVtIHRvIGJlIGBtYWR2aXNlX2d1YXJkX3JlbW92ZWAgYW5kIGBtYWR2aXNlX2ZyZWVfc2luZ2xlX3ZtYWAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIG1hZ2ljIHN0YXJ0cy4KClRoZXNlIHNob3VsZCBjb3JyZXNwb25kIGRpcmVjdGx5IHRvIHRoZSBgTUFEVl9GUkVFYCBhbmQgYE1BRFZfR1VBUkRfUkVNT1ZFYCBvcGVyYXRpb25zIChvciBzaW1pbGFyIHZhcmlhbnRzIGRlcGVuZGluZyBvbiBrZXJuZWwgdmVyc2lvbiwgYnV0IHRoZXNlIGFyZSB0aGUga2V5IGlkZWFzKS4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRob3NlIHN5bWJvbGljIGNvbnN0YW50cyBhcmUgcHJvcGVybHkgbWFwcGVkIHRvIHRob3NlIGVudHJ5IHBvaW50cy4KCk15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIHNjcnV0aW5pemUgaG93IHRob3NlIGBNQURWX0ZSRUVgIGFuZCBgTUFEVl9HVUFSRF9SRU1PVkVgIG1hZHZpc2UgZmxhZ3MgYXJlIGhhbmRsZWQgd2l0aGluIGBtbS9tYWR2aXNlLmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGFjdHVhbCBsb2dpYyBmb3IgZnJlZWluZyBvciBndWFyZGluZyBtZW1vcnkgcmVnaW9ucy4gTGV0JiMzOTtzIHNlZSBob3cgdGhlIGtlcm5lbCBpbXBsZW1lbnRzIHRoZXNlIG9wdGltaXphdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA1OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01BRFZfR1VBUkRfUkVNT1ZFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYWxwaGEvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmgtODEtI2RlZmluZSBNQURWX0dVQVJEX0lOU1RBTEwgMTAyXHRcdC8qIGZhdGFsIHNpZ25hbCBvbiBhY2Nlc3MgdG8gcmFuZ2UgKi9cbmFyY2gvYWxwaGEvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmg6ODI6I2RlZmluZSBNQURWX0dVQVJEX1JFTU9WRSAxMDNcdFx0LyogdW5ndWFyZCByYW5nZSAqL1xuYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC04My1cbi0tXG5hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmgtMTA4LSNkZWZpbmUgTUFEVl9HVUFSRF9JTlNUQUxMIDEwMlx0XHQvKiBmYXRhbCBzaWduYWwgb24gYWNjZXNzIHRvIHJhbmdlICovXG5hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmg6MTA5OiNkZWZpbmUgTUFEVl9HVUFSRF9SRU1PVkUgMTAzXHRcdC8qIHVuZ3VhcmQgcmFuZ2UgKi9cbmFyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC0xMTAtXG4tLVxuYXJjaC9wYXJpc2MvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmgtNzgtI2RlZmluZSBNQURWX0dVQVJEX0lOU1RBTEwgMTAyXHRcdC8qIGZhdGFsIHNpZ25hbCBvbiBhY2Nlc3MgdG8gcmFuZ2UgKi9cbmFyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oOjc5OiNkZWZpbmUgTUFEVl9HVUFSRF9SRU1PVkUgMTAzXHRcdC8qIHVuZ3VhcmQgcmFuZ2UgKi9cbmFyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTgwLVxuLS1cbmFyY2gveHRlbnNhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTExNi0jZGVmaW5lIE1BRFZfR1VBUkRfSU5TVEFMTCAxMDJcdFx0LyogZmF0YWwgc2lnbmFsIG9uIGFjY2VzcyB0byByYW5nZSAqL1xuYXJjaC94dGVuc2EvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmg6MTE3OiNkZWZpbmUgTUFEVl9HVUFSRF9SRU1PVkUgMTAzXHRcdC8qIHVuZ3VhcmQgcmFuZ2UgKi9cbmFyY2gveHRlbnNhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTExOC1cbi0tXG5pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvbW1hbi1jb21tb24uaC04Mi0jZGVmaW5lIE1BRFZfR1VBUkRfSU5TVEFMTCAxMDJcdFx0LyogZmF0YWwgc2lnbmFsIG9uIGFjY2VzcyB0byByYW5nZSAqL1xuaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmg6ODM6I2RlZmluZSBNQURWX0dVQVJEX1JFTU9WRSAxMDNcdFx0LyogdW5ndWFyZCByYW5nZSAqL1xuaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmgtODQtXG4tLVxubW0vbWFkdmlzZS5jPTEzMzk9c3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTM2Ny1cdFx0cmV0dXJuIG1hZHZpc2VfZ3VhcmRfaW5zdGFsbChtYWR2X2JlaGF2aW9yKTtcbm1tL21hZHZpc2UuYzoxMzY4Olx0Y2FzZSBNQURWX0dVQVJEX1JFTU9WRTpcbm1tL21hZHZpc2UuYy0xMzY5LVx0XHRyZXR1cm4gbWFkdmlzZV9ndWFyZF9yZW1vdmUobWFkdl9iZWhhdmlvcik7XG4tLVxubW0vbWFkdmlzZS5jPTE1MTk9bWFkdmlzZV9iZWhhdmlvcl92YWxpZChpbnQgYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTE1NDktXHRjYXNlIE1BRFZfR1VBUkRfSU5TVEFMTDpcbm1tL21hZHZpc2UuYzoxNTUwOlx0Y2FzZSBNQURWX0dVQVJEX1JFTU9WRTpcbm1tL21hZHZpc2UuYy0xNTUxLSNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVcbi0tXG5tbS9tYWR2aXNlLmM9MTc0Mz1zdGF0aWMgZW51bSBtYWR2aXNlX2xvY2tfbW9kZSBnZXRfbG9ja19tb2RlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xNzU3LVx0Y2FzZSBNQURWX0dVQVJEX0lOU1RBTEw6XG5tbS9tYWR2aXNlLmM6MTc1ODpcdGNhc2UgTUFEVl9HVUFSRF9SRU1PVkU6XG5tbS9tYWR2aXNlLmMtMTc1OS1cdGNhc2UgTUFEVl9ET05UTkVFRDpcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvbW1hbi1jb21tb24uaC04Mi0jZGVmaW5lIE1BRFZfR1VBUkRfSU5TVEFMTCAxMDJcdFx0LyogZmF0YWwgc2lnbmFsIG9uIGFjY2VzcyB0byByYW5nZSAqL1xudG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmg6ODM6I2RlZmluZSBNQURWX0dVQVJEX1JFTU9WRSAxMDNcdFx0LyogdW5ndWFyZCByYW5nZSAqL1xudG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmgtODQtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jPTM0Nz1URVNUX0YoZ3VhcmRfcmVnaW9ucywgYmFzaWMpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTM4MS1cdC8qIFJlbW92ZSB0aGUgZmlyc3QgZ3VhcmQgcGFnZS4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYzozODI6XHRBU1NFUlRfRkFMU0UobWFkdmlzZShwdHIsIHBhZ2Vfc2l6ZSwgTUFEVl9HVUFSRF9SRU1PVkUpKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy0zODMtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTM4OC1cdEFTU0VSVF9GQUxTRShtYWR2aXNlKFx1MDAyNnB0clsoTlVNX1BBR0VTIC0gMSkgKiBwYWdlX3NpemVdLCBwYWdlX3NpemUsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmM6Mzg5Olx0XHRcdCAgICAgTUFEVl9HVUFSRF9SRU1PVkUpKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy0zOTAtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTQxNS1cdC8qIFJlbW92ZSBndWFyZCBwYWdlcy4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYzo0MTY6XHRBU1NFUlRfRVEobWFkdmlzZShwdHIsIE5VTV9QQUdFUyAqIHBhZ2Vfc2l6ZSwgTUFEVl9HVUFSRF9SRU1PVkUpLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy00MTctXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTQyOC1cdCAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jOjQyOTpcdEFTU0VSVF9FUShtYWR2aXNlKHB0ciwgTlVNX1BBR0VTICogcGFnZV9zaXplLCBNQURWX0dVQVJEX1JFTU9WRSksIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTQzMC1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmM9NDQxPVRFU1RfRihndWFyZF9yZWdpb25zLCBtdWx0aV92bWEpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTUxMS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYzo1MTI6XHRBU1NFUlRfRVEobWFkdmlzZShwdHJfcmVnaW9uLCAxMDAgKiBwYWdlX3NpemUsIE1BRFZfR1VBUkRfUkVNT1ZFKSwgLTEpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTUxMy1cdEFTU0VSVF9FUShlcnJubywgRU5PTUVNKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtNTU3LVx0fVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jOjU1ODpcdEFTU0VSVF9FUShtYWR2aXNlKHB0cl9yZWdpb24sIDEwMCAqIHBhZ2Vfc2l6ZSwgTUFEVl9HVUFSRF9SRU1PVkUpLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy01NTktXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAxMDA7IGkmIzQzOyYjNDM7KSB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jPTU3Mz1URVNUX0YoZ3VhcmRfcmVnaW9ucywgcHJvY2Vzc19tYWR2aXNlKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy02NDQtXHQvKiBOb3cgZG8gdGhlIHNhbWUgd2l0aCB1bmd1YXJkLi4uICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmM6NjQ1Olx0Y291bnQgPSBzeXNfcHJvY2Vzc19tYWR2aXNlKFBJREZEX1NFTEYsIHZlYywgNiwgTUFEVl9HVUFSRF9SRU1PVkUsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTY0Ni1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmM9NzAzPVRFU1RfRihndWFyZF9yZWdpb25zLCBtcHJvdGVjdClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtNzM2LVx0LyogTm93IHVuZ3VhcmQgdGhlIHdob2xlIHJhbmdlLiAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jOjczNzpcdEFTU0VSVF9FUShtYWR2aXNlKHB0ciwgMTAgKiBwYWdlX3NpemUsIE1BRFZfR1VBUkRfUkVNT1ZFKSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtNzM4LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYz03NTE9VEVTVF9GKGd1YXJkX3JlZ2lvbnMsIHNwbGl0X21lcmdlKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy04NTUtXHQvKiAuLi5hbmQgdW5ndWFyZCB0aGUgd2hvbGUgcmFuZ2UuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmM6ODU2Olx0QVNTRVJUX0VRKG1hZHZpc2UocHRyLCAxMCAqIHBhZ2Vfc2l6ZSwgTUFEVl9HVUFSRF9SRU1PVkUpLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy04NTctXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jPTk0Mz1URVNUX0YoZ3VhcmRfcmVnaW9ucywgbWxvY2spXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTk5Ni1cdCAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jOjk5NzpcdEFTU0VSVF9FUShtYWR2aXNlKHB0ciwgMTAgKiBwYWdlX3NpemUsIE1BRFZfR1VBUkRfUkVNT1ZFKSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtOTk4LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYz0xMTg4PVRFU1RfRihndWFyZF9yZWdpb25zLCBmb3JrKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy0xMjE2LVx0XHQvKiBOb3cgdW5ndWFyZCB0aGUgcmFuZ2UuKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYzoxMjE3Olx0XHRBU1NFUlRfRVEobWFkdmlzZShwdHIsIDEwICogcGFnZV9zaXplLCBNQURWX0dVQVJEX1JFTU9WRSksIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTEyMTgtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jPTEyNDM9VEVTVF9GKGd1YXJkX3JlZ2lvbnMsIGZvcmtfY293KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy0xMjgwLVx0XHQvKiBSZW1vdmUgaXQuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmM6MTI4MTpcdFx0QVNTRVJUX0VRKG1hZHZpc2UocHRyLCAxMCAqIHBhZ2Vfc2l6ZSwgTUFEVl9HVUFSRF9SRU1PVkUpLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy0xMjgyLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYz0xNTU0PVRFU1RfRihndWFyZF9yZWdpb25zLCBtYWR2aXNlX3NlcXVlbnRpYWwpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTE1OTctXHQvKiBOb3cgcmVtb3ZlIGd1YXJkIHBhZ2VzLiAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jOjE1OTg6XHRBU1NFUlRfRVEobWFkdmlzZShwdHIsIDEwICogcGFnZV9zaXplLCBNQURWX0dVQVJEX1JFTU9WRSksIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTE1OTktXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jPTE2MTE9VEVTVF9GKGd1YXJkX3JlZ2lvbnMsIG1hcF9wcml2YXRlKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy0xNjU4LVx0LyogUmVtb3ZlIGd1YXJkIHJlZ2lvbnMgZnJvbSBzaGFyZWQgbWFwcGluZy4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYzoxNjU5Olx0QVNTRVJUX0VRKG1hZHZpc2UocHRyX3NoYXJlZCwgMTAgKiBwYWdlX3NpemUsIE1BRFZfR1VBUkRfUkVNT1ZFKSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtMTY2MC1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtMTY2OC1cdC8qIFJlbW92ZSBndWFyZCByZWdpb25zIGZyb20gcHJpdmF0ZSBtYXBwaW5nLiAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jOjE2Njk6XHRBU1NFUlRfRVEobWFkdmlzZShwdHJfcHJpdmF0ZSwgMTAgKiBwYWdlX3NpemUsIE1BRFZfR1VBUkRfUkVNT1ZFKSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtMTY3MC1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtMTcxNy1cdC8qIFJlbW92ZSB0aGUgZ3VhcmQgcmVnaW9ucyBhbHRvZ2V0aGVyLiAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jOjE3MTg6XHRBU1NFUlRfRVEobWFkdmlzZShwdHJfcHJpdmF0ZSwgMTAgKiBwYWdlX3NpemUsIE1BRFZfR1VBUkRfUkVNT1ZFKSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtMTcxOS1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmM9MTc1ND1URVNUX0YoZ3VhcmRfcmVnaW9ucywgcmVhZG9ubHlfZmlsZSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtMTc5My1cdC8qIFJlbW92ZSBndWFyZCByZWdpb25zLiAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jOjE3OTQ6XHRBU1NFUlRfRVEobWFkdmlzZShwdHIsIDEwICogcGFnZV9zaXplLCBNQURWX0dVQVJEX1JFTU9WRSksIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTE3OTUtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jPTE5MTE9VEVTVF9GKGd1YXJkX3JlZ2lvbnMsIGhvbGVfcHVuY2gpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTE5NTctXHQvKiBOb3cgcmVtb3ZlIGd1YXJkIHJlZ2lvbiB0aHJvdWdob3V0LiAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jOjE5NTg6XHRBU1NFUlRfRVEobWFkdmlzZShwdHIsIDEwICogcGFnZV9zaXplLCBNQURWX0dVQVJEX1JFTU9WRSksIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTE5NTktXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jPTE5NzU9VEVTVF9GKGd1YXJkX3JlZ2lvbnMsIG1lbWZkX3dyaXRlX3NlYWwpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTIwMjMtXHQvKiBOb3cgcmVtb3ZlIGd1YXJkIHJlZ2lvbnMuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmM6MjAyNDpcdEFTU0VSVF9FUShtYWR2aXNlKHB0ciwgMTAgKiBwYWdlX3NpemUsIE1BRFZfR1VBUkRfUkVNT1ZFKSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtMjAyNS1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmM9MjA0Nj1URVNUX0YoZ3VhcmRfcmVnaW9ucywgYW5vbl96ZXJvcGFnZSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtMjA3My1cdC8qIE5vdyByZW1vdmUgYWxsIGd1YXJkIHJlZ2lvbnMuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmM6MjA3NDpcdEFTU0VSVF9FUShtYWR2aXNlKHB0ciwgMTAgKiBwYWdlX3NpemUsIE1BRFZfR1VBUkRfUkVNT1ZFKSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtMjA3NS1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmM9MjI0OT1URVNUX0YoZ3VhcmRfcmVnaW9ucywgc21hcHMpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTIyNzMtXHQgKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYzoyMjc0Olx0QVNTRVJUX0VRKG1hZHZpc2UocHRyLCBwYWdlX3NpemUsIE1BRFZfR1VBUkRfUkVNT1ZFKSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtMjI3NS1cdEFTU0VSVF9UUlVFKGNoZWNrX3ZtZmxhZ19ndWFyZChwdHIpKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaD0zMz1zZXBhcmF0ZWQgYnkgc3BhY2VzOlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoLTUyLS0gbWFkdl9ndWFyZFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2g6NTM6XHR0ZXN0IG1hZHZpc2UoMikgTUFEVl9HVUFSRF9JTlNUQUxMIGFuZCBNQURWX0dVQVJEX1JFTU9WRSBvcHRpb25zXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaC01NC0tIG1hZHZfcG9wdWxhdGVcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaD0zNDM9Q0FURUdPUlk9XCYjMzQ7aG1tXCYjMzQ7IHJ1bl90ZXN0IGJhc2ggLi90ZXN0X2htbS5zaCBzbW9rZVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gtMzQ0LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2g6MzQ1OiMgTUFEVl9HVUFSRF9JTlNUQUxMIGFuZCBNQURWX0dVQVJEX1JFTU9WRSB0ZXN0c1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gtMzQ2LUNBVEVHT1JZPVwmIzM0O21hZHZfZ3VhcmRcJiMzNDsgcnVuX3Rlc3QgLi9ndWFyZC1yZWdpb25zXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA1OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2NjQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyByZWdhcmRpbmcgYE1BRFZfR1VBUkRfUkVNT1ZFYDoKCioqSW52ZXN0aWdhdGluZyB0aGUgSW1wbGVtZW50YXRpb24gb2YgYE1BRFZfR1VBUkRfUkVNT1ZFYCoqCgpBbHJpZ2h0LCBzbyBgTUFEVl9HVUFSRF9SRU1PVkVgIGlzIHNvbWV0aGluZyBuZXcsIG9yIGF0IGxlYXN0IGEgbmV3IGZlYXR1cmUgYmVpbmcgZXZhbHVhdGVkLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCBkb2VzIHRoaXMgdGhpbmcgaGF2ZSBhbnkgY29uZmlndXJhdGlvbiBrbm9icyBvciBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyYjMzQ7IEZpcnN0IHRoaW5nJiMzOTtzIGZpcnN0LCBJIHNob3VsZCBmaW5kIGl0cyBpbXBsZW1lbnRhdGlvbi4gTG9va3MgbGlrZSB0aGUgaW5pdGlhbCBsZWFkIGlzIHBvaW50aW5nIHRvd2FyZHMgYG1hZHZpc2UuY2AuICBMZXQmIzM5O3MgaGVhZCBvdmVyIHRvIGBtbS9tYWR2aXNlLmNgIGFuZCBodW50IGZvciBgTUFEVl9HVUFSRF9SRU1PVkVgIGl0c2VsZi4gVGhhdCYjMzk7bGwgYmUgdGhlIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgaXRzIGNvcmUgYmVoYXZpb3IgYW5kIGFueSBhc3NvY2lhdGVkIGRlcGVuZGVuY2llcy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtNQURWX0dVQVJEX1JFTU9WRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21hZHZpc2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tYWR2aXNlLmM9MTMzOT1zdGF0aWMgaW50IG1hZHZpc2Vfdm1hX2JlaGF2aW9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xMzY3LVx0XHRyZXR1cm4gbWFkdmlzZV9ndWFyZF9pbnN0YWxsKG1hZHZfYmVoYXZpb3IpO1xubW0vbWFkdmlzZS5jOjEzNjg6XHRjYXNlIE1BRFZfR1VBUkRfUkVNT1ZFOlxubW0vbWFkdmlzZS5jLTEzNjktXHRcdHJldHVybiBtYWR2aXNlX2d1YXJkX3JlbW92ZShtYWR2X2JlaGF2aW9yKTtcbi0tXG5tbS9tYWR2aXNlLmM9MTUxOT1tYWR2aXNlX2JlaGF2aW9yX3ZhbGlkKGludCBiZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTU0OS1cdGNhc2UgTUFEVl9HVUFSRF9JTlNUQUxMOlxubW0vbWFkdmlzZS5jOjE1NTA6XHRjYXNlIE1BRFZfR1VBUkRfUkVNT1ZFOlxubW0vbWFkdmlzZS5jLTE1NTEtI2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRVxuLS1cbm1tL21hZHZpc2UuYz0xNzQzPXN0YXRpYyBlbnVtIG1hZHZpc2VfbG9ja19tb2RlIGdldF9sb2NrX21vZGUoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTE3NTctXHRjYXNlIE1BRFZfR1VBUkRfSU5TVEFMTDpcbm1tL21hZHZpc2UuYzoxNzU4Olx0Y2FzZSBNQURWX0dVQVJEX1JFTU9WRTpcbm1tL21hZHZpc2UuYy0xNzU5LVx0Y2FzZSBNQURWX0RPTlRORUVEOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDI4MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgTUFEVl9HVUFSRF9SRU1PVkUmIzM5O3MgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gdGhpcyBgTUFEVl9HVUFSRF9SRU1PVkVgIGZsYWcgYW5kIGltbWVkaWF0ZWx5IEkmIzM5O20gd29uZGVyaW5nOiBpcyB0aGlzIGZlYXR1cmUgY29uZGl0aW9uYWxseSBjb21waWxlZD8gSXMgaXQgb25seSBhdmFpbGFibGUgb24gc3BlY2lmaWMgYXJjaGl0ZWN0dXJlcyBvciB3aXRoIGNlcnRhaW4ga2VybmVsIGNvbmZpZ3VyYXRpb25zPyBUaGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIGNvbmZpcm0gdGhhdC4gSSBuZWVkIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGAjaWZkZWZgIGRpcmVjdGl2ZXMgc3Vycm91bmRpbmcgaXRzIGRlZmluaXRpb24gb3IgdXNhZ2UuIE15IGluc3RpbmN0IGlzIHRvIGdvIGRpcmVjdGx5IHRvIGBtbS9tYWR2aXNlLmNgLCB0aGF0IHNlZW1zIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBmaW5kIHRoZSBgbWFkdmlzZV9ndWFyZF9yZW1vdmVgIGZ1bmN0aW9uYWxpdHksIGFzc3VtaW5nIGl0IGhhcyBpdHMgb3duIGRlZGljYXRlZCBmdW5jdGlvbi4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDU6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFkdmlzZV9ndWFyZF9yZW1vdmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tYWR2aXNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jPTEyMzA9c3RhdGljIGludCBndWFyZF9yZW1vdmVfcHRlX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9tYWR2aXNlLmMtMTI0My1cbm1tL21hZHZpc2UuYzoxMjQ0OnN0YXRpYyBsb25nIG1hZHZpc2VfZ3VhcmRfcmVtb3ZlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxubW0vbWFkdmlzZS5jLTEyNDUte1xuLS1cbm1tL21hZHZpc2UuYz0xMzM5PXN0YXRpYyBpbnQgbWFkdmlzZV92bWFfYmVoYXZpb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTEzNjgtXHRjYXNlIE1BRFZfR1VBUkRfUkVNT1ZFOlxubW0vbWFkdmlzZS5jOjEzNjk6XHRcdHJldHVybiBtYWR2aXNlX2d1YXJkX3JlbW92ZShtYWR2X2JlaGF2aW9yKTtcbm1tL21hZHZpc2UuYy0xMzcwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDcxNgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgTWVtb3J5IEFkdmlzZSBBdmFpbGFiaWxpdHkqKgoKSG1tLCBpdCYjMzk7cyBvY2N1cnJpbmcgdG8gbWUgdGhhdCBgTUFEVl9HVUFSRF9SRU1PVkVgIGFwcGVhcnMgdG8gYmUgcmVsaWFibHkgYXZhaWxhYmxlIHdoZW5ldmVyIGBtYWR2aXNlYCBpdHNlbGYgaXMuIFRoYXQmIzM5O3MgYSBnb29kIG9ic2VydmF0aW9uLCBtYWtlcyBzZW5zZSBnaXZlbiB0aGUgZ2VuZXJhbCBkZXNpZ24gcGhpbG9zb3BoeSBvZiB0aGVzZSBtZW1vcnkgbWFuYWdlbWVudCB0b29scy4gQnV0IHdoYXQgYWJvdXQgYG1hZHZpc2VfZnJlZV9wdGVfcmFuZ2VgPyBUaGF0JiMzOTtzIHNwZWNpZmljYWxseSB0aWVkIHRvIGBNQURWX0ZSRUVgLCByaWdodD8gSSBuZWVkIHRvIGNsYXJpZnkgaWYgdGhhdCBmdW5jdGlvbiYjMzk7cyBhdmFpbGFiaWxpdHkgaGFzIHNpbWlsYXIgZ3VhcmFudGVlcywgb3IgaWYgdGhlcmUmIzM5O3MgYSBtb3JlIG51YW5jZWQgZGVwZW5kZW5jeSBhdCBwbGF5LgoKVG8gYmUgY2VydGFpbiwgaXTigJlzIGJlc3QgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZS4gTGV0JiMzOTtzIGRlbHZlIGludG8gYG1tL21hZHZpc2UuY2AuIEkgbmVlZCB0byByZXZpZXcgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBNQURWX0ZSRUVgIHdpdGhpbiB0aGF0IG1vZHVsZSB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgd2l0aCBgbWFkdmlzZWAgYW5kLCBieSBleHRlbnNpb24sIHRoZSBhdmFpbGFiaWxpdHkgYW5kIHBvdGVudGlhbCB1c2VzIG9mIGBtYWR2aXNlX2ZyZWVfcHRlX3JhbmdlYC4gVGltZSB0byBnZXQgaW50byB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDU6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TUFEVl9GUkVFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21hZHZpc2UuYz04MDA9c3RhdGljIGludCBtYWR2aXNlX2ZyZWVfc2luZ2xlX3ZtYShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtODEyLVxubW0vbWFkdmlzZS5jOjgxMzpcdC8qIE1BRFZfRlJFRSB3b3JrcyBmb3Igb25seSBhbm9uIHZtYSBhdCB0aGUgbW9tZW50ICovXG5tbS9tYWR2aXNlLmMtODE0LVx0aWYgKCF2bWFfaXNfYW5vbnltb3VzKHZtYSkpXG4tLVxubW0vbWFkdmlzZS5jPTg5Nz1zdGF0aWMgbG9uZyBtYWR2aXNlX2RvbnRuZWVkX2ZyZWUoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTk1MS1cdFx0cmV0dXJuIG1hZHZpc2VfZG9udG5lZWRfc2luZ2xlX3ZtYShtYWR2X2JlaGF2aW9yKTtcbm1tL21hZHZpc2UuYzo5NTI6XHRlbHNlIGlmIChiZWhhdmlvciA9PSBNQURWX0ZSRUUpXG5tbS9tYWR2aXNlLmMtOTUzLVx0XHRyZXR1cm4gbWFkdmlzZV9mcmVlX3NpbmdsZV92bWEobWFkdl9iZWhhdmlvcik7XG4tLVxubW0vbWFkdmlzZS5jPTEyNjg9c3RhdGljIGJvb2wgaXNfZGlzY2FyZChpbnQgYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTEyNzAtXHRzd2l0Y2ggKGJlaGF2aW9yKSB7XG5tbS9tYWR2aXNlLmM6MTI3MTpcdGNhc2UgTUFEVl9GUkVFOlxubW0vbWFkdmlzZS5jLTEyNzItXHRjYXNlIE1BRFZfRE9OVE5FRUQ6XG4tLVxubW0vbWFkdmlzZS5jPTEzMzk9c3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTM1OC1cdFx0cmV0dXJuIG1hZHZpc2VfcGFnZW91dChtYWR2X2JlaGF2aW9yKTtcbm1tL21hZHZpc2UuYzoxMzU5Olx0Y2FzZSBNQURWX0ZSRUU6XG5tbS9tYWR2aXNlLmMtMTM2MC1cdGNhc2UgTUFEVl9ET05UTkVFRDpcbi0tXG5tbS9tYWR2aXNlLmM9MTUxOT1tYWR2aXNlX2JlaGF2aW9yX3ZhbGlkKGludCBiZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTUzMC1cdGNhc2UgTUFEVl9ET05UTkVFRF9MT0NLRUQ6XG5tbS9tYWR2aXNlLmM6MTUzMTpcdGNhc2UgTUFEVl9GUkVFOlxubW0vbWFkdmlzZS5jLTE1MzItXHRjYXNlIE1BRFZfQ09MRDpcbi0tXG5tbS9tYWR2aXNlLmM9MTc0Mz1zdGF0aWMgZW51bSBtYWR2aXNlX2xvY2tfbW9kZSBnZXRfbG9ja19tb2RlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xNzYwLVx0Y2FzZSBNQURWX0RPTlRORUVEX0xPQ0tFRDpcbm1tL21hZHZpc2UuYzoxNzYxOlx0Y2FzZSBNQURWX0ZSRUU6XG5tbS9tYWR2aXNlLmMtMTc2Mi1cdFx0cmV0dXJuIE1BRFZJU0VfVk1BX1JFQURfTE9DSztcbi0tXG5tbS9tYWR2aXNlLmM9MTgxMz1zdGF0aWMgYm9vbCBtYWR2aXNlX2JhdGNoX3RsYl9mbHVzaChpbnQgYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTE4MTctXHRjYXNlIE1BRFZfRE9OVE5FRURfTE9DS0VEOlxubW0vbWFkdmlzZS5jOjE4MTg6XHRjYXNlIE1BRFZfRlJFRTpcbm1tL21hZHZpc2UuYy0xODE5LVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5tbS9tYWR2aXNlLmM9MTg4OD1zdGF0aWMgaW50IG1hZHZpc2VfZG9fYmVoYXZpb3IodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbl9pbixcbi0tXG5tbS9tYWR2aXNlLmMtMTkzNC0gKlx0XHRzbyB0aGUga2VybmVsIGNhbiBmcmVlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggaXQuXG5tbS9tYWR2aXNlLmM6MTkzNTogKiAgTUFEVl9GUkVFIC0gdGhlIGFwcGxpY2F0aW9uIG1hcmtzIHBhZ2VzIGluIHRoZSBnaXZlbiByYW5nZSBhcyBsYXp5IGZyZWUsXG5tbS9tYWR2aXNlLmMtMTkzNi0gKlx0XHR3aGVyZSBhY3R1YWwgcHVyZ2VzIGFyZSBwb3N0cG9uZWQgdW50aWwgbWVtb3J5IHByZXNzdXJlIGhhcHBlbnMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA1OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTA4CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBhIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY3kqKgoKSG1tLCBgQ09ORklHX0FEVklTRV9TWVNDQUxMU2AuLi4gSSYjMzk7bSBnZXR0aW5nIGEgZmVlbGluZyB0aGF0IHNvbWV0aGluZyBpcyB1c2luZyBpdCwgYnV0IEkgY2FuJiMzOTt0IHF1aXRlIHBsYWNlIGl0LiBPa2F5LCBiZXN0IHRvIGp1c3QgZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBzb3VyY2UuIE15IGluc3RpbmN0IGlzIHRoYXQgdGhpcyBpcyBzb21ldGhpbmcgdGhhdCYjMzk7cyBsaWtlbHkgdGllZCBpbnRvIG1lbW9yeSBtYW5hZ2VtZW50LCBzbyBJIHNob3VsZCBwcm9iYWJseSBzdGFydCB3aXRoIHRoZSBgbW0vYCBkaXJlY3RvcnkuIFJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIHBlZWsgYXQgYG1tL01ha2VmaWxlYC4gVGhhdCBzaG91bGQgYmUgdGhlIHF1aWNrZXN0IHdheSB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCBtaWdodCBiZSBjb25kaXRpb25hbGx5IGNvbXBpbGluZyBiYXNlZCBvbiB0aGF0IGZsYWcuIEhvcGVmdWxseSwgaXTigJlzIHJlYXNvbmFibHkgd2VsbC1jb21tZW50ZWQgYW5kIEkgY2FuIGp1c3QgcGFyc2UgdGhhdCBxdWlja2x5IHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIEl0JiMzOTtzIGFsbW9zdCBhbHdheXMgYSBnb29kIHN0cmF0ZWd5IHRvIHN0YXJ0IHdpdGggdGhlIGJ1aWxkIHN5c3RlbSBpdHNlbGYgd2hlbiBjaGFzaW5nIGRvd24gY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA1OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hZHZpc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT03ND1pZmRlZiBDT05GSUdfTU1VXG5tbS9NYWtlZmlsZTo3NTpcdG9iai0kKENPTkZJR19BRFZJU0VfU1lTQ0FMTFMpXHQmIzQzOz0gbWFkdmlzZS5vXG5tbS9NYWtlZmlsZS03Ni1lbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIwMwoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipDaGVja2luZyB0aGUgRGVwZW5kZW5jaWVzIGZvciBgbWFkdmlzZS5jYCoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHByZXR0eSBzdXJlIGBDT05GSUdfQURWSVNFX1NZU0NBTExTYCBpcyBhIHJlcXVpcmVtZW50IGZvciBgbWFkdmlzZS5jYC4gVGhhdCYjMzk7cyB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGFjdHVhbGx5IGJlaW5nIGVuYWJsZWQgd2hlbiBJIGV4cGVjdCBpdCB0byBiZS4KCkhhbmcgb24gYSBzZWNvbmTigKYgSSBuZWVkIHRvIGNvbnNpZGVyIGB6YXBfbm9ucHJlc2VudF9wdGVzYC4gSSBzZWVtIHRvIHJlY2FsbCB0aGF0IGJlaW5nIGluIGBtbS9tZW1vcnkuY2AuIEJ1dCBgbW0vbWVtb3J5LmNgIGlzIGFsd2F5cyBjb21waWxlZCwgaXNuJiMzOTt0IGl0PyBJZiBzbywgd2h5IHdvdWxkIHRoaXMgYENPTkZJR2AgbWF0dGVyIGZvciBzb21ldGhpbmcgdGhhdCYjMzk7cyBhbHdheXMgYnVpbHQ/IFNvbWV0aGluZyBkb2VzbiYjMzk7dCBxdWl0ZSBhZGQgdXAgaGVyZSwgc28gdGhlIG5leHQgc3RlcCBpcyB0byBuYWlsIGRvd24gdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5LgoKTGV0IG1lIGdvIGxvb2sgYXQgYGluaXQvS2NvbmZpZ2Agb3Igc29tZXdoZXJlIHNpbWlsYXIgdG8gZG91YmxlLWNoZWNrIHRoaXMgYENPTkZJR19BRFZJU0VfU1lTQ0FMTFNgIGFuZCBtYWtlIHN1cmUgSSBmdWxseSB1bmRlcnN0YW5kIHdoZXJlIGl0IGNvbWVzIGZyb20gYW5kIHdoYXQgaXQgY29udHJvbHMuIEl0JiMzOTtzIGxpa2VseSByZWxhdGVkIHRvIHRoZSBzeXNjYWxsIGl0c2VsZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDU6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFEVklTRV9TWVNDQUxMUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTkzNz1jb25maWcgSU9fVVJJTkdfTU9DS19GSUxFXG4tLVxuaW5pdC9LY29uZmlnLTE5NDctXG5pbml0L0tjb25maWc6MTk0ODpjb25maWcgQURWSVNFX1NZU0NBTExTXG5pbml0L0tjb25maWctMTk0OS1cdGJvb2wgXCYjMzQ7RW5hYmxlIG1hZHZpc2UvZmFkdmlzZSBzeXNjYWxsc1wmIzM0OyBpZiBFWFBFUlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDU6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2MzAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgRGVmYXVsdCBCZWhhdmlvciBvZiBQVEUgQ2xlYXJpbmcqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBjbGVhcmluZyBvZiBwYWdlIHRhYmxlIGVudHJpZXMgd29ya3MuIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhpcyBgemFwX25vbnByZXNlbnRfcHRlc2AgZnVuY3Rpb25hbGl0eSBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuIEkgbmVlZCB0byBjb25maXJtIHRoaXMuIFRoZSBmaXJzdCBwbGFjZSB0byBjaGVjayBpcyBgbW0vbWVtb3J5LmNgLiBJIHJlY2FsbCBhIHBhdGNoIHRoYXQgZGVhbHQgd2l0aCB0aGlzIGFyZWEsIHNwZWNpZmljYWxseSByZXBsYWNpbmcgYGNsZWFyX25vdF9wcmVzZW50X2Z1bGxfcHRlc2Agd2l0aCBgY2xlYXJfbm9ucHJlc2VudF9wdGVzYC4gVGhhdCBjaGFuZ2UgaXMgc2lnbmlmaWNhbnQuIE5vdywgd2hlcmUgaXMgdGhpcyBuZXcgYGNsZWFyX25vbnByZXNlbnRfcHRlc2AgZnVuY3Rpb24gZGVmaW5lZD8gQWgsIGl0JiMzOTtzIGFuIGlubGluZSBzdGF0aWMgZnVuY3Rpb247IEkmIzM5O2xsIGZpbmQgaXQgaW4gYGluY2x1ZGUvbGludXgvcGd0YWJsZS5oYC4KCk5vdywgSSBuZWVkIHRvIHpvb20gaW4gb24gaG93IHRoaXMgaXMgdXRpbGl6ZWQuIEkgd2FudCB0byBzZWUgdGhpcyBpbiBjb250ZXh0LCBzbyBJJiMzOTtsbCBiZSBmb2N1c2luZyBvbjogYG1hZHZpc2VfZnJlZV9wdGVfcmFuZ2VgLCBgZ3VhcmRfcmVtb3ZlX3B0ZV9lbnRyeWAsIGFuZCBgemFwX25vbnByZXNlbnRfcHRlc2AgdG8gYmVnaW4gd2l0aC4gCgpUbyBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IGEgY29tcHJlaGVuc2l2ZSB2aWV3LCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGlmIGBjbGVhcl9ub25wcmVzZW50X3B0ZXNgIGlzIHVzZWQgaW4gYW55IG90aGVyIHBsYWNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDU6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2xlYXJfbm9ucHJlc2VudF9wdGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGd0YWJsZS5oPTk4NT1zdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX21tdV90bGIoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtOTkxLS8qKlxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg6OTkyOiAqIGNsZWFyX25vbnByZXNlbnRfcHRlcyAtIENsZWFyIG11bHRpcGxlIG5vbi1wcmVzZW50IFBURXMgd2hpY2ggYXJlXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC05OTMtICpcdFx0XHQgICAgY29uc2VjdXRpdmUgaW4gdGhlIHBndGFibGUuXG4tLVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMTAwMS0gKi9cbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oOjEwMDI6c3RhdGljIGlubGluZSB2b2lkIGNsZWFyX25vbnByZXNlbnRfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTEwMDMtXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGludCBucilcbi0tXG5tbS9tYWR2aXNlLmM9NjUzPXN0YXRpYyBpbnQgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vbWFkdmlzZS5jLTY5Ny1cdFx0XHRcdHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0KGVudHJ5LCBucik7XG5tbS9tYWR2aXNlLmM6Njk4Olx0XHRcdFx0Y2xlYXJfbm9ucHJlc2VudF9wdGVzKG1tLCBhZGRyLCBwdGUsIG5yKTtcbm1tL21hZHZpc2UuYy02OTktXHRcdFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19od3BvaXNvbihlbnRyeSkgfHxcbi0tXG5tbS9tZW1vcnkuYz0xNzM1PXN0YXRpYyBpbmxpbmUgaW50IHphcF9ub25wcmVzZW50X3B0ZXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbi0tXG5tbS9tZW1vcnkuYy0xNzk5LVx0fVxubW0vbWVtb3J5LmM6MTgwMDpcdGNsZWFyX25vbnByZXNlbnRfcHRlcyh2bWEtXHUwMDNldm1fbW0sIGFkZHIsIHB0ZSwgbnIpO1xubW0vbWVtb3J5LmMtMTgwMS1cdCphbnlfc2tpcHBlZCA9IHphcF9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkKHZtYSwgYWRkciwgcHRlLCBuciwgZGV0YWlscywgcHRlbnQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzUxNwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLCBteSBtZW50YWwgZ2VhcnMgYXJlIHR1cm5pbmcuLi4KCioqQW5hbHl6aW5nIFBhZ2UgVGFibGUgRW50cnkgKFBURSkgTWFuYWdlbWVudCBGdW5jdGlvbnMqKgoKUmlnaHQsIEkmIzM5O20gZm9jdXNpbmcgaW4gb24gdGhlc2Uga2V5IGZ1bmN0aW9uczogYG1hZHZpc2VfZnJlZV9wdGVfcmFuZ2VgLCBgZ3VhcmRfcmVtb3ZlX3B0ZV9lbnRyeWAsIGFuZCB0aGF0IHBlc2t5IGB6YXBfbm9ucHJlc2VudF9wdGVzYC4gTm93LCB3YWl0IGEgbWludXRlLCB3YXNuJiMzOTt0IGB6YXBfbm9ucHJlc2VudF9wdGVzYCBzdGF0aWMgaW5saW5lPyBUaGF0IG1lYW5zIGl0JiMzOTtzIHByb2JhYmx5ICpub3QqIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIGNhbGwgSSYjMzk7bSBhZnRlciwgbW9yZSBsaWtlIGEgaGVscGVyLCBwZXJoYXBzIGxlYWRpbmcgbWUgaW5zdGVhZCB0byBgZG9femFwX3B0ZV9yYW5nZWAgb3IgZXZlbiBqdXN0IHRoZSBwbGFpbiBgemFwX3B0ZV9yYW5nZWAuIFRpbWUgdG8gZG91YmxlLWNoZWNrIHRoYXQgYHphcF9ub25wcmVzZW50X3B0ZXNgIGFnYWluLCBqdXN0IHRvIGJlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBzb21ldGhpbmcgc3VidGxlIGluIGl0cyBpbXBsZW1lbnRhdGlvbiB0aGF0IG1pZ2h0IHBvaW50IHRvIHRoZSBjb3JlIG9wZXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgdGhlIGFjdHVhbCBhY3Rpb25zIHRoZXNlIGZ1bmN0aW9ucyBhcmUgb3JjaGVzdHJhdGluZy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6YXBfbm9ucHJlc2VudF9wdGVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmM9MTY4OT1zdGF0aWMgaW5saW5lIGludCB6YXBfcHJlc2VudF9wdGVzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG4tLVxubW0vbWVtb3J5LmMtMTczNC1cbm1tL21lbW9yeS5jOjE3MzU6c3RhdGljIGlubGluZSBpbnQgemFwX25vbnByZXNlbnRfcHRlcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxubW0vbWVtb3J5LmMtMTczNi1cdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHB0ZV90ICpwdGUsIHB0ZV90IHB0ZW50LFxuLS1cbm1tL21lbW9yeS5jPTE4MDY9c3RhdGljIGlubGluZSBpbnQgZG9femFwX3B0ZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuLS1cbm1tL21lbW9yeS5jLTE4MzUtXHRlbHNlXG5tbS9tZW1vcnkuYzoxODM2Olx0XHRuciAmIzQzOz0gemFwX25vbnByZXNlbnRfcHRlcyh0bGIsIHZtYSwgcHRlLCBwdGVudCwgbWF4X25yLCBhZGRyLFxubW0vbWVtb3J5LmMtMTgzNy1cdFx0XHRcdFx0ICBkZXRhaWxzLCByc3MsIGFueV9za2lwcGVkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDU6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwNzIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzcywgd2l0aCB0aGUgYm9sZGVkIGhlYWRlcjoKCioqRGl2aW5nIGludG8gdGhlIFBURSBSYW5nZSBaYXBwZXIqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGBkb196YXBfcHRlX3JhbmdlYCwgYW5kIGl0JiMzOTtzIGZsYWdnZWQgYXMgc3RhdGljIGlubGluZSwgd2hpY2ggc3VnZ2VzdHMgYSBwZXJmb3JtYW5jZS1mb2N1c2VkIGltcGxlbWVudGF0aW9uLiBUaGF0JiMzOTtzIGdvb2Q7IGxpa2VseSB0aGVyZSYjMzk7cyBzb21lIGxvdy1sZXZlbCBvcHRpbWl6YXRpb24gZ29pbmcgb24gaGVyZS4gQ29uc2lkZXJpbmcgaXRzIG5hbWUsIEkmIzM5O20gZ3Vlc3NpbmcgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgY2xlYXJpbmcgb3IgaW52YWxpZGF0aW5nIGEgcmFuZ2Ugb2YgcGFnZSB0YWJsZSBlbnRyaWVzLiBMZXQgbWUgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIGBkb196YXBfcHRlX3JhbmdlYCBhbmQgc2VlIGhvdyB0aGlzIGlubGluZSBiZWFzdCBvcGVyYXRlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDU6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9femFwX3B0ZV9yYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbW9yeS5jPTE3MzU9c3RhdGljIGlubGluZSBpbnQgemFwX25vbnByZXNlbnRfcHRlcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuLS1cbm1tL21lbW9yeS5jLTE4MDUtXG5tbS9tZW1vcnkuYzoxODA2OnN0YXRpYyBpbmxpbmUgaW50IGRvX3phcF9wdGVfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbm1tL21lbW9yeS5jLTE4MDctXHRcdFx0XHQgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcHRlX3QgKnB0ZSxcbi0tXG5tbS9tZW1vcnkuYz0xOTAwPXN0YXRpYyB1bnNpZ25lZCBsb25nIHphcF9wdGVfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbi0tXG5tbS9tZW1vcnkuYy0xOTMzLVxubW0vbWVtb3J5LmM6MTkzNDpcdFx0bnIgPSBkb196YXBfcHRlX3JhbmdlKHRsYiwgdm1hLCBwdGUsIGFkZHIsIGVuZCwgZGV0YWlscywgcnNzLFxubW0vbWVtb3J5LmMtMTkzNS1cdFx0XHRcdCAgICAgIFx1MDAyNmZvcmNlX2ZsdXNoLCBcdTAwMjZmb3JjZV9icmVhaywgXHUwMDI2YW55X3NraXBwZWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDUyMwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyBgemFwX3B0ZV9yYW5nZWAqKgoKT2theSwgc28gYHphcF9wdGVfcmFuZ2VgIGlzbiYjMzk7dCBhbiBpbmxpbmUgZnVuY3Rpb24g4oCTIHRoYXQmIzM5O3MgYSBrZXkgb2JzZXJ2YXRpb24uIFRoYXQgYWxvbmUgdGVsbHMgdXMgc29tZXRoaW5nIGFib3V0IGl0cyBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wYWN0LCBhcyBvcHBvc2VkIHRvIGEgZnVuY3Rpb24gdGhhdCBjb3VsZCBiZSBvcHRpbWl6ZWQgZGlyZWN0bHkgYnkgdGhlIGNvbXBpbGVyLiBHaXZlbiB0aGlzLCBpdCBtYWtlcyBhIGdvb2QgY2FuZGlkYXRlIGZvciBkZWVwZXIgaW52ZXN0aWdhdGlvbi4gTGV0JiMzOTtzIGRpZyBpbnRvIGB6YXBfcHRlX3JhbmdlYCBhbmQgc2VlIGV4YWN0bHkgd2hhdCBpdCYjMzk7cyBkb2luZy4gV2hhdCYjMzk7cyBpdCBkb2luZyBhbmQgd2h5IGlzbiYjMzk7dCBpdCBpbi1saW5lPyBMZXQmIzM5O3MgdHJhY2UgdGhyb3VnaCBpdHMgaW1wbGVtZW50YXRpb24gYW5kIHNlZSB3aGVyZSB0aGUgaG90c3BvdHMgbWlnaHQgYmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA1OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3phcF9wdGVfcmFuZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnkuYz0xNzM1PXN0YXRpYyBpbmxpbmUgaW50IHphcF9ub25wcmVzZW50X3B0ZXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbi0tXG5tbS9tZW1vcnkuYy0xODA1LVxubW0vbWVtb3J5LmM6MTgwNjpzdGF0aWMgaW5saW5lIGludCBkb196YXBfcHRlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG5tbS9tZW1vcnkuYy0xODA3LVx0XHRcdFx0ICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHB0ZV90ICpwdGUsXG4tLVxubW0vbWVtb3J5LmM9MTg2Nj1zdGF0aWMgYm9vbCB6YXBfcHRlX3RhYmxlX2lmX2VtcHR5KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLFxuLS1cbm1tL21lbW9yeS5jLTE4OTktXG5tbS9tZW1vcnkuYzoxOTAwOnN0YXRpYyB1bnNpZ25lZCBsb25nIHphcF9wdGVfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbm1tL21lbW9yeS5jLTE5MDEtXHRcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcG1kX3QgKnBtZCxcbi0tXG5tbS9tZW1vcnkuYy0xOTMzLVxubW0vbWVtb3J5LmM6MTkzNDpcdFx0bnIgPSBkb196YXBfcHRlX3JhbmdlKHRsYiwgdm1hLCBwdGUsIGFkZHIsIGVuZCwgZGV0YWlscywgcnNzLFxubW0vbWVtb3J5LmMtMTkzNS1cdFx0XHRcdCAgICAgIFx1MDAyNmZvcmNlX2ZsdXNoLCBcdTAwMjZmb3JjZV9icmVhaywgXHUwMDI2YW55X3NraXBwZWQpO1xuLS1cbm1tL21lbW9yeS5jPTE5OTI9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHphcF9wbWRfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbi0tXG5tbS9tZW1vcnkuYy0yMDE5LVx0XHR9XG5tbS9tZW1vcnkuYzoyMDIwOlx0XHRhZGRyID0gemFwX3B0ZV9yYW5nZSh0bGIsIHZtYSwgcG1kLCBhZGRyLCBuZXh0LCBkZXRhaWxzKTtcbm1tL21lbW9yeS5jLTIwMjEtXHRcdGlmIChhZGRyICE9IG5leHQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA1OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTUxCgkJCQkJCQlvdXRwdXQ6IDExOQoJCQkJCQkJdGhvdWdodHM6IDMxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2gsIGFuZCBteSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgaXQmIzM5O3MgZ290IHNvbWUgaW50ZXJlc3RpbmcgYW5nbGVzIGZvciBmdXp6aW5nLiBgemFwX3B0ZV9yYW5nZWAgc2VlbXMgbGlrZSBhIGtleSBmdW5jdGlvbiB0byB0YXJnZXQg4oCTIHRoYXQmIzM5O3MgZGVmaW5pdGVseSBhIHBsYWNlIHdoZXJlIHRoaW5ncyBjb3VsZCBnZXQgaW50ZXJlc3Rpbmcgd2l0aCBwYWdlIHRhYmxlIGludGVyYWN0aW9ucy4gSSBhbHNvIHNlZSB0aGF0IGBtYWR2aXNlX2ZyZWVfcHRlX3JhbmdlYCBpcyBhIHN0cm9uZyBjYW5kaWRhdGUgYW5kIGBndWFyZF9yZW1vdmVfcHRlX2VudHJ5YC4gV2FpdCwgaG9sZCBvbiDigJMgYGd1YXJkX3JlbW92ZV9wdGVfZW50cnlgIGlzIHN0YXRpYywgd2hpY2ggc2ltcGxpZmllcyB0aGluZ3MuIExlc3MgZ2xvYmFsIGV4cG9zdXJlIGlzIGdlbmVyYWxseSBiZXR0ZXIsIGJ1dCB0aGVyZSBtaWdodCBiZSBpbmRpcmVjdCBpbnRlcmFjdGlvbnMuCgpMZXQmIzM5O3Mgc2Vl4oCmIGFueSBjb25maWd1cmF0aW9uIGZsYWdzIHRoYXQgYXJlIGNydWNpYWwgaGVyZT8gUmlnaHQsIGBDT05GSUdfQURWSVNFX1NZU0NBTExTYCBpcyB0aGUgb2J2aW91cyBvbmUsIGVzcGVjaWFsbHkgc2luY2UgdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBtYWR2aXNlLmNgIHByZXR0eSBleHRlbnNpdmVseS4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpc27igJl0IG92ZXJseSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMuIEkgc2VlIGEgbW9kaWZpY2F0aW9uIHRvIGBhcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaGAsIHdoaWNoIHJhaXNlcyBhIGZsYWcuIEJ1dCB0aGUgcmVhbCBtZWF0IG9mIHRoZSBjaGFuZ2VzIGlzIGluIHRob3NlIGNvcmUgZmlsZXM6IGBpbmNsdWRlL2xpbnV4L3BndGFibGUuaGAsIGBtbS9tYWR2aXNlLmNgLCBhbmQgYG1tL21lbW9yeS5jYC4gVGhlIHNwYXJjLXNwZWNpZmljIGNoYW5nZSBqdXN0IGdldHMgcmlkIG9mIGFuIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBvdmVycmlkZSwgYHB0ZV9jbGVhcl9ub3RfcHJlc2VudF9mdWxsYCwgd2hpY2ggdGhlIGdlbmVyaWMgY29kZSBpcyBub3cgaGFuZGxpbmcuIFNvIGl0JiMzOTtzIGxvb2tpbmcgcHJldHR5IGdlbmVyaWMgb3ZlcmFsbC4KCkFscmlnaHQsIGxldCYjMzk7cyBwdWxsIGFsbCB0aGlzIHRvZ2V0aGVyIGludG8gYSBjb25jaXNlIHN1bW1hcnkuIFRoaXMgaXMgbG9va2luZyBwcm9taXNpbmcgZm9yIGZ1enppbmcuCgoqICAgKipXb3J0aEZ1enppbmc6KiogVHJ1ZSwgZGVmaW5pdGVseSB3b3J0aCB0aGUgZWZmb3J0LgoqICAgKipGb2N1c1N5bWJvbHM6KiogYG1hZHZpc2VfZnJlZV9wdGVfcmFuZ2VgLCBgZ3VhcmRfcmVtb3ZlX3B0ZV9lbnRyeWAsIGB6YXBfcHRlX3JhbmdlYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgSSYjMzk7bSBtb3N0IGludGVyZXN0ZWQgaW4uCiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYEFEVklTRV9TWVNDQUxMU2AgaXMgZXNzZW50aWFsLgoqICAgKipSZWFzb25pbmc6KiogVGhlIGNoYW5nZXMgYXJlIGhhcHBlbmluZyBpbiBjcml0aWNhbCBtZW1vcnkgbWFuYWdlbWVudCByb3V0aW5lcyByZXNwb25zaWJsZSBmb3IgY2xlYXJpbmcgbm9uLXByZXNlbnQgUFRFcyBkdXJpbmcgb3BlcmF0aW9ucyBsaWtlIGBNQURWX0ZSRUVgLCBgTUFEVl9HVUFSRF9SRU1PVkVgLCBhbmQgbWVtb3J5IHVubWFwcGluZy4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBzeXN0ZW0gY2FsbHMsIG1lYW5pbmcgd2UgY2FuIHRyaWdnZXIgY29tcGxleCBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbnMsIG9wZW5pbmcgYSBwb3RlbnRpYWwgZm9yIHZ1bG5lcmFiaWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDU6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FEVklTRV9TWVNDQUxMUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21hZHZpc2VfZnJlZV9wdGVfcmFuZ2UmIzM0OywKICAgICYjMzQ7Z3VhcmRfcmVtb3ZlX3B0ZV9lbnRyeSYjMzQ7LAogICAgJiMzNDt6YXBfcHRlX3JhbmdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zIHJlc3BvbnNpYmxlIGZvciBjbGVhcmluZyBub24tcHJlc2VudCBQVEVzIGR1cmluZyBvcGVyYXRpb25zIGxpa2UgTUFEVl9GUkVFLCBNQURWX0dVQVJEX1JFTU9WRSwgYW5kIHVubWFwcGluZyBtZW1vcnkuIFRoZXNlIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGFuZCBjYW4gdHJpZ2dlciBjb21wbGV4IHBhZ2UgdGFibGUgbWFuaXB1bGF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QURWSVNFX1NZU0NBTExTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFkdmlzZV9mcmVlX3B0ZV9yYW5nZSYjMzQ7LAogICAgJiMzNDtndWFyZF9yZW1vdmVfcHRlX2VudHJ5JiMzNDssCiAgICAmIzM0O3phcF9wdGVfcmFuZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIGNsZWFyaW5nIG5vbi1wcmVzZW50IFBURXMgZHVyaW5nIG9wZXJhdGlvbnMgbGlrZSBNQURWX0ZSRUUsIE1BRFZfR1VBUkRfUkVNT1ZFLCBhbmQgdW5tYXBwaW5nIG1lbW9yeS4gVGhlc2UgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYW5kIGNhbiB0cmlnZ2VyIGNvbXBsZXggcGFnZSB0YWJsZSBtYW5pcHVsYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDJUMDU6MDE6NDAuODQ3ODIwMTQ1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzIzNDA5MzI5NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQURWSVNFX1NZU0NBTExTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWFkdmlzZV9mcmVlX3B0ZV9yYW5nZVwiLFxuICAgIFwiZ3VhcmRfcmVtb3ZlX3B0ZV9lbnRyeVwiLFxuICAgIFwiemFwX3B0ZV9yYW5nZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zIHJlc3BvbnNpYmxlIGZvciBjbGVhcmluZyBub24tcHJlc2VudCBQVEVzIGR1cmluZyBvcGVyYXRpb25zIGxpa2UgTUFEVl9GUkVFLCBNQURWX0dVQVJEX1JFTU9WRSwgYW5kIHVubWFwcGluZyBtZW1vcnkuIFRoZXNlIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGFuZCBjYW4gdHJpZ2dlciBjb21wbGV4IHBhZ2UgdGFibGUgbWFuaXB1bGF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDU6MDE6NDAuODQ3ODI4MTc1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDY5MDE1OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjMTA3MmVjZWE0YmRmZjFlNzE5MmFlMzg0Mjk0N2M5OWJhNGE5YjMxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDIgMDU6MDE6MzkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaFxcbmluZGV4IDc0ZWRlNzA2ZmIzMjVkLi4wODM3ZWJiYzVkY2U2MyAxMDA2NDRcXG4tLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaFxcbisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oXFxuQEAgLTk0NSwxMCArOTQ1LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuICNkZWZpbmUgcHRlX2NsZWFyKG1tLGFkZHIscHRlcClcXHRcXHRcXFxcXFxuIFxcdHNldF9wdGVfYXQoKG1tKSwgKGFkZHIpLCAocHRlcCksIF9fcHRlKDBVTCkpXFxuIFxcbi0jZGVmaW5lIF9fSEFWRV9BUkNIX1BURV9DTEVBUl9OT1RfUFJFU0VOVF9GVUxMXFxuLSNkZWZpbmUgcHRlX2NsZWFyX25vdF9wcmVzZW50X2Z1bGwobW0sYWRkcixwdGVwLGZ1bGxtbSlcXHRcXFxcXFxuLVxcdF9fc2V0X3B0ZV9hdCgobW0pLCAoYWRkciksIChwdGVwKSwgX19wdGUoMFVMKSwgKGZ1bGxtbSkpXFxuLVxcbiAjaWZkZWYgRENBQ0hFX0FMSUFTSU5HX1BPU1NJQkxFXFxuICNkZWZpbmUgX19IQVZFX0FSQ0hfTU9WRV9QVEVcXG4gI2RlZmluZSBtb3ZlX3B0ZShwdGUsIG9sZF9hZGRyLCBuZXdfYWRkcilcXHRcXHRcXHRcXHRcXFxcXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oIGIvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhcXG5pbmRleCAyOTgxZTM4NmRhN2IzYy4uNjU1MWY0NWE4NTQwYzEgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BndGFibGUuaFxcbkBAIC05ODgsNDkgKzk4OCwzMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX21tdV90bGIoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdHVwZGF0ZV9tbXVfdGxiX3JhbmdlKHZtYSwgYWRkcmVzcywgcHRlcCwgMSk7XFxuIH1cXG4gXFxuLS8qXFxuLSAqIFNvbWUgYXJjaGl0ZWN0dXJlcyBtYXkgYmUgYWJsZSB0byBhdm9pZCBleHBlbnNpdmUgc3luY2hyb25pemF0aW9uXFxuLSAqIHByaW1pdGl2ZXMgd2hlbiBtb2RpZmljYXRpb25zIGFyZSBtYWRlIHRvIFBURSdzIHdoaWNoIGFyZSBhbHJlYWR5XFxuLSAqIG5vdCBwcmVzZW50LCBvciBpbiB0aGUgcHJvY2VzcyBvZiBhbiBhZGRyZXNzIHNwYWNlIGRlc3RydWN0aW9uLlxcbi0gKi9cXG4tI2lmbmRlZiBfX0hBVkVfQVJDSF9QVEVfQ0xFQVJfTk9UX1BSRVNFTlRfRlVMTFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgcHRlX2NsZWFyX25vdF9wcmVzZW50X2Z1bGwoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgcHRlX3QgKnB0ZXAsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgIGludCBmdWxsKVxcbi17XFxuLVxcdHB0ZV9jbGVhcihtbSwgYWRkcmVzcywgcHRlcCk7XFxuLX1cXG4tI2VuZGlmXFxuLVxcbi0jaWZuZGVmIGNsZWFyX25vdF9wcmVzZW50X2Z1bGxfcHRlc1xcbiAvKipcXG4tICogY2xlYXJfbm90X3ByZXNlbnRfZnVsbF9wdGVzIC0gQ2xlYXIgbXVsdGlwbGUgbm90IHByZXNlbnQgUFRFcyB3aGljaCBhcmVcXG4tICpcXHRcXHRcXHRcXHQgY29uc2VjdXRpdmUgaW4gdGhlIHBndGFibGUuXFxuKyAqIGNsZWFyX25vbnByZXNlbnRfcHRlcyAtIENsZWFyIG11bHRpcGxlIG5vbi1wcmVzZW50IFBURXMgd2hpY2ggYXJlXFxuKyAqXFx0XFx0XFx0ICAgIGNvbnNlY3V0aXZlIGluIHRoZSBwZ3RhYmxlLlxcbiAgKiBAbW06IEFkZHJlc3Mgc3BhY2UgdGhlIHB0ZXMgcmVwcmVzZW50LlxcbiAgKiBAYWRkcjogQWRkcmVzcyBvZiB0aGUgZmlyc3QgcHRlLlxcbiAgKiBAcHRlcDogUGFnZSB0YWJsZSBwb2ludGVyIGZvciB0aGUgZmlyc3QgZW50cnkuXFxuICAqIEBucjogTnVtYmVyIG9mIGVudHJpZXMgdG8gY2xlYXIuXFxuLSAqIEBmdWxsOiBXaGV0aGVyIHdlIGFyZSBjbGVhcmluZyBhIGZ1bGwgbW0uXFxuLSAqXFxuLSAqIE1heSBiZSBvdmVycmlkZGVuIGJ5IHRoZSBhcmNoaXRlY3R1cmU7IG90aGVyd2lzZSwgaW1wbGVtZW50ZWQgYXMgYSBzaW1wbGVcXG4tICogbG9vcCBvdmVyIHB0ZV9jbGVhcl9ub3RfcHJlc2VudF9mdWxsKCkuXFxuICAqXFxuICAqIENvbnRleHQ6IFRoZSBjYWxsZXIgaG9sZHMgdGhlIHBhZ2UgdGFibGUgbG9jay4gIFRoZSBQVEVzIGFyZSBhbGwgbm90IHByZXNlbnQuXFxuICAqIFRoZSBQVEVzIGFyZSBhbGwgaW4gdGhlIHNhbWUgUE1ELlxcbiAgKi9cXG4tc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX25vdF9wcmVzZW50X2Z1bGxfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgdW5zaWduZWQgaW50IG5yLCBpbnQgZnVsbClcXG4rc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX25vbnByZXNlbnRfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgdW5zaWduZWQgaW50IG5yKVxcbiB7XFxuK1xcdCh2b2lkKWFkZHI7XFxuK1xcbiBcXHRmb3IgKDs7KSB7XFxuLVxcdFxcdHB0ZV9jbGVhcl9ub3RfcHJlc2VudF9mdWxsKG1tLCBhZGRyLCBwdGVwLCBmdWxsKTtcXG4rXFx0XFx0cHRlX2NsZWFyKG1tLCBhZGRyLCBwdGVwKTtcXG4gXFx0XFx0aWYgKC0tbnIgPT0gMClcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdHB0ZXArKztcXG4gXFx0XFx0YWRkciArPSBQQUdFX1NJWkU7XFxuIFxcdH1cXG4gfVxcbi0jZW5kaWZcXG4gXFxuICNpZm5kZWYgX19IQVZFX0FSQ0hfUFRFUF9DTEVBUl9GTFVTSFxcbiBleHRlcm4gcHRlX3QgcHRlcF9jbGVhcl9mbHVzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5kaWZmIC0tZ2l0IGEvbW0vbWFkdmlzZS5jIGIvbW0vbWFkdmlzZS5jXFxuaW5kZXggY2Q5YmIwNzcwNzJjY2IuLjNkYjE0M2M0NDJlYWFhIDEwMDY0NFxcbi0tLSBhL21tL21hZHZpc2UuY1xcbisrKyBiL21tL21hZHZpc2UuY1xcbkBAIC02OTUsMTAgKzY5NSwxMCBAQCBzdGF0aWMgaW50IG1hZHZpc2VfZnJlZV9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRcXHRcXHRuciA9IHN3YXBfcHRlX2JhdGNoKHB0ZSwgbWF4X25yLCBwdGVudCk7XFxuIFxcdFxcdFxcdFxcdG5yX3N3YXAgLT0gbnI7XFxuIFxcdFxcdFxcdFxcdHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0KGVudHJ5LCBucik7XFxuLVxcdFxcdFxcdFxcdGNsZWFyX25vdF9wcmVzZW50X2Z1bGxfcHRlcyhtbSwgYWRkciwgcHRlLCBuciwgdGxiLVxcdTAwM2VmdWxsbW0pO1xcbitcXHRcXHRcXHRcXHRjbGVhcl9ub25wcmVzZW50X3B0ZXMobW0sIGFkZHIsIHB0ZSwgbnIpO1xcbiBcXHRcXHRcXHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2h3cG9pc29uKGVudHJ5KSB8fFxcbiBcXHRcXHRcXHRcXHQgICBzb2Z0bGVhZl9pc19wb2lzb25fbWFya2VyKGVudHJ5KSkge1xcbi1cXHRcXHRcXHRcXHRwdGVfY2xlYXJfbm90X3ByZXNlbnRfZnVsbChtbSwgYWRkciwgcHRlLCB0bGItXFx1MDAzZWZ1bGxtbSk7XFxuK1xcdFxcdFxcdFxcdHB0ZV9jbGVhcihtbSwgYWRkciwgcHRlKTtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbkBAIC0xMjM0LDcgKzEyMzQsNyBAQCBzdGF0aWMgaW50IGd1YXJkX3JlbW92ZV9wdGVfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXG4gXFx0aWYgKGlzX2d1YXJkX3B0ZV9tYXJrZXIocHRlbnQpKSB7XFxuIFxcdFxcdC8qIFNpbXBseSBjbGVhciB0aGUgUFRFIG1hcmtlci4gKi9cXG4tXFx0XFx0cHRlX2NsZWFyX25vdF9wcmVzZW50X2Z1bGwod2Fsay1cXHUwMDNlbW0sIGFkZHIsIHB0ZSwgZmFsc2UpO1xcbitcXHRcXHRwdGVfY2xlYXIod2Fsay1cXHUwMDNlbW0sIGFkZHIsIHB0ZSk7XFxuIFxcdFxcdHVwZGF0ZV9tbXVfY2FjaGUod2Fsay1cXHUwMDNldm1hLCBhZGRyLCBwdGUpO1xcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXFxuaW5kZXggZmYzMzhjMmFiZTkyMzEuLmEzZmNhZjhjZmU4ZjhiIDEwMDY0NFxcbi0tLSBhL21tL21lbW9yeS5jXFxuKysrIGIvbW0vbWVtb3J5LmNcXG5AQCAtMTc5Nyw3ICsxNzk3LDcgQEAgc3RhdGljIGlubGluZSBpbnQgemFwX25vbnByZXNlbnRfcHRlcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbiBcXHRcXHRwcl9hbGVydChcXFwidW5yZWNvZ25pemVkIHN3YXAgZW50cnkgMHglbHhcXFxcblxcXCIsIGVudHJ5LnZhbCk7XFxuIFxcdFxcdFdBUk5fT05fT05DRSgxKTtcXG4gXFx0fVxcbi1cXHRjbGVhcl9ub3RfcHJlc2VudF9mdWxsX3B0ZXModm1hLVxcdTAwM2V2bV9tbSwgYWRkciwgcHRlLCBuciwgdGxiLVxcdTAwM2VmdWxsbW0pO1xcbitcXHRjbGVhcl9ub25wcmVzZW50X3B0ZXModm1hLVxcdTAwM2V2bV9tbSwgYWRkciwgcHRlLCBucik7XFxuIFxcdCphbnlfc2tpcHBlZCA9IHphcF9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkKHZtYSwgYWRkciwgcHRlLCBuciwgZGV0YWlscywgcHRlbnQpO1xcbiBcXG4gXFx0cmV0dXJuIG5yO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNTowMTo0MS40NTU0ODcyMjFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxNzMzMjUxOTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFEVklTRV9TWVNDQUxMU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1hZHZpc2VfZnJlZV9wdGVfcmFuZ2VcIixcbiAgICBcImd1YXJkX3JlbW92ZV9wdGVfZW50cnlcIixcbiAgICBcInphcF9wdGVfcmFuZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyByZXNwb25zaWJsZSBmb3IgY2xlYXJpbmcgbm9uLXByZXNlbnQgUFRFcyBkdXJpbmcgb3BlcmF0aW9ucyBsaWtlIE1BRFZfRlJFRSwgTUFEVl9HVUFSRF9SRU1PVkUsIGFuZCB1bm1hcHBpbmcgbWVtb3J5LiBUaGVzZSBhcmUgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgY2FuIHRyaWdnZXIgY29tcGxleCBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzEwNzJlY2VhNGJkZmYxZTcxOTJhZTM4NDI5NDdjOTliYTRhOWIzMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIgMDU6MDE6MzkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oXG5pbmRleCA3NGVkZTcwNmZiMzI1ZC4uMDgzN2ViYmM1ZGNlNjMgMTAwNjQ0XG4tLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaFxuKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0LmhcbkBAIC05NDUsMTAgKzk0NSw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuICNkZWZpbmUgcHRlX2NsZWFyKG1tLGFkZHIscHRlcClcdFx0XFxcbiBcdHNldF9wdGVfYXQoKG1tKSwgKGFkZHIpLCAocHRlcCksIF9fcHRlKDBVTCkpXG4gXG4tI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVfQ0xFQVJfTk9UX1BSRVNFTlRfRlVMTFxuLSNkZWZpbmUgcHRlX2NsZWFyX25vdF9wcmVzZW50X2Z1bGwobW0sYWRkcixwdGVwLGZ1bGxtbSlcdFxcXG4tXHRfX3NldF9wdGVfYXQoKG1tKSwgKGFkZHIpLCAocHRlcCksIF9fcHRlKDBVTCksIChmdWxsbW0pKVxuLVxuICNpZmRlZiBEQ0FDSEVfQUxJQVNJTkdfUE9TU0lCTEVcbiAjZGVmaW5lIF9fSEFWRV9BUkNIX01PVkVfUFRFXG4gI2RlZmluZSBtb3ZlX3B0ZShwdGUsIG9sZF9hZGRyLCBuZXdfYWRkcilcdFx0XHRcdFxcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmggYi9pbmNsdWRlL2xpbnV4L3BndGFibGUuaFxuaW5kZXggMjk4MWUzODZkYTdiM2MuLjY1NTFmNDVhODU0MGMxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXG5AQCAtOTg4LDQ5ICs5ODgsMzAgQEAgc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9tbXVfdGxiKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0dXBkYXRlX21tdV90bGJfcmFuZ2Uodm1hLCBhZGRyZXNzLCBwdGVwLCAxKTtcbiB9XG4gXG4tLypcbi0gKiBTb21lIGFyY2hpdGVjdHVyZXMgbWF5IGJlIGFibGUgdG8gYXZvaWQgZXhwZW5zaXZlIHN5bmNocm9uaXphdGlvblxuLSAqIHByaW1pdGl2ZXMgd2hlbiBtb2RpZmljYXRpb25zIGFyZSBtYWRlIHRvIFBURSdzIHdoaWNoIGFyZSBhbHJlYWR5XG4tICogbm90IHByZXNlbnQsIG9yIGluIHRoZSBwcm9jZXNzIG9mIGFuIGFkZHJlc3Mgc3BhY2UgZGVzdHJ1Y3Rpb24uXG4tICovXG4tI2lmbmRlZiBfX0hBVkVfQVJDSF9QVEVfQ0xFQVJfTk9UX1BSRVNFTlRfRlVMTFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBwdGVfY2xlYXJfbm90X3ByZXNlbnRfZnVsbChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi1cdFx0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuLVx0XHRcdFx0XHQgICAgICBwdGVfdCAqcHRlcCxcbi1cdFx0XHRcdFx0ICAgICAgaW50IGZ1bGwpXG4te1xuLVx0cHRlX2NsZWFyKG1tLCBhZGRyZXNzLCBwdGVwKTtcbi19XG4tI2VuZGlmXG4tXG4tI2lmbmRlZiBjbGVhcl9ub3RfcHJlc2VudF9mdWxsX3B0ZXNcbiAvKipcbi0gKiBjbGVhcl9ub3RfcHJlc2VudF9mdWxsX3B0ZXMgLSBDbGVhciBtdWx0aXBsZSBub3QgcHJlc2VudCBQVEVzIHdoaWNoIGFyZVxuLSAqXHRcdFx0XHQgY29uc2VjdXRpdmUgaW4gdGhlIHBndGFibGUuXG4rICogY2xlYXJfbm9ucHJlc2VudF9wdGVzIC0gQ2xlYXIgbXVsdGlwbGUgbm9uLXByZXNlbnQgUFRFcyB3aGljaCBhcmVcbisgKlx0XHRcdCAgICBjb25zZWN1dGl2ZSBpbiB0aGUgcGd0YWJsZS5cbiAgKiBAbW06IEFkZHJlc3Mgc3BhY2UgdGhlIHB0ZXMgcmVwcmVzZW50LlxuICAqIEBhZGRyOiBBZGRyZXNzIG9mIHRoZSBmaXJzdCBwdGUuXG4gICogQHB0ZXA6IFBhZ2UgdGFibGUgcG9pbnRlciBmb3IgdGhlIGZpcnN0IGVudHJ5LlxuICAqIEBucjogTnVtYmVyIG9mIGVudHJpZXMgdG8gY2xlYXIuXG4tICogQGZ1bGw6IFdoZXRoZXIgd2UgYXJlIGNsZWFyaW5nIGEgZnVsbCBtbS5cbi0gKlxuLSAqIE1heSBiZSBvdmVycmlkZGVuIGJ5IHRoZSBhcmNoaXRlY3R1cmU7IG90aGVyd2lzZSwgaW1wbGVtZW50ZWQgYXMgYSBzaW1wbGVcbi0gKiBsb29wIG92ZXIgcHRlX2NsZWFyX25vdF9wcmVzZW50X2Z1bGwoKS5cbiAgKlxuICAqIENvbnRleHQ6IFRoZSBjYWxsZXIgaG9sZHMgdGhlIHBhZ2UgdGFibGUgbG9jay4gIFRoZSBQVEVzIGFyZSBhbGwgbm90IHByZXNlbnQuXG4gICogVGhlIFBURXMgYXJlIGFsbCBpbiB0aGUgc2FtZSBQTUQuXG4gICovXG4tc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX25vdF9wcmVzZW50X2Z1bGxfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi1cdFx0dW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgdW5zaWduZWQgaW50IG5yLCBpbnQgZnVsbClcbitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfbm9ucHJlc2VudF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuK1x0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCB1bnNpZ25lZCBpbnQgbnIpXG4ge1xuK1x0KHZvaWQpYWRkcjtcbitcbiBcdGZvciAoOzspIHtcbi1cdFx0cHRlX2NsZWFyX25vdF9wcmVzZW50X2Z1bGwobW0sIGFkZHIsIHB0ZXAsIGZ1bGwpO1xuK1x0XHRwdGVfY2xlYXIobW0sIGFkZHIsIHB0ZXApO1xuIFx0XHRpZiAoLS1uciA9PSAwKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRwdGVwKys7XG4gXHRcdGFkZHIgKz0gUEFHRV9TSVpFO1xuIFx0fVxuIH1cbi0jZW5kaWZcbiBcbiAjaWZuZGVmIF9fSEFWRV9BUkNIX1BURVBfQ0xFQVJfRkxVU0hcbiBleHRlcm4gcHRlX3QgcHRlcF9jbGVhcl9mbHVzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmRpZmYgLS1naXQgYS9tbS9tYWR2aXNlLmMgYi9tbS9tYWR2aXNlLmNcbmluZGV4IGNkOWJiMDc3MDcyY2NiLi4zZGIxNDNjNDQyZWFhYSAxMDA2NDRcbi0tLSBhL21tL21hZHZpc2UuY1xuKysrIGIvbW0vbWFkdmlzZS5jXG5AQCAtNjk1LDEwICs2OTUsMTAgQEAgc3RhdGljIGludCBtYWR2aXNlX2ZyZWVfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHRcdG5yID0gc3dhcF9wdGVfYmF0Y2gocHRlLCBtYXhfbnIsIHB0ZW50KTtcbiBcdFx0XHRcdG5yX3N3YXAgLT0gbnI7XG4gXHRcdFx0XHRzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdChlbnRyeSwgbnIpO1xuLVx0XHRcdFx0Y2xlYXJfbm90X3ByZXNlbnRfZnVsbF9wdGVzKG1tLCBhZGRyLCBwdGUsIG5yLCB0bGItXHUwMDNlZnVsbG1tKTtcbitcdFx0XHRcdGNsZWFyX25vbnByZXNlbnRfcHRlcyhtbSwgYWRkciwgcHRlLCBucik7XG4gXHRcdFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19od3BvaXNvbihlbnRyeSkgfHxcbiBcdFx0XHRcdCAgIHNvZnRsZWFmX2lzX3BvaXNvbl9tYXJrZXIoZW50cnkpKSB7XG4tXHRcdFx0XHRwdGVfY2xlYXJfbm90X3ByZXNlbnRfZnVsbChtbSwgYWRkciwgcHRlLCB0bGItXHUwMDNlZnVsbG1tKTtcbitcdFx0XHRcdHB0ZV9jbGVhcihtbSwgYWRkciwgcHRlKTtcbiBcdFx0XHR9XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbkBAIC0xMjM0LDcgKzEyMzQsNyBAQCBzdGF0aWMgaW50IGd1YXJkX3JlbW92ZV9wdGVfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFxuIFx0aWYgKGlzX2d1YXJkX3B0ZV9tYXJrZXIocHRlbnQpKSB7XG4gXHRcdC8qIFNpbXBseSBjbGVhciB0aGUgUFRFIG1hcmtlci4gKi9cbi1cdFx0cHRlX2NsZWFyX25vdF9wcmVzZW50X2Z1bGwod2Fsay1cdTAwM2VtbSwgYWRkciwgcHRlLCBmYWxzZSk7XG4rXHRcdHB0ZV9jbGVhcih3YWxrLVx1MDAzZW1tLCBhZGRyLCBwdGUpO1xuIFx0XHR1cGRhdGVfbW11X2NhY2hlKHdhbGstXHUwMDNldm1hLCBhZGRyLCBwdGUpO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcbmluZGV4IGZmMzM4YzJhYmU5MjMxLi5hM2ZjYWY4Y2ZlOGY4YiAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4rKysgYi9tbS9tZW1vcnkuY1xuQEAgLTE3OTcsNyArMTc5Nyw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHphcF9ub25wcmVzZW50X3B0ZXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbiBcdFx0cHJfYWxlcnQoXCJ1bnJlY29nbml6ZWQgc3dhcCBlbnRyeSAweCVseFxcblwiLCBlbnRyeS52YWwpO1xuIFx0XHRXQVJOX09OX09OQ0UoMSk7XG4gXHR9XG4tXHRjbGVhcl9ub3RfcHJlc2VudF9mdWxsX3B0ZXModm1hLVx1MDAzZXZtX21tLCBhZGRyLCBwdGUsIG5yLCB0bGItXHUwMDNlZnVsbG1tKTtcbitcdGNsZWFyX25vbnByZXNlbnRfcHRlcyh2bWEtXHUwMDNldm1fbW0sIGFkZHIsIHB0ZSwgbnIpO1xuIFx0KmFueV9za2lwcGVkID0gemFwX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQodm1hLCBhZGRyLCBwdGUsIG5yLCBkZXRhaWxzLCBwdGVudCk7XG4gXG4gXHRyZXR1cm4gbnI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNTowMTo0MS40NTU0OTA0MjFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTk5OTE3NzYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byBzb21lIHByZXR0eSBmdW5kYW1lbnRhbCBzdHVmZiDigJMgcGFnZSB0YWJsZSBtYW5pcHVsYXRpb24sIHNwZWNpZmljYWxseS4gSXQncyB0b3VjaGluZyBgYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0LmhgLCBgaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhgLCBgbW0vbWFkdmlzZS5jYCwgYW5kIGBtbS9tZW1vcnkuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgYXBwZWFycyB0byBiZSByZW1vdmluZyBgcHRlX2NsZWFyX25vdF9wcmVzZW50X2Z1bGxgIGFuZCBgY2xlYXJfbm90X3ByZXNlbnRfZnVsbF9wdGVzYCBhbmQgcmVwbGFjaW5nIHRoZW0gd2l0aCB0aGUgbmV3IGZ1bmN0aW9ucyBgY2xlYXJfbm9ucHJlc2VudF9wdGVzYCBhbmQgYHB0ZV9jbGVhcmAuIFRoYXQncyBhIGRlZmluaXRlIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgbm9uLXByZXNlbnQgcGFnZSB0YWJsZSBlbnRyaWVzLlxuXG5UaGlzIGhhcyBkb3duc3RyZWFtIGltcGFjdHMgb24gYSBmZXcga2V5IGFyZWFzOiBgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZWAsIGBndWFyZF9yZW1vdmVfcHRlX2VudHJ5YCwgYW5kIGB6YXBfbm9ucHJlc2VudF9wdGVzYC4gSSBzaG91bGQgY29uZmlybSBpZiBhbnkgcGFydGljdWxhciBrZXJuZWwgY29uZmlndXJhdGlvbnMgYXJlIHJlbGV2YW50IGhlcmUuIExldCdzIHNlZS4uLiBgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZWAgaXMgaW4gYG1tL21hZHZpc2UuY2AsIHNvIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgYG1tL01ha2VmaWxlYCB0byBjb25maXJtIGlmIGl0J3MgYWx3YXlzIGNvbXBpbGVkIGluLCBvciBpZiBpdCBkZXBlbmRzIG9uIGBDT05GSUdfQURWSVNFX1NZU0NBTExTYCBvciBzb21ldGhpbmcgc2ltaWxhci4gSXQgY291bGQgYmUuIEFuZCBgZ3VhcmRfcmVtb3ZlX3B0ZV9lbnRyeWAgaXMgYWxzbyBpbiBgbW0vbWFkdmlzZS5jYCwgYW5kIGB6YXBfbm9ucHJlc2VudF9wdGVzYCBpcyBpbiBgbW0vbWVtb3J5LmNgLlxuXG5Pa2F5LCBJJ2xsIGRvIGEgcXVpY2sgYGdyZXBgIGZvciBgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZWAgYW5kIGB6YXBfbm9ucHJlc2VudF9wdGVzYCB0aHJvdWdoIHRoZSBzb3VyY2UgdHJlZSB0byBiZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyBvYnZpb3VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzQ1LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDU6MDE6NDYuNjU1NDEwNjYyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMTQ2OTA0OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFkdmlzZV9mcmVlX3B0ZV9yYW5nZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tYWR2aXNlLmM9NjI3PXN0YXRpYyBsb25nIG1hZHZpc2VfcGFnZW91dChzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy02NTItXFxubW0vbWFkdmlzZS5jOjY1MzpzdGF0aWMgaW50IG1hZHZpc2VfZnJlZV9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbm1tL21hZHZpc2UuYy02NTQtXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxcbi0tXFxubW0vbWFkdmlzZS5jPTgwMD1zdGF0aWMgaW50IG1hZHZpc2VfZnJlZV9zaW5nbGVfdm1hKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTgwOS1cXHRzdHJ1Y3QgbW1fd2Fsa19vcHMgd2Fsa19vcHMgPSB7XFxubW0vbWFkdmlzZS5jOjgxMDpcXHRcXHQucG1kX2VudHJ5XFx0XFx0PSBtYWR2aXNlX2ZyZWVfcHRlX3JhbmdlLFxcbm1tL21hZHZpc2UuYy04MTEtXFx0fTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDU6MDE6NDkuNjcwMTA5NTAxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk2NzQ2MTU3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQsIGFuZCBzdW1tYXJpemluZyBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIENvZGViYXNlOiBBIEZvY3VzZWQgQ2hlY2sqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYSBzcGVjaWZpYyBmdW5jdGlvbiBvciBtb2R1bGU6IGB6YXBfbm9ucHJlc2VudF9wdGVzYC4gVGhpcyBzdWdnZXN0cyB3ZSdyZSBkZWFsaW5nIHdpdGggcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgb3Igb3V0ZGF0ZWQgZW50cmllcyDigJMgcHJvYmFibHkgc29tZXRoaW5nIHJlbGF0ZWQgdG8gUFRFcyAocGFnZSB0YWJsZSBlbnRyaWVzKSBnaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24uIFRoZSBcInphcFwiIHByZWZpeCB0eXBpY2FsbHkgc2lnbmFscyBkZWxldGlvbiBvciBpbnZhbGlkYXRpb24uIFRoZSBwaHJhc2UgXCJub25wcmVzZW50XCIgc3VnZ2VzdHMgdGhlc2UgYXJlIGVudHJpZXMgdGhhdCAqc2hvdWxkbid0KiBiZSB2YWxpZCBhbnkgbG9uZ2VyLiBTbywgdGhpcyBjb21tYW5kIHdpbGwgbGlrZWx5IGJlIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIHBlcmhhcHMgY2xlYW5pbmcgdXAgc3RhbGUgZW50cmllcyB0aGF0IGFyZSBubyBsb25nZXIgYXNzb2NpYXRlZCB3aXRoIGFjdGl2ZSBwYWdlcy4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGNvbmZpcm1pbmcgd2hhdCBpdCBhY3R1YWxseSAqZG9lcyogYnkgZXhhbWluaW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBhbmQgdGhlbiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHdoZXJlIGl0IGlzIGNhbGxlZCBpbiBteSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyNDgsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNTowMTo1Mi42Mzc1NzM0NzFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ5NTAxNzcwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6YXBfbm9ucHJlc2VudF9wdGVzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbW9yeS5jPTE2ODk9c3RhdGljIGlubGluZSBpbnQgemFwX3ByZXNlbnRfcHRlcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbi0tXFxubW0vbWVtb3J5LmMtMTczNC1cXG5tbS9tZW1vcnkuYzoxNzM1OnN0YXRpYyBpbmxpbmUgaW50IHphcF9ub25wcmVzZW50X3B0ZXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG5tbS9tZW1vcnkuYy0xNzM2LVxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwdGVfdCAqcHRlLCBwdGVfdCBwdGVudCxcXG4tLVxcbm1tL21lbW9yeS5jPTE4MDY9c3RhdGljIGlubGluZSBpbnQgZG9femFwX3B0ZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbi0tXFxubW0vbWVtb3J5LmMtMTgzNS1cXHRlbHNlXFxubW0vbWVtb3J5LmM6MTgzNjpcXHRcXHRuciArPSB6YXBfbm9ucHJlc2VudF9wdGVzKHRsYiwgdm1hLCBwdGUsIHB0ZW50LCBtYXhfbnIsIGFkZHIsXFxubW0vbWVtb3J5LmMtMTgzNy1cXHRcXHRcXHRcXHRcXHQgIGRldGFpbHMsIHJzcywgYW55X3NraXBwZWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNTowMTo1NS4xMzI1OTkxMjFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDY5MTcwMTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEkndmUgcGlucG9pbnRlZCBzb21lIGNydWNpYWwgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBoZXJlIOKAkyBkZWZpbml0ZWx5IHdvcnRoIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbi4gVGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IGFyZSBzY3JlYW1pbmcgZm9yIGF0dGVudGlvbiBhcmUgYG1hZHZpc2VfZnJlZV9wdGVfcmFuZ2VgLCBgZ3VhcmRfcmVtb3ZlX3B0ZV9lbnRyeWAsIGFuZCBgemFwX25vbnByZXNlbnRfcHRlc2AuIFdhaXQgYSBtaW51dGUsIGB6YXBfbm9ucHJlc2VudF9wdGVzYCBpcyBhbiBpbmxpbmUgZnVuY3Rpb24sIGJ1dCBpdCdzIGluZGlyZWN0bHkgY2FsbGVkIHRocm91Z2ggYSBzZXJpZXMgb2Ygb3RoZXIgZnVuY3Rpb25zIGxpa2UgYGRvX3phcF9wdGVfcmFuZ2VgLCBgemFwX3B0ZV9yYW5nZWAsIGFuZCB1bHRpbWF0ZWx5LCBgdW5tYXBfcGFnZV9yYW5nZWAuIE1ha2VzIHNlbnNlLCB0aGUgY2FsbCBjaGFpbiBpcyByZWxldmFudC5cblxuYG1hZHZpc2VfZnJlZV9wdGVfcmFuZ2VgLCBJIHJlY2FsbCwgaXMgcGFydCBvZiBgbW1fd2Fsa19vcHNgLCB0aGF0J3MgYW4gaW50ZXJlc3RpbmcgaG9vayBwb2ludCBmb3IgbWVtb3J5IHJlY2xhaW0gc2NlbmFyaW9zLiBgZ3VhcmRfcmVtb3ZlX3B0ZV9lbnRyeWAgYWxzbyByZXNpZGVzIGluIGBtbS9tYWR2aXNlLmNgLiBPa2F5LCBsZXQncyB0cmFjZSBpdHMgY2FsbCBncmFwaCBhbmQgc2VlIGV4YWN0bHkgd2hlcmUgaXQncyBiZWluZyBpbnZva2VkLiBUaGF0IGdpdmVzIG1lIGEgaGFuZGxlIG9uIHRoZSB2YXJpb3VzIGV4ZWN1dGlvbiBwYXRocyB0aHJvdWdoIHRoZSBrZXJuZWwuIFRoaXMgc2hvdWxkIHByb3ZpZGUgbWUgd2l0aCB0aGUgc3BlY2lmaWMgaW50ZXJmYWNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDcxNywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNTowMTo1OC42MDE3NzIzMTRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY0MjEwNzk1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJndWFyZF9yZW1vdmVfcHRlX2VudHJ5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21hZHZpc2UuYz0xMjE4PXN0YXRpYyBpbnQgZ3VhcmRfcmVtb3ZlX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTIyOS1cXG5tbS9tYWR2aXNlLmM6MTIzMDpzdGF0aWMgaW50IGd1YXJkX3JlbW92ZV9wdGVfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbm1tL21hZHZpc2UuYy0xMjMxLVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBuZXh0LCBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcXG4tLVxcbm1tL21hZHZpc2UuYz0xMjQ0PXN0YXRpYyBsb25nIG1hZHZpc2VfZ3VhcmRfcmVtb3ZlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTEyNTAtXFx0XFx0LnBtZF9lbnRyeSA9IGd1YXJkX3JlbW92ZV9wbWRfZW50cnksXFxubW0vbWFkdmlzZS5jOjEyNTE6XFx0XFx0LnB0ZV9lbnRyeSA9IGd1YXJkX3JlbW92ZV9wdGVfZW50cnksXFxubW0vbWFkdmlzZS5jLTEyNTItXFx0XFx0LndhbGtfbG9jayA9IGdldF93YWxrX2xvY2sobWFkdl9iZWhhdmlvci1cXHUwMDNlbG9ja19tb2RlKSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDU6MDI6MDEuMjQzODg2NzU1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYyODIwNzY1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdtIHRoaW5raW5nIGFib3V0IGl0OlxuXG4qKkFuYWx5emluZyBgbWFkdmlzZWAgYW5kIE1lbW9yeSBSZWNsYW1hdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlIGVudHJ5IHBvaW50cyBmb3IgaGFuZGxpbmcgbWVtb3J5IHJlY2xhbWF0aW9uIHRocm91Z2ggYG1hZHZpc2VgLiBUaGUgY3JpdGljYWwgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgaGVyZSBzZWVtIHRvIGJlIGBtYWR2aXNlX2d1YXJkX3JlbW92ZWAgYW5kIGBtYWR2aXNlX2ZyZWVfc2luZ2xlX3ZtYWAuIFRoYXQncyB3aGVyZSB0aGUgbWFnaWMgc3RhcnRzLlxuXG5UaGVzZSBzaG91bGQgY29ycmVzcG9uZCBkaXJlY3RseSB0byB0aGUgYE1BRFZfRlJFRWAgYW5kIGBNQURWX0dVQVJEX1JFTU9WRWAgb3BlcmF0aW9ucyAob3Igc2ltaWxhciB2YXJpYW50cyBkZXBlbmRpbmcgb24ga2VybmVsIHZlcnNpb24sIGJ1dCB0aGVzZSBhcmUgdGhlIGtleSBpZGVhcykuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aG9zZSBzeW1ib2xpYyBjb25zdGFudHMgYXJlIHByb3Blcmx5IG1hcHBlZCB0byB0aG9zZSBlbnRyeSBwb2ludHMuXG5cbk15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIHNjcnV0aW5pemUgaG93IHRob3NlIGBNQURWX0ZSRUVgIGFuZCBgTUFEVl9HVUFSRF9SRU1PVkVgIG1hZHZpc2UgZmxhZ3MgYXJlIGhhbmRsZWQgd2l0aGluIGBtbS9tYWR2aXNlLmNgLiBUaGF0J3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgYWN0dWFsIGxvZ2ljIGZvciBmcmVlaW5nIG9yIGd1YXJkaW5nIG1lbW9yeSByZWdpb25zLiBMZXQncyBzZWUgaG93IHRoZSBrZXJuZWwgaW1wbGVtZW50cyB0aGVzZSBvcHRpbWl6YXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Mzk5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDU6MDI6MDQuODcyMDk2OTdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2ODk4NjI1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTUFEVl9HVUFSRF9SRU1PVkVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC04MS0jZGVmaW5lIE1BRFZfR1VBUkRfSU5TVEFMTCAxMDJcXHRcXHQvKiBmYXRhbCBzaWduYWwgb24gYWNjZXNzIHRvIHJhbmdlICovXFxuYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaDo4MjojZGVmaW5lIE1BRFZfR1VBUkRfUkVNT1ZFIDEwM1xcdFxcdC8qIHVuZ3VhcmQgcmFuZ2UgKi9cXG5hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTgzLVxcbi0tXFxuYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTEwOC0jZGVmaW5lIE1BRFZfR1VBUkRfSU5TVEFMTCAxMDJcXHRcXHQvKiBmYXRhbCBzaWduYWwgb24gYWNjZXNzIHRvIHJhbmdlICovXFxuYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oOjEwOTojZGVmaW5lIE1BRFZfR1VBUkRfUkVNT1ZFIDEwM1xcdFxcdC8qIHVuZ3VhcmQgcmFuZ2UgKi9cXG5hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmgtMTEwLVxcbi0tXFxuYXJjaC9wYXJpc2MvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmgtNzgtI2RlZmluZSBNQURWX0dVQVJEX0lOU1RBTEwgMTAyXFx0XFx0LyogZmF0YWwgc2lnbmFsIG9uIGFjY2VzcyB0byByYW5nZSAqL1xcbmFyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oOjc5OiNkZWZpbmUgTUFEVl9HVUFSRF9SRU1PVkUgMTAzXFx0XFx0LyogdW5ndWFyZCByYW5nZSAqL1xcbmFyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTgwLVxcbi0tXFxuYXJjaC94dGVuc2EvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmgtMTE2LSNkZWZpbmUgTUFEVl9HVUFSRF9JTlNUQUxMIDEwMlxcdFxcdC8qIGZhdGFsIHNpZ25hbCBvbiBhY2Nlc3MgdG8gcmFuZ2UgKi9cXG5hcmNoL3h0ZW5zYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaDoxMTc6I2RlZmluZSBNQURWX0dVQVJEX1JFTU9WRSAxMDNcXHRcXHQvKiB1bmd1YXJkIHJhbmdlICovXFxuYXJjaC94dGVuc2EvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmgtMTE4LVxcbi0tXFxuaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmgtODItI2RlZmluZSBNQURWX0dVQVJEX0lOU1RBTEwgMTAyXFx0XFx0LyogZmF0YWwgc2lnbmFsIG9uIGFjY2VzcyB0byByYW5nZSAqL1xcbmluY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9tbWFuLWNvbW1vbi5oOjgzOiNkZWZpbmUgTUFEVl9HVUFSRF9SRU1PVkUgMTAzXFx0XFx0LyogdW5ndWFyZCByYW5nZSAqL1xcbmluY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9tbWFuLWNvbW1vbi5oLTg0LVxcbi0tXFxubW0vbWFkdmlzZS5jPTEzMzk9c3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xMzY3LVxcdFxcdHJldHVybiBtYWR2aXNlX2d1YXJkX2luc3RhbGwobWFkdl9iZWhhdmlvcik7XFxubW0vbWFkdmlzZS5jOjEzNjg6XFx0Y2FzZSBNQURWX0dVQVJEX1JFTU9WRTpcXG5tbS9tYWR2aXNlLmMtMTM2OS1cXHRcXHRyZXR1cm4gbWFkdmlzZV9ndWFyZF9yZW1vdmUobWFkdl9iZWhhdmlvcik7XFxuLS1cXG5tbS9tYWR2aXNlLmM9MTUxOT1tYWR2aXNlX2JlaGF2aW9yX3ZhbGlkKGludCBiZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xNTQ5LVxcdGNhc2UgTUFEVl9HVUFSRF9JTlNUQUxMOlxcbm1tL21hZHZpc2UuYzoxNTUwOlxcdGNhc2UgTUFEVl9HVUFSRF9SRU1PVkU6XFxubW0vbWFkdmlzZS5jLTE1NTEtI2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRVxcbi0tXFxubW0vbWFkdmlzZS5jPTE3NDM9c3RhdGljIGVudW0gbWFkdmlzZV9sb2NrX21vZGUgZ2V0X2xvY2tfbW9kZShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xNzU3LVxcdGNhc2UgTUFEVl9HVUFSRF9JTlNUQUxMOlxcbm1tL21hZHZpc2UuYzoxNzU4OlxcdGNhc2UgTUFEVl9HVUFSRF9SRU1PVkU6XFxubW0vbWFkdmlzZS5jLTE3NTktXFx0Y2FzZSBNQURWX0RPTlRORUVEOlxcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmgtODItI2RlZmluZSBNQURWX0dVQVJEX0lOU1RBTEwgMTAyXFx0XFx0LyogZmF0YWwgc2lnbmFsIG9uIGFjY2VzcyB0byByYW5nZSAqL1xcbnRvb2xzL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9tbWFuLWNvbW1vbi5oOjgzOiNkZWZpbmUgTUFEVl9HVUFSRF9SRU1PVkUgMTAzXFx0XFx0LyogdW5ndWFyZCByYW5nZSAqL1xcbnRvb2xzL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9tbWFuLWNvbW1vbi5oLTg0LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jPTM0Nz1URVNUX0YoZ3VhcmRfcmVnaW9ucywgYmFzaWMpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtMzgxLVxcdC8qIFJlbW92ZSB0aGUgZmlyc3QgZ3VhcmQgcGFnZS4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmM6MzgyOlxcdEFTU0VSVF9GQUxTRShtYWR2aXNlKHB0ciwgcGFnZV9zaXplLCBNQURWX0dVQVJEX1JFTU9WRSkpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy0zODMtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtMzg4LVxcdEFTU0VSVF9GQUxTRShtYWR2aXNlKFxcdTAwMjZwdHJbKE5VTV9QQUdFUyAtIDEpICogcGFnZV9zaXplXSwgcGFnZV9zaXplLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYzozODk6XFx0XFx0XFx0ICAgICBNQURWX0dVQVJEX1JFTU9WRSkpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy0zOTAtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtNDE1LVxcdC8qIFJlbW92ZSBndWFyZCBwYWdlcy4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmM6NDE2OlxcdEFTU0VSVF9FUShtYWR2aXNlKHB0ciwgTlVNX1BBR0VTICogcGFnZV9zaXplLCBNQURWX0dVQVJEX1JFTU9WRSksIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy00MTctXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtNDI4LVxcdCAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYzo0Mjk6XFx0QVNTRVJUX0VRKG1hZHZpc2UocHRyLCBOVU1fUEFHRVMgKiBwYWdlX3NpemUsIE1BRFZfR1VBUkRfUkVNT1ZFKSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTQzMC1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYz00NDE9VEVTVF9GKGd1YXJkX3JlZ2lvbnMsIG11bHRpX3ZtYSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy01MTEtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jOjUxMjpcXHRBU1NFUlRfRVEobWFkdmlzZShwdHJfcmVnaW9uLCAxMDAgKiBwYWdlX3NpemUsIE1BRFZfR1VBUkRfUkVNT1ZFKSwgLTEpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy01MTMtXFx0QVNTRVJUX0VRKGVycm5vLCBFTk9NRU0pO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTU1Ny1cXHR9XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jOjU1ODpcXHRBU1NFUlRfRVEobWFkdmlzZShwdHJfcmVnaW9uLCAxMDAgKiBwYWdlX3NpemUsIE1BRFZfR1VBUkRfUkVNT1ZFKSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTU1OS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgMTAwOyBpKyspIHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYz01NzM9VEVTVF9GKGd1YXJkX3JlZ2lvbnMsIHByb2Nlc3NfbWFkdmlzZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy02NDQtXFx0LyogTm93IGRvIHRoZSBzYW1lIHdpdGggdW5ndWFyZC4uLiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYzo2NDU6XFx0Y291bnQgPSBzeXNfcHJvY2Vzc19tYWR2aXNlKFBJREZEX1NFTEYsIHZlYywgNiwgTUFEVl9HVUFSRF9SRU1PVkUsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy02NDYtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmM9NzAzPVRFU1RfRihndWFyZF9yZWdpb25zLCBtcHJvdGVjdClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy03MzYtXFx0LyogTm93IHVuZ3VhcmQgdGhlIHdob2xlIHJhbmdlLiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYzo3Mzc6XFx0QVNTRVJUX0VRKG1hZHZpc2UocHRyLCAxMCAqIHBhZ2Vfc2l6ZSwgTUFEVl9HVUFSRF9SRU1PVkUpLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtNzM4LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jPTc1MT1URVNUX0YoZ3VhcmRfcmVnaW9ucywgc3BsaXRfbWVyZ2UpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtODU1LVxcdC8qIC4uLmFuZCB1bmd1YXJkIHRoZSB3aG9sZSByYW5nZS4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmM6ODU2OlxcdEFTU0VSVF9FUShtYWR2aXNlKHB0ciwgMTAgKiBwYWdlX3NpemUsIE1BRFZfR1VBUkRfUkVNT1ZFKSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTg1Ny1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYz05NDM9VEVTVF9GKGd1YXJkX3JlZ2lvbnMsIG1sb2NrKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTk5Ni1cXHQgKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmM6OTk3OlxcdEFTU0VSVF9FUShtYWR2aXNlKHB0ciwgMTAgKiBwYWdlX3NpemUsIE1BRFZfR1VBUkRfUkVNT1ZFKSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTk5OC1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYz0xMTg4PVRFU1RfRihndWFyZF9yZWdpb25zLCBmb3JrKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTEyMTYtXFx0XFx0LyogTm93IHVuZ3VhcmQgdGhlIHJhbmdlLiovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jOjEyMTc6XFx0XFx0QVNTRVJUX0VRKG1hZHZpc2UocHRyLCAxMCAqIHBhZ2Vfc2l6ZSwgTUFEVl9HVUFSRF9SRU1PVkUpLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtMTIxOC1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYz0xMjQzPVRFU1RfRihndWFyZF9yZWdpb25zLCBmb3JrX2NvdylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy0xMjgwLVxcdFxcdC8qIFJlbW92ZSBpdC4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmM6MTI4MTpcXHRcXHRBU1NFUlRfRVEobWFkdmlzZShwdHIsIDEwICogcGFnZV9zaXplLCBNQURWX0dVQVJEX1JFTU9WRSksIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy0xMjgyLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jPTE1NTQ9VEVTVF9GKGd1YXJkX3JlZ2lvbnMsIG1hZHZpc2Vfc2VxdWVudGlhbClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy0xNTk3LVxcdC8qIE5vdyByZW1vdmUgZ3VhcmQgcGFnZXMuICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jOjE1OTg6XFx0QVNTRVJUX0VRKG1hZHZpc2UocHRyLCAxMCAqIHBhZ2Vfc2l6ZSwgTUFEVl9HVUFSRF9SRU1PVkUpLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtMTU5OS1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYz0xNjExPVRFU1RfRihndWFyZF9yZWdpb25zLCBtYXBfcHJpdmF0ZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy0xNjU4LVxcdC8qIFJlbW92ZSBndWFyZCByZWdpb25zIGZyb20gc2hhcmVkIG1hcHBpbmcuICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jOjE2NTk6XFx0QVNTRVJUX0VRKG1hZHZpc2UocHRyX3NoYXJlZCwgMTAgKiBwYWdlX3NpemUsIE1BRFZfR1VBUkRfUkVNT1ZFKSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTE2NjAtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtMTY2OC1cXHQvKiBSZW1vdmUgZ3VhcmQgcmVnaW9ucyBmcm9tIHByaXZhdGUgbWFwcGluZy4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmM6MTY2OTpcXHRBU1NFUlRfRVEobWFkdmlzZShwdHJfcHJpdmF0ZSwgMTAgKiBwYWdlX3NpemUsIE1BRFZfR1VBUkRfUkVNT1ZFKSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTE2NzAtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtMTcxNy1cXHQvKiBSZW1vdmUgdGhlIGd1YXJkIHJlZ2lvbnMgYWx0b2dldGhlci4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmM6MTcxODpcXHRBU1NFUlRfRVEobWFkdmlzZShwdHJfcHJpdmF0ZSwgMTAgKiBwYWdlX3NpemUsIE1BRFZfR1VBUkRfUkVNT1ZFKSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTE3MTktXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmM9MTc1ND1URVNUX0YoZ3VhcmRfcmVnaW9ucywgcmVhZG9ubHlfZmlsZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy0xNzkzLVxcdC8qIFJlbW92ZSBndWFyZCByZWdpb25zLiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYzoxNzk0OlxcdEFTU0VSVF9FUShtYWR2aXNlKHB0ciwgMTAgKiBwYWdlX3NpemUsIE1BRFZfR1VBUkRfUkVNT1ZFKSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTE3OTUtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmM9MTkxMT1URVNUX0YoZ3VhcmRfcmVnaW9ucywgaG9sZV9wdW5jaClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy0xOTU3LVxcdC8qIE5vdyByZW1vdmUgZ3VhcmQgcmVnaW9uIHRocm91Z2hvdXQuICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jOjE5NTg6XFx0QVNTRVJUX0VRKG1hZHZpc2UocHRyLCAxMCAqIHBhZ2Vfc2l6ZSwgTUFEVl9HVUFSRF9SRU1PVkUpLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtMTk1OS1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYz0xOTc1PVRFU1RfRihndWFyZF9yZWdpb25zLCBtZW1mZF93cml0ZV9zZWFsKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTIwMjMtXFx0LyogTm93IHJlbW92ZSBndWFyZCByZWdpb25zLiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYzoyMDI0OlxcdEFTU0VSVF9FUShtYWR2aXNlKHB0ciwgMTAgKiBwYWdlX3NpemUsIE1BRFZfR1VBUkRfUkVNT1ZFKSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jLTIwMjUtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmM9MjA0Nj1URVNUX0YoZ3VhcmRfcmVnaW9ucywgYW5vbl96ZXJvcGFnZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy0yMDczLVxcdC8qIE5vdyByZW1vdmUgYWxsIGd1YXJkIHJlZ2lvbnMuICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jOjIwNzQ6XFx0QVNTRVJUX0VRKG1hZHZpc2UocHRyLCAxMCAqIHBhZ2Vfc2l6ZSwgTUFEVl9HVUFSRF9SRU1PVkUpLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtMjA3NS1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYz0yMjQ5PVRFU1RfRihndWFyZF9yZWdpb25zLCBzbWFwcylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy0yMjczLVxcdCAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYzoyMjc0OlxcdEFTU0VSVF9FUShtYWR2aXNlKHB0ciwgcGFnZV9zaXplLCBNQURWX0dVQVJEX1JFTU9WRSksIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy0yMjc1LVxcdEFTU0VSVF9UUlVFKGNoZWNrX3ZtZmxhZ19ndWFyZChwdHIpKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoPTMzPXNlcGFyYXRlZCBieSBzcGFjZXM6XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaC01Mi0tIG1hZHZfZ3VhcmRcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaDo1MzpcXHR0ZXN0IG1hZHZpc2UoMikgTUFEVl9HVUFSRF9JTlNUQUxMIGFuZCBNQURWX0dVQVJEX1JFTU9WRSBvcHRpb25zXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gtNTQtLSBtYWR2X3BvcHVsYXRlXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaD0zNDM9Q0FURUdPUlk9XFxcImhtbVxcXCIgcnVuX3Rlc3QgYmFzaCAuL3Rlc3RfaG1tLnNoIHNtb2tlXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gtMzQ0LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoOjM0NTojIE1BRFZfR1VBUkRfSU5TVEFMTCBhbmQgTUFEVl9HVUFSRF9SRU1PVkUgdGVzdHNcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaC0zNDYtQ0FURUdPUlk9XFxcIm1hZHZfZ3VhcmRcXFwiIHJ1bl90ZXN0IC4vZ3VhcmQtcmVnaW9uc1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNTowMjowNy41NjE5NjUxM1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTkxMDUwNzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyByZWdhcmRpbmcgYE1BRFZfR1VBUkRfUkVNT1ZFYDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBJbXBsZW1lbnRhdGlvbiBvZiBgTUFEVl9HVUFSRF9SRU1PVkVgKipcblxuQWxyaWdodCwgc28gYE1BRFZfR1VBUkRfUkVNT1ZFYCBpcyBzb21ldGhpbmcgbmV3LCBvciBhdCBsZWFzdCBhIG5ldyBmZWF0dXJlIGJlaW5nIGV2YWx1YXRlZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgZG9lcyB0aGlzIHRoaW5nIGhhdmUgYW55IGNvbmZpZ3VyYXRpb24ga25vYnMgb3IgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj9cIiBGaXJzdCB0aGluZydzIGZpcnN0LCBJIHNob3VsZCBmaW5kIGl0cyBpbXBsZW1lbnRhdGlvbi4gTG9va3MgbGlrZSB0aGUgaW5pdGlhbCBsZWFkIGlzIHBvaW50aW5nIHRvd2FyZHMgYG1hZHZpc2UuY2AuICBMZXQncyBoZWFkIG92ZXIgdG8gYG1tL21hZHZpc2UuY2AgYW5kIGh1bnQgZm9yIGBNQURWX0dVQVJEX1JFTU9WRWAgaXRzZWxmLiBUaGF0J2xsIGJlIHRoZSBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIGl0cyBjb3JlIGJlaGF2aW9yIGFuZCBhbnkgYXNzb2NpYXRlZCBkZXBlbmRlbmNpZXMuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjY0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDU6MDI6MTEuMTUzMDE3OTE2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDgxNDQ4ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTUFEVl9HVUFSRF9SRU1PVkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWFkdmlzZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21hZHZpc2UuYz0xMzM5PXN0YXRpYyBpbnQgbWFkdmlzZV92bWFfYmVoYXZpb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTM2Ny1cXHRcXHRyZXR1cm4gbWFkdmlzZV9ndWFyZF9pbnN0YWxsKG1hZHZfYmVoYXZpb3IpO1xcbm1tL21hZHZpc2UuYzoxMzY4OlxcdGNhc2UgTUFEVl9HVUFSRF9SRU1PVkU6XFxubW0vbWFkdmlzZS5jLTEzNjktXFx0XFx0cmV0dXJuIG1hZHZpc2VfZ3VhcmRfcmVtb3ZlKG1hZHZfYmVoYXZpb3IpO1xcbi0tXFxubW0vbWFkdmlzZS5jPTE1MTk9bWFkdmlzZV9iZWhhdmlvcl92YWxpZChpbnQgYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTU0OS1cXHRjYXNlIE1BRFZfR1VBUkRfSU5TVEFMTDpcXG5tbS9tYWR2aXNlLmM6MTU1MDpcXHRjYXNlIE1BRFZfR1VBUkRfUkVNT1ZFOlxcbm1tL21hZHZpc2UuYy0xNTUxLSNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVcXG4tLVxcbm1tL21hZHZpc2UuYz0xNzQzPXN0YXRpYyBlbnVtIG1hZHZpc2VfbG9ja19tb2RlIGdldF9sb2NrX21vZGUoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTc1Ny1cXHRjYXNlIE1BRFZfR1VBUkRfSU5TVEFMTDpcXG5tbS9tYWR2aXNlLmM6MTc1ODpcXHRjYXNlIE1BRFZfR1VBUkRfUkVNT1ZFOlxcbm1tL21hZHZpc2UuYy0xNzU5LVxcdGNhc2UgTUFEVl9ET05UTkVFRDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDU6MDI6MTEuNTAxMTY4OTEzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MTUyMzM3MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBNQURWX0dVQVJEX1JFTU9WRSdzIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byB0aGlzIGBNQURWX0dVQVJEX1JFTU9WRWAgZmxhZyBhbmQgaW1tZWRpYXRlbHkgSSdtIHdvbmRlcmluZzogaXMgdGhpcyBmZWF0dXJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQ/IElzIGl0IG9ubHkgYXZhaWxhYmxlIG9uIHNwZWNpZmljIGFyY2hpdGVjdHVyZXMgb3Igd2l0aCBjZXJ0YWluIGtlcm5lbCBjb25maWd1cmF0aW9ucz8gVGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBjb25maXJtIHRoYXQuIEkgbmVlZCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBgI2lmZGVmYCBkaXJlY3RpdmVzIHN1cnJvdW5kaW5nIGl0cyBkZWZpbml0aW9uIG9yIHVzYWdlLiBNeSBpbnN0aW5jdCBpcyB0byBnbyBkaXJlY3RseSB0byBgbW0vbWFkdmlzZS5jYCwgdGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gZmluZCB0aGUgYG1hZHZpc2VfZ3VhcmRfcmVtb3ZlYCBmdW5jdGlvbmFsaXR5LCBhc3N1bWluZyBpdCBoYXMgaXRzIG93biBkZWRpY2F0ZWQgZnVuY3Rpb24uIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDI4MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA1OjAyOjE0LjkxNjQwNTA5NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2MzIxNzg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hZHZpc2VfZ3VhcmRfcmVtb3ZlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21hZHZpc2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tYWR2aXNlLmM9MTIzMD1zdGF0aWMgaW50IGd1YXJkX3JlbW92ZV9wdGVfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vbWFkdmlzZS5jLTEyNDMtXFxubW0vbWFkdmlzZS5jOjEyNDQ6c3RhdGljIGxvbmcgbWFkdmlzZV9ndWFyZF9yZW1vdmUoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxubW0vbWFkdmlzZS5jLTEyNDUte1xcbi0tXFxubW0vbWFkdmlzZS5jPTEzMzk9c3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xMzY4LVxcdGNhc2UgTUFEVl9HVUFSRF9SRU1PVkU6XFxubW0vbWFkdmlzZS5jOjEzNjk6XFx0XFx0cmV0dXJuIG1hZHZpc2VfZ3VhcmRfcmVtb3ZlKG1hZHZfYmVoYXZpb3IpO1xcbm1tL21hZHZpc2UuYy0xMzcwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNTowMjoxNS4wNjI3MzA3NzFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI3MzE1MTI3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBNZW1vcnkgQWR2aXNlIEF2YWlsYWJpbGl0eSoqXG5cbkhtbSwgaXQncyBvY2N1cnJpbmcgdG8gbWUgdGhhdCBgTUFEVl9HVUFSRF9SRU1PVkVgIGFwcGVhcnMgdG8gYmUgcmVsaWFibHkgYXZhaWxhYmxlIHdoZW5ldmVyIGBtYWR2aXNlYCBpdHNlbGYgaXMuIFRoYXQncyBhIGdvb2Qgb2JzZXJ2YXRpb24sIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBnZW5lcmFsIGRlc2lnbiBwaGlsb3NvcGh5IG9mIHRoZXNlIG1lbW9yeSBtYW5hZ2VtZW50IHRvb2xzLiBCdXQgd2hhdCBhYm91dCBgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZWA/IFRoYXQncyBzcGVjaWZpY2FsbHkgdGllZCB0byBgTUFEVl9GUkVFYCwgcmlnaHQ/IEkgbmVlZCB0byBjbGFyaWZ5IGlmIHRoYXQgZnVuY3Rpb24ncyBhdmFpbGFiaWxpdHkgaGFzIHNpbWlsYXIgZ3VhcmFudGVlcywgb3IgaWYgdGhlcmUncyBhIG1vcmUgbnVhbmNlZCBkZXBlbmRlbmN5IGF0IHBsYXkuXG5cblRvIGJlIGNlcnRhaW4sIGl04oCZcyBiZXN0IHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UuIExldCdzIGRlbHZlIGludG8gYG1tL21hZHZpc2UuY2AuIEkgbmVlZCB0byByZXZpZXcgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBNQURWX0ZSRUVgIHdpdGhpbiB0aGF0IG1vZHVsZSB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgd2l0aCBgbWFkdmlzZWAgYW5kLCBieSBleHRlbnNpb24sIHRoZSBhdmFpbGFiaWxpdHkgYW5kIHBvdGVudGlhbCB1c2VzIG9mIGBtYWR2aXNlX2ZyZWVfcHRlX3JhbmdlYC4gVGltZSB0byBnZXQgaW50byB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3MTYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNTowMjoxOC4zMzU4ODQ4MThaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDMxNDMxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJNQURWX0ZSRUVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWFkdmlzZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21hZHZpc2UuYz04MDA9c3RhdGljIGludCBtYWR2aXNlX2ZyZWVfc2luZ2xlX3ZtYShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy04MTItXFxubW0vbWFkdmlzZS5jOjgxMzpcXHQvKiBNQURWX0ZSRUUgd29ya3MgZm9yIG9ubHkgYW5vbiB2bWEgYXQgdGhlIG1vbWVudCAqL1xcbm1tL21hZHZpc2UuYy04MTQtXFx0aWYgKCF2bWFfaXNfYW5vbnltb3VzKHZtYSkpXFxuLS1cXG5tbS9tYWR2aXNlLmM9ODk3PXN0YXRpYyBsb25nIG1hZHZpc2VfZG9udG5lZWRfZnJlZShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy05NTEtXFx0XFx0cmV0dXJuIG1hZHZpc2VfZG9udG5lZWRfc2luZ2xlX3ZtYShtYWR2X2JlaGF2aW9yKTtcXG5tbS9tYWR2aXNlLmM6OTUyOlxcdGVsc2UgaWYgKGJlaGF2aW9yID09IE1BRFZfRlJFRSlcXG5tbS9tYWR2aXNlLmMtOTUzLVxcdFxcdHJldHVybiBtYWR2aXNlX2ZyZWVfc2luZ2xlX3ZtYShtYWR2X2JlaGF2aW9yKTtcXG4tLVxcbm1tL21hZHZpc2UuYz0xMjY4PXN0YXRpYyBib29sIGlzX2Rpc2NhcmQoaW50IGJlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTEyNzAtXFx0c3dpdGNoIChiZWhhdmlvcikge1xcbm1tL21hZHZpc2UuYzoxMjcxOlxcdGNhc2UgTUFEVl9GUkVFOlxcbm1tL21hZHZpc2UuYy0xMjcyLVxcdGNhc2UgTUFEVl9ET05UTkVFRDpcXG4tLVxcbm1tL21hZHZpc2UuYz0xMzM5PXN0YXRpYyBpbnQgbWFkdmlzZV92bWFfYmVoYXZpb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTM1OC1cXHRcXHRyZXR1cm4gbWFkdmlzZV9wYWdlb3V0KG1hZHZfYmVoYXZpb3IpO1xcbm1tL21hZHZpc2UuYzoxMzU5OlxcdGNhc2UgTUFEVl9GUkVFOlxcbm1tL21hZHZpc2UuYy0xMzYwLVxcdGNhc2UgTUFEVl9ET05UTkVFRDpcXG4tLVxcbm1tL21hZHZpc2UuYz0xNTE5PW1hZHZpc2VfYmVoYXZpb3JfdmFsaWQoaW50IGJlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTE1MzAtXFx0Y2FzZSBNQURWX0RPTlRORUVEX0xPQ0tFRDpcXG5tbS9tYWR2aXNlLmM6MTUzMTpcXHRjYXNlIE1BRFZfRlJFRTpcXG5tbS9tYWR2aXNlLmMtMTUzMi1cXHRjYXNlIE1BRFZfQ09MRDpcXG4tLVxcbm1tL21hZHZpc2UuYz0xNzQzPXN0YXRpYyBlbnVtIG1hZHZpc2VfbG9ja19tb2RlIGdldF9sb2NrX21vZGUoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTc2MC1cXHRjYXNlIE1BRFZfRE9OVE5FRURfTE9DS0VEOlxcbm1tL21hZHZpc2UuYzoxNzYxOlxcdGNhc2UgTUFEVl9GUkVFOlxcbm1tL21hZHZpc2UuYy0xNzYyLVxcdFxcdHJldHVybiBNQURWSVNFX1ZNQV9SRUFEX0xPQ0s7XFxuLS1cXG5tbS9tYWR2aXNlLmM9MTgxMz1zdGF0aWMgYm9vbCBtYWR2aXNlX2JhdGNoX3RsYl9mbHVzaChpbnQgYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTgxNy1cXHRjYXNlIE1BRFZfRE9OVE5FRURfTE9DS0VEOlxcbm1tL21hZHZpc2UuYzoxODE4OlxcdGNhc2UgTUFEVl9GUkVFOlxcbm1tL21hZHZpc2UuYy0xODE5LVxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxubW0vbWFkdmlzZS5jPTE4ODg9c3RhdGljIGludCBtYWR2aXNlX2RvX2JlaGF2aW9yKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW5faW4sXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTkzNC0gKlxcdFxcdHNvIHRoZSBrZXJuZWwgY2FuIGZyZWUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBpdC5cXG5tbS9tYWR2aXNlLmM6MTkzNTogKiAgTUFEVl9GUkVFIC0gdGhlIGFwcGxpY2F0aW9uIG1hcmtzIHBhZ2VzIGluIHRoZSBnaXZlbiByYW5nZSBhcyBsYXp5IGZyZWUsXFxubW0vbWFkdmlzZS5jLTE5MzYtICpcXHRcXHR3aGVyZSBhY3R1YWwgcHVyZ2VzIGFyZSBwb3N0cG9uZWQgdW50aWwgbWVtb3J5IHByZXNzdXJlIGhhcHBlbnMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA1OjAyOjE4LjQ3MDIwMzA3M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDQ1NzE4MTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqXG5cbkhtbSwgYENPTkZJR19BRFZJU0VfU1lTQ0FMTFNgLi4uIEknbSBnZXR0aW5nIGEgZmVlbGluZyB0aGF0IHNvbWV0aGluZyBpcyB1c2luZyBpdCwgYnV0IEkgY2FuJ3QgcXVpdGUgcGxhY2UgaXQuIE9rYXksIGJlc3QgdG8ganVzdCBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIHNvdXJjZS4gTXkgaW5zdGluY3QgaXMgdGhhdCB0aGlzIGlzIHNvbWV0aGluZyB0aGF0J3MgbGlrZWx5IHRpZWQgaW50byBtZW1vcnkgbWFuYWdlbWVudCwgc28gSSBzaG91bGQgcHJvYmFibHkgc3RhcnQgd2l0aCB0aGUgYG1tL2AgZGlyZWN0b3J5LiBSaWdodCwgbGV0J3MgdGFrZSBhIHBlZWsgYXQgYG1tL01ha2VmaWxlYC4gVGhhdCBzaG91bGQgYmUgdGhlIHF1aWNrZXN0IHdheSB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCBtaWdodCBiZSBjb25kaXRpb25hbGx5IGNvbXBpbGluZyBiYXNlZCBvbiB0aGF0IGZsYWcuIEhvcGVmdWxseSwgaXTigJlzIHJlYXNvbmFibHkgd2VsbC1jb21tZW50ZWQgYW5kIEkgY2FuIGp1c3QgcGFyc2UgdGhhdCBxdWlja2x5IHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIEl0J3MgYWxtb3N0IGFsd2F5cyBhIGdvb2Qgc3RyYXRlZ3kgdG8gc3RhcnQgd2l0aCB0aGUgYnVpbGQgc3lzdGVtIGl0c2VsZiB3aGVuIGNoYXNpbmcgZG93biBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5MDgsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNTowMjoyMS41MTU5MjQ5OFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTY5NTMyMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFkdmlzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT03ND1pZmRlZiBDT05GSUdfTU1VXFxubW0vTWFrZWZpbGU6NzU6XFx0b2JqLSQoQ09ORklHX0FEVklTRV9TWVNDQUxMUylcXHQrPSBtYWR2aXNlLm9cXG5tbS9NYWtlZmlsZS03Ni1lbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNTowMjoyMS42MTI4ODU4NTZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM2NDU2NjAxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKkNoZWNraW5nIHRoZSBEZXBlbmRlbmNpZXMgZm9yIGBtYWR2aXNlLmNgKipcblxuQWxyaWdodCwgc28gSSdtIHByZXR0eSBzdXJlIGBDT05GSUdfQURWSVNFX1NZU0NBTExTYCBpcyBhIHJlcXVpcmVtZW50IGZvciBgbWFkdmlzZS5jYC4gVGhhdCdzIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYWN0dWFsbHkgYmVpbmcgZW5hYmxlZCB3aGVuIEkgZXhwZWN0IGl0IHRvIGJlLlxuXG5IYW5nIG9uIGEgc2Vjb25k4oCmIEkgbmVlZCB0byBjb25zaWRlciBgemFwX25vbnByZXNlbnRfcHRlc2AuIEkgc2VlbSB0byByZWNhbGwgdGhhdCBiZWluZyBpbiBgbW0vbWVtb3J5LmNgLiBCdXQgYG1tL21lbW9yeS5jYCBpcyBhbHdheXMgY29tcGlsZWQsIGlzbid0IGl0PyBJZiBzbywgd2h5IHdvdWxkIHRoaXMgYENPTkZJR2AgbWF0dGVyIGZvciBzb21ldGhpbmcgdGhhdCdzIGFsd2F5cyBidWlsdD8gU29tZXRoaW5nIGRvZXNuJ3QgcXVpdGUgYWRkIHVwIGhlcmUsIHNvIHRoZSBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eS5cblxuTGV0IG1lIGdvIGxvb2sgYXQgYGluaXQvS2NvbmZpZ2Agb3Igc29tZXdoZXJlIHNpbWlsYXIgdG8gZG91YmxlLWNoZWNrIHRoaXMgYENPTkZJR19BRFZJU0VfU1lTQ0FMTFNgIGFuZCBtYWtlIHN1cmUgSSBmdWxseSB1bmRlcnN0YW5kIHdoZXJlIGl0IGNvbWVzIGZyb20gYW5kIHdoYXQgaXQgY29udHJvbHMuIEl0J3MgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIHN5c2NhbGwgaXRzZWxmLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjIwMywiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA1OjAyOjI1Ljk3NzQ1NTEwNFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYzNDYxNjU2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQURWSVNFX1NZU0NBTExTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xOTM3PWNvbmZpZyBJT19VUklOR19NT0NLX0ZJTEVcXG4tLVxcbmluaXQvS2NvbmZpZy0xOTQ3LVxcbmluaXQvS2NvbmZpZzoxOTQ4OmNvbmZpZyBBRFZJU0VfU1lTQ0FMTFNcXG5pbml0L0tjb25maWctMTk0OS1cXHRib29sIFxcXCJFbmFibGUgbWFkdmlzZS9mYWR2aXNlIHN5c2NhbGxzXFxcIiBpZiBFWFBFUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDU6MDI6MjguNjEyMDc4MTA1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNjEzMzkxMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgRGVmYXVsdCBCZWhhdmlvciBvZiBQVEUgQ2xlYXJpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgY2xlYXJpbmcgb2YgcGFnZSB0YWJsZSBlbnRyaWVzIHdvcmtzLiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IHRoaXMgYHphcF9ub25wcmVzZW50X3B0ZXNgIGZ1bmN0aW9uYWxpdHkgaXMgZW5hYmxlZCBieSBkZWZhdWx0LiBJIG5lZWQgdG8gY29uZmlybSB0aGlzLiBUaGUgZmlyc3QgcGxhY2UgdG8gY2hlY2sgaXMgYG1tL21lbW9yeS5jYC4gSSByZWNhbGwgYSBwYXRjaCB0aGF0IGRlYWx0IHdpdGggdGhpcyBhcmVhLCBzcGVjaWZpY2FsbHkgcmVwbGFjaW5nIGBjbGVhcl9ub3RfcHJlc2VudF9mdWxsX3B0ZXNgIHdpdGggYGNsZWFyX25vbnByZXNlbnRfcHRlc2AuIFRoYXQgY2hhbmdlIGlzIHNpZ25pZmljYW50LiBOb3csIHdoZXJlIGlzIHRoaXMgbmV3IGBjbGVhcl9ub25wcmVzZW50X3B0ZXNgIGZ1bmN0aW9uIGRlZmluZWQ/IEFoLCBpdCdzIGFuIGlubGluZSBzdGF0aWMgZnVuY3Rpb247IEknbGwgZmluZCBpdCBpbiBgaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhgLlxuXG5Ob3csIEkgbmVlZCB0byB6b29tIGluIG9uIGhvdyB0aGlzIGlzIHV0aWxpemVkLiBJIHdhbnQgdG8gc2VlIHRoaXMgaW4gY29udGV4dCwgc28gSSdsbCBiZSBmb2N1c2luZyBvbjogYG1hZHZpc2VfZnJlZV9wdGVfcmFuZ2VgLCBgZ3VhcmRfcmVtb3ZlX3B0ZV9lbnRyeWAsIGFuZCBgemFwX25vbnByZXNlbnRfcHRlc2AgdG8gYmVnaW4gd2l0aC4gXG5cblRvIG1ha2Ugc3VyZSBJJ3ZlIGdvdCBhIGNvbXByZWhlbnNpdmUgdmlldywgSSdsbCBuZWVkIHRvIGNoZWNrIGlmIGBjbGVhcl9ub25wcmVzZW50X3B0ZXNgIGlzIHVzZWQgaW4gYW55IG90aGVyIHBsYWNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2MzAsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDU6MDI6MzIuNjczNDIwNjc0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzMxMTg2ODM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNsZWFyX25vbnByZXNlbnRfcHRlc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3BndGFibGUuaD05ODU9c3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9tbXVfdGxiKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtOTkxLS8qKlxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oOjk5MjogKiBjbGVhcl9ub25wcmVzZW50X3B0ZXMgLSBDbGVhciBtdWx0aXBsZSBub24tcHJlc2VudCBQVEVzIHdoaWNoIGFyZVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTk5My0gKlxcdFxcdFxcdCAgICBjb25zZWN1dGl2ZSBpbiB0aGUgcGd0YWJsZS5cXG4tLVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTEwMDEtICovXFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg6MTAwMjpzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfbm9ucHJlc2VudF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTEwMDMtXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgdW5zaWduZWQgaW50IG5yKVxcbi0tXFxubW0vbWFkdmlzZS5jPTY1Mz1zdGF0aWMgaW50IG1hZHZpc2VfZnJlZV9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vbWFkdmlzZS5jLTY5Ny1cXHRcXHRcXHRcXHRzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdChlbnRyeSwgbnIpO1xcbm1tL21hZHZpc2UuYzo2OTg6XFx0XFx0XFx0XFx0Y2xlYXJfbm9ucHJlc2VudF9wdGVzKG1tLCBhZGRyLCBwdGUsIG5yKTtcXG5tbS9tYWR2aXNlLmMtNjk5LVxcdFxcdFxcdH0gZWxzZSBpZiAoc29mdGxlYWZfaXNfaHdwb2lzb24oZW50cnkpIHx8XFxuLS1cXG5tbS9tZW1vcnkuYz0xNzM1PXN0YXRpYyBpbmxpbmUgaW50IHphcF9ub25wcmVzZW50X3B0ZXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG4tLVxcbm1tL21lbW9yeS5jLTE3OTktXFx0fVxcbm1tL21lbW9yeS5jOjE4MDA6XFx0Y2xlYXJfbm9ucHJlc2VudF9wdGVzKHZtYS1cXHUwMDNldm1fbW0sIGFkZHIsIHB0ZSwgbnIpO1xcbm1tL21lbW9yeS5jLTE4MDEtXFx0KmFueV9za2lwcGVkID0gemFwX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQodm1hLCBhZGRyLCBwdGUsIG5yLCBkZXRhaWxzLCBwdGVudCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA1OjAyOjM1LjQwNDYxNDg5MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODMwNzIyOTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUsIG15IG1lbnRhbCBnZWFycyBhcmUgdHVybmluZy4uLlxuXG4qKkFuYWx5emluZyBQYWdlIFRhYmxlIEVudHJ5IChQVEUpIE1hbmFnZW1lbnQgRnVuY3Rpb25zKipcblxuUmlnaHQsIEknbSBmb2N1c2luZyBpbiBvbiB0aGVzZSBrZXkgZnVuY3Rpb25zOiBgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZWAsIGBndWFyZF9yZW1vdmVfcHRlX2VudHJ5YCwgYW5kIHRoYXQgcGVza3kgYHphcF9ub25wcmVzZW50X3B0ZXNgLiBOb3csIHdhaXQgYSBtaW51dGUsIHdhc24ndCBgemFwX25vbnByZXNlbnRfcHRlc2Agc3RhdGljIGlubGluZT8gVGhhdCBtZWFucyBpdCdzIHByb2JhYmx5ICpub3QqIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIGNhbGwgSSdtIGFmdGVyLCBtb3JlIGxpa2UgYSBoZWxwZXIsIHBlcmhhcHMgbGVhZGluZyBtZSBpbnN0ZWFkIHRvIGBkb196YXBfcHRlX3JhbmdlYCBvciBldmVuIGp1c3QgdGhlIHBsYWluIGB6YXBfcHRlX3JhbmdlYC4gVGltZSB0byBkb3VibGUtY2hlY2sgdGhhdCBgemFwX25vbnByZXNlbnRfcHRlc2AgYWdhaW4sIGp1c3QgdG8gYmUgc3VyZSBJJ20gbm90IG1pc3Npbmcgc29tZXRoaW5nIHN1YnRsZSBpbiBpdHMgaW1wbGVtZW50YXRpb24gdGhhdCBtaWdodCBwb2ludCB0byB0aGUgY29yZSBvcGVyYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHRoZSBhY3R1YWwgYWN0aW9ucyB0aGVzZSBmdW5jdGlvbnMgYXJlIG9yY2hlc3RyYXRpbmcuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1MTcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNTowMjozOS4yMzUzNDE0NzlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyMTkwNDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInphcF9ub25wcmVzZW50X3B0ZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtb3J5LmM9MTY4OT1zdGF0aWMgaW5saW5lIGludCB6YXBfcHJlc2VudF9wdGVzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuLS1cXG5tbS9tZW1vcnkuYy0xNzM0LVxcbm1tL21lbW9yeS5jOjE3MzU6c3RhdGljIGlubGluZSBpbnQgemFwX25vbnByZXNlbnRfcHRlcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbm1tL21lbW9yeS5jLTE3MzYtXFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHB0ZV90ICpwdGUsIHB0ZV90IHB0ZW50LFxcbi0tXFxubW0vbWVtb3J5LmM9MTgwNj1zdGF0aWMgaW5saW5lIGludCBkb196YXBfcHRlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuLS1cXG5tbS9tZW1vcnkuYy0xODM1LVxcdGVsc2VcXG5tbS9tZW1vcnkuYzoxODM2OlxcdFxcdG5yICs9IHphcF9ub25wcmVzZW50X3B0ZXModGxiLCB2bWEsIHB0ZSwgcHRlbnQsIG1heF9uciwgYWRkcixcXG5tbS9tZW1vcnkuYy0xODM3LVxcdFxcdFxcdFxcdFxcdCAgZGV0YWlscywgcnNzLCBhbnlfc2tpcHBlZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA1OjAyOjM5LjMyNzUzNjk1NloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDAxNzU5MzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIHdpdGggdGhlIGJvbGRlZCBoZWFkZXI6XG5cbioqRGl2aW5nIGludG8gdGhlIFBURSBSYW5nZSBaYXBwZXIqKlxuXG5SaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBgZG9femFwX3B0ZV9yYW5nZWAsIGFuZCBpdCdzIGZsYWdnZWQgYXMgc3RhdGljIGlubGluZSwgd2hpY2ggc3VnZ2VzdHMgYSBwZXJmb3JtYW5jZS1mb2N1c2VkIGltcGxlbWVudGF0aW9uLiBUaGF0J3MgZ29vZDsgbGlrZWx5IHRoZXJlJ3Mgc29tZSBsb3ctbGV2ZWwgb3B0aW1pemF0aW9uIGdvaW5nIG9uIGhlcmUuIENvbnNpZGVyaW5nIGl0cyBuYW1lLCBJJ20gZ3Vlc3NpbmcgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgY2xlYXJpbmcgb3IgaW52YWxpZGF0aW5nIGEgcmFuZ2Ugb2YgcGFnZSB0YWJsZSBlbnRyaWVzLiBMZXQgbWUgc2VlIHdoYXQncyBhY3R1YWxseSBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIFRpbWUgdG8gZGlnIGludG8gdGhlIGRlZmluaXRpb24gb2YgYGRvX3phcF9wdGVfcmFuZ2VgIGFuZCBzZWUgaG93IHRoaXMgaW5saW5lIGJlYXN0IG9wZXJhdGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDA3MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA1OjAyOjQyLjcyOTI5OTEyOVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5MDIwODE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRvX3phcF9wdGVfcmFuZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtb3J5LmM9MTczNT1zdGF0aWMgaW5saW5lIGludCB6YXBfbm9ucHJlc2VudF9wdGVzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuLS1cXG5tbS9tZW1vcnkuYy0xODA1LVxcbm1tL21lbW9yeS5jOjE4MDY6c3RhdGljIGlubGluZSBpbnQgZG9femFwX3B0ZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbm1tL21lbW9yeS5jLTE4MDctXFx0XFx0XFx0XFx0ICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHB0ZV90ICpwdGUsXFxuLS1cXG5tbS9tZW1vcnkuYz0xOTAwPXN0YXRpYyB1bnNpZ25lZCBsb25nIHphcF9wdGVfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG4tLVxcbm1tL21lbW9yeS5jLTE5MzMtXFxubW0vbWVtb3J5LmM6MTkzNDpcXHRcXHRuciA9IGRvX3phcF9wdGVfcmFuZ2UodGxiLCB2bWEsIHB0ZSwgYWRkciwgZW5kLCBkZXRhaWxzLCByc3MsXFxubW0vbWVtb3J5LmMtMTkzNS1cXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2Zm9yY2VfZmx1c2gsIFxcdTAwMjZmb3JjZV9icmVhaywgXFx1MDAyNmFueV9za2lwcGVkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDU6MDI6NDIuODU4MzY3NDY0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3OTg1MDQwNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgemFwX3B0ZV9yYW5nZWAqKlxuXG5Pa2F5LCBzbyBgemFwX3B0ZV9yYW5nZWAgaXNuJ3QgYW4gaW5saW5lIGZ1bmN0aW9uIOKAkyB0aGF0J3MgYSBrZXkgb2JzZXJ2YXRpb24uIFRoYXQgYWxvbmUgdGVsbHMgdXMgc29tZXRoaW5nIGFib3V0IGl0cyBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wYWN0LCBhcyBvcHBvc2VkIHRvIGEgZnVuY3Rpb24gdGhhdCBjb3VsZCBiZSBvcHRpbWl6ZWQgZGlyZWN0bHkgYnkgdGhlIGNvbXBpbGVyLiBHaXZlbiB0aGlzLCBpdCBtYWtlcyBhIGdvb2QgY2FuZGlkYXRlIGZvciBkZWVwZXIgaW52ZXN0aWdhdGlvbi4gTGV0J3MgZGlnIGludG8gYHphcF9wdGVfcmFuZ2VgIGFuZCBzZWUgZXhhY3RseSB3aGF0IGl0J3MgZG9pbmcuIFdoYXQncyBpdCBkb2luZyBhbmQgd2h5IGlzbid0IGl0IGluLWxpbmU/IExldCdzIHRyYWNlIHRocm91Z2ggaXRzIGltcGxlbWVudGF0aW9uIGFuZCBzZWUgd2hlcmUgdGhlIGhvdHNwb3RzIG1pZ2h0IGJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDUyMywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA1OjAyOjQ1LjY1Njg3NTRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODg3ODk0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6YXBfcHRlX3JhbmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbW9yeS5jPTE3MzU9c3RhdGljIGlubGluZSBpbnQgemFwX25vbnByZXNlbnRfcHRlcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbi0tXFxubW0vbWVtb3J5LmMtMTgwNS1cXG5tbS9tZW1vcnkuYzoxODA2OnN0YXRpYyBpbmxpbmUgaW50IGRvX3phcF9wdGVfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG5tbS9tZW1vcnkuYy0xODA3LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwdGVfdCAqcHRlLFxcbi0tXFxubW0vbWVtb3J5LmM9MTg2Nj1zdGF0aWMgYm9vbCB6YXBfcHRlX3RhYmxlX2lmX2VtcHR5KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLFxcbi0tXFxubW0vbWVtb3J5LmMtMTg5OS1cXG5tbS9tZW1vcnkuYzoxOTAwOnN0YXRpYyB1bnNpZ25lZCBsb25nIHphcF9wdGVfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG5tbS9tZW1vcnkuYy0xOTAxLVxcdFxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwbWRfdCAqcG1kLFxcbi0tXFxubW0vbWVtb3J5LmMtMTkzMy1cXG5tbS9tZW1vcnkuYzoxOTM0OlxcdFxcdG5yID0gZG9femFwX3B0ZV9yYW5nZSh0bGIsIHZtYSwgcHRlLCBhZGRyLCBlbmQsIGRldGFpbHMsIHJzcyxcXG5tbS9tZW1vcnkuYy0xOTM1LVxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZmb3JjZV9mbHVzaCwgXFx1MDAyNmZvcmNlX2JyZWFrLCBcXHUwMDI2YW55X3NraXBwZWQpO1xcbi0tXFxubW0vbWVtb3J5LmM9MTk5Mj1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgemFwX3BtZF9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbi0tXFxubW0vbWVtb3J5LmMtMjAxOS1cXHRcXHR9XFxubW0vbWVtb3J5LmM6MjAyMDpcXHRcXHRhZGRyID0gemFwX3B0ZV9yYW5nZSh0bGIsIHZtYSwgcG1kLCBhZGRyLCBuZXh0LCBkZXRhaWxzKTtcXG5tbS9tZW1vcnkuYy0yMDIxLVxcdFxcdGlmIChhZGRyICE9IG5leHQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA1OjAyOjQ1Ljc3NTc1ODMzNVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3Mjc5MDIxMTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2gsIGFuZCBteSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgaXQncyBnb3Qgc29tZSBpbnRlcmVzdGluZyBhbmdsZXMgZm9yIGZ1enppbmcuIGB6YXBfcHRlX3JhbmdlYCBzZWVtcyBsaWtlIGEga2V5IGZ1bmN0aW9uIHRvIHRhcmdldCDigJMgdGhhdCdzIGRlZmluaXRlbHkgYSBwbGFjZSB3aGVyZSB0aGluZ3MgY291bGQgZ2V0IGludGVyZXN0aW5nIHdpdGggcGFnZSB0YWJsZSBpbnRlcmFjdGlvbnMuIEkgYWxzbyBzZWUgdGhhdCBgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZWAgaXMgYSBzdHJvbmcgY2FuZGlkYXRlIGFuZCBgZ3VhcmRfcmVtb3ZlX3B0ZV9lbnRyeWAuIFdhaXQsIGhvbGQgb24g4oCTIGBndWFyZF9yZW1vdmVfcHRlX2VudHJ5YCBpcyBzdGF0aWMsIHdoaWNoIHNpbXBsaWZpZXMgdGhpbmdzLiBMZXNzIGdsb2JhbCBleHBvc3VyZSBpcyBnZW5lcmFsbHkgYmV0dGVyLCBidXQgdGhlcmUgbWlnaHQgYmUgaW5kaXJlY3QgaW50ZXJhY3Rpb25zLlxuXG5MZXQncyBzZWXigKYgYW55IGNvbmZpZ3VyYXRpb24gZmxhZ3MgdGhhdCBhcmUgY3J1Y2lhbCBoZXJlPyBSaWdodCwgYENPTkZJR19BRFZJU0VfU1lTQ0FMTFNgIGlzIHRoZSBvYnZpb3VzIG9uZSwgZXNwZWNpYWxseSBzaW5jZSB0aGUgcGF0Y2ggaXMgdG91Y2hpbmcgYG1hZHZpc2UuY2AgcHJldHR5IGV4dGVuc2l2ZWx5LiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzbuKAmXQgb3Zlcmx5IGFyY2hpdGVjdHVyZS1zcGVjaWZpYy4gSSBzZWUgYSBtb2RpZmljYXRpb24gdG8gYGFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oYCwgd2hpY2ggcmFpc2VzIGEgZmxhZy4gQnV0IHRoZSByZWFsIG1lYXQgb2YgdGhlIGNoYW5nZXMgaXMgaW4gdGhvc2UgY29yZSBmaWxlczogYGluY2x1ZGUvbGludXgvcGd0YWJsZS5oYCwgYG1tL21hZHZpc2UuY2AsIGFuZCBgbW0vbWVtb3J5LmNgLiBUaGUgc3BhcmMtc3BlY2lmaWMgY2hhbmdlIGp1c3QgZ2V0cyByaWQgb2YgYW4gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG92ZXJyaWRlLCBgcHRlX2NsZWFyX25vdF9wcmVzZW50X2Z1bGxgLCB3aGljaCB0aGUgZ2VuZXJpYyBjb2RlIGlzIG5vdyBoYW5kbGluZy4gU28gaXQncyBsb29raW5nIHByZXR0eSBnZW5lcmljIG92ZXJhbGwuXG5cbkFscmlnaHQsIGxldCdzIHB1bGwgYWxsIHRoaXMgdG9nZXRoZXIgaW50byBhIGNvbmNpc2Ugc3VtbWFyeS4gVGhpcyBpcyBsb29raW5nIHByb21pc2luZyBmb3IgZnV6emluZy5cblxuKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWUsIGRlZmluaXRlbHkgd29ydGggdGhlIGVmZm9ydC5cbiogICAqKkZvY3VzU3ltYm9sczoqKiBgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZWAsIGBndWFyZF9yZW1vdmVfcHRlX2VudHJ5YCwgYHphcF9wdGVfcmFuZ2VgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyBJJ20gbW9zdCBpbnRlcmVzdGVkIGluLlxuKiAgICoqRW5hYmxlQ29uZmlnczoqKiBgQURWSVNFX1NZU0NBTExTYCBpcyBlc3NlbnRpYWwuXG4qICAgKipSZWFzb25pbmc6KiogVGhlIGNoYW5nZXMgYXJlIGhhcHBlbmluZyBpbiBjcml0aWNhbCBtZW1vcnkgbWFuYWdlbWVudCByb3V0aW5lcyByZXNwb25zaWJsZSBmb3IgY2xlYXJpbmcgbm9uLXByZXNlbnQgUFRFcyBkdXJpbmcgb3BlcmF0aW9ucyBsaWtlIGBNQURWX0ZSRUVgLCBgTUFEVl9HVUFSRF9SRU1PVkVgLCBhbmQgbWVtb3J5IHVubWFwcGluZy4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBzeXN0ZW0gY2FsbHMsIG1lYW5pbmcgd2UgY2FuIHRyaWdnZXIgY29tcGxleCBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbnMsIG9wZW5pbmcgYSBwb3RlbnRpYWwgZm9yIHZ1bG5lcmFiaWxpdGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxNTEsIk91dHB1dFRva2VucyI6MTE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA1OjAyOjUzLjA1NDc4MjMyNFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMzk0ODM2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQURWSVNFX1NZU0NBTExTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWFkdmlzZV9mcmVlX3B0ZV9yYW5nZVwiLFxuICAgIFwiZ3VhcmRfcmVtb3ZlX3B0ZV9lbnRyeVwiLFxuICAgIFwiemFwX3B0ZV9yYW5nZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zIHJlc3BvbnNpYmxlIGZvciBjbGVhcmluZyBub24tcHJlc2VudCBQVEVzIGR1cmluZyBvcGVyYXRpb25zIGxpa2UgTUFEVl9GUkVFLCBNQURWX0dVQVJEX1JFTU9WRSwgYW5kIHVubWFwcGluZyBtZW1vcnkuIFRoZXNlIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGFuZCBjYW4gdHJpZ2dlciBjb21wbGV4IHBhZ2UgdGFibGUgbWFuaXB1bGF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRFZJU0VfU1lTQ0FMTFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYWR2aXNlX2ZyZWVfcHRlX3JhbmdlXCIsXG4gICAgXCJndWFyZF9yZW1vdmVfcHRlX2VudHJ5XCIsXG4gICAgXCJ6YXBfcHRlX3JhbmdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIGNsZWFyaW5nIG5vbi1wcmVzZW50IFBURXMgZHVyaW5nIG9wZXJhdGlvbnMgbGlrZSBNQURWX0ZSRUUsIE1BRFZfR1VBUkRfUkVNT1ZFLCBhbmQgdW5tYXBwaW5nIG1lbW9yeS4gVGhlc2UgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYW5kIGNhbiB0cmlnZ2VyIGNvbXBsZXggcGFnZSB0YWJsZSBtYW5pcHVsYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowhv2hs[1] Phase: Succeeded StartedAt: 2026-07-02 05:03:04 +0000 UTC FinishedAt: 2026-07-02 05:03:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhv2hs[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-02 05:03:04 +0000 UTC FinishedAt: 2026-07-02 05:03:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhv2hs[2] Phase: Succeeded StartedAt: 2026-07-02 05:03:04 +0000 UTC FinishedAt: 2026-07-02 06:12:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhv2hs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_pte_range","guard_remove_pte_entry","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"6435682e-4e6b-4d72-b92f-8d65599f8ee4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-02 05:03:04 +0000 UTC FinishedAt: 2026-07-02 06:12:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_pte_range","guard_remove_pte_entry","zap_pte_range"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"6435682e-4e6b-4d72-b92f-8d65599f8ee4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowhv2hs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_pte_range","guard_remove_pte_entry","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"6435682e-4e6b-4d72-b92f-8d65599f8ee4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-02 05:03:04 +0000 UTC FinishedAt: 2026-07-02 05:04:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhv2hs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_pte_range","guard_remove_pte_entry","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"6435682e-4e6b-4d72-b92f-8d65599f8ee4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-02 05:03:04 +0000 UTC FinishedAt: 2026-07-02 05:04:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowhv2hs/series-workflowhv2hs-convert-artifact-3979706624/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhv2hs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_pte_range","guard_remove_pte_entry","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"6435682e-4e6b-4d72-b92f-8d65599f8ee4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-02 05:04:08 +0000 UTC FinishedAt: 2026-07-02 05:42:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhv2hs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_pte_range","guard_remove_pte_entry","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"6435682e-4e6b-4d72-b92f-8d65599f8ee4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-02 05:04:08 +0000 UTC FinishedAt: 2026-07-02 05:42:24 +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:*c3301b7d-4c67-43b8-af1b-c1e25e3bd78e,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-workflowhv2hs/series-workflowhv2hs-convert-artifact-3979706624/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": "cbf4e3a7-b1c7-4184-a916-5a2bf5721aec", "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-workflowhv2hs/series-workflowhv2hs-build-action-3410152390/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhv2hs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_pte_range","guard_remove_pte_entry","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"6435682e-4e6b-4d72-b92f-8d65599f8ee4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-02 05:04:08 +0000 UTC FinishedAt: 2026-07-02 05:40:54 +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:*c3301b7d-4c67-43b8-af1b-c1e25e3bd78e,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-workflowhv2hs/series-workflowhv2hs-convert-artifact-3979706624/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": "cbf4e3a7-b1c7-4184-a916-5a2bf5721aec", "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-workflowhv2hs/series-workflowhv2hs-build-action-3410152390/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhv2hs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_pte_range","guard_remove_pte_entry","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"6435682e-4e6b-4d72-b92f-8d65599f8ee4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-02 05:42:24 +0000 UTC FinishedAt: 2026-07-02 05:42:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhv2hs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_pte_range","guard_remove_pte_entry","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"6435682e-4e6b-4d72-b92f-8d65599f8ee4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-02 05:42:24 +0000 UTC FinishedAt: 2026-07-02 05:42:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhv2hs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_pte_range","guard_remove_pte_entry","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"6435682e-4e6b-4d72-b92f-8d65599f8ee4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-02 05:42:24 +0000 UTC FinishedAt: 2026-07-02 05:42:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhv2hs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_pte_range","guard_remove_pte_entry","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"6435682e-4e6b-4d72-b92f-8d65599f8ee4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-02 05:42:24 +0000 UTC FinishedAt: 2026-07-02 05:42:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"6435682e-4e6b-4d72-b92f-8d65599f8ee4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowhv2hs/series-workflowhv2hs-convert-artifact-2281554599/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhv2hs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_pte_range","guard_remove_pte_entry","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"6435682e-4e6b-4d72-b92f-8d65599f8ee4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-02 05:42:34 +0000 UTC FinishedAt: 2026-07-02 05:44:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhv2hs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_pte_range","guard_remove_pte_entry","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"6435682e-4e6b-4d72-b92f-8d65599f8ee4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-02 05:42:34 +0000 UTC FinishedAt: 2026-07-02 05:44:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cbf4e3a7-b1c7-4184-a916-5a2bf5721aec,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-workflowhv2hs/series-workflowhv2hs-build-action-3410152390/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-workflowhv2hs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_pte_range","guard_remove_pte_entry","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"6435682e-4e6b-4d72-b92f-8d65599f8ee4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-02 05:44:32 +0000 UTC FinishedAt: 2026-07-02 05:44:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhv2hs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_pte_range","guard_remove_pte_entry","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"6435682e-4e6b-4d72-b92f-8d65599f8ee4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-02 05:44:32 +0000 UTC FinishedAt: 2026-07-02 05:44:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhv2hs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_pte_range","guard_remove_pte_entry","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"6435682e-4e6b-4d72-b92f-8d65599f8ee4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-02 05:44:32 +0000 UTC FinishedAt: 2026-07-02 06:07:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhv2hs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_pte_range","guard_remove_pte_entry","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"6435682e-4e6b-4d72-b92f-8d65599f8ee4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-02 05:44:32 +0000 UTC FinishedAt: 2026-07-02 06:07:15 +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:*c3301b7d-4c67-43b8-af1b-c1e25e3bd78e,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-workflowhv2hs/series-workflowhv2hs-convert-artifact-2281554599/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": "2010569e-6809-4750-83bc-cbc3669fe8b1", "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-workflowhv2hs/series-workflowhv2hs-build-action-3629003819/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhv2hs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_pte_range","guard_remove_pte_entry","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"6435682e-4e6b-4d72-b92f-8d65599f8ee4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-02 05:44:32 +0000 UTC FinishedAt: 2026-07-02 06:07:02 +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:*c3301b7d-4c67-43b8-af1b-c1e25e3bd78e,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-workflowhv2hs/series-workflowhv2hs-convert-artifact-2281554599/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": "2010569e-6809-4750-83bc-cbc3669fe8b1", "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-workflowhv2hs/series-workflowhv2hs-build-action-3629003819/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhv2hs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_pte_range","guard_remove_pte_entry","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"6435682e-4e6b-4d72-b92f-8d65599f8ee4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-02 06:07:15 +0000 UTC FinishedAt: 2026-07-02 06:07:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhv2hs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_pte_range","guard_remove_pte_entry","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"6435682e-4e6b-4d72-b92f-8d65599f8ee4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-02 06:07:15 +0000 UTC FinishedAt: 2026-07-02 06:07:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhv2hs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_pte_range","guard_remove_pte_entry","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"6435682e-4e6b-4d72-b92f-8d65599f8ee4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-02 06:07:15 +0000 UTC FinishedAt: 2026-07-02 06:09:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhv2hs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_pte_range","guard_remove_pte_entry","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"6435682e-4e6b-4d72-b92f-8d65599f8ee4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-02 06:07:15 +0000 UTC FinishedAt: 2026-07-02 06:09:21 +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:*2010569e-6809-4750-83bc-cbc3669fe8b1,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-workflowhv2hs/series-workflowhv2hs-build-action-3629003819/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-workflowhv2hs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_pte_range","guard_remove_pte_entry","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"6435682e-4e6b-4d72-b92f-8d65599f8ee4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-02 06:09:32 +0000 UTC FinishedAt: 2026-07-02 06:12:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhv2hs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_pte_range","guard_remove_pte_entry","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"6435682e-4e6b-4d72-b92f-8d65599f8ee4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-02 06:09:32 +0000 UTC FinishedAt: 2026-07-02 06:12:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_pte_range","guard_remove_pte_entry","zap_pte_range"],"skip_cover_check":true},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:*cbf4e3a7-b1c7-4184-a916-5a2bf5721aec,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2010569e-6809-4750-83bc-cbc3669fe8b1,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-workflowhv2hs/series-workflowhv2hs-build-action-3410152390/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-workflowhv2hs/series-workflowhv2hs-build-action-3629003819/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowhv2hs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_pte_range","guard_remove_pte_entry","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"6435682e-4e6b-4d72-b92f-8d65599f8ee4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-02 06:09:32 +0000 UTC FinishedAt: 2026-07-02 06:09:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhv2hs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_pte_range","guard_remove_pte_entry","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"6435682e-4e6b-4d72-b92f-8d65599f8ee4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-02 06:09:32 +0000 UTC FinishedAt: 2026-07-02 06:09:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_pte_range","guard_remove_pte_entry","zap_pte_range"],"skip_cover_check":true},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-workflowhv2hs/series-workflowhv2hs-convert-artifact-393603072/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhv2hs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_pte_range","guard_remove_pte_entry","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"6435682e-4e6b-4d72-b92f-8d65599f8ee4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-02 06:09:32 +0000 UTC FinishedAt: 2026-07-02 06:09:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhv2hs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_pte_range","guard_remove_pte_entry","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"6435682e-4e6b-4d72-b92f-8d65599f8ee4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-02 06:09:32 +0000 UTC FinishedAt: 2026-07-02 06:09:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhv2hs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_pte_range","guard_remove_pte_entry","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"6435682e-4e6b-4d72-b92f-8d65599f8ee4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-02 06:09:32 +0000 UTC FinishedAt: 2026-07-02 06:09:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhv2hs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_pte_range","guard_remove_pte_entry","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"6435682e-4e6b-4d72-b92f-8d65599f8ee4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-02 06:09:55 +0000 UTC FinishedAt: 2026-07-02 06:12:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhv2hs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_pte_range","guard_remove_pte_entry","zap_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["ADVISE_SYSCALLS"],"series_id":"6435682e-4e6b-4d72-b92f-8d65599f8ee4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-02 06:09:55 +0000 UTC FinishedAt: 2026-07-02 06:12:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cbf4e3a7-b1c7-4184-a916-5a2bf5721aec,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2010569e-6809-4750-83bc-cbc3669fe8b1,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-workflowhv2hs/series-workflowhv2hs-build-action-3410152390/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-workflowhv2hs/series-workflowhv2hs-build-action-3629003819/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-workflowhv2hs/series-workflowhv2hs-convert-artifact-393603072/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,}